Source code for api_gateway.routers.conversations

"""Conversation history proxy endpoints — list / messages / delete."""

import logging

import httpx
from api_gateway.deps import extract_user_id, get_runtime_config
from fastapi import APIRouter, HTTPException, Request

logger = logging.getLogger(__name__)

router = APIRouter(prefix="/api/v1", tags=["conversations"])


[docs] @router.get("/conversations") async def list_conversations(request: Request): """List conversations for the authenticated user.""" rag_service_url, timeout = get_runtime_config(request) user_id = extract_user_id(request) try: async with httpx.AsyncClient(timeout=timeout) as client: params = {"user_id": user_id} if user_id else {} resp = await client.get( f"{rag_service_url}/conversations", params=params, ) if resp.status_code != 200: logger.error("RAG service conversations error (status=%d): %s", resp.status_code, resp.text) status = resp.status_code if resp.status_code < 500 else 502 raise HTTPException(status_code=status, detail="Unable to retrieve conversations") return resp.json() except httpx.RequestError as e: logger.error("RAG service conversations connection failed: %s", e) raise HTTPException(status_code=503, detail="Service temporarily unavailable")
[docs] @router.get("/conversations/{conversation_id}/messages") async def get_conversation_messages(conversation_id: str, request: Request): """Get messages for a conversation.""" rag_service_url, timeout = get_runtime_config(request) user_id = extract_user_id(request) try: async with httpx.AsyncClient(timeout=timeout) as client: params = {"user_id": user_id} if user_id else {} resp = await client.get( f"{rag_service_url}/conversations/{conversation_id}/messages", params=params, ) if resp.status_code != 200: logger.error("RAG service conversation messages error (status=%d): %s", resp.status_code, resp.text) status = resp.status_code if resp.status_code < 500 else 502 raise HTTPException(status_code=status, detail="Unable to retrieve conversation messages") return resp.json() except httpx.RequestError as e: logger.error("RAG service conversation messages connection failed: %s", e) raise HTTPException(status_code=503, detail="Service temporarily unavailable")
[docs] @router.delete("/conversations/{conversation_id}") async def delete_conversation(conversation_id: str, request: Request): """Delete a conversation.""" rag_service_url, timeout = get_runtime_config(request) user_id = extract_user_id(request) try: async with httpx.AsyncClient(timeout=timeout) as client: params = {"user_id": user_id} if user_id else {} resp = await client.delete( f"{rag_service_url}/conversations/{conversation_id}", params=params, ) if resp.status_code != 200: logger.error("RAG service delete conversation error (status=%d): %s", resp.status_code, resp.text) status = resp.status_code if resp.status_code < 500 else 502 raise HTTPException(status_code=status, detail="Unable to delete conversation") return resp.json() except httpx.RequestError as e: logger.error("RAG service delete conversation connection failed: %s", e) raise HTTPException(status_code=503, detail="Service temporarily unavailable")