You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-11-25 22:12:29 +02:00
773 lines
44 KiB
Plaintext
773 lines
44 KiB
Plaintext
|
|
// OneScript: ./OInt/core/Modules/OPI_OpenAI.os
|
||
|
|
// Lib: OpenAI
|
||
|
|
// CLI: openai
|
||
|
|
|
||
|
|
// 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
|
||
|
|
|
||
|
|
#Область ПрограммныйИнтерфейс
|
||
|
|
|
||
|
|
#Область ОбработкаЗапросов
|
||
|
|
|
||
|
|
// Получить ответ
|
||
|
|
// Генерирует ответ по заданному текстовому запросу
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Create chat completion](@platform.openai.com/docs/api-reference/chat/create)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// Сообщения - Строка, Массив Из Строка - Сообщения разговора. См. ПолучитьСтруктуруСообщения - msgs
|
||
|
|
// ДопПараметры - Структура Из КлючИЗначение - Доп. параметры запроса, если необходимо - options
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьОтвет(Знач URL, Знач Токен, Знач Модель, Знач Сообщения, Знач ДопПараметры = "", Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "v1/chat/completions");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model" , Модель , "Строка", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("messages", Сообщения, "Массив", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("stream" , Ложь , "Булево", Параметры);
|
||
|
|
|
||
|
|
ОбработатьПараметры(Параметры, ДопПараметры);
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат ПривестиКлючиКНижнемуРегистру(Ответ);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить картинки
|
||
|
|
// Генерирует картинки по указанному описанию
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Create image](@platform.openai.com/docs/api-reference/images/create)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// Описание - Структура Из КлючИЗначение - Параметры генерации. См. ПолучитьСтруктуруОписанияКартинок - descr
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьКартинки(Знач URL, Знач Токен, Знач Модель, Знач Описание, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Описание);
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "v1/images/generations");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model", Модель, "Строка", Параметры);
|
||
|
|
|
||
|
|
Для Каждого Поле Из Описание Цикл
|
||
|
|
Параметры.Вставить(Поле.Ключ, Поле.Значение);
|
||
|
|
КонецЦикла;
|
||
|
|
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат ПривестиКлючиКНижнемуРегистру(Ответ);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить представления
|
||
|
|
// Получает представления (embeddings) для заданных вводных
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Create embeddings](@platform.openai.com/docs/api-reference/embeddings/create)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// Текст - Массив Из Строка - Строка или массив строк запросов - input
|
||
|
|
// ДопПараметры - Структура Из КлючИЗначение - Доп. параметры запроса, если необходимо - options
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьПредставления(Знач URL, Знач Токен, Знач Модель, Знач Текст, Знач ДопПараметры = "", Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "v1/embeddings");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model", Модель, "Строка", Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("input", Текст , "Массив", Параметры);
|
||
|
|
|
||
|
|
ОбработатьПараметры(Параметры, ДопПараметры);
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат ПривестиКлючиКНижнемуРегистру(Ответ);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить структуру сообщения
|
||
|
|
// Получает структуру произвольного сообщения для списка сообщений запроса
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Роль - Строка - Источник сообщения: system, user, assistant и др. - role
|
||
|
|
// Текст - Строка - Текст сообщения - text
|
||
|
|
// Имя - Строка - Имя участника разговора - name
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Структура Из КлючИЗначение - Структура полей
|
||
|
|
Функция ПолучитьСтруктуруСообщения(Знач Роль, Знач Текст, Знач Имя = "") Экспорт
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
СтруктураПолей = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("role" , Роль , Строка_, СтруктураПолей);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("content", Текст, Строка_, СтруктураПолей);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("name" , Имя , Строка_, СтруктураПолей);
|
||
|
|
|
||
|
|
Возврат СтруктураПолей;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить сообщение пользователя
|
||
|
|
// Получает структуру сообщения от лица пользователя для использования в запросе
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Является краткой формой функции `ПолучитьСтруктуруСообщения`
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Текст - Строка - Текст сообщения - text
|
||
|
|
// Имя - Строка - Имя участника разговора - name
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Структура Из КлючИЗначение - Структура полей
|
||
|
|
Функция ПолучитьСообщениеПользователя(Знач Текст, Знач Имя = "") Экспорт
|
||
|
|
Возврат ПолучитьСтруктуруСообщения("user", Текст, Имя);
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить сообщение ассистента
|
||
|
|
// Получает структуру сообщения от лица ассистента для использования в запросе
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Является краткой формой функции `ПолучитьСтруктуруСообщения`
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Текст - Строка - Текст сообщения - text
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Структура Из КлючИЗначение - Структура полей
|
||
|
|
Функция ПолучитьСообщениеАссистента(Знач Текст) Экспорт
|
||
|
|
Возврат ПолучитьСтруктуруСообщения("assistant", Текст);
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить сообщение системы
|
||
|
|
// Получает структуру системного сообщения для использования в запросе
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Является краткой формой функции `ПолучитьСтруктуруСообщения`
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Текст - Строка - Текст сообщения - text
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Структура Из КлючИЗначение - Структура полей
|
||
|
|
Функция ПолучитьСообщениеСистемы(Знач Текст) Экспорт
|
||
|
|
Возврат ПолучитьСтруктуруСообщения("system", Текст);
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить структуру сообщения картинки
|
||
|
|
// Получает структура сообщения на основе изображения для списка сообщений запроса
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Роль - Строка - Источник сообщения: system, user, developer - role
|
||
|
|
// IDФайла - Строка - ID файла картинки. См. ЗагрузитьФайл - file
|
||
|
|
// Текст - Строка - Вводный текст запроса для обработки картинки - prompt
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Структура Из КлючИЗначение - Структура полей
|
||
|
|
Функция ПолучитьСтруктуруСообщенияКартинки(Знач Роль, Знач IDФайла, Знач Текст = "") Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDФайла);
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
|
||
|
|
|
||
|
|
СтруктураПолей = Новый Структура;
|
||
|
|
МассивКонтента = Новый Массив;
|
||
|
|
|
||
|
|
МассивКонтента.Добавить(Новый Структура("type,file_id", "input_image", IDФайла));
|
||
|
|
|
||
|
|
Если ЗначениеЗаполнено(Текст) Тогда
|
||
|
|
МассивКонтента.Добавить(Новый Структура("type,text", "input_text", Текст));
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("role" , Роль , "Строка", СтруктураПолей);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("content", МассивКонтента, "Массив", СтруктураПолей);
|
||
|
|
|
||
|
|
Возврат СтруктураПолей;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить структуру описания картинок
|
||
|
|
// Получить структуру описания картинок для генерации
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Набор полей и их интерпретация может отличаться в зависимости от используемой модели
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// Промпт - Строка - Текстовое описание картинки для генерации - prompt
|
||
|
|
// Количество - Число - Количество изображений для генерации - amount
|
||
|
|
// Фон - Строка - Вариант генерации фона: transparent, opaque, auto - bg
|
||
|
|
// Размер - Строка - Вариант размера сгенерированных изображений - size
|
||
|
|
// ДопПараметры - Структура Из КлючИЗначение - Доп. параметры запроса, если необходимо - options
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Структура - Структура полей
|
||
|
|
Функция ПолучитьСтруктуруОписанияКартинок(Знач Промпт
|
||
|
|
, Знач Количество
|
||
|
|
, Знач Фон = ""
|
||
|
|
, Знач Размер = ""
|
||
|
|
, Знач ДопПараметры = "") Экспорт
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
Описание = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("prompt" , Промпт , Строка_, Описание);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("n" , Количество, "Число", Описание);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("background", Фон , Строка_, Описание);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("size" , Размер , Строка_, Описание);
|
||
|
|
|
||
|
|
ОбработатьПараметры(Описание, ДопПараметры);
|
||
|
|
|
||
|
|
Возврат Описание;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#Область Ассистенты
|
||
|
|
|
||
|
|
// Получить список ассистентов
|
||
|
|
// Получает список ассистентов с отбором или без
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [List assistants](@platform.openai.com/docs/api-reference/assistants/listAssistants)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// Количество - Число - Максимальное число возвращаемых ассистентов - limit
|
||
|
|
// ДопПараметры - Структура Из КлючИЗначение - Доп. параметры запроса, если необходимо - options
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьСписокАссистентов(Знач URL
|
||
|
|
, Знач Токен
|
||
|
|
, Знач Количество = 20
|
||
|
|
, Знач ДопПараметры = ""
|
||
|
|
, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "v1/assistants");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("limit", Количество, "Число", Параметры);
|
||
|
|
|
||
|
|
ОбработатьПараметры(Параметры, ДопПараметры);
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Если ТипЗнч(Ответ) = Тип("Массив") Тогда
|
||
|
|
Ответ = Новый Структура("object,data", "list", Ответ);
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
Возврат ПривестиКлючиКНижнемуРегистру(Ответ);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Создать ассистента
|
||
|
|
// Создает ассистента по модели и инструкции
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Create assistant](@platform.openai.com/docs/api-reference/assistants/createAssistant)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// Имя - Строка - Имя ассистента - name
|
||
|
|
// Инструкция - Строка - Системная инструкция для ассистента - inst
|
||
|
|
// ДопПараметры - Структура Из КлючИЗначение - Доп. параметры запроса, если необходимо - options
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция СоздатьАссистента(Знач URL
|
||
|
|
, Знач Токен
|
||
|
|
, Знач Модель
|
||
|
|
, Знач Имя = ""
|
||
|
|
, Знач Инструкция = ""
|
||
|
|
, Знач ДопПараметры = ""
|
||
|
|
, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "v1/assistants");
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model" , Модель , Строка_, Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("name" , Имя , Строка_, Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("instructions", Инструкция , Строка_, Параметры);
|
||
|
|
|
||
|
|
ОбработатьПараметры(Параметры, ДопПараметры);
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат ПривестиКлючиКНижнемуРегистру(Ответ);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить ассистента
|
||
|
|
// Получает информацию об ассистенте по ID
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Retrieve assistant](@platform.openai.com/docs/api-reference/assistants/getAssistant)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// IDАссистента - Строка - ID ассистента - id
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьАссистента(Знач URL, Знач Токен, Знач IDАссистента, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDАссистента);
|
||
|
|
|
||
|
|
ДополнитьURL(URL, СтрШаблон("v1/assistants/%1", IDАссистента));
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, , ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат ПривестиКлючиКНижнемуРегистру(Ответ);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Удалить ассистента
|
||
|
|
// Удаляет ранее созданного ассистента
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Delete assistant](@platform.openai.com/docs/api-reference/assistants/deleteAssistant)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// IDАссистента - Строка - ID ассистента - id
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция УдалитьАссистента(Знач URL, Знач Токен, Знач IDАссистента, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDАссистента);
|
||
|
|
|
||
|
|
ДополнитьURL(URL, СтрШаблон("v1/assistants/%1", IDАссистента));
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Delete(URL, , ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат ПривестиКлючиКНижнемуРегистру(Ответ);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#Область РаботаСФайлами
|
||
|
|
|
||
|
|
// Получить список файлов
|
||
|
|
// Получает список файлов с отбором или без
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [List files](@platform.openai.com/docs/api-reference/files/list)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// Количество - Число - Максимальное число возвращаемых ассистентов - limit
|
||
|
|
// ДопПараметры - Структура Из КлючИЗначение - Доп. параметры запроса, если необходимо - options
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьСписокФайлов(Знач URL
|
||
|
|
, Знач Токен
|
||
|
|
, Знач Количество = 10000
|
||
|
|
, Знач ДопПараметры = ""
|
||
|
|
, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "v1/files");
|
||
|
|
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("limit", Количество, "Число", Параметры);
|
||
|
|
|
||
|
|
ОбработатьПараметры(Параметры, ДопПараметры);
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Если ТипЗнч(Ответ) = Тип("Массив") Тогда
|
||
|
|
Ответ = Новый Структура("object,data", "list", Ответ);
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
Возврат ПривестиКлючиКНижнемуРегистру(Ответ);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Загрузить файл
|
||
|
|
// Загружает файл для дальнейшего использования в других запросах
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Upload file](@platform.openai.com/docs/api-reference/files/create)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// ИмяФайла - Строка - Имя файла с раширением - name
|
||
|
|
// Данные - Строка, ДвоичныеДанные - Путь к файлу или данные - data
|
||
|
|
// Назначение - Строка - Назначение файла: assistants, batch, vision, user_data, evals - purpose
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ЗагрузитьФайл(Знач URL, Знач Токен, Знач ИмяФайла, Знач Данные, Знач Назначение, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "v1/files");
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||
|
|
.Инициализировать(URL)
|
||
|
|
.НачатьЗаписьТелаMultipart()
|
||
|
|
.ДобавитьФайлMultipartFormData("file", ИмяФайла, Данные)
|
||
|
|
.ДобавитьПолеMultipartFormData("purpose", Назначение)
|
||
|
|
.УстановитьЗаголовки(ДопЗаголовки)
|
||
|
|
.ОбработатьЗапрос("POST")
|
||
|
|
.ВернутьОтветКакJSONКоллекцию();
|
||
|
|
|
||
|
|
Возврат ПривестиКлючиКНижнемуРегистру(Ответ);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Получить информацию о файле
|
||
|
|
// Получает информацию о файле
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Retrieve file](@platform.openai.com/docs/api-reference/files/retrieve)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// IDФайла - Строка - ID файла - id
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьИнформациюОФайле(Знач URL, Знач Токен, Знач IDФайла, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDФайла);
|
||
|
|
|
||
|
|
ДополнитьURL(URL, СтрШаблон("v1/files/%1", IDФайла));
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, , ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат ПривестиКлючиКНижнемуРегистру(Ответ);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Скачать файл
|
||
|
|
// Получает данные файла с сервера
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Retrieve file content](@platform.openai.com/docs/api-reference/files/retrieve-contents)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// IDФайла - Строка - ID файла - id
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// ДвоичныеДанные - Данные файла
|
||
|
|
Функция СкачатьФайл(Знач URL, Знач Токен, Знач IDФайла, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDФайла);
|
||
|
|
|
||
|
|
ДополнитьURL(URL, СтрШаблон("v1/files/%1/content", IDФайла));
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, , ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Удалить файл
|
||
|
|
// Удаляет ранее загруженный файл
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Delete file](@platform.openai.com/docs/api-reference/files/delete)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// IDФайла - Строка - ID файла - id
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция УдалитьФайл(Знач URL, Знач Токен, Знач IDФайла, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDФайла);
|
||
|
|
|
||
|
|
ДополнитьURL(URL, СтрШаблон("v1/files/%1", IDФайла));
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Delete(URL, , ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат ПривестиКлючиКНижнемуРегистру(Ответ);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#Область РаботаСАудио
|
||
|
|
|
||
|
|
// Сгенерировать речь
|
||
|
|
// Генерирует аудио с озвучиванием указанного текста
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Create speech](@platform.openai.com/docs/api-reference/audio/createSpeech)
|
||
|
|
// Доступные голоса могут отличаться в зависимости от выбранной модели
|
||
|
|
// Формат аудиофайла ответа можно изменить при помощи добавления `response_format` в доп. параметры.^^
|
||
|
|
// Доступные форматы: mp3 (по умолчанию), opus, aac, flac, wav, pcm
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// Текст - Строка - Текст для озвучивания - input
|
||
|
|
// Голос - Строка - Вид голоса: alloy, ash, ballad, coral, echo и др. - voice
|
||
|
|
// ДопПараметры - Структура Из КлючИЗначение - Доп. параметры запроса, если необходимо - options
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// ДвоичныеДанные - Результат обработки
|
||
|
|
Функция СгенерироватьРечь(Знач URL
|
||
|
|
, Знач Токен
|
||
|
|
, Знач Модель
|
||
|
|
, Знач Текст
|
||
|
|
, Знач Голос = "alloy"
|
||
|
|
, Знач ДопПараметры = ""
|
||
|
|
, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "v1/audio/speech");
|
||
|
|
|
||
|
|
Строка_ = "Строка";
|
||
|
|
Параметры = Новый Структура;
|
||
|
|
|
||
|
|
OPI_Инструменты.ДобавитьПоле("model", Модель, Строка_, Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("input", Текст , Строка_, Параметры);
|
||
|
|
OPI_Инструменты.ДобавитьПоле("voice", Голос , Строка_, Параметры);
|
||
|
|
|
||
|
|
ОбработатьПараметры(Параметры, ДопПараметры);
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат Ответ;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
// Создать транскрипцию
|
||
|
|
// Создает текстовую транскрипцию для выбранного аудио файла
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [Create transcription](@platform.openai.com/docs/api-reference/audio/createTranscription)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// Модель - Строка - Имя модели - model
|
||
|
|
// Аудио - Строка, ДвоичныеДанные - Аудио файл - audio
|
||
|
|
// MIME - Строка - MIME тип аудио файла - type
|
||
|
|
// ДопПараметры - Структура Из КлючИЗначение - Доп. параметры запроса, если необходимо - options
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция СоздатьТранскрипцию(Знач URL
|
||
|
|
, Знач Токен
|
||
|
|
, Знач Модель
|
||
|
|
, Знач Аудио
|
||
|
|
, Знач MIME = "audio/mpeg"
|
||
|
|
, Знач ДопПараметры = ""
|
||
|
|
, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(MIME);
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "v1/audio/transcriptions");
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||
|
|
.Инициализировать(URL)
|
||
|
|
.НачатьЗаписьТелаMultipart()
|
||
|
|
.ДобавитьФайлMultipartFormData("file", "audio.bin", Аудио, MIME)
|
||
|
|
.ДобавитьПолеMultipartFormData("model", Модель)
|
||
|
|
.УстановитьЗаголовки(ДопЗаголовки)
|
||
|
|
.ОбработатьЗапрос("POST")
|
||
|
|
.ВернутьОтветКакJSONКоллекцию();
|
||
|
|
|
||
|
|
Возврат ПривестиКлючиКНижнемуРегистру(Ответ);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#Область РаботаСМоделями
|
||
|
|
|
||
|
|
// Получить список моделей
|
||
|
|
// Получает список доступных моделей
|
||
|
|
//
|
||
|
|
// Примечание:
|
||
|
|
// Метод в документации API: [List models](@platform.openai.com/docs/api-reference/models/list)
|
||
|
|
//
|
||
|
|
// Параметры:
|
||
|
|
// URL - Строка - URL сервера OpenAI - url
|
||
|
|
// Токен - Строка - Токен авторизации OpenAI - token
|
||
|
|
// ДопЗаголовки - Соответствие Из КлючИЗначение - Доп. заголовки запроса, если необходимо - headers
|
||
|
|
//
|
||
|
|
// Возвращаемое значение:
|
||
|
|
// Соответствие Из КлючИЗначение - Результат обработки
|
||
|
|
Функция ПолучитьСписокМоделей(Знач URL, Знач Токен, Знач ДопЗаголовки = "") Экспорт
|
||
|
|
|
||
|
|
ДополнитьURL(URL, "v1/models");
|
||
|
|
ОбработатьЗаголовки(ДопЗаголовки, Токен);
|
||
|
|
|
||
|
|
Ответ = OPI_ЗапросыHTTP.Get(URL, , ДопЗаголовки);
|
||
|
|
|
||
|
|
Возврат ПривестиКлючиКНижнемуРегистру(Ответ);
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#КонецОбласти
|
||
|
|
|
||
|
|
#Область СлужебныеПроцедурыИФункции
|
||
|
|
|
||
|
|
Процедура ДополнитьURL(URL, Знач Путь)
|
||
|
|
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
|
||
|
|
|
||
|
|
URL = ?(СтрЗаканчиваетсяНа(URL, "/"), URL, URL + "/");
|
||
|
|
URL = URL + Путь;
|
||
|
|
|
||
|
|
КонецПроцедуры
|
||
|
|
|
||
|
|
Процедура ОбработатьПараметры(Параметры, Знач ДопПараметры)
|
||
|
|
|
||
|
|
Если Не ЗначениеЗаполнено(ДопПараметры) Тогда
|
||
|
|
Возврат;
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
ТекстОшибки = "Передана некорректная коллекция доп. параметров!";
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(ДопПараметры, ТекстОшибки);
|
||
|
|
|
||
|
|
Для Каждого ДопПараметр Из ДопПараметры Цикл
|
||
|
|
Параметры.Вставить(ДопПараметр.Ключ, ДопПараметр.Значение);
|
||
|
|
КонецЦикла;
|
||
|
|
|
||
|
|
КонецПроцедуры
|
||
|
|
|
||
|
|
Процедура ОбработатьЗаголовки(ДопЗаголовки, Знач Токен)
|
||
|
|
|
||
|
|
Если Не ЗначениеЗаполнено(ДопЗаголовки) Тогда
|
||
|
|
ДопЗаголовки = Новый Соответствие;
|
||
|
|
Иначе
|
||
|
|
ТекстОшибки = "Передана некорректная коллекция доп. заголовков!";
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(ДопЗаголовки, ТекстОшибки);
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
Если ЗначениеЗаполнено(Токен) Тогда
|
||
|
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||
|
|
ДопЗаголовки.Вставить("Authorization", СтрШаблон("Bearer %1", Токен));
|
||
|
|
КонецЕсли;
|
||
|
|
|
||
|
|
КонецПроцедуры
|
||
|
|
|
||
|
|
Функция ПривестиКлючиКНижнемуРегистру(Знач Коллекция)
|
||
|
|
|
||
|
|
Попытка
|
||
|
|
Коллекция_ = Новый(ТипЗнч(Коллекция));
|
||
|
|
|
||
|
|
Для Каждого КлючЗначение Из Коллекция Цикл
|
||
|
|
Коллекция_.Вставить(нРег(КлючЗначение.Ключ), КлючЗначение.Значение);
|
||
|
|
КонецЦикла;
|
||
|
|
|
||
|
|
Возврат Коллекция_;
|
||
|
|
|
||
|
|
Исключение
|
||
|
|
Возврат Коллекция;
|
||
|
|
КонецПопытки;
|
||
|
|
|
||
|
|
КонецФункции
|
||
|
|
|
||
|
|
#КонецОбласти
|