1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2026-06-20 09:19:27 +02:00

Main build (Jenkins)

This commit is contained in:
Vitaly the Alpaca (bot)
2025-04-07 22:38:12 +03:00
parent f21fd1ebba
commit 16ad3e21ae
33 changed files with 7336 additions and 6597 deletions
+60 -2
View File
@@ -1601,9 +1601,51 @@ jobs:
key: logs-GreenAPI
path: ./docs/ru/results/GreenAPI
Testing-Ollama:
runs-on: ubuntu-latest
needs: [Decode, Build]
steps:
- uses: actions/checkout@v2
- uses: otymko/setup-onescript@v1.4
with:
version: 1.9.1
- name: Получить тестовые данные из кэша
uses: actions/cache/restore@v3
with:
key: test-data
path: ./data.json
- name: Установить asserts и 1testrunner
run: |
opm install asserts
opm install 1testrunner
- name: Установить OInt
run: |
TEMP_DEB="$(mktemp)" &&
wget -O "$TEMP_DEB" 'https://api.athenaeum.digital/tc/job/Release/lastSuccessfulBuild/artifact/1.22.0/oint_1.22.0_all_ru.deb' &&
sudo dpkg -i "$TEMP_DEB"
rm -f "$TEMP_DEB"
- name: Обработка запросов
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_ТестыCLI.os "CLI_OLLM_ОбработкаЗапросов"
- name: Записать логи
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
key: logs-Ollama
path: ./docs/ru/results/Ollama
Encode:
runs-on: ubuntu-latest
needs: [Testing-Telegram,Testing-VK,Testing-Viber,Testing-Twitter,Testing-PostgreSQL,Testing-MySQL,Testing-SQLite,Testing-RCON,Testing-YandexDisk,Testing-GoogleWorkspace,Testing-GoogleCalendar,Testing-GoogleDrive,Testing-GoogleSheets,Testing-Notion,Testing-Slack,Testing-Airtable,Testing-Dropbox,Testing-Bitrix24,Testing-VkTeams,Testing-Ozon,Testing-Neocities,Testing-CDEK,Testing-YandexMetrika,Testing-S3,Testing-TCP,Testing-GreenAPI]
needs: [Testing-Telegram,Testing-VK,Testing-Viber,Testing-Twitter,Testing-PostgreSQL,Testing-MySQL,Testing-SQLite,Testing-RCON,Testing-YandexDisk,Testing-GoogleWorkspace,Testing-GoogleCalendar,Testing-GoogleDrive,Testing-GoogleSheets,Testing-Notion,Testing-Slack,Testing-Airtable,Testing-Dropbox,Testing-Bitrix24,Testing-VkTeams,Testing-Ozon,Testing-Neocities,Testing-CDEK,Testing-YandexMetrika,Testing-S3,Testing-TCP,Testing-GreenAPI,Testing-Ollama]
if: ${{ always() }}
permissions:
contents: write
@@ -2047,6 +2089,22 @@ jobs:
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-GreenAPI"
- name: Получить логи Ollama
uses: actions/cache/restore@v3
with:
key: logs-Ollama
path: ./docs/ru/results/Ollama
- name: Очистка логов Ollama
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-Ollama"
- name: Записать данные
uses: stefanzweifel/git-auto-commit-action@v5
@@ -2059,7 +2117,7 @@ jobs:
Clear-Cache:
runs-on: ubuntu-latest
needs: [Testing-Telegram, Testing-VK, Testing-Viber, Testing-Twitter, Testing-PostgreSQL, Testing-MySQL, Testing-SQLite, Testing-RCON, Testing-YandexDisk, Testing-GoogleWorkspace, Testing-GoogleCalendar, Testing-GoogleDrive, Testing-GoogleSheets, Testing-Notion, Testing-Slack, Testing-Airtable, Testing-Dropbox, Testing-Bitrix24, Testing-VkTeams, Testing-Ozon, Testing-Neocities, Testing-CDEK, Testing-YandexMetrika, Testing-S3, Testing-TCP, Testing-GreenAPI, Encode]
needs: [Testing-Telegram, Testing-VK, Testing-Viber, Testing-Twitter, Testing-PostgreSQL, Testing-MySQL, Testing-SQLite, Testing-RCON, Testing-YandexDisk, Testing-GoogleWorkspace, Testing-GoogleCalendar, Testing-GoogleDrive, Testing-GoogleSheets, Testing-Notion, Testing-Slack, Testing-Airtable, Testing-Dropbox, Testing-Bitrix24, Testing-VkTeams, Testing-Ozon, Testing-Neocities, Testing-CDEK, Testing-YandexMetrika, Testing-S3, Testing-TCP, Testing-GreenAPI, Testing-Ollama, Encode]
if: ${{ always() }}
steps:
- name: Очистка основного кэша
+11
View File
@@ -766,6 +766,17 @@ pipeline {
}
}
stage('Testing-Ollama') {
steps {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'1testrunner -run "./src/ru/OInt/tests/Modules/internal/OPI_ТестыCLI.os" "CLI_OLLM_ОбработкаЗапросов"'
}
}
}
}
post{
always{
+16
View File
@@ -76,6 +76,11 @@ pipeline {
test_notion()
}
}
stage('ollama'){
steps{
test_ollama()
}
}
stage('ozon'){
steps{
test_ozon()
@@ -1768,6 +1773,16 @@ def test_notion(){
}
def test_ollama(){
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe ollama ProcessRequest --url "test" --model "test" --prompt "test" --options "test" --headers "test" --debug --test '
}
}
def test_ozon(){
@@ -3210,6 +3225,7 @@ test_greenapi()
test_mysql()
test_neocities()
test_notion()
test_ollama()
test_ozon()
test_postgres()
test_rcon()
+16
View File
@@ -76,6 +76,11 @@ pipeline {
test_notion()
}
}
stage('ollama'){
steps{
test_ollama()
}
}
stage('ozon'){
steps{
test_ozon()
@@ -1768,6 +1773,16 @@ def test_notion(){
}
def test_ollama(){
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe ollama ОбработатьЗапрос --url "test" --model "test" --prompt "test" --options "test" --headers "test" --debug --test '
}
}
def test_ozon(){
@@ -3210,6 +3225,7 @@ test_greenapi()
test_mysql()
test_neocities()
test_notion()
test_ollama()
test_ozon()
test_postgres()
test_rcon()
Vendored
+11
View File
@@ -766,6 +766,17 @@ pipeline {
}
}
stage('Testing-Ollama') {
steps {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'1testrunner -run "./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os" "OLLM_ОбработкаЗапросов"'
}
}
}
}
post{
always{
+4
View File
@@ -0,0 +1,4 @@
{
"URL": "https://api.athenaeum.digital/ollama",
"Token": "10KO..."
}
+10
View File
@@ -0,0 +1,10 @@
URL = "https://api.athenaeum.digital/ollama";
Token = "10KO..."; // Authorization - not part API Ollama
Prompt = "What is 1C:Enterprise?";
Model = "tinyllama";
AdditionalHeaders = New Map;
AdditionalHeaders.Insert("Authorization", StrTemplate("Bearer %1", Token));
Result = OPI_Ollama.ProcessRequest(URL, Model, Prompt, , AdditionalHeaders);
@@ -0,0 +1,51 @@
---
sidebar_position: 1
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Process request
Generates a response for a given text query
`Function ProcessRequest(Val URL, Val Model, Val Prompt, Val AdditionalParameters = "", Val AdditionalHeaders = "") Export`
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| URL | --url | String | ✔ | Ollama server URL |
| Model | --model | String | ✔ | Models name |
| Prompt | --prompt | String | ✔ | Request text |
| AdditionalParameters | --options | Structure Of KeyAndValue | ✖ | Additional parameters. See GetRequestParametersStructure |
| AdditionalHeaders | --headers | Map Of KeyAndValue | ✖ | Additional request headers, if necessary |
Returns: Map Of KeyAndValue - Processing result
<br/>
:::tip
Method at API documentation: [Generate a completion](https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-completion)
:::
<br/>
```bsl title="1C:Enterprise/OneScript code example"
URL = "https://api.athenaeum.digital/ollama";
Token = "10KO..."; // Authorization - not part API Ollama
Prompt = "What is 1C:Enterprise?";
Model = "tinyllama";
AdditionalHeaders = New Map;
AdditionalHeaders.Insert("Authorization", StrTemplate("Bearer %1", Token));
Result = OPI_Ollama.ProcessRequest(URL, Model, Prompt, , AdditionalHeaders);
```
+4
View File
@@ -0,0 +1,4 @@
{
"label": "Requests processing",
"position": "2"
}
@@ -0,0 +1,4 @@
{
"URL": "https://api.athenaeum.digital/ollama",
"Токен": "10KO..."
}
@@ -0,0 +1,10 @@
URL = "https://api.athenaeum.digital/ollama";
Токен = "10KO..."; // Авторизация - не часть API Ollama
Промпт = "What is 1C:Enterprise?";
Модель = "tinyllama";
ДопЗаголовки = Новый Соответствие;
ДопЗаголовки.Вставить("Authorization", СтрШаблон("Bearer %1", Токен));
Результат = OPI_Ollama.ОбработатьЗапрос(URL, Модель, Промпт, , ДопЗаголовки);
@@ -0,0 +1,51 @@
---
sidebar_position: 1
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Обработать запрос
Генерирует ответ по заданному текстовому запросу
`Функция ОбработатьЗапрос(Знач URL, Знач Модель, Знач Промпт, Знач ДопПараметры = "", Знач ДопЗаголовки = "") Экспорт`
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| URL | --url | Строка | &#x2714; | URL сервера Ollama |
| Модель | --model | Строка | &#x2714; | Имя модели |
| Промпт | --prompt | Строка | &#x2714; | Текст запроса |
| ДопПараметры | --options | Структура Из КлючИЗначение | &#x2716; | Доп. параметры. См. ПолучитьСтруктуруПараметровЗапроса |
| ДопЗаголовки | --headers | Соответствие Из КлючИЗначение | &#x2716; | Доп заголовки запроса, если необходимо |
Возвращаемое значение: Соответствие Из КлючИЗначение - Результат обработки
<br/>
:::tip
Метод в документации API: [Generate a completion](https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-completion)
:::
<br/>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
URL = "https://api.athenaeum.digital/ollama";
Токен = "10KO..."; // Авторизация - не часть API Ollama
Промпт = "What is 1C:Enterprise?";
Модель = "tinyllama";
ДопЗаголовки = Новый Соответствие;
ДопЗаголовки.Вставить("Authorization", СтрШаблон("Bearer %1", Токен));
Результат = OPI_Ollama.ОбработатьЗапрос(URL, Модель, Промпт, , ДопЗаголовки);
```
+4
View File
@@ -0,0 +1,4 @@
{
"label": "Обработка запросов",
"position": "2"
}
+6537 -6537
View File
File diff suppressed because it is too large Load Diff
+122
View File
@@ -0,0 +1,122 @@
// 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
//@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
// Uncomment if OneScript is executed
#Use "../../tools"
#Region Public
#Region RequestsProcessing
// Process request
// Generates a response for a given text query
//
// Note
// Method at API documentation: [Generate a completion](@github.com/ollama/ollama/blob/main/docs/api.md#generate-a-completion)
//
// Parameters:
// URL - String - Ollama server URL - url
// Model - String - Models name - model
// Prompt - String - Request text - prompt
// AdditionalParameters - Structure Of KeyAndValue - Additional parameters. See GetRequestParametersStructure - options
// AdditionalHeaders - Map Of KeyAndValue - Additional request headers, if necessary - headers
//
// Returns:
// Map Of KeyAndValue - Processing result
Function ProcessRequest(Val URL, Val Model, Val Prompt, Val AdditionalParameters = "", Val AdditionalHeaders = "") Export
CompleteURL(URL, "api/generate");
Parameters = New Structure;
Parameters.Insert("suffix", "");
OPI_Tools.AddField("model" , Model , "String" , Parameters);
OPI_Tools.AddField("prompt", Prompt, "String" , Parameters);
OPI_Tools.AddField("stream", False , "Boolean", Parameters);
ProcessParameters(Parameters, AdditionalParameters);
HeadersProcessing(AdditionalHeaders);
Response = OPI_Tools.Post(URL, Parameters, AdditionalHeaders);
Return Response;
EndFunction
#EndRegion
Procedure CompleteURL(URL, Val Path)
OPI_TypeConversion.GetLine(URL);
URL = ?(StrEndsWith(URL, "/"), URL, URL + "/");
URL = URL + Path;
EndProcedure
Procedure ProcessParameters(Parameters, Val AdditionalParameters)
If Not ValueIsFilled(AdditionalParameters) Then
Return;
EndIf;
ErrorText = "An incorrect collection of additional parameters has been passed!";
OPI_TypeConversion.GetKeyValueCollection(AdditionalParameters, ErrorText);
For Each AdditionalParameter In AdditionalParameters Do
Parameters.Insert(AdditionalParameter.Key, AdditionalParameter.Value);
EndDo;
EndProcedure
Procedure HeadersProcessing(AdditionalHeaders)
If Not ValueIsFilled(AdditionalHeaders) Then
AdditionalHeaders = New Map;
Else
ErrorText = "An incorrect collection of additional headers has been passed!";
OPI_TypeConversion.GetKeyValueCollection(AdditionalHeaders, ErrorText);
EndIf;
EndProcedure
#EndRegion
+1
View File
@@ -11,6 +11,7 @@
<module name="OPI_MySQL" file="core/Modules/OPI_MySQL.os"/>
<module name="OPI_Neocities" file="core/Modules/OPI_Neocities.os"/>
<module name="OPI_Notion" file="core/Modules/OPI_Notion.os"/>
<module name="OPI_Ollama" file="core/Modules/OPI_Ollama.os"/>
<module name="OPI_Ozon" file="core/Modules/OPI_Ozon.os"/>
<module name="OPI_PostgreSQL" file="core/Modules/OPI_PostgreSQL.os"/>
<module name="OPI_RCON" file="core/Modules/OPI_RCON.os"/>
+38
View File
@@ -2566,6 +2566,20 @@ EndProcedure
#EndRegion
#Region Ollama
Procedure OLLM_RequestsProcessing() Export
TestParameters = New Structure;
OPI_TestDataRetrieval.ParameterToCollection("Ollama_URL" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("Ollama_Token", TestParameters);
Ollama_ProcessRequest(TestParameters);
EndProcedure
#EndRegion
#EndRegion
#EndRegion
@@ -20446,6 +20460,30 @@ EndProcedure
#EndRegion
#Region Ollama
Procedure Ollama_ProcessRequest(FunctionParameters)
URL = FunctionParameters["Ollama_URL"];
Token = FunctionParameters["Ollama_Token"]; // Authorization - not part API Ollama
Prompt = "What is 1C:Enterprise?";
Model = "tinyllama";
AdditionalHeaders = New Map;
AdditionalHeaders.Insert("Authorization", StrTemplate("Bearer %1", Token));
Result = OPI_Ollama.ProcessRequest(URL, Model, Prompt, , AdditionalHeaders);
// END
OPI_TestDataRetrieval.WriteLog(Result, "ProcessRequest", "Ollama");
OPI_TestDataRetrieval.Check_OllamaResponse(Result);
EndProcedure
#EndRegion
#EndRegion
#EndRegion
+12
View File
@@ -76,6 +76,7 @@ Function GetTestingSectionMapping() Export
Sections.Insert("S3" , 5);
Sections.Insert("TCP" , 5);
Sections.Insert("GreenAPI" , 5);
Sections.Insert("Ollama" , 5);
Return Sections;
@@ -113,6 +114,7 @@ Function GetTestingSectionMappingGA() Export
Sections.Insert("S3" , StandardDependencies);
Sections.Insert("TCP" , StandardDependencies);
Sections.Insert("GreenAPI" , StandardDependencies);
Sections.Insert("Ollama" , StandardDependencies);
Return Sections;
@@ -146,6 +148,7 @@ Function GetTestTable() Export
GreenAPI = "GreenAPI";
RCON = "RCON";
MySQL = "MySQL";
Ollama = "Ollama";
TestTable = New ValueTable;
TestTable.Columns.Add("Method");
@@ -294,6 +297,7 @@ Function GetTestTable() Export
NewTest(TestTable, "GAPI_MessageLogs" , "Message logs" , GreenAPI);
NewTest(TestTable, "GAPI_Account" , "Account" , GreenAPI);
NewTest(TestTable, "RC_CommandsExecution" , "Commands execution" , RCON);
NewTest(TestTable, "OLLM_RequestsProcessing" , "Requests processing" , Ollama);
Return TestTable;
@@ -2318,6 +2322,14 @@ Procedure Check_GreenQueueClearing(Val Result) Export
EndProcedure
Procedure Check_OllamaResponse(Val Result, Val Completed = True) Export
ExpectsThat(Result["model"]).Заполнено();
ExpectsThat(Result["response"]).Заполнено();
ExpectsThat(Result["done"]).Равно(Completed);
EndProcedure
#EndRegion
#EndRegion
+122
View File
@@ -0,0 +1,122 @@
// 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
//@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
// Uncomment if OneScript is executed
// #Use "../../tools"
#Region Public
#Region RequestsProcessing
// Process request
// Generates a response for a given text query
//
// Note
// Method at API documentation: [Generate a completion](@github.com/ollama/ollama/blob/main/docs/api.md#generate-a-completion)
//
// Parameters:
// URL - String - Ollama server URL - url
// Model - String - Models name - model
// Prompt - String - Request text - prompt
// AdditionalParameters - Structure Of KeyAndValue - Additional parameters. See GetRequestParametersStructure - options
// AdditionalHeaders - Map Of KeyAndValue - Additional request headers, if necessary - headers
//
// Returns:
// Map Of KeyAndValue - Processing result
Function ProcessRequest(Val URL, Val Model, Val Prompt, Val AdditionalParameters = "", Val AdditionalHeaders = "") Export
CompleteURL(URL, "api/generate");
Parameters = New Structure;
Parameters.Insert("suffix", "");
OPI_Tools.AddField("model" , Model , "String" , Parameters);
OPI_Tools.AddField("prompt", Prompt, "String" , Parameters);
OPI_Tools.AddField("stream", False , "Boolean", Parameters);
ProcessParameters(Parameters, AdditionalParameters);
HeadersProcessing(AdditionalHeaders);
Response = OPI_Tools.Post(URL, Parameters, AdditionalHeaders);
Return Response;
EndFunction
#EndRegion
Procedure CompleteURL(URL, Val Path)
OPI_TypeConversion.GetLine(URL);
URL = ?(StrEndsWith(URL, "/"), URL, URL + "/");
URL = URL + Path;
EndProcedure
Procedure ProcessParameters(Parameters, Val AdditionalParameters)
If Not ValueIsFilled(AdditionalParameters) Then
Return;
EndIf;
ErrorText = "An incorrect collection of additional parameters has been passed!";
OPI_TypeConversion.GetKeyValueCollection(AdditionalParameters, ErrorText);
For Each AdditionalParameter In AdditionalParameters Do
Parameters.Insert(AdditionalParameter.Key, AdditionalParameter.Value);
EndDo;
EndProcedure
Procedure HeadersProcessing(AdditionalHeaders)
If Not ValueIsFilled(AdditionalHeaders) Then
AdditionalHeaders = New Map;
Else
ErrorText = "An incorrect collection of additional headers has been passed!";
OPI_TypeConversion.GetKeyValueCollection(AdditionalHeaders, ErrorText);
EndIf;
EndProcedure
#EndRegion
+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="bb0d07ea-7a4b-4200-a8fa-f6e8cafca6f5">
<name>OPI_Ollama</name>
<synonym>
<key>en</key>
<value>Ollama (OpenIntegrations)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
@@ -76,6 +76,7 @@ Function GetTestingSectionMapping() Export
Sections.Insert("S3" , 5);
Sections.Insert("TCP" , 5);
Sections.Insert("GreenAPI" , 5);
Sections.Insert("Ollama" , 5);
Return Sections;
@@ -113,6 +114,7 @@ Function GetTestingSectionMappingGA() Export
Sections.Insert("S3" , StandardDependencies);
Sections.Insert("TCP" , StandardDependencies);
Sections.Insert("GreenAPI" , StandardDependencies);
Sections.Insert("Ollama" , StandardDependencies);
Return Sections;
@@ -146,6 +148,7 @@ Function GetTestTable() Export
GreenAPI = "GreenAPI";
RCON = "RCON";
MySQL = "MySQL";
Ollama = "Ollama";
TestTable = New ValueTable;
TestTable.Columns.Add("Method");
@@ -294,6 +297,7 @@ Function GetTestTable() Export
NewTest(TestTable, "GAPI_MessageLogs" , "Message logs" , GreenAPI);
NewTest(TestTable, "GAPI_Account" , "Account" , GreenAPI);
NewTest(TestTable, "RC_CommandsExecution" , "Commands execution" , RCON);
NewTest(TestTable, "OLLM_RequestsProcessing" , "Requests processing" , Ollama);
Return TestTable;
@@ -2318,6 +2322,14 @@ Procedure Check_GreenQueueClearing(Val Result) Export
EndProcedure
Procedure Check_OllamaResponse(Val Result, Val Completed = True) Export
ExpectsThat(Result["model"]).Заполнено();
ExpectsThat(Result["response"]).Заполнено();
ExpectsThat(Result["done"]).Равно(Completed);
EndProcedure
#EndRegion
#EndRegion
+38
View File
@@ -2566,6 +2566,20 @@ EndProcedure
#EndRegion
#Region Ollama
Procedure OLLM_RequestsProcessing() Export
TestParameters = New Structure;
OPI_TestDataRetrieval.ParameterToCollection("Ollama_URL" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("Ollama_Token", TestParameters);
Ollama_ProcessRequest(TestParameters);
EndProcedure
#EndRegion
#EndRegion
#EndRegion
@@ -20446,6 +20460,30 @@ EndProcedure
#EndRegion
#Region Ollama
Procedure Ollama_ProcessRequest(FunctionParameters)
URL = FunctionParameters["Ollama_URL"];
Token = FunctionParameters["Ollama_Token"]; // Authorization - not part API Ollama
Prompt = "What is 1C:Enterprise?";
Model = "tinyllama";
AdditionalHeaders = New Map;
AdditionalHeaders.Insert("Authorization", StrTemplate("Bearer %1", Token));
Result = OPI_Ollama.ProcessRequest(URL, Model, Prompt, , AdditionalHeaders);
// END
OPI_TestDataRetrieval.WriteLog(Result, "ProcessRequest", "Ollama");
OPI_TestDataRetrieval.Check_OllamaResponse(Result);
EndProcedure
#EndRegion
#EndRegion
#EndRegion
+1
View File
@@ -56,6 +56,7 @@
<commonModules>CommonModule.OPI_MySQL</commonModules>
<commonModules>CommonModule.OPI_Neocities</commonModules>
<commonModules>CommonModule.OPI_Notion</commonModules>
<commonModules>CommonModule.OPI_Ollama</commonModules>
<commonModules>CommonModule.OPI_Ozon</commonModules>
<commonModules>CommonModule.OPI_PostgreSQL</commonModules>
<commonModules>CommonModule.OPI_RCON</commonModules>
+65
View File
@@ -0,0 +1,65 @@
Function ПолучитьСостав() Export
CompositionTable = New ValueTable();
CompositionTable.Columns.Add("Библиотека");
CompositionTable.Columns.Add("Модуль");
CompositionTable.Columns.Add("Метод");
CompositionTable.Columns.Add("МетодПоиска");
CompositionTable.Columns.Add("Параметр");
CompositionTable.Columns.Add("Описание");
CompositionTable.Columns.Add("ОписаниеМетода");
CompositionTable.Columns.Add("Область");
NewLine = CompositionTable.Add();
NewLine.Библиотека = "ollama";
NewLine.Модуль = "OPI_Ollama";
NewLine.Метод = "ProcessRequest";
NewLine.МетодПоиска = "PROCESSREQUEST";
NewLine.Параметр = "--url";
NewLine.Описание = "Ollama server URL";
NewLine.Область = "Requests processing";
NewLine.ОписаниеМетода = "Generates a response for a given text query";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "ollama";
NewLine.Модуль = "OPI_Ollama";
NewLine.Метод = "ProcessRequest";
NewLine.МетодПоиска = "PROCESSREQUEST";
NewLine.Параметр = "--model";
NewLine.Описание = "Models name";
NewLine.Область = "Requests processing";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "ollama";
NewLine.Модуль = "OPI_Ollama";
NewLine.Метод = "ProcessRequest";
NewLine.МетодПоиска = "PROCESSREQUEST";
NewLine.Параметр = "--prompt";
NewLine.Описание = "Request text";
NewLine.Область = "Requests processing";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "ollama";
NewLine.Модуль = "OPI_Ollama";
NewLine.Метод = "ProcessRequest";
NewLine.МетодПоиска = "PROCESSREQUEST";
NewLine.Параметр = "--options";
NewLine.Описание = "Additional parameters. See GetRequestParametersStructure (optional, def. val. - Empty value)";
NewLine.Область = "Requests processing";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "ollama";
NewLine.Модуль = "OPI_Ollama";
NewLine.Метод = "ProcessRequest";
NewLine.МетодПоиска = "PROCESSREQUEST";
NewLine.Параметр = "--headers";
NewLine.Описание = "Additional request headers, if necessary (optional, def. val. - Empty value)";
NewLine.Область = "Requests processing";
Return CompositionTable;
EndFunction
@@ -19,6 +19,7 @@
СоответствиеКомандМодулей.Вставить("mysql", "OPI_MySQL");
СоответствиеКомандМодулей.Вставить("neocities", "OPI_Neocities");
СоответствиеКомандМодулей.Вставить("notion", "OPI_Notion");
СоответствиеКомандМодулей.Вставить("ollama", "OPI_Ollama");
СоответствиеКомандМодулей.Вставить("ozon", "OPI_Ozon");
СоответствиеКомандМодулей.Вставить("postgres", "OPI_PostgreSQL");
СоответствиеКомандМодулей.Вставить("rcon", "OPI_RCON");
+19 -19
View File
@@ -49,7 +49,7 @@
// Обработать запрос
// Генерирует ответ по заданному текстовому запросу
//
//
// Примечание:
// Метод в документации API: [Generate a completion](@github.com/ollama/ollama/blob/main/docs/api.md#generate-a-completion)
//
@@ -59,64 +59,64 @@
// Промпт - Строка - Текст запроса - prompt
// ДопПараметры - Структура Из КлючИЗначение - Доп. параметры. См. ПолучитьСтруктуруПараметровЗапроса - options
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
//
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Результат обработки
// Соответствие Из КлючИЗначение - Результат обработки
Функция ОбработатьЗапрос(Знач URL, Знач Модель, Знач Промпт, Знач ДопПараметры = "", Знач ДопЗаголовки = "") Экспорт
ДополнитьURL(URL, "api/generate");
Параметры = Новый Структура;
Параметры.Вставить("suffix", "");
OPI_Инструменты.ДобавитьПоле("model" , Модель, "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("prompt", Промпт, "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("stream", Ложь , "Булево", Параметры);
ОбработатьПараметры(Параметры, ДопПараметры);
ОбработатьЗаголовки(ДопЗаголовки);
Ответ = OPI_Инструменты.Post(URL, Параметры, ДопЗаголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
Процедура ДополнитьURL(URL, Знач Путь)
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
URL = ?(СтрЗаканчиваетсяНа(URL, "/"), URL, URL + "/");
URL = URL + Путь;
КонецПроцедуры
Процедура ОбработатьПараметры(Параметры, Знач ДопПараметры)
Если Не ЗначениеЗаполнено(ДопПараметры) Тогда
Возврат;
КонецЕсли;
ТекстОшибки = "Передана некорректная коллекция доп. параметров!";
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(ДопПараметры, ТекстОшибки);
Для Каждого ДопПараметр Из ДопПараметры Цикл
Параметры.Вставить(ДопПараметр.Ключ, ДопПараметр.Значение);
КонецЦикла;
КонецПроцедуры
Процедура ОбработатьЗаголовки(ДопЗаголовки)
Если Не ЗначениеЗаполнено(ДопЗаголовки) Тогда
ДопЗаголовки = Новый Соответствие;
Иначе
ТекстОшибки = "Передана некорректная коллекция доп. заголовков!";
ТекстОшибки = "Передана некорректная коллекция доп. заголовков!";
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(ДопЗаголовки, ТекстОшибки);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
+7 -7
View File
@@ -2573,9 +2573,9 @@
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Ollama_URL" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Ollama_Token", ПараметрыТеста);
Ollama_ОбработатьЗапрос(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
@@ -20464,22 +20464,22 @@
Процедура Ollama_ОбработатьЗапрос(ПараметрыФункции)
URL = ПараметрыФункции["Ollama_URL"];
Токен = ПараметрыФункции["Ollama_Token"]; // Авторизация - не часть API Ollama
URL = ПараметрыФункции["Ollama_URL"];
Токен = ПараметрыФункции["Ollama_Token"]; // Авторизация - не часть API Ollama
Промпт = "What is 1C:Enterprise?";
Модель = "tinyllama";
ДопЗаголовки = Новый Соответствие;
ДопЗаголовки.Вставить("Authorization", СтрШаблон("Bearer %1", Токен));
Результат = OPI_Ollama.ОбработатьЗапрос(URL, Модель, Промпт, , ДопЗаголовки);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОбработатьЗапрос", "Ollama");
OPI_ПолучениеДанныхТестов.Проверка_OllamaОтвет(Результат);
КонецПроцедуры
#КонецОбласти
@@ -2323,11 +2323,11 @@
КонецПроцедуры
Процедура Проверка_OllamaОтвет(Знач Результат, Знач Завершен = Истина) Экспорт
ОжидаетЧто(Результат["model"]).Заполнено();
ОжидаетЧто(Результат["response"]).Заполнено();
ОжидаетЧто(Результат["done"]).Равно(Завершен);
КонецПроцедуры
#КонецОбласти
@@ -2366,9 +2366,9 @@
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя);
Возврат Модуль;
КонецФункции
@@ -49,7 +49,7 @@
// Обработать запрос
// Генерирует ответ по заданному текстовому запросу
//
//
// Примечание:
// Метод в документации API: [Generate a completion](@github.com/ollama/ollama/blob/main/docs/api.md#generate-a-completion)
//
@@ -59,64 +59,64 @@
// Промпт - Строка - Текст запроса - prompt
// ДопПараметры - Структура Из КлючИЗначение - Доп. параметры. См. ПолучитьСтруктуруПараметровЗапроса - options
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп заголовки запроса, если необходимо - headers
//
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Результат обработки
// Соответствие Из КлючИЗначение - Результат обработки
Функция ОбработатьЗапрос(Знач URL, Знач Модель, Знач Промпт, Знач ДопПараметры = "", Знач ДопЗаголовки = "") Экспорт
ДополнитьURL(URL, "api/generate");
Параметры = Новый Структура;
Параметры.Вставить("suffix", "");
OPI_Инструменты.ДобавитьПоле("model" , Модель, "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("prompt", Промпт, "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("stream", Ложь , "Булево", Параметры);
ОбработатьПараметры(Параметры, ДопПараметры);
ОбработатьЗаголовки(ДопЗаголовки);
Ответ = OPI_Инструменты.Post(URL, Параметры, ДопЗаголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
Процедура ДополнитьURL(URL, Знач Путь)
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
URL = ?(СтрЗаканчиваетсяНа(URL, "/"), URL, URL + "/");
URL = URL + Путь;
КонецПроцедуры
Процедура ОбработатьПараметры(Параметры, Знач ДопПараметры)
Если Не ЗначениеЗаполнено(ДопПараметры) Тогда
Возврат;
КонецЕсли;
ТекстОшибки = "Передана некорректная коллекция доп. параметров!";
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(ДопПараметры, ТекстОшибки);
Для Каждого ДопПараметр Из ДопПараметры Цикл
Параметры.Вставить(ДопПараметр.Ключ, ДопПараметр.Значение);
КонецЦикла;
КонецПроцедуры
Процедура ОбработатьЗаголовки(ДопЗаголовки)
Если Не ЗначениеЗаполнено(ДопЗаголовки) Тогда
ДопЗаголовки = Новый Соответствие;
Иначе
ТекстОшибки = "Передана некорректная коллекция доп. заголовков!";
ТекстОшибки = "Передана некорректная коллекция доп. заголовков!";
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(ДопЗаголовки, ТекстОшибки);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -2323,11 +2323,11 @@
КонецПроцедуры
Процедура Проверка_OllamaОтвет(Знач Результат, Знач Завершен = Истина) Экспорт
ОжидаетЧто(Результат["model"]).Заполнено();
ОжидаетЧто(Результат["response"]).Заполнено();
ОжидаетЧто(Результат["done"]).Равно(Завершен);
КонецПроцедуры
#КонецОбласти
+7 -7
View File
@@ -2573,9 +2573,9 @@
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Ollama_URL" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Ollama_Token", ПараметрыТеста);
Ollama_ОбработатьЗапрос(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
@@ -20464,22 +20464,22 @@
Процедура Ollama_ОбработатьЗапрос(ПараметрыФункции)
URL = ПараметрыФункции["Ollama_URL"];
Токен = ПараметрыФункции["Ollama_Token"]; // Авторизация - не часть API Ollama
URL = ПараметрыФункции["Ollama_URL"];
Токен = ПараметрыФункции["Ollama_Token"]; // Авторизация - не часть API Ollama
Промпт = "What is 1C:Enterprise?";
Модель = "tinyllama";
ДопЗаголовки = Новый Соответствие;
ДопЗаголовки.Вставить("Authorization", СтрШаблон("Bearer %1", Токен));
Результат = OPI_Ollama.ОбработатьЗапрос(URL, Модель, Промпт, , ДопЗаголовки);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОбработатьЗапрос", "Ollama");
OPI_ПолучениеДанныхТестов.Проверка_OllamaОтвет(Результат);
КонецПроцедуры
#КонецОбласти
+65
View File
@@ -0,0 +1,65 @@
Функция ПолучитьСостав() Экспорт
ТаблицаСостава = Новый ТаблицаЗначений();
ТаблицаСостава.Колонки.Добавить("Библиотека");
ТаблицаСостава.Колонки.Добавить("Модуль");
ТаблицаСостава.Колонки.Добавить("Метод");
ТаблицаСостава.Колонки.Добавить("МетодПоиска");
ТаблицаСостава.Колонки.Добавить("Параметр");
ТаблицаСостава.Колонки.Добавить("Описание");
ТаблицаСостава.Колонки.Добавить("ОписаниеМетода");
ТаблицаСостава.Колонки.Добавить("Область");
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "ollama";
НоваяСтрока.Модуль = "OPI_Ollama";
НоваяСтрока.Метод = "ОбработатьЗапрос";
НоваяСтрока.МетодПоиска = "ОБРАБОТАТЬЗАПРОС";
НоваяСтрока.Параметр = "--url";
НоваяСтрока.Описание = "URL сервера Ollama";
НоваяСтрока.Область = "Обработка запросов";
НоваяСтрока.ОписаниеМетода = "Генерирует ответ по заданному текстовому запросу";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "ollama";
НоваяСтрока.Модуль = "OPI_Ollama";
НоваяСтрока.Метод = "ОбработатьЗапрос";
НоваяСтрока.МетодПоиска = "ОБРАБОТАТЬЗАПРОС";
НоваяСтрока.Параметр = "--model";
НоваяСтрока.Описание = "Имя модели";
НоваяСтрока.Область = "Обработка запросов";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "ollama";
НоваяСтрока.Модуль = "OPI_Ollama";
НоваяСтрока.Метод = "ОбработатьЗапрос";
НоваяСтрока.МетодПоиска = "ОБРАБОТАТЬЗАПРОС";
НоваяСтрока.Параметр = "--prompt";
НоваяСтрока.Описание = "Текст запроса";
НоваяСтрока.Область = "Обработка запросов";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "ollama";
НоваяСтрока.Модуль = "OPI_Ollama";
НоваяСтрока.Метод = "ОбработатьЗапрос";
НоваяСтрока.МетодПоиска = "ОБРАБОТАТЬЗАПРОС";
НоваяСтрока.Параметр = "--options";
НоваяСтрока.Описание = "Доп. параметры. См. ПолучитьСтруктуруПараметровЗапроса (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Обработка запросов";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "ollama";
НоваяСтрока.Модуль = "OPI_Ollama";
НоваяСтрока.Метод = "ОбработатьЗапрос";
НоваяСтрока.МетодПоиска = "ОБРАБОТАТЬЗАПРОС";
НоваяСтрока.Параметр = "--headers";
НоваяСтрока.Описание = "Доп заголовки запроса, если необходимо (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Обработка запросов";
Возврат ТаблицаСостава;
КонецФункции
@@ -19,6 +19,7 @@
СоответствиеКомандМодулей.Вставить("mysql", "OPI_MySQL");
СоответствиеКомандМодулей.Вставить("neocities", "OPI_Neocities");
СоответствиеКомандМодулей.Вставить("notion", "OPI_Notion");
СоответствиеКомандМодулей.Вставить("ollama", "OPI_Ollama");
СоответствиеКомандМодулей.Вставить("ozon", "OPI_Ozon");
СоответствиеКомандМодулей.Вставить("postgres", "OPI_PostgreSQL");
СоответствиеКомандМодулей.Вставить("rcon", "OPI_RCON");