11import os
22from typing import Any
33
4+ import httpx
45from llama_index .llms .azure_openai import AzureOpenAI # type: ignore
6+ from uipath ._utils ._ssl_context import get_httpx_client_kwargs
57from uipath .utils import EndpointManager
68
79from .supported_models import OpenAIModel
810
911
12+ class _UiPathSyncURLRewriteTransport (httpx .HTTPTransport ):
13+ def handle_request (self , request : httpx .Request ) -> httpx .Response :
14+ original_url = str (request .url )
15+
16+ if "/openai/deployments/" in original_url :
17+ base_url = original_url .split ("/openai/deployments/" )[0 ]
18+ query_string = request .url .params
19+ new_url_str = f"{ base_url } /completions"
20+ if query_string :
21+ request .url = httpx .URL (new_url_str , params = query_string )
22+ else :
23+ request .url = httpx .URL (new_url_str )
24+
25+ return super ().handle_request (request )
26+
27+
28+ class _UiPathAsyncURLRewriteTransport (httpx .AsyncHTTPTransport ):
29+ async def handle_async_request (self , request : httpx .Request ) -> httpx .Response :
30+ original_url = str (request .url )
31+
32+ if "/openai/deployments/" in original_url :
33+ base_url = original_url .split ("/openai/deployments/" )[0 ]
34+ query_string = request .url .params
35+ new_url_str = f"{ base_url } /completions"
36+ if query_string :
37+ request .url = httpx .URL (new_url_str , params = query_string )
38+ else :
39+ request .url = httpx .URL (new_url_str )
40+
41+ return await super ().handle_async_request (request )
42+
43+
1044class UiPathOpenAI (AzureOpenAI ):
1145 def __init__ (
1246 self ,
@@ -28,14 +62,28 @@ def __init__(
2862 "UIPATH_URL environment variable is not set. Please run uipath auth."
2963 )
3064
65+ vendor_endpoint = (
66+ EndpointManager .get_vendor_endpoint ()
67+ .format (vendor = "openai" , model = model_value )
68+ .replace ("/completions" , "" )
69+ )
70+
3171 defaults = {
3272 "model" : model_value ,
3373 "deployment_name" : model_value ,
34- "azure_endpoint" : f"{ base_url } /{ EndpointManager . get_passthrough_endpoint (). format ( model = model_value , api_version = api_version ) } " ,
74+ "azure_endpoint" : f"{ base_url } /{ vendor_endpoint } " ,
3575 "api_key" : os .environ .get ("UIPATH_ACCESS_TOKEN" ),
3676 "api_version" : api_version ,
3777 "is_chat_model" : True ,
3878 "default_headers" : default_headers_dict ,
79+ "http_client" : httpx .Client (
80+ transport = _UiPathSyncURLRewriteTransport (),
81+ ** get_httpx_client_kwargs (),
82+ ),
83+ "async_http_client" : httpx .AsyncClient (
84+ transport = _UiPathAsyncURLRewriteTransport (),
85+ ** get_httpx_client_kwargs (),
86+ ),
3987 }
4088 final_kwargs = {** defaults , ** kwargs }
4189 super ().__init__ (** final_kwargs )
0 commit comments