feat(ovalix): call tracker /beta endpoints for discovery + file scanning, send x-api-key

This commit is contained in:
Shalom Jamil 2026-08-03 16:03:24 +03:00
parent 51855a20f5
commit eea475a65e
2 changed files with 7 additions and 6 deletions

View file

@ -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}

View file

@ -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