PMFlow/backend/app/schemas/mounted_ai_runtime.py

151 lines
3.8 KiB
Python

from __future__ import annotations
from typing import Any, Optional
from pydantic import BaseModel, ConfigDict, Field
class MountedAISourceItem(BaseModel):
model_config = ConfigDict(extra="ignore")
source_system: str
run_count: int = 0
topic_count: int = 0
active_topic_count: int = 0
last_seen_at: Optional[str] = None
class MountedAISourceListPayload(BaseModel):
model_config = ConfigDict(extra="ignore")
items: list[MountedAISourceItem] = Field(default_factory=list)
class MountedAITopicItem(BaseModel):
model_config = ConfigDict(extra="ignore")
id: int
topic_key: str
source_system: str
channel_ref: Optional[str] = None
thread_key: Optional[str] = None
mode: str
status: str
readiness_score: Optional[float] = None
draft_state: Optional[str] = None
draft_version: Optional[int] = None
updated_at: Optional[str] = None
class MountedAITopicListPayload(BaseModel):
model_config = ConfigDict(extra="ignore")
items: list[MountedAITopicItem] = Field(default_factory=list)
total: int = 0
class MountedAIRunItem(BaseModel):
model_config = ConfigDict(extra="ignore")
id: int
trace_id: str
source_system: str
source_message_id: Optional[str] = None
mode_before: Optional[str] = None
mode_after: Optional[str] = None
active_agent: Optional[str] = None
status: str
trigger_reason: Optional[str] = None
final_reply: Optional[str] = None
trace_count: int = 0
updated_at: Optional[str] = None
class MountedAIRunListPayload(BaseModel):
model_config = ConfigDict(extra="ignore")
items: list[MountedAIRunItem] = Field(default_factory=list)
total: int = 0
class MountedAIAgentTraceItem(BaseModel):
model_config = ConfigDict(extra="ignore")
id: int
agent_name: str
status: str
latency_ms: Optional[int] = None
failure_reason: Optional[str] = None
created_at: Optional[str] = None
class MountedAIRunDetailPayload(BaseModel):
model_config = ConfigDict(extra="ignore")
item: MountedAIRunItem
agent_traces: list[MountedAIAgentTraceItem] = Field(default_factory=list)
context_layers_hit: Optional[Any] = None
tool_calls: Optional[Any] = None
execution_outcome: Optional[Any] = None
class MountedAICutoverStatusPayload(BaseModel):
model_config = ConfigDict(extra="ignore")
mounted_runtime_ready: bool
topic_workspace_count: int = 0
conversation_run_count: int = 0
tool_policy_count: int = 0
observed_source_systems: list[str] = Field(default_factory=list)
legacy_cutover_state: str
retired_item_count: int = 0
active_item_count: int = 0
legacy_cutover_items: list["MountedAILegacyCutoverItem"] = Field(default_factory=list)
class MountedAILegacyCutoverItem(BaseModel):
model_config = ConfigDict(extra="ignore")
key: str
title: str
status: str
summary: str
evidence: str
class MountedAIEvalSuiteItem(BaseModel):
model_config = ConfigDict(extra="ignore")
id: int
dataset_type: str
version: str
status: str
suite_kind: str
sample_count: int = 0
latest_score: Optional[float] = None
last_evaluated_at: Optional[str] = None
class MountedAIEvalSuiteListPayload(BaseModel):
model_config = ConfigDict(extra="ignore")
items: list[MountedAIEvalSuiteItem] = Field(default_factory=list)
total: int = 0
class MountedAIEvalResultItem(BaseModel):
model_config = ConfigDict(extra="ignore")
evaluation_type: str
status: str
score: Optional[float] = None
class MountedAIEvalSuiteDetailPayload(BaseModel):
model_config = ConfigDict(extra="ignore")
item: MountedAIEvalSuiteItem
selection_rules: Optional[Any] = None
notes: Optional[str] = None
evaluations: list[MountedAIEvalResultItem] = Field(default_factory=list)