Source code for langchain_community.callbacks.manager
from __future__ import annotations
import logging
from contextlib import contextmanager
from contextvars import ContextVar
from typing import (
Generator,
Optional,
)
from langchain_core.tracers.context import register_configure_hook
from langchain_community.callbacks.bedrock_anthropic_callback import (
BedrockAnthropicTokenUsageCallbackHandler,
)
from langchain_community.callbacks.openai_info import OpenAICallbackHandler
from langchain_community.callbacks.tracers.comet import CometTracer
from langchain_community.callbacks.tracers.wandb import WandbTracer
logger = logging.getLogger(__name__)
openai_callback_var: ContextVar[Optional[OpenAICallbackHandler]] = ContextVar(
"openai_callback", default=None
)
bedrock_anthropic_callback_var: (ContextVar)[
Optional[BedrockAnthropicTokenUsageCallbackHandler]
] = ContextVar("bedrock_anthropic_callback", default=None)
wandb_tracing_callback_var: ContextVar[Optional[WandbTracer]] = ContextVar(
"tracing_wandb_callback", default=None
)
comet_tracing_callback_var: ContextVar[Optional[CometTracer]] = ContextVar( # noqa: E501
"tracing_comet_callback", default=None
)
register_configure_hook(openai_callback_var, True)
register_configure_hook(bedrock_anthropic_callback_var, True)
register_configure_hook(
wandb_tracing_callback_var, True, WandbTracer, "LANGCHAIN_WANDB_TRACING"
)
register_configure_hook(
comet_tracing_callback_var, True, CometTracer, "LANGCHAIN_COMET_TRACING"
)
[docs]@contextmanager
def get_openai_callback() -> Generator[OpenAICallbackHandler, None, None]:
"""在上下文管理器中获取OpenAI回调处理程序。
方便地公开令牌和成本信息。
返回:
OpenAICallbackHandler:OpenAI回调处理程序。
示例:
>>> with get_openai_callback() as cb:
... # 使用OpenAI回调处理程序
"""
cb = OpenAICallbackHandler()
openai_callback_var.set(cb)
yield cb
openai_callback_var.set(None)
[docs]@contextmanager
def get_bedrock_anthropic_callback() -> (
Generator[BedrockAnthropicTokenUsageCallbackHandler, None, None]
):
"""在上下文管理器中获取Bedrock人类回调处理程序。
方便地公开令牌和成本信息。
返回:
BedrockAnthropicTokenUsageCallbackHandler:
Bedrock人类回调处理程序。
示例:
>>> with get_bedrock_anthropic_callback() as cb:
... # 使用Bedrock人类回调处理程序
"""
cb = BedrockAnthropicTokenUsageCallbackHandler()
bedrock_anthropic_callback_var.set(cb)
yield cb
bedrock_anthropic_callback_var.set(None)
[docs]@contextmanager
def wandb_tracing_enabled(
session_name: str = "default",
) -> Generator[None, None, None]:
"""在上下文管理器中获取WandbTracer。
参数:
session_name (str, 可选): 会话的名称。
默认为"default"。
返回值:
None
示例:
>>> with wandb_tracing_enabled() as session:
... # 使用WandbTracer会话
"""
cb = WandbTracer()
wandb_tracing_callback_var.set(cb)
yield None
wandb_tracing_callback_var.set(None)