init
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
# Schemas 模块
|
||||
|
||||
## 作用
|
||||
|
||||
定义 API 与工作流的数据模型,统一请求与响应结构。
|
||||
|
||||
## 文件
|
||||
|
||||
- `agent_input.py` / `agent_output.py`:Agent 入参与出参模型
|
||||
- `tool_input.py` / `tool_output.py`:工具调用模型
|
||||
- `chat_message_request.py` / `chat_message_response.py`:聊天接口模型,其中 `ChatMessageRequestDTO` 对齐前端 `query / inputs / response_mode / user / conversation_id / files` DTO
|
||||
- `stream_input.py`:流式接口输入模型
|
||||
@@ -0,0 +1,22 @@
|
||||
"""数据模型层"""
|
||||
|
||||
from .agent_input import AgentInput
|
||||
from .agent_output import AgentOutput
|
||||
from .tool_input import ToolInput
|
||||
from .tool_output import ToolOutput
|
||||
from .chat_message_request import ChatMessageRequestDTO, ChatMessageFileDTO
|
||||
from .chat_message_response import ChatMessageResponseDTO
|
||||
from .message_feedback_request import MessageFeedbackRequestDTO
|
||||
from .messages import MessagesDTO
|
||||
|
||||
__all__ = [
|
||||
"AgentInput",
|
||||
"AgentOutput",
|
||||
"ToolInput",
|
||||
"ToolOutput",
|
||||
"ChatMessageRequestDTO",
|
||||
"ChatMessageFileDTO",
|
||||
"ChatMessageResponseDTO",
|
||||
"MessageFeedbackRequestDTO",
|
||||
"MessagesDTO",
|
||||
]
|
||||
+4
-12
@@ -1,16 +1,8 @@
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
from schemas.chat_message_request import ChatMessageRequestDTO
|
||||
|
||||
|
||||
class AgentInput(BaseModel):
|
||||
"""统一工作流输入模型(新版本 DTO)"""
|
||||
class AgentInput(ChatMessageRequestDTO):
|
||||
"""兼容旧名称,实际与 ChatMessageRequestDTO 使用同一套前端请求模型。"""
|
||||
|
||||
|
||||
model_config = ConfigDict(extra="forbid")
|
||||
|
||||
query: str
|
||||
conversation_id: Optional[str] = None
|
||||
workflow_type: str = "conversation"
|
||||
response_mode: str = "blocking"
|
||||
user: Optional[str] = None
|
||||
inputs: Dict[str, Any] = Field(default_factory=dict)
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
from typing import Any, Dict, List, Optional
|
||||
from typing import Any, List, Optional
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
|
||||
class ChatMessageFileDTO(BaseModel):
|
||||
"""文件输入模型(预留)"""
|
||||
"""文件输入模型(保持与前端 DTO 兼容,允许附带任意文件元数据)。"""
|
||||
|
||||
model_config = ConfigDict(extra="allow")
|
||||
|
||||
|
||||
class ChatMessageRequestDTO(BaseModel):
|
||||
"""/api/workflows/stream 请求模型(对齐标准 chat message 请求)"""
|
||||
"""/api/workflows/stream 请求模型(对齐前端 ChatMessageRequestDTO)。"""
|
||||
|
||||
model_config = ConfigDict(extra="forbid")
|
||||
|
||||
query: str
|
||||
inputs: Dict[str, Any] = Field(default_factory=dict)
|
||||
response_mode: str = "streaming"
|
||||
user: Optional[str] = None
|
||||
conversation_id: Optional[str] = None
|
||||
files: List[ChatMessageFileDTO] = Field(default_factory=list)
|
||||
query: Optional[str] = Field(default=None, description="用户输入/提问内容。")
|
||||
inputs: Any = Field(default_factory=dict, description="App 定义的变量值,默认 {}。")
|
||||
response_mode: Optional[str] = Field(default=None, description="streaming 或 blocking。")
|
||||
user: Optional[str] = Field(default=None, description="用户唯一标识。")
|
||||
conversation_id: Optional[str] = Field(default=None, description="可选会话 ID。")
|
||||
files: List[ChatMessageFileDTO] = Field(default_factory=list, description="可选文件列表。")
|
||||
auto_generate_name: Optional[bool] = Field(default=None, description="兼容旧前端字段,当前后端忽略。")
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
from typing import Literal, Optional
|
||||
|
||||
from pydantic import BaseModel, Field, model_validator
|
||||
|
||||
|
||||
class MessageFeedbackRequestDTO(BaseModel):
|
||||
"""消息反馈请求模型"""
|
||||
|
||||
message_id: str = Field(..., description="消息 ID")
|
||||
feedback: Literal["like", "dislike"] = Field(..., description="反馈类型: like/dislike")
|
||||
feedback_content: Optional[str] = Field(default=None, description="点踩反馈内容")
|
||||
|
||||
@model_validator(mode="after")
|
||||
def validate_feedback_content(self):
|
||||
if self.feedback == "dislike" and not (self.feedback_content or "").strip():
|
||||
raise ValueError("feedback_content is required when feedback=dislike")
|
||||
return self
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class MessagesDTO(BaseModel):
|
||||
"""messages 表字段契约,对齐 Java Messages 实体。"""
|
||||
|
||||
message_id: str = Field(..., description="消息 ID")
|
||||
conversation_id: str = Field(..., description="会话 ID")
|
||||
user: Optional[str] = Field(default=None, description="用户")
|
||||
query: str = Field(..., description="用户输入 / 提问内容")
|
||||
answer: Optional[str] = Field(default=None, description="回答消息内容")
|
||||
feedback: Optional[str] = Field(default=None, description="点赞 like / 点踩 dislike")
|
||||
feedback_content: Optional[str] = Field(default=None, description="点踩内容")
|
||||
created_at: int = Field(..., description="创建时间(毫秒时间戳)")
|
||||
updated_at: int = Field(..., description="更新时间(毫秒时间戳)")
|
||||
log: Dict[str, Any] = Field(default_factory=dict, description="当前对话日志(JSON)")
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
from schemas.agent_input import AgentInput
|
||||
from schemas.chat_message_request import ChatMessageRequestDTO
|
||||
|
||||
|
||||
class StreamInputDTO(AgentInput):
|
||||
"""流式输入 DTO(与统一 AgentInput 保持一致)"""
|
||||
|
||||
response_mode: str = "streaming"
|
||||
class StreamInputDTO(ChatMessageRequestDTO):
|
||||
"""流式输入 DTO(与统一 ChatMessageRequestDTO 保持一致)。"""
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
|
||||
class SuperAgentRequest(BaseModel):
|
||||
"""Super Agent 请求模型"""
|
||||
|
||||
model_config = ConfigDict(extra="forbid")
|
||||
|
||||
query: str = Field(..., desc ription="用户查询")
|
||||
conversation_id: Optional[str] = Field(None, description="会话ID")
|
||||
user_id: Optional[str] = Field(None, description="用户ID")
|
||||
workflow_type: str = Field(default="conversation", description="工作流类型")
|
||||
context: Dict[str, str] = Field(default_factory=dict, description="上下文信息")
|
||||
timeout_seconds: int = Field(default=30, description="超时时间(秒)")
|
||||
|
||||
|
||||
class SuperAgentResponse(BaseModel):
|
||||
"""Super Agent 响应模型"""
|
||||
|
||||
conversation_id: str = Field(..., description="会话ID")
|
||||
workflow_type: str = Field(..., description="工作流类型")
|
||||
status: str = Field(default="success", description="状态: success/error")
|
||||
sql: Optional[str] = Field(None, description="生成的SQL")
|
||||
result: Optional[str] = Field(None, description="查询结果")
|
||||
error: Optional[str] = Field(None, description="错误信息")
|
||||
metadata: Dict[str, str] = Field(default_factory=dict, description="元数据")
|
||||
|
||||
|
||||
class SuperAgentStreamEvent(BaseModel):
|
||||
"""Super Agent 流式响应事件"""
|
||||
|
||||
conversation_id: str = Field(..., description="会话ID")
|
||||
event: str = Field(..., description="事件类型: sql_generated/sql_executing/result/error/done")
|
||||
data: str = Field(..., description="事件数据")
|
||||
timestamp: int = Field(..., description="时间戳(毫秒)")
|
||||
Reference in New Issue
Block a user