""" Конфигурация LLM провайдеров Поддержка: OpenAI, OpenRouter, Ollama """ import os from typing import Dict, Optional # ==================== ПРОВАЙДЕРЫ ==================== # OpenAI (через прокси) OPENAI_CONFIG = { 'provider': 'openai', 'api_key': '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', 'api_base': 'https://api.openai.com/v1', 'proxy': 'http://195.133.66.13:3128', # Доступные модели 'models': { 'fast': 'gpt-4o-mini', # Быстрая и дешёвая 'smart': 'gpt-4o', # Умная, дорогая 'chat': 'gpt-4o-mini', # Для чата 'analysis': 'gpt-4o-mini', # Для анализа 'turbo': 'gpt-4-turbo', # Средняя по скорости/качеству 'vision': 'gpt-4o', 'big': 'gpt-4.1-mini', # Для анализа изображений 'embedding': 'text-embedding-3-small' # Для эмбеддингов }, # Параметры по умолчанию 'default_params': { 'temperature': 0.3, 'max_tokens': 800, 'top_p': 1.0 } } # OpenRouter (альтернатива с кучей моделей) OPENROUTER_CONFIG = { 'provider': 'openrouter', 'api_key': os.getenv('OPENROUTER_API_KEY', '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'), 'api_base': 'https://openrouter.ai/api/v1', 'proxy': 'http://195.133.66.13:3128', 'models': { 'fast': 'anthropic/claude-3-haiku', 'smart': 'anthropic/claude-3.5-sonnet', 'chat': 'anthropic/claude-3-haiku', 'analysis': 'anthropic/claude-3.5-sonnet', 'cheap': 'google/gemini-flash-1.5' }, 'default_params': { 'temperature': 0.3, 'max_tokens': 1000 } } # Ollama (локальная модель) OLLAMA_CONFIG = { 'provider': 'ollama', 'api_base': 'http://localhost:11434', 'proxy': None, # Локальная - прокси не нужен 'models': { 'fast': 'llama3.2', 'smart': 'llama3.1:70b', 'chat': 'llama3.2', 'analysis': 'qwen2.5:14b', 'russian': 'saiga_llama3' # Для русского языка }, 'default_params': { 'temperature': 0.3, 'num_predict': 800 } } # ==================== АКТИВНЫЙ ПРОВАЙДЕР ==================== # Выбираем провайдера (меняйте здесь!) ACTIVE_PROVIDER = os.getenv('LLM_PROVIDER', 'openai') # 'openai', 'openrouter', 'ollama' # Выбираем конфигурацию if ACTIVE_PROVIDER == 'openai': CURRENT_CONFIG = OPENAI_CONFIG elif ACTIVE_PROVIDER == 'openrouter': CURRENT_CONFIG = OPENROUTER_CONFIG elif ACTIVE_PROVIDER == 'ollama': CURRENT_CONFIG = OLLAMA_CONFIG else: raise ValueError(f"Unknown provider: {ACTIVE_PROVIDER}") # ==================== НАСТРОЙКИ МОДЕЛЕЙ ==================== # Модель для чата (меняйте здесь для экспериментов!) CHAT_MODEL = os.getenv('CHAT_MODEL', CURRENT_CONFIG['models']['chat']) # Модель для анализа/аудита ANALYSIS_MODEL = os.getenv('ANALYSIS_MODEL', CURRENT_CONFIG['models']['analysis']) # Модель для эмбеддингов EMBEDDING_MODEL = CURRENT_CONFIG['models'].get('embedding', 'text-embedding-3-small') # ==================== ПАРАМЕТРЫ ==================== # Температура (0.0 = детерминированно, 1.0 = креативно) TEMPERATURE = float(os.getenv('LLM_TEMPERATURE', CURRENT_CONFIG['default_params']['temperature'])) # Максимум токенов в ответе MAX_TOKENS = int(os.getenv('LLM_MAX_TOKENS', CURRENT_CONFIG['default_params']['max_tokens'])) # ==================== ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ==================== def get_model_info() -> Dict: """Получить информацию о текущей модели""" return { 'provider': ACTIVE_PROVIDER, 'chat_model': CHAT_MODEL, 'analysis_model': ANALYSIS_MODEL, 'embedding_model': EMBEDDING_MODEL, 'temperature': TEMPERATURE, 'max_tokens': MAX_TOKENS, 'api_base': CURRENT_CONFIG['api_base'], 'uses_proxy': CURRENT_CONFIG.get('proxy') is not None } def get_available_models() -> Dict: """Получить список доступных моделей""" return CURRENT_CONFIG['models'] def switch_model(model_type: str, model_name: str): """Переключить модель (для runtime изменений)""" global CHAT_MODEL, ANALYSIS_MODEL if model_type == 'chat': CHAT_MODEL = model_name elif model_type == 'analysis': ANALYSIS_MODEL = model_name else: raise ValueError(f"Unknown model type: {model_type}") # ==================== КАК ИСПОЛЬЗОВАТЬ ==================== if __name__ == "__main__": import json print("=" * 70) print("🤖 КОНФИГУРАЦИЯ LLM МОДЕЛЕЙ") print("=" * 70) info = get_model_info() print(f"\n📊 ТЕКУЩИЕ НАСТРОЙКИ:") print(f" Провайдер: {info['provider'].upper()}") print(f" Чат: {info['chat_model']}") print(f" Анализ: {info['analysis_model']}") print(f" Эмбеддинги: {info['embedding_model']}") print(f" Temperature: {info['temperature']}") print(f" Max tokens: {info['max_tokens']}") print(f" API: {info['api_base']}") print(f" Прокси: {'✅ Да' if info['uses_proxy'] else '❌ Нет'}") print(f"\n🎯 ДОСТУПНЫЕ МОДЕЛИ ({info['provider'].upper()}):") for key, model in get_available_models().items(): print(f" {key:15} → {model}") print(f"\n💡 КАК ИЗМЕНИТЬ:") print(f" 1. В коде: измените ACTIVE_PROVIDER = 'openai'/'openrouter'/'ollama'") print(f" 2. Через ENV: export LLM_PROVIDER=ollama") print(f" 3. Модель чата: export CHAT_MODEL=gpt-4o") print(f" 4. Temperature: export LLM_TEMPERATURE=0.7") print(f"\n📋 ПРИМЕРЫ:") print(f" # OpenAI GPT-4o-mini (по умолчанию)") print(f" export LLM_PROVIDER=openai") print(f" export CHAT_MODEL=gpt-4o-mini") print(f"\n # OpenRouter с Claude") print(f" export LLM_PROVIDER=openrouter") print(f" export CHAT_MODEL=anthropic/claude-3-haiku") print(f"\n # Локальная Ollama") print(f" export LLM_PROVIDER=ollama") print(f" export CHAT_MODEL=llama3.2") print("=" * 70)