44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
from typing import Any
|
|
|
|
from fastapi import APIRouter, FastAPI, HTTPException, Response, status
|
|
|
|
from ...context import get_context
|
|
from ...views import EvaluationFeedbackRequest
|
|
|
|
|
|
def bootstrap_feedback_endpoints(app: FastAPI) -> None:
|
|
router = APIRouter(
|
|
prefix="/traces/{trace_id}/feedback",
|
|
tags=["feedback"],
|
|
)
|
|
|
|
@router.put("/", status_code=status.HTTP_202_ACCEPTED)
|
|
def set_feedback(trace_id: str, input: EvaluationFeedbackRequest) -> Response:
|
|
trace = get_context().tracing_database.get(trace_id)
|
|
if trace is None:
|
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND)
|
|
|
|
trace.feedback = input.feedback
|
|
|
|
get_context().tracing_database.update(trace_id, trace)
|
|
return Response(status_code=status.HTTP_202_ACCEPTED)
|
|
|
|
@router.get("/", status_code=status.HTTP_200_OK)
|
|
def get_feedback(trace_id: str) -> Any:
|
|
trace = get_context().tracing_database.get(trace_id)
|
|
if trace is None:
|
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND)
|
|
return trace.feedback
|
|
|
|
@router.delete("/", status_code=status.HTTP_204_NO_CONTENT)
|
|
def delete_feedback(trace_id: str) -> Any:
|
|
trace = get_context().tracing_database.get(trace_id)
|
|
if trace is None:
|
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND)
|
|
|
|
trace.feedback = None
|
|
|
|
get_context().tracing_database.update(trace_id, trace)
|
|
return Response(status_code=status.HTTP_204_NO_CONTENT)
|
|
|
|
app.include_router(router)
|