feat: новая функция
This commit is contained in:
82
backend/utils/ollamaRequestBuilder.js
Normal file
82
backend/utils/ollamaRequestBuilder.js
Normal file
@@ -0,0 +1,82 @@
|
||||
/**
|
||||
* Copyright (c) 2024-2025 Тарабанов Александр Викторович
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is proprietary and confidential.
|
||||
* Unauthorized copying, modification, or distribution is prohibited.
|
||||
*
|
||||
* For licensing inquiries: info@hb3-accelerator.com
|
||||
* Website: https://hb3-accelerator.com
|
||||
* GitHub: https://github.com/VC-HB3-Accelerator
|
||||
*/
|
||||
|
||||
/**
|
||||
* Ollama Request Builder
|
||||
* Утилита для формирования тела запроса к Ollama API
|
||||
* Устраняет дублирование кода между ragService.js и ai-queue.js
|
||||
*/
|
||||
|
||||
/**
|
||||
* Построить тело запроса для Ollama API
|
||||
* @param {Object} options - Опции запроса
|
||||
* @param {Array} options.messages - Массив сообщений для LLM
|
||||
* @param {string} options.model - Название модели (опционально, будет использован дефолтный)
|
||||
* @param {Object} options.llmParameters - Параметры LLM (temperature, maxTokens, top_p, top_k, repeat_penalty)
|
||||
* @param {Object} options.qwenParameters - Специфичные параметры qwen (format)
|
||||
* @param {string} options.defaultModel - Дефолтная модель (если model не указан)
|
||||
* @param {Array} options.tools - Массив определений функций для function calling (опционально)
|
||||
* @param {string} options.tool_choice - Выбор функции ("auto", "none", или конкретная функция) (опционально)
|
||||
* @param {boolean} options.stream - Потоковая передача (по умолчанию false)
|
||||
* @returns {Object} Тело запроса для Ollama API
|
||||
*/
|
||||
function buildOllamaRequest(options = {}) {
|
||||
const {
|
||||
messages,
|
||||
model,
|
||||
llmParameters,
|
||||
qwenParameters,
|
||||
defaultModel,
|
||||
tools = null,
|
||||
tool_choice = null,
|
||||
stream = false
|
||||
} = options;
|
||||
|
||||
if (!messages || !Array.isArray(messages)) {
|
||||
throw new Error('messages обязателен и должен быть массивом');
|
||||
}
|
||||
|
||||
if (!llmParameters) {
|
||||
throw new Error('llmParameters обязателен');
|
||||
}
|
||||
|
||||
// Формируем базовое тело запроса
|
||||
const requestBody = {
|
||||
model: model || defaultModel,
|
||||
messages: messages,
|
||||
stream: stream,
|
||||
// Общие параметры LLM
|
||||
temperature: llmParameters.temperature,
|
||||
num_predict: llmParameters.maxTokens, // Ollama использует num_predict вместо maxTokens
|
||||
top_p: llmParameters.top_p,
|
||||
top_k: llmParameters.top_k,
|
||||
repeat_penalty: llmParameters.repeat_penalty
|
||||
};
|
||||
|
||||
// Добавляем специфичные параметры qwen (если они заданы)
|
||||
if (qwenParameters && qwenParameters.format !== null && qwenParameters.format !== undefined) {
|
||||
requestBody.format = qwenParameters.format;
|
||||
}
|
||||
|
||||
// Добавляем tools для function calling (если переданы)
|
||||
if (tools && Array.isArray(tools) && tools.length > 0) {
|
||||
requestBody.tools = tools;
|
||||
requestBody.tool_choice = tool_choice || "auto";
|
||||
}
|
||||
|
||||
return requestBody;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
buildOllamaRequest
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user