#!/usr/bin/env python3 import os import subprocess import threading import time import signal import sys from http.server import HTTPServer, SimpleHTTPRequestHandler import socket # Порт для Hugging Face Spaces HF_PORT = int(os.environ.get("PORT", 7860)) # Порт для TEN Agent API TEN_AGENT_PORT = 8080 def is_port_in_use(port): """Проверка занят ли порт""" with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: return s.connect_ex(('localhost', port)) == 0 def run_ten_agent(): """Запуск TEN Agent сервера""" print("Запуск TEN Agent...") # Создаем директорию для логов, если её нет os.makedirs("/tmp/ten_agent", exist_ok=True) # Запускаем TEN Agent сервер server_process = subprocess.Popen( ["/app/server/bin/api"], env={ **os.environ, "LOG_PATH": "/tmp/ten_agent", "LOG_STDOUT": "true", "SERVER_PORT": str(TEN_AGENT_PORT), "WORKERS_MAX": "10", "WORKER_QUIT_TIMEOUT_SECONDES": "60" } ) return server_process # Простой обработчик для веб-сервера class TenAgentHandler(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() # Статус TEN Agent ten_agent_status = "работает" if is_port_in_use(TEN_AGENT_PORT) else "не запущен" html = f"""
Для взаимодействия с TEN Agent API используйте следующий адрес:
https://nitrox-ten.hf.space/api/
Подробная информация о TEN Agent:
""" self.wfile.write(html.encode('utf-8')) else: self.send_error(404) # Обработчик сигналов для корректного завершения def signal_handler(sig, frame): print("Получен сигнал завершения, останавливаю TEN Agent...") if 'server_process' in globals() and server_process: server_process.terminate() server_process.wait(timeout=10) sys.exit(0) # Установка обработчиков сигналов signal.signal(signal.SIGINT, signal_handler) signal.signal(signal.SIGTERM, signal_handler) if __name__ == "__main__": # Запуск TEN Agent в отдельном потоке server_process = run_ten_agent() # Ожидаем запуск TEN Agent print(f"Ожидаем запуск TEN Agent на порту {TEN_AGENT_PORT}...") timeout = 60 while timeout > 0 and not is_port_in_use(TEN_AGENT_PORT): time.sleep(1) timeout -= 1 if is_port_in_use(TEN_AGENT_PORT): print(f"TEN Agent успешно запущен на порту {TEN_AGENT_PORT}") else: print(f"Не удалось дождаться запуска TEN Agent на порту {TEN_AGENT_PORT}") # Запуск веб-сервера для Hugging Face print(f"Запуск веб-сервера на порту {HF_PORT}...") httpd = HTTPServer(('', HF_PORT), TenAgentHandler) try: httpd.serve_forever() except KeyboardInterrupt: pass finally: httpd.server_close() signal_handler(None, None)