#!/usr/bin/env python3 import os import subprocess import sys import time from pathlib import Path import signal import shutil def main(): processes = [] try: # Пути к исполняемым файлам api_binary = Path("/app/server/bin/api") playground_dir = Path("/app/playground") # Проверяем существование файлов if not api_binary.exists(): print(f"ERROR: API binary not found at {api_binary}", file=sys.stderr) return 1 if not playground_dir.exists(): print(f"ERROR: Playground directory not found at {playground_dir}", file=sys.stderr) return 1 # Запускаем простой HTTP сервер для Hugging Face from http.server import HTTPServer, SimpleHTTPRequestHandler class CustomHandler(SimpleHTTPRequestHandler): def do_GET(self): if self.path == '/': self.send_response(200) self.send_header('Content-type', 'text/html; charset=utf-8') self.end_headers() html_content = """
TEN Agent API сервер работает на порту 8080.
В связи с ограничениями Hugging Face Space, полноценный интерфейс Playground UI не может быть запущен напрямую.
Для использования полного интерфейса, подключите локальный Playground к этому API:
git clone https://github.com/TEN-framework/TEN-Agent.git
cd TEN-Agent/playground
pnpm install
AGENT_SERVER_URL=https://nitrox-ten.hf.space pnpm dev
http://localhost:3000
См. документацию TEN Agent для получения дополнительной информации.
""" self.wfile.write(html_content.encode('utf-8')) elif self.path.startswith('/health') or self.path.startswith('/list') or self.path.startswith('/graphs'): # Проксирование API запросов к API серверу self.send_response(301) self.send_header('Location', f'http://localhost:8080{self.path}') self.end_headers() else: self.send_response(404) self.send_header('Content-type', 'text/plain; charset=utf-8') self.end_headers() self.wfile.write(b'Not Found') # Запускаем API сервер print("Starting TEN-Agent API server on port 8080...") api_server_process = subprocess.Popen([str(api_binary)]) processes.append(api_server_process) # Запускаем HTTP сервер для Hugging Face port = 7860 # Hugging Face Space обычно ожидает сервер на порту 7860 print(f"Starting HTTP server on port {port}...") httpd = HTTPServer(('0.0.0.0', port), CustomHandler) httpd.serve_forever() except KeyboardInterrupt: print("Shutting down...") finally: # Завершаем все процессы при выходе for proc in processes: try: proc.terminate() proc.wait(timeout=5) except: proc.kill() return 0 if __name__ == "__main__": # Корректная обработка сигналов завершения signal.signal(signal.SIGINT, lambda sig, frame: sys.exit(0)) signal.signal(signal.SIGTERM, lambda sig, frame: sys.exit(0)) sys.exit(main())