fix: 补充 Alembic 迁移 + bzzoiro 批量优化 + validation 兼容层

- 新增 0004_snapshot_and_constraints.py: 重命名 confidence → subjective_confidence,
  新增 cutoff_at/input_hash, 添加 CHECK 约束
- bzzoiro.py: 预加载完整 Match 对象到内存,更新路径不再重复查询
- validation.py: 旧字段 confidence 兼容并打 deprecation 日志
This commit is contained in:
shangfangjian
2026-09-15 01:42:52 +08:00
parent 2c205c68b1
commit 98e3d07cf5
3 changed files with 70 additions and 25 deletions
+11 -1
View File
@@ -4,8 +4,12 @@
"""
from __future__ import annotations
import logging
from pydantic import BaseModel, Field, field_validator, model_validator
logger = logging.getLogger(__name__)
class AgentReportSchema(BaseModel):
"""单个专家 Agent 输出的校验 schema。"""
@@ -92,11 +96,17 @@ def validate_agent_output(raw: dict) -> AgentReportSchema:
def validate_prediction_output(raw: dict) -> PredictionOutputSchema:
"""校验最终预测输出。"""
# 优先新字段,旧字段仅兼容并打日志
conf = raw.get("subjective_confidence")
if conf is None and "confidence" in raw:
logger.warning("Deprecated field 'confidence' used, prefer 'subjective_confidence'")
conf = raw["confidence"]
return PredictionOutputSchema(
pred_home_goals=float(raw.get("pred_home_goals", 0)),
pred_away_goals=float(raw.get("pred_away_goals", 0)),
pred_1x2=raw.get("1x2") or raw.get("pred_1x2", "X"),
subjective_confidence=float(raw.get("confidence", 0.5)),
subjective_confidence=float(conf if conf is not None else 0.5),
reasoning=str(raw.get("reasoning", ""))[:1000],
)