Files
JARVIS/backend/app/schemas/agent.py

222 lines
5.7 KiB
Python

from datetime import datetime
from typing import Any
from pydantic import BaseModel, Field
class AgentCreate(BaseModel):
name: str
role: str
description: str | None = None
system_prompt: str
spawn_permission: bool = False
class AgentOut(BaseModel):
id: str
name: str
role: str
description: str | None
is_active: bool
is_default: bool
model_config = {"from_attributes": True}
class AgentMessageOut(BaseModel):
id: str
agent_id: str
conversation_id: str
role: str
content: str
model_config = {"from_attributes": True}
class AgentStats(BaseModel):
agent_id: str
call_count: int
current_task: str | None
status: str # active | idle | disabled
class AgentConfigUpdate(BaseModel):
name: str | None = None
description: str | None = None
system_prompt: str | None = None
enabled: bool | None = None
selected_skill_ids: list[str] | None = None
class AgentConfigOut(BaseModel):
id: str
name: str
role: str
description: str | None
system_prompt: str
enabled: bool
is_active: bool
selected_skill_ids: list[str]
model_config = {"from_attributes": True}
class AgentVisibilityEventOut(BaseModel):
event_id: str
event_type: str
timestamp: datetime
conversation_id: str | None = None
agent_id: str | None = None
sub_commander_id: str | None = None
task_id: str | None = None
parent_task_id: str | None = None
child_task_id: str | None = None
thread_id: str | None = None
message_id: str | None = None
interrupt_id: str | None = None
recovery_id: str | None = None
payload: dict[str, Any] = Field(default_factory=dict)
severity: str = "info"
class AgentVisibilityEventsResponse(BaseModel):
conversation_id: str
total: int
limit: int
offset: int
items: list[AgentVisibilityEventOut]
class AgentVisibilityTaskSummaryOut(BaseModel):
task_id: str
role: str | None = None
owner_agent_id: str | None = None
status: str | None = None
summary: str | None = None
evidence_count: int = 0
class AgentVisibilityTopologyNodeOut(BaseModel):
agent_id: str
role: str | None = None
parent_agent_id: str | None = None
source: str
task_count: int = 0
completed_task_count: int = 0
class AgentVisibilityTopologyOut(BaseModel):
conversation_id: str
root_agent_id: str | None = None
current_agent: str | None = None
nodes: list[AgentVisibilityTopologyNodeOut]
edges: list[dict[str, str]]
tasks: list[AgentVisibilityTaskSummaryOut]
task_hierarchy: dict[str, list[str]] = Field(default_factory=dict)
class AgentVisibilityEvidenceOut(BaseModel):
conversation_id: str
task_id: str
task: dict[str, Any] | None = None
result: dict[str, Any] | None = None
tool_outcomes: list[dict[str, Any]] = Field(default_factory=list)
verifier: dict[str, Any]
class AgentVisibilityThreadMessageOut(BaseModel):
message_id: str
thread_id: str
from_agent_id: str
to_agent_id: str
task_id: str | None = None
reply_to_message_id: str | None = None
message_type: str
content_summary: str
created_at: datetime
payload: dict[str, Any] = Field(default_factory=dict)
class AgentVisibilityThreadOut(BaseModel):
conversation_id: str
thread_id: str
total: int
items: list[AgentVisibilityThreadMessageOut]
class AgentVisibilityVerifierOut(BaseModel):
conversation_id: str
status: str | None = None
summary: str | None = None
evidence: list[dict[str, Any]] = Field(default_factory=list)
class AgentVisibilityIsolationOut(BaseModel):
mode: str = "none"
isolation_id: str | None = None
workspace_path: str | None = None
parent_conversation_id: str | None = None
metadata: dict[str, Any] = Field(default_factory=dict)
class AgentVisibilityCostOut(BaseModel):
input_tokens: int = 0
output_tokens: int = 0
total_tokens: int = 0
estimated_cost: float | None = None
budget_warning: bool = False
currency: str = "USD"
class AgentVisibilityCostByAgentOut(BaseModel):
agent_id: str
input_tokens: int = 0
output_tokens: int = 0
total_tokens: int = 0
estimated_cost: float | None = None
budget_warning: bool = False
class AgentVisibilityCostSummaryOut(BaseModel):
conversation_id: str
total: AgentVisibilityCostOut
thresholds: dict[str, float] = Field(default_factory=dict)
by_agent: list[AgentVisibilityCostByAgentOut] = Field(default_factory=list)
class AgentVisibilityToolGovernanceItemOut(BaseModel):
capability_id: str
tool_name: str
permission_class: str
side_effect_scope: str
supports_retry: bool = False
idempotent: bool = False
safe_for_parallel_use: bool = False
requires_confirmation: bool = False
usage_count: int = 0
last_result_preview: str | None = None
class AgentVisibilityToolGovernanceOut(BaseModel):
conversation_id: str
total_tools: int = 0
used_tools: int = 0
items: list[AgentVisibilityToolGovernanceItemOut] = Field(default_factory=list)
upgrade_candidates: list[str] = Field(default_factory=list)
class AgentVisibilityRuntimeSummaryOut(BaseModel):
conversation_id: str
execution_mode: str | None = None
current_phase: str | None = None
current_checkpoint: str | None = None
phase_history: list[dict[str, Any]] = Field(default_factory=list)
checkpoint_history: list[dict[str, Any]] = Field(default_factory=list)
verifier: AgentVisibilityVerifierOut
isolation: AgentVisibilityIsolationOut
cost: AgentVisibilityCostOut
topology_node_count: int = 0
active_task_count: int = 0
completed_task_count: int = 0
recent_events: list[AgentVisibilityEventOut] = Field(default_factory=list)