Files
SillyTavern_replica/backend/api/routes/chatsRoute.py

98 lines
3.4 KiB
Python

from fastapi import APIRouter, HTTPException, status
from backend.core.models.chat_history import ChatHistory, Message
router = APIRouter(prefix="/chats", tags=["chats"])
# ========== 聊天历史基础路由 ==========
@router.get("", response_model=dict)
async def list_all_chats():
"""获取所有角色的所有聊天列表"""
return await ChatHistory.list_all_chats()
@router.get("/{role_name}/{chat_name}")
async def get_chat(role_name: str, chat_name: str):
"""获取指定聊天的完整内容"""
try:
return await ChatHistory.get_chat(role_name, chat_name)
except FileNotFoundError as e:
raise HTTPException(status_code=404, detail="Chat not found")
@router.post("/{role_name}", status_code=status.HTTP_201_CREATED)
async def create_chat(role_name: str, chat_name: str, metadata: dict = None):
"""创建新聊天"""
try:
return await ChatHistory.create_chat(role_name, chat_name, metadata)
except FileExistsError:
raise HTTPException(status_code=400, detail="Chat already exists")
@router.put("/{role_name}/{chat_name}")
async def update_chat(role_name: str, chat_name: str, update_data: dict):
"""更新聊天元数据"""
try:
return await ChatHistory.update_chat(role_name, chat_name, update_data)
except FileNotFoundError:
raise HTTPException(status_code=404, detail="Chat not found")
@router.delete("/{role_name}/{chat_name}")
async def delete_chat(role_name: str, chat_name: str):
"""删除指定聊天"""
try:
return await ChatHistory.delete_chat(role_name, chat_name)
except FileNotFoundError:
raise HTTPException(status_code=404, detail="Chat not found")
# ========== 聊天消息路由 ==========
@router.get("/{role_name}/{chat_name}/messages")
async def list_messages(role_name: str, chat_name: str):
"""获取聊天的所有消息"""
try:
return await ChatHistory.list_messages(role_name, chat_name)
except FileNotFoundError:
raise HTTPException(status_code=404, detail="Chat not found")
@router.get("/{role_name}/{chat_name}/messages/{floor}")
async def get_message(role_name: str, chat_name: str, floor: int):
"""获取指定楼层的消息"""
try:
return await ChatHistory.get_message(role_name, chat_name, floor)
except FileNotFoundError:
raise HTTPException(status_code=404, detail="Chat not found")
@router.post("/{role_name}/{chat_name}/messages", status_code=status.HTTP_201_CREATED)
async def add_message(role_name: str, chat_name: str, message_data: dict):
"""向聊天添加新消息"""
try:
return await ChatHistory.add_message(role_name, chat_name, message_data)
except FileNotFoundError:
raise HTTPException(status_code=404, detail="Chat not found")
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
@router.put("/{role_name}/{chat_name}/messages/{floor}")
async def update_message(role_name: str, chat_name: str, floor: int, update_data: dict):
"""更新指定楼层的消息"""
try:
return await ChatHistory.update_message(role_name, chat_name, floor, update_data)
except FileNotFoundError:
raise HTTPException(status_code=404, detail="Chat not found")
@router.delete("/{role_name}/{chat_name}/messages/{floor}")
async def delete_message(role_name: str, chat_name: str, floor: int):
"""删除指定楼层的消息"""
try:
return await ChatHistory.delete_message(role_name, chat_name, floor)
except FileNotFoundError:
raise HTTPException(status_code=404, detail="Chat not found")