| """Chat session management endpoints.""" |
|
|
| from typing import List, Optional |
|
|
| from fastapi import APIRouter, Depends, HTTPException |
| from fastapi.responses import PlainTextResponse |
| from pydantic import BaseModel |
|
|
| router = APIRouter(prefix="/api/sessions") |
|
|
|
|
| class CreateSessionRequest(BaseModel): |
| title: str = "New Chat" |
| document_ids: Optional[List[str]] = None |
|
|
|
|
| def get_chat_store(): |
| from core.bootstrap import get_chat_store as _get |
| return _get() |
|
|
|
|
| @router.get("") |
| async def list_sessions(store=Depends(get_chat_store)): |
| sessions = store.list_sessions() |
| return {"sessions": sessions} |
|
|
|
|
| @router.post("") |
| async def create_session(request: CreateSessionRequest, store=Depends(get_chat_store)): |
| session = store.create_session(request.title, request.document_ids) |
| return session |
|
|
|
|
| @router.get("/{session_id}/messages") |
| async def get_messages(session_id: str, store=Depends(get_chat_store)): |
| messages = store.get_messages(session_id) |
| return {"messages": messages} |
|
|
|
|
| @router.post("/{session_id}/export") |
| async def export_session(session_id: str, store=Depends(get_chat_store)): |
| content = store.export_session(session_id) |
| if not content: |
| raise HTTPException(status_code=404, detail="Session not found") |
| return PlainTextResponse(content, media_type="text/plain") |
|
|