"""模型能力矩阵核心模型 AI 开发团队专属垂直能力矩阵的数据模型,包括: - ModelCapabilityGap: 模型能力差距记录(认知差预警) - CostTracking: 算力成本跟踪与 ROI 核算 - ModelUpdateImpact: 模型更新影响评估(阶段2) - ExperimentTruthNodeSync: 实验与宪章同步记录(阶段2) """ from datetime import datetime from typing import Optional from sqlalchemy import BigInteger, DECIMAL, Boolean, Float, ForeignKey, Integer, Text, VARCHAR, TIMESTAMP from sqlalchemy.orm import Mapped, mapped_column from .base import Base from .types import JSONB class ModelCapabilityGap(Base): """模型能力差距记录 - AI 预警认知差 当需求与绑定的模型能力不匹配时,自动生成差距记录, 提前预警产品经理和技术团队,规避返工风险。 """ __tablename__ = "model_capability_gaps" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) model_version_id: Mapped[int] = mapped_column( BigInteger, ForeignKey("model_versions.id"), nullable=False, index=True ) truth_node_id: Mapped[int] = mapped_column( BigInteger, ForeignKey("truth_nodes.id"), nullable=False, index=True ) # 差距类型:capability(能力不足)、cost(成本过高)、performance(性能不符)、risk(兼容性风险) gap_type: Mapped[str] = mapped_column(VARCHAR(50), nullable=False, index=True) # 严重程度:critical(严重,必须解决)、high(高,建议解决)、medium(中)、low(低) severity: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, index=True) # 差距描述和 AI 分析 description: Mapped[str] = mapped_column(Text, nullable=False) ai_analysis: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict) # 状态:open(待处理)、acknowledged(已确认)、resolved(已解决)、ignored(已忽略) status: Mapped[str] = mapped_column( VARCHAR(50), nullable=False, default="open", index=True ) # 解决时间 resolved_at: Mapped[Optional[datetime]] = mapped_column(TIMESTAMP, nullable=True) # 解决方案备注 resolution_notes: Mapped[Optional[str]] = mapped_column(Text, nullable=True) class CostTracking(Base): """算力成本跟踪与 ROI 核算 跟踪每个需求(宪章)、每个任务的算力成本, 自动计算 ROI,实现成本透明化。 """ __tablename__ = "cost_trackings" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) # 关联的宪章(需求) truth_node_id: Mapped[Optional[int]] = mapped_column( BigInteger, ForeignKey("truth_nodes.id"), nullable=True, index=True ) # 关联的模型版本 model_version_id: Mapped[Optional[int]] = mapped_column( BigInteger, ForeignKey("model_versions.id"), nullable=True ) # 关联的任务(可选,用于任务级成本追踪) task_id: Mapped[Optional[int]] = mapped_column( BigInteger, ForeignKey("tasks.id"), nullable=True, index=True ) # 周期:daily、weekly、monthly、project(项目全周期) period: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, index=True) # Token 数量 estimated_tokens: Mapped[int] = mapped_column(Integer, nullable=False, default=0) actual_tokens: Mapped[int] = mapped_column(Integer, nullable=False, default=0) # 成本(美元) estimated_cost_usd: Mapped[float] = mapped_column( DECIMAL(10, 4), nullable=False, default=0.0 ) actual_cost_usd: Mapped[float] = mapped_column( DECIMAL(10, 4), nullable=False, default=0.0 ) # ROI 评分(0-10) roi_score: Mapped[Optional[float]] = mapped_column(Float, nullable=True) # ROI 分析详情 roi_analysis: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict) # 成本优化建议 optimization_suggestions: Mapped[dict] = mapped_column( JSONB, nullable=False, default=dict ) class ModelUpdateImpact(Base): """模型更新影响评估 当监控到新模型发布时,自动评估对现有项目的影响, 生成迁移任务和调整建议。 """ __tablename__ = "model_update_impacts" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) # 旧模型和新模型 old_model_version_id: Mapped[int] = mapped_column( BigInteger, ForeignKey("model_versions.id"), nullable=False ) new_model_version_id: Mapped[int] = mapped_column( BigInteger, ForeignKey("model_versions.id"), nullable=False ) # 受影响的宪章及其影响评分 {node_id: impact_score} affected_truth_nodes: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict) # 成本变化百分比 cost_change_percentage: Mapped[Optional[float]] = mapped_column(Float, nullable=True) # 性能变化 {speed_change_percent, quality_change_percent, etc.} performance_change: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict) # 兼容性风险列表 compatibility_risks: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict) # 自动生成的迁移任务 migration_tasks: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict) # 升级建议:immediate_upgrade(立即升级)、evaluate(评估后升级)、defer(暂缓升级) recommendation: Mapped[str] = mapped_column(VARCHAR(50), nullable=False) # 状态:pending_review(待审核)、approved(已批准)、in_progress(进行中)、completed(已完成) status: Mapped[str] = mapped_column( VARCHAR(50), nullable=False, default="pending_review" ) class ExperimentTruthNodeSync(Base): """实验与宪章同步记录 算法工程师的实验结果自动同步到项目宪章, 确保实验与落地不脱节。 """ __tablename__ = "experiment_truth_node_syncs" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) # 关联的实验(需要 Experiment 表,如果不存在可以先创建外键约束) experiment_id: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True) # 实验标识(用于关联外部实验平台) experiment_external_id: Mapped[Optional[str]] = mapped_column(VARCHAR(255), nullable=True) # 关联的宪章 truth_node_id: Mapped[int] = mapped_column( BigInteger, ForeignKey("truth_nodes.id"), nullable=False, index=True ) # 同步类型:result_sync(结果同步)、metric_update(指标更新)、conclusion_sync(结论同步) sync_type: Mapped[str] = mapped_column(VARCHAR(50), nullable=False) # 同步数据(包含实验结果、建议的变更等) sync_data: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict) # AI 置信度(0-1) confidence_score: Mapped[Optional[float]] = mapped_column(Float, nullable=True) # 是否自动应用 auto_applied: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False) # 应用状态:pending(待应用)、applied(已应用)、rejected(已拒绝)、requires_review(需审核) apply_status: Mapped[str] = mapped_column( VARCHAR(50), nullable=False, default="pending" ) # 审核意见 review_notes: Mapped[Optional[str]] = mapped_column(Text, nullable=True) # 审核人 reviewed_by: Mapped[Optional[int]] = mapped_column( BigInteger, ForeignKey("users.id"), nullable=True ) # 审核时间 reviewed_at: Mapped[Optional[datetime]] = mapped_column(TIMESTAMP, nullable=True) class Budget(Base): """预算设置 按租户、项目设置月度/季度预算, 实现硬性预算管控。 """ __tablename__ = "budgets" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) # 预算类型:tenant(租户级)、project(项目级) budget_type: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, index=True) # 关联项目(project 类型时使用) project_id: Mapped[Optional[int]] = mapped_column( BigInteger, ForeignKey("projects.id"), nullable=True, index=True ) # 周期:monthly、quarterly、yearly period: Mapped[str] = mapped_column(VARCHAR(20), nullable=False) # 预算金额(美元) budget_amount_usd: Mapped[float] = mapped_column( DECIMAL(12, 2), nullable=False, default=0.0 ) # 预警阈值(百分比,默认 80%) alert_threshold_percent: Mapped[float] = mapped_column( Float, nullable=False, default=80.0 ) # 硬性限制(是否启用硬性预算控制) hard_limit_enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True) # 当前已使用金额 current_usage_usd: Mapped[float] = mapped_column( DECIMAL(12, 2), nullable=False, default=0.0 ) # 当前周期(用于跟踪每月/每季度的使用情况) current_period_start: Mapped[Optional[datetime]] = mapped_column(TIMESTAMP, nullable=True) current_period_end: Mapped[Optional[datetime]] = mapped_column(TIMESTAMP, nullable=True) # 状态:active(激活)、suspended(暂停,超支后暂停)、overridden(被覆盖) status: Mapped[str] = mapped_column( VARCHAR(20), nullable=False, default="active" ) # 超支解锁记录(BOSS/ADMIN 可以临时解锁) override_history: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict) class BudgetAlert(Base): """预算预警记录 当预算使用达到预警阈值或超支时,自动生成预警记录。 """ __tablename__ = "budget_alerts" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) # 关联预算 budget_id: Mapped[int] = mapped_column( BigInteger, ForeignKey("budgets.id"), nullable=False, index=True ) # 预警类型:threshold_reached(达到阈值)、exceeded(超支)、suspended(暂停服务) alert_type: Mapped[str] = mapped_column(VARCHAR(50), nullable=False, index=True) # 当前使用量 usage_usd: Mapped[float] = mapped_column(DECIMAL(12, 2), nullable=False) # 使用百分比 usage_percent: Mapped[float] = mapped_column(Float, nullable=False) # 预警消息 message: Mapped[str] = mapped_column(Text, nullable=False) # 是否已读 is_read: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False) # 预警操作(如暂停服务) action_taken: Mapped[Optional[str]] = mapped_column(VARCHAR(50), nullable=True) # 状态:active(激活)、dismissed(已忽略)、resolved(已解决) status: Mapped[str] = mapped_column( VARCHAR(20), nullable=False, default="active" )