thechaiexperiment commited on
Commit
dc6ba19
·
1 Parent(s): 60c8707

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +40 -6
app.py CHANGED
@@ -558,36 +558,70 @@ async def chat_endpoint(chat_query: ChatQuery):
558
  @app.post("/api/resources")
559
  async def resources_endpoint(profile: MedicalProfile):
560
  try:
 
 
 
 
 
561
  context = f"""
562
  Medical conditions: {', '.join(profile.chronic_conditions)}
563
  Current symptoms: {', '.join(profile.daily_symptoms)}
564
  Restrictions: {', '.join(profile.food_restrictions)}
565
  Mental health: {', '.join(profile.mental_conditions)}
566
  """
567
- query_text = context
568
- query_embedding = embed_query_text(query_text) # Embed the query text
569
- embeddings_data = load_embeddings ()
 
 
 
 
 
 
 
 
570
  folder_path = 'downloaded_articles/downloaded_articles'
571
  initial_results = query_embeddings(query_embedding, embeddings_data, n_results=5)
 
 
 
 
572
  document_ids = [doc_id for doc_id, _ in initial_results]
573
  document_texts = retrieve_document_texts(document_ids, folder_path)
 
 
 
 
574
  cross_encoder = models['cross_encoder']
575
  scores = cross_encoder.predict([(query_text, doc) for doc in document_texts])
576
  scored_documents = list(zip(scores, document_ids, document_texts))
577
- ranked_docs = scored_documents.sort(key=lambda x: x[0], reverse=True)
 
 
578
  resources = []
579
- for (doc_id, _), score, text in ranked_docs[:10]:
580
- doc_info = data['df'][data['df']['id'] == doc_id].iloc[0]
 
 
 
581
  resources.append({
582
  "id": doc_id,
583
  "title": doc_info['title'],
584
  "content": text[:200],
585
  "score": float(score)
586
  })
 
587
  return {"resources": resources, "success": True}
 
 
 
 
588
  except Exception as e:
 
 
589
  raise HTTPException(status_code=500, detail=str(e))
590
 
 
591
  @app.post("/api/recipes")
592
  async def recipes_endpoint(profile: MedicalProfile):
593
  try:
 
558
  @app.post("/api/resources")
559
  async def resources_endpoint(profile: MedicalProfile):
560
  try:
561
+ # Validate profile input
562
+ if not profile.chronic_conditions or not profile.daily_symptoms or not profile.food_restrictions or not profile.mental_conditions:
563
+ raise ValueError("Incomplete profile data provided.")
564
+
565
+ # Build context
566
  context = f"""
567
  Medical conditions: {', '.join(profile.chronic_conditions)}
568
  Current symptoms: {', '.join(profile.daily_symptoms)}
569
  Restrictions: {', '.join(profile.food_restrictions)}
570
  Mental health: {', '.join(profile.mental_conditions)}
571
  """
572
+ query_text = context
573
+
574
+ # Embed query and fetch embeddings
575
+ query_embedding = embed_query_text(query_text)
576
+ if query_embedding is None:
577
+ raise ValueError("Query embedding generation failed.")
578
+
579
+ embeddings_data = load_embeddings()
580
+ if not embeddings_data:
581
+ raise ValueError("Failed to load embeddings data.")
582
+
583
  folder_path = 'downloaded_articles/downloaded_articles'
584
  initial_results = query_embeddings(query_embedding, embeddings_data, n_results=5)
585
+ if not initial_results:
586
+ raise ValueError("No initial results found from query_embeddings.")
587
+
588
+ # Retrieve document texts
589
  document_ids = [doc_id for doc_id, _ in initial_results]
590
  document_texts = retrieve_document_texts(document_ids, folder_path)
591
+ if not document_texts or any(doc is None for doc in document_texts):
592
+ raise ValueError("Failed to retrieve valid document texts.")
593
+
594
+ # Perform reranking
595
  cross_encoder = models['cross_encoder']
596
  scores = cross_encoder.predict([(query_text, doc) for doc in document_texts])
597
  scored_documents = list(zip(scores, document_ids, document_texts))
598
+ scored_documents.sort(key=lambda x: x[0], reverse=True)
599
+
600
+ # Build resources response
601
  resources = []
602
+ for score, doc_id, text in scored_documents[:10]:
603
+ doc_info = data['df'][data['df']['id'] == doc_id]
604
+ if doc_info.empty:
605
+ continue # Skip missing documents
606
+ doc_info = doc_info.iloc[0] # Safe to access the first row now
607
  resources.append({
608
  "id": doc_id,
609
  "title": doc_info['title'],
610
  "content": text[:200],
611
  "score": float(score)
612
  })
613
+
614
  return {"resources": resources, "success": True}
615
+
616
+ except ValueError as ve:
617
+ # Handle expected errors gracefully
618
+ raise HTTPException(status_code=400, detail=str(ve))
619
  except Exception as e:
620
+ # Handle unexpected errors
621
+ print(f"Unexpected error: {e}")
622
  raise HTTPException(status_code=500, detail=str(e))
623
 
624
+
625
  @app.post("/api/recipes")
626
  async def recipes_endpoint(profile: MedicalProfile):
627
  try: