3v324v23 commited on
Commit
d7f0eff
·
1 Parent(s): d377d95

Очищен файл .env и настроено использование переменных окружения из секретов HuggingFace Space

Browse files
Files changed (2) hide show
  1. .env +12 -14
  2. app.py +76 -149
.env CHANGED
@@ -38,7 +38,7 @@ ALIYUN_ANALYTICDB_NAMESPACE=
38
  ALIYUN_ANALYTICDB_NAMESPACE_PASSWORD=
39
 
40
  # Extension: aliyun_text_embedding
41
- ALIYUN_TEXT_EMBEDDING_API_KEY=sk-476a575fa3a14ac68d43f7872dace036
42
 
43
  # Extension: bedrock_llm
44
  # Extension: polly_tts
@@ -47,17 +47,17 @@ AWS_SECRET_ACCESS_KEY=
47
 
48
  # Extension: agora_rtc
49
  # Azure STT key and region
50
- AZURE_STT_KEY=E5bbiNKmwkBfDyZ9qc3JFW1Q9nUPvHuVxqSoq2PCbpdeYJOCHhDxJQQJ99BCACYeBjFXJ3w3AAAAACOGdc2u
51
  AZURE_STT_REGION=eastus
52
 
53
  # Extension: azure_tts
54
  # Azure TTS key and region
55
- AZURE_TTS_KEY=E5bbiNKmwkBfDyZ9qc3JFW1Q9nUPvHuVxqSoq2PCbpdeYJOCHhDxJQQJ99BCACYeBjFXJ3w3AAAAACOGdc2u
56
  AZURE_TTS_REGION=eastus
57
 
58
  # Extension: cartesia_tts
59
  # Cartesia TTS key
60
- CARTESIA_API_KEY=sk_car_2qjYJUbcsc4HcCHMZ9uR_
61
 
62
  # Extension: cosy_tts
63
  # Cosy TTS key
@@ -73,11 +73,11 @@ ELEVENLABS_TTS_KEY=
73
 
74
  # Extension: fish_audio_tts
75
  # Fish.audio TTS key
76
- FISH_AUDIO_TTS_KEY=ec4082d068af4f0299dcdad3c915845e
77
 
78
  # Extension: gemini_llm
79
  # Gemini API key
80
- GEMINI_API_KEY=AIzaSyCEXiYBM5atA78-k9KwGdUZZdl9kSPYLhI
81
 
82
  # Extension: litellm
83
  # Using Environment Variables, refer to https://docs.litellm.ai/docs/providers
@@ -93,8 +93,8 @@ LITELLM_MODEL=gpt-4o-mini
93
 
94
  # Extension: minimax_tts
95
  # Minimax TTS key
96
- MINIMAX_TTS_API_KEY=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJHcm91cE5hbWUiOiJWbGFkaXNsYXYgVmlzIiwiVXNlck5hbWUiOiJWbGFkaXNsYXYgVmlzIiwiQWNjb3VudCI6IiIsIlN1YmplY3RJRCI6IjE4Nzk5NTE4NDgzMzc1NzU5OTAiLCJQaG9uZSI6IiIsIkdyb3VwSUQiOiIxODc5OTUxODQ4MzMzMzgxNjg2IiwiUGFnZU5hbWUiOiIiLCJNYWlsIjoibml0cm8ubWlyQGdtYWlsLmNvbSIsIkNyZWF0ZVRpbWUiOiIyMDI1LTAxLTI0IDIwOjI2OjAzIiwiVG9rZW5UeXBlIjoxLCJpc3MiOiJtaW5pbWF4In0.OJBGDnvul4sjDXhsCix3AD-KX3LweTfPCOSNQkYcASxEFloat0p84dlCYI8TDZ9XsjyxoGdZITa5D0WxttefbeEsaDpZbsjn2Cz3BvLs-hpRNZ7zCrpU84kv257hQBX3l5SjPZwTJbmaKLhM3Lj0--7zCKbo4iQYsLGGs57YPp90cXIA463qiqSV-5TqIc_HIeY8whl6SyBxpFsIS47b7Th3LpiKZ6twtxtucV1X-t8pBcz_sGAew3v-lgpC7AEiEUGaoheSJ2ZsAMY9vLxE3lVkGBKeE7FVLWY3kQm767Qswa2RApHcmBtbZzbuBsVuZa-q0IckpczkKkML8i33OA
97
- MINIMAX_TTS_GROUP_ID=1879951848333381686
98
 
99
  # Extension: openai_chatgpt
100
  # OpenAI API key
@@ -118,16 +118,15 @@ OPENAI_PROXY_URL=
118
 
119
  # Extension: qwen_llm
120
  # Qwen API key
121
- QWEN_API_KEY=sk-476a575fa3a14ac68d43f7872dace036
122
-
123
 
124
  # Extension: weatherapi_tool_python
125
  # Weathers API key
126
- WEATHERAPI_API_KEY=83bc6e7fe72141889c925452252803
127
 
128
  # Extension: bingsearch_tool_python
129
  # Bing search API key
130
- BING_API_KEY=a2976160a013496788e6901ba9e23205
131
 
132
  # Extension: tsdb_firestore
133
  # Firestore certifications
@@ -138,5 +137,4 @@ FIRESTORE_CLIENT_EMAIL=
138
  FIRESTORE_CLIENT_ID=
139
  FIRESTORE_CERT_URL=
140
 
141
-
142
- DEEPSEEK_API_KEY=sk-602ab9d010c34292a80ad3c24de4bb72
 
38
  ALIYUN_ANALYTICDB_NAMESPACE_PASSWORD=
39
 
40
  # Extension: aliyun_text_embedding
41
+ ALIYUN_TEXT_EMBEDDING_API_KEY=
42
 
43
  # Extension: bedrock_llm
44
  # Extension: polly_tts
 
47
 
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
60
+ CARTESIA_API_KEY=
61
 
62
  # Extension: cosy_tts
63
  # Cosy TTS key
 
73
 
74
  # Extension: fish_audio_tts
75
  # Fish.audio TTS key
76
+ FISH_AUDIO_TTS_KEY=
77
 
78
  # Extension: gemini_llm
79
  # Gemini API key
80
+ GEMINI_API_KEY=
81
 
82
  # Extension: litellm
83
  # Using Environment Variables, refer to https://docs.litellm.ai/docs/providers
 
93
 
94
  # Extension: minimax_tts
95
  # Minimax TTS key
96
+ MINIMAX_TTS_API_KEY=
97
+ MINIMAX_TTS_GROUP_ID=
98
 
99
  # Extension: openai_chatgpt
100
  # OpenAI API key
 
118
 
119
  # Extension: qwen_llm
120
  # Qwen API key
121
+ QWEN_API_KEY=
 
122
 
123
  # Extension: weatherapi_tool_python
124
  # Weathers API key
125
+ WEATHERAPI_API_KEY=
126
 
127
  # Extension: bingsearch_tool_python
128
  # Bing search API key
129
+ BING_API_KEY=
130
 
131
  # Extension: tsdb_firestore
132
  # Firestore certifications
 
137
  FIRESTORE_CLIENT_ID=
138
  FIRESTORE_CERT_URL=
139
 
140
+ DEEPSEEK_API_KEY=
 
app.py CHANGED
@@ -1,159 +1,86 @@
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)
 
 
 
 
 
 
 
 
1
  #!/usr/bin/env python3
2
  import os
3
  import subprocess
 
 
 
4
  import sys
5
+ import time
6
+ from pathlib import Path
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
+ def main():
9
+ # Запустить TEN-Agent
10
+ server_process = None
11
+ try:
12
+ # Путь к исполняемому файлу API сервера
13
+ api_binary = Path("/app/server/bin/api")
14
+
15
+ # Проверяем существование файла
16
+ if not api_binary.exists():
17
+ print(f"ERROR: API binary not found at {api_binary}", file=sys.stderr)
18
+ return 1
19
+
20
+ # Запускаем API сервер
21
+ print("Starting TEN-Agent server...")
22
+ server_process = subprocess.Popen([str(api_binary)])
23
+
24
+ # Запускаем простой HTTP сервер для отображения информации
25
+ from http.server import HTTPServer, SimpleHTTPRequestHandler
26
+
27
+ class CustomHandler(SimpleHTTPRequestHandler):
28
+ def do_GET(self):
29
+ if self.path == '/':
30
+ self.send_response(200)
31
+ self.send_header('Content-type', 'text/html')
32
+ self.end_headers()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
 
34
+ html_content = """
35
+ <!DOCTYPE html>
36
+ <html>
37
+ <head>
38
+ <title>TEN Agent - Hugging Face Space</title>
39
+ <style>
40
+ body { font-family: Arial, sans-serif; line-height: 1.6; max-width: 800px; margin: 0 auto; padding: 20px; }
41
+ h1 { color: #333; }
42
+ .info { background: #f8f9fa; border-left: 4px solid #28a745; padding: 15px; margin-bottom: 20px; }
43
+ .endpoint { background: #e9ecef; padding: 10px; border-radius: 5px; font-family: monospace; }
44
+ </style>
45
+ </head>
46
+ <body>
47
+ <h1>TEN Agent запущен успешно!</h1>
48
+ <div class="info">
49
+ <p>TEN Agent API сервер работает на порту 8080.</p>
50
+ </div>
51
+ <h2>API эндпоинты:</h2>
52
+ <ul>
53
+ <li><span class="endpoint">GET /health</span> - проверка состояния сервера</li>
54
+ <li><span class="endpoint">GET /list</span> - список запущенных агентов</li>
55
+ <li><span class="endpoint">GET /graphs</span> - доступные графы</li>
56
+ </ul>
57
+ <p>См. <a href="https://github.com/TEN-framework/TEN-Agent" target="_blank">документацию TEN Agent</a> для получения дополнительной информации.</p>
58
+ </body>
59
+ </html>
60
+ """
61
 
62
+ self.wfile.write(html_content.encode())
63
+ else:
64
+ self.send_response(404)
65
+ self.send_header('Content-type', 'text/plain')
66
+ self.end_headers()
67
+ self.wfile.write(b'Not Found')
68
+
69
+ # Запускаем HTTP сервер
70
+ port = 7860 # Hugging Face Space обычно ожидает сервер на порту 7860
71
+ print(f"Starting HTTP server on port {port}...")
72
+ httpd = HTTPServer(('0.0.0.0', port), CustomHandler)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  httpd.serve_forever()
74
+
75
  except KeyboardInterrupt:
76
+ print("Shutting down...")
77
  finally:
78
+ # Завершаем API сервер при выходе
79
+ if server_process:
80
+ server_process.terminate()
81
+ server_process.wait()
82
+
83
+ return 0
84
+
85
+ if __name__ == "__main__":
86
+ sys.exit(main())