3v324v23 commited on
Commit
58cec34
·
1 Parent(s): eae7567

Настройка деплоя TEN Agent на Hugging Face с использованием контейнера ten_agent_dev

Browse files
Files changed (4) hide show
  1. Dockerfile +38 -5
  2. README.md +12 -1
  3. app.py +159 -0
  4. static/index.html +0 -1
Dockerfile CHANGED
@@ -1,16 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  FROM ubuntu:22.04
2
 
3
  RUN apt-get clean && apt-get update && apt-get install -y --no-install-recommends \
 
 
 
 
 
4
  python3 \
 
 
 
 
 
 
 
5
  && apt-get clean && rm -rf /var/lib/apt/lists/* && rm -rf /tmp/*
6
 
7
  WORKDIR /app
8
 
9
- COPY server.py /app/
10
- COPY static /app/static/
 
 
 
11
 
12
- RUN chmod +x /app/server.py
 
13
 
14
- EXPOSE 7860
 
15
 
16
- CMD ["python3", "server.py"]
 
 
1
+ FROM ghcr.io/ten-framework/ten_agent_build:0.4.17 AS builder
2
+
3
+ ARG SESSION_CONTROL_CONF=session_control.conf
4
+ ARG USE_AGENT=agents/examples/default
5
+
6
+ WORKDIR /app
7
+
8
+ COPY . .
9
+
10
+ # Настройка окружения и установка зависимостей
11
+ RUN mkdir -p agents/out && \
12
+ echo '{"path": []}' > agents/session_control.conf && \
13
+ cd /app && \
14
+ task clean && task use AGENT=${USE_AGENT}
15
+
16
  FROM ubuntu:22.04
17
 
18
  RUN apt-get clean && apt-get update && apt-get install -y --no-install-recommends \
19
+ libasound2 \
20
+ libgstreamer1.0-dev \
21
+ libunwind-dev \
22
+ libc++1 \
23
+ libssl-dev \
24
  python3 \
25
+ python3-venv \
26
+ python3-pip \
27
+ python3-dev \
28
+ curl \
29
+ jq \
30
+ vim \
31
+ ca-certificates \
32
  && apt-get clean && rm -rf /var/lib/apt/lists/* && rm -rf /tmp/*
33
 
34
  WORKDIR /app
35
 
36
+ # Копирование собранных файлов из builder
37
+ COPY --from=builder /app/agents/.release/ /app/agents/
38
+ COPY --from=builder /app/server/bin/api /app/server/bin/api
39
+ COPY --from=builder /usr/local/lib /usr/local/lib
40
+ COPY --from=builder /usr/lib/python3 /usr/lib/python3
41
 
42
+ # Добавление скрипта для запуска сервера
43
+ COPY app.py /app/
44
 
45
+ # Экспозиция порта
46
+ EXPOSE 7860 8080
47
 
48
+ # Запуск Python скрипта для интеграции с Hugging Face
49
+ CMD ["python3", "app.py"]
README.md CHANGED
@@ -2,12 +2,23 @@
2
  title: TEN Agent
3
  emoji: 🤖
4
  colorFrom: blue
5
- colorTo: indigo
6
  sdk: docker
7
  sdk_version: "latest"
8
  pinned: false
9
  ---
10
 
 
 
 
 
 
 
 
 
 
 
 
11
  # TEN Agent на Hugging Face
12
 
13
  Это деплой TEN Agent на Hugging Face Spaces.
 
2
  title: TEN Agent
3
  emoji: 🤖
4
  colorFrom: blue
5
+ colorTo: purple
6
  sdk: docker
7
  sdk_version: "latest"
8
  pinned: false
9
  ---
10
 
11
+ ![TEN Agent banner](https://github.com/TEN-framework/docs/blob/main/assets/jpg/banner.jpg?raw=true)
12
+
13
+ <div align="center">
14
+
15
+ [![Follow on X](https://img.shields.io/twitter/follow/TenFramework?logo=X&color=%20%23f5f5f5)](https://twitter.com/intent/follow?screen_name=TenFramework)
16
+ [![Discussion posts](https://img.shields.io/github/discussions/TEN-framework/ten-agent?labelColor=%20%23FDB062&color=%20%23f79009)](https://github.com/TEN-framework/ten-agent/discussions/)
17
+ [![Commits](https://img.shields.io/github/commit-activity/m/TEN-framework/ten-agent?labelColor=%20%237d89b0&color=%20%235d6b98)](https://github.com/TEN-framework/ten-agent/graphs/commit-activity)
18
+ [![Issues closed](https://img.shields.io/github/issues-search?query=repo%3ATEN-framework%2Ften-agent%20is%3Aclosed&label=issues%20closed&labelColor=green&color=green)](https://github.com/TEN-framework/ten-agent/issues)
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.
app.py ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ import os
3
+ import subprocess
4
+ import threading
5
+ import time
6
+ import signal
7
+ import sys
8
+ from http.server import HTTPServer, SimpleHTTPRequestHandler
9
+ import socket
10
+
11
+ # Порт для Hugging Face Spaces
12
+ HF_PORT = int(os.environ.get("PORT", 7860))
13
+ # Порт для TEN Agent API
14
+ TEN_AGENT_PORT = 8080
15
+
16
+ def is_port_in_use(port):
17
+ """Проверка занят ли порт"""
18
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
19
+ return s.connect_ex(('localhost', port)) == 0
20
+
21
+ def run_ten_agent():
22
+ """Запуск TEN Agent сервера"""
23
+ print("Запуск TEN Agent...")
24
+
25
+ # Создаем директорию для логов, если её нет
26
+ os.makedirs("/tmp/ten_agent", exist_ok=True)
27
+
28
+ # Запускаем TEN Agent сервер
29
+ server_process = subprocess.Popen(
30
+ ["/app/server/bin/api"],
31
+ env={
32
+ **os.environ,
33
+ "LOG_PATH": "/tmp/ten_agent",
34
+ "LOG_STDOUT": "true",
35
+ "SERVER_PORT": str(TEN_AGENT_PORT),
36
+ "WORKERS_MAX": "10",
37
+ "WORKER_QUIT_TIMEOUT_SECONDES": "60"
38
+ }
39
+ )
40
+
41
+ return server_process
42
+
43
+ # Простой обработчик для веб-сервера
44
+ class TenAgentHandler(SimpleHTTPRequestHandler):
45
+ def do_GET(self):
46
+ if self.path == '/':
47
+ self.send_response(200)
48
+ self.send_header('Content-type', 'text/html; charset=utf-8')
49
+ self.end_headers()
50
+
51
+ # Статус TEN Agent
52
+ ten_agent_status = "работает" if is_port_in_use(TEN_AGENT_PORT) else "не запущен"
53
+
54
+ html = f"""
55
+ <html>
56
+ <head>
57
+ <title>TEN Agent на Hugging Face</title>
58
+ <style>
59
+ body {{
60
+ font-family: Arial, sans-serif;
61
+ max-width: 800px;
62
+ margin: 0 auto;
63
+ padding: 20px;
64
+ line-height: 1.6;
65
+ }}
66
+ h1, h2 {{
67
+ color: #2563eb;
68
+ }}
69
+ pre {{
70
+ background-color: #f1f5f9;
71
+ padding: 15px;
72
+ border-radius: 5px;
73
+ overflow-x: auto;
74
+ }}
75
+ .status {{
76
+ padding: 8px 16px;
77
+ border-radius: 4px;
78
+ display: inline-block;
79
+ margin-bottom: 20px;
80
+ }}
81
+ .status.running {{
82
+ background-color: #dcfce7;
83
+ color: #166534;
84
+ }}
85
+ .status.stopped {{
86
+ background-color: #fee2e2;
87
+ color: #991b1b;
88
+ }}
89
+ </style>
90
+ </head>
91
+ <body>
92
+ <h1>TEN Agent на Hugging Face</h1>
93
+
94
+ <div class="status {{'running' if ten_agent_status == 'работает' else 'stopped'}}">
95
+ Статус TEN Agent: {ten_agent_status}
96
+ </div>
97
+
98
+ <h2>Информация о сервере</h2>
99
+ <ul>
100
+ <li>TEN Agent API доступен на порту: {TEN_AGENT_PORT}</li>
101
+ <li>Веб-интерфейс работает на порту: {HF_PORT}</li>
102
+ </ul>
103
+
104
+ <h2>Взаимодействие с API</h2>
105
+ <p>Для взаимодействия с TEN Agent API используйте следующий адрес:</p>
106
+ <pre>https://nitrox-ten.hf.space/api/</pre>
107
+
108
+ <h2>Документация</h2>
109
+ <p>Подробная информация о TEN Agent:</p>
110
+ <ul>
111
+ <li><a href="https://doc.theten.ai/ten-agent/overview" target="_blank">Официальная документация</a></li>
112
+ <li><a href="https://github.com/TEN-framework/TEN-Agent" target="_blank">Репозиторий на GitHub</a></li>
113
+ </ul>
114
+ </body>
115
+ </html>
116
+ """
117
+
118
+ self.wfile.write(html.encode('utf-8'))
119
+ else:
120
+ self.send_error(404)
121
+
122
+ # Обработчик сигналов для корректного завершения
123
+ def signal_handler(sig, frame):
124
+ print("Получен сигнал завершения, останавливаю TEN Agent...")
125
+ if 'server_process' in globals() and server_process:
126
+ server_process.terminate()
127
+ server_process.wait(timeout=10)
128
+ sys.exit(0)
129
+
130
+ # Установка обработчиков сигналов
131
+ signal.signal(signal.SIGINT, signal_handler)
132
+ signal.signal(signal.SIGTERM, signal_handler)
133
+
134
+ if __name__ == "__main__":
135
+ # Запуск TEN Agent в отдельном потоке
136
+ server_process = run_ten_agent()
137
+
138
+ # Ожидаем запуск TEN Agent
139
+ print(f"Ожидаем запуск TEN Agent на порту {TEN_AGENT_PORT}...")
140
+ timeout = 60
141
+ while timeout > 0 and not is_port_in_use(TEN_AGENT_PORT):
142
+ time.sleep(1)
143
+ timeout -= 1
144
+
145
+ if is_port_in_use(TEN_AGENT_PORT):
146
+ print(f"TEN Agent успешно запущен на порту {TEN_AGENT_PORT}")
147
+ else:
148
+ print(f"Не удалось дождаться запуска TEN Agent на порту {TEN_AGENT_PORT}")
149
+
150
+ # Запуск веб-сервера для Hugging Face
151
+ print(f"Запуск веб-сервера на порту {HF_PORT}...")
152
+ httpd = HTTPServer(('', HF_PORT), TenAgentHandler)
153
+ try:
154
+ httpd.serve_forever()
155
+ except KeyboardInterrupt:
156
+ pass
157
+ finally:
158
+ httpd.server_close()
159
+ signal_handler(None, None)
static/index.html DELETED
@@ -1 +0,0 @@
1
- <html><head><title>TEN Agent</title></head><body><h1>TEN Agent успешно запущен на Hugging Face!</h1><p>Для полноценной работы необходимо настроить API ключи.</p><p><a href='https://doc.theten.ai/ten-agent/overview'>Официальная документация</a></p></body></html>