diff --git a/litellm/proxy/auth/auth_utils.py b/litellm/proxy/auth/auth_utils.py index 161ff2fdfcd..c3e5a7e07fc 100644 --- a/litellm/proxy/auth/auth_utils.py +++ b/litellm/proxy/auth/auth_utils.py @@ -2346,6 +2346,16 @@ def get_model_from_request( if vertex_match: model = vertex_match.group(1) + # Watsonx routes carry the deployment name under "model_id" (the native + # Watsonx ML API shape). The generic "model" body key can also be set by + # the caller, but Watsonx executes model_id; both must be authorized, + # so model_id is checked whenever present on a /watsonx route, + # regardless of whether "model" already resolved. + if route.lower().startswith("/watsonx"): + watsonx_model: Final = request_data.get("model_id") + if isinstance(watsonx_model, str) and watsonx_model: + return watsonx_model + if route.lower().startswith("/bedrock"): bedrock_model: Final = _model_from_bedrock_route(route) return model if bedrock_model is None else bedrock_model