Files
hotels/llm_config.py

192 lines
6.8 KiB
Python
Raw Permalink Normal View History

"""
Конфигурация 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)