Add RAGAS initial version
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user