Skip to content

Commit 023b0b6

Browse files
committed
normalized client base client
1 parent 297e4ae commit 023b0b6

14 files changed

Lines changed: 778 additions & 62 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
All notable changes to `uipath_llm_client` (core package) will be documented in this file.
44

5+
## [1.6.0] - 2026-03-31
6+
7+
### Added
8+
- `UiPathNormalizedClient`: a provider-agnostic HTTP client that speaks directly to UiPath's normalized API endpoint without requiring any vendor SDK. Supports sync/async chat completions, streaming, structured output (JSON schema), and tool calling across all supported providers (OpenAI, Google Gemini, Anthropic on Bedrock/Vertex, etc.).
9+
510
## [1.5.10] - 2026-03-26
611

712
### Changed

packages/uipath_langchain_client/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
All notable changes to `uipath_langchain_client` will be documented in this file.
44

5+
## [1.6.0] - 2026-03-31
6+
7+
### Changed
8+
- Bumped `uipath-llm-client` dependency to `>=1.6.0` to pick up `UiPathNormalizedClient`
9+
510
## [1.5.10] - 2026-03-26
611

712
### Changed

packages/uipath_langchain_client/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ readme = "README.md"
66
requires-python = ">=3.11"
77
dependencies = [
88
"langchain>=1.2.13",
9-
"uipath-llm-client>=1.5.10",
9+
"uipath-llm-client>=1.6.0",
1010
]
1111

1212
[project.optional-dependencies]
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
__title__ = "UiPath LangChain Client"
22
__description__ = "A Python client for interacting with UiPath's LLM services via LangChain."
3-
__version__ = "1.5.10"
3+
__version__ = "1.6.0"

src/uipath/llm_client/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"""
2727

2828
from uipath.llm_client.__version__ import __version__
29+
from uipath.llm_client.clients.normalized import UiPathNormalizedClient
2930
from uipath.llm_client.httpx_client import (
3031
UiPathHttpxAsyncClient,
3132
UiPathHttpxClient,
@@ -54,6 +55,8 @@
5455

5556
__all__ = [
5657
"__version__",
58+
# Normalized client
59+
"UiPathNormalizedClient",
5760
# Settings
5861
"get_default_client_settings",
5962
"PlatformSettings",
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
__title__ = "UiPath LLM Client"
22
__description__ = "A Python client for interacting with UiPath's LLM services."
3-
__version__ = "1.5.10"
3+
__version__ = "1.6.0"

src/uipath/llm_client/clients/anthropic/client.py

Lines changed: 97 additions & 24 deletions
Large diffs are not rendered by default.

src/uipath/llm_client/clients/google/client.py

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import logging
2-
from typing import Any
2+
from collections.abc import Mapping, Sequence
33

44
from uipath.llm_client.httpx_client import UiPathHttpxAsyncClient, UiPathHttpxClient
55
from uipath.llm_client.settings import (
@@ -27,9 +27,12 @@ def __init__(
2727
model_name: str,
2828
byo_connection_id: str | None = None,
2929
client_settings: UiPathBaseSettings | None = None,
30+
default_headers: Mapping[str, str] | None = None,
31+
captured_headers: Sequence[str] = ("x-uipath-",),
32+
timeout: float | None = None,
33+
max_retries: int = 0,
3034
retry_config: RetryConfig | None = None,
3135
logger: logging.Logger | None = None,
32-
**kwargs: Any,
3336
):
3437
client_settings = client_settings or get_default_client_settings()
3538
api_config = UiPathAPIConfig(
@@ -40,35 +43,38 @@ def __init__(
4043
api_version="v1beta1",
4144
freeze_base_url=True,
4245
)
46+
merged_headers = {
47+
**(default_headers or {}),
48+
**client_settings.build_auth_headers(model_name=model_name, api_config=api_config),
49+
}
50+
base_url = client_settings.build_base_url(model_name=model_name, api_config=api_config)
51+
auth = client_settings.build_auth_pipeline()
52+
4353
httpx_client = UiPathHttpxClient(
4454
model_name=model_name,
4555
byo_connection_id=byo_connection_id,
4656
api_config=api_config,
47-
timeout=kwargs.pop("timeout", None),
48-
max_retries=kwargs.pop("max_retries", None),
57+
timeout=timeout,
58+
max_retries=max_retries,
59+
captured_headers=captured_headers,
4960
retry_config=retry_config,
50-
base_url=client_settings.build_base_url(model_name=model_name, api_config=api_config),
51-
headers={
52-
**kwargs.pop("default_headers", {}),
53-
**client_settings.build_auth_headers(model_name=model_name, api_config=api_config),
54-
},
61+
base_url=base_url,
62+
headers=merged_headers,
5563
logger=logger,
56-
auth=client_settings.build_auth_pipeline(),
64+
auth=auth,
5765
)
5866
httpx_async_client = UiPathHttpxAsyncClient(
5967
model_name=model_name,
6068
byo_connection_id=byo_connection_id,
6169
api_config=api_config,
62-
timeout=kwargs.pop("timeout", None),
63-
max_retries=kwargs.pop("max_retries", None),
70+
timeout=timeout,
71+
max_retries=max_retries,
72+
captured_headers=captured_headers,
6473
retry_config=retry_config,
65-
base_url=client_settings.build_base_url(model_name=model_name, api_config=api_config),
66-
headers={
67-
**kwargs.pop("default_headers", {}),
68-
**client_settings.build_auth_headers(model_name=model_name, api_config=api_config),
69-
},
74+
base_url=base_url,
75+
headers=merged_headers,
7076
logger=logger,
71-
auth=client_settings.build_auth_pipeline(),
77+
auth=auth,
7278
)
7379
super().__init__(
7480
api_key="PLACEHOLDER",
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from uipath.llm_client.clients.normalized.client import UiPathNormalizedClient
2+
3+
__all__ = ["UiPathNormalizedClient"]

0 commit comments

Comments
 (0)