优化目录结构
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
from fastapi import APIRouter, HTTPException, Request, status
|
||||
|
||||
from schemas import (
|
||||
CreateSessionRequest,
|
||||
CreateSessionResponse,
|
||||
SendMessageRequest,
|
||||
SendMessageResponse,
|
||||
SessionHistoryResponse,
|
||||
)
|
||||
from service import ChatProviderError, ChatService
|
||||
from storage import SessionNotFoundError, SessionStorageError
|
||||
|
||||
|
||||
router = APIRouter(prefix="/sessions", tags=["sessions"])
|
||||
|
||||
|
||||
def get_chat_service(request: Request) -> ChatService:
|
||||
return request.app.state.chat_service
|
||||
|
||||
|
||||
@router.post(
|
||||
"",
|
||||
response_model=CreateSessionResponse,
|
||||
status_code=status.HTTP_201_CREATED,
|
||||
)
|
||||
async def create_session(
|
||||
request: Request,
|
||||
body: CreateSessionRequest | None = None,
|
||||
) -> CreateSessionResponse:
|
||||
try:
|
||||
return await get_chat_service(request).create_session(
|
||||
body.system_prompt if body is not None else None
|
||||
)
|
||||
except SessionStorageError as exc:
|
||||
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
||||
|
||||
|
||||
@router.post("/{session_id}/messages", response_model=SendMessageResponse)
|
||||
async def send_message(
|
||||
session_id: str,
|
||||
body: SendMessageRequest,
|
||||
request: Request,
|
||||
) -> SendMessageResponse:
|
||||
try:
|
||||
return await get_chat_service(request).generate_response(
|
||||
session_id, body.content
|
||||
)
|
||||
except SessionNotFoundError as exc:
|
||||
raise HTTPException(status_code=404, detail="session not found") from exc
|
||||
except ChatProviderError as exc:
|
||||
raise HTTPException(status_code=502, detail=str(exc)) from exc
|
||||
except SessionStorageError as exc:
|
||||
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
||||
|
||||
|
||||
@router.get("/{session_id}/messages", response_model=SessionHistoryResponse)
|
||||
async def get_session_history(
|
||||
session_id: str,
|
||||
request: Request,
|
||||
) -> SessionHistoryResponse:
|
||||
try:
|
||||
return await get_chat_service(request).get_session_history(session_id)
|
||||
except SessionNotFoundError as exc:
|
||||
raise HTTPException(status_code=404, detail="session not found") from exc
|
||||
except SessionStorageError as exc:
|
||||
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
||||
Reference in New Issue
Block a user