from __future__ import annotations from enum import Enum from pydantic import BaseModel, Field, field_validator from core.agentscope.tools.tool_config import AgentTool, parse_agent_tool class AgentType(str, Enum): ROUTER = "router" WORKER = "worker" MEMORY = "memory" class ContextBuildStrategy(str, Enum): DAY = "day" NUMBER = "number" class ContextMessagesConfig(BaseModel): mode: ContextBuildStrategy = ContextBuildStrategy.NUMBER count: int = Field(default=20, ge=1, le=200) class SystemAgentLLMConfig(BaseModel): temperature: float | None = Field(default=None, ge=0.0, le=2.0) max_tokens: int | None = Field(default=None, ge=1) timeout_seconds: float | None = Field(default=30.0, gt=0.0, le=300.0) context_messages: ContextMessagesConfig = Field( default_factory=ContextMessagesConfig ) visibility_consumer_bit: int = Field(default=16, ge=16, le=63) enabled_tools: list[AgentTool] = Field(default_factory=list, max_length=32) @field_validator("enabled_tools", mode="before") @classmethod def _normalize_enabled_tools(cls, value: object) -> list[AgentTool]: if value is None: return [] if not isinstance(value, list): raise ValueError("enabled_tools must be a list") normalized: list[AgentTool] = [] for item in value: raw_item = str(item or "").strip() if not raw_item: continue tool = parse_agent_tool(raw_item) if tool not in normalized: normalized.append(tool) return normalized