mirror of
https://github.com/hwchase17/langchain.git
synced 2026-07-15 15:40:34 +00:00
openai Completion proxy api_base
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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"],
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"],
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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. "
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -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"],
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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"],
|
||||
|
||||
@@ -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"],
|
||||
|
||||
@@ -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"],
|
||||
|
||||
@@ -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"],
|
||||
|
||||
@@ -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"],
|
||||
|
||||
@@ -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"],
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user