3v324v23 commited on
Commit
92a057f
·
1 Parent(s): f22502d

\Исправлен URL для подключения API и добавлены CORS заголовки\

Browse files
Files changed (1) hide show
  1. app.py +24 -3
app.py CHANGED
@@ -33,6 +33,10 @@ def main():
33
  os.makedirs(log_dir, exist_ok=True)
34
  # Даем всем права на запись в директорию логов
35
  os.chmod(log_dir, 0o777)
 
 
 
 
36
 
37
  # Запускаем API сервер с правильными переменными окружения
38
  print("Starting TEN-Agent API server on port 8080...")
@@ -42,6 +46,8 @@ def main():
42
  api_server_env["WORKERS_MAX"] = "4" # Устанавливаем значение для WORKERS_MAX
43
  api_server_env["WORKER_QUIT_TIMEOUT_SECONDES"] = "30" # Добавляем timeout для воркеров
44
  api_server_env["PORT"] = "8080" # Явно указываем порт
 
 
45
  api_server_process = subprocess.Popen([str(api_binary)], env=api_server_env)
46
  processes.append(api_server_process)
47
 
@@ -92,11 +98,15 @@ def main():
92
  # Запускаем Playground UI на порту 3000
93
  print("Starting Playground UI on port 3000...")
94
  playground_env = os.environ.copy()
95
- playground_env["AGENT_SERVER_URL"] = "http://localhost:8080" # Подключаемся к локальному API серверу
 
96
  playground_env["NODE_ENV"] = "production" # Убедимся, что запускаем в production режиме
97
  playground_env["PORT"] = "3000" # Указываем порт через переменную окружения
98
  playground_env["HOST"] = "0.0.0.0" # Указываем привязку ко всем интерфейсам
99
 
 
 
 
100
  # В standalone режиме используем дополнительные параметры
101
  if is_standalone:
102
  print("Using Next.js standalone mode...")
@@ -142,11 +152,16 @@ def main():
142
  self._handle_request('DELETE')
143
 
144
  def do_OPTIONS(self):
145
- self._handle_request('OPTIONS')
 
 
 
 
 
146
 
147
  def _handle_request(self, method):
148
  try:
149
- # Определяем, какой сервер должен обработать запрос
150
  target_host = container_ip # Используем IP контейнера вместо localhost
151
 
152
  # При запросе статических файлов Next.js, если включен standalone режим,
@@ -233,6 +248,11 @@ def main():
233
  if header.lower() != 'transfer-encoding': # Исключаем заголовок transfer-encoding
234
  self.send_header(header, value)
235
 
 
 
 
 
 
236
  # Завершаем заголовки
237
  self.end_headers()
238
 
@@ -321,6 +341,7 @@ def main():
321
  <p>Система пытается запустить все компоненты. Попробуйте обновить страницу через минуту.</p>
322
  <p>Технические детали:</p>
323
  <pre>
 
324
  Container IP: {container_ip}
325
  Method: {method}
326
  Path: {self.path}
 
33
  os.makedirs(log_dir, exist_ok=True)
34
  # Даем всем права на запись в директорию логов
35
  os.chmod(log_dir, 0o777)
36
+
37
+ # Определяем публичный URL для API в пространстве Hugging Face
38
+ public_url = os.environ.get('SPACE_URL', 'https://nitrox-ten.hf.space')
39
+ print(f"Using public URL: {public_url}")
40
 
41
  # Запускаем API сервер с правильными переменными окружения
42
  print("Starting TEN-Agent API server on port 8080...")
 
46
  api_server_env["WORKERS_MAX"] = "4" # Устанавливаем значение для WORKERS_MAX
47
  api_server_env["WORKER_QUIT_TIMEOUT_SECONDES"] = "30" # Добавляем timeout для воркеров
48
  api_server_env["PORT"] = "8080" # Явно указываем порт
49
+ # Разрешаем CORS
50
+ api_server_env["GIN_MODE"] = "release"
51
  api_server_process = subprocess.Popen([str(api_binary)], env=api_server_env)
52
  processes.append(api_server_process)
53
 
 
98
  # Запускаем Playground UI на порту 3000
99
  print("Starting Playground UI on port 3000...")
100
  playground_env = os.environ.copy()
101
+ # Подключаемся к API через внешний URL, доступный из браузера
102
+ playground_env["AGENT_SERVER_URL"] = public_url
103
  playground_env["NODE_ENV"] = "production" # Убедимся, что запускаем в production режиме
104
  playground_env["PORT"] = "3000" # Указываем порт через переменную окружения
105
  playground_env["HOST"] = "0.0.0.0" # Указываем привязку ко всем интерфейсам
106
 
107
+ # Добавляем переменные для корректной работы Next.js с API
108
+ playground_env["NEXT_PUBLIC_API_URL"] = public_url
109
+
110
  # В standalone режиме используем дополнительные параметры
111
  if is_standalone:
112
  print("Using Next.js standalone mode...")
 
152
  self._handle_request('DELETE')
153
 
154
  def do_OPTIONS(self):
155
+ # Для OPTIONS запросов всегда отвечаем с CORS заголовками
156
+ self.send_response(200)
157
+ self.send_header('Access-Control-Allow-Origin', '*')
158
+ self.send_header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
159
+ self.send_header('Access-Control-Allow-Headers', 'Content-Type, Authorization, x-requested-with')
160
+ self.end_headers()
161
 
162
  def _handle_request(self, method):
163
  try:
164
+ # Определяем, какой сервер должен обработить запрос
165
  target_host = container_ip # Используем IP контейнера вместо localhost
166
 
167
  # При запросе статических файлов Next.js, если включен standalone режим,
 
248
  if header.lower() != 'transfer-encoding': # Исключаем заголовок transfer-encoding
249
  self.send_header(header, value)
250
 
251
+ # Добавляем CORS заголовки
252
+ self.send_header('Access-Control-Allow-Origin', '*')
253
+ self.send_header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
254
+ self.send_header('Access-Control-Allow-Headers', 'Content-Type, Authorization, x-requested-with')
255
+
256
  # Завершаем заголовки
257
  self.end_headers()
258
 
 
341
  <p>Система пытается запустить все компоненты. Попробуйте обновить страницу через минуту.</p>
342
  <p>Технические детали:</p>
343
  <pre>
344
+ Public URL: {public_url}
345
  Container IP: {container_ip}
346
  Method: {method}
347
  Path: {self.path}