259 lines
13 KiB
Python
259 lines
13 KiB
Python
"""回复质量迭代相关模型。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any, Optional
|
|
|
|
from sqlalchemy import BigInteger, ForeignKey, Integer, Text, UniqueConstraint, VARCHAR
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from .base import Base
|
|
from .types import JSONB
|
|
|
|
|
|
class QualityAsset(Base):
|
|
__tablename__ = "quality_assets"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
project_id: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True)
|
|
asset_type: Mapped[str] = mapped_column(VARCHAR(16), nullable=False, index=True)
|
|
status: Mapped[str] = mapped_column(VARCHAR(16), nullable=False, default="approved", index=True)
|
|
source_feedback_record_id: Mapped[Optional[int]] = mapped_column(
|
|
Integer,
|
|
ForeignKey("feedback_center_records.id", ondelete="SET NULL"),
|
|
nullable=True,
|
|
index=True,
|
|
)
|
|
qa_record_id: Mapped[Optional[int]] = mapped_column(
|
|
Integer,
|
|
ForeignKey("qa_records.id", ondelete="SET NULL"),
|
|
nullable=True,
|
|
index=True,
|
|
)
|
|
ai_call_log_id: Mapped[Optional[int]] = mapped_column(Integer, nullable=True, index=True)
|
|
prompt_key: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True)
|
|
workflow_type: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True, index=True)
|
|
asked_via: Mapped[Optional[str]] = mapped_column(VARCHAR(32), nullable=True, index=True)
|
|
planned_tier: Mapped[Optional[str]] = mapped_column(VARCHAR(16), nullable=True, index=True)
|
|
executed_tier: Mapped[Optional[str]] = mapped_column(VARCHAR(16), nullable=True, index=True)
|
|
route_source: Mapped[Optional[str]] = mapped_column(VARCHAR(32), nullable=True)
|
|
route_rule_name: Mapped[Optional[str]] = mapped_column(VARCHAR(255), nullable=True)
|
|
question_text: Mapped[str] = mapped_column(Text, nullable=False)
|
|
answer_text: Mapped[str] = mapped_column(Text, nullable=False)
|
|
corrected_answer: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
source_snapshot: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
tags: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
notes: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
approved_by: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True)
|
|
approved_at: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True)
|
|
|
|
|
|
class QualityAssetPair(Base):
|
|
__tablename__ = "quality_asset_pairs"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
project_id: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True)
|
|
pair_type: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="preference", index=True)
|
|
status: Mapped[str] = mapped_column(VARCHAR(16), nullable=False, default="approved", index=True)
|
|
chosen_asset_id: Mapped[int] = mapped_column(
|
|
Integer,
|
|
ForeignKey("quality_assets.id", ondelete="CASCADE"),
|
|
nullable=False,
|
|
index=True,
|
|
)
|
|
rejected_asset_id: Mapped[int] = mapped_column(
|
|
Integer,
|
|
ForeignKey("quality_assets.id", ondelete="CASCADE"),
|
|
nullable=False,
|
|
index=True,
|
|
)
|
|
reason_text: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
approved_by: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True)
|
|
approved_at: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True)
|
|
|
|
|
|
class JudgeRun(Base):
|
|
__tablename__ = "judge_runs"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
project_id: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True)
|
|
asset_id: Mapped[Optional[int]] = mapped_column(
|
|
Integer,
|
|
ForeignKey("quality_assets.id", ondelete="CASCADE"),
|
|
nullable=True,
|
|
index=True,
|
|
)
|
|
pair_id: Mapped[Optional[int]] = mapped_column(
|
|
Integer,
|
|
ForeignKey("quality_asset_pairs.id", ondelete="CASCADE"),
|
|
nullable=True,
|
|
index=True,
|
|
)
|
|
prompt_key: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True)
|
|
workflow_type: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True, index=True)
|
|
asked_via: Mapped[Optional[str]] = mapped_column(VARCHAR(32), nullable=True, index=True)
|
|
planned_tier: Mapped[Optional[str]] = mapped_column(VARCHAR(16), nullable=True, index=True)
|
|
executed_tier: Mapped[Optional[str]] = mapped_column(VARCHAR(16), nullable=True, index=True)
|
|
route_rule_name: Mapped[Optional[str]] = mapped_column(VARCHAR(255), nullable=True)
|
|
judge_status: Mapped[str] = mapped_column(VARCHAR(16), nullable=False, default="completed", index=True)
|
|
bucket_key: Mapped[str] = mapped_column(VARCHAR(255), nullable=False, index=True)
|
|
rule_score: Mapped[Optional[float]] = mapped_column(nullable=True)
|
|
llm_score: Mapped[Optional[float]] = mapped_column(nullable=True)
|
|
overall_score: Mapped[Optional[float]] = mapped_column(nullable=True)
|
|
findings: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
llm_evidence: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
metadata_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
|
|
|
|
class OptimizerCandidate(Base):
|
|
__tablename__ = "optimizer_candidates"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
project_id: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True)
|
|
judge_run_id: Mapped[int] = mapped_column(
|
|
Integer,
|
|
ForeignKey("judge_runs.id", ondelete="CASCADE"),
|
|
nullable=False,
|
|
index=True,
|
|
)
|
|
candidate_type: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, index=True)
|
|
target_type: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, index=True)
|
|
target_ref: Mapped[str] = mapped_column(VARCHAR(255), nullable=False, index=True)
|
|
status: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="draft", index=True)
|
|
suggestion: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
evidence: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
notes: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
|
|
|
|
class PromptRelease(Base):
|
|
__tablename__ = "prompt_releases"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
prompt_key: Mapped[str] = mapped_column(VARCHAR(128), nullable=False, index=True)
|
|
version: Mapped[int] = mapped_column(Integer, nullable=False, default=1)
|
|
body_snapshot: Mapped[str] = mapped_column(Text, nullable=False)
|
|
status: Mapped[str] = mapped_column(VARCHAR(16), nullable=False, default="draft", index=True)
|
|
notes: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
created_by: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True)
|
|
activated_by: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True)
|
|
activated_at: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True)
|
|
|
|
__table_args__ = (
|
|
UniqueConstraint("tenant_id", "prompt_key", "version", name="uq_prompt_releases_tenant_key_version"),
|
|
)
|
|
|
|
|
|
class PromptReleaseCheck(Base):
|
|
__tablename__ = "prompt_release_checks"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
prompt_key: Mapped[str] = mapped_column(VARCHAR(128), nullable=False, index=True)
|
|
release_id: Mapped[int] = mapped_column(
|
|
Integer,
|
|
ForeignKey("prompt_releases.id", ondelete="CASCADE"),
|
|
nullable=False,
|
|
index=True,
|
|
)
|
|
check_type: Mapped[str] = mapped_column(VARCHAR(48), nullable=False, index=True)
|
|
status: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, index=True)
|
|
severity: Mapped[str] = mapped_column(VARCHAR(16), nullable=False, default="info", index=True)
|
|
summary: Mapped[str] = mapped_column(Text, nullable=False)
|
|
details_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
created_by: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True)
|
|
completed_at: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True)
|
|
|
|
|
|
class PromptGoldenCase(Base):
|
|
__tablename__ = "prompt_golden_cases"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
prompt_key: Mapped[str] = mapped_column(VARCHAR(128), nullable=False, index=True)
|
|
case_name: Mapped[str] = mapped_column(VARCHAR(255), nullable=False)
|
|
status: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="active", index=True)
|
|
input_payload: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
expected_contract: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
expected_contains: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
source: Mapped[str] = mapped_column(VARCHAR(48), nullable=False, default="manual", index=True)
|
|
source_ai_call_log_id: Mapped[Optional[int]] = mapped_column(Integer, nullable=True, index=True)
|
|
case_type: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, default="regression", index=True)
|
|
priority: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="blocking", index=True)
|
|
scenario_key: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True)
|
|
tags: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
last_run_status: Mapped[Optional[str]] = mapped_column(VARCHAR(24), nullable=True, index=True)
|
|
last_failed_at: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True)
|
|
created_by: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True)
|
|
notes: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
|
|
|
|
class PromptReplayRun(Base):
|
|
__tablename__ = "prompt_replay_runs"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
prompt_key: Mapped[str] = mapped_column(VARCHAR(128), nullable=False, index=True)
|
|
release_id: Mapped[int] = mapped_column(
|
|
Integer,
|
|
ForeignKey("prompt_releases.id", ondelete="CASCADE"),
|
|
nullable=False,
|
|
index=True,
|
|
)
|
|
baseline_release_id: Mapped[Optional[int]] = mapped_column(Integer, nullable=True, index=True)
|
|
run_status: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, default="pending", index=True)
|
|
run_mode: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, default="contract_smoke", index=True)
|
|
case_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
|
|
passed_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
|
|
failed_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
|
|
warning_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
|
|
score_delta: Mapped[Optional[float]] = mapped_column(nullable=True)
|
|
summary: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
risk_flags_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
created_by: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True)
|
|
started_at: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True)
|
|
completed_at: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True)
|
|
|
|
|
|
class PromptReplayCaseResult(Base):
|
|
__tablename__ = "prompt_replay_case_results"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
run_id: Mapped[int] = mapped_column(
|
|
Integer,
|
|
ForeignKey("prompt_replay_runs.id", ondelete="CASCADE"),
|
|
nullable=False,
|
|
index=True,
|
|
)
|
|
golden_case_id: Mapped[int] = mapped_column(
|
|
Integer,
|
|
ForeignKey("prompt_golden_cases.id", ondelete="CASCADE"),
|
|
nullable=False,
|
|
index=True,
|
|
)
|
|
prompt_key: Mapped[str] = mapped_column(VARCHAR(128), nullable=False, index=True)
|
|
release_id: Mapped[int] = mapped_column(Integer, nullable=False, index=True)
|
|
baseline_output: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
candidate_output: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
status: Mapped[str] = mapped_column(VARCHAR(24), nullable=False, index=True)
|
|
contract_result_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
diff_summary: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
risk_flags_json: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True)
|
|
baseline_ai_call_log_id: Mapped[Optional[int]] = mapped_column(Integer, nullable=True, index=True)
|
|
candidate_ai_call_log_id: Mapped[Optional[int]] = mapped_column(Integer, nullable=True, index=True)
|
|
judge_score: Mapped[Optional[float]] = mapped_column(nullable=True)
|
|
judge_label: Mapped[Optional[str]] = mapped_column(VARCHAR(32), nullable=True, index=True)
|
|
judge_reason: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
latency_ms: Mapped[Optional[int]] = mapped_column(Integer, nullable=True)
|
|
estimated_cost: Mapped[Optional[float]] = mapped_column(nullable=True)
|
|
error_summary: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
|
|
|
|
__all__ = [
|
|
"QualityAsset",
|
|
"QualityAssetPair",
|
|
"JudgeRun",
|
|
"OptimizerCandidate",
|
|
"PromptRelease",
|
|
"PromptReleaseCheck",
|
|
"PromptGoldenCase",
|
|
"PromptReplayRun",
|
|
"PromptReplayCaseResult",
|
|
]
|