From 0903f1d3e01a13ee00b416f9be0a43a4e615ebfc Mon Sep 17 00:00:00 2001 From: Erick Friis Date: Sun, 4 Feb 2024 17:29:18 -0800 Subject: [PATCH] openai Completion proxy api_base --- .../chat_models/anyscale.py | 8 +- .../chat_models/azure_openai.py | 40 ++++----- .../chat_models/everlyai.py | 2 +- .../langchain_community/chat_models/openai.py | 24 +++--- .../embeddings/azure_openai.py | 36 ++++---- .../langchain_community/embeddings/localai.py | 28 +++--- .../langchain_community/embeddings/openai.py | 24 +++--- .../langchain_community/llms/gooseai.py | 4 +- .../langchain_community/llms/openai.py | 86 +++++++++---------- .../langchain_community/llms/vllm.py | 2 +- .../utilities/dalle_image_generator.py | 12 +-- .../chat_models/test_openai.py | 2 +- .../embeddings/test_azure_openai.py | 8 +- .../llms/test_azure_openai.py | 2 +- .../langchain_openai/chat_models/azure.py | 22 ++--- .../langchain_openai/chat_models/base.py | 20 ++--- .../langchain_openai/embeddings/azure.py | 22 ++--- .../langchain_openai/embeddings/base.py | 12 +-- .../openai/langchain_openai/llms/azure.py | 26 +++--- .../openai/langchain_openai/llms/base.py | 20 ++--- .../chat_models/test_base.py | 2 +- 21 files changed, 204 insertions(+), 198 deletions(-) diff --git a/libs/community/langchain_community/chat_models/anyscale.py b/libs/community/langchain_community/chat_models/anyscale.py index 850b0ee6cbc..0a51e223e0a 100644 --- a/libs/community/langchain_community/chat_models/anyscale.py +++ b/libs/community/langchain_community/chat_models/anyscale.py @@ -117,13 +117,13 @@ class ChatAnyscale(ChatOpenAI): "ANYSCALE_API_KEY", ) ) - values["openai_api_base"] = get_from_dict_or_env( + values["openai_api_base"] = get_from_dict_or_env( # type: ignore values, "anyscale_api_base", "ANYSCALE_API_BASE", default=DEFAULT_API_BASE, ) - values["openai_proxy"] = get_from_dict_or_env( + values["openai_proxy"] = get_from_dict_or_env( # type: ignore values, "anyscale_proxy", "ANYSCALE_PROXY", @@ -141,7 +141,7 @@ class ChatAnyscale(ChatOpenAI): if is_openai_v1(): client_params = { "api_key": values["openai_api_key"], - "base_url": values["openai_api_base"], + "base_url": values["openai_api_base"], # type: ignore # To do: future support # "organization": values["openai_organization"], # "timeout": values["request_timeout"], @@ -167,7 +167,7 @@ class ChatAnyscale(ChatOpenAI): available_models = cls.get_available_models( values["openai_api_key"], - values["openai_api_base"], + values["openai_api_base"], # type: ignore ) if model_name not in available_models: diff --git a/libs/community/langchain_community/chat_models/azure_openai.py b/libs/community/langchain_community/chat_models/azure_openai.py index d54cc7a596a..4695a08746a 100644 --- a/libs/community/langchain_community/chat_models/azure_openai.py +++ b/libs/community/langchain_community/chat_models/azure_openai.py @@ -96,7 +96,7 @@ class AzureChatOpenAI(ChatOpenAI): openai_api_type: str = "" """Legacy, for openai<1.0.0 support.""" validate_base_url: bool = True - """For backwards compatibility. If legacy val openai_api_base is passed in, try to + """For backwards compatibility. If legacy val openai_api_base is passed in, try to # type: ignore infer if it is a base_url or azure_endpoint and update accordingly. """ @@ -121,7 +121,7 @@ class AzureChatOpenAI(ChatOpenAI): or os.getenv("AZURE_OPENAI_API_KEY") or os.getenv("OPENAI_API_KEY") ) - values["openai_api_base"] = values["openai_api_base"] or os.getenv( + values["openai_api_base"] = values["openai_api_base"] or os.getenv( # type: ignore "OPENAI_API_BASE" ) values["openai_api_version"] = values["openai_api_version"] or os.getenv( @@ -143,8 +143,8 @@ class AzureChatOpenAI(ChatOpenAI): values["openai_api_type"] = get_from_dict_or_env( values, "openai_api_type", "OPENAI_API_TYPE", default="azure" ) - values["openai_proxy"] = get_from_dict_or_env( - values, "openai_proxy", "OPENAI_PROXY", default="" + values["openai_proxy"] = get_from_dict_or_env( # type: ignore + values, "openai_proxy", "OPENAI_PROXY", default="" # type: ignore ) try: @@ -157,37 +157,37 @@ class AzureChatOpenAI(ChatOpenAI): ) if is_openai_v1(): # For backwards compatibility. Before openai v1, no distinction was made - # between azure_endpoint and base_url (openai_api_base). - openai_api_base = values["openai_api_base"] - if openai_api_base and values["validate_base_url"]: - if "/openai" not in openai_api_base: - values["openai_api_base"] = ( - values["openai_api_base"].rstrip("/") + "/openai" + # between azure_endpoint and base_url (openai_api_base). # type: ignore + openai_api_base = values["openai_api_base"] # type: ignore + if openai_api_base and values["validate_base_url"]: # type: ignore + if "/openai" not in openai_api_base: # type: ignore + values["openai_api_base"] = ( # type: ignore + values["openai_api_base"].rstrip("/") + "/openai" # type: ignore ) warnings.warn( "As of openai>=1.0.0, Azure endpoints should be specified via " - f"the `azure_endpoint` param not `openai_api_base` " - f"(or alias `base_url`). Updating `openai_api_base` from " - f"{openai_api_base} to {values['openai_api_base']}." + f"the `azure_endpoint` param not `openai_api_base` " # type: ignore + f"(or alias `base_url`). Updating `openai_api_base` from " # type: ignore + f"{openai_api_base} to {values['openai_api_base']}." # type: ignore ) if values["deployment_name"]: warnings.warn( "As of openai>=1.0.0, if `deployment_name` (or alias " "`azure_deployment`) is specified then " - "`openai_api_base` (or alias `base_url`) should not be. " + "`openai_api_base` (or alias `base_url`) should not be. " # type: ignore "Instead use `deployment_name` (or alias `azure_deployment`) " "and `azure_endpoint`." ) - if values["deployment_name"] not in values["openai_api_base"]: + if values["deployment_name"] not in values["openai_api_base"]: # type: ignore warnings.warn( - "As of openai>=1.0.0, if `openai_api_base` " + "As of openai>=1.0.0, if `openai_api_base` " # type: ignore "(or alias `base_url`) is specified it is expected to be " "of the form " "https://example-resource.azure.openai.com/openai/deployments/example-deployment. " # noqa: E501 - f"Updating {openai_api_base} to " - f"{values['openai_api_base']}." + f"Updating {openai_api_base} to " # type: ignore + f"{values['openai_api_base']}." # type: ignore ) - values["openai_api_base"] += ( + values["openai_api_base"] += ( # type: ignore "/deployments/" + values["deployment_name"] ) values["deployment_name"] = None @@ -199,7 +199,7 @@ class AzureChatOpenAI(ChatOpenAI): "azure_ad_token": values["azure_ad_token"], "azure_ad_token_provider": values["azure_ad_token_provider"], "organization": values["openai_organization"], - "base_url": values["openai_api_base"], + "base_url": values["openai_api_base"], # type: ignore "timeout": values["request_timeout"], "max_retries": values["max_retries"], "default_headers": values["default_headers"], diff --git a/libs/community/langchain_community/chat_models/everlyai.py b/libs/community/langchain_community/chat_models/everlyai.py index e96292b4bd4..91766b1df56 100644 --- a/libs/community/langchain_community/chat_models/everlyai.py +++ b/libs/community/langchain_community/chat_models/everlyai.py @@ -83,7 +83,7 @@ class ChatEverlyAI(ChatOpenAI): "everlyai_api_key", "EVERLYAI_API_KEY", ) - values["openai_api_base"] = DEFAULT_API_BASE + values["openai_api_base"] = DEFAULT_API_BASE # type: ignore try: import openai diff --git a/libs/community/langchain_community/chat_models/openai.py b/libs/community/langchain_community/chat_models/openai.py index 4f959083378..15789f0c04b 100644 --- a/libs/community/langchain_community/chat_models/openai.py +++ b/libs/community/langchain_community/chat_models/openai.py @@ -179,11 +179,11 @@ class ChatOpenAI(BaseChatModel): if self.openai_organization: attributes["openai_organization"] = self.openai_organization - if self.openai_api_base: - attributes["openai_api_base"] = self.openai_api_base + if self.openai_api_base: # type: ignore + attributes["openai_api_base"] = self.openai_api_base # type: ignore - if self.openai_proxy: - attributes["openai_proxy"] = self.openai_proxy + if self.openai_proxy: # type: ignore + attributes["openai_proxy"] = self.openai_proxy # type: ignore return attributes @@ -205,13 +205,13 @@ class ChatOpenAI(BaseChatModel): # may assume openai_api_key is a str) openai_api_key: Optional[str] = Field(default=None, alias="api_key") """Automatically inferred from env var `OPENAI_API_KEY` if not provided.""" - openai_api_base: Optional[str] = Field(default=None, alias="base_url") + openai_api_base: Optional[str] = Field(default=None, alias="base_url") # type: ignore """Base URL path for API requests, leave blank if not using a proxy or service emulator.""" openai_organization: Optional[str] = Field(default=None, alias="organization") """Automatically inferred from env var `OPENAI_ORG_ID` if not provided.""" # to support explicit proxy for OpenAI - openai_proxy: Optional[str] = None + openai_proxy: Optional[str] = None # type: ignore request_timeout: Union[float, Tuple[float, float], Any, None] = Field( default=None, alias="timeout" ) @@ -290,12 +290,12 @@ class ChatOpenAI(BaseChatModel): or os.getenv("OPENAI_ORG_ID") or os.getenv("OPENAI_ORGANIZATION") ) - values["openai_api_base"] = values["openai_api_base"] or os.getenv( + values["openai_api_base"] = values["openai_api_base"] or os.getenv( # type: ignore "OPENAI_API_BASE" ) - values["openai_proxy"] = get_from_dict_or_env( + values["openai_proxy"] = get_from_dict_or_env( # type: ignore values, - "openai_proxy", + "openai_proxy", # type: ignore "OPENAI_PROXY", default="", ) @@ -312,7 +312,7 @@ class ChatOpenAI(BaseChatModel): client_params = { "api_key": values["openai_api_key"], "organization": values["openai_organization"], - "base_url": values["openai_api_base"], + "base_url": values["openai_api_base"], # type: ignore "timeout": values["request_timeout"], "max_retries": values["max_retries"], "default_headers": values["default_headers"], @@ -547,11 +547,11 @@ class ChatOpenAI(BaseChatModel): openai_creds.update( { "api_key": self.openai_api_key, - "api_base": self.openai_api_base, + "api_base": self.openai_api_base, # type: ignore "organization": self.openai_organization, } ) - if self.openai_proxy: + if self.openai_proxy: # type: ignore import openai openai.proxy = {"http": self.openai_proxy, "https": self.openai_proxy} # type: ignore[assignment] # noqa: E501 diff --git a/libs/community/langchain_community/embeddings/azure_openai.py b/libs/community/langchain_community/embeddings/azure_openai.py index 8540d8a3d6a..738eff6d5e8 100644 --- a/libs/community/langchain_community/embeddings/azure_openai.py +++ b/libs/community/langchain_community/embeddings/azure_openai.py @@ -64,7 +64,7 @@ class AzureOpenAIEmbeddings(OpenAIEmbeddings): or os.getenv("AZURE_OPENAI_API_KEY") or os.getenv("OPENAI_API_KEY") ) - values["openai_api_base"] = values["openai_api_base"] or os.getenv( + values["openai_api_base"] = values["openai_api_base"] or os.getenv( # type: ignore "OPENAI_API_BASE" ) values["openai_api_version"] = values["openai_api_version"] or os.getenv( @@ -78,9 +78,9 @@ class AzureOpenAIEmbeddings(OpenAIEmbeddings): or os.getenv("OPENAI_ORG_ID") or os.getenv("OPENAI_ORGANIZATION") ) - values["openai_proxy"] = get_from_dict_or_env( + values["openai_proxy"] = get_from_dict_or_env( # type: ignore values, - "openai_proxy", + "openai_proxy", # type: ignore "OPENAI_PROXY", default="", ) @@ -104,35 +104,35 @@ class AzureOpenAIEmbeddings(OpenAIEmbeddings): ) if is_openai_v1(): # For backwards compatibility. Before openai v1, no distinction was made - # between azure_endpoint and base_url (openai_api_base). - openai_api_base = values["openai_api_base"] - if openai_api_base and values["validate_base_url"]: - if "/openai" not in openai_api_base: - values["openai_api_base"] += "/openai" + # between azure_endpoint and base_url (openai_api_base). # type: ignore + openai_api_base = values["openai_api_base"] # type: ignore + if openai_api_base and values["validate_base_url"]: # type: ignore + if "/openai" not in openai_api_base: # type: ignore + values["openai_api_base"] += "/openai" # type: ignore warnings.warn( "As of openai>=1.0.0, Azure endpoints should be specified via " - f"the `azure_endpoint` param not `openai_api_base` " - f"(or alias `base_url`). Updating `openai_api_base` from " - f"{openai_api_base} to {values['openai_api_base']}." + f"the `azure_endpoint` param not `openai_api_base` " # type: ignore + f"(or alias `base_url`). Updating `openai_api_base` from " # type: ignore + f"{openai_api_base} to {values['openai_api_base']}." # type: ignore ) if values["deployment"]: warnings.warn( "As of openai>=1.0.0, if `deployment` (or alias " "`azure_deployment`) is specified then " - "`openai_api_base` (or alias `base_url`) should not be. " + "`openai_api_base` (or alias `base_url`) should not be. " # type: ignore "Instead use `deployment` (or alias `azure_deployment`) " "and `azure_endpoint`." ) - if values["deployment"] not in values["openai_api_base"]: + if values["deployment"] not in values["openai_api_base"]: # type: ignore warnings.warn( - "As of openai>=1.0.0, if `openai_api_base` " + "As of openai>=1.0.0, if `openai_api_base` " # type: ignore "(or alias `base_url`) is specified it is expected to be " "of the form " "https://example-resource.azure.openai.com/openai/deployments/example-deployment. " # noqa: E501 - f"Updating {openai_api_base} to " - f"{values['openai_api_base']}." + f"Updating {openai_api_base} to " # type: ignore + f"{values['openai_api_base']}." # type: ignore ) - values["openai_api_base"] += ( + values["openai_api_base"] += ( # type: ignore "/deployments/" + values["deployment"] ) values["deployment"] = None @@ -144,7 +144,7 @@ class AzureOpenAIEmbeddings(OpenAIEmbeddings): "azure_ad_token": values["azure_ad_token"], "azure_ad_token_provider": values["azure_ad_token_provider"], "organization": values["openai_organization"], - "base_url": values["openai_api_base"], + "base_url": values["openai_api_base"], # type: ignore "timeout": values["request_timeout"], "max_retries": values["max_retries"], "default_headers": values["default_headers"], diff --git a/libs/community/langchain_community/embeddings/localai.py b/libs/community/langchain_community/embeddings/localai.py index fe6e58e2d17..be13e55daa6 100644 --- a/libs/community/langchain_community/embeddings/localai.py +++ b/libs/community/langchain_community/embeddings/localai.py @@ -132,7 +132,7 @@ class LocalAIEmbeddings(BaseModel, Embeddings): from langchain_community.embeddings import LocalAIEmbeddings openai = LocalAIEmbeddings( openai_api_key="random-string", - openai_api_base="http://localhost:8080" + openai_api_base="http://localhost:8080" # type: ignore ) """ @@ -141,9 +141,9 @@ class LocalAIEmbeddings(BaseModel, Embeddings): model: str = "text-embedding-ada-002" deployment: str = model openai_api_version: Optional[str] = None - openai_api_base: Optional[str] = None + openai_api_base: Optional[str] = None # type: ignore # to support explicit proxy for LocalAI - openai_proxy: Optional[str] = None + openai_proxy: Optional[str] = None # type: ignore embedding_ctx_length: int = 8191 """The maximum number of tokens to embed at once.""" openai_api_key: Optional[str] = None @@ -199,15 +199,15 @@ class LocalAIEmbeddings(BaseModel, Embeddings): values["openai_api_key"] = get_from_dict_or_env( values, "openai_api_key", "OPENAI_API_KEY" ) - values["openai_api_base"] = get_from_dict_or_env( + values["openai_api_base"] = get_from_dict_or_env( # type: ignore values, - "openai_api_base", + "openai_api_base", # type: ignore "OPENAI_API_BASE", default="", ) - values["openai_proxy"] = get_from_dict_or_env( + values["openai_proxy"] = get_from_dict_or_env( # type: ignore values, - "openai_proxy", + "openai_proxy", # type: ignore "OPENAI_PROXY", default="", ) @@ -244,16 +244,16 @@ class LocalAIEmbeddings(BaseModel, Embeddings): "headers": self.headers, "api_key": self.openai_api_key, "organization": self.openai_organization, - "api_base": self.openai_api_base, + "api_base": self.openai_api_base, # type: ignore "api_version": self.openai_api_version, **self.model_kwargs, } - if self.openai_proxy: + if self.openai_proxy: # type: ignore import openai - openai.proxy = { - "http": self.openai_proxy, - "https": self.openai_proxy, + openai.proxy = { # type: ignore + "http": self.openai_proxy, # type: ignore + "https": self.openai_proxy, # type: ignore } # type: ignore[assignment] # noqa: E501 return openai_args @@ -268,7 +268,9 @@ class LocalAIEmbeddings(BaseModel, Embeddings): self, input=[text], **self._invocation_params, - )["data"][0]["embedding"] + )["data"][ + 0 + ]["embedding"] async def _aembedding_func(self, text: str, *, engine: str) -> List[float]: """Call out to LocalAI's embedding endpoint.""" diff --git a/libs/community/langchain_community/embeddings/openai.py b/libs/community/langchain_community/embeddings/openai.py index dde44cbfe25..8af68bf7230 100644 --- a/libs/community/langchain_community/embeddings/openai.py +++ b/libs/community/langchain_community/embeddings/openai.py @@ -177,7 +177,7 @@ class OpenAIEmbeddings(BaseModel, Embeddings): embeddings = OpenAIEmbeddings( deployment="your-embeddings-deployment-name", model="your-embeddings-model-name", - openai_api_base="https://your-endpoint.openai.azure.com/", + openai_api_base="https://your-endpoint.openai.azure.com/", # type: ignore openai_api_type="azure", ) text = "This is a test query." @@ -194,13 +194,13 @@ class OpenAIEmbeddings(BaseModel, Embeddings): openai_api_version: Optional[str] = Field(default=None, alias="api_version") """Automatically inferred from env var `OPENAI_API_VERSION` if not provided.""" # to support Azure OpenAI Service custom endpoints - openai_api_base: Optional[str] = Field(default=None, alias="base_url") + openai_api_base: Optional[str] = Field(default=None, alias="base_url") # type: ignore """Base URL path for API requests, leave blank if not using a proxy or service emulator.""" # to support Azure OpenAI Service custom endpoints openai_api_type: Optional[str] = None # to support explicit proxy for OpenAI - openai_proxy: Optional[str] = None + openai_proxy: Optional[str] = None # type: ignore embedding_ctx_length: int = 8191 """The maximum number of tokens to embed at once.""" openai_api_key: Optional[str] = Field(default=None, alias="api_key") @@ -288,7 +288,7 @@ class OpenAIEmbeddings(BaseModel, Embeddings): values["openai_api_key"] = get_from_dict_or_env( values, "openai_api_key", "OPENAI_API_KEY" ) - values["openai_api_base"] = values["openai_api_base"] or os.getenv( + values["openai_api_base"] = values["openai_api_base"] or os.getenv( # type: ignore "OPENAI_API_BASE" ) values["openai_api_type"] = get_from_dict_or_env( @@ -297,9 +297,9 @@ class OpenAIEmbeddings(BaseModel, Embeddings): "OPENAI_API_TYPE", default="", ) - values["openai_proxy"] = get_from_dict_or_env( + values["openai_proxy"] = get_from_dict_or_env( # type: ignore values, - "openai_proxy", + "openai_proxy", # type: ignore "OPENAI_PROXY", default="", ) @@ -340,7 +340,7 @@ class OpenAIEmbeddings(BaseModel, Embeddings): client_params = { "api_key": values["openai_api_key"], "organization": values["openai_organization"], - "base_url": values["openai_api_base"], + "base_url": values["openai_api_base"], # type: ignore "timeout": values["request_timeout"], "max_retries": values["max_retries"], "default_headers": values["default_headers"], @@ -370,7 +370,7 @@ class OpenAIEmbeddings(BaseModel, Embeddings): "headers": self.headers, "api_key": self.openai_api_key, "organization": self.openai_organization, - "api_base": self.openai_api_base, + "api_base": self.openai_api_base, # type: ignore "api_type": self.openai_api_type, "api_version": self.openai_api_version, **self.model_kwargs, @@ -378,7 +378,7 @@ class OpenAIEmbeddings(BaseModel, Embeddings): if self.openai_api_type in ("azure", "azure_ad", "azuread"): openai_args["engine"] = self.deployment # TODO: Look into proxy with openai v1. - if self.openai_proxy: + if self.openai_proxy: # type: ignore try: import openai except ImportError: @@ -387,9 +387,9 @@ class OpenAIEmbeddings(BaseModel, Embeddings): "Please install it with `pip install openai`." ) - openai.proxy = { - "http": self.openai_proxy, - "https": self.openai_proxy, + openai.proxy = { # type: ignore + "http": self.openai_proxy, # type: ignore + "https": self.openai_proxy, # type: ignore } # type: ignore[assignment] # noqa: E501 return openai_args diff --git a/libs/community/langchain_community/llms/gooseai.py b/libs/community/langchain_community/llms/gooseai.py index 27ff257ab63..663b2d43611 100644 --- a/libs/community/langchain_community/llms/gooseai.py +++ b/libs/community/langchain_community/llms/gooseai.py @@ -97,8 +97,8 @@ class GooseAI(LLM): import openai openai.api_key = gooseai_api_key.get_secret_value() - openai.api_base = "https://api.goose.ai/v1" - values["client"] = openai.Completion + openai.api_base = "https://api.goose.ai/v1" # type: ignore + values["client"] = openai.Completion # type: ignore except ImportError: raise ImportError( "Could not import openai python package. " diff --git a/libs/community/langchain_community/llms/openai.py b/libs/community/langchain_community/llms/openai.py index 7462346fce9..392893c7cb5 100644 --- a/libs/community/langchain_community/llms/openai.py +++ b/libs/community/langchain_community/llms/openai.py @@ -157,14 +157,14 @@ class BaseOpenAI(BaseLLM): @property def lc_attributes(self) -> Dict[str, Any]: attributes: Dict[str, Any] = {} - if self.openai_api_base: - attributes["openai_api_base"] = self.openai_api_base + if self.openai_api_base: # type: ignore + attributes["openai_api_base"] = self.openai_api_base # type: ignore if self.openai_organization: attributes["openai_organization"] = self.openai_organization - if self.openai_proxy: - attributes["openai_proxy"] = self.openai_proxy + if self.openai_proxy: # type: ignore + attributes["openai_proxy"] = self.openai_proxy # type: ignore return attributes @@ -199,13 +199,13 @@ class BaseOpenAI(BaseLLM): # may assume openai_api_key is a str) openai_api_key: Optional[str] = Field(default=None, alias="api_key") """Automatically inferred from env var `OPENAI_API_KEY` if not provided.""" - openai_api_base: Optional[str] = Field(default=None, alias="base_url") + openai_api_base: Optional[str] = Field(default=None, alias="base_url") # type: ignore """Base URL path for API requests, leave blank if not using a proxy or service emulator.""" openai_organization: Optional[str] = Field(default=None, alias="organization") """Automatically inferred from env var `OPENAI_ORG_ID` if not provided.""" # to support explicit proxy for OpenAI - openai_proxy: Optional[str] = None + openai_proxy: Optional[str] = None # type: ignore batch_size: int = 20 """Batch size to use when passing multiple documents to generate.""" request_timeout: Union[float, Tuple[float, float], Any, None] = Field( @@ -282,12 +282,12 @@ class BaseOpenAI(BaseLLM): values["openai_api_key"] = get_from_dict_or_env( values, "openai_api_key", "OPENAI_API_KEY" ) - values["openai_api_base"] = values["openai_api_base"] or os.getenv( + values["openai_api_base"] = values["openai_api_base"] or os.getenv( # type: ignore "OPENAI_API_BASE" ) - values["openai_proxy"] = get_from_dict_or_env( + values["openai_proxy"] = get_from_dict_or_env( # type: ignore values, - "openai_proxy", + "openai_proxy", # type: ignore "OPENAI_PROXY", default="", ) @@ -308,7 +308,7 @@ class BaseOpenAI(BaseLLM): client_params = { "api_key": values["openai_api_key"], "organization": values["openai_organization"], - "base_url": values["openai_api_base"], + "base_url": values["openai_api_base"], # type: ignore "timeout": values["request_timeout"], "max_retries": values["max_retries"], "default_headers": values["default_headers"], @@ -320,7 +320,7 @@ class BaseOpenAI(BaseLLM): if not values.get("async_client"): values["async_client"] = openai.AsyncOpenAI(**client_params).completions elif not values.get("client"): - values["client"] = openai.Completion + values["client"] = openai.Completion # type: ignore else: pass @@ -597,11 +597,11 @@ class BaseOpenAI(BaseLLM): openai_creds.update( { "api_key": self.openai_api_key, - "api_base": self.openai_api_base, + "api_base": self.openai_api_base, # type: ignore "organization": self.openai_organization, } ) - if self.openai_proxy: + if self.openai_proxy: # type: ignore import openai openai.proxy = {"http": self.openai_proxy, "https": self.openai_proxy} # type: ignore[assignment] # noqa: E501 @@ -807,7 +807,7 @@ class AzureOpenAI(BaseOpenAI): openai_api_type: str = "" """Legacy, for openai<1.0.0 support.""" validate_base_url: bool = True - """For backwards compatibility. If legacy val openai_api_base is passed in, try to + """For backwards compatibility. If legacy val openai_api_base is passed in, try to # type: ignore infer if it is a base_url or azure_endpoint and update accordingly. """ @@ -841,12 +841,12 @@ class AzureOpenAI(BaseOpenAI): values["azure_ad_token"] = values["azure_ad_token"] or os.getenv( "AZURE_OPENAI_AD_TOKEN" ) - values["openai_api_base"] = values["openai_api_base"] or os.getenv( + values["openai_api_base"] = values["openai_api_base"] or os.getenv( # type: ignore "OPENAI_API_BASE" ) - values["openai_proxy"] = get_from_dict_or_env( + values["openai_proxy"] = get_from_dict_or_env( # type: ignore values, - "openai_proxy", + "openai_proxy", # type: ignore "OPENAI_PROXY", default="", ) @@ -870,37 +870,37 @@ class AzureOpenAI(BaseOpenAI): ) if is_openai_v1(): # For backwards compatibility. Before openai v1, no distinction was made - # between azure_endpoint and base_url (openai_api_base). - openai_api_base = values["openai_api_base"] - if openai_api_base and values["validate_base_url"]: - if "/openai" not in openai_api_base: - values["openai_api_base"] = ( - values["openai_api_base"].rstrip("/") + "/openai" + # between azure_endpoint and base_url (openai_api_base). # type: ignore + openai_api_base = values["openai_api_base"] # type: ignore + if openai_api_base and values["validate_base_url"]: # type: ignore + if "/openai" not in openai_api_base: # type: ignore + values["openai_api_base"] = ( # type: ignore + values["openai_api_base"].rstrip("/") + "/openai" # type: ignore ) warnings.warn( "As of openai>=1.0.0, Azure endpoints should be specified via " - f"the `azure_endpoint` param not `openai_api_base` " - f"(or alias `base_url`). Updating `openai_api_base` from " - f"{openai_api_base} to {values['openai_api_base']}." + f"the `azure_endpoint` param not `openai_api_base` " # type: ignore + f"(or alias `base_url`). Updating `openai_api_base` from " # type: ignore + f"{openai_api_base} to {values['openai_api_base']}." # type: ignore ) if values["deployment_name"]: warnings.warn( "As of openai>=1.0.0, if `deployment_name` (or alias " "`azure_deployment`) is specified then " - "`openai_api_base` (or alias `base_url`) should not be. " + "`openai_api_base` (or alias `base_url`) should not be. " # type: ignore "Instead use `deployment_name` (or alias `azure_deployment`) " "and `azure_endpoint`." ) - if values["deployment_name"] not in values["openai_api_base"]: + if values["deployment_name"] not in values["openai_api_base"]: # type: ignore warnings.warn( - "As of openai>=1.0.0, if `openai_api_base` " + "As of openai>=1.0.0, if `openai_api_base` " # type: ignore "(or alias `base_url`) is specified it is expected to be " "of the form " "https://example-resource.azure.openai.com/openai/deployments/example-deployment. " # noqa: E501 - f"Updating {openai_api_base} to " - f"{values['openai_api_base']}." + f"Updating {openai_api_base} to " # type: ignore + f"{values['openai_api_base']}." # type: ignore ) - values["openai_api_base"] += ( + values["openai_api_base"] += ( # type: ignore "/deployments/" + values["deployment_name"] ) values["deployment_name"] = None @@ -912,7 +912,7 @@ class AzureOpenAI(BaseOpenAI): "azure_ad_token": values["azure_ad_token"], "azure_ad_token_provider": values["azure_ad_token_provider"], "organization": values["openai_organization"], - "base_url": values["openai_api_base"], + "base_url": values["openai_api_base"], # type: ignore "timeout": values["request_timeout"], "max_retries": values["max_retries"], "default_headers": values["default_headers"], @@ -925,7 +925,7 @@ class AzureOpenAI(BaseOpenAI): ).completions else: - values["client"] = openai.Completion + values["client"] = openai.Completion # type: ignore return values @@ -993,11 +993,11 @@ class OpenAIChat(BaseLLM): # may assume openai_api_key is a str) openai_api_key: Optional[str] = Field(default=None, alias="api_key") """Automatically inferred from env var `OPENAI_API_KEY` if not provided.""" - openai_api_base: Optional[str] = Field(default=None, alias="base_url") + openai_api_base: Optional[str] = Field(default=None, alias="base_url") # type: ignore """Base URL path for API requests, leave blank if not using a proxy or service emulator.""" # to support explicit proxy for OpenAI - openai_proxy: Optional[str] = None + openai_proxy: Optional[str] = None # type: ignore max_retries: int = 6 """Maximum number of retries to make when generating.""" prefix_messages: List = Field(default_factory=list) @@ -1029,15 +1029,15 @@ class OpenAIChat(BaseLLM): openai_api_key = get_from_dict_or_env( values, "openai_api_key", "OPENAI_API_KEY" ) - openai_api_base = get_from_dict_or_env( + openai_api_base = get_from_dict_or_env( # type: ignore values, - "openai_api_base", + "openai_api_base", # type: ignore "OPENAI_API_BASE", default="", ) - openai_proxy = get_from_dict_or_env( + openai_proxy = get_from_dict_or_env( # type: ignore values, - "openai_proxy", + "openai_proxy", # type: ignore "OPENAI_PROXY", default="", ) @@ -1048,11 +1048,11 @@ class OpenAIChat(BaseLLM): import openai openai.api_key = openai_api_key - if openai_api_base: - openai.api_base = openai_api_base + if openai_api_base: # type: ignore + openai.api_base = openai_api_base # type: ignore if openai_organization: openai.organization = openai_organization - if openai_proxy: + if openai_proxy: # type: ignore openai.proxy = {"http": openai_proxy, "https": openai_proxy} # type: ignore[assignment] # noqa: E501 except ImportError: raise ImportError( diff --git a/libs/community/langchain_community/llms/vllm.py b/libs/community/langchain_community/llms/vllm.py index 5710cf48723..2bed5b50be7 100644 --- a/libs/community/langchain_community/llms/vllm.py +++ b/libs/community/langchain_community/llms/vllm.py @@ -164,7 +164,7 @@ class VLLMOpenAI(BaseOpenAI): params.update( { "api_key": self.openai_api_key, - "api_base": self.openai_api_base, + "api_base": self.openai_api_base, # type: ignore } ) diff --git a/libs/community/langchain_community/utilities/dalle_image_generator.py b/libs/community/langchain_community/utilities/dalle_image_generator.py index 6dddb710be8..aa172d67164 100644 --- a/libs/community/langchain_community/utilities/dalle_image_generator.py +++ b/libs/community/langchain_community/utilities/dalle_image_generator.py @@ -31,13 +31,13 @@ class DallEAPIWrapper(BaseModel): model_kwargs: Dict[str, Any] = Field(default_factory=dict) openai_api_key: Optional[str] = Field(default=None, alias="api_key") """Automatically inferred from env var `OPENAI_API_KEY` if not provided.""" - openai_api_base: Optional[str] = Field(default=None, alias="base_url") + openai_api_base: Optional[str] = Field(default=None, alias="base_url") # type: ignore """Base URL path for API requests, leave blank if not using a proxy or service emulator.""" openai_organization: Optional[str] = Field(default=None, alias="organization") """Automatically inferred from env var `OPENAI_ORG_ID` if not provided.""" # to support explicit proxy for OpenAI - openai_proxy: Optional[str] = None + openai_proxy: Optional[str] = None # type: ignore request_timeout: Union[float, Tuple[float, float], Any, None] = Field( default=None, alias="timeout" ) @@ -102,12 +102,12 @@ class DallEAPIWrapper(BaseModel): or os.getenv("OPENAI_ORGANIZATION") or None ) - values["openai_api_base"] = values["openai_api_base"] or os.getenv( + values["openai_api_base"] = values["openai_api_base"] or os.getenv( # type: ignore "OPENAI_API_BASE" ) - values["openai_proxy"] = get_from_dict_or_env( + values["openai_proxy"] = get_from_dict_or_env( # type: ignore values, - "openai_proxy", + "openai_proxy", # type: ignore "OPENAI_PROXY", default="", ) @@ -125,7 +125,7 @@ class DallEAPIWrapper(BaseModel): client_params = { "api_key": values["openai_api_key"], "organization": values["openai_organization"], - "base_url": values["openai_api_base"], + "base_url": values["openai_api_base"], # type: ignore "timeout": values["request_timeout"], "max_retries": values["max_retries"], "default_headers": values["default_headers"], diff --git a/libs/community/tests/integration_tests/chat_models/test_openai.py b/libs/community/tests/integration_tests/chat_models/test_openai.py index 9274ad8e831..5a387ff5891 100644 --- a/libs/community/tests/integration_tests/chat_models/test_openai.py +++ b/libs/community/tests/integration_tests/chat_models/test_openai.py @@ -23,7 +23,7 @@ def test_chat_openai() -> None: temperature=0.7, base_url=None, organization=None, - openai_proxy=None, + openai_proxy=None, # type: ignore timeout=10.0, max_retries=3, http_client=None, diff --git a/libs/community/tests/integration_tests/embeddings/test_azure_openai.py b/libs/community/tests/integration_tests/embeddings/test_azure_openai.py index be0902b5c0a..6d0ae341a01 100644 --- a/libs/community/tests/integration_tests/embeddings/test_azure_openai.py +++ b/libs/community/tests/integration_tests/embeddings/test_azure_openai.py @@ -20,7 +20,7 @@ def _get_embeddings(**kwargs: Any) -> AzureOpenAIEmbeddings: return AzureOpenAIEmbeddings( azure_deployment=DEPLOYMENT_NAME, api_version=OPENAI_API_VERSION, - openai_api_base=OPENAI_API_BASE, + openai_api_base=OPENAI_API_BASE, # type: ignore openai_api_key=OPENAI_API_KEY, **kwargs, ) @@ -106,7 +106,11 @@ def test_azure_openai_embedding_with_empty_string() -> None: assert len(output[0]) == 1536 expected_output = openai.Embedding.create(input="", model="text-embedding-ada-002")[ # type: ignore "data" - ][0]["embedding"] + ][ + 0 + ][ + "embedding" + ] assert np.allclose(output[0], expected_output) assert len(output[1]) == 1536 diff --git a/libs/community/tests/integration_tests/llms/test_azure_openai.py b/libs/community/tests/integration_tests/llms/test_azure_openai.py index ee5030f1014..473de36582d 100644 --- a/libs/community/tests/integration_tests/llms/test_azure_openai.py +++ b/libs/community/tests/integration_tests/llms/test_azure_openai.py @@ -22,7 +22,7 @@ def _get_llm(**kwargs: Any) -> AzureOpenAI: return AzureOpenAI( deployment_name=DEPLOYMENT_NAME, openai_api_version=OPENAI_API_VERSION, - openai_api_base=OPENAI_API_BASE, + openai_api_base=OPENAI_API_BASE, # type: ignore openai_api_key=OPENAI_API_KEY, **kwargs, ) diff --git a/libs/partners/openai/langchain_openai/chat_models/azure.py b/libs/partners/openai/langchain_openai/chat_models/azure.py index 64b0ebc6ca3..b00c123ddfd 100644 --- a/libs/partners/openai/langchain_openai/chat_models/azure.py +++ b/libs/partners/openai/langchain_openai/chat_models/azure.py @@ -91,7 +91,7 @@ class AzureChatOpenAI(ChatOpenAI): openai_api_type: str = "" """Legacy, for openai<1.0.0 support.""" validate_base_url: bool = True - """For backwards compatibility. If legacy val openai_api_base is passed in, try to + """For backwards compatibility. If legacy val openai_api_base is passed in, try to # type: ignore infer if it is a base_url or azure_endpoint and update accordingly. """ @@ -119,7 +119,7 @@ class AzureChatOpenAI(ChatOpenAI): values["openai_api_key"] = ( convert_to_secret_str(openai_api_key) if openai_api_key else None ) - values["openai_api_base"] = values["openai_api_base"] or os.getenv( + values["openai_api_base"] = values["openai_api_base"] or os.getenv( # type: ignore "OPENAI_API_BASE" ) values["openai_api_version"] = values["openai_api_version"] or os.getenv( @@ -142,24 +142,24 @@ class AzureChatOpenAI(ChatOpenAI): values["openai_api_type"] = get_from_dict_or_env( values, "openai_api_type", "OPENAI_API_TYPE", default="azure" ) - values["openai_proxy"] = get_from_dict_or_env( - values, "openai_proxy", "OPENAI_PROXY", default="" + values["openai_proxy"] = get_from_dict_or_env( # type: ignore + values, "openai_proxy", "OPENAI_PROXY", default="" # type: ignore ) # For backwards compatibility. Before openai v1, no distinction was made - # between azure_endpoint and base_url (openai_api_base). - openai_api_base = values["openai_api_base"] - if openai_api_base and values["validate_base_url"]: - if "/openai" not in openai_api_base: + # between azure_endpoint and base_url (openai_api_base). # type: ignore + openai_api_base = values["openai_api_base"] # type: ignore + if openai_api_base and values["validate_base_url"]: # type: ignore + if "/openai" not in openai_api_base: # type: ignore raise ValueError( "As of openai>=1.0.0, Azure endpoints should be specified via " - "the `azure_endpoint` param not `openai_api_base` " + "the `azure_endpoint` param not `openai_api_base` " # type: ignore "(or alias `base_url`)." ) if values["deployment_name"]: raise ValueError( "As of openai>=1.0.0, if `azure_deployment` (or alias " "`deployment_name`) is specified then " - "`base_url` (or alias `openai_api_base`) should not be. " + "`base_url` (or alias `openai_api_base`) should not be. " # type: ignore "If specifying `azure_deployment`/`deployment_name` then use " "`azure_endpoint` instead of `base_url`.\n\n" "For example, you could specify:\n\n" @@ -180,7 +180,7 @@ class AzureChatOpenAI(ChatOpenAI): else None, "azure_ad_token_provider": values["azure_ad_token_provider"], "organization": values["openai_organization"], - "base_url": values["openai_api_base"], + "base_url": values["openai_api_base"], # type: ignore "timeout": values["request_timeout"], "max_retries": values["max_retries"], "default_headers": values["default_headers"], diff --git a/libs/partners/openai/langchain_openai/chat_models/base.py b/libs/partners/openai/langchain_openai/chat_models/base.py index ed33b919bdd..77e5e85c7cb 100644 --- a/libs/partners/openai/langchain_openai/chat_models/base.py +++ b/libs/partners/openai/langchain_openai/chat_models/base.py @@ -220,11 +220,11 @@ class ChatOpenAI(BaseChatModel): if self.openai_organization: attributes["openai_organization"] = self.openai_organization - if self.openai_api_base: - attributes["openai_api_base"] = self.openai_api_base + if self.openai_api_base: # type: ignore + attributes["openai_api_base"] = self.openai_api_base # type: ignore - if self.openai_proxy: - attributes["openai_proxy"] = self.openai_proxy + if self.openai_proxy: # type: ignore + attributes["openai_proxy"] = self.openai_proxy # type: ignore return attributes @@ -243,13 +243,13 @@ class ChatOpenAI(BaseChatModel): """Holds any model parameters valid for `create` call not explicitly specified.""" openai_api_key: Optional[SecretStr] = Field(default=None, alias="api_key") """Automatically inferred from env var `OPENAI_API_KEY` if not provided.""" - openai_api_base: Optional[str] = Field(default=None, alias="base_url") + openai_api_base: Optional[str] = Field(default=None, alias="base_url") # type: ignore """Base URL path for API requests, leave blank if not using a proxy or service emulator.""" openai_organization: Optional[str] = Field(default=None, alias="organization") """Automatically inferred from env var `OPENAI_ORG_ID` if not provided.""" # to support explicit proxy for OpenAI - openai_proxy: Optional[str] = None + openai_proxy: Optional[str] = None # type: ignore request_timeout: Union[float, Tuple[float, float], Any, None] = Field( default=None, alias="timeout" ) @@ -328,12 +328,12 @@ class ChatOpenAI(BaseChatModel): or os.getenv("OPENAI_ORG_ID") or os.getenv("OPENAI_ORGANIZATION") ) - values["openai_api_base"] = values["openai_api_base"] or os.getenv( + values["openai_api_base"] = values["openai_api_base"] or os.getenv( # type: ignore "OPENAI_API_BASE" ) - values["openai_proxy"] = get_from_dict_or_env( + values["openai_proxy"] = get_from_dict_or_env( # type: ignore values, - "openai_proxy", + "openai_proxy", # type: ignore "OPENAI_PROXY", default="", ) @@ -343,7 +343,7 @@ class ChatOpenAI(BaseChatModel): if values["openai_api_key"] else None, "organization": values["openai_organization"], - "base_url": values["openai_api_base"], + "base_url": values["openai_api_base"], # type: ignore "timeout": values["request_timeout"], "max_retries": values["max_retries"], "default_headers": values["default_headers"], diff --git a/libs/partners/openai/langchain_openai/embeddings/azure.py b/libs/partners/openai/langchain_openai/embeddings/azure.py index 69288364c05..dec7e74e948 100644 --- a/libs/partners/openai/langchain_openai/embeddings/azure.py +++ b/libs/partners/openai/langchain_openai/embeddings/azure.py @@ -72,7 +72,7 @@ class AzureOpenAIEmbeddings(OpenAIEmbeddings): values["openai_api_key"] = ( convert_to_secret_str(openai_api_key) if openai_api_key else None ) - values["openai_api_base"] = values["openai_api_base"] or os.getenv( + values["openai_api_base"] = values["openai_api_base"] or os.getenv( # type: ignore "OPENAI_API_BASE" ) values["openai_api_version"] = values["openai_api_version"] or os.getenv( @@ -86,9 +86,9 @@ class AzureOpenAIEmbeddings(OpenAIEmbeddings): or os.getenv("OPENAI_ORG_ID") or os.getenv("OPENAI_ORGANIZATION") ) - values["openai_proxy"] = get_from_dict_or_env( + values["openai_proxy"] = get_from_dict_or_env( # type: ignore values, - "openai_proxy", + "openai_proxy", # type: ignore "OPENAI_PROXY", default="", ) @@ -104,21 +104,21 @@ class AzureOpenAIEmbeddings(OpenAIEmbeddings): # See: https://learn.microsoft.com/en-us/azure/ai-services/openai/reference#embeddings values["chunk_size"] = min(values["chunk_size"], 16) # For backwards compatibility. Before openai v1, no distinction was made - # between azure_endpoint and base_url (openai_api_base). - openai_api_base = values["openai_api_base"] - if openai_api_base and values["validate_base_url"]: - if "/openai" not in openai_api_base: - values["openai_api_base"] += "/openai" + # between azure_endpoint and base_url (openai_api_base). # type: ignore + openai_api_base = values["openai_api_base"] # type: ignore + if openai_api_base and values["validate_base_url"]: # type: ignore + if "/openai" not in openai_api_base: # type: ignore + values["openai_api_base"] += "/openai" # type: ignore raise ValueError( "As of openai>=1.0.0, Azure endpoints should be specified via " - "the `azure_endpoint` param not `openai_api_base` " + "the `azure_endpoint` param not `openai_api_base` " # type: ignore "(or alias `base_url`). " ) if values["deployment"]: raise ValueError( "As of openai>=1.0.0, if `deployment` (or alias " "`azure_deployment`) is specified then " - "`openai_api_base` (or alias `base_url`) should not be. " + "`openai_api_base` (or alias `base_url`) should not be. " # type: ignore "Instead use `deployment` (or alias `azure_deployment`) " "and `azure_endpoint`." ) @@ -134,7 +134,7 @@ class AzureOpenAIEmbeddings(OpenAIEmbeddings): else None, "azure_ad_token_provider": values["azure_ad_token_provider"], "organization": values["openai_organization"], - "base_url": values["openai_api_base"], + "base_url": values["openai_api_base"], # type: ignore "timeout": values["request_timeout"], "max_retries": values["max_retries"], "default_headers": values["default_headers"], diff --git a/libs/partners/openai/langchain_openai/embeddings/base.py b/libs/partners/openai/langchain_openai/embeddings/base.py index d0b815358e3..7a0b5ddaea1 100644 --- a/libs/partners/openai/langchain_openai/embeddings/base.py +++ b/libs/partners/openai/langchain_openai/embeddings/base.py @@ -71,13 +71,13 @@ class OpenAIEmbeddings(BaseModel, Embeddings): openai_api_version: Optional[str] = Field(default=None, alias="api_version") """Automatically inferred from env var `OPENAI_API_VERSION` if not provided.""" # to support Azure OpenAI Service custom endpoints - openai_api_base: Optional[str] = Field(default=None, alias="base_url") + openai_api_base: Optional[str] = Field(default=None, alias="base_url") # type: ignore """Base URL path for API requests, leave blank if not using a proxy or service emulator.""" # to support Azure OpenAI Service custom endpoints openai_api_type: Optional[str] = None # to support explicit proxy for OpenAI - openai_proxy: Optional[str] = None + openai_proxy: Optional[str] = None # type: ignore embedding_ctx_length: int = 8191 """The maximum number of tokens to embed at once.""" openai_api_key: Optional[SecretStr] = Field(default=None, alias="api_key") @@ -168,7 +168,7 @@ class OpenAIEmbeddings(BaseModel, Embeddings): values["openai_api_key"] = ( convert_to_secret_str(openai_api_key) if openai_api_key else None ) - values["openai_api_base"] = values["openai_api_base"] or os.getenv( + values["openai_api_base"] = values["openai_api_base"] or os.getenv( # type: ignore "OPENAI_API_BASE" ) values["openai_api_type"] = get_from_dict_or_env( @@ -177,9 +177,9 @@ class OpenAIEmbeddings(BaseModel, Embeddings): "OPENAI_API_TYPE", default="", ) - values["openai_proxy"] = get_from_dict_or_env( + values["openai_proxy"] = get_from_dict_or_env( # type: ignore values, - "openai_proxy", + "openai_proxy", # type: ignore "OPENAI_PROXY", default="", ) @@ -213,7 +213,7 @@ class OpenAIEmbeddings(BaseModel, Embeddings): if values["openai_api_key"] else None, "organization": values["openai_organization"], - "base_url": values["openai_api_base"], + "base_url": values["openai_api_base"], # type: ignore "timeout": values["request_timeout"], "max_retries": values["max_retries"], "default_headers": values["default_headers"], diff --git a/libs/partners/openai/langchain_openai/llms/azure.py b/libs/partners/openai/langchain_openai/llms/azure.py index f307d37d54b..8b430cccea8 100644 --- a/libs/partners/openai/langchain_openai/llms/azure.py +++ b/libs/partners/openai/langchain_openai/llms/azure.py @@ -63,7 +63,7 @@ class AzureOpenAI(BaseOpenAI): openai_api_type: str = "" """Legacy, for openai<1.0.0 support.""" validate_base_url: bool = True - """For backwards compatibility. If legacy val openai_api_base is passed in, try to + """For backwards compatibility. If legacy val openai_api_base is passed in, try to # type: ignore infer if it is a base_url or azure_endpoint and update accordingly. """ @@ -101,12 +101,12 @@ class AzureOpenAI(BaseOpenAI): values["azure_ad_token"] = ( convert_to_secret_str(azure_ad_token) if azure_ad_token else None ) - values["openai_api_base"] = values["openai_api_base"] or os.getenv( + values["openai_api_base"] = values["openai_api_base"] or os.getenv( # type: ignore "OPENAI_API_BASE" ) - values["openai_proxy"] = get_from_dict_or_env( + values["openai_proxy"] = get_from_dict_or_env( # type: ignore values, - "openai_proxy", + "openai_proxy", # type: ignore "OPENAI_PROXY", default="", ) @@ -122,23 +122,23 @@ class AzureOpenAI(BaseOpenAI): values, "openai_api_type", "OPENAI_API_TYPE", default="azure" ) # For backwards compatibility. Before openai v1, no distinction was made - # between azure_endpoint and base_url (openai_api_base). - openai_api_base = values["openai_api_base"] - if openai_api_base and values["validate_base_url"]: - if "/openai" not in openai_api_base: - values["openai_api_base"] = ( - values["openai_api_base"].rstrip("/") + "/openai" + # between azure_endpoint and base_url (openai_api_base). # type: ignore + openai_api_base = values["openai_api_base"] # type: ignore + if openai_api_base and values["validate_base_url"]: # type: ignore + if "/openai" not in openai_api_base: # type: ignore + values["openai_api_base"] = ( # type: ignore + values["openai_api_base"].rstrip("/") + "/openai" # type: ignore ) raise ValueError( "As of openai>=1.0.0, Azure endpoints should be specified via " - "the `azure_endpoint` param not `openai_api_base` " + "the `azure_endpoint` param not `openai_api_base` " # type: ignore "(or alias `base_url`)." ) if values["deployment_name"]: raise ValueError( "As of openai>=1.0.0, if `deployment_name` (or alias " "`azure_deployment`) is specified then " - "`openai_api_base` (or alias `base_url`) should not be. " + "`openai_api_base` (or alias `base_url`) should not be. " # type: ignore "Instead use `deployment_name` (or alias `azure_deployment`) " "and `azure_endpoint`." ) @@ -155,7 +155,7 @@ class AzureOpenAI(BaseOpenAI): else None, "azure_ad_token_provider": values["azure_ad_token_provider"], "organization": values["openai_organization"], - "base_url": values["openai_api_base"], + "base_url": values["openai_api_base"], # type: ignore "timeout": values["request_timeout"], "max_retries": values["max_retries"], "default_headers": values["default_headers"], diff --git a/libs/partners/openai/langchain_openai/llms/base.py b/libs/partners/openai/langchain_openai/llms/base.py index 9b0ba87d1f4..63f6e782d9f 100644 --- a/libs/partners/openai/langchain_openai/llms/base.py +++ b/libs/partners/openai/langchain_openai/llms/base.py @@ -75,14 +75,14 @@ class BaseOpenAI(BaseLLM): @property def lc_attributes(self) -> Dict[str, Any]: attributes: Dict[str, Any] = {} - if self.openai_api_base: - attributes["openai_api_base"] = self.openai_api_base + if self.openai_api_base: # type: ignore + attributes["openai_api_base"] = self.openai_api_base # type: ignore if self.openai_organization: attributes["openai_organization"] = self.openai_organization - if self.openai_proxy: - attributes["openai_proxy"] = self.openai_proxy + if self.openai_proxy: # type: ignore + attributes["openai_proxy"] = self.openai_proxy # type: ignore return attributes @@ -110,13 +110,13 @@ class BaseOpenAI(BaseLLM): """Holds any model parameters valid for `create` call not explicitly specified.""" openai_api_key: Optional[SecretStr] = Field(default=None, alias="api_key") """Automatically inferred from env var `OPENAI_API_KEY` if not provided.""" - openai_api_base: Optional[str] = Field(default=None, alias="base_url") + openai_api_base: Optional[str] = Field(default=None, alias="base_url") # type: ignore """Base URL path for API requests, leave blank if not using a proxy or service emulator.""" openai_organization: Optional[str] = Field(default=None, alias="organization") """Automatically inferred from env var `OPENAI_ORG_ID` if not provided.""" # to support explicit proxy for OpenAI - openai_proxy: Optional[str] = None + openai_proxy: Optional[str] = None # type: ignore batch_size: int = 20 """Batch size to use when passing multiple documents to generate.""" request_timeout: Union[float, Tuple[float, float], Any, None] = Field( @@ -182,12 +182,12 @@ class BaseOpenAI(BaseLLM): values["openai_api_key"] = ( convert_to_secret_str(openai_api_key) if openai_api_key else None ) - values["openai_api_base"] = values["openai_api_base"] or os.getenv( + values["openai_api_base"] = values["openai_api_base"] or os.getenv( # type: ignore "OPENAI_API_BASE" ) - values["openai_proxy"] = get_from_dict_or_env( + values["openai_proxy"] = get_from_dict_or_env( # type: ignore values, - "openai_proxy", + "openai_proxy", # type: ignore "OPENAI_PROXY", default="", ) @@ -202,7 +202,7 @@ class BaseOpenAI(BaseLLM): if values["openai_api_key"] else None, "organization": values["openai_organization"], - "base_url": values["openai_api_base"], + "base_url": values["openai_api_base"], # type: ignore "timeout": values["request_timeout"], "max_retries": values["max_retries"], "default_headers": values["default_headers"], diff --git a/libs/partners/openai/tests/integration_tests/chat_models/test_base.py b/libs/partners/openai/tests/integration_tests/chat_models/test_base.py index 33006a624cf..d939aa91813 100644 --- a/libs/partners/openai/tests/integration_tests/chat_models/test_base.py +++ b/libs/partners/openai/tests/integration_tests/chat_models/test_base.py @@ -23,7 +23,7 @@ def test_chat_openai() -> None: temperature=0.7, base_url=None, organization=None, - openai_proxy=None, + openai_proxy=None, # type: ignore timeout=10.0, max_retries=3, http_client=None,