openai Completion proxy api_base

This commit is contained in:
Erick Friis
2024-02-04 17:29:18 -08:00
parent bd9d6d314a
commit 0903f1d3e0
21 changed files with 204 additions and 198 deletions

View File

@@ -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:

View File

@@ -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"],

View File

@@ -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

View File

@@ -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

View File

@@ -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"],

View File

@@ -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."""

View File

@@ -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

View File

@@ -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. "

View File

@@ -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(

View File

@@ -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
}
)

View File

@@ -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"],

View File

@@ -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,

View File

@@ -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

View File

@@ -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,
)

View File

@@ -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"],

View File

@@ -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"],

View File

@@ -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"],

View File

@@ -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"],

View File

@@ -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"],

View File

@@ -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"],

View File

@@ -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,