fix: persist sim results to disk + auto-generate deck reports
This commit is contained in:
1 parent
b00df14f30
commit
7efac34279
1 file changed
+48
-1
+48
-1
@@ -15,6 +15,7 @@ Python simulator & DeepSeek AI opponent endpoints:
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
@@ -33,6 +34,7 @@ from routes.shared import (
|
||||
_get_deepseek_brain,
|
||||
_ml_logging_enabled,
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
router = APIRouter(tags=["deepseek"])
|
||||
|
||||
@@ -179,9 +181,54 @@ def _build_summary(stats: dict, deck_name: str, opponent_name: str,
|
||||
def _finish_sim(sim_id, summary, game_results):
|
||||
"""Mark a sim run as complete."""
|
||||
with _sim_lock:
|
||||
_sim_runs[sim_id]['status'] = 'complete'
|
||||
_sim_runs[sim_id]['status'] = 'complete'
|
||||
_sim_runs[sim_id]['result'] = {'summary': summary, 'games': game_results}
|
||||
|
||||
# --- Persist batch-*.json for coach / training dashboard ---
|
||||
try:
|
||||
deck_name = summary.get('deckName', 'Unknown')
|
||||
opponent_name = summary.get('opponentName', 'Training Deck')
|
||||
batch_data = {
|
||||
'format': 'python-sim',
|
||||
'timestamp': time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime()),
|
||||
'simId': sim_id,
|
||||
'decks': [
|
||||
{
|
||||
'deckName': deck_name,
|
||||
'seatIndex': 0,
|
||||
'commanderName': summary.get('commanderName', ''),
|
||||
'colorIdentity': summary.get('colorIdentity', []),
|
||||
'games': game_results,
|
||||
},
|
||||
{
|
||||
'deckName': opponent_name,
|
||||
'seatIndex': 1,
|
||||
'commanderName': '',
|
||||
'colorIdentity': [],
|
||||
},
|
||||
],
|
||||
'summary': summary,
|
||||
}
|
||||
results_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'results')
|
||||
os.makedirs(results_dir, exist_ok=True)
|
||||
batch_path = os.path.join(results_dir, f'batch-sim-{sim_id}.json')
|
||||
with open(batch_path, 'w') as f:
|
||||
json.dump(batch_data, f, indent=2, default=str)
|
||||
logger.info(f'Saved batch results to {batch_path}')
|
||||
|
||||
# Auto-generate deck report for training dashboard / coach
|
||||
try:
|
||||
from commander_ai_lab.lab.reports import generate_single_deck_report
|
||||
reports_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'deck-reports')
|
||||
os.makedirs(reports_dir, exist_ok=True)
|
||||
generate_single_deck_report(batch_data, reports_dir)
|
||||
logger.info(f'Generated deck report for {deck_name}')
|
||||
except ImportError:
|
||||
logger.warning('reports module not available; skipping deck report generation')
|
||||
except Exception as e:
|
||||
logger.warning(f'Could not generate deck report: {e}')
|
||||
except Exception as e:
|
||||
logger.error(f'Failed to persist sim results: {e}')
|
||||
|
||||
def _fail_sim(sim_id, error):
|
||||
"""Mark a sim run as errored."""
|
||||
|
||||
Reference in new issue
Block a user