Files
ai-contract-platform/backend/app/models/ai_quality_eval_run.py
T

48 lines
2.8 KiB
Python

from datetime import datetime, timezone
from typing import Any, Optional
from sqlalchemy import DateTime, Float, Index, JSON, String
from sqlalchemy.orm import Mapped, mapped_column
from app.db import Base
class AiQualityEvalRun(Base):
__tablename__ = "ai_quality_eval_runs"
__table_args__ = (
Index("ix_ai_quality_eval_runs_tenant_id", "tenant_id"),
Index("ix_ai_quality_eval_runs_source_run_id", "source_run_id"),
Index("ix_ai_quality_eval_runs_eval_domain", "eval_domain"),
Index("ix_ai_quality_eval_runs_subject_type", "subject_type"),
Index("ix_ai_quality_eval_runs_subject_id", "subject_id"),
Index("ix_ai_quality_eval_runs_suite_key", "suite_key"),
Index("ix_ai_quality_eval_runs_status", "status"),
Index("ix_ai_quality_eval_runs_created_at", "created_at"),
Index("ix_ai_quality_eval_runs_tenant_status", "tenant_id", "status"),
Index("ix_ai_quality_eval_runs_tenant_domain", "tenant_id", "eval_domain"),
Index("ix_ai_quality_eval_runs_tenant_subject", "tenant_id", "subject_type", "subject_id"),
)
id: Mapped[str] = mapped_column(String(64), primary_key=True)
tenant_id: Mapped[str] = mapped_column(String(64), nullable=False)
source_kind: Mapped[str] = mapped_column(String(64), nullable=False)
source_run_id: Mapped[Optional[str]] = mapped_column(String(64), nullable=True)
eval_domain: Mapped[str] = mapped_column(String(64), nullable=False)
subject_type: Mapped[str] = mapped_column(String(64), nullable=False)
subject_id: Mapped[Optional[str]] = mapped_column(String(64), nullable=True)
subject_key: Mapped[Optional[str]] = mapped_column(String(128), nullable=True)
subject_name: Mapped[Optional[str]] = mapped_column(String(255), nullable=True)
suite_key: Mapped[str] = mapped_column(String(100), nullable=False)
status: Mapped[str] = mapped_column(String(32), nullable=False, default="running")
sample_count: Mapped[int] = mapped_column(default=0)
passed_samples: Mapped[int] = mapped_column(default=0)
failed_samples: Mapped[int] = mapped_column(default=0)
pass_rate: Mapped[Optional[float]] = mapped_column(Float, nullable=True)
quality_score: Mapped[Optional[float]] = mapped_column(Float, nullable=True)
report_json: Mapped[Optional[dict[str, Any]]] = mapped_column(JSON, nullable=True)
failure_reason: Mapped[Optional[str]] = mapped_column(String(500), nullable=True)
triggered_by: Mapped[Optional[str]] = mapped_column(String(64), nullable=True)
started_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, default=lambda: datetime.now(timezone.utc))
finished_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True), nullable=True)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, default=lambda: datetime.now(timezone.utc))