chore: 死代码与重复逻辑清理

删除未引用/未调用符号:
- PredictionRepository(无引用)
- is_correct_1x2(无调用者)
- LeagueOut(路由用 list[dict])
- IngestResponse(IngestBzzoiroResponse 已替代)
- SecurityCheckError(从未 raise,assert_security_on_startup 用 sys.exit)
- short_write(仅自引用,全仓库无外部调用)
- fetchIngestJobs(列表函数无页面使用,单数 fetchIngestJob 仍保留)
- clear_prompt_cache(无入口)

去重:
- eval._actual_1x2 改为委托 utils.actual_1x2(单一权威源)

全量测试 270 通过,业务行为不变。
This commit is contained in:
shangfangjian
2026-09-22 01:55:52 +08:00
parent a00364d4a7
commit 7d2eabf750
8 changed files with 4 additions and 87 deletions
+3 -6
View File
@@ -7,6 +7,7 @@ from sqlalchemy import func, or_, select
from src.db.models import Prediction, Match, League
from src.db.unit_of_work import get_uow
from src.llm.utils import actual_1x2
logger = logging.getLogger(__name__)
@@ -33,12 +34,8 @@ async def settle_prediction(prediction_id: int, home_goals: int, away_goals: int
def _actual_1x2(home: int, away: int) -> str:
"""根据实际比分返胜平负。"""
if home > away:
return "1"
if home == away:
return "X"
return "2"
"""根据实际比分返胜平负(委托 utils.actual_1x2 单一权威源)"""
return actual_1x2(home, away)
def _build_filters(
-14
View File
@@ -172,20 +172,6 @@ async def _set_cached(match_id: int, provider: str, model: str, version: str, tp
await _cache_backend.set(key, result, _CACHE_TTL_SEC)
def clear_prompt_cache() -> None:
"""清空 prompt 模板缓存(供开发/热更新时手动调用)。
lru_cache 的模板缓存是进程级的,改完 .md 需要重启进程才能生效;
提供显式清理入口,避免"改了模板却看不到变化"的困惑(见审查报告 P2-5)。
同时清空预测响应缓存(内存后端);Redis 后端因共享不清除。
"""
_load_prompt_template.cache_clear()
if isinstance(_cache_backend, _MemoryCache):
_cache_backend._store.clear()
logger.info("prompt 模板缓存 + 预测响应缓存(内存)已清空")
@functools.lru_cache(maxsize=8)
def _load_prompt_template(version: str = "v1") -> str:
"""缓存 prompt 模板(进程生命周期内每个版本只读一次)。"""
path = _PROMPT_DIR / f"match_prediction_{version}.md"
+1 -9
View File
@@ -3,17 +3,9 @@ from __future__ import annotations
def actual_1x2(home: int, away: int) -> str:
"""实际比分 → 胜平负
单一权威源: backtest.py 和 eval.py 共用,避免重复定义。
"""
"""实际比分 → 胜平负(单一权威源:backtest.py 与 eval.py 共用)。"""
if home > away:
return "1"
if home == away:
return "X"
return "2"
def is_correct_1x2(pred: str | None, actual: str) -> bool:
"""预测是否命中胜平负。"""
return pred == actual