fix: структура под платформу — код в site/, requirements.txt в корне
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
"""
|
||||
Централизованная конфигурация приложения Say.
|
||||
|
||||
Все настройки читаются из переменных окружения с разумными значениями по умолчанию.
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
# =============================================================================
|
||||
# API — единый эндпоинт (aillm.ru)
|
||||
# =============================================================================
|
||||
|
||||
API_BASE = os.environ.get("API_BASE", "https://api.aillm.ru")
|
||||
API_KEY = os.environ.get("API_KEY", "") # ⚠️ Без ключа — только через env!
|
||||
|
||||
# =============================================================================
|
||||
# Whisper (распознавание речи)
|
||||
# =============================================================================
|
||||
|
||||
WHISPER_URL = os.environ.get(
|
||||
"WHISPER_URL",
|
||||
f"{API_BASE}/v1/audio/transcriptions",
|
||||
)
|
||||
WHISPER_KEY = os.environ.get("WHISPER_KEY", API_KEY)
|
||||
WHISPER_MODEL = os.environ.get("WHISPER_MODEL", "whisper-large-v3")
|
||||
|
||||
# =============================================================================
|
||||
# Три LLM-профиля — каждый со своим именем, моделью и системным промптом
|
||||
# =============================================================================
|
||||
|
||||
LLM_PROFILES = [
|
||||
{
|
||||
"id": "ddm",
|
||||
"name": "DDM-120",
|
||||
"description": "Быстрая модель, общие вопросы",
|
||||
"url": os.environ.get("LLM_URL_DDM", f"{API_BASE}/v1/chat/completions"),
|
||||
"key": os.environ.get("LLM_KEY_DDM", API_KEY),
|
||||
"model": os.environ.get("LLM_MODEL_DDM", "ddm-120"),
|
||||
"system_prompt": os.environ.get(
|
||||
"LLM_SYSTEM_DDM",
|
||||
"Ты — полезный ассистент. Отвечай кратко и по делу на том же языке, что и запрос.",
|
||||
),
|
||||
"temperature": float(os.environ.get("LLM_TEMP_DDM", "0.7")),
|
||||
"max_tokens": int(os.environ.get("LLM_TOKENS_DDM", "1024")),
|
||||
},
|
||||
{
|
||||
"id": "qwen",
|
||||
"name": "Qwen",
|
||||
"description": "Мощная модель, сложные задачи",
|
||||
"url": os.environ.get("LLM_URL_QWEN", f"{API_BASE}/v1/chat/completions"),
|
||||
"key": os.environ.get("LLM_KEY_QWEN", API_KEY),
|
||||
"model": os.environ.get("LLM_MODEL_QWEN", "qwen-plus"),
|
||||
"system_prompt": os.environ.get(
|
||||
"LLM_SYSTEM_QWEN",
|
||||
"Ты — эксперт-аналитик. Отвечай развернуто, структурированно, на языке запроса.",
|
||||
),
|
||||
"temperature": float(os.environ.get("LLM_TEMP_QWEN", "0.7")),
|
||||
"max_tokens": int(os.environ.get("LLM_TOKENS_QWEN", "2048")),
|
||||
},
|
||||
{
|
||||
"id": "deepseek",
|
||||
"name": "DeepSeek",
|
||||
"description": "Глубокая аналитика, код, рассуждения",
|
||||
"url": os.environ.get("LLM_URL_DEEPSEEK", f"{API_BASE}/v1/chat/completions"),
|
||||
"key": os.environ.get("LLM_KEY_DEEPSEEK", API_KEY),
|
||||
"model": os.environ.get("LLM_MODEL_DEEPSEEK", "deepseek-chat"),
|
||||
"system_prompt": os.environ.get(
|
||||
"LLM_SYSTEM_DEEPSEEK",
|
||||
"Ты — глубокий аналитик и программист. Думай step-by-step, отвечай на языке запроса.",
|
||||
),
|
||||
"temperature": float(os.environ.get("LLM_TEMP_DEEPSEEK", "0.7")),
|
||||
"max_tokens": int(os.environ.get("LLM_TOKENS_DEEPSEEK", "4096")),
|
||||
},
|
||||
]
|
||||
|
||||
# =============================================================================
|
||||
# Flask
|
||||
# =============================================================================
|
||||
|
||||
FLASK_HOST = os.environ.get("HOST", "0.0.0.0")
|
||||
FLASK_PORT = int(os.environ.get("PORT", "5000"))
|
||||
|
||||
# =============================================================================
|
||||
# Логирование
|
||||
# =============================================================================
|
||||
|
||||
LOG_LEVEL = os.environ.get("LOG_LEVEL", "INFO")
|
||||
Reference in New Issue
Block a user