Files
xiaozhi-esp32-server/main/manager-api-fastapi/app/schemas/agent.py
T

239 lines
7.0 KiB
Python

from __future__ import annotations
import json
from datetime import datetime
from typing import Any
from pydantic import Field, field_validator
from pydantic_core import PydanticCustomError
from app.schemas.common import JavaModel
class AgentCreate(JavaModel):
agent_name: str
@field_validator("agent_name", mode="before")
@classmethod
def require_non_blank_name(cls, value: Any) -> Any:
if value is None or isinstance(value, str) and not value.strip():
raise PydanticCustomError("java_not_blank", "智能体名称不能为空")
return value
class AgentMemory(JavaModel):
summary_memory: str | None = None
class ContextProvider(JavaModel):
url: str | None = None
headers: dict[str, Any] | None = None
class FunctionInfo(JavaModel):
plugin_id: str | None = None
param_info: dict[str, Any] = Field(default_factory=dict)
@field_validator("param_info", mode="before")
@classmethod
def normalize_param_info(cls, value: Any) -> dict[str, Any]:
if value is None or value == "":
return {}
if isinstance(value, str):
parsed = json.loads(value)
if not isinstance(parsed, dict):
raise ValueError("paramInfo must be a JSON object")
return {str(key): item for key, item in parsed.items()}
if isinstance(value, dict):
return {str(key): item for key, item in value.items() if key is not None}
parsed = json.loads(json.dumps(value))
if not isinstance(parsed, dict):
raise ValueError("paramInfo must be an object")
return {str(key): item for key, item in parsed.items()}
class AgentUpdate(JavaModel):
agent_code: str | None = None
agent_name: str | None = None
asr_model_id: str | None = None
vad_model_id: str | None = None
llm_model_id: str | None = None
slm_model_id: str | None = None
vllm_model_id: str | None = None
tts_model_id: str | None = None
tts_voice_id: str | None = None
tts_language: str | None = None
tts_volume: int | None = None
tts_rate: int | None = None
tts_pitch: int | None = None
mem_model_id: str | None = None
intent_model_id: str | None = None
functions: list[FunctionInfo] | None = None
system_prompt: str | None = None
summary_memory: str | None = None
chat_history_conf: int | None = None
lang_code: str | None = None
language: str | None = None
sort: int | None = None
context_providers: list[ContextProvider] | None = None
correct_word_file_ids: list[str] | None = None
tag_names: list[str] | None = None
tag_ids: list[str] | None = None
class AgentChatHistoryReport(JavaModel):
mac_address: str
session_id: str
chat_type: int
content: str
audio_base64: str | None = None
report_time: int | None = None
@field_validator("mac_address", "session_id", "content", mode="before")
@classmethod
def require_non_blank(cls, value: Any) -> Any:
if value is None or isinstance(value, str) and not value.strip():
raise PydanticCustomError("java_not_blank", "不能为空")
return value
@field_validator("chat_type", mode="before")
@classmethod
def require_chat_type(cls, value: Any) -> Any:
if value is None:
raise PydanticCustomError("java_not_null", "不能为空")
return value
class AgentSnapshotPage(JavaModel):
page: int | None = 1
limit: int | None = 10
max_version_no: int | None = None
def page_or_default(self) -> int:
return self.page if self.page is not None and self.page >= 1 else 1
def limit_or_default(self) -> int:
return self.limit if self.limit is not None and self.limit >= 1 else 10
class AgentSnapshotRestore(JavaModel):
current_state_token: str
@field_validator("current_state_token", mode="before")
@classmethod
def require_non_blank_token(cls, value: Any) -> Any:
if value is None or isinstance(value, str) and not value.strip():
raise PydanticCustomError("java_not_blank", "不能为空")
return value
class AgentSnapshotTag(JavaModel):
id: str | None = None
tag_name: str | None = None
sort: int | None = None
class AgentSnapshotData(JavaModel):
agent_code: str | None = None
agent_name: str | None = None
asr_model_id: str | None = None
vad_model_id: str | None = None
llm_model_id: str | None = None
slm_model_id: str | None = None
vllm_model_id: str | None = None
tts_model_id: str | None = None
tts_voice_id: str | None = None
tts_language: str | None = None
tts_volume: int | None = None
tts_rate: int | None = None
tts_pitch: int | None = None
mem_model_id: str | None = None
intent_model_id: str | None = None
chat_history_conf: int | None = None
system_prompt: str | None = None
summary_memory: str | None = None
lang_code: str | None = None
language: str | None = None
sort: int | None = None
functions: list[FunctionInfo] | None = None
context_providers: list[ContextProvider] | None = None
correct_word_file_ids: list[str] | None = None
tag_names: list[str] | None = None
tags: list[AgentSnapshotTag] | None = None
class AgentTemplate(JavaModel):
id: str | None = None
agent_code: str | None = None
agent_name: str | None = None
asr_model_id: str | None = None
vad_model_id: str | None = None
llm_model_id: str | None = None
vllm_model_id: str | None = None
tts_model_id: str | None = None
tts_voice_id: str | None = None
tts_language: str | None = None
tts_volume: int | None = None
tts_rate: int | None = None
tts_pitch: int | None = None
mem_model_id: str | None = None
intent_model_id: str | None = None
chat_history_conf: int | None = None
system_prompt: str | None = None
summary_memory: str | None = None
lang_code: str | None = None
language: str | None = None
sort: int | None = None
creator: int | None = None
created_at: datetime | None = None
updater: int | None = None
updated_at: datetime | None = None
class AgentVoicePrintSave(JavaModel):
agent_id: str | None = None
audio_id: str | None = None
source_name: str | None = None
introduce: str | None = None
class AgentVoicePrintUpdate(JavaModel):
id: str | None = None
audio_id: str | None = None
source_name: str | None = None
introduce: str | None = None
class AgentTagAssignment(JavaModel):
tag_ids: list[str] | None = None
tag_names: list[str] | None = None
SNAPSHOT_FIELD_ORDER = [
"agentCode",
"agentName",
"asrModelId",
"vadModelId",
"llmModelId",
"slmModelId",
"vllmModelId",
"ttsModelId",
"ttsVoiceId",
"ttsLanguage",
"ttsVolume",
"ttsRate",
"ttsPitch",
"memModelId",
"intentModelId",
"chatHistoryConf",
"systemPrompt",
"summaryMemory",
"langCode",
"language",
"sort",
"functions",
"contextProviders",
"correctWordFileIds",
"tagNames",
]