Files
eryao/backend/src/schemas/agent/runtime_models.py
T

71 lines
1.8 KiB
Python
Raw Normal View History

from __future__ import annotations
from enum import Enum
2026-04-03 16:56:47 +08:00
from typing import Any, Literal
from pydantic import BaseModel, ConfigDict, Field
from schemas.agent.ui_hints import UiHintsPayload
from schemas.domain.divination import DerivedDivinationData
class RunStatus(str, Enum):
SUCCESS = "success"
FAILED = "failed"
class ToolStatus(str, Enum):
SUCCESS = "success"
FAILURE = "failure"
PARTIAL = "partial"
class ErrorInfo(BaseModel):
model_config = ConfigDict(extra="forbid")
code: str
message: str
retryable: bool = False
details: dict[str, Any] | None = None
class ToolAgentOutput(BaseModel):
model_config = ConfigDict(extra="forbid")
tool_name: str
tool_call_id: str
tool_call_args: dict[str, Any] | None = None
status: ToolStatus
result: str
error: ErrorInfo | None = None
class WorkerAgentOutputLite(BaseModel):
model_config = ConfigDict(extra="forbid")
status: RunStatus = RunStatus.SUCCESS
sign_level: Literal["上上签", "中上签", "中下签", "下下签"]
2026-04-03 16:56:47 +08:00
conclusion: list[str] = Field(min_length=1, max_length=6)
focus_points: list[str] = Field(default_factory=list, max_length=6)
advice: list[str] = Field(min_length=1, max_length=6)
keywords: list[str] = Field(min_length=3, max_length=8)
answer: str = Field(min_length=1, max_length=4000)
error: ErrorInfo | None = None
class WorkerAgentOutputRich(WorkerAgentOutputLite):
ui_hints: UiHintsPayload | None = None
class AgentOutput(WorkerAgentOutputRich):
model_config = ConfigDict(extra="forbid")
divination_derived: DerivedDivinationData | None = None
WorkerAgentOutput = WorkerAgentOutputLite | WorkerAgentOutputRich
2026-04-03 16:56:47 +08:00
def resolve_worker_output_model() -> type[WorkerAgentOutputLite]:
return WorkerAgentOutputLite