From 2db29639b81146259edfe3f4c46b2698a5cbdc66 Mon Sep 17 00:00:00 2001 From: Cosmin Maria Date: Thu, 12 Feb 2026 12:49:53 +0200 Subject: [PATCH 1/2] rename normalized clients --- .env.example | 6 ++-- packages/uipath_langchain_client/CHANGELOG.md | 9 ++++-- packages/uipath_langchain_client/README.md | 8 ++--- .../uipath_langchain_client/__version__.py | 2 +- .../clients/normalized/__init__.py | 6 ++-- .../clients/normalized/chat_models.py | 8 ++--- .../clients/normalized/embeddings.py | 2 +- .../src/uipath_langchain_client/factory.py | 8 ++--- tests/langchain/conftest.py | 22 ++++++------- tests/langchain/langchain_smoke_test.py | 32 ++++++++----------- tests/langchain/test_provider_integrations.py | 10 +++--- 11 files changed, 56 insertions(+), 57 deletions(-) diff --git a/.env.example b/.env.example index f756941..2c483e4 100644 --- a/.env.example +++ b/.env.example @@ -54,7 +54,9 @@ LLMGW_ACCESS_TOKEN="" LLMGW_CLIENT_ID="" LLMGW_CLIENT_SECRET="" -# Optional tracking and tracing +# Optional for tracking and BYOM LLMGW_SEMANTIC_USER_ID="" + LLMGW_ACTION_ID="" -LLMGW_ADDITIONAL_HEADERS="" +LLMGW_OPERATION_CODE="" +LlMGW_ADDITIONAL_HEADERS="" diff --git a/packages/uipath_langchain_client/CHANGELOG.md b/packages/uipath_langchain_client/CHANGELOG.md index b475d2d..d401df0 100644 --- a/packages/uipath_langchain_client/CHANGELOG.md +++ b/packages/uipath_langchain_client/CHANGELOG.md @@ -2,6 +2,11 @@ All notable changes to `uipath_langchain_client` will be documented in this file. +## [1.1.2] - 2026-02-12 + +### Refactor +- Rename normalized client for better comaptibility with other packages + ## [1.1.1] - 2026-02-11 ### Fixes @@ -135,7 +140,7 @@ All notable changes to `uipath_langchain_client` will be documented in this file - `UiPathChatBedrock` - AWS Bedrock models - `UiPathChatBedrockConverse` - AWS Bedrock Converse API - `UiPathAzureAIChatCompletionsModel` - Azure AI models (non-OpenAI) -- `UiPathNormalizedChatModel` - Provider-agnostic normalized API +- `UiPathChat` - Provider-agnostic normalized API ### Embeddings Classes - `UiPathOpenAIEmbeddings` - OpenAI embeddings via direct API @@ -143,7 +148,7 @@ All notable changes to `uipath_langchain_client` will be documented in this file - `UiPathGoogleGenerativeAIEmbeddings` - Google embeddings - `UiPathBedrockEmbeddings` - AWS Bedrock embeddings - `UiPathAzureAIEmbeddingsModel` - Azure AI embeddings -- `UiPathNormalizedEmbeddings` - Provider-agnostic normalized API +- `UiPathEmbeddings` - Provider-agnostic normalized API ### Features - Support for BYO (Bring Your Own) model connections diff --git a/packages/uipath_langchain_client/README.md b/packages/uipath_langchain_client/README.md index 029a9b9..4aa1b03 100644 --- a/packages/uipath_langchain_client/README.md +++ b/packages/uipath_langchain_client/README.md @@ -56,7 +56,7 @@ For more control, instantiate provider-specific classes directly: from uipath_langchain_client.openai.chat_models import UiPathAzureChatOpenAI from uipath_langchain_client.google.chat_models import UiPathChatGoogleGenerativeAI from uipath_langchain_client.anthropic.chat_models import UiPathChatAnthropic -from uipath_langchain_client.normalized.chat_models import UiPathNormalizedChatModel +from uipath_langchain_client.normalized.chat_models import UiPathChat from uipath_langchain_client.settings import get_default_client_settings settings = get_default_client_settings() @@ -75,7 +75,7 @@ claude_chat = UiPathChatAnthropic( ) # Normalized (provider-agnostic) -normalized_chat = UiPathNormalizedChatModel(model="gpt-4o-2024-11-20", settings=settings) +normalized_chat = UiPathChat(model="gpt-4o-2024-11-20", settings=settings) ``` ## Available Client Types @@ -99,8 +99,8 @@ Uses UiPath's normalized API for a consistent interface across all providers. | Class | Description | |-------|-------------| -| `UiPathNormalizedChatModel` | Provider-agnostic chat completions | -| `UiPathNormalizedEmbeddings` | Provider-agnostic embeddings | +| `UiPathChat` | Provider-agnostic chat completions | +| `UiPathEmbeddings` | Provider-agnostic embeddings | ## Features diff --git a/packages/uipath_langchain_client/src/uipath_langchain_client/__version__.py b/packages/uipath_langchain_client/src/uipath_langchain_client/__version__.py index 2a3feea..ae2af6f 100644 --- a/packages/uipath_langchain_client/src/uipath_langchain_client/__version__.py +++ b/packages/uipath_langchain_client/src/uipath_langchain_client/__version__.py @@ -1,3 +1,3 @@ __title__ = "UiPath LangChain Client" __description__ = "A Python client for interacting with UiPath's LLM services via LangChain." -__version__ = "1.1.1" +__version__ = "1.1.2" diff --git a/packages/uipath_langchain_client/src/uipath_langchain_client/clients/normalized/__init__.py b/packages/uipath_langchain_client/src/uipath_langchain_client/clients/normalized/__init__.py index 1136d42..781269b 100644 --- a/packages/uipath_langchain_client/src/uipath_langchain_client/clients/normalized/__init__.py +++ b/packages/uipath_langchain_client/src/uipath_langchain_client/clients/normalized/__init__.py @@ -1,4 +1,4 @@ -from uipath_langchain_client.clients.normalized.chat_models import UiPathNormalizedChatModel -from uipath_langchain_client.clients.normalized.embeddings import UiPathNormalizedEmbeddings +from uipath_langchain_client.clients.normalized.chat_models import UiPathChat +from uipath_langchain_client.clients.normalized.embeddings import UiPathEmbeddings -__all__ = ["UiPathNormalizedChatModel", "UiPathNormalizedEmbeddings"] +__all__ = ["UiPathChat", "UiPathEmbeddings"] diff --git a/packages/uipath_langchain_client/src/uipath_langchain_client/clients/normalized/chat_models.py b/packages/uipath_langchain_client/src/uipath_langchain_client/clients/normalized/chat_models.py index 1ad16e1..80b9fdf 100644 --- a/packages/uipath_langchain_client/src/uipath_langchain_client/clients/normalized/chat_models.py +++ b/packages/uipath_langchain_client/src/uipath_langchain_client/clients/normalized/chat_models.py @@ -12,11 +12,11 @@ - Extended thinking/reasoning parameters for supported models Example: - >>> from uipath_langchain_client.normalized.chat_models import UiPathNormalizedChatModel + >>> from uipath_langchain_client.normalized.chat_models import UiPathChat >>> from uipath_langchain_client.settings import get_default_client_settings >>> >>> settings = get_default_client_settings() - >>> chat = UiPathNormalizedChatModel( + >>> chat = UiPathChat( ... model="gpt-4o-2024-11-20", ... settings=settings, ... ) @@ -60,7 +60,7 @@ from uipath_langchain_client.settings import UiPathAPIConfig -class UiPathNormalizedChatModel(UiPathBaseLLMClient, BaseChatModel): +class UiPathChat(UiPathBaseLLMClient, BaseChatModel): """LangChain chat model using UiPath's normalized (provider-agnostic) API. This model provides a consistent interface across all LLM providers supported @@ -86,7 +86,7 @@ class UiPathNormalizedChatModel(UiPathBaseLLMClient, BaseChatModel): include_thoughts: Whether to include thinking in Gemini responses. Example: - >>> chat = UiPathNormalizedChatModel( + >>> chat = UiPathChat( ... model="gpt-4o-2024-11-20", ... settings=settings, ... temperature=0.7, diff --git a/packages/uipath_langchain_client/src/uipath_langchain_client/clients/normalized/embeddings.py b/packages/uipath_langchain_client/src/uipath_langchain_client/clients/normalized/embeddings.py index a323fe3..402c5e8 100644 --- a/packages/uipath_langchain_client/src/uipath_langchain_client/clients/normalized/embeddings.py +++ b/packages/uipath_langchain_client/src/uipath_langchain_client/clients/normalized/embeddings.py @@ -3,7 +3,7 @@ from uipath_langchain_client.settings import UiPathAPIConfig -class UiPathNormalizedEmbeddings(UiPathBaseLLMClient, Embeddings): +class UiPathEmbeddings(UiPathBaseLLMClient, Embeddings): """LangChain embeddings using the UiPath's normalized embeddings API. Provides a consistent interface for generating text embeddings across all diff --git a/packages/uipath_langchain_client/src/uipath_langchain_client/factory.py b/packages/uipath_langchain_client/src/uipath_langchain_client/factory.py index db3a2f7..a24cc37 100644 --- a/packages/uipath_langchain_client/src/uipath_langchain_client/factory.py +++ b/packages/uipath_langchain_client/src/uipath_langchain_client/factory.py @@ -96,10 +96,10 @@ def get_chat_model( if client_type == "normalized": from uipath_langchain_client.clients.normalized.chat_models import ( - UiPathNormalizedChatModel, + UiPathChat, ) - return UiPathNormalizedChatModel( + return UiPathChat( model=model_name, settings=client_settings, byo_connection_id=byo_connection_id, @@ -239,10 +239,10 @@ def get_embedding_model( if client_type == "normalized": from uipath_langchain_client.clients.normalized.embeddings import ( - UiPathNormalizedEmbeddings, + UiPathEmbeddings, ) - return UiPathNormalizedEmbeddings( + return UiPathEmbeddings( model=model_name, settings=client_settings, byo_connection_id=byo_connection_id, diff --git a/tests/langchain/conftest.py b/tests/langchain/conftest.py index 7b19b9e..da30c4c 100644 --- a/tests/langchain/conftest.py +++ b/tests/langchain/conftest.py @@ -12,7 +12,7 @@ from uipath_langchain_client.clients.bedrock.embeddings import UiPathBedrockEmbeddings from uipath_langchain_client.clients.google.chat_models import UiPathChatGoogleGenerativeAI from uipath_langchain_client.clients.google.embeddings import UiPathGoogleGenerativeAIEmbeddings -from uipath_langchain_client.clients.normalized.chat_models import UiPathNormalizedChatModel +from uipath_langchain_client.clients.normalized.chat_models import UiPathChat from uipath_langchain_client.clients.openai.chat_models import ( UiPathAzureChatOpenAI, UiPathChatOpenAI, @@ -28,7 +28,7 @@ GPT_MODELS_NON_REASONING_CONFIGS = [ {"model_class": UiPathAzureChatOpenAI}, {"model_class": UiPathAzureChatOpenAI, "model_kwargs": {"use_responses_api": True}}, - # {"model_class": UiPathNormalizedChatModel}, + # {"model_class": UiPathChat}, ] GPT_MODELS_WITH_REASONING_CONFIGS = [ @@ -43,7 +43,7 @@ "verbosity": "low", }, }, - # {"model_class": UiPathNormalizedChatModel, "model_kwargs": {"reasoning_effort": "low"}}, + # {"model_class": UiPathChat, "model_kwargs": {"reasoning_effort": "low"}}, ] GEMINI_2_5_CONFIGS = [ @@ -56,7 +56,7 @@ "model_kwargs": {"thinking_budget": 128, "include_thoughts": True}, }, # { - # "model_class": UiPathNormalizedChatModel, + # "model_class": UiPathChat, # "model_kwargs": {"thinking_budget": 128, "include_thoughts": True}, # }, ] @@ -71,7 +71,7 @@ "model_kwargs": {"thinking_level": "low", "include_thoughts": True}, }, # { - # "model_class": UiPathNormalizedChatModel, + # "model_class": UiPathChat, # "model_kwargs": {"thinking_level": "low", "include_thoughts": True}, # }, ] @@ -101,7 +101,7 @@ "thinking": {"type": "enabled", "budget_tokens": 1024}, }, }, - # {"model_class": UiPathNormalizedChatModel}, + # {"model_class": UiPathChat}, ] CLAUDE_MODELS_AWSBEDROCK_CONFIGS = [ @@ -139,7 +139,7 @@ "thinking": {"type": "enabled", "budget_tokens": 1024}, }, }, - # {"model_class": UiPathNormalizedChatModel}, + # {"model_class": UiPathChat}, ] COMPLETIONS_MODELS_WITH_CONFIGS = { @@ -164,7 +164,7 @@ COMPLETION_CLIENTS_CLASSES = [ - UiPathNormalizedChatModel, + UiPathChat, UiPathChatOpenAI, UiPathAzureChatOpenAI, # UiPathAzureAIChatCompletionsModel, @@ -175,7 +175,7 @@ # UiPathChatBedrockConverse, ] EMBEDDINGS_CLIENTS_CLASSES = [ - # UiPathNormalizedEmbeddings, + # UiPathEmbeddings, UiPathOpenAIEmbeddings, UiPathAzureOpenAIEmbeddings, # UiPathAzureAIEmbeddingsModel, @@ -214,11 +214,11 @@ def completions_config( EMBEDDINGS_MODELS_WITH_CONFIGS = { "text-embedding-3-large": [ {"model_class": UiPathAzureOpenAIEmbeddings}, - # {"model_class": UiPathNormalizedEmbeddings}, + # {"model_class": UiPathEmbeddings}, ], "gemini-embedding-001": [ {"model_class": UiPathGoogleGenerativeAIEmbeddings}, - # {"model_class": UiPathNormalizedEmbeddings}, + # {"model_class": UiPathEmbeddings}, ], } diff --git a/tests/langchain/langchain_smoke_test.py b/tests/langchain/langchain_smoke_test.py index 849fba3..88d3e49 100644 --- a/tests/langchain/langchain_smoke_test.py +++ b/tests/langchain/langchain_smoke_test.py @@ -222,16 +222,12 @@ def test_normalized_client_imports(): print("Testing Normalized client imports...") from uipath_langchain_client.clients.normalized import ( - UiPathNormalizedChatModel, - UiPathNormalizedEmbeddings, + UiPathChat, + UiPathEmbeddings, ) - assert isinstance(UiPathNormalizedChatModel, type), ( - "UiPathNormalizedChatModel should be a class" - ) - assert isinstance(UiPathNormalizedEmbeddings, type), ( - "UiPathNormalizedEmbeddings should be a class" - ) + assert isinstance(UiPathChat, type), "UiPathChat should be a class" + assert isinstance(UiPathEmbeddings, type), "UiPathEmbeddings should be a class" print(" Normalized client imports OK") @@ -411,21 +407,19 @@ def test_inheritance_normalized(): from langchain_core.language_models.chat_models import BaseChatModel from uipath_langchain_client.base_client import UiPathBaseLLMClient from uipath_langchain_client.clients.normalized import ( - UiPathNormalizedChatModel, - UiPathNormalizedEmbeddings, + UiPathChat, + UiPathEmbeddings, ) - assert issubclass(UiPathNormalizedChatModel, BaseChatModel), ( - "UiPathNormalizedChatModel should inherit from BaseChatModel" - ) - assert issubclass(UiPathNormalizedChatModel, UiPathBaseLLMClient), ( - "UiPathNormalizedChatModel should inherit from UiPathBaseLLMClient" + assert issubclass(UiPathChat, BaseChatModel), "UiPathChat should inherit from BaseChatModel" + assert issubclass(UiPathChat, UiPathBaseLLMClient), ( + "UiPathChat should inherit from UiPathBaseLLMClient" ) - assert issubclass(UiPathNormalizedEmbeddings, Embeddings), ( - "UiPathNormalizedEmbeddings should inherit from Embeddings" + assert issubclass(UiPathEmbeddings, Embeddings), ( + "UiPathEmbeddings should inherit from Embeddings" ) - assert issubclass(UiPathNormalizedEmbeddings, UiPathBaseLLMClient), ( - "UiPathNormalizedEmbeddings should inherit from UiPathBaseLLMClient" + assert issubclass(UiPathEmbeddings, UiPathBaseLLMClient), ( + "UiPathEmbeddings should inherit from UiPathBaseLLMClient" ) print(" Normalized inheritance OK") diff --git a/tests/langchain/test_provider_integrations.py b/tests/langchain/test_provider_integrations.py index 712ea0b..dcc3533 100644 --- a/tests/langchain/test_provider_integrations.py +++ b/tests/langchain/test_provider_integrations.py @@ -11,7 +11,7 @@ UiPathChatBedrockConverse, ) from uipath_langchain_client.clients.google.chat_models import UiPathChatGoogleGenerativeAI -from uipath_langchain_client.clients.normalized.chat_models import UiPathNormalizedChatModel +from uipath_langchain_client.clients.normalized.chat_models import UiPathChat from uipath_langchain_client.clients.vertexai.chat_models import UiPathChatAnthropicVertex from tests.langchain.utils import search_accommodation, search_attractions, search_flights @@ -160,7 +160,7 @@ def skip_on_specific_configs( ) if "gemini" in model_name.lower(): - if model_class == UiPathNormalizedChatModel and test_name in [ + if model_class == UiPathChat and test_name in [ "test_tool_calling", "test_tool_calling_async", "test_tool_choice", @@ -169,9 +169,7 @@ def skip_on_specific_configs( pytest.skip( f"Skipping test {test_name} because it is not supported for Gemini models on normalized" ) - if ( - "gemini-3" in model_name.lower() or model_class == UiPathNormalizedChatModel - ) and test_name in [ + if ("gemini-3" in model_name.lower() or model_class == UiPathChat) and test_name in [ "test_tool_message_error_status", "test_tool_message_histories_list_content", "test_tool_message_histories_string_content", @@ -181,7 +179,7 @@ def skip_on_specific_configs( ) if ( "gemini-3" in model_name.lower() - and model_class == UiPathNormalizedChatModel + and model_class == UiPathChat and test_name in ["test_agent_loop"] ): pytest.skip( From c93076914316fea2333e6f33ea091adc1279421c Mon Sep 17 00:00:00 2001 From: Cosmin Maria Date: Thu, 12 Feb 2026 14:09:19 +0200 Subject: [PATCH 2/2] fixes --- .../clients/anthropic/chat_models.py | 8 ++- .../clients/openai/chat_models.py | 62 +++++++++++++------ src/uipath_llm_client/httpx_client.py | 2 +- uv.lock | 48 +++++++------- 4 files changed, 72 insertions(+), 48 deletions(-) diff --git a/packages/uipath_langchain_client/src/uipath_langchain_client/clients/anthropic/chat_models.py b/packages/uipath_langchain_client/src/uipath_langchain_client/clients/anthropic/chat_models.py index cd88031..3aefcfc 100644 --- a/packages/uipath_langchain_client/src/uipath_langchain_client/clients/anthropic/chat_models.py +++ b/packages/uipath_langchain_client/src/uipath_langchain_client/clients/anthropic/chat_models.py @@ -33,10 +33,11 @@ class UiPathChatAnthropic(UiPathBaseLLMClient, ChatAnthropic): vendor_type="anthropic", freeze_base_url=True, ) - vendor_type: Literal["anthropic", "azure", "vertexai", "awsbedrock"] = "awsbedrock" + vendor_type: Literal["anthropic", "azure", "vertexai", "awsbedrock"] = "anthropic" @model_validator(mode="after") def setup_api_flavor_and_version(self) -> Self: + self.api_config.vendor_type = self.vendor_type match self.vendor_type: case "vertexai": self.api_config.api_flavor = "anthropic-claude" @@ -44,8 +45,9 @@ def setup_api_flavor_and_version(self) -> Self: case "awsbedrock": self.api_config.api_flavor = "invoke" case _: - raise ValueError("Those vendors are currently not supported") - self.api_config.vendor_type = self.vendor_type + raise ValueError( + "anthropic and azure vendors are currently not supported by UiPath" + ) return self # Override fields to avoid typing issues and fix stuff diff --git a/packages/uipath_langchain_client/src/uipath_langchain_client/clients/openai/chat_models.py b/packages/uipath_langchain_client/src/uipath_langchain_client/clients/openai/chat_models.py index 86ea0f5..0986509 100644 --- a/packages/uipath_langchain_client/src/uipath_langchain_client/clients/openai/chat_models.py +++ b/packages/uipath_langchain_client/src/uipath_langchain_client/clients/openai/chat_models.py @@ -1,6 +1,7 @@ from collections.abc import Awaitable, Callable from typing import Self +from httpx import Request from pydantic import Field, SecretStr, model_validator from uipath_langchain_client.base_client import UiPathBaseLLMClient from uipath_langchain_client.settings import UiPathAPIConfig @@ -21,7 +22,8 @@ class UiPathChatOpenAI(UiPathBaseLLMClient, ChatOpenAI): # type: ignore[overrid api_type="completions", client_type="passthrough", vendor_type="openai", - freeze_base_url=True, + api_version="2025-03-01-preview", + freeze_base_url=False, ) # Override fields to avoid errors when instantiating the class @@ -29,17 +31,27 @@ class UiPathChatOpenAI(UiPathBaseLLMClient, ChatOpenAI): # type: ignore[overrid alias="api_key", default=SecretStr("PLACEHOLDER") ) - @model_validator(mode="after") - def setup_uipath_api_flavor_and_version(self) -> Self: - self.api_config.api_version = "2025-03-01-preview" - if self._use_responses_api({}): - self.api_config.api_flavor = "responses" - else: - self.api_config.api_flavor = "chat-completions" - return self - @model_validator(mode="after") def setup_uipath_client(self) -> Self: + def fix_url_and_api_flavor_header(request: Request): + url_suffix = str(request.url).split(str(self.uipath_sync_client.base_url))[-1] + if "responses" in url_suffix: + request.headers["X-UiPath-LlmGateway-ApiFlavor"] = "responses" + else: + request.headers["X-UiPath-LlmGateway-ApiFlavor"] = "chat-completions" + request.url = self.uipath_sync_client.base_url + + async def fix_url_and_api_flavor_header_async(request: Request): + url_suffix = str(request.url).split(str(self.uipath_async_client.base_url))[-1] + if "responses" in url_suffix: + request.headers["X-UiPath-LlmGateway-ApiFlavor"] = "responses" + else: + request.headers["X-UiPath-LlmGateway-ApiFlavor"] = "chat-completions" + request.url = self.uipath_async_client.base_url + + self.uipath_sync_client.event_hooks["request"].append(fix_url_and_api_flavor_header) + self.uipath_async_client.event_hooks["request"].append(fix_url_and_api_flavor_header_async) + self.root_client = OpenAI( api_key="PLACEHOLDER", timeout=None, # handled by the UiPath client @@ -62,7 +74,8 @@ class UiPathAzureChatOpenAI(UiPathBaseLLMClient, AzureChatOpenAI): # type: igno api_type="completions", client_type="passthrough", vendor_type="openai", - freeze_base_url=True, + api_version="2025-03-01-preview", + freeze_base_url=False, ) # Override fields to avoid errors when instantiating the class @@ -70,17 +83,26 @@ class UiPathAzureChatOpenAI(UiPathBaseLLMClient, AzureChatOpenAI): # type: igno openai_api_version: str | None = Field(default="PLACEHOLDER", alias="api_version") openai_api_key: SecretStr | None = Field(default=SecretStr("PLACEHOLDER"), alias="api_key") - @model_validator(mode="after") - def setup_uipath_api_flavor_and_version(self) -> Self: - self.api_config.api_version = "2025-03-01-preview" - if self._use_responses_api({}): - self.api_config.api_flavor = "responses" - else: - self.api_config.api_flavor = "chat-completions" - return self - @model_validator(mode="after") def setup_uipath_client(self) -> Self: + def fix_url_and_api_flavor_header(request: Request): + url_suffix = str(request.url).split(str(self.uipath_sync_client.base_url))[-1] + if "responses" in url_suffix: + request.headers["X-UiPath-LlmGateway-ApiFlavor"] = "responses" + else: + request.headers["X-UiPath-LlmGateway-ApiFlavor"] = "chat-completions" + request.url = self.uipath_sync_client.base_url + + async def fix_url_and_api_flavor_header_async(request: Request): + url_suffix = str(request.url).split(str(self.uipath_async_client.base_url))[-1] + if "responses" in url_suffix: + request.headers["X-UiPath-LlmGateway-ApiFlavor"] = "responses" + else: + request.headers["X-UiPath-LlmGateway-ApiFlavor"] = "chat-completions" + request.url = self.uipath_async_client.base_url + + self.uipath_sync_client.event_hooks["request"].append(fix_url_and_api_flavor_header) + self.uipath_async_client.event_hooks["request"].append(fix_url_and_api_flavor_header_async) self.root_client = AzureOpenAI( azure_endpoint="PLACEHOLDER", api_version="PLACEHOLDER", diff --git a/src/uipath_llm_client/httpx_client.py b/src/uipath_llm_client/httpx_client.py index abd69c3..4c23b59 100644 --- a/src/uipath_llm_client/httpx_client.py +++ b/src/uipath_llm_client/httpx_client.py @@ -219,7 +219,7 @@ class UiPathHttpxAsyncClient(AsyncClient): _streaming_header: str = "X-UiPath-Streaming-Enabled" _default_headers: Mapping[str, str] = { - "X-UiPath-LLMGateway-TimeoutSeconds": "30", # server side timeout, default is 10, maximum is 300 + "X-UiPath-LLMGateway-TimeoutSeconds": "295", # server side timeout, default is 10, maximum is 300 "X-UiPath-LLMGateway-AllowFull4xxResponse": "true", # allow full 4xx responses (default is false) } diff --git a/uv.lock b/uv.lock index df5a6e4..4be1780 100644 --- a/uv.lock +++ b/uv.lock @@ -359,30 +359,30 @@ wheels = [ [[package]] name = "boto3" -version = "1.42.46" +version = "1.42.47" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "botocore" }, { name = "jmespath" }, { name = "s3transfer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d9/87/1ccd436a6815c18107aa74aa2b7b2745dc5a1db83cf58afc591df2755775/boto3-1.42.46.tar.gz", hash = "sha256:c8c82ab34dd8d2d4d93a562d0e75fca164efa644651d3ccddb0f4aa88a481b38", size = 112795, upload-time = "2026-02-10T20:38:10.784Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/fe/3363024b6dda5968401f45d8b345ed95ce4fd536d58f799988b4b28184ad/boto3-1.42.47.tar.gz", hash = "sha256:74812a2e29de7c2bd19e446d765cb887394f20f1517388484b51891a410f33b2", size = 112884, upload-time = "2026-02-11T20:49:49.196Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/41/978d749a6604bf93e05e8be56db07eb1402ffe576e1bb9b65aa391ebcb73/boto3-1.42.46-py3-none-any.whl", hash = "sha256:679cf4930e559621653bbd1439cf6e93b138cbaf46e36e5d7d95319999b7a356", size = 140606, upload-time = "2026-02-10T20:38:08.175Z" }, + { url = "https://files.pythonhosted.org/packages/47/7b/884e30adab2339ce5cce7b800f5fa619254d36e89e50a8cf39a5524edc35/boto3-1.42.47-py3-none-any.whl", hash = "sha256:ed881ed246027028af566acbb80f008aa619be4d3fdbcc4ad3c75dbe8c34bfaf", size = 140608, upload-time = "2026-02-11T20:49:47.664Z" }, ] [[package]] name = "botocore" -version = "1.42.46" +version = "1.42.47" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jmespath" }, { name = "python-dateutil" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/86/2d/6f6101f567a69c3b2ebe3f1f81bfd56eda9d5f6f466d0d919293499ab050/botocore-1.42.46.tar.gz", hash = "sha256:fc290b33aba6e271f627c4f46b8bcebfa1a94e19157d396732da417404158c01", size = 14948751, upload-time = "2026-02-10T20:37:58.663Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ed/a6/d15f5dfe990abd76dbdb2105a7697e0d948e04c41dfd97c058bc76c7cebd/botocore-1.42.47.tar.gz", hash = "sha256:c26e190c1b4d863ba7b44dc68cc574d8eb862ddae5f0fe3472801daee12a0378", size = 14952255, upload-time = "2026-02-11T20:49:40.157Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/88/5c2f4e65fe8dba7709a219b768e5ac89a112c6dde9527a5009cb82ee9124/botocore-1.42.46-py3-none-any.whl", hash = "sha256:f7459fcf586f38a3b0a242a172d3332141c770a3f5767bbb21e79d810db95d75", size = 14622519, upload-time = "2026-02-10T20:37:54.223Z" }, + { url = "https://files.pythonhosted.org/packages/54/5e/50e3a59b243894088eeb949a654fb21d9ab7d0d703034470de016828d85a/botocore-1.42.47-py3-none-any.whl", hash = "sha256:c60f5feaf189423e17755aca3f1d672b7466620dd2032440b32aaac64ae8cac8", size = 14625351, upload-time = "2026-02-11T20:49:36.143Z" }, ] [[package]] @@ -960,7 +960,7 @@ requests = [ [[package]] name = "google-cloud-aiplatform" -version = "1.136.0" +version = "1.137.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "docstring-parser" }, @@ -976,9 +976,9 @@ dependencies = [ { name = "pydantic" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7f/9c/38ce04e3ef89034c736320a27b4a6e3171ca2f3fb56d38f76a310c745d14/google_cloud_aiplatform-1.136.0.tar.gz", hash = "sha256:01e64a0d0861486e842bf7e904077c847bcc1b654a29883509d57476de915b7d", size = 9946722, upload-time = "2026-02-04T16:28:12.903Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/76/0da98f663f5c58239900fa8f99488d01439b1ca7846c9667217a3aee20b1/google_cloud_aiplatform-1.137.0.tar.gz", hash = "sha256:76e66e2c3879936e51039d8bbd82581451510b4c7a840a588daaecee893d7d1e", size = 9947045, upload-time = "2026-02-11T16:23:18.435Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/55/e8/f317dc96c9c73846dd3e4d16691cc5f248801f46354d9d57f2c67fd67413/google_cloud_aiplatform-1.136.0-py2.py3-none-any.whl", hash = "sha256:5c829f002b7b673dcd0e718f55cc0557b571bd10eb5cdb7882d72916cfbf8c0e", size = 8203924, upload-time = "2026-02-04T16:28:10.343Z" }, + { url = "https://files.pythonhosted.org/packages/72/b5/795c410120cb350058b9328f051b57a49a897514ba1bc65677ade0f6c1be/google_cloud_aiplatform-1.137.0-py2.py3-none-any.whl", hash = "sha256:e99dd235c237cbbeb0e73b0fc4b1ca9588b4144ac243a6242b2005b339b40ce8", size = 8204286, upload-time = "2026-02-11T16:23:15.462Z" }, ] [[package]] @@ -1094,7 +1094,7 @@ wheels = [ [[package]] name = "google-genai" -version = "1.62.0" +version = "1.63.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -1108,9 +1108,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "websockets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/94/4c/71b32b5c8db420cf2fd0d5ef8a672adbde97d85e5d44a0b4fca712264ef1/google_genai-1.62.0.tar.gz", hash = "sha256:709468a14c739a080bc240a4f3191df597bf64485b1ca3728e0fb67517774c18", size = 490888, upload-time = "2026-02-04T22:48:41.989Z" } +sdist = { url = "https://files.pythonhosted.org/packages/46/d7/07ec5dadd0741f09e89f3ff5f0ce051ce2aa3a76797699d661dc88def077/google_genai-1.63.0.tar.gz", hash = "sha256:dc76cab810932df33cbec6c7ef3ce1538db5bef27aaf78df62ac38666c476294", size = 491970, upload-time = "2026-02-11T23:46:28.472Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/09/5f/4645d8a28c6e431d0dd6011003a852563f3da7037d36af53154925b099fd/google_genai-1.62.0-py3-none-any.whl", hash = "sha256:4c3daeff3d05fafee4b9a1a31f9c07f01bc22051081aa58b4d61f58d16d1bcc0", size = 724166, upload-time = "2026-02-04T22:48:39.956Z" }, + { url = "https://files.pythonhosted.org/packages/82/c8/ba32159e553fab787708c612cf0c3a899dafe7aca81115d841766e3bfe69/google_genai-1.63.0-py3-none-any.whl", hash = "sha256:6206c13fc20f332703ca7375bea7c191c82f95d6781c29936c6982d86599b359", size = 724747, upload-time = "2026-02-11T23:46:26.697Z" }, ] [[package]] @@ -1475,7 +1475,7 @@ wheels = [ [[package]] name = "langchain-aws" -version = "1.2.4" +version = "1.2.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "boto3" }, @@ -1483,9 +1483,9 @@ dependencies = [ { name = "numpy" }, { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bd/ff/bcb2df2c3646178892eea5c1bdebb505648e4cd0c4e81b473945e6b74ad5/langchain_aws-1.2.4.tar.gz", hash = "sha256:82214150ef251eec21e627c46febed38c16c8e866044a21b7ed9b815a84ca1c9", size = 402314, upload-time = "2026-02-10T21:59:25.761Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ed/65/a7bcaf190508c995af85d060660125dabfe82447e0421fe6cc7d2a20773a/langchain_aws-1.2.5.tar.gz", hash = "sha256:1966635a8fb19bbd806bce8c7c9adf818748855702a328fa444585a4b0902690", size = 403375, upload-time = "2026-02-11T18:33:12.445Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/53/d4e3c37050518ecee2004f35f737d10978338300147a4c8a3d21f792560a/langchain_aws-1.2.4-py3-none-any.whl", hash = "sha256:13052f5a36cf687613817e56de0d3602d2823229fb090387be09f6794402614e", size = 165457, upload-time = "2026-02-10T21:59:24.183Z" }, + { url = "https://files.pythonhosted.org/packages/f0/33/059753e0265a868de5aec9280e8025753c98191d2d140e55e01fbe75fc0a/langchain_aws-1.2.5-py3-none-any.whl", hash = "sha256:2c04a43d609046f8fb31ab44347a333a9f8b1a73bbcad383db99219a365ca287", size = 165761, upload-time = "2026-02-11T18:33:11.271Z" }, ] [[package]] @@ -3319,7 +3319,7 @@ wheels = [ [[package]] name = "uipath" -version = "2.8.12" +version = "2.8.18" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "applicationinsights" }, @@ -3341,23 +3341,23 @@ dependencies = [ { name = "uipath-core" }, { name = "uipath-runtime" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/14/e4/0fde255c819549827a631771e58d88e24c08f7c30dda735e377542e5e81c/uipath-2.8.12.tar.gz", hash = "sha256:6ebb39f68674984cb4821d245c62ad64770c9819128ea27d646024a95064729c", size = 3947513, upload-time = "2026-02-11T08:48:19.627Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/55/18a27cbe7a98dd788e21383c20642afc9df78b41a4f54fd54621ac896e9b/uipath-2.8.18.tar.gz", hash = "sha256:f18a4b23f3a99a14a17ef3abccd4e1336e9b9c18e096610c799ac19dc88b1f9a", size = 3954337, upload-time = "2026-02-12T11:23:00.243Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/c4/7cb857e1f1b7075766266ee344fb2e4019d48825c972a7a075f09001eb6d/uipath-2.8.12-py3-none-any.whl", hash = "sha256:534781ffdc304e20f95dbb61f83d6e41bf50a014ee8160dbd25f8ce0a86bc827", size = 473043, upload-time = "2026-02-11T08:48:17.786Z" }, + { url = "https://files.pythonhosted.org/packages/88/84/d445e74c861b303097ae01e4b9a0b1be5d04ac4a33e5fa4370a55029fe17/uipath-2.8.18-py3-none-any.whl", hash = "sha256:34a62469905ef63b8177e77235822ebcda1a5c91599c2dad7a5ec492114f1edf", size = 474984, upload-time = "2026-02-12T11:22:58.77Z" }, ] [[package]] name = "uipath-core" -version = "0.3.2" +version = "0.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "opentelemetry-instrumentation" }, { name = "opentelemetry-sdk" }, { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/af/99/f1562dd5955a7f52c70490ce4aa7f34fa2a22e149704b8ff898202d612b4/uipath_core-0.3.2.tar.gz", hash = "sha256:8c0e5ed9a68522fd1a5c07fb6b1c324424f2243ab55c001914047c226eb61255", size = 110586, upload-time = "2026-02-11T09:17:42.671Z" } +sdist = { url = "https://files.pythonhosted.org/packages/75/bc/c75fcd9830cbd02391807b3e9e5bace0aecfad6a0402bb7cf915d7d3a40e/uipath_core-0.4.0.tar.gz", hash = "sha256:930876cb8dd3f79457201e1a0e210f799ec2c940ef178bc0cd00a4680538a8d4", size = 110697, upload-time = "2026-02-12T06:15:18.545Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/78/7d61048d08b4ad5f7a35bb411985f207da24fe5d45d968f24cf3b037977d/uipath_core-0.3.2-py3-none-any.whl", hash = "sha256:8f0c8e2d4060b25b8eed529d9f3bc26a2240b95aab11ac13fff34ee3b892be2f", size = 35042, upload-time = "2026-02-11T09:17:40.645Z" }, + { url = "https://files.pythonhosted.org/packages/d3/88/182e695bfe0d06392480cbb3e772f3099061bd3b8028cacef285172dd41f/uipath_core-0.4.0-py3-none-any.whl", hash = "sha256:c89d22e78e25ccc2eae8dd85f68f47a048deb195807af6f956cae4bad08e9bc6", size = 35362, upload-time = "2026-02-12T06:15:17.245Z" }, ] [[package]] @@ -3494,14 +3494,14 @@ dev = [ [[package]] name = "uipath-runtime" -version = "0.7.1" +version = "0.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "uipath-core" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d6/16/f78ab5730478f7a3bf0fd62bb24de726052f15a41bb1300fee9493452aa0/uipath_runtime-0.7.1.tar.gz", hash = "sha256:0e3bbc35c98d3aab3abfc3b25d41f42a6fca82d898839ed7d5b7fecf2e94f735", size = 104969, upload-time = "2026-02-11T06:34:13.007Z" } +sdist = { url = "https://files.pythonhosted.org/packages/65/27/8898ff97b21d778ae37e5b583d57e79d81283e22febf77f036f57850c234/uipath_runtime-0.8.0.tar.gz", hash = "sha256:666976678ddef6b3e54806aaa9fd05ec89dbf15188b791a554b0cd50d8a8b471", size = 104977, upload-time = "2026-02-12T07:04:28.151Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/65/810e49fb3d4afb8e6878fa30eab4716595bbb372203f8b355d2ee485bfc1/uipath_runtime-0.7.1-py3-none-any.whl", hash = "sha256:d99cf3a27c0d638194058833a9f68bc947ce51505c32cedd694d77419b1bfab5", size = 40912, upload-time = "2026-02-11T06:34:11.718Z" }, + { url = "https://files.pythonhosted.org/packages/b1/81/553419d13796b4329dfb4c531b0ca2bf184ee313d2b6437d7f3b96cdd26d/uipath_runtime-0.8.0-py3-none-any.whl", hash = "sha256:09b4f3d8af78b4c5c619520a76e3175bac52aa1bd969798e948ae085ca2a1082", size = 40910, upload-time = "2026-02-12T07:04:26.925Z" }, ] [[package]]