PMFlow/backend/app/models/mounted_ai_runtime.py

150 lines
7.3 KiB
Python

"""Mounted AI Runtime 核心运行时对象。"""
from __future__ import annotations
from typing import Any, Optional
from sqlalchemy import Boolean, Float, ForeignKey, Integer, Text, TIMESTAMP, UniqueConstraint, VARCHAR
from sqlalchemy.orm import Mapped, mapped_column
from .base import Base
from .types import JSONB
class MountedTopicWorkspace(Base):
__tablename__ = "mounted_topic_workspaces"
__table_args__ = (
UniqueConstraint(
"tenant_id",
"source_system",
"topic_key",
name="uq_mounted_topic_workspace_source_topic",
),
)
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
topic_key: Mapped[str] = mapped_column(VARCHAR(128), nullable=False, index=True)
source_system: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, index=True)
channel_ref: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True)
thread_key: Mapped[Optional[str]] = mapped_column(VARCHAR(255), nullable=True, index=True)
root_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True)
mode: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="chat", index=True)
status: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="active", index=True)
facts_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
goals_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
constraints_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
options_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
open_questions: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
pending_actions: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
bound_entities: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
readiness_score: Mapped[Optional[float]] = mapped_column(Float, nullable=True, default=0.0)
last_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True)
last_triggered_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True)
metadata_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
class MountedDraftWorkspace(Base):
__tablename__ = "mounted_draft_workspaces"
__table_args__ = (
UniqueConstraint(
"tenant_id",
"topic_workspace_id",
name="uq_mounted_draft_workspace_topic",
),
)
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
topic_workspace_id: Mapped[int] = mapped_column(
Integer,
ForeignKey("mounted_topic_workspaces.id", ondelete="CASCADE"),
nullable=False,
index=True,
)
state: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="collecting", index=True)
draft_version: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
requirement_card: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
draft_payload: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
required_confirmations: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
last_ready_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True)
confirm_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True)
class MountedConversationRun(Base):
__tablename__ = "mounted_conversation_runs"
__table_args__ = (
UniqueConstraint("tenant_id", "trace_id", name="uq_mounted_conversation_run_trace"),
)
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
trace_id: Mapped[str] = mapped_column(VARCHAR(64), nullable=False, index=True)
topic_workspace_id: Mapped[Optional[int]] = mapped_column(
Integer,
ForeignKey("mounted_topic_workspaces.id", ondelete="SET NULL"),
nullable=True,
index=True,
)
source_system: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, index=True)
source_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True)
mode_before: Mapped[Optional[str]] = mapped_column(VARCHAR(24), nullable=True, index=True)
mode_after: Mapped[Optional[str]] = mapped_column(VARCHAR(24), nullable=True, index=True)
active_agent: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True, index=True)
status: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="queued", index=True)
trigger_reason: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True)
context_layers_hit: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
tool_calls: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
final_reply: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
execution_outcome: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
error_text: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
started_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True)
completed_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True)
class MountedAgentTrace(Base):
__tablename__ = "mounted_agent_traces"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
conversation_run_id: Mapped[int] = mapped_column(
Integer,
ForeignKey("mounted_conversation_runs.id", ondelete="CASCADE"),
nullable=False,
index=True,
)
agent_name: Mapped[str] = mapped_column(VARCHAR(64), nullable=False, index=True)
status: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="completed", index=True)
latency_ms: Mapped[Optional[int]] = mapped_column(Integer, nullable=True)
input_summary: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
output_summary: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
tool_trace: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
failure_reason: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
class MountedToolCapabilityPolicy(Base):
__tablename__ = "mounted_tool_capability_policies"
__table_args__ = (
UniqueConstraint(
"tenant_id",
"tool_name",
name="uq_mounted_tool_capability_policy_tool",
),
)
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
tool_name: Mapped[str] = mapped_column(VARCHAR(128), nullable=False, index=True)
risk_level: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="medium", index=True)
confirm_required: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True)
auto_execute_allowed: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
is_active: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True, index=True)
source_scope: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
tenant_scope: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
policy_metadata: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
notes: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
__all__ = [
"MountedAgentTrace",
"MountedConversationRun",
"MountedDraftWorkspace",
"MountedToolCapabilityPolicy",
"MountedTopicWorkspace",
]