From ff43cd67017ef3311d300b61eeedf52b917d02bf Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Thu, 9 Nov 2023 14:32:09 -0800 Subject: [PATCH] OpenAI remove httpx typing (#13154) Addresses #13124 --- libs/langchain/langchain/chat_models/openai.py | 9 +++++---- libs/langchain/langchain/embeddings/openai.py | 12 +++++------- .../integration_tests/chat_models/test_openai.py | 14 +++++++++++++- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/libs/langchain/langchain/chat_models/openai.py b/libs/langchain/langchain/chat_models/openai.py index af5973a2575..5ab3e9d7da9 100644 --- a/libs/langchain/langchain/chat_models/openai.py +++ b/libs/langchain/langchain/chat_models/openai.py @@ -53,7 +53,6 @@ from langchain.utils import ( from langchain.utils.openai import is_openai_v1 if TYPE_CHECKING: - import httpx import tiktoken @@ -201,10 +200,11 @@ class ChatOpenAI(BaseChatModel): """Automatically inferred from env var `OPENAI_ORG_ID` if not provided.""" # to support explicit proxy for OpenAI openai_proxy: Optional[str] = None - request_timeout: Union[float, Tuple[float, float], httpx.Timeout, None] = Field( + request_timeout: Union[float, Tuple[float, float], Any, None] = Field( default=None, alias="timeout" ) - """Timeout for requests to OpenAI completion API. Default is 600 seconds.""" + """Timeout for requests to OpenAI completion API. Can be float, httpx.Timeout or + None.""" max_retries: int = 2 """Maximum number of retries to make when generating.""" streaming: bool = False @@ -227,7 +227,8 @@ class ChatOpenAI(BaseChatModel): default_query: Union[Mapping[str, object], None] = None # Configure a custom httpx client. See the # [httpx documentation](https://www.python-httpx.org/api/#client) for more details. - http_client: Union[httpx.Client, None] = None + http_client: Union[Any, None] = None + """Optional httpx.Client.""" class Config: """Configuration for this pydantic object.""" diff --git a/libs/langchain/langchain/embeddings/openai.py b/libs/langchain/langchain/embeddings/openai.py index bf69d3d97c8..e09715a77b2 100644 --- a/libs/langchain/langchain/embeddings/openai.py +++ b/libs/langchain/langchain/embeddings/openai.py @@ -5,7 +5,6 @@ import os import warnings from importlib.metadata import version from typing import ( - TYPE_CHECKING, Any, Callable, Dict, @@ -35,9 +34,6 @@ from langchain.pydantic_v1 import BaseModel, Extra, Field, root_validator from langchain.schema.embeddings import Embeddings from langchain.utils import get_from_dict_or_env, get_pydantic_field_names -if TYPE_CHECKING: - import httpx - logger = logging.getLogger(__name__) @@ -207,10 +203,11 @@ class OpenAIEmbeddings(BaseModel, Embeddings): """Maximum number of texts to embed in each batch""" max_retries: int = 2 """Maximum number of retries to make when generating.""" - request_timeout: Optional[Union[float, Tuple[float, float], httpx.Timeout]] = Field( + request_timeout: Optional[Union[float, Tuple[float, float], Any]] = Field( default=None, alias="timeout" ) - """Timeout in seconds for the OpenAPI request.""" + """Timeout for requests to OpenAI completion API. Can be float, httpx.Timeout or + None.""" headers: Any = None tiktoken_model_name: Optional[str] = None """The model name to pass to tiktoken when using this class. @@ -233,7 +230,8 @@ class OpenAIEmbeddings(BaseModel, Embeddings): default_query: Union[Mapping[str, object], None] = None # Configure a custom httpx client. See the # [httpx documentation](https://www.python-httpx.org/api/#client) for more details. - http_client: Union[httpx.Client, None] = None + http_client: Union[Any, None] = None + """Optional httpx.Client.""" class Config: """Configuration for this pydantic object.""" diff --git a/libs/langchain/tests/integration_tests/chat_models/test_openai.py b/libs/langchain/tests/integration_tests/chat_models/test_openai.py index b4bb4596bf0..ae1d3acab85 100644 --- a/libs/langchain/tests/integration_tests/chat_models/test_openai.py +++ b/libs/langchain/tests/integration_tests/chat_models/test_openai.py @@ -25,7 +25,19 @@ from tests.unit_tests.callbacks.fake_callback_handler import FakeCallbackHandler @pytest.mark.scheduled def test_chat_openai() -> None: """Test ChatOpenAI wrapper.""" - chat = ChatOpenAI(max_tokens=10) + chat = ChatOpenAI( + temperature=0.7, + base_url=None, + organization=None, + openai_proxy=None, + timeout=10.0, + max_retries=3, + http_client=None, + n=1, + max_tokens=10, + default_headers=None, + default_query=None, + ) message = HumanMessage(content="Hello") response = chat([message]) assert isinstance(response, BaseMessage)