From e18d766f53c7d4e5a808f2056fdca6da96f5d75a Mon Sep 17 00:00:00 2001 From: Hayden Moulds Date: Thu, 10 Sep 2026 17:37:32 +1000 Subject: [PATCH] test(proxy): consolidate team alias metadata coverage --- .../test_team_alias_listing_metadata.py | 94 ------------------- .../test_team_model_name_translation.py | 87 +++++++++++++++++ 2 files changed, 87 insertions(+), 94 deletions(-) delete mode 100644 tests/test_litellm/proxy/proxy_server/test_team_alias_listing_metadata.py diff --git a/tests/test_litellm/proxy/proxy_server/test_team_alias_listing_metadata.py b/tests/test_litellm/proxy/proxy_server/test_team_alias_listing_metadata.py deleted file mode 100644 index ce637d2e19f..00000000000 --- a/tests/test_litellm/proxy/proxy_server/test_team_alias_listing_metadata.py +++ /dev/null @@ -1,94 +0,0 @@ -"""Regression coverage for metadata on public team model aliases.""" - -from unittest.mock import MagicMock - -import pytest - -import litellm.proxy.proxy_server as ps -from litellm.proxy._types import UserAPIKeyAuth -from litellm.types.router import DeploymentModelListingInfo - - -def _team_router(*, public_name: str, internal_name: str, underlying_model: str, listing_info): - deployment = { - "model_name": internal_name, - "litellm_params": {"model": underlying_model}, - "model_info": { - "id": "deployment-id", - "team_id": "teamx", - "team_public_model_name": public_name, - "access_groups": ["team-access"], - }, - } - router = MagicMock() - router.get_model_names.return_value = [internal_name] - router.get_model_access_groups.return_value = {"team-access": [internal_name]} - router.get_fully_blocked_model_names.return_value = set() - router.get_model_listing_info.return_value = listing_info - router.get_model_group_info.return_value = None - router.model_list = [deployment] - router.get_model_list.return_value = [deployment] - return router - - -@pytest.mark.asyncio -async def test_team_alias_inherits_deployment_token_limits_and_chat_mode(monkeypatch): - router = _team_router( - public_name="GPT Terra", - internal_name="model_name_teamx_terra_uuid", - underlying_model="azure/gpt-4.1", - listing_info=DeploymentModelListingInfo( - cost_map_keys=("azure/gpt-4.1",), - max_input_tokens=876000, - max_output_tokens=128000, - ), - ) - monkeypatch.setattr(ps, "llm_router", router) - monkeypatch.setattr(ps, "user_model", None) - monkeypatch.setattr(ps, "general_settings", {"use_team_public_model_name": True}) - - key = UserAPIKeyAuth(user_id="user", api_key="***", models=["team-access"], team_models=[]) - response = await ps.model_list(user_api_key_dict=key, include_metadata=True) - - assert response["data"] == [ - { - "id": "GPT Terra", - "object": "model", - "created": 1677610602, - "owned_by": "openai", - "mode": "chat", - "max_input_tokens": 876000, - "max_output_tokens": 128000, - "metadata": {"fallbacks": []}, - } - ] - - -@pytest.mark.asyncio -async def test_team_image_alias_inherits_image_generation_mode(monkeypatch): - router = _team_router( - public_name="image", - internal_name="model_name_teamx_image_uuid", - underlying_model="openai/gpt-image-1", - listing_info=DeploymentModelListingInfo( - cost_map_keys=("openai/gpt-image-1",), - max_input_tokens=None, - max_output_tokens=None, - ), - ) - monkeypatch.setattr(ps, "llm_router", router) - monkeypatch.setattr(ps, "user_model", None) - monkeypatch.setattr(ps, "general_settings", {"use_team_public_model_name": True}) - - key = UserAPIKeyAuth(user_id="user", api_key="***", models=["team-access"], team_models=[]) - response = await ps.model_list(user_api_key_dict=key) - - assert response["data"] == [ - { - "id": "image", - "object": "model", - "created": 1677610602, - "owned_by": "openai", - "mode": "image_generation", - } - ] diff --git a/tests/test_litellm/proxy/proxy_server/test_team_model_name_translation.py b/tests/test_litellm/proxy/proxy_server/test_team_model_name_translation.py index acb352bcc8c..e9c2ff492a0 100644 --- a/tests/test_litellm/proxy/proxy_server/test_team_model_name_translation.py +++ b/tests/test_litellm/proxy/proxy_server/test_team_model_name_translation.py @@ -1090,6 +1090,93 @@ async def test_v1_models_metadata_does_not_leak_other_team_fallbacks(monkeypatch ] +@pytest.mark.asyncio +async def test_v1_models_team_alias_inherits_token_limits_and_chat_mode(monkeypatch): + team_dep = { + "model_name": "model_name_teamX_terra_uuid", + "litellm_params": {"model": "azure/gpt-4.1"}, + "model_info": { + "id": "id-terra", + "team_id": "teamX", + "team_public_model_name": "GPT Terra", + "access_groups": ["grp-a"], + "mode": "chat", + "max_input_tokens": 876000, + "max_output_tokens": 128000, + }, + } + router = MagicMock() + router.get_model_names.return_value = ["model_name_teamX_terra_uuid"] + router.get_model_access_groups.return_value = {"grp-a": ["model_name_teamX_terra_uuid"]} + router.get_fully_blocked_model_names.return_value = set() + router.get_configured_token_limits.return_value = (876000, 128000) + router.get_configured_mode.return_value = "chat" + router.model_list = [team_dep] + router.get_model_list.return_value = [team_dep] + router.get_model_group_info.return_value = None + + monkeypatch.setattr(ps, "llm_router", router) + monkeypatch.setattr(ps, "user_model", None) + monkeypatch.setattr(ps, "general_settings", {"use_team_public_model_name": True}) + + key = UserAPIKeyAuth(user_id="user", api_key="***", models=["grp-a"], team_models=[]) + response = await ps.model_list(user_api_key_dict=key, include_metadata=True) + + assert response["data"] == [ + { + "id": "GPT Terra", + "object": "model", + "created": 1677610602, + "owned_by": "openai", + "mode": "chat", + "max_input_tokens": 876000, + "max_output_tokens": 128000, + "metadata": {"fallbacks": []}, + } + ] + + +@pytest.mark.asyncio +async def test_v1_models_team_image_alias_inherits_image_generation_mode(monkeypatch): + team_dep = { + "model_name": "model_name_teamX_image_uuid", + "litellm_params": {"model": "openai/gpt-image-1"}, + "model_info": { + "id": "id-image", + "team_id": "teamX", + "team_public_model_name": "image", + "access_groups": ["grp-a"], + "mode": "image_generation", + }, + } + router = MagicMock() + router.get_model_names.return_value = ["model_name_teamX_image_uuid"] + router.get_model_access_groups.return_value = {"grp-a": ["model_name_teamX_image_uuid"]} + router.get_fully_blocked_model_names.return_value = set() + router.get_configured_token_limits.return_value = (None, None) + router.get_configured_mode.return_value = "image_generation" + router.model_list = [team_dep] + router.get_model_list.return_value = [team_dep] + router.get_model_group_info.return_value = None + + monkeypatch.setattr(ps, "llm_router", router) + monkeypatch.setattr(ps, "user_model", None) + monkeypatch.setattr(ps, "general_settings", {"use_team_public_model_name": True}) + + key = UserAPIKeyAuth(user_id="user", api_key="***", models=["grp-a"], team_models=[]) + response = await ps.model_list(user_api_key_dict=key) + + assert response["data"] == [ + { + "id": "image", + "object": "model", + "created": 1677610602, + "owned_by": "openai", + "mode": "image_generation", + } + ] + + def test_translate_team_model_names_for_listing_swaps_and_dedupes(): """Internal team routing keys -> public name; sibling deployments sharing a public name collapse to one entry (order preserved); globals untouched."""