Al-Fathir
Refactor retrieval logic to return results directly and improve handling of 'all_source' parameter
5ddb1a4
from fastapi import FastAPI, HTTPException, Header
from utils.embedding_service import embed
from utils.retrieval_service import retrieve
from pydantic import BaseModel
import dotenv
import os
from fastapi.middleware.cors import CORSMiddleware
dotenv.load_dotenv()
API_KEY = os.getenv("BEARER_API_KEY")
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Mengizinkan akses dari semua origin (bisa diganti dengan domain frontend)
allow_credentials=True,
allow_methods=["*"], # Mengizinkan semua method HTTP
allow_headers=["*"], # Mengizinkan semua header
)
class QueryRequest(BaseModel):
query: str
hadits: str
all_source: bool
@app.post("/api/search")
async def search(query_request: QueryRequest, authorization: str = Header(None)):
if authorization != f"Bearer {API_KEY}":
raise HTTPException(status_code=403, detail="Unauthorized")
try:
query = query_request.query
hadits = query_request.hadits
# Proses embedding
embedding = embed(query)
print(hadits)
# Proses retrieval
results = retrieve(embedding,hadits,all_source=query_request.all_source)
return results
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))