Files
hotels/llm_config.py
Фёдор 0cf3297290 Проект аудита отелей: основные скрипты и документация
- Краулеры: smart_crawler.py, regional_crawler.py
- Аудит: audit_orel_to_excel.py, audit_chukotka_to_excel.py
- РКН проверка: check_rkn_registry.py, recheck_unclear_rkn.py
- Отчёты: create_orel_horizontal_report.py
- Обработка: process_all_hotels_embeddings.py
- Документация: README.md, DB_SCHEMA_REFERENCE.md
2025-10-16 10:52:09 +03:00

192 lines
6.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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