alphax/app/web/routes_chat.py
2026-05-18 10:04:50 +08:00

55 lines
2.3 KiB
Python

from fastapi import APIRouter, Cookie, HTTPException
from app.db import chat_assistant_db
from app.services.chat_assistant import answer_chat
from app.web.shared import ChatSendRequest, ChatSessionRequest, require_api_user_with_subscription
router = APIRouter()
@router.get("/api/chat/bootstrap")
async def api_chat_bootstrap(altcoin_session: str = Cookie(default="")):
user = require_api_user_with_subscription(altcoin_session)
return chat_assistant_db.bootstrap_chat(user["id"])
@router.get("/api/chat/sessions")
async def api_chat_sessions(limit: int = 20, offset: int = 0, altcoin_session: str = Cookie(default="")):
user = require_api_user_with_subscription(altcoin_session)
return chat_assistant_db.list_chat_sessions(user["id"], limit=limit, offset=offset)
@router.post("/api/chat/sessions")
async def api_chat_create_session(req: ChatSessionRequest, altcoin_session: str = Cookie(default="")):
user = require_api_user_with_subscription(altcoin_session)
return {"ok": True, "session": chat_assistant_db.create_chat_session(user["id"], title=req.title)}
@router.get("/api/chat/sessions/{session_id}")
async def api_chat_session_detail(session_id: int, altcoin_session: str = Cookie(default="")):
user = require_api_user_with_subscription(altcoin_session)
session = chat_assistant_db.get_chat_session(session_id, user["id"])
if not session:
raise HTTPException(status_code=404, detail="对话不存在")
messages = chat_assistant_db.list_chat_messages(session_id, user["id"], limit=200)
return {"ok": True, "session": session, "messages": messages}
@router.delete("/api/chat/sessions/{session_id}")
async def api_chat_archive_session(session_id: int, altcoin_session: str = Cookie(default="")):
user = require_api_user_with_subscription(altcoin_session)
session = chat_assistant_db.update_chat_session(session_id, user["id"], archived_at="now")
if not session:
raise HTTPException(status_code=404, detail="对话不存在")
return {"ok": True}
@router.post("/api/chat/send")
async def api_chat_send(req: ChatSendRequest, altcoin_session: str = Cookie(default="")):
user = require_api_user_with_subscription(altcoin_session)
try:
return answer_chat(user["id"], req.message, session_id=req.session_id)
except ValueError as exc:
raise HTTPException(status_code=400, detail=str(exc))