-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreport-review-retrain-cycle.py
More file actions
63 lines (50 loc) · 1.95 KB
/
Copy pathreport-review-retrain-cycle.py
File metadata and controls
63 lines (50 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env python3
"""Сводка readiness для цикла review -> calibration -> retrain."""
from __future__ import annotations
import argparse
import json
import sys
from pathlib import Path
def _project_app_root() -> Path:
return Path(__file__).resolve().parents[1] / 'app'
def _read_runtime_snapshot(path: str | None) -> dict | None:
if not path:
return None
try:
return json.loads(Path(path).read_text(encoding="utf-8"))
except (OSError, ValueError):
return None
def main() -> int:
"""Build review/calibration/retrain readiness report."""
parser = argparse.ArgumentParser(description=__doc__)
app_root = _project_app_root()
default_snapshot = app_root / 'data' / 'diagnostics' / 'processor_runtime_stats.json'
parser.add_argument('--days', type=int, default=14)
parser.add_argument('--dataset-info', default=None)
parser.add_argument('--fusion-eval-report', default=None)
parser.add_argument(
'--runtime-snapshot',
default=str(default_snapshot),
)
args = parser.parse_args()
web_dir = str(app_root / 'web')
for p in (str(app_root), web_dir):
if p not in sys.path:
sys.path.insert(0, p)
parent = str(app_root.parent)
if parent not in sys.path:
sys.path.append(parent) # не prepend: иначе конфликт пакета `app` с корня репо
from web.app import create_app
from services.ml_quality_cycle_service import build_review_retrain_cycle_report
app = create_app()
with app.app_context():
report = build_review_retrain_cycle_report(
days=args.days,
dataset_info_path=args.dataset_info,
fusion_eval_report_path=args.fusion_eval_report,
runtime_snapshot=_read_runtime_snapshot(args.runtime_snapshot),
)
print(json.dumps(report, ensure_ascii=False, indent=2))
return 0
if __name__ == '__main__':
raise SystemExit(main())