PMFlow/backend/app/models/ai_orchestration_run.py

43 lines
2.1 KiB
Python

"""AI 编排运行账本。"""
from __future__ import annotations
from typing import Optional
from sqlalchemy import BigInteger, ForeignKey, Integer, Text, UniqueConstraint, VARCHAR, TIMESTAMP
from sqlalchemy.orm import Mapped, mapped_column
from .base import Base
from .types import JSONB
class AIOrchestrationRun(Base):
__tablename__ = "ai_orchestration_runs"
__table_args__ = (
UniqueConstraint("tenant_id", "trace_id", name="uq_ai_orchestration_run_trace_id"),
)
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
trace_id: Mapped[str] = mapped_column(VARCHAR(64), nullable=False, index=True)
run_type: Mapped[str] = mapped_column(VARCHAR(40), nullable=False, index=True)
project_id: Mapped[int] = mapped_column(BigInteger, ForeignKey("projects.id"), nullable=False, index=True)
signal_id: Mapped[Optional[int]] = mapped_column(BigInteger, ForeignKey("signals.id"), nullable=True, index=True)
response_mode: Mapped[str] = mapped_column(VARCHAR(16), nullable=False, default="fast", index=True)
status: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, default="queued", index=True)
planner_status: Mapped[Optional[str]] = mapped_column(VARCHAR(20), nullable=True, index=True)
openclaw_status: Mapped[Optional[str]] = mapped_column(VARCHAR(20), nullable=True, index=True)
worker_total: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
worker_completed: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
worker_failed: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
summary: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
planner_diagnostics: Mapped[Optional[dict]] = mapped_column(JSONB, nullable=True)
result_payload: Mapped[Optional[dict]] = mapped_column(JSONB, nullable=True)
created_by_user_id: Mapped[Optional[int]] = mapped_column(
BigInteger,
ForeignKey("users.id"),
nullable=True,
index=True,
)
started_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True)
completed_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True)