/** * Централизованная конфигурация приложения Say. * Все секреты — из переменных окружения, без хардкода. */ const PORT = parseInt(process.env.PORT, 10) || 3000; // --- API (единый эндпоинт aillm.ru) --- const API_BASE = process.env.API_BASE || 'https://api.aillm.ru'; const API_KEY = process.env.API_KEY || ''; // --- Whisper --- const WHISPER_URL = process.env.WHISPER_URL || `${API_BASE}/v1/audio/transcriptions`; const WHISPER_MODEL = process.env.WHISPER_MODEL || 'whisper-large-v3'; // --- Три LLM-профиля --- const LLM_PROFILES = [ { id: 'ddm', name: 'DDM-120', description: 'Быстрая модель, общие вопросы', url: process.env.LLM_URL_DDM || `${API_BASE}/v1/chat/completions`, model: process.env.LLM_MODEL_DDM || 'ddm-120', systemPrompt: process.env.LLM_SYSTEM_DDM || 'Ты — полезный ассистент. Отвечай кратко и по делу на том же языке, что и запрос.', temperature: parseFloat(process.env.LLM_TEMP_DDM || '0.7'), maxTokens: parseInt(process.env.LLM_TOKENS_DDM, 10) || 1024, }, { id: 'qwen', name: 'Qwen', description: 'Мощная модель, сложные задачи', url: process.env.LLM_URL_QWEN || `${API_BASE}/v1/chat/completions`, model: process.env.LLM_MODEL_QWEN || 'qwen-plus', systemPrompt: process.env.LLM_SYSTEM_QWEN || 'Ты — эксперт-аналитик. Отвечай развернуто, структурированно, на языке запроса.', temperature: parseFloat(process.env.LLM_TEMP_QWEN || '0.7'), maxTokens: parseInt(process.env.LLM_TOKENS_QWEN, 10) || 2048, }, { id: 'deepseek', name: 'DeepSeek', description: 'Глубокая аналитика, код, рассуждения', url: process.env.LLM_URL_DEEPSEEK || `${API_BASE}/v1/chat/completions`, model: process.env.LLM_MODEL_DEEPSEEK || 'deepseek-chat', systemPrompt: process.env.LLM_SYSTEM_DEEPSEEK || 'Ты — глубокий аналитик и программист. Думай step-by-step, отвечай на языке запроса.', temperature: parseFloat(process.env.LLM_TEMP_DEEPSEEK || '0.7'), maxTokens: parseInt(process.env.LLM_TOKENS_DEEPSEEK, 10) || 4096, }, ]; module.exports = { PORT, API_BASE, API_KEY, WHISPER_URL, WHISPER_MODEL, LLM_PROFILES, };