import json, sys, os sys.path.insert(0, os.path.abspath('.')) from pathlib import Path cases = json.loads(Path('eval/golden_cases.json').read_text(encoding='utf-8')) from src.resume_parser import parse_resume from src.matcher import rank_jobs from src.strategy_planner import gen_strategy_package for case in cases: if case.get('eval_split') != 'stress': continue print('=== ' + case['case_id'] + ' ===') print(' expected_action: ' + str(case.get('expected_action'))) profile = parse_resume(case['resume_text']) profile['_city'] = case.get('target_city', '') profile['_stage'] = case.get('stage', '') profile['_target_role'] = case.get('target_role', '') print(' has_llm_project: ' + str(profile.get('has_llm_project'))) print(' has_metrics: ' + str(profile.get('has_metrics'))) print(' has_rec_project: ' + str(profile.get('has_rec_project'))) scored = rank_jobs( resume_text=case['resume_text'], profile=profile, target_role=case.get('target_role', ''), target_city=case.get('target_city', ''), stage=case.get('stage', ''), top_k=8, jobs_path=Path('data/jobs.json') ) pkg = gen_strategy_package(scored, profile) top3 = pkg.get('priority_top3', []) for i, t in enumerate(top3): print(' Top' + str(i+1) + ': ' + t['title'] + ' | action=' + t['apply_action'] + ' | pass=' + str(t.get('pass_score')) + ' | risk=' + str(t.get('risk_score')) + ' | growth=' + str(t.get('growth_score'))) actual = top3[0]['apply_action'] if top3 else '?' exp = case.get('expected_action', '') match_str = 'OK' if actual == exp else 'MISMATCH' print(' RESULT: actual=' + actual + ', expected=' + exp + ' => ' + match_str) print()