Files
2026-02-09 21:45:56 +00:00

54 lines
1.3 KiB
Python

from fastapi import FastAPI
from pydantic import BaseModel
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision
from datasets import Dataset
from pathlib import Path
from dotenv import load_dotenv
import os
import math
app = FastAPI()
ENV_PATH = Path("../../agent/.env")
load_dotenv(dotenv_path=ENV_PATH)
def sanitize(obj):
if isinstance(obj, float) and math.isnan(obj):
return None
if isinstance(obj, dict):
return {k: sanitize(v) for k, v in obj.items()}
if isinstance(obj, list):
return [sanitize(v) for v in obj]
return obj
if not os.getenv("OPENAI_API_KEY"):
raise RuntimeError("OPENAI_API_KEY not found")
class EvalRequest(BaseModel):
question: str
answer: str
contexts: list[str]
@app.post("/evaluate")
def evaluate_rag(req: EvalRequest):
dataset = Dataset.from_dict({
"question": [req.question],
"answer": [req.answer],
"contexts": [req.contexts],
# "ground_truth": []
})
result = evaluate(
dataset,
metrics=[
faithfulness,
# answer_relevancy,
# context_precision
],
)
raw = result.to_pandas().to_dict(orient="records")[0]
return sanitize(raw)