diff --git a/litellm/proxy/guardrails/guardrail_hooks/ovalix/ovalix.py b/litellm/proxy/guardrails/guardrail_hooks/ovalix/ovalix.py index b22b8a41dae..7284e126d10 100644 --- a/litellm/proxy/guardrails/guardrail_hooks/ovalix/ovalix.py +++ b/litellm/proxy/guardrails/guardrail_hooks/ovalix/ovalix.py @@ -168,6 +168,7 @@ class OvalixGuardrail(CustomGuardrail): MappingProxyType( { "Authorization": f"Bearer {self._tracker_api_key}", + "x-api-key": self._tracker_api_key or "", "Content-Type": "application/json", } ), @@ -248,7 +249,7 @@ class OvalixGuardrail(CustomGuardrail): raise ValueError("Ovalix: application_id or checkpoint_id not resolved") url = ( - f"{self._tracker_api_base}/tracking/litellm/file_checkpoint" + f"{self._tracker_api_base}/tracking/beta/file_checkpoint" if data_type == "FILE" else f"{self._tracker_api_base}/tracking/custom_application/checkpoint" ) @@ -494,7 +495,7 @@ class OvalixGuardrail(CustomGuardrail): async def _get_app_name_regex(self) -> re.Pattern[str]: if self._app_name_regex is not None: return self._app_name_regex - url = f"{self._tracker_api_base}/tracking/litellm/app_name_regex" + url = f"{self._tracker_api_base}/tracking/beta/app_name_regex" try: response = await self._async_handler.get(url, headers=self._tracker_headers) response.raise_for_status() @@ -581,7 +582,7 @@ class OvalixGuardrail(CustomGuardrail): return routing async def _resolve_via_tracker(self, application_name: str) -> ResolvedRouting | None: - url = f"{self._tracker_api_base}/tracking/litellm/resolve_application" + url = f"{self._tracker_api_base}/tracking/beta/resolve_application" try: response = await self._async_handler.post( url, headers=self._tracker_headers, json={"application_name": application_name} diff --git a/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_ovalix.py b/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_ovalix.py index 83f01091038..8f47097e17b 100644 --- a/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_ovalix.py +++ b/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_ovalix.py @@ -771,9 +771,9 @@ async def test_discovery_extracts_name_and_resolves(): mock_get, mock_post = _mock_handler(g) routing = await g._resolve_routing(_alias_request_data("[Weather App] prod")) assert routing.application_id == "app-9" - assert mock_post.call_args.args[0].endswith("/tracking/litellm/resolve_application") + assert mock_post.call_args.args[0].endswith("/tracking/beta/resolve_application") assert mock_post.call_args.kwargs["json"] == {"application_name": "Weather App"} - assert mock_get.call_args.args[0].endswith("/tracking/litellm/app_name_regex") + assert mock_get.call_args.args[0].endswith("/tracking/beta/app_name_regex") @pytest.mark.asyncio @@ -961,7 +961,7 @@ async def test_file_checkpoint_call_routes_to_litellm_file_endpoint(): with patch.object(g._async_handler, "post", new=_post): await g._call_checkpoint("FILE", {"name": "f.txt", "content": "x"}, "file-1", "a", "s", "app-1") - assert seen["url"] == "https://t/tracking/litellm/file_checkpoint" + assert seen["url"] == "https://t/tracking/beta/file_checkpoint" @pytest.mark.asyncio