Skip to content

Commit baaa780

Browse files
committed
Ирина 7.0 - теперь с докер-образом!
1 parent 77d2634 commit baaa780

File tree

7 files changed

+170
-1
lines changed

7 files changed

+170
-1
lines changed

Dockerfile

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# syntax=docker/dockerfile:1
2+
FROM --platform=$BUILDPLATFORM curlimages/curl:7.85.0 as silero-downloader
3+
4+
WORKDIR /home/downloader/models
5+
6+
RUN curl https://models.silero.ai/models/tts/ru/v3_1_ru.pt -o ./silero_model.pt
7+
#
8+
# FROM --platform=$BUILDPLATFORM curlimages/curl:7.85.0 as vosk-downloader
9+
#
10+
# WORKDIR /home/downloader/models
11+
#
12+
# RUN curl https://alphacephei.com/vosk/models/vosk-model-small-ru-0.22.zip -o ./c611af587fcbdacc16bc7a1c6148916c-vosk-model-small-ru-0.22.zip
13+
#
14+
# FROM --platform=$BUILDPLATFORM python:3.9-slim-bullseye as ssl-generator
15+
#
16+
# WORKDIR /home/generator/ssl
17+
#
18+
# RUN openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -nodes -days 365 -subj "/C=RU/CN=*"
19+
20+
FROM python:3.9-slim-bullseye
21+
22+
# Я в душе не чаю, зачем нужна следующая команда, но без неё вызов pip install на архитектуре linux/arm64 падает.
23+
# Связаные ссылки:
24+
# https://webcache.googleusercontent.com/search?q=cache:R6EG8IVigbMJ:https://pythontechworld.com/issue/pypa/pip/11435&cd=1&hl=ru&ct=clnk&gl=ru
25+
# О да! Решение, найденное в удалённой ветке какого-то форума!
26+
# https://github.com/hofstadter-io/hof/commit/838e8bbe2171ba8b9929b0ffa812c0f1ed61e975#diff-185fff912be701240e6e971b5548217a2027904efe9e365728169da65eb4983b
27+
RUN ln -s /bin/uname /usr/local/bin/uname
28+
# https://github.com/docker/buildx/issues/495#issuecomment-995503425
29+
RUN ln -s /usr/bin/dpkg-split /usr/sbin/dpkg-split
30+
RUN ln -s /usr/bin/dpkg-deb /usr/sbin/dpkg-deb
31+
RUN ln -s /bin/rm /usr/sbin/rm
32+
RUN ln -s /bin/tar /usr/sbin/tar
33+
34+
RUN --mount=type=cache,target=/var/cache,sharing=locked apt update && apt install -y libportaudio2
35+
36+
RUN groupadd --gid 1001 python && useradd --create-home python --uid 1001 --gid python
37+
USER python:python
38+
WORKDIR /home/python
39+
40+
COPY ./requirements-docker.txt ./requirements.txt
41+
RUN --mount=type=cache,target=/home/python/.cache,uid=1001,gid=1001 pip install -r ./requirements.txt
42+
43+
#COPY * .
44+
COPY lingua_franca ./lingua_franca
45+
COPY media ./media
46+
COPY mic_client ./mic_client
47+
COPY model ./model
48+
COPY mpcapi ./mpcapi
49+
COPY plugins ./plugins
50+
COPY utils ./utils
51+
COPY webapi_client ./webapi_client
52+
53+
COPY localhost.crt ./localhost.crt
54+
COPY localhost.key ./localhost.key
55+
COPY jaa.py ./jaa.py
56+
COPY vacore.py ./vacore.py
57+
COPY runva_webapi.py ./runva_webapi.py
58+
COPY --chown=python:python options_docker ./options
59+
COPY --chown=python:python runva_webapi_docker.json ./runva_webapi.json
60+
61+
#COPY --link --from=frontend-builder /home/frontend/dist/ ./irene_plugin_web_face_frontend/frontend-dist/
62+
COPY --link --from=silero-downloader /home/downloader/models/silero_model.pt ./silero_model.pt
63+
# COPY --link --chown=1001:1001 --from=vosk-downloader /home/downloader/models/ ./vosk-models/
64+
# COPY --link --chown=1001:1001 --from=ssl-generator /home/generator/ssl/ ./ssl/
65+
66+
EXPOSE 5003
67+
68+
# VOLUME /irene
69+
# ENV IRENE_HOME=/irene
70+
71+
#ENTRYPOINT ["python", "-m", "irene", "--default-config", "/home/python/config"]
72+
ENTRYPOINT ["python", "runva_webapi.py"]
73+
#ENTRYPOINT uvicorn runva_webapi:app --proxy-headers --host 0.0.0.0 --port 8089

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,25 @@
3434

3535
Баги можно писать в ISSUES, обсуждать - [в Телеграм](https://t.me/+gagUw1bCcYFkMGEy)
3636

37+
### Установка через Докер
38+
39+
### Через Docker
40+
41+
Относительно свежая версия Ирины доступна в виде Docker-образа (для linux/amd64) и может быть запущена
42+
следующей командой (linux/arm64 пока не поддерживается, т.к. не умею делать target на мультиплатформу):
43+
44+
```shell
45+
docker run -it --publish 5003:5003 \
46+
janvarev/ireneva:latest
47+
```
48+
49+
Далее можно открыть [https://localhost:5003/webapi_client/](https://localhost:5003/webapi_client/) (или аналогичный адрес на том хосте, где был
50+
запущен контейнер) и, разрешив использование самоподписанного сертификата, использовать Ирину через веб-интерфейс.
51+
52+
К опциям плагинов доступ через папку options (нужно подмонтировать), к самому списку плагинов - через plugins (нужно подмонтировать).
53+
54+
(Если что, автор не специалист в Докер, поэтому могут быть глюки при работе.)
55+
3756
### Общая логика
3857

3958
Запуск всех команд начинается с имени ассистента (настраивается в options/core.json, по умолчанию - Ирина).

options_docker/core.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"ttsEngineId": "silero_v3",
3+
"playWavEngineId": "consolewav",
4+
"v": "0.0"
5+
}

plugins/plugin_playwav_consolewav.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Playwav plugin for console engine (debug)
2+
# author: Vladislav Janvarev
3+
4+
import os
5+
6+
from vacore import VACore
7+
8+
modname = os.path.basename(__file__)[:-3] # calculating modname
9+
10+
# функция на старте
11+
def start(core:VACore):
12+
manifest = {
13+
"name": "PlayWav through console",
14+
"version": "1.0",
15+
"require_online": False,
16+
17+
"playwav": {
18+
"consolewav": (init,playwav) # первая функция инициализации, вторая - проиграть wav-файл
19+
}
20+
}
21+
return manifest
22+
23+
def start_with_options(core:VACore, manifest:dict):
24+
pass
25+
26+
def init(core:VACore):
27+
pass
28+
29+
def playwav(core:VACore, wavfile:str):
30+
print(wavfile)
31+
return
32+

requirements-docker.txt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Для работы Silero
2+
torch~=1.12.1
3+
numpy~=1.23.1
4+
5+
# Для чтения конфигов
6+
#pyyaml~=6.0
7+
8+
# Утилиты для работы с текстом
9+
#lingua-franca~=0.4.3
10+
11+
# Веб-сервер
12+
uvicorn~=0.18.3
13+
uvicorn[standard]~=0.18.3
14+
fastapi~=0.81.0
15+
fastapi-utils
16+
starlette~=0.19.1
17+
18+
# Telegram
19+
#pyTelegramBotAPI~=4.7.1
20+
21+
# Распознание голоса
22+
vosk~=0.3.7
23+
24+
# Локальные запись и воспроизведение звука
25+
sounddevice~=0.4.3
26+
soundfile~=0.10.3.post1
27+
28+
wikipedia-api~=0.5.4
29+
termcolor~=1.1.0
30+
requests
31+
python-dateutil~=2.6.0

runva_webapi_docker.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"hash": "6abb2dcb0d9b2531b052e4c02c181184",
3+
"host": "0.0.0.0",
4+
"log_level": "info",
5+
"port": 5003,
6+
"use_ssl": true,
7+
"v": "1.1"
8+
}

vacore.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from jaa import JaaCore
1010

11-
version = "6.9"
11+
version = "7.0"
1212

1313
# main VACore class
1414

@@ -445,6 +445,7 @@ def display_init_info(self):
445445
print("run ONLINE" if self.isOnline else "run OFFLINE")
446446

447447
self.format_print_key_list("TTS engines", self.ttss.keys())
448+
self.format_print_key_list("PlayWavs engines", self.playwavs.keys())
448449
self.format_print_key_list("Assistant names", self.voiceAssNames)
449450

450451
cprint("Commands list: "+"#"*65, "blue")

0 commit comments

Comments
 (0)