Refactor startup logic in app.py to prioritize knowledge base rebuild; implement fallback loading for existing base on failure
Browse files
app.py
CHANGED
@@ -298,21 +298,30 @@ vector_store = None
|
|
298 |
@app.on_event("startup")
|
299 |
async def startup_event():
|
300 |
global vector_store
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
316 |
|
317 |
# API endpoints
|
318 |
@app.post("/chat", response_model=ChatResponse)
|
|
|
298 |
@app.on_event("startup")
|
299 |
async def startup_event():
|
300 |
global vector_store
|
301 |
+
try:
|
302 |
+
# Намеренно вызываем ошибку деления на ноль для рестарта
|
303 |
+
1/0
|
304 |
+
except:
|
305 |
+
pass
|
306 |
+
|
307 |
+
try:
|
308 |
+
# Сразу запускаем полную пересборку базы знаний
|
309 |
+
vector_store = await build_knowledge_base_async(embeddings, force_rebuild=True)
|
310 |
+
logger.info("Successfully rebuilt knowledge base on startup")
|
311 |
+
except Exception as e:
|
312 |
+
logger.error(f"Failed to rebuild knowledge base on startup: {str(e)}")
|
313 |
+
# Пробуем загрузить существующую базу как fallback
|
314 |
+
if os.path.exists(os.path.join(VECTOR_STORE_PATH, "index.faiss")):
|
315 |
+
try:
|
316 |
+
vector_store = FAISS.load_local(
|
317 |
+
VECTOR_STORE_PATH,
|
318 |
+
embeddings,
|
319 |
+
allow_dangerous_deserialization=True
|
320 |
+
)
|
321 |
+
logger.info("Loaded existing knowledge base as fallback")
|
322 |
+
except Exception as load_error:
|
323 |
+
logger.error(f"Could not load existing knowledge base: {str(load_error)}")
|
324 |
+
vector_store = None
|
325 |
|
326 |
# API endpoints
|
327 |
@app.post("/chat", response_model=ChatResponse)
|