This commit is contained in:
雷雨
2025-12-15 22:05:56 +08:00
commit 8635b84b2d
230 changed files with 53888 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
"""数据模型模块"""

View File

@@ -0,0 +1,66 @@
from typing import List, Optional, Any, Dict
from pydantic import BaseModel, Field
# 聊天请求
class ChatRequest(BaseModel):
query: str = Field(..., description="用户输入的消息")
system_user_id: int = Field(..., description="系统用户ID当前登录用户")
context_id: Optional[str] = Field(None, description="会话上下文ID")
class Config:
json_schema_extra = {
"example": {
"query": "查看所有可用代理",
"system_user_id": 1000000001,
"context_id": "session-1234567890"
}
}
# 聊天响应
class ChatResponse(BaseModel):
content: str = Field(..., description="AI 回复内容")
context_id: str = Field(..., description="会话上下文ID")
task_id: Optional[str] = Field(None, description="任务ID")
status: str = Field(default="success", description="响应状态")
class Config:
json_schema_extra = {
"example": {
"content": "系统中共有 4 个可用代理...",
"context_id": "session-1234567890",
"task_id": "task-abc123",
"status": "success"
}
}
# 错误响应
class ErrorResponse(BaseModel):
error: str = Field(..., description="错误类型")
message: str = Field(..., description="错误消息")
details: Optional[Dict[str, Any]] = Field(None, description="错误详情")
# A2A 消息部分
class A2AMessagePart(BaseModel):
kind: str = "text"
text: str
# A2A 消息
class A2AMessage(BaseModel):
context_id: str
role: str = "user"
parts: List[A2AMessagePart]
message_id: str
# A2A 请求
class A2ARequest(BaseModel):
jsonrpc: str = "2.0"
method: str = "message/send"
params: Dict[str, A2AMessage]
id: int
# A2A 响应
class A2AResponse(BaseModel):
id: int
jsonrpc: str
result: Dict[str, Any]

View File

@@ -0,0 +1,58 @@
from typing import Optional
from pydantic import BaseModel, Field
# 滴答清单OAuth认证请求
class DidaOAuthRequest(BaseModel):
system_user_id: int = Field(..., description="系统用户ID")
client_id: str = Field(..., description="滴答清单应用Client ID")
client_secret: str = Field(..., description="滴答清单应用Client Secret")
authorization_code: str = Field(..., description="OAuth授权码")
redirect_uri: str = Field(..., description="OAuth回调地址必须与授权时一致")
class Config:
json_schema_extra = {
"example": {
"system_user_id": 1000000001,
"client_id": "your_client_id",
"client_secret": "your_client_secret",
"authorization_code": "auth_code_from_oauth_callback",
"redirect_uri": "http://localhost:1420/dida-binding"
}
}
# 滴答清单凭证刷新请求
class DidaRefreshTokenRequest(BaseModel):
system_user_id: int = Field(..., description="系统用户ID")
class Config:
json_schema_extra = {
"example": {
"system_user_id": 1000000001
}
}
# 滴答清单绑定状态响应
class DidaBindingStatusResponse(BaseModel):
is_bound: bool = Field(..., description="是否已绑定")
username: Optional[str] = Field(None, description="绑定的滴答清单账号")
bound_at: Optional[str] = Field(None, description="绑定时间")
token_expires_at: Optional[str] = Field(None, description="令牌过期时间")
# 滴答清单OAuth响应
class DidaOAuthResponse(BaseModel):
status: str = Field(..., description="状态: success, error")
message: str = Field(..., description="提示消息")
data: Optional[dict] = Field(None, description="额外数据")
class Config:
json_schema_extra = {
"example": {
"status": "success",
"message": "滴答清单账号绑定成功!",
"data": {
"username": "user@example.com",
"expires_at": "2025-01-09T12:00:00"
}
}
}

View File

@@ -0,0 +1,87 @@
from typing import Optional
from pydantic import BaseModel, Field
# 小米登录请求
class XiaomiLoginRequest(BaseModel):
system_user_id: int = Field(..., description="系统用户ID")
username: str = Field(..., description="小米账号(手机号/邮箱)")
password: str = Field(..., description="密码")
server: str = Field(default="cn", description="服务器区域")
class Config:
json_schema_extra = {
"example": {
"system_user_id": 1000000001,
"username": "13800138000",
"password": "your_password",
"server": "cn"
}
}
# 验证码提交请求
class CaptchaSubmitRequest(BaseModel):
session_id: str = Field(..., description="会话ID")
captcha_code: str = Field(..., description="验证码")
# 双因素认证请求
class TwoFactorAuthRequest(BaseModel):
session_id: str = Field(..., description="会话ID")
ticket: str = Field(..., description="2FA验证码")
# 手动输入凭证请求
class ManualCredentialsRequest(BaseModel):
system_user_id: int = Field(..., description="系统用户ID")
xiaomi_username: str = Field(..., description="小米账号")
ssecurity: str = Field(..., description="_ssecurity参数")
userId: str = Field(..., description="userId参数")
cUserId: str = Field(..., description="_cUserId参数")
serviceToken: str = Field(..., description="serviceToken参数")
server: str = Field(default="cn", description="服务器区域")
class Config:
json_schema_extra = {
"example": {
"system_user_id": 1000000001,
"xiaomi_username": "13800138000",
"ssecurity": "R9egnuetTRF9sMP2jy9yJQ==",
"userId": "3128533266",
"cUserId": "5suobuxuMCJG7d6Wtp3I28D30l0",
"serviceToken": "2ib8u26oDE7OoCSawL3M5rvrIR7koVw...",
"server": "cn"
}
}
# 登录步骤响应
class LoginStepResponse(BaseModel):
session_id: str = Field(..., description="会话ID")
status: str = Field(..., description="状态: success, need_captcha, need_2fa, error")
message: str = Field(..., description="提示消息")
data: Optional[dict] = Field(None, description="额外数据")
class Config:
json_schema_extra = {
"example": {
"session_id": "sess_abc123",
"status": "need_captcha",
"message": "需要验证码",
"data": {
"captcha_url": "/api/v1/xiaomi/captcha/sess_abc123"
}
}
}
# 绑定状态响应
class BindingStatusResponse(BaseModel):
is_bound: bool = Field(..., description="是否已绑定")
username: Optional[str] = Field(None, description="绑定的小米账号")
bound_at: Optional[str] = Field(None, description="绑定时间")
# 小米设备信息
class XiaomiDeviceInfo(BaseModel):
name: str
did: str
token: Optional[str] = None
model: Optional[str] = None
mac: Optional[str] = None
localip: Optional[str] = None