You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-11-25 22:12:29 +02:00
732 lines
42 KiB
Plaintext
732 lines
42 KiB
Plaintext
|
|
// OneScript: ./OInt/core/Modules/OPI_Ollama.os
|
||
|
|
// Lib: Ollama
|
||
|
|
// CLI: ollama
|
||
|
|
|
||
|
|
// MIT License
|
||
|
|
|
||
|
|
// Copyright (c) 2023-2025 Anton Tsitavets
|
||
|
|
|
||
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
|
// of this software and associated documentation files (the "Software"), to deal
|
||
|
|
// in the Software without restriction, including without limitation the rights
|
||
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
|
// copies of the Software, and to permit persons to whom the Software is
|
||
|
|
// furnished to do so, subject to the following conditions:
|
||
|
|
|
||
|
|
// The above copyright notice and this permission notice shall be included in all
|
||
|
|
// copies or substantial portions of the Software.
|
||
|
|
|
||
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
|
// SOFTWARE.
|
||
|
|
|
||
|
|
// https://github.com/Bayselonarrend/OpenIntegrations
|
||
|
|
|
||
|
|
// BSLLS:Typo-off
|
||
|
|
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||
|
|
// BSLLS:IncorrectLineBreak-off
|
||
|
|
// BSLLS:NumberOfOptionalParams-off
|
||
|
|
// BSLLS:UsingServiceTag-off
|
||
|
|
// BSLLS:LineLength-off
|
||
|
|
// BSLLS:UsingSynchronousCalls-off
|
||
|
|
// BSLLS:MagicNumber-off
|
||
|
|
|
||
|
|
//@skip-check module-structure-top-region
|
||
|
|
//@skip-check module-structure-method-in-regions
|
||
|
|
//@skip-check wrong-string-literal-content
|
||
|
|
//@skip-check method-too-many-params
|
||
|
|
//@skip-check constructor-function-return-section
|
||
|
|
//@skip-check doc-comment-collection-item-type
|
||
|
|
|
||
|
|
#Область ПрограммныйИнтерфейс
|
||
|
|
|
||
|
|
#Область ОбработкаЗапросов
|
||
|
|
|
||
|
|
// Получить версию
|
||
|
|
// Получает версию Ollama
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Version](@github.com/ollama/ollama/blob/main/docs/api.md#version)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьВерсию(Знач URL, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/version");
|
||
|
|
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, , ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить ответ
|
||
|
|
// Генерирует ответ по заданному текстовому запросу
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Generate a completion](@github.com/ollama/ollama/blob/main/docs/api.md#generate-a-completion)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// Вопрос - Строка - Текст запроса - prompt
|
||
|
|
// ДопПараметры - Структура Из КлючИЗначение - Доп. параметры. См. ПолучитьСтруктуруПараметровЗапроса - options
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьОтвет(Знач URL, Знач Модель, Знач Вопрос, Знач ДопПараметры = "", Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/generate");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
Параметры.Вставить("suffix", "");
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model" , Модель, "Строка", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("prompt", Вопрос, "Строка", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("stream", Ложь , "Булево", Параметры);
|
||
|
|
|
||
|
|
ОбработатьПараметры(Параметры, ДопПараметры);
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить ответ в контексте
|
||
|
|
// Получает очередной ответ от модели в соответствии с историей сообщений
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Generate a chat completion](@github.com/ollama/ollama/blob/main/docs/api.md#generate-a-chat-completion)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// Сообщения - Массив Из Структура - История сообщений. См. ПолучитьСтруктуруСообщенияКонтекста - msgs
|
||
|
|
// ДопПараметры - Структура Из КлючИЗначение - Доп. параметры. См. ПолучитьСтруктуруПараметровЗапроса - options
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьОтветВКонтексте(Знач URL, Знач Модель, Знач Сообщения, Знач ДопПараметры = "", Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/chat");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model" , Модель , "Строка" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("messages", Сообщения, "Коллекция", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("stream" , Ложь , "Булево" , Параметры);
|
||
|
|
|
||
|
|
ОбработатьПараметры(Параметры, ДопПараметры);
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить представления
|
||
|
|
// Получает представления (embeddings) для заданных вводных
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Generate Embeddings](@github.com/ollama/ollama/blob/main/docs/api.md#generate-embeddings)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// Вопрос - Массив Из Строка - Строка или массив строк запросов - input
|
||
|
|
// ДопПараметры - Структура Из КлючИЗначение - Доп. параметры. См. ПолучитьСтруктуруПараметровПредставлений - options
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьПредставления(Знач URL, Знач Модель, Знач Вопрос, Знач ДопПараметры = "", Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/embed");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model", Модель, "Строка", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("input", Вопрос, "Строка", Параметры);
|
||
|
|
|
||
|
|
ОбработатьПараметры(Параметры, ДопПараметры);
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить структуру параметров запроса
|
||
|
|
// Получает структуру дополнительных параметров для обработки запроса
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Структура Из КлючИЗначение - Структура полей
|
||
|
|
Функция ПолучитьСтруктуруПараметровЗапроса(Знач Пустая = Ложь) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);
|
||
|
|
|
||
|
|
СтруктураПолей = Новый Структура;
|
||
|
|
СтруктураПолей.Вставить("format" , "<формат, в котором возвращается ответ: json или схема JSON>");
|
||
|
|
СтруктураПолей.Вставить("options" , "<дополнительные параметры модели, перечисленные в документации к Modelfile>");
|
||
|
|
СтруктураПолей.Вставить("system" , "<системное сообщение (переопределяет то, что определено в Modelfile)>");
|
||
|
|
СтруктураПолей.Вставить("template" , "<шаблон промпта (переопределяет то, что определено в Modelfile)>");
|
||
|
|
СтруктураПолей.Вставить("raw" , "<истина > откюлчить форматирование промпта>");
|
||
|
|
СтруктураПолей.Вставить("keep_alive", "<как долго модель будет оставаться загруженной в память после запроса>");
|
||
|
|
СтруктураПолей.Вставить("suffix" , "<текст после ответа модели>");
|
||
|
|
СтруктураПолей.Вставить("images" , "<список картинок в формате Base64 (для многомодальных моделей, вроде llava)>");
|
||
|
|
|
||
|
|
Если Пустая Тогда
|
||
|
|
СтруктураПолей = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураПолей);
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
//@skip-check constructor-function-return-section
|
||
|
|
Возврат СтруктураПолей;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить структуру параметров представлений
|
||
|
|
// Получает структуру дополнительных параметров для обработки запросов получения представлений
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Структура Из КлючИЗначение - Структура полей
|
||
|
|
Функция ПолучитьСтруктуруПараметровПредставлений(Знач Пустая = Ложь) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);
|
||
|
|
|
||
|
|
СтруктураПолей = Новый Структура;
|
||
|
|
СтруктураПолей.Вставить("options" , "<дополнительные параметры модели, перечисленные в документации к Modelfile>");
|
||
|
|
СтруктураПолей.Вставить("keep_alive", "<как долго модель будет оставаться загруженной в память после запроса>");
|
||
|
|
СтруктураПолей.Вставить("truncate" , "<обрезает конец каждого ответа, чтобы уложиться в длину контекста. Возвращает ошибку, если false и длина превышена>");
|
||
|
|
|
||
|
|
Если Пустая Тогда
|
||
|
|
СтруктураПолей = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураПолей);
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
//@skip-check constructor-function-return-section
|
||
|
|
Возврат СтруктураПолей;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить структуру параметров в контексте
|
||
|
|
// Получает структуру дополнительных параметров для обработки запроса в контексте
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Структура Из КлючИЗначение - Структура полей
|
||
|
|
Функция ПолучитьСтруктуруПараметровВКонтексте(Знач Пустая = Ложь) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);
|
||
|
|
|
||
|
|
СтруктураПолей = Новый Структура;
|
||
|
|
СтруктураПолей.Вставить("format" , "<формат, в котором возвращается ответ: json или схема JSON>");
|
||
|
|
СтруктураПолей.Вставить("options" , "<дополнительные параметры модели, перечисленные в документации к Modelfile>");
|
||
|
|
СтруктураПолей.Вставить("keep_alive", "<как долго модель будет оставаться загруженной в память после запроса>");
|
||
|
|
СтруктураПолей.Вставить("tools" , "<список инструментов в формате JSON (для моделей, которые это поддерживают)>");
|
||
|
|
|
||
|
|
Если Пустая Тогда
|
||
|
|
СтруктураПолей = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураПолей);
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
//@skip-check constructor-function-return-section
|
||
|
|
Возврат СтруктураПолей;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить структуру сообщения контекста
|
||
|
|
// Получает структуру сообщения для списка сообщений запроса в контексте
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Роль - Строка - Источник сообщения: system, user, assistant, tool - role
|
||
|
|
// Текст - Строка - Текст сообщения - text
|
||
|
|
// Картинки - Массив Из Строка - Список картинок в формате Base64 (для многомодальных моделей, вроде llava) - images
|
||
|
|
// Инструменты - Массив Из Строка - Список инструментов в формате JSON, которые модель должна использовать - tools
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Структура Из КлючИЗначение - Структура полей
|
||
|
|
Функция ПолучитьСтруктуруСообщенияКонтекста(Знач Роль, Знач Текст, Знач Картинки = "", Знач Инструменты = "") Экспорт
|
||
|
|
|
||
|
|
СтруктураПолей = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("role" , Роль , "Строка" , СтруктураПолей);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("content" , Текст , "Строка" , СтруктураПолей);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("images" , Картинки , "Коллекция", СтруктураПолей);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("tool_calls", Инструменты, "Коллекция", СтруктураПолей);
|
||
|
|
|
||
|
|
Возврат СтруктураПолей;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#Область РаботаСМоделями
|
||
|
|
|
||
|
|
// Получить список моделей
|
||
|
|
// Получает список локальных моделей
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [List Local Models](@github.com/ollama/ollama/blob/main/docs/api.md#list-local-models)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьСписокМоделей(Знач URL, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/tags");
|
||
|
|
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, , ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить список запущенных моделей
|
||
|
|
// Получает список запущенных моделей
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [List Running Models](@github.com/ollama/ollama/blob/main/docs/api.md#list-running-models)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьСписокЗапущенныхМоделей(Знач URL, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/ps");
|
||
|
|
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, , ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить информацию о модели
|
||
|
|
// Получает информацию о выбранной модели
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Show Model Information](@github.com/ollama/ollama/blob/main/docs/api.md#show-model-information)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// Подробно - Булево - Возврат полной информации о модели - verbose
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьИнформациюОМодели(Знач URL, Знач Модель, Знач Подробно = Истина, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/show");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model" , Модель , "Строка", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("verbose", Подробно, "Булево", Параметры);
|
||
|
|
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Создать модель
|
||
|
|
// Создает новую модель с заданными настройками
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Create a Model](@github.com/ollama/ollama/blob/main/docs/api.md#create-a-model)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// Настройки - Структура Из КлючИЗначение - Настройки модели. См. ПолучитьСтруктуруНастроекМодели - settings
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция СоздатьМодель(Знач URL, Знач Модель, Знач Настройки, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/create");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model" , Модель, "Строка" , Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("stream", Ложь , "Булево" , Параметры);
|
||
|
|
|
||
|
|
ОбработатьПараметры(Параметры, Настройки);
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Копировать модель
|
||
|
|
// Копирует существующую модель
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Copy a Model](@github.com/ollama/ollama/blob/main/docs/api.md#copy-a-model)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// Модель - Строка - Имя существующей модели - model
|
||
|
|
// Имя - Строка - Имя новой модели - name
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция КопироватьМодель(Знач URL, Знач Модель, Знач Имя, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/copy");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("source" , Модель, "Строка", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("destination", Имя , "Строка", Параметры);
|
||
|
|
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки, , Истина);
|
||
|
|
Ответ = Новый Структура("status_code", Ответ.КодСостояния);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Удалить модель
|
||
|
|
// Удаляет существующую модель
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Delete a Model](@github.com/ollama/ollama/blob/main/docs/api.md#delete-a-model)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция УдалитьМодель(Знач URL, Знач Модель, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/delete");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model" , Модель, "Строка", Параметры);
|
||
|
|
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.DeleteСТелом(URL, Параметры, ДопЗаголовки, , Истина);
|
||
|
|
Ответ = Новый Структура("status_code", Ответ.КодСостояния);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Загрузить модель в память
|
||
|
|
// Загружает выбранную модель в оперативную память
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Load a model](@github.com/ollama/ollama/blob/main/docs/api.md#load-a-model)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// Период - Число - Время удержания модели в памяти в секундах - keep
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ЗагрузитьМодельВПамять(Знач URL, Знач Модель, Знач Период = 300, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/generate");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model" , Модель, "Строка", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("keep_alive", Период, "Число" , Параметры);
|
||
|
|
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Выгрузить модель из памяти
|
||
|
|
// Выгружает выбранную модель из памяти
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Unload a model](@github.com/ollama/ollama/blob/main/docs/api.md#unload-a-model)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ВыгрузитьМодельИзПамяти(Знач URL, Знач Модель, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/generate");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
Параметры.Вставить("keep_alive", 0);
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model", Модель, "Строка", Параметры);
|
||
|
|
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Отправить модель
|
||
|
|
// Загружает модель в библиотеку моделей
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Push a Model](@github.com/ollama/ollama/blob/main/docs/api.md#push-a-model)
|
||
|
|
// Имя модели должно быть в формате <namespace>/<model>:<tag>^
|
||
|
|
// Требуется регистрация на ollama.ai и добавление открытого ключа.
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// Небезопасно - Булево - Разрешает незащищенное соединение с библиотекой - insecure
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ОтправитьМодель(Знач URL, Знач Модель, Знач Небезопасно = Ложь, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/push");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model" , Модель , "Строка", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("insecure", Небезопасно, "Булево", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("stream" , Ложь , "Булево", Параметры);
|
||
|
|
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Скачать модель
|
||
|
|
// Скачивает модель из библиотеки
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Pull a Model](@github.com/ollama/ollama/blob/main/docs/api.md#pull-a-model)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// Небезопасно - Булево - Разрешает незащищенное соединение с библиотекой - insecure
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция СкачатьМодель(Знач URL, Знач Модель, Знач Небезопасно = Ложь, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/pull");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model" , Модель , "Строка", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("insecure", Небезопасно, "Булево", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("stream" , Ложь , "Булево", Параметры);
|
||
|
|
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить структуру настроек модели
|
||
|
|
// Получает структуру настроек для создания новой модели
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Структура Из КлючИЗначение - Структура полей
|
||
|
|
Функция ПолучитьСтруктуруНастроекМодели(Знач Пустая = Ложь) Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);
|
||
|
|
|
||
|
|
СтруктураПолей = Новый Структура;
|
||
|
|
СтруктураПолей.Вставить("from" , "<имя существующей модели, из которой будет создана новая>");
|
||
|
|
СтруктураПолей.Вставить("files" , "<список имен файлов или SHA256 блобов, из которых будет создана модель>");
|
||
|
|
СтруктураПолей.Вставить("adapters" , "<список имен файлов или SHA256 блобов для LORA адаптеров>");
|
||
|
|
СтруктураПолей.Вставить("template" , "<шаблон промптов новой модели>");
|
||
|
|
СтруктураПолей.Вставить("license" , "<строка или список строк текста лицензий для модели>");
|
||
|
|
СтруктураПолей.Вставить("system" , "<строка с системным промптом для модели>");
|
||
|
|
СтруктураПолей.Вставить("parameters", "<список параметров модели>");
|
||
|
|
СтруктураПолей.Вставить("messages" , "<список объектов сообщений контекста>");
|
||
|
|
СтруктураПолей.Вставить("quantize" , "<квантовать неквантованную (например, float16) модель>");
|
||
|
|
|
||
|
|
Если Пустая Тогда
|
||
|
|
СтруктураПолей = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураПолей);
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
//@skip-check constructor-function-return-section
|
||
|
|
Возврат СтруктураПолей;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#Область РаботаСBlob
|
||
|
|
|
||
|
|
// Отправить BLOB
|
||
|
|
// Отправляет двоичные данные на сервер Ollama
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Push a Blob](@github.com/ollama/ollama/blob/main/docs/api.md#push-a-blob)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// Данные - Строка, ДвоичныеДанные - Данные или путь к файлу - data
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ОтправитьBlob(Знач URL, Знач Данные, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Данные, Истина);
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/blobs/sha256:%1");
|
||
|
|
|
||
|
|
Хеш = OPI_Криптография.Хеш(Данные, ХешФункция.SHA256);
|
||
|
|
Хеш = нРег(ПолучитьHexСтрокуИзДвоичныхДанных(Хеш));
|
||
|
|
|
||
|
|
URL = СтрШаблон(URL, Хеш);
|
||
|
|
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
Ответ = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||
|
|
.Инициализировать(URL)
|
||
|
|
.УстановитьДвоичноеТело(Данные)
|
||
|
|
.УстановитьЗаголовки(ДопЗаголовки)
|
||
|
|
.ОбработатьЗапрос("POST")
|
||
|
|
.ВернутьОтвет(Ложь, Истина);
|
||
|
|
|
||
|
|
Ответ = Новый Структура("status_code,digest", Ответ.КодСостояния, Хеш);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Проверить BLOB
|
||
|
|
// Проверяет существование BLOB по его SHA256 дайджесту
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Check if a Blob Exists](@github.com/ollama/ollama/blob/main/docs/api.md#check-if-a-blob-exists)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера Ollama - url
|
||
|
|
// SHA256 - Строка - SHA256 дайджест нужного BLOB - digest
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПроверитьBlob(Знач URL, Знач SHA256, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(SHA256);
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "api/blobs/sha256:%1");
|
||
|
|
|
||
|
|
URL = СтрШаблон(URL, SHA256);
|
||
|
|
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Head(URL, , ДопЗаголовки, , Истина);
|
||
|
|
Ответ = Новый Структура("status_code", Ответ.КодСостояния);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#Область СлужебныеПроцедурыИФункции
|
||
|
|
|
||
|
|
Процедура ДополнитьURL(URL, Знач Путь)
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
|
||
|
|
|
||
|
|
URL = ?(СтрЗаканчиваетсяНа(URL, "/"), URL, URL + "/");
|
||
|
|
URL = URL + Путь;
|
||
|
|
|
||
|
|
КонецПроцедуры
|
||
|
|
|
||
|
|
Процедура ОбработатьПараметры(Параметры, Знач ДопПараметры)
|
||
|
|
|
||
|
|
Если Не ЗначениеЗаполнено(ДопПараметры) Тогда
|
||
|
|
Возврат;
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
ТекстОшибки = "Передана некорректная коллекция доп. параметров!";
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(ДопПараметры, ТекстОшибки);
|
||
|
|
|
||
|
|
Для Каждого ДопПараметр Из ДопПараметры Цикл
|
||
|
|
Параметры.Вставить(ДопПараметр.Ключ, ДопПараметр.Значение);
|
||
|
|
КонецЦикла;
|
||
|
|
|
||
|
|
КонецПроцедуры
|
||
|
|
|
||
|
|
Процедура ОбработатьЗаголовки(ДопЗаголовки)
|
||
|
|
|
||
|
|
Если Не ЗначениеЗаполнено(ДопЗаголовки) Тогда
|
||
|
|
ДопЗаголовки = Новый Соответствие;
|
||
|
|
Иначе
|
||
|
|
ТекстОшибки = "Передана некорректная коллекция доп. заголовков!";
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(ДопЗаголовки, ТекстОшибки);
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
КонецПроцедуры
|
||
|
|
|
||
|
|
#КонецОбласти
|