Действия

UPS. Руководство администратора: различия между версиями

Материал из Флора AI

Строка 47: Строка 47:
Данные пример запроса говорит о том, что написан интерфейс яндекса по синтезу. Соотвественно обращание к нему идет, как к Яндексу и ответ, как от Яндекса.
Данные пример запроса говорит о том, что написан интерфейс яндекса по синтезу. Соотвественно обращание к нему идет, как к Яндексу и ответ, как от Яндекса.


Пример структуры файла модуля (файл должен иметь имя handler.py и лажать по пути /op/ups/modules/[имя модуля]/handler.py):
<code>import uuid, io, json</code>
<code>from app.modules import modulesns</code>
<code>from flask import send_file</code>
<code>from flask_restplus import Resource, reqparse</code>
<code>from app.ups import tools</code>
<code>config = json.load(open('/opt/ups/modules/yandex_tts_emulator/config.json'))</code>
<code>parser = reqparse.RequestParser()</code>
<code>parser.add_argument('voice',required=True)</code>
<code>parser.add_argument('text',required=True)</code>
<code>@modulesns.route("/speech/v1/tts:synthesize"</code>
<code>class YandexEmulator(Resource): # имя класса можно указать свое</code>
<code>   def post(self): # обязательный метод post класса</code>
<code>       args = parser.parse_args()</code>
<code>       voice = args['voice']</code>
<code>       voice = config['voices'].get(voice,None)</code>
<code>       if not voice:</code>
<code>           modulesns.abort(405, message = "Wrong voice", error = 1)</code>
<code>       reply = tools.getData(servicetype="tts",method="GET",data={'text':args['text']},url="/tts/synthesize/"+voice)</code>
<code>       if type(reply) is dict:</code>
<code>           return reply</code>
<code># возвращаемым значение метода post должен быть правильный результат, в данном примере синтезированный аудиофайл</code>
<code>       return send_file(</code>
<code>           io.BytesIO(reply),</code>
<code>           attachment_filename=str(uuid.uuid4())+'.wav',</code>
<code>           as_attachment=True,</code>
<code>           mimetype='audio/wav'</code>
<code>       )</code>
Пример структуры файла конфигурации (файл должен иметь имя config.json и лажать по пути /op/ups/modules/[имя модуля]/config.json):<code>{</code>
<code>   "voices": {</code>
<code>       "alena": "Alya_8kHz"</code>
<code>   }</code>
<code>}</code>





Версия от 18:57, 15 марта 2024

Общее описание

Сервис предназначен для управления базовыми сервисами ядра, а также в качестве прокси-сервера доступа к сервисам с функцией балансировки нагрузки.


Термины и определения

Universal Proxy Server (UPS) – Сервис управления ядром с проксированием запросов.


Системные требования

Для нормальной работы сервиса требуется 4Гб оперативной памяти, 1 CPU >= 2.20GHz и 40Гб дискового пространства.


Установка/обновление сервиса

Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для Вашей системы в каталоге с пакетом.

Для UPS необходимо устанавливать выделенное окружение.

Установка/обновление UPS осуществляется скриптом chmod +x ./ups-<версия>-<релиз>.sh && ./ups-<версия>-<релиз>.sh -i с правами администратора. Список всех ключей инсталятора можно посмотреть, запустив инсталятор ./ups-<версия>-<релиз>.sh без ключей.

Загрузить последнюю версию пакета curl -s 'https://cloud.connect2ai.net/ups/' --user 'user_nexcloud:pass_nexcloud' | bash

Устновить/обновить пакет одной командой curl -s 'https://cloud.connect2ai.net/ups/?name=s' --user 'user_nexcloud:pass_nexcloud' | bash && chmod +x ./ups.sh && ./ups.sh -i

Проверить актуальную версию пакета можно curl -s 'https://cloud.connect2ai.net/ups/?type=v'

Не забудьте запустить сервис и включить в автозапуск в системе:

sudo systemctl enable ups.service && sudo systemctl start ups.service

Удостоверьтесь, что сервис стартовал:

systemctl status ups.service

Разрешите доступ к порту 6182 на нужном интерфейсе по протоколу tcp.


Установка/создание модулей

Есть возможность создать любой модуль, который будет эмулировать любой API интерфейс любого стороннего сервиса через UPS. Для примера создан интерфейс Яндекс. Установка модулей возможна прямым копирование файлов модуля в деррикторию /opt/ups/modules/<название модуля>.

Чтобы убедиться, что модуль доступен и работает, выполните запрос

curl -X GET "http://АДРЕС_СЕРВЕРА:6182/tts/synthesize/yandex_tts_emulator?rate=100&pitch=100&volume=0" --H "accept: application/json" --data-urlencode "text=текст для синтеза" --output out.wav

out.wav должен содержать синтезированный голос озвучивший текст из запроса.

Данные пример запроса говорит о том, что написан интерфейс яндекса по синтезу. Соотвественно обращание к нему идет, как к Яндексу и ответ, как от Яндекса.


Пример структуры файла модуля (файл должен иметь имя handler.py и лажать по пути /op/ups/modules/[имя модуля]/handler.py):

import uuid, io, json

from app.modules import modulesns

from flask import send_file

from flask_restplus import Resource, reqparse

from app.ups import tools

config = json.load(open('/opt/ups/modules/yandex_tts_emulator/config.json'))

parser = reqparse.RequestParser()

parser.add_argument('voice',required=True)

parser.add_argument('text',required=True)

@modulesns.route("/speech/v1/tts:synthesize"

class YandexEmulator(Resource): # имя класса можно указать свое

   def post(self): # обязательный метод post класса

       args = parser.parse_args()

       voice = args['voice']

       voice = config['voices'].get(voice,None)

       if not voice:

           modulesns.abort(405, message = "Wrong voice", error = 1)

       reply = tools.getData(servicetype="tts",method="GET",data={'text':args['text']},url="/tts/synthesize/"+voice)

       if type(reply) is dict:

           return reply

# возвращаемым значение метода post должен быть правильный результат, в данном примере синтезированный аудиофайл

       return send_file(

           io.BytesIO(reply),

           attachment_filename=str(uuid.uuid4())+'.wav',

           as_attachment=True,

           mimetype='audio/wav'

       )


Пример структуры файла конфигурации (файл должен иметь имя config.json и лажать по пути /op/ups/modules/[имя модуля]/config.json):{

   "voices": {

       "alena": "Alya_8kHz"

   }

}


Конфигурирование параметров сервиса

Настройка параметров сервиса ыьс производится в файле /opt/ups/params.json

Описание параметров приведено в таблице

Параметр По умолчанию Назначение
logs.path logs/ Директория для хранения логов. Примеры абсолютного пути: "/var/log/ups/"
logs.backups 10 Количество файлов ротации
logs.maxSize 5242880 Максимальный размер файла в байтах, триггер для ротации
auth.accessLifeTime 1800 Время жизни access token
auth.refreshLifeTime 86400 Время жизни refresh token
servers.{service}.trainer http://127.0.0.1:PORT Ссылка на сервер для обучения моделей сервисов. Возможные варианты значения service (с портами по умолчанию) следующие: smc (6181), see (6184), spr (6183)
servers.{service}.cluster [http://127.0.0.1:PORT] Список ссылок на рабочие серверы сервисов. Возможные варианты значения service (с портами по умолчанию) следующие: smc (6181), see (6184), spr (6183), tts (6186), sbs (6185).
servers.{service}.timers.connect 0.5 Лимит времени на подключение к сервису, сек.
servers.{service}.timers.read 300 Лимит времени на получение данных от сервиса, сек.
servers.{service}.timers.failed 600 Длительность паузы обращений к сервису при сбое, сек.
servers.{service}.timers.install 60 Лимит времени на установку модели на сервис
servers.{service}.timers.info 3 Лимит времени на получение информации о модели
nopassword [

"GET:/auth/refresh",

"GET:/auth/rights",

"POST:/auth/access",

"GET:/lang/",

"GET:/tts/synthesize",

"POST:/sbs/embedding",

"GET:/smc/classify",

"GET:/auth/version",

"GET:/smc/compress",

"GET:/smc/emotion",

"GET:/see/entities",

"POST:/sbs/analyze",

"POST:/sbs/verify",

"POST:/sbs/search",

"POST:/spr/stt",

"GET:/spr/result",

"GET:/auth/user/info",

"GET:/model/info",

"POST:/auth/user/password"

]

Список методов, которые не требуют авторизации


Сбор данных об ошибках

Логи сервиса по умолчанию находятся в файле /opt/ups/logs/log.txt

Удаление

Для удаления выполните команду: /opt/ups/uninstall. Команда деинсталлирует сервис и удалит рабочий каталог, включая все установленные модели.