mirror of
https://github.com/hwchase17/langchain.git
synced 2025-06-25 08:03:39 +00:00
openai[patch]: set global ssl context (#29932)
We set ```python global_ssl_context = ssl.create_default_context(cafile=certifi.where()) ``` at the module-level and share it among httpx clients.
This commit is contained in:
parent
9ce07980b7
commit
291a232fb8
@ -7,6 +7,7 @@ import json
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import ssl
|
||||||
import sys
|
import sys
|
||||||
import warnings
|
import warnings
|
||||||
from functools import partial
|
from functools import partial
|
||||||
@ -33,6 +34,7 @@ from typing import (
|
|||||||
)
|
)
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
|
import certifi
|
||||||
import openai
|
import openai
|
||||||
import tiktoken
|
import tiktoken
|
||||||
from langchain_core._api.deprecation import deprecated
|
from langchain_core._api.deprecation import deprecated
|
||||||
@ -104,6 +106,10 @@ from typing_extensions import Self
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# This SSL context is equivelent to the default `verify=True`.
|
||||||
|
# https://www.python-httpx.org/advanced/ssl/#configuring-client-instances
|
||||||
|
global_ssl_context = ssl.create_default_context(cafile=certifi.where())
|
||||||
|
|
||||||
|
|
||||||
def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage:
|
def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage:
|
||||||
"""Convert a dictionary to a LangChain message.
|
"""Convert a dictionary to a LangChain message.
|
||||||
@ -564,7 +570,9 @@ class BaseChatOpenAI(BaseChatModel):
|
|||||||
"Could not import httpx python package. "
|
"Could not import httpx python package. "
|
||||||
"Please install it with `pip install httpx`."
|
"Please install it with `pip install httpx`."
|
||||||
) from e
|
) from e
|
||||||
self.http_client = httpx.Client(proxy=self.openai_proxy)
|
self.http_client = httpx.Client(
|
||||||
|
proxy=self.openai_proxy, verify=global_ssl_context
|
||||||
|
)
|
||||||
sync_specific = {"http_client": self.http_client}
|
sync_specific = {"http_client": self.http_client}
|
||||||
self.root_client = openai.OpenAI(**client_params, **sync_specific) # type: ignore[arg-type]
|
self.root_client = openai.OpenAI(**client_params, **sync_specific) # type: ignore[arg-type]
|
||||||
self.client = self.root_client.chat.completions
|
self.client = self.root_client.chat.completions
|
||||||
@ -577,7 +585,9 @@ class BaseChatOpenAI(BaseChatModel):
|
|||||||
"Could not import httpx python package. "
|
"Could not import httpx python package. "
|
||||||
"Please install it with `pip install httpx`."
|
"Please install it with `pip install httpx`."
|
||||||
) from e
|
) from e
|
||||||
self.http_async_client = httpx.AsyncClient(proxy=self.openai_proxy)
|
self.http_async_client = httpx.AsyncClient(
|
||||||
|
proxy=self.openai_proxy, verify=global_ssl_context
|
||||||
|
)
|
||||||
async_specific = {"http_client": self.http_async_client}
|
async_specific = {"http_client": self.http_async_client}
|
||||||
self.root_async_client = openai.AsyncOpenAI(
|
self.root_async_client = openai.AsyncOpenAI(
|
||||||
**client_params,
|
**client_params,
|
||||||
|
Loading…
Reference in New Issue
Block a user