Rulga commited on
Commit
0479845
·
1 Parent(s): af49a43

Add health check for FastAPI server startup and improve error handling

Browse files
Files changed (1) hide show
  1. app.py +18 -5
app.py CHANGED
@@ -2,6 +2,8 @@ import os
2
  import sys
3
  import threading
4
  import time
 
 
5
 
6
  # Установка конфигурационной директории для Matplotlib
7
  os.environ['MPLCONFIGDIR'] = os.path.join(os.getcwd(), 'cache', 'matplotlib')
@@ -10,7 +12,6 @@ os.makedirs(os.environ['MPLCONFIGDIR'], exist_ok=True)
10
 
11
  import gradio as gr
12
  import uvicorn
13
- import requests
14
  from fastapi import FastAPI
15
  from fastapi.responses import HTMLResponse
16
 
@@ -22,6 +23,19 @@ if current_dir not in sys.path:
22
  # Import our main application
23
  from api.fastapi_server import app as fastapi_app
24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  # Run FastAPI server in a separate thread
26
  def run_fastapi():
27
  uvicorn.run(fastapi_app, host="0.0.0.0", port=8000)
@@ -31,7 +45,9 @@ fastapi_thread = threading.Thread(target=run_fastapi, daemon=True)
31
  fastapi_thread.start()
32
 
33
  # Wait for FastAPI to start
34
- time.sleep(5)
 
 
35
 
36
  # Create a Gradio interface that will proxy requests to FastAPI
37
  def chat_with_api(message, conversation_id=None):
@@ -66,7 +82,6 @@ def check_kb_status():
66
  data = response.json()
67
  if data["knowledge_base_exists"]:
68
  kb_info = data["kb_info"]
69
- # Добавляем проверки на None и значения по умолчанию
70
  version = kb_info.get('version', 'N/A')
71
  size = kb_info.get('size', 0)
72
  return f"✅ База знаний готова к работе\nВерсия: {version}\nРазмер: {size:.2f if size else 0} MB"
@@ -143,8 +158,6 @@ with gr.Blocks(title="Status Law Assistant", theme=gr.themes.Soft()) as demo:
143
  """)
144
 
145
  if __name__ == "__main__":
146
- # Проверяем статус базы знаний при запуске
147
- initial_status = check_kb_status()
148
  # Launch Gradio interface
149
  demo.launch(
150
  server_name="0.0.0.0",
 
2
  import sys
3
  import threading
4
  import time
5
+ import requests
6
+ from requests.exceptions import ConnectionError
7
 
8
  # Установка конфигурационной директории для Matplotlib
9
  os.environ['MPLCONFIGDIR'] = os.path.join(os.getcwd(), 'cache', 'matplotlib')
 
12
 
13
  import gradio as gr
14
  import uvicorn
 
15
  from fastapi import FastAPI
16
  from fastapi.responses import HTMLResponse
17
 
 
23
  # Import our main application
24
  from api.fastapi_server import app as fastapi_app
25
 
26
+ def wait_for_fastapi(timeout=30, interval=0.5):
27
+ """Wait for FastAPI server to start"""
28
+ start_time = time.time()
29
+ while time.time() - start_time < timeout:
30
+ try:
31
+ response = requests.get("http://127.0.0.1:8000/health")
32
+ if response.status_code == 200:
33
+ print("FastAPI server is ready!")
34
+ return True
35
+ except ConnectionError:
36
+ time.sleep(interval)
37
+ return False
38
+
39
  # Run FastAPI server in a separate thread
40
  def run_fastapi():
41
  uvicorn.run(fastapi_app, host="0.0.0.0", port=8000)
 
45
  fastapi_thread.start()
46
 
47
  # Wait for FastAPI to start
48
+ if not wait_for_fastapi():
49
+ print("Failed to start FastAPI server")
50
+ sys.exit(1)
51
 
52
  # Create a Gradio interface that will proxy requests to FastAPI
53
  def chat_with_api(message, conversation_id=None):
 
82
  data = response.json()
83
  if data["knowledge_base_exists"]:
84
  kb_info = data["kb_info"]
 
85
  version = kb_info.get('version', 'N/A')
86
  size = kb_info.get('size', 0)
87
  return f"✅ База знаний готова к работе\nВерсия: {version}\nРазмер: {size:.2f if size else 0} MB"
 
158
  """)
159
 
160
  if __name__ == "__main__":
 
 
161
  # Launch Gradio interface
162
  demo.launch(
163
  server_name="0.0.0.0",