65 lines
3.8 KiB
Python
65 lines
3.8 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[Optional[int]] = mapped_column(BigInteger, ForeignKey("projects.id"), nullable=True, 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)
|
|
source_system: Mapped[Optional[str]] = mapped_column(VARCHAR(32), nullable=True, index=True)
|
|
source_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True)
|
|
sender: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True)
|
|
source_sender_open_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True)
|
|
channel_ref: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True)
|
|
chat_type: Mapped[Optional[str]] = mapped_column(VARCHAR(32), nullable=True)
|
|
captured_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True, index=True)
|
|
message_text: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
project_hint_id: Mapped[Optional[int]] = mapped_column(BigInteger, ForeignKey("projects.id"), nullable=True, index=True)
|
|
retry_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
|
|
max_retries: Mapped[int] = mapped_column(Integer, nullable=False, default=3)
|
|
next_retry_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True, index=True)
|
|
last_error: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
last_error_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True)
|
|
ack_sent_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True)
|
|
result_notified_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True)
|
|
work_item_id: Mapped[Optional[int]] = mapped_column(
|
|
Integer,
|
|
ForeignKey("work_items.id", ondelete="SET NULL"),
|
|
nullable=True,
|
|
index=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)
|