3v324v23 commited on
Commit
dbc3350
·
1 Parent(s): 0ece83b

Полностью переработан деплой для использования официального TEN-Agent

Browse files
Files changed (5) hide show
  1. .env +2 -2
  2. .gitignore +57 -0
  3. Dockerfile +35 -251
  4. README.md +27 -10
  5. start.sh +40 -0
.env CHANGED
@@ -48,12 +48,12 @@ AWS_SECRET_ACCESS_KEY=
48
  # Extension: agora_rtc
49
  # Azure STT key and region
50
  AZURE_STT_KEY=
51
- AZURE_STT_REGION=eastus
52
 
53
  # Extension: azure_tts
54
  # Azure TTS key and region
55
  AZURE_TTS_KEY=
56
- AZURE_TTS_REGION=eastus
57
 
58
  # Extension: cartesia_tts
59
  # Cartesia TTS key
 
48
  # Extension: agora_rtc
49
  # Azure STT key and region
50
  AZURE_STT_KEY=
51
+ AZURE_STT_REGION=
52
 
53
  # Extension: azure_tts
54
  # Azure TTS key and region
55
  AZURE_TTS_KEY=
56
+ AZURE_TTS_REGION=
57
 
58
  # Extension: cartesia_tts
59
  # Cartesia TTS key
.gitignore CHANGED
@@ -1 +1,58 @@
 
1
  .env
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Sensitive information
2
  .env
3
+ .env.*
4
+ !.env.example
5
+
6
+ # Node.js dependencies
7
+ node_modules/
8
+ .pnpm-store/
9
+ .npm/
10
+
11
+ # Build outputs
12
+ dist/
13
+ build/
14
+ out/
15
+ .next/
16
+
17
+ # Log files
18
+ *.log
19
+ npm-debug.log*
20
+ yarn-debug.log*
21
+ yarn-error.log*
22
+
23
+ # Editor configurations
24
+ .vscode/
25
+ .idea/
26
+ *.swp
27
+ *.swo
28
+
29
+ # OS specific files
30
+ .DS_Store
31
+ Thumbs.db
32
+
33
+ # Python
34
+ __pycache__/
35
+ *.py[cod]
36
+ *$py.class
37
+ venv/
38
+ env/
39
+ *.so
40
+ .Python
41
+
42
+ # Go
43
+ /go/
44
+ *.exe
45
+ *.exe~
46
+ *.dll
47
+ *.so
48
+ *.dylib
49
+ *.test
50
+ *.out
51
+ go.work
52
+
53
+ # Docker
54
+ .docker/
55
+
56
+ # Hugging Face Space specific
57
+ .space/
58
+ .cache/
Dockerfile CHANGED
@@ -1,8 +1,13 @@
1
  FROM ubuntu:22.04
2
 
3
- # Принудительное обновление для HuggingFace, чтобы использовать правильную версию Dockerfile
4
- # Установка необходимых пакетов
5
- RUN apt-get clean && apt-get update && apt-get install -y --no-install-recommends \
 
 
 
 
 
6
  libasound2 \
7
  libgstreamer1.0-dev \
8
  libunwind-dev \
@@ -12,271 +17,50 @@ RUN apt-get clean && apt-get update && apt-get install -y --no-install-recommend
12
  python3-venv \
13
  python3-pip \
14
  python3-dev \
15
- curl \
16
- wget \
17
  unzip \
18
- git \
19
- build-essential \
20
  jq \
21
  vim \
22
  ca-certificates \
23
  && apt-get clean && rm -rf /var/lib/apt/lists/* && rm -rf /tmp/*
24
 
25
- # Установка Go 1.21
26
  RUN wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz && \
27
  tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz && \
28
  rm go1.21.0.linux-amd64.tar.gz
 
 
29
  ENV PATH=$PATH:/usr/local/go/bin
30
  ENV GOPATH=/go
31
  ENV PATH=$PATH:$GOPATH/bin
32
-
33
- # Создаем каталог для кэша Go и устанавливаем правильные разрешения
34
  RUN mkdir -p /go && chmod 777 /go
 
35
 
36
  # Установка Node.js и pnpm
37
  RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
38
  apt-get install -y nodejs && \
39
  npm install -g pnpm
40
 
41
- # Устанавливаем рабочую директорию
42
  WORKDIR /app
43
-
44
- # Клонируем репозиторий TEN-Agent
45
- RUN git clone --depth 1 https://github.com/TEN-framework/TEN-Agent.git /app && \
46
- echo "Доступные ветки и теги:" && \
47
- git branch -a && \
48
- git tag -l
49
-
50
- # Устанавливаем task для сборки
51
- RUN go install github.com/go-task/task/v3/cmd/task@latest
52
-
53
- # Создаем необходимые директории и устанавливаем права
54
- RUN mkdir -p /app/server/bin && \
55
- mkdir -p /app/agents && \
56
- mkdir -p /tmp/ten_agent && \
57
- mkdir -p /app/.pnpm-store
58
-
59
- # Копируем .env файл
60
- COPY .env /app/.env
61
-
62
- # Компилируем сервер
63
- RUN cd /app/server && \
64
- go mod tidy && \
65
- go mod download && \
66
- go build -o bin/api main.go && \
67
- chmod +x bin/api
68
-
69
- # Установка зависимостей для Playground UI
70
- ENV PNPM_HOME="/app/.pnpm-store"
71
- ENV PATH="$PNPM_HOME:$PATH"
72
- RUN cd /app/playground && \
73
- pnpm install
74
-
75
- # Подготавливаем пример агента для работы Select Graph
76
- RUN cd /app && \
77
- mkdir -p agents/examples && \
78
- mkdir -p agents/examples/default && \
79
- mkdir -p agents/examples/demo && \
80
- mkdir -p agents/examples/experimental
81
-
82
- # Копируем примеры из репозитория
83
- RUN cd /app && \
84
- cp -r agents/examples/default agents/ && \
85
- cp -r agents/examples/demo agents/ && \
86
- cp -r agents/examples/experimental agents/
87
-
88
- # Создаем базовый manifest.json с правильной структурой
89
- RUN echo '{\n\
90
- "_ten": {\n\
91
- "version": "0.0.1"\n\
92
- },\n\
93
- "name": "default",\n\
94
- "agents": [\n\
95
- {\n\
96
- "name": "voice_agent",\n\
97
- "description": "A simple voice agent",\n\
98
- "type": "voice"\n\
99
- },\n\
100
- {\n\
101
- "name": "chat_agent",\n\
102
- "description": "A text chat agent",\n\
103
- "type": "chat"\n\
104
- }\n\
105
- ]\n\
106
- }' > /app/agents/manifest.json
107
-
108
- # Создаем базовый property.json
109
- RUN echo '{\n\
110
- "name": "TEN Agent Example",\n\
111
- "version": "0.0.1",\n\
112
- "extensions": ["openai_chatgpt"],\n\
113
- "description": "A basic voice agent with OpenAI",\n\
114
- "graphs": [\n\
115
- {\n\
116
- "name": "Voice Agent",\n\
117
- "description": "Basic voice agent with OpenAI",\n\
118
- "file": "voice_agent.json"\n\
119
- },\n\
120
- {\n\
121
- "name": "Chat Agent",\n\
122
- "description": "Simple chat agent",\n\
123
- "file": "chat_agent.json"\n\
124
- }\n\
125
- ]\n\
126
- }' > /app/agents/property.json
127
-
128
- # Создаем простые примеры графов с правильной структурой
129
- RUN echo '{\n\
130
- "_ten": {\n\
131
- "version": "0.0.1"\n\
132
- },\n\
133
- "nodes": [\n\
134
- {\n\
135
- "id": "start",\n\
136
- "type": "start",\n\
137
- "data": {\n\
138
- "x": 100,\n\
139
- "y": 100\n\
140
- }\n\
141
- },\n\
142
- {\n\
143
- "id": "openai_chatgpt",\n\
144
- "type": "openai_chatgpt",\n\
145
- "data": {\n\
146
- "x": 300,\n\
147
- "y": 200,\n\
148
- "properties": {\n\
149
- "model": "gpt-3.5-turbo",\n\
150
- "temperature": 0.7,\n\
151
- "system_prompt": "Вы полезный голосовой помощник."\n\
152
- }\n\
153
- }\n\
154
- },\n\
155
- {\n\
156
- "id": "end",\n\
157
- "type": "end",\n\
158
- "data": {\n\
159
- "x": 500,\n\
160
- "y": 100\n\
161
- }\n\
162
- }\n\
163
- ],\n\
164
- "edges": [\n\
165
- {\n\
166
- "id": "start_to_chatgpt",\n\
167
- "source": "start",\n\
168
- "target": "openai_chatgpt"\n\
169
- },\n\
170
- {\n\
171
- "id": "chatgpt_to_end",\n\
172
- "source": "openai_chatgpt",\n\
173
- "target": "end"\n\
174
- }\n\
175
- ],\n\
176
- "groups": [],\n\
177
- "templates": [],\n\
178
- "root": "start"\n\
179
- }' > /app/agents/voice_agent.json
180
-
181
- RUN echo '{\n\
182
- "_ten": {\n\
183
- "version": "0.0.1"\n\
184
- },\n\
185
- "nodes": [\n\
186
- {\n\
187
- "id": "start",\n\
188
- "type": "start",\n\
189
- "data": {\n\
190
- "x": 100,\n\
191
- "y": 100\n\
192
- }\n\
193
- },\n\
194
- {\n\
195
- "id": "openai_chatgpt",\n\
196
- "type": "openai_chatgpt",\n\
197
- "data": {\n\
198
- "x": 300,\n\
199
- "y": 200,\n\
200
- "properties": {\n\
201
- "model": "gpt-3.5-turbo",\n\
202
- "temperature": 0.7,\n\
203
- "system_prompt": "Вы полезный чат-бот."\n\
204
- }\n\
205
- }\n\
206
- },\n\
207
- {\n\
208
- "id": "end",\n\
209
- "type": "end",\n\
210
- "data": {\n\
211
- "x": 500,\n\
212
- "y": 100\n\
213
- }\n\
214
- }\n\
215
- ],\n\
216
- "edges": [\n\
217
- {\n\
218
- "id": "start_to_chatgpt",\n\
219
- "source": "start",\n\
220
- "target": "openai_chatgpt"\n\
221
- },\n\
222
- {\n\
223
- "id": "chatgpt_to_end",\n\
224
- "source": "openai_chatgpt",\n\
225
- "target": "end"\n\
226
- }\n\
227
- ],\n\
228
- "groups": [],\n\
229
- "templates": [],\n\
230
- "root": "start"\n\
231
- }' > /app/agents/chat_agent.json
232
-
233
- # Создаем конфигурацию для Next.js с прокси
234
- RUN echo '/** @type {import("next").NextConfig} */\n\
235
- const nextConfig = {\n\
236
- reactStrictMode: true,\n\
237
- images: {\n\
238
- remotePatterns: [\n\
239
- {\n\
240
- protocol: "https",\n\
241
- hostname: "**",\n\
242
- },\n\
243
- ],\n\
244
- },\n\
245
- experimental: {\n\
246
- externalDir: true,\n\
247
- },\n\
248
- async rewrites() {\n\
249
- return [\n\
250
- {\n\
251
- source: "/api/designer/v1/packages/reload",\n\
252
- destination: "http://localhost:49483/api/designer/v1/packages/reload"\n\
253
- },\n\
254
- {\n\
255
- source: "/api/dev/v1/packages/reload",\n\
256
- destination: "http://localhost:49483/api/dev/v1/packages/reload"\n\
257
- }\n\
258
- ]\n\
259
- },\n\
260
- webpack: (config) => {\n\
261
- config.module.rules.push({\n\
262
- test: /\\.svg$/,\n\
263
- use: ["@svgr/webpack"],\n\
264
- });\n\
265
- return config;\n\
266
- },\n\
267
- };\n\
268
- \n\
269
- module.exports = nextConfig;' > /app/playground/next.config.js
270
-
271
- # Устанавливаем правильные права доступа для всех файлов
272
- RUN chmod -R 777 /app
273
-
274
- # Настраиваем стартовый скрипт
275
- COPY app.py /app/app.py
276
- RUN chmod +x /app/app.py
277
-
278
- # Открываем порты
279
- EXPOSE 7860 8080 3000 49483
280
-
281
- # Запускаем API сервер и Playground в dev-режиме
282
- ENTRYPOINT ["python3", "/app/app.py"]
 
1
  FROM ubuntu:22.04
2
 
3
+ # Установка базовых пакетов
4
+ RUN apt-get update && apt-get install -y \
5
+ curl \
6
+ git \
7
+ wget \
8
+ make \
9
+ gcc \
10
+ build-essential \
11
  libasound2 \
12
  libgstreamer1.0-dev \
13
  libunwind-dev \
 
17
  python3-venv \
18
  python3-pip \
19
  python3-dev \
 
 
20
  unzip \
 
 
21
  jq \
22
  vim \
23
  ca-certificates \
24
  && apt-get clean && rm -rf /var/lib/apt/lists/* && rm -rf /tmp/*
25
 
26
+ # Установка Go
27
  RUN wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz && \
28
  tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz && \
29
  rm go1.21.0.linux-amd64.tar.gz
30
+
31
+ # Установка Task
32
  ENV PATH=$PATH:/usr/local/go/bin
33
  ENV GOPATH=/go
34
  ENV PATH=$PATH:$GOPATH/bin
 
 
35
  RUN mkdir -p /go && chmod 777 /go
36
+ RUN go install github.com/go-task/task/v3/cmd/task@latest
37
 
38
  # Установка Node.js и pnpm
39
  RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
40
  apt-get install -y nodejs && \
41
  npm install -g pnpm
42
 
43
+ # Клонирование репозитория TEN-Agent
44
  WORKDIR /app
45
+ RUN git clone --depth 1 https://github.com/TEN-framework/TEN-Agent.git /app
46
+
47
+ # Создание .env файла из окружения Hugging Face Space
48
+ RUN echo "\
49
+ AGORA_APP_ID=${AGORA_APP_ID}\n\
50
+ AGORA_APP_CERTIFICATE=${AGORA_APP_CERTIFICATE}\n\
51
+ AZURE_STT_KEY=${AZURE_STT_KEY}\n\
52
+ AZURE_STT_REGION=${AZURE_STT_REGION}\n\
53
+ AZURE_TTS_KEY=${AZURE_TTS_KEY}\n\
54
+ AZURE_TTS_REGION=${AZURE_TTS_REGION}\n\
55
+ OPENAI_API_KEY=${OPENAI_API_KEY}\n\
56
+ " > /app/.env
57
+
58
+ # Создаем стартовый скрипт для запуска на Hugging Face
59
+ COPY start.sh /app/start.sh
60
+ RUN chmod +x /app/start.sh
61
+
62
+ # Открываем порты (7860 для HF Space, 8080 для API, 49483 для дизайнера)
63
+ EXPOSE 7860 8080 49483 3000 3001 3002
64
+
65
+ # Запускаем TEN-Agent через официальный стартовый скрипт
66
+ CMD ["/app/start.sh"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
README.md CHANGED
@@ -19,18 +19,35 @@ pinned: false
19
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](https://github.com/TEN-framework/ten-agent/pulls)
20
  [![GitHub license](https://img.shields.io/badge/License-Apache_2.0-blue.svg?labelColor=%20%23155EEF&color=%20%23528bff)](https://github.com/TEN-framework/ten-agent/blob/main/LICENSE)
21
 
22
- # TEN Agent на Hugging Face
23
 
24
- Это деплой TEN Agent на Hugging Face Spaces.
25
 
26
- ## Требуемые API ключи
27
 
28
- Для работы TEN Agent вам понадобятся:
29
- - Agora App ID и App Certificate
30
- - OpenAI API Key (или любой совместимый с OpenAI LLM)
31
- - Deepgram API Key для распознавания речи
32
- - ElevenLabs API Key для синтеза речи
33
 
34
- ## Документация
35
 
36
- Подробная документация: [https://doc.theten.ai/ten-agent/overview](https://doc.theten.ai/ten-agent/overview)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](https://github.com/TEN-framework/ten-agent/pulls)
20
  [![GitHub license](https://img.shields.io/badge/License-Apache_2.0-blue.svg?labelColor=%20%23155EEF&color=%20%23528bff)](https://github.com/TEN-framework/ten-agent/blob/main/LICENSE)
21
 
22
+ # TEN-Agent на Hugging Face Space
23
 
24
+ Это официальная версия [TEN-Agent](https://github.com/TEN-framework/TEN-Agent), развернутая на Hugging Face Space. Приложение позволяет взаимодействовать с голосовыми и чат-агентами, используя различные языковые модели и расширения.
25
 
26
+ ## Что такое TEN-Agent?
27
 
28
+ TEN Agent - это конверсационный голосовой ИИ-агент, работающий на платформе TEN, интегрирующий Deepseek, Gemini, OpenAI, технологии RTC, и даже аппаратные возможности ESP32. Он обеспечивает возможности ИИ в реальном времени, такие как зрение, слух и речь, и полностью совместим с платформами Dify и Coze.
 
 
 
 
29
 
30
+ ## Как использовать?
31
 
32
+ 1. Выберите тип графа (например, Voice Agent, Chat Agent)
33
+ 2. Выберите соответствующий модуль
34
+ 3. Выберите расширение и настройте параметры API-ключей
35
+
36
+ ## Доступные функции
37
+
38
+ - **Голосовой агент**: Взаимодействие с ИИ через голос
39
+ - **Чат-агент**: Текстовое взаимодействие с ИИ
40
+ - **Интеграция с различными LLM**: OpenAI, Gemini, Deepseek и другие
41
+ - **Мультимодальные возможности**: Анализ изображений, интерпретация голоса и другие функции
42
+
43
+ ## Технические детали
44
+
45
+ Этот Space полностью воспроизводит официальный контейнер TEN-Agent, используя систему сборки `task` с командами:
46
+ - `task use` - для сборки агента
47
+ - `task run` - для запуска сервера
48
+
49
+ ## Ссылки
50
+
51
+ - [Официальный репозиторий TEN-Agent](https://github.com/TEN-framework/TEN-Agent)
52
+ - [Документация TEN-Agent](https://doc.theten.ai/ten-agent/getting_started)
53
+ - [Сайт TEN Framework](https://agent.theten.ai/)
start.sh ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ # Вывод информации о запуске
5
+ echo "===== Starting TEN-Agent on HuggingFace Space ====="
6
+ echo "$(date)"
7
+ echo "Current directory: $(pwd)"
8
+
9
+ # Проверяем наличие .env файла
10
+ if [ -f .env ]; then
11
+ echo "✅ .env file found"
12
+ cat .env | grep -v "KEY\|CERTIFICATE" | sed 's/=.*/=***/'
13
+ else
14
+ echo "❌ Error: .env file not found"
15
+ exit 1
16
+ fi
17
+
18
+ # Проверяем установку task
19
+ if command -v task &> /dev/null; then
20
+ echo "✅ task command is available"
21
+ task --version
22
+ else
23
+ echo "❌ Error: task command not found"
24
+ exit 1
25
+ fi
26
+
27
+ # Запускаем сборку агента с официальной командой
28
+ echo "===== Building TEN-Agent ====="
29
+ task use
30
+
31
+ # Обновляем порт для HuggingFace Space (HF использует порт 7860)
32
+ echo "===== Setting up port for HuggingFace Space ====="
33
+ export PORT=7860
34
+
35
+ # Отключаем запрос на использование камеры для HuggingFace Space
36
+ export NEXT_PUBLIC_DISABLE_CAMERA=true
37
+
38
+ # Запускаем TEN-Agent с официальной командой
39
+ echo "===== Starting TEN-Agent server ====="
40
+ exec task run