mirror of
https://github.com/hwchase17/langchain.git
synced 2026-06-09 10:17:00 +00:00
feat(openai): enable stream_usage when using default base URL and client (#33205)
This commit is contained in:
@@ -615,6 +615,25 @@ class AzureChatOpenAI(BaseChatOpenAI):
|
||||
or os.getenv("OPENAI_ORG_ID")
|
||||
or os.getenv("OPENAI_ORGANIZATION")
|
||||
)
|
||||
|
||||
# Enable stream_usage by default if using default base URL and client
|
||||
if all(
|
||||
getattr(self, key, None) is None
|
||||
for key in (
|
||||
"stream_usage",
|
||||
"openai_proxy",
|
||||
"openai_api_base",
|
||||
"base_url",
|
||||
"client",
|
||||
"root_client",
|
||||
"async_client",
|
||||
"root_async_client",
|
||||
"http_client",
|
||||
"http_async_client",
|
||||
)
|
||||
):
|
||||
self.stream_usage = True
|
||||
|
||||
# For backwards compatibility. Before openai v1, no distinction was made
|
||||
# between azure_endpoint and base_url (openai_api_base).
|
||||
openai_api_base = self.openai_api_base
|
||||
|
||||
@@ -99,7 +99,13 @@ from langchain_core.utils.pydantic import (
|
||||
is_basemodel_subclass,
|
||||
)
|
||||
from langchain_core.utils.utils import _build_model_kwargs, from_env, secret_from_env
|
||||
from pydantic import BaseModel, ConfigDict, Field, SecretStr, model_validator
|
||||
from pydantic import (
|
||||
BaseModel,
|
||||
ConfigDict,
|
||||
Field,
|
||||
SecretStr,
|
||||
model_validator,
|
||||
)
|
||||
from pydantic.v1 import BaseModel as BaseModelV1
|
||||
from typing_extensions import Self
|
||||
|
||||
@@ -478,11 +484,18 @@ class BaseChatOpenAI(BaseChatModel):
|
||||
)
|
||||
"""Timeout for requests to OpenAI completion API. Can be float, ``httpx.Timeout`` or
|
||||
None."""
|
||||
stream_usage: bool = False
|
||||
"""Whether to include usage metadata in streaming output. If True, an additional
|
||||
stream_usage: Optional[bool] = None
|
||||
"""Whether to include usage metadata in streaming output. If enabled, an additional
|
||||
message chunk will be generated during the stream including usage metadata.
|
||||
|
||||
This parameter is enabled unless ``openai_api_base`` is set or the model is
|
||||
initialized with a custom client, as many chat completions APIs do not support
|
||||
streaming token usage.
|
||||
|
||||
!!! version-added "Added in version 0.3.9"
|
||||
|
||||
!!! warning "Behavior changed in 0.3.35"
|
||||
Enabled for default base URL and client.
|
||||
"""
|
||||
max_retries: Optional[int] = None
|
||||
"""Maximum number of retries to make when generating."""
|
||||
@@ -761,6 +774,25 @@ class BaseChatOpenAI(BaseChatModel):
|
||||
or os.getenv("OPENAI_ORGANIZATION")
|
||||
)
|
||||
self.openai_api_base = self.openai_api_base or os.getenv("OPENAI_API_BASE")
|
||||
|
||||
# Enable stream_usage by default if using default base URL and client
|
||||
if all(
|
||||
getattr(self, key, None) is None
|
||||
for key in (
|
||||
"stream_usage",
|
||||
"openai_proxy",
|
||||
"openai_api_base",
|
||||
"base_url",
|
||||
"client",
|
||||
"root_client",
|
||||
"async_client",
|
||||
"root_async_client",
|
||||
"http_client",
|
||||
"http_async_client",
|
||||
)
|
||||
):
|
||||
self.stream_usage = True
|
||||
|
||||
client_params: dict = {
|
||||
"api_key": (
|
||||
self.openai_api_key.get_secret_value() if self.openai_api_key else None
|
||||
@@ -1073,7 +1105,7 @@ class BaseChatOpenAI(BaseChatModel):
|
||||
for source in stream_usage_sources:
|
||||
if isinstance(source, bool):
|
||||
return source
|
||||
return self.stream_usage
|
||||
return self.stream_usage or False
|
||||
|
||||
def _stream(
|
||||
self,
|
||||
|
||||
Reference in New Issue
Block a user