#!/usr/bin/env node /** * Скрипт для разогрева модели Ollama * Запускается при старте backend для ускорения первых запросов */ const fetch = require('node-fetch'); const OLLAMA_URL = process.env.OLLAMA_URL || 'http://ollama:11434'; const MODEL_NAME = process.env.OLLAMA_MODEL || 'qwen2.5:7b'; async function warmupModel() { // console.log('🔥 Разогрев модели Ollama...'); try { // Проверяем доступность Ollama const healthResponse = await fetch(`${OLLAMA_URL}/api/tags`); if (!healthResponse.ok) { throw new Error(`Ollama недоступен: ${healthResponse.status}`); } // console.log('✅ Ollama доступен'); // Отправляем простой запрос для разогрева const warmupResponse = await fetch(`${OLLAMA_URL}/v1/chat/completions`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ model: MODEL_NAME, messages: [ { role: 'system', content: 'Ты полезный ассистент.' }, { role: 'user', content: 'Привет! Как дела?' } ], stream: false, options: { temperature: 0.3, num_predict: 50, num_ctx: 512, num_thread: 8, num_gpu: 1, num_gqa: 8, rope_freq_base: 1000000, rope_freq_scale: 0.5, repeat_penalty: 1.1, top_k: 40, top_p: 0.9, }, }), }); if (!warmupResponse.ok) { throw new Error(`Ошибка разогрева: ${warmupResponse.status}`); } const data = await warmupResponse.json(); // console.log('✅ Модель разогрета успешно'); // console.log(`📝 Ответ модели: ${data.choices?.[0]?.message?.content?.substring(0, 100)}...`); } catch (error) { // console.error('❌ Ошибка разогрева модели:', error.message); // Не прерываем запуск приложения } } // Запускаем разогрев с задержкой setTimeout(warmupModel, 5000); module.exports = { warmupModel };