umer6016
Pass user_id from frontend to backend for Supabase metrics logging
c951f9c
from fastapi import APIRouter, HTTPException
from openai import OpenAI
from ..models.chat import ChatRequest, ChatResponse, ChatMessage
from ..services.metrics_logger import (
log_chat_answer,
save_chat_answer_to_supabase,
metrics_enabled,
)
router = APIRouter()
@router.post("", response_model=ChatResponse, summary="Chat using generated system prompt")
async def chat(req: ChatRequest):
if not req.system_prompt:
raise HTTPException(status_code=400, detail="system_prompt is required")
messages = [{"role": "system", "content": req.system_prompt}]
for m in req.messages:
messages.append({"role": m.role, "content": m.content})
try:
client = OpenAI()
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
)
answer = resp.choices[0].message.content or ""
if metrics_enabled():
provenance = "primary_plus_secondary" if "SECONDARY SOURCE" in req.system_prompt else "primary_only"
try:
# Best-effort file log
log_chat_answer(
question=req.messages[-1].content if req.messages else "",
answer=answer,
provenance=provenance,
user=None,
)
# Best-effort Supabase log
save_chat_answer_to_supabase(
question=req.messages[-1].content if req.messages else "",
answer=answer,
system_prompt=req.system_prompt,
user_id=req.user_id,
url=None,
)
except Exception as log_exc:
print(f"⚠️ Metrics logging skipped: {log_exc}")
return ChatResponse(message=ChatMessage(role="assistant", content=answer))
except Exception as exc:
raise HTTPException(status_code=500, detail=str(exc))