Spaces:
Sleeping
Sleeping
| # app.py - Hugging Face Spaces version with auto-extract | |
| import os | |
| import zipfile | |
| from fastapi import FastAPI, HTTPException | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from pydantic import BaseModel | |
| import chromadb | |
| from sentence_transformers import SentenceTransformer | |
| import gradio as gr | |
| # Database path | |
| DB_PATH = "./medqa_db" | |
| ZIP_PATH = "./medqa_db.zip" | |
| # Extract database if needed | |
| if not os.path.exists(DB_PATH) and os.path.exists(ZIP_PATH): | |
| print("Extracting database from zip file...") | |
| with zipfile.ZipFile(ZIP_PATH, 'r') as zip_ref: | |
| zip_ref.extractall(".") | |
| print("Database extracted successfully!") | |
| # Initialize | |
| print(f"Loading database from: {DB_PATH}") | |
| client = chromadb.PersistentClient(path=DB_PATH) | |
| collection = client.get_collection("medqa") | |
| print(f"Collection loaded with {collection.count()} items") | |
| print(f"Loading MedCPT model...") | |
| model = SentenceTransformer('ncbi/MedCPT-Query-Encoder') | |
| print("Initialization complete!") | |
| # FastAPI app | |
| app = FastAPI(title="MedQA Search API") | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| class SearchRequest(BaseModel): | |
| query: str | |
| num_results: int = 3 | |
| class SearchResponse(BaseModel): | |
| results: list |