@@ -452,10 +452,31 @@ def evaluate_model_router_transparent(
452452 )
453453 )
454454
455- for future in tqdm (
456- futures , total = len (futures ), desc = f"Evaluating { model } (Router-Transparent)"
457- ):
458- results .append (future .result ())
455+ try :
456+ for future in tqdm (
457+ futures ,
458+ total = len (futures ),
459+ desc = f"Evaluating { model } (Router-Transparent)" ,
460+ ):
461+ results .append (future .result ())
462+ except KeyboardInterrupt :
463+ print (
464+ "\n ⚠️ Router evaluation interrupted by user. Saving partial results..."
465+ )
466+ # Cancel remaining futures
467+ for future in futures :
468+ future .cancel ()
469+ # Collect results from completed futures
470+ for future in futures :
471+ if future .done () and not future .cancelled ():
472+ try :
473+ results .append (future .result ())
474+ except Exception :
475+ pass # Skip failed results
476+ if not results :
477+ print ("❌ No router results to save." )
478+ raise
479+ print (f"✅ Saved { len (results )} partial router results." )
459480
460481 return pd .DataFrame (results )
461482
@@ -558,10 +579,27 @@ def run_variants(q: Question) -> List[Dict[str, Any]]:
558579
559580 with ThreadPoolExecutor (max_workers = concurrent_requests ) as executor :
560581 futures = [executor .submit (run_variants , q ) for q in questions ]
561- for future in tqdm (
562- futures , total = len (futures ), desc = f"Evaluating { model } (vLLM modes)"
563- ):
564- results .extend (future .result ())
582+ try :
583+ for future in tqdm (
584+ futures , total = len (futures ), desc = f"Evaluating { model } (vLLM modes)"
585+ ):
586+ results .extend (future .result ())
587+ except KeyboardInterrupt :
588+ print ("\n ⚠️ Benchmark interrupted by user. Saving partial results..." )
589+ # Cancel remaining futures
590+ for future in futures :
591+ future .cancel ()
592+ # Collect results from completed futures
593+ for future in futures :
594+ if future .done () and not future .cancelled ():
595+ try :
596+ results .extend (future .result ())
597+ except Exception :
598+ pass # Skip failed results
599+ if not results :
600+ print ("❌ No results to save." )
601+ raise
602+ print (f"✅ Saved { len (results )} partial results." )
565603
566604 return pd .DataFrame (results )
567605
0 commit comments