Rulga commited on
Commit
22d424f
·
1 Parent(s): fac641c

Add directory creation and health check functionality in app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -2
app.py CHANGED
@@ -23,9 +23,42 @@ from typing import Union
23
  # Initialize environment variables
24
  load_dotenv()
25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  app = FastAPI(title="Status Law Assistant API")
27
  app.include_router(analysis_router)
28
 
 
 
 
 
 
 
29
  # Add custom exception handlers
30
  @app.exception_handler(requests.exceptions.RequestException)
31
  async def network_error_handler(request: Request, exc: requests.exceptions.RequestException):
@@ -66,7 +99,6 @@ def init_models():
66
  raise HTTPException(status_code=500, detail=f"Model initialization failed: {str(e)}")
67
 
68
  # --------------- Knowledge Base Management ---------------
69
- VECTOR_STORE_PATH = "vector_store"
70
  URLS = [
71
  "https://status.law",
72
  "https://status.law/about",
@@ -89,7 +121,9 @@ def build_knowledge_base(_embeddings):
89
  start_time = time.time()
90
  documents = []
91
 
92
- os.makedirs(VECTOR_STORE_PATH, exist_ok=True)
 
 
93
 
94
  for url in URLS:
95
  try:
@@ -254,6 +288,23 @@ async def health_check():
254
  }
255
  )
256
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
  if __name__ == "__main__":
258
  import uvicorn
259
  uvicorn.run(app, host="0.0.0.0", port=8000)
 
23
  # Initialize environment variables
24
  load_dotenv()
25
 
26
+ # Define constants for directory paths
27
+ VECTOR_STORE_PATH = "vector_store"
28
+ CHAT_HISTORY_PATH = "chat_history"
29
+
30
+ def create_required_directories():
31
+ """Create required directories if they don't exist"""
32
+ directories = [VECTOR_STORE_PATH, CHAT_HISTORY_PATH]
33
+ for directory in directories:
34
+ try:
35
+ if not os.path.exists(directory):
36
+ os.makedirs(directory, exist_ok=True)
37
+ print(f"Created directory: {directory}")
38
+
39
+ # Create .gitkeep file to preserve empty directory
40
+ gitkeep_path = os.path.join(directory, '.gitkeep')
41
+ with open(gitkeep_path, 'w') as f:
42
+ pass
43
+ except Exception as e:
44
+ print(f"Error creating directory {directory}: {str(e)}")
45
+ raise HTTPException(
46
+ status_code=500,
47
+ detail=f"Failed to create required directory: {directory}"
48
+ )
49
+
50
+ # Create directories before initializing the app
51
+ create_required_directories()
52
+
53
  app = FastAPI(title="Status Law Assistant API")
54
  app.include_router(analysis_router)
55
 
56
+ # Add startup event handler to ensure directories exist
57
+ @app.on_event("startup")
58
+ async def startup_event():
59
+ """Ensure required directories exist on startup"""
60
+ create_required_directories()
61
+
62
  # Add custom exception handlers
63
  @app.exception_handler(requests.exceptions.RequestException)
64
  async def network_error_handler(request: Request, exc: requests.exceptions.RequestException):
 
99
  raise HTTPException(status_code=500, detail=f"Model initialization failed: {str(e)}")
100
 
101
  # --------------- Knowledge Base Management ---------------
 
102
  URLS = [
103
  "https://status.law",
104
  "https://status.law/about",
 
121
  start_time = time.time()
122
  documents = []
123
 
124
+ # Ensure vector store directory exists
125
+ if not os.path.exists(VECTOR_STORE_PATH):
126
+ os.makedirs(VECTOR_STORE_PATH, exist_ok=True)
127
 
128
  for url in URLS:
129
  try:
 
288
  }
289
  )
290
 
291
+ # Add diagnostic endpoint
292
+ @app.get("/directory-status")
293
+ async def check_directory_status():
294
+ """Check status of required directories"""
295
+ return {
296
+ "vector_store": {
297
+ "exists": os.path.exists(VECTOR_STORE_PATH),
298
+ "path": os.path.abspath(VECTOR_STORE_PATH),
299
+ "contents": os.listdir(VECTOR_STORE_PATH) if os.path.exists(VECTOR_STORE_PATH) else []
300
+ },
301
+ "chat_history": {
302
+ "exists": os.path.exists(CHAT_HISTORY_PATH),
303
+ "path": os.path.abspath(CHAT_HISTORY_PATH),
304
+ "contents": os.listdir(CHAT_HISTORY_PATH) if os.path.exists(CHAT_HISTORY_PATH) else []
305
+ }
306
+ }
307
+
308
  if __name__ == "__main__":
309
  import uvicorn
310
  uvicorn.run(app, host="0.0.0.0", port=8000)