Запуск модели Ollama с конфигурационным файлом JSON из NODE.JS

Полноценный пример создания запроса из NODE.JS с подключением внешнего файла настроек JSON

JavaScript/Node.js пример с полными параметрами

Установите зависимости:

npm init -y
npm install axios

ollama-client.js:

const axios = require('axios');

class OllamaClient {
    constructor(baseURL = 'http://localhost:11434') {
        this.baseURL = baseURL;
        this.context = null;
    }

    /**
     * Генерация текста с полным набором параметров
     */
    async generate({
        prompt,
        model = 'qwen3:4b',
        stream = false,
        format = 'text',
        temperature = 0.7,
        top_p = 0.9,
        top_k = 40,
        num_predict = 256,
        stop = ['\n', '###'],
        repeat_penalty = 1.1,
        presence_penalty = 0.0,
        frequency_penalty = 0.0,
        seed = null,
        mirostat = 0,
        mirostat_tau = 5.0,
        mirostat_eta = 0.1,
        num_ctx = 2048,
        num_thread = 8,
        template = null,
        useContext = true
    }) {
        const payload = {
            model,
            prompt,
            stream,
            format,
            options: {
                temperature,
                top_p,
                top_k,
                num_predict,
                stop,
                repeat_penalty,
                presence_penalty,
                frequency_penalty,
                mirostat,
                mirostat_tau,
                mirostat_eta,
                num_ctx,
                num_thread
            }
        };

        // Добавляем опциональные параметры
        if (seed !== null) {
            payload.options.seed = seed;
        }

        if (template) {
            payload.template = template;
        }

        if (useContext && this.context) {
            payload.context = this.context;
        }

        try {
            const response = await axios.post(`${this.baseURL}/api/generate`, payload, {
                timeout: 30000
            });

            // Сохраняем контекст для следующего запроса
            if (useContext && response.data.context) {
                this.context = response.data.context;
            }

            return response.data;

        } catch (error) {
            console.error('Ошибка запроса:', error.message);
            return { error: error.message };
        }
    }

    /**
     * Чат-интерфейс с поддержкой истории
     */
    async chat(messages, model = 'qwen3:4b', options = {}) {
        try {
            const response = await axios.post(`${this.baseURL}/api/chat`, {
                model,
                messages,
                stream: false,
                options
            }, {
                timeout: 30000
            });

            return response.data;

        } catch (error) {
            console.error('Ошибка чата:', error.message);
            return { error: error.message };
        }
    }

    /**
     * Очистить контекст
     */
    clearContext() {
        this.context = null;
    }

    /**
     * Сохранить контекст в файл
     */
    async saveContext(filename) {
        const fs = require('fs').promises;
        try {
            await fs.writeFile(filename, JSON.stringify(this.context, null, 2));
            console.log(`Контекст сохранен в ${filename}`);
        } catch (error) {
            console.error('Ошибка сохранения контекста:', error.message);
        }
    }

    /**
     * Загрузить контекст из файла
     */
    async loadContext(filename) {
        const fs = require('fs').promises;
        try {
            const data = await fs.readFile(filename, 'utf8');
            this.context = JSON.parse(data);
            console.log(`Контекст загружен из ${filename}`);
        } catch (error) {
            console.error('Ошибка загрузки контекста:', error.message);
        }
    }
}

// Пример использования
async function main() {
    const client = new OllamaClient();

    // Пример 1: Простая генерация
    console.log('=== Пример 1: Простая генерация ===');
    const result1 = await client.generate({
        prompt: 'Расскажи о JavaScript и его особенностях',
        model: 'qwen3:4b',
        temperature: 0.7,
        top_p: 0.9,
        num_predict: 200,
        seed: 42,
        format: 'text'
    });

    console.log('Ответ:', result1.response || result1.error);

    // Пример 2: Продолжение с контекстом
    console.log('\n=== Пример 2: Продолжение с контекстом ===');
    const result2 = await client.generate({
        prompt: 'А какие современные фреймворки используются?',
        temperature: 0.5,
        top_p: 0.8
    });

    console.log('Ответ:', result2.response || result2.error);

    // Пример 3: Чат с историей
    console.log('\n=== Пример 3: Чат-интерфейс ===');
    const chatResult = await client.chat([
        { role: 'user', content: 'Привет! Расскажи о Node.js' },
        { role: 'assistant', content: 'Node.js - это JavaScript runtime...' },
        { role: 'user', content: 'Какие пакеты самые популярные?' }
    ], 'qwen3:4b', {
        temperature: 0.6,
        top_p: 0.85
    });

    console.log('Чат ответ:', chatResult.message?.content || chatResult.error);

    // Пример 4: Сохранение и загрузка контекста
    await client.saveContext('context.json');
    client.clearContext();
    await client.loadContext('context.json');

    // Пример 5: Генерация кода с специфическими параметрами
    console.log('\n=== Пример 5: Генерация кода ===');
    const codeResult = await client.generate({
        prompt: 'Напиши простой HTTP сервер на Node.js',
        temperature: 0.3,
        top_p: 0.7,
        num_predict: 300,
        seed: 12345,
        format: 'code',
        stop: ['```']
    });

    console.log('Сгенерированный код:');
    console.log(codeResult.response || codeResult.error);
}

// Запуск примера
main().catch(console.error);

package.json для JavaScript:

{
  "name": "ollama-client",
  "version": "1.0.0",
  "description": "Ollama client with full parameters support",
  "main": "ollama-client.js",
  "scripts": {
    "start": "node ollama-client.js",
    "dev": "node ollama-client.js"
  },
  "dependencies": {
    "axios": "^1.6.0"
  },
  "keywords": ["ollama", "ai", "llm", "javascript"],
  "author": "Your Name",
  "license": "MIT"
}