From fe094a3eecd19874a2fd30f60d0ef1725eb08cc4 Mon Sep 17 00:00:00 2001 From: Adriana Knight Date: Wed, 7 Oct 2026 13:05:29 -0400 Subject: [PATCH] fix ai config fetch --- .../src/launchdarkly_ai_server/evaluations/types.py | 8 ++++++-- packages/client/tests/test_evaluations_run.py | 9 +++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/client/src/launchdarkly_ai_server/evaluations/types.py b/packages/client/src/launchdarkly_ai_server/evaluations/types.py index 7c1392fd..a359ba14 100644 --- a/packages/client/src/launchdarkly_ai_server/evaluations/types.py +++ b/packages/client/src/launchdarkly_ai_server/evaluations/types.py @@ -138,8 +138,12 @@ def from_api( base_parameters = model_config.get("params") if isinstance(base_parameters, Mapping): parameters = {**base_parameters, **parameters} - if not model_name: - model_name = model_config.get("id") + # A linked variation's modelName is the model-config key + # ("OpenAI.gpt-4o"), not a model ID the provider accepts; the + # model config's id is, so it wins whenever one is linked. + config_model_id = model_config.get("id") + if isinstance(config_model_id, str) and config_model_id: + model_name = config_model_id generation = GenerationConfig() if isinstance(provider, str) and provider: diff --git a/packages/client/tests/test_evaluations_run.py b/packages/client/tests/test_evaluations_run.py index 6b20c875..796a95a1 100644 --- a/packages/client/tests/test_evaluations_run.py +++ b/packages/client/tests/test_evaluations_run.py @@ -3071,7 +3071,8 @@ def config_variation_page(**overrides: Any) -> dict[str, Any]: "name": "Control", "version": 2, "createdAt": 2, - "model": {"modelName": "gpt-4o", "parameters": {"temperature": 0.7}}, + # The management API serves the model-config key as modelName. + "model": {"modelName": "OpenAI.gpt-4o", "parameters": {"temperature": 0.7}}, "modelConfigKey": "OpenAI.gpt-4o", "modelConfigVersion": 3, "instructions": "You are a support agent.", @@ -3425,8 +3426,12 @@ def test_ai_config_variation_from_api_layers_the_model_config() -> None: assert linked.tool_versions == {"lookup_order": 4} assert linked.judge_keys == ["security-judge"] - unlinked = AIConfigVariation.from_api(latest) + unlinked = AIConfigVariation.from_api( + {**latest, "model": {**latest["model"], "modelName": "gpt-4o-mini"}} + ) assert "provider" not in unlinked.generation + # With no model config linked, the variation's own modelName is the model. + assert unlinked.generation["model"] == "gpt-4o-mini" assert unlinked.generation["parameters"] == {"temperature": 0.7}