Merge branch 'develop' into fix/memory-enduser-config
This commit is contained in:
@@ -1,14 +1,14 @@
|
||||
import datetime
|
||||
import uuid
|
||||
from typing import Optional, Any, List, Dict, Union
|
||||
from enum import Enum
|
||||
from enum import Enum, StrEnum
|
||||
|
||||
from pydantic import BaseModel, Field, ConfigDict, field_serializer, field_validator
|
||||
|
||||
|
||||
# ---------- Multimodal File Support ----------
|
||||
|
||||
class FileType(str, Enum):
|
||||
class FileType(StrEnum):
|
||||
"""文件类型枚举"""
|
||||
IMAGE = "image"
|
||||
DOCUMENT = "document"
|
||||
@@ -82,6 +82,12 @@ class ToolConfig(BaseModel):
|
||||
tool_id: Optional[str] = Field(default=None, description="工具ID")
|
||||
operation: Optional[str] = Field(default=None, description="工具特定配置")
|
||||
|
||||
class SkillConfig(BaseModel):
|
||||
"""技能配置"""
|
||||
enabled: bool = Field(default=True, description="是否启用该技能")
|
||||
skill_ids: Optional[list[str]] = Field(default=list, description="技能ID列表")
|
||||
all_skills: Optional[bool] = Field(default=False, description="是否允许访问所有技能")
|
||||
|
||||
|
||||
class ToolOldConfig(BaseModel):
|
||||
"""工具配置"""
|
||||
@@ -92,7 +98,7 @@ class ToolOldConfig(BaseModel):
|
||||
class MemoryConfig(BaseModel):
|
||||
"""记忆配置"""
|
||||
enabled: bool = Field(default=True, description="是否启用对话历史记忆")
|
||||
memory_content: Optional[str] = Field(default=None, description="选择记忆的内容类型")
|
||||
memory_config_id: Optional[str] = Field(default=None, description="选择记忆的内容类型")
|
||||
max_history: int = Field(default=10, ge=0, le=100, description="最大保留的历史对话轮数")
|
||||
|
||||
|
||||
@@ -156,6 +162,9 @@ class AgentConfigCreate(BaseModel):
|
||||
description="Agent 可用的工具列表"
|
||||
)
|
||||
|
||||
# 技能配置
|
||||
skills: Optional[SkillConfig] = Field(default=dict, description="关联的技能列表")
|
||||
|
||||
|
||||
class AppCreate(BaseModel):
|
||||
name: str
|
||||
@@ -207,6 +216,9 @@ class AgentConfigUpdate(BaseModel):
|
||||
|
||||
# 工具配置
|
||||
tools: Optional[List[ToolConfig]] = Field(default_factory=list, description="工具列表")
|
||||
|
||||
# 技能配置
|
||||
skills: Optional[SkillConfig] = Field(default=dict, description="关联的技能列表")
|
||||
|
||||
|
||||
# ---------- Output Schemas ----------
|
||||
@@ -266,6 +278,8 @@ class AgentConfig(BaseModel):
|
||||
# 工具配置
|
||||
tools: Union[List[ToolConfig], Dict[str, ToolOldConfig]] = []
|
||||
|
||||
skills: Optional[SkillConfig] = {}
|
||||
|
||||
is_active: bool
|
||||
created_at: datetime.datetime
|
||||
updated_at: datetime.datetime
|
||||
|
||||
@@ -236,6 +236,8 @@ class ConfigParamsCreate(BaseModel): # 创建配置参数模型(仅 body,
|
||||
llm_id: Optional[str] = Field(None, description="LLM模型配置ID")
|
||||
embedding_id: Optional[str] = Field(None, description="嵌入模型配置ID")
|
||||
rerank_id: Optional[str] = Field(None, description="重排序模型配置ID")
|
||||
reflection_model_id: Optional[str] = Field(None, description="反思模型ID,默认与llm_id一致")
|
||||
emotion_model_id: Optional[str] = Field(None, description="情绪分析模型ID,默认与llm_id一致")
|
||||
|
||||
|
||||
class ConfigParamsDelete(BaseModel): # 删除配置参数模型(请求体)
|
||||
|
||||
@@ -21,6 +21,11 @@ class PromptOptMessage(BaseModel):
|
||||
description="currently optimized prompt"
|
||||
)
|
||||
|
||||
skill: bool = Field(
|
||||
default=False,
|
||||
description="Enable variable output"
|
||||
)
|
||||
|
||||
|
||||
class PromptSaveRequest(BaseModel):
|
||||
session_id: UUID = Field(
|
||||
|
||||
64
api/app/schemas/skill_schema.py
Normal file
64
api/app/schemas/skill_schema.py
Normal file
@@ -0,0 +1,64 @@
|
||||
"""Skill Schema 定义"""
|
||||
from typing import Optional, List, Dict, Any, Union
|
||||
from pydantic import BaseModel, Field, field_serializer
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class SkillBase(BaseModel):
|
||||
"""Skill 基础 Schema"""
|
||||
name: str = Field(..., description="技能名称")
|
||||
description: Optional[str] = Field(None, description="技能描述")
|
||||
tools: List[Dict[str, str]] = Field(default_factory=list, description="工具对象列表: [{\"tool_id\": \"xxx\", \"operation\": \"yyy\"}]")
|
||||
config: Dict[str, Any] = Field(default_factory=dict, description="技能配置")
|
||||
prompt: Optional[str] = Field(None, description="技能专属提示词")
|
||||
is_active: bool = Field(True, description="是否激活")
|
||||
is_public: bool = Field(False, description="是否公开到市场")
|
||||
|
||||
|
||||
class SkillCreate(SkillBase):
|
||||
"""创建 Skill"""
|
||||
pass
|
||||
|
||||
|
||||
class SkillUpdate(BaseModel):
|
||||
"""更新 Skill"""
|
||||
name: Optional[str] = None
|
||||
description: Optional[str] = None
|
||||
tools: Optional[List[Dict[str, str]]] = None
|
||||
config: Optional[Dict[str, Any]] = None
|
||||
prompt: Optional[str] = None
|
||||
is_active: Optional[bool] = None
|
||||
is_public: Optional[bool] = None
|
||||
|
||||
|
||||
class Skill(BaseModel):
|
||||
"""Skill 响应 Schema"""
|
||||
id: uuid.UUID
|
||||
tenant_id: uuid.UUID
|
||||
name: str
|
||||
description: Optional[str] = None
|
||||
tools: Union[List[Dict[str, Any]], List[Dict[str, str]]] = Field(default_factory=list, description="工具列表,可以是简单格式或包含工具详情")
|
||||
config: Dict[str, Any] = Field(default_factory=dict)
|
||||
prompt: Optional[str] = None
|
||||
is_active: bool = True
|
||||
is_public: bool = False
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
@field_serializer('created_at', 'updated_at')
|
||||
def serialize_datetime_to_timestamp(self, value: datetime) -> int:
|
||||
"""(毫秒级)时间戳"""
|
||||
return int(value.timestamp() * 1000)
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class SkillQuery(BaseModel):
|
||||
"""Skill 查询参数"""
|
||||
search: Optional[str] = None
|
||||
is_active: Optional[bool] = None
|
||||
is_public: Optional[bool] = None
|
||||
page: int = Field(1, ge=1)
|
||||
pagesize: int = Field(10, ge=1, le=100)
|
||||
Reference in New Issue
Block a user