chat.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from pydantic import BaseModel
  2. from typing import List, Optional, Dict, Any
  3. from datetime import datetime
  4. from ..core.ark_client import config
  5. class ChatMessage(BaseModel):
  6. role: str # "user" | "assistant" | "system"
  7. content: str
  8. timestamp: Optional[datetime] = None
  9. response_id: Optional[str] = None
  10. # 帖子请求
  11. class CircleRequest(BaseModel):
  12. id: str # 帖子的主键
  13. # 兴趣圈提示词模版
  14. class CirclePromptConfig(BaseModel):
  15. appName: str # 包名,作为唯一标识
  16. name: str # 兴趣圈名称
  17. role: str # AI 扮演的角色
  18. style: str # 回复风格描述
  19. keywords: List[str] = [] # 推荐使用的关键词
  20. forbidden: List[str] = [] # 禁止使用的词语
  21. extra_instruction: str # 是给模型更细化的行为指引,可以包含在最终提示词中。
  22. # Ai的请求对象
  23. class ChatRequest(BaseModel):
  24. messages: List[ChatMessage]
  25. model: Optional[str] = config.MODEL_NAME
  26. stream: Optional[bool] = False
  27. source: Optional[str] = None # source=app 时走第三方 token 认证
  28. token: Optional[str] = None # App 端传入的第三方 token
  29. # Ai的返回对象
  30. class ChatResponse(BaseModel):
  31. message: ChatMessage
  32. model: str
  33. usage: Optional[Dict[str, Any]] = None
  34. response_id: Optional[str] = None
  35. # 流式对象
  36. class StreamResponse(BaseModel):
  37. content: str
  38. finished: bool
  39. model: str
  40. timestamp: datetime
  41. type: str = "answer" # "thinking"=AI思考开过车delta | "searching"=搜索状态/关键词 | "answer" = 正式回答 delta(现有逻辑)