You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-08-24 19:49:22 +02:00
Доработки Ollama
This commit is contained in:
14151
service/dictionaries/en.json
vendored
14151
service/dictionaries/en.json
vendored
File diff suppressed because it is too large
Load Diff
132
src/ru/OInt/core/Modules/OPI_Ollama.os
vendored
132
src/ru/OInt/core/Modules/OPI_Ollama.os
vendored
@@ -47,6 +47,27 @@
|
||||
|
||||
#Область ОбработкаЗапросов
|
||||
|
||||
// Получить версию
|
||||
// Получает версию Ollama
|
||||
//
|
||||
// Примечание:
|
||||
// Метод в документации API: [Version](@github.com/ollama/ollama/blob/main/docs/api.md#version)
|
||||
//
|
||||
// Параметры:
|
||||
// URL - Строка - URL сервера Ollama - url
|
||||
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - Результат обработки
|
||||
Функция ПолучитьВерсию(Знач URL, Знач ДопЗаголовки = "") Экспорт
|
||||
|
||||
ДополнитьURL(URL, "api/version");
|
||||
Ответ = OPI_Инструменты.Get(URL, , ДопЗаголовки);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить ответ
|
||||
// Генерирует ответ по заданному текстовому запросу
|
||||
//
|
||||
@@ -116,6 +137,39 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить представления
|
||||
// Получает представления (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_Инструменты.Post(URL, Параметры, ДопЗаголовки);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить структуру параметров запроса
|
||||
// Получает структуру дополнительных параметров для обработки запроса
|
||||
//
|
||||
@@ -147,6 +201,32 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить структуру параметров представлений
|
||||
// Получает структуру дополнительных параметров для обработки запросов получения представлений
|
||||
//
|
||||
// Параметры:
|
||||
// Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура Из КлючИЗначение - Структура полей
|
||||
Функция ПолучитьСтруктуруПараметровПредставлений(Знач Пустая = Ложь) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);
|
||||
|
||||
СтруктураПолей = Новый Структура;
|
||||
СтруктураПолей.Вставить("options" , "<дополнительные параметры модели, перечисленные в документации к Modelfile>");
|
||||
СтруктураПолей.Вставить("keep_alive", "<как долго модель будет оставаться загруженной в память после запроса>");
|
||||
СтруктураПолей.Вставить("truncate" , "<обрезает конец каждого ответа, чтобы уложиться в длину контекста. Возвращает ошибку, если false и длина превышена>");
|
||||
|
||||
Если Пустая Тогда
|
||||
СтруктураПолей = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураПолей);
|
||||
КонецЕсли;
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат СтруктураПолей;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить структуру параметров в контексте
|
||||
// Получает структуру дополнительных параметров для обработки запроса в контексте
|
||||
//
|
||||
@@ -176,27 +256,24 @@
|
||||
|
||||
// Получить структуру сообщения контекста
|
||||
// Получает структуру сообщения для списка сообщений запроса в контексте
|
||||
//
|
||||
//
|
||||
// Параметры:
|
||||
// Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
|
||||
//
|
||||
// Роль - Строка - Источник сообщения: system, user, assistant, tool - role
|
||||
// Текст - Строка - Текст сообщения - text
|
||||
// Картинки - Массив Из Строка - Список картинок в формате Base64 (для многомодальных моделей, вроде llava) - images
|
||||
// Инструменты - Массив Из Строка - Список инструментов в формате JSON, которые модель должна использовать - tools
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура Из КлючИЗначение - Структура полей
|
||||
Функция ПолучитьСтруктуруСообщенияКонтекста(Знач Пустая = Ложь) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);
|
||||
Функция ПолучитьСтруктуруСообщенияКонтекста(Знач Роль, Знач Текст, Знач Картинки = "", Знач Инструменты = "") Экспорт
|
||||
|
||||
СтруктураПолей = Новый Структура;
|
||||
СтруктураПолей.Вставить("role" , "<источник сообщения: system, user, assistant, tool>");
|
||||
СтруктураПолей.Вставить("content" , "<текст сообщения>");
|
||||
СтруктураПолей.Вставить("images" , "<список картинок в формате Base64 (для многомодальных моделей, вроде llava)>");
|
||||
СтруктураПолей.Вставить("tool_calls", "<список инструментов в формате JSON, которые модель должна использовать>");
|
||||
|
||||
OPI_Инструменты.ДобавитьПоле("role" , Роль , "Строка" , СтруктураПолей);
|
||||
OPI_Инструменты.ДобавитьПоле("content" , Текст , "Строка" , СтруктураПолей);
|
||||
OPI_Инструменты.ДобавитьПоле("images" , Картинки , "Коллекция", СтруктураПолей);
|
||||
OPI_Инструменты.ДобавитьПоле("tool_calls", Инструменты, "Коллекция", СтруктураПолей);
|
||||
|
||||
Если Пустая Тогда
|
||||
СтруктураПолей = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураПолей);
|
||||
КонецЕсли;
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат СтруктураПолей;
|
||||
|
||||
КонецФункции
|
||||
@@ -229,6 +306,30 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить список запущенных моделей
|
||||
// Получает список запущенных моделей
|
||||
//
|
||||
// Примечание:
|
||||
// Метод в документации 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_Инструменты.Get(URL, , ДопЗаголовки);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить информацию о модели
|
||||
// Получает информацию о выбранной модели
|
||||
//
|
||||
@@ -485,5 +586,4 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
#КонецОбласти
|
||||
|
105
src/ru/OInt/tests/Modules/internal/OPI_Тесты.os
vendored
105
src/ru/OInt/tests/Modules/internal/OPI_Тесты.os
vendored
@@ -2574,11 +2574,14 @@
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Ollama_URL" , ПараметрыТеста);
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Ollama_Token", ПараметрыТеста);
|
||||
|
||||
Ollama_ПолучитьВерсию(ПараметрыТеста);
|
||||
Ollama_ПолучитьОтвет(ПараметрыТеста);
|
||||
Ollama_ПолучитьПредставления(ПараметрыТеста);
|
||||
Ollama_ПолучитьОтветВКонтексте(ПараметрыТеста);
|
||||
Ollama_ПолучитьСтруктуруПараметровЗапроса(ПараметрыТеста);
|
||||
Ollama_ПолучитьСтруктуруПараметровВКонтексте(ПараметрыТеста);
|
||||
Ollama_ПолучитьСтруктуруСообщенияКонтекста(ПараметрыТеста);
|
||||
Ollama_ПолучитьСтруктуруПараметровПредставлений(ПараметрыТеста);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@@ -2593,8 +2596,10 @@
|
||||
Ollama_СоздатьМодель(ПараметрыТеста);
|
||||
Ollama_ПолучитьИнформациюОМодели(ПараметрыТеста);
|
||||
Ollama_ПолучитьСписокМоделей(ПараметрыТеста);
|
||||
Ollama_ПолучитьСписокЗапущенныхМоделей(ПараметрыТеста);
|
||||
Ollama_КопироватьМодель(ПараметрыТеста);
|
||||
Ollama_УдалитьМодель(ПараметрыТеста);
|
||||
Ollama_ПолучитьСтруктуруНастроекМодели(ПараметрыТеста);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@@ -20542,8 +20547,8 @@
|
||||
|
||||
МассивСообщений = Новый Массив;
|
||||
|
||||
Вопрос1 = Новый Структура("role,content", "user", "What is 1C:Enterprise?");
|
||||
Вопрос2 = Новый Структура("role,content", "user", "When the first version was released?"); // Вопрос без конкретики
|
||||
Вопрос1 = OPI_Ollama.ПолучитьСтруктуруСообщенияКонтекста("user", "What is 1C:Enterprise?");
|
||||
Вопрос2 = OPI_Ollama.ПолучитьСтруктуруСообщенияКонтекста("user", "When the first version was released?"); // Вопрос без конкретики
|
||||
|
||||
// Добавляем первый вопрос в контекст
|
||||
МассивСообщений.Добавить(Вопрос1);
|
||||
@@ -20686,22 +20691,33 @@
|
||||
|
||||
Процедура Ollama_ПолучитьСтруктуруСообщенияКонтекста(ПараметрыФункции)
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьСтруктуруСообщенияКонтекста();
|
||||
Результат = OPI_Ollama.ПолучитьСтруктуруСообщенияКонтекста("user", "Hello!");
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтруктуруСообщенияКонтекста", "Ollama");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Структура(Результат);
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьСтруктуруСообщенияКонтекста(Истина);
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтруктуруСообщенияКонтекста (пустая)", "Ollama");
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Ollama_ПолучитьСтруктуруНастроекМодели(ПараметрыФункции)
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьСтруктуруНастроекМодели();
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтруктуруНастроекМодели", "Ollama");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Структура(Результат);
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьСтруктуруНастроекМодели(Истина);
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтруктуруНастроекМодели (пустая)", "Ollama");
|
||||
|
||||
Для Каждого Элемент Из Результат Цикл
|
||||
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Пусто(Элемент.Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Ollama_СоздатьМодель(ПараметрыФункции)
|
||||
@@ -20766,6 +20782,23 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Ollama_ПолучитьСписокЗапущенныхМоделей(ПараметрыФункции)
|
||||
|
||||
URL = ПараметрыФункции["Ollama_URL"];
|
||||
Токен = ПараметрыФункции["Ollama_Token"]; // Авторизация - не часть API Ollama
|
||||
|
||||
ДопЗаголовки = Новый Соответствие;
|
||||
ДопЗаголовки.Вставить("Authorization", СтрШаблон("Bearer %1", Токен));
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьСписокЗапущенныхМоделей(URL, ДопЗаголовки);
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокЗапущенныхМоделей", "Ollama");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_OllamaМодели(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Ollama_ПолучитьИнформациюОМодели(ПараметрыФункции)
|
||||
|
||||
URL = ПараметрыФункции["Ollama_URL"];
|
||||
@@ -20807,6 +20840,66 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Ollama_ПолучитьВерсию(ПараметрыФункции)
|
||||
|
||||
URL = ПараметрыФункции["Ollama_URL"];
|
||||
Токен = ПараметрыФункции["Ollama_Token"]; // Авторизация - не часть API Ollama
|
||||
|
||||
ДопЗаголовки = Новый Соответствие;
|
||||
ДопЗаголовки.Вставить("Authorization", СтрШаблон("Bearer %1", Токен));
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьВерсию(URL, ДопЗаголовки);
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьВерсию", "Ollama");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_OllamaВерсия(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Ollama_ПолучитьПредставления(ПараметрыФункции)
|
||||
|
||||
URL = ПараметрыФункции["Ollama_URL"];
|
||||
Токен = ПараметрыФункции["Ollama_Token"]; // Авторизация - не часть API Ollama
|
||||
|
||||
МассивСтрок = Новый Массив;
|
||||
МассивСтрок.Добавить("Why is the sky blue?");
|
||||
МассивСтрок.Добавить("Why is the grass green?");
|
||||
|
||||
Модель = "tinyllama";
|
||||
|
||||
ДопЗаголовки = Новый Соответствие;
|
||||
ДопЗаголовки.Вставить("Authorization", СтрШаблон("Bearer %1", Токен));
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьПредставления(URL, Модель, МассивСтрок, , ДопЗаголовки);
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьПредставления", "Ollama");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_OllamaОтвет(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Ollama_ПолучитьСтруктуруПараметровПредставлений(ПараметрыФункции)
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьСтруктуруПараметровПредставлений();
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтруктуруПараметровПредставлений", "Ollama");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Структура(Результат);
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьСтруктуруПараметровПредставлений(Истина);
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтруктуруПараметровПредставлений (пустая)", "Ollama");
|
||||
|
||||
Для Каждого Элемент Из Результат Цикл
|
||||
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Пусто(Элемент.Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
@@ -2377,6 +2377,12 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Проверка_OllamaВерсия(Знач Результат) Экспорт
|
||||
|
||||
ОжидаетЧто(Результат["version"]).Заполнено();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
@@ -2413,9 +2419,9 @@
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьОбщийМодуль(Знач Имя)
|
||||
|
||||
|
||||
Модуль = Вычислить(Имя);
|
||||
|
||||
|
||||
Возврат Модуль;
|
||||
КонецФункции
|
||||
|
||||
|
@@ -47,6 +47,27 @@
|
||||
|
||||
#Область ОбработкаЗапросов
|
||||
|
||||
// Получить версию
|
||||
// Получает версию Ollama
|
||||
//
|
||||
// Примечание:
|
||||
// Метод в документации API: [Version](@github.com/ollama/ollama/blob/main/docs/api.md#version)
|
||||
//
|
||||
// Параметры:
|
||||
// URL - Строка - URL сервера Ollama - url
|
||||
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - Результат обработки
|
||||
Функция ПолучитьВерсию(Знач URL, Знач ДопЗаголовки = "") Экспорт
|
||||
|
||||
ДополнитьURL(URL, "api/version");
|
||||
Ответ = OPI_Инструменты.Get(URL, , ДопЗаголовки);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить ответ
|
||||
// Генерирует ответ по заданному текстовому запросу
|
||||
//
|
||||
@@ -116,6 +137,39 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить представления
|
||||
// Получает представления (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_Инструменты.Post(URL, Параметры, ДопЗаголовки);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить структуру параметров запроса
|
||||
// Получает структуру дополнительных параметров для обработки запроса
|
||||
//
|
||||
@@ -147,6 +201,32 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить структуру параметров представлений
|
||||
// Получает структуру дополнительных параметров для обработки запросов получения представлений
|
||||
//
|
||||
// Параметры:
|
||||
// Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура Из КлючИЗначение - Структура полей
|
||||
Функция ПолучитьСтруктуруПараметровПредставлений(Знач Пустая = Ложь) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);
|
||||
|
||||
СтруктураПолей = Новый Структура;
|
||||
СтруктураПолей.Вставить("options" , "<дополнительные параметры модели, перечисленные в документации к Modelfile>");
|
||||
СтруктураПолей.Вставить("keep_alive", "<как долго модель будет оставаться загруженной в память после запроса>");
|
||||
СтруктураПолей.Вставить("truncate" , "<обрезает конец каждого ответа, чтобы уложиться в длину контекста. Возвращает ошибку, если false и длина превышена>");
|
||||
|
||||
Если Пустая Тогда
|
||||
СтруктураПолей = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураПолей);
|
||||
КонецЕсли;
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат СтруктураПолей;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить структуру параметров в контексте
|
||||
// Получает структуру дополнительных параметров для обработки запроса в контексте
|
||||
//
|
||||
@@ -176,27 +256,24 @@
|
||||
|
||||
// Получить структуру сообщения контекста
|
||||
// Получает структуру сообщения для списка сообщений запроса в контексте
|
||||
//
|
||||
//
|
||||
// Параметры:
|
||||
// Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
|
||||
//
|
||||
// Роль - Строка - Источник сообщения: system, user, assistant, tool - role
|
||||
// Текст - Строка - Текст сообщения - text
|
||||
// Картинки - Массив Из Строка - Список картинок в формате Base64 (для многомодальных моделей, вроде llava) - images
|
||||
// Инструменты - Массив Из Строка - Список инструментов в формате JSON, которые модель должна использовать - tools
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура Из КлючИЗначение - Структура полей
|
||||
Функция ПолучитьСтруктуруСообщенияКонтекста(Знач Пустая = Ложь) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);
|
||||
Функция ПолучитьСтруктуруСообщенияКонтекста(Знач Роль, Знач Текст, Знач Картинки = "", Знач Инструменты = "") Экспорт
|
||||
|
||||
СтруктураПолей = Новый Структура;
|
||||
СтруктураПолей.Вставить("role" , "<источник сообщения: system, user, assistant, tool>");
|
||||
СтруктураПолей.Вставить("content" , "<текст сообщения>");
|
||||
СтруктураПолей.Вставить("images" , "<список картинок в формате Base64 (для многомодальных моделей, вроде llava)>");
|
||||
СтруктураПолей.Вставить("tool_calls", "<список инструментов в формате JSON, которые модель должна использовать>");
|
||||
|
||||
OPI_Инструменты.ДобавитьПоле("role" , Роль , "Строка" , СтруктураПолей);
|
||||
OPI_Инструменты.ДобавитьПоле("content" , Текст , "Строка" , СтруктураПолей);
|
||||
OPI_Инструменты.ДобавитьПоле("images" , Картинки , "Коллекция", СтруктураПолей);
|
||||
OPI_Инструменты.ДобавитьПоле("tool_calls", Инструменты, "Коллекция", СтруктураПолей);
|
||||
|
||||
Если Пустая Тогда
|
||||
СтруктураПолей = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураПолей);
|
||||
КонецЕсли;
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат СтруктураПолей;
|
||||
|
||||
КонецФункции
|
||||
@@ -229,6 +306,30 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить список запущенных моделей
|
||||
// Получает список запущенных моделей
|
||||
//
|
||||
// Примечание:
|
||||
// Метод в документации 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_Инструменты.Get(URL, , ДопЗаголовки);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить информацию о модели
|
||||
// Получает информацию о выбранной модели
|
||||
//
|
||||
@@ -485,5 +586,4 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
#КонецОбласти
|
||||
|
@@ -2377,6 +2377,12 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Проверка_OllamaВерсия(Знач Результат) Экспорт
|
||||
|
||||
ОжидаетЧто(Результат["version"]).Заполнено();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
105
src/ru/OPI/src/CommonModules/OPI_Тесты/Module.bsl
vendored
105
src/ru/OPI/src/CommonModules/OPI_Тесты/Module.bsl
vendored
@@ -2574,11 +2574,14 @@
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Ollama_URL" , ПараметрыТеста);
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Ollama_Token", ПараметрыТеста);
|
||||
|
||||
Ollama_ПолучитьВерсию(ПараметрыТеста);
|
||||
Ollama_ПолучитьОтвет(ПараметрыТеста);
|
||||
Ollama_ПолучитьПредставления(ПараметрыТеста);
|
||||
Ollama_ПолучитьОтветВКонтексте(ПараметрыТеста);
|
||||
Ollama_ПолучитьСтруктуруПараметровЗапроса(ПараметрыТеста);
|
||||
Ollama_ПолучитьСтруктуруПараметровВКонтексте(ПараметрыТеста);
|
||||
Ollama_ПолучитьСтруктуруСообщенияКонтекста(ПараметрыТеста);
|
||||
Ollama_ПолучитьСтруктуруПараметровПредставлений(ПараметрыТеста);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@@ -2593,8 +2596,10 @@
|
||||
Ollama_СоздатьМодель(ПараметрыТеста);
|
||||
Ollama_ПолучитьИнформациюОМодели(ПараметрыТеста);
|
||||
Ollama_ПолучитьСписокМоделей(ПараметрыТеста);
|
||||
Ollama_ПолучитьСписокЗапущенныхМоделей(ПараметрыТеста);
|
||||
Ollama_КопироватьМодель(ПараметрыТеста);
|
||||
Ollama_УдалитьМодель(ПараметрыТеста);
|
||||
Ollama_ПолучитьСтруктуруНастроекМодели(ПараметрыТеста);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@@ -20542,8 +20547,8 @@
|
||||
|
||||
МассивСообщений = Новый Массив;
|
||||
|
||||
Вопрос1 = Новый Структура("role,content", "user", "What is 1C:Enterprise?");
|
||||
Вопрос2 = Новый Структура("role,content", "user", "When the first version was released?"); // Вопрос без конкретики
|
||||
Вопрос1 = OPI_Ollama.ПолучитьСтруктуруСообщенияКонтекста("user", "What is 1C:Enterprise?");
|
||||
Вопрос2 = OPI_Ollama.ПолучитьСтруктуруСообщенияКонтекста("user", "When the first version was released?"); // Вопрос без конкретики
|
||||
|
||||
// Добавляем первый вопрос в контекст
|
||||
МассивСообщений.Добавить(Вопрос1);
|
||||
@@ -20686,22 +20691,33 @@
|
||||
|
||||
Процедура Ollama_ПолучитьСтруктуруСообщенияКонтекста(ПараметрыФункции)
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьСтруктуруСообщенияКонтекста();
|
||||
Результат = OPI_Ollama.ПолучитьСтруктуруСообщенияКонтекста("user", "Hello!");
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтруктуруСообщенияКонтекста", "Ollama");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Структура(Результат);
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьСтруктуруСообщенияКонтекста(Истина);
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтруктуруСообщенияКонтекста (пустая)", "Ollama");
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Ollama_ПолучитьСтруктуруНастроекМодели(ПараметрыФункции)
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьСтруктуруНастроекМодели();
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтруктуруНастроекМодели", "Ollama");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Структура(Результат);
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьСтруктуруНастроекМодели(Истина);
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтруктуруНастроекМодели (пустая)", "Ollama");
|
||||
|
||||
Для Каждого Элемент Из Результат Цикл
|
||||
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Пусто(Элемент.Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Ollama_СоздатьМодель(ПараметрыФункции)
|
||||
@@ -20766,6 +20782,23 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Ollama_ПолучитьСписокЗапущенныхМоделей(ПараметрыФункции)
|
||||
|
||||
URL = ПараметрыФункции["Ollama_URL"];
|
||||
Токен = ПараметрыФункции["Ollama_Token"]; // Авторизация - не часть API Ollama
|
||||
|
||||
ДопЗаголовки = Новый Соответствие;
|
||||
ДопЗаголовки.Вставить("Authorization", СтрШаблон("Bearer %1", Токен));
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьСписокЗапущенныхМоделей(URL, ДопЗаголовки);
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокЗапущенныхМоделей", "Ollama");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_OllamaМодели(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Ollama_ПолучитьИнформациюОМодели(ПараметрыФункции)
|
||||
|
||||
URL = ПараметрыФункции["Ollama_URL"];
|
||||
@@ -20807,6 +20840,66 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Ollama_ПолучитьВерсию(ПараметрыФункции)
|
||||
|
||||
URL = ПараметрыФункции["Ollama_URL"];
|
||||
Токен = ПараметрыФункции["Ollama_Token"]; // Авторизация - не часть API Ollama
|
||||
|
||||
ДопЗаголовки = Новый Соответствие;
|
||||
ДопЗаголовки.Вставить("Authorization", СтрШаблон("Bearer %1", Токен));
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьВерсию(URL, ДопЗаголовки);
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьВерсию", "Ollama");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_OllamaВерсия(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Ollama_ПолучитьПредставления(ПараметрыФункции)
|
||||
|
||||
URL = ПараметрыФункции["Ollama_URL"];
|
||||
Токен = ПараметрыФункции["Ollama_Token"]; // Авторизация - не часть API Ollama
|
||||
|
||||
МассивСтрок = Новый Массив;
|
||||
МассивСтрок.Добавить("Why is the sky blue?");
|
||||
МассивСтрок.Добавить("Why is the grass green?");
|
||||
|
||||
Модель = "tinyllama";
|
||||
|
||||
ДопЗаголовки = Новый Соответствие;
|
||||
ДопЗаголовки.Вставить("Authorization", СтрШаблон("Bearer %1", Токен));
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьПредставления(URL, Модель, МассивСтрок, , ДопЗаголовки);
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьПредставления", "Ollama");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_OllamaОтвет(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Ollama_ПолучитьСтруктуруПараметровПредставлений(ПараметрыФункции)
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьСтруктуруПараметровПредставлений();
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтруктуруПараметровПредставлений", "Ollama");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Структура(Результат);
|
||||
|
||||
Результат = OPI_Ollama.ПолучитьСтруктуруПараметровПредставлений(Истина);
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтруктуруПараметровПредставлений (пустая)", "Ollama");
|
||||
|
||||
Для Каждого Элемент Из Результат Цикл
|
||||
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Пусто(Элемент.Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
Reference in New Issue
Block a user