llm-eval-ap / main.py
sha6th's picture
Initial deploy of LLM eval API
7d95632
Raw
History Blame Contribute Delete
1.87 kB
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from src.aggregator import evaluate_all
from src.database import init_db, save_evaluation
app = FastAPI(
title="LLM Evaluation & Hallucination Detection Framework",
version="1.0.0"
)
init_db()
# Define what the request should look like
class EvalRequest(BaseModel):
context: str
question: str
llm_response: str
# Define what the response will look like
class EvalResponse(BaseModel):
final_verdict: str
cosine: dict
fluency: dict
bert_score: dict
nli: dict
@app.get("/")
def home():
return {"message": "LLM Evaluation Framework is running"}
@app.post("/evaluate", response_model=EvalResponse)
def evaluate(request: EvalRequest):
# Edge case — empty inputs
if not request.context.strip():
raise HTTPException(status_code=400, detail="Context cannot be empty")
if not request.question.strip():
raise HTTPException(status_code=400, detail="Question cannot be empty")
if not request.llm_response.strip():
raise HTTPException(status_code=400, detail="LLM response cannot be empty")
# Run evaluation
result = evaluate_all(
context=request.context,
question=request.question,
llm_response=request.llm_response
)
save_evaluation(request.context, request.question, request.llm_response, result)
return result
from src.database import get_all_evaluations
@app.get("/history")
def history():
rows = get_all_evaluations()
results = []
for row in rows:
results.append({
"id": row[0],
"context": row[1],
"question": row[2],
"llm_response": row[3],
"final_verdict": row[4],
"created_at": row[11]
})
return {"total": len(results), "evaluations": results}