Dayende/rag-administration-bf
1
1from fastapi import FastAPI2from pydantic import BaseModel3from src.rag.retriever import Retriever4from src.rag.generator import Generator5import uvicorn6import os7from fastapi.middleware.cors import CORSMiddleware8from typing import List, Dict, Any9 10# ... (Vérification 'qdrant_data' et chargement des modèles) ...11print("Initialisation du Retriever et du Generator...")12retriever = Retriever()13generator = Generator() # Utilise flan-t5-base14print("✅ API RAG prête à l'emploi.")15 16app = FastAPI(title="API RAG Administration BF")17 18# ... (Configuration CORS - C'est très important, gardez-le) ...19app.add_middleware(20 CORSMiddleware,21 allow_origins=["*"], 22 allow_credentials=True,23 allow_methods=["*"],24 allow_headers=["*"],25)26 27 28# Un endpoint "hello world" à la racine (/)29@app.get("/")30def read_root():31 """Endpoint racine pour vérifier que l'API est en ligne."""32 return {"message": "Bonjour ! C'est l'API RAG. Je suis prêt à travailler. \n Pour acceder à mon GUI ici: https://huggingface.co/spaces/Dayende/frontend-rag"}33# --------------------34 35class Query(BaseModel):36 question: str37 top_k: int = 2 38 39class Source(BaseModel):40 titre: str | None41 url: str | None42 43class Response(BaseModel):44 answer: str45 sources: List[Source]46 47 48@app.post("/generate", response_model=Response)49def ask_rag_endpoint(query: Query):50 if not query.question:51 return {"answer": "Veuillez poser une question.", "sources": []}52 53 docs = retriever.retrieve(query.question, top_k=1)54 (answer_text, source_doc) = generator.generate(query.question, docs)55 56 sources_list = []57 if source_doc:58 sources_list.append(Source(59 titre=source_doc.get("titre", "Source inconnue"),60 url=source_doc.get("url", "#")61 ))62 63 return Response(answer=answer_text, sources=sources_list)