Off-Grid-Field-Repair-Logbook / tests /test_trace_artifacts.py
Abhishek
Initialize project files and updated hackathon tags
50f83f4
Raw
History Blame Contribute Delete
1.6 kB
from __future__ import annotations
import json
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
from app_kit.app import PACK_ROOT, load_pack_with_trace
from app_kit.demo_pack import list_demo_packs
from app_kit.eval import evaluate_pack
def _first_pack_name() -> str:
return list_demo_packs(PACK_ROOT)[0].name
def test_load_pack_ui_emits_trace_artifact(tmp_path):
pack_name = _first_pack_name()
status, manuals, sections, jobs, update, info, trace_path = load_pack_with_trace(
pack_name,
db_path=tmp_path / 'ui.sqlite3',
artifact_dir=tmp_path / 'artifacts',
)
assert status
assert trace_path.exists()
trace = json.loads(trace_path.read_text(encoding='utf-8'))
assert trace['kind'] == 'app-load'
assert trace['pack_name'] == pack_name
assert trace['trace_path'] == str(trace_path)
assert trace['timestamp']
assert trace['inputs']
assert 'parsed_outputs' in trace
assert trace['model_name']
assert info['pack_name'] == pack_name
def test_eval_runner_emits_trace_artifact(tmp_path):
report = evaluate_pack(
PACK_ROOT,
db_path=tmp_path / 'eval.sqlite3',
artifact_dir=tmp_path / 'artifacts',
)
trace_path = Path(report['trace_path'])
assert trace_path.exists()
trace = json.loads(trace_path.read_text(encoding='utf-8'))
assert trace['kind'] == 'eval'
assert trace['trace_path'] == str(trace_path)
assert trace['scenario_count'] == report['scenario_count']