diff --git a/apps/analysis.py b/apps/analysis.py index fc4b2d52..cb2d7deb 100644 --- a/apps/analysis.py +++ b/apps/analysis.py @@ -551,8 +551,9 @@ def _collect_run_metrics(run_dir: Path) -> tuple[list[dict], list[str]]: else metric_score.score ) - if metric_score.sub_metrics: - for sub_key, sub_ms in metric_score.sub_metrics.items(): + sub_metrics = getattr(metric_score, "sub_metrics", None) + if sub_metrics: + for sub_key, sub_ms in sub_metrics.items(): col = f"{metric_name}__{sub_key}" row[col] = ( None @@ -1298,7 +1299,7 @@ def render_run_overview(run_dir: Path): # Add link column to navigate to Record Detail def _record_link(row): - params = f"?view=Record+Detail&run={run_name}&record={row['record']}" + params = f"/record_detail?output_dir={run_dir.parent}&run={run_name}&record={row['record']}" if "trial" in row and pd.notna(row.get("trial")): params += f"&trial={row['trial']}" return params diff --git a/src/eva/models/config.py b/src/eva/models/config.py index efe15863..1f40f8f8 100644 --- a/src/eva/models/config.py +++ b/src/eva/models/config.py @@ -680,7 +680,8 @@ def apply_env_overrides(self, live: "RunConfig", strict_llm: bool = True) -> Non ) logger.warning( f"Deployment {name!r} has redacted secrets but is not in the current " - f"EVA_MODEL_LIST — skipping (not used in this run)." + f"EVA_MODEL_LIST (available: {list(live_by_name)}) — skipping. " + f"Any metric or agent call routed to this deployment will fail." ) continue live_params = live_by_name[name].get("litellm_params", {}) diff --git a/tests/unit/models/test_config_models.py b/tests/unit/models/test_config_models.py index 50f22c73..e93a0e4a 100644 --- a/tests/unit/models/test_config_models.py +++ b/tests/unit/models/test_config_models.py @@ -312,7 +312,7 @@ def test_apply_env_overrides_url_added_from_env(self): assert loaded.model.stt_params["url"] == "wss://new-host/stt" def test_apply_env_overrides_llm_deployment_mismatch(self): - """Restoring secrets fails if a saved LLM deployment is missing from the live model_list.""" + """Restoring secrets fails if the active LLM deployment is missing from the live model_list.""" config = _config(env_vars=_BASE_ENV) dumped_json = config.model_dump_json() loaded = _load_json_into_runconfig(dumped_json)