From bc962f033ec7ca82ed7e157becceaa10d095ee10 Mon Sep 17 00:00:00 2001 From: andy-xu-db <310751426+andy-xu-db@users.noreply.github.com> Date: Fri, 21 Aug 2026 19:49:58 +0000 Subject: [PATCH 1/3] Hide relayed services from Claude setup --- src/ucode/managed_wizard.py | 9 ++++++++- tests/test_managed_wizard.py | 37 ++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/ucode/managed_wizard.py b/src/ucode/managed_wizard.py index dab1882..c10a9a0 100644 --- a/src/ucode/managed_wizard.py +++ b/src/ucode/managed_wizard.py @@ -262,7 +262,14 @@ def _select_provider_service(tool: str, workspace: str, token: str) -> dict | No print_note("Falling back to Databricks-hosted models.") return None - usable = [service for service in services if service_usable_for_tool(tool, service)] + usable = [ + service + for service in services + if service_usable_for_tool(tool, service) + # Claude Max/Team/Enterprise subscription relays are not reliable enough for managed + # configurations yet. Keep them out of the External Models picker until that path is ready. + and not (tool == "claude" and service.get("relayed")) + ] if not usable: if services: # Services exist but none match this agent's dialect — say so, since "no picker appeared" diff --git a/tests/test_managed_wizard.py b/tests/test_managed_wizard.py index 550a67d..4c86183 100644 --- a/tests/test_managed_wizard.py +++ b/tests/test_managed_wizard.py @@ -1309,6 +1309,43 @@ def test_only_matching_services_are_offered(self): offered = [value for value, _ in select.call_args_list[1][0][1]] assert offered == ["main.default.lilly-anthropic"] + def test_relayed_services_are_not_offered_for_claude(self): + relayed = { + **ANTHROPIC_SERVICE, + "name": "main.default.claude-enterprise", + "targets": [], + "relayed": True, + } + with ( + patch.object( + wizard, + "list_model_provider_services", + return_value=([relayed, ANTHROPIC_SERVICE], None), + ), + patch.object( + wizard, + "prompt_for_selection", + side_effect=["mps", "main.default.lilly-anthropic"], + ) as select, + patch.object(wizard, "all_users_can_use_schema", return_value=True), + ): + service = wizard._select_provider_service("claude", WORKSPACE, "token") + assert service == ANTHROPIC_SERVICE + offered = [value for value, _ in select.call_args_list[1][0][1]] + assert offered == ["main.default.lilly-anthropic"] + + def test_only_relayed_services_falls_back_to_databricks_for_claude(self): + relayed = {**ANTHROPIC_SERVICE, "targets": [], "relayed": True} + with ( + patch.object( + wizard, "list_model_provider_services", return_value=([relayed], None) + ), + patch.object(wizard, "prompt_for_selection") as select, + patch.object(wizard, "print_note"), + ): + assert wizard._select_provider_service("claude", WORKSPACE, "token") is None + assert not select.called + def test_warns_when_all_users_lack_schema_access(self): # The picked MPS's schema isn't granted to all workspace users, so developers who pull the # config may hit "does not have USE_SCHEMA"; warn but still return the service (never block). From 46367dea8d80a9c1f8b9406fd41e80004ea6764e Mon Sep 17 00:00:00 2001 From: andy-xu-db <310751426+andy-xu-db@users.noreply.github.com> Date: Fri, 21 Aug 2026 20:14:37 +0000 Subject: [PATCH 2/3] Format managed wizard test --- tests/test_managed_wizard.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/test_managed_wizard.py b/tests/test_managed_wizard.py index 4c86183..1634de5 100644 --- a/tests/test_managed_wizard.py +++ b/tests/test_managed_wizard.py @@ -1337,9 +1337,7 @@ def test_relayed_services_are_not_offered_for_claude(self): def test_only_relayed_services_falls_back_to_databricks_for_claude(self): relayed = {**ANTHROPIC_SERVICE, "targets": [], "relayed": True} with ( - patch.object( - wizard, "list_model_provider_services", return_value=([relayed], None) - ), + patch.object(wizard, "list_model_provider_services", return_value=([relayed], None)), patch.object(wizard, "prompt_for_selection") as select, patch.object(wizard, "print_note"), ): From 8ee4ee0bbaf213f0b42728b244ddf0db1d0ba2d0 Mon Sep 17 00:00:00 2001 From: andy-xu-db <310751426+andy-xu-db@users.noreply.github.com> Date: Fri, 21 Aug 2026 20:26:03 +0000 Subject: [PATCH 3/3] Clarify Claude service filtering --- src/ucode/managed_wizard.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/ucode/managed_wizard.py b/src/ucode/managed_wizard.py index c10a9a0..d0826f3 100644 --- a/src/ucode/managed_wizard.py +++ b/src/ucode/managed_wizard.py @@ -262,14 +262,10 @@ def _select_provider_service(tool: str, workspace: str, token: str) -> dict | No print_note("Falling back to Databricks-hosted models.") return None - usable = [ - service - for service in services - if service_usable_for_tool(tool, service) - # Claude Max/Team/Enterprise subscription relays are not reliable enough for managed - # configurations yet. Keep them out of the External Models picker until that path is ready. - and not (tool == "claude" and service.get("relayed")) - ] + usable = [service for service in services if service_usable_for_tool(tool, service)] + if tool == "claude": + # Claude subscription relays are not reliable enough for managed configurations yet. + usable = [service for service in usable if not service.get("relayed")] if not usable: if services: # Services exist but none match this agent's dialect — say so, since "no picker appeared"