feat(ml): wire ML decision flush in _finish_sim for all sim threads

This commit is contained in:
KoalaTrapLord authored and GitHub committed 2026-03-21 14:30:47 -04:00
1 parent f86a4af86f
commit 1397f93b91
1 file changed
+16 -5
+16 -5
View File
@@ -204,7 +204,7 @@ def _build_summary(stats: dict, deck_name: str, opponent_name: str,
return summary
def _finish_sim(sim_id, summary, game_results):
def _finish_sim(sim_id, summary, game_results, engine=None):
"""Mark a sim run as complete."""
with _sim_lock:
_sim_runs[sim_id]['status'] = 'complete'
@@ -255,6 +255,17 @@ def _finish_sim(sim_id, summary, game_results):
logger.warning(f'Could not generate deck report: {e}')
except Exception as e:
logger.error(f'Failed to persist sim results: {e}')
# --- Flush ML decisions JSONL for training pipeline ---
if engine is not None and hasattr(engine, 'flush_ml_decisions'):
ml_decisions = engine.flush_ml_decisions()
if ml_decisions:
ml_path = os.path.join('results', f'ml-decisions-sim-{sim_id[:8]}.jsonl')
os.makedirs('results', exist_ok=True)
with open(ml_path, 'w', encoding='utf-8') as mf:
for dec in ml_decisions:
mf.write(json.dumps(dec) + '\n')
logger.info(f'Wrote {len(ml_decisions)} ML decisions to {ml_path}')
def _fail_sim(sim_id, error):
"""Mark a sim run as errored."""
@@ -287,7 +298,7 @@ def _run_sim_thread(sim_id: str, decklist: list, num_games: int,
summary = _build_summary(stats, deck_name, 'Training Deck',
num_games, elapsed)
_finish_sim(sim_id, summary, game_results)
_finish_sim(sim_id, summary, game_results, engine=engine)
except Exception as e:
_fail_sim(sim_id, e)
traceback.print_exc()
@@ -314,7 +325,7 @@ def _run_sim_thread_v2(sim_id: str, card_data: list[dict], num_games: int,
summary = _build_summary(stats, deck_name, 'Training Deck',
num_games, elapsed)
_finish_sim(sim_id, summary, game_results)
_finish_sim(sim_id, summary, game_results, engine=engine)
except Exception as e:
_fail_sim(sim_id, e)
traceback.print_exc()
@@ -365,7 +376,7 @@ def _run_sim_thread_deepseek(sim_id: str, card_data: list[dict],
summary = _build_summary(
stats, deck_name, 'DeepSeek AI', num_games, elapsed,
opponentType='deepseek', deepseekStats=ds_stats)
_finish_sim(sim_id, summary, game_results)
_finish_sim(sim_id, summary, game_results, engine=engine)
except Exception as e:
_fail_sim(sim_id, e)
traceback.print_exc()
@@ -464,7 +475,7 @@ def _run_sim_thread_n_player(sim_id: str, decks_data: list[list[dict]],
'players': players_summary,
'elapsedSeconds': round(elapsed, 3),
}
_finish_sim(sim_id, summary, game_results)
_finish_sim(sim_id, summary, game_results, engine=engine)
except Exception as e:
_fail_sim(sim_id, e)
traceback.print_exc()