48 lines
2.8 KiB
Python
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))
|