Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
418 changes: 418 additions & 0 deletions packages/gen/gen_ai_hub/document_grounding_generation/__init__.py

Large diffs are not rendered by default.

63 changes: 63 additions & 0 deletions packages/gen/gen_ai_hub/document_grounding_generation/client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
"""SAP AI Core authentication wiring for the generated document grounding client.

Subclasses the generated RESTClientObject and ApiClient to inject auth headers
from an AiCoreV2Client or GenAIHubProxyClient via httpx event hooks — the same
pattern used in packages/gen (PR #44 utils.py).

Usage:
from ai_core_sdk.ai_core_v2_client import AICoreV2Client
from gen_ai_hub.document_grounding_generation import GroundingApiClient, VectorApi

client = GroundingApiClient(AICoreV2Client.from_env())
collections = await VectorApi(client).get_all_collections(
header_parameters={"AI-Resource-Group": "default"}
)
"""

from __future__ import annotations

from typing import Any

import httpx

from gen_ai_hub.document_grounding_generation.generated.api_client import ApiClient
from gen_ai_hub.document_grounding_generation.generated.configuration import Configuration
from gen_ai_hub.document_grounding_generation.generated.rest import RESTClientObject


def _make_auth_hook(proxy_client: Any):
"""Return an httpx request event hook that injects SAP AI Core auth headers."""

async def inject_auth(request: httpx.Request) -> None:
for key, value in proxy_client.request_header.items():
request.headers[key] = value

return inject_auth


class _SapRESTClientObject(RESTClientObject):
def __init__(self, configuration: Configuration, proxy_client: Any) -> None:
super().__init__(configuration)
self._proxy_client = proxy_client

def _create_pool_manager(self) -> httpx.AsyncClient:
return httpx.AsyncClient(
event_hooks={"request": [_make_auth_hook(self._proxy_client)]}
)


class GroundingApiClient(ApiClient):
"""ApiClient pre-wired with SAP AI Core authentication.

Args:
proxy_client: An AICoreV2Client or GenAIHubProxyClient instance.
Its request_header property is called per-request to inject
Authorization and AI-* headers.
base_url: Optional override for the service base URL. Defaults to the
basePath baked into Configuration (/lm/document-grounding).
"""

def __init__(self, proxy_client: Any, base_url: str | None = None) -> None:
config = Configuration(host=base_url) if base_url else Configuration()
super().__init__(configuration=config)
self.rest_client = _SapRESTClientObject(config, proxy_client)

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# flake8: noqa

# import apis into api package
from gen_ai_hub.document_grounding_generation.generated.api.metadata_configurations_api import MetadataConfigurationsApi
from gen_ai_hub.document_grounding_generation.generated.api.pipelines_api import PipelinesApi
from gen_ai_hub.document_grounding_generation.generated.api.retrieval_api import RetrievalApi
from gen_ai_hub.document_grounding_generation.generated.api.vector_api import VectorApi

Loading
Loading