Source code for langchain_google_vertexai.callbacks
import threading
from typing import Any, Dict, List
from langchain_core.callbacks import BaseCallbackHandler
from langchain_core.outputs import LLMResult
[docs]class VertexAICallbackHandler(BaseCallbackHandler):
"""Callback Handler that tracks VertexAI info."""
prompt_tokens: int = 0
prompt_characters: int = 0
completion_tokens: int = 0
completion_characters: int = 0
successful_requests: int = 0
[docs] def __init__(self) -> None:
super().__init__()
self._lock = threading.Lock()
def __repr__(self) -> str:
return (
f"\tPrompt tokens: {self.prompt_tokens}\n"
f"\tPrompt characters: {self.prompt_characters}\n"
f"\tCompletion tokens: {self.completion_tokens}\n"
f"\tCompletion characters: {self.completion_characters}\n"
f"Successful requests: {self.successful_requests}\n"
)
@property
def always_verbose(self) -> bool:
"""Whether to call verbose callbacks even if verbose is False."""
return True
[docs] def on_llm_start(
self, serialized: Dict[str, Any], prompts: List[str], **kwargs: Any
) -> None:
"""Runs when LLM starts running."""
pass
[docs] def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
"""Runs on new LLM token. Only available when streaming is enabled."""
pass
[docs] def on_llm_end(self, response: LLMResult, **kwargs: Any) -> None:
"""Collects token usage."""
completion_tokens, prompt_tokens = 0, 0
completion_characters, prompt_characters = 0, 0
for generations in response.generations:
if len(generations) > 0 and generations[0].generation_info:
usage_metadata = generations[0].generation_info.get(
"usage_metadata", {}
)
completion_tokens += usage_metadata.get("candidates_token_count", 0)
prompt_tokens += usage_metadata.get("prompt_token_count", 0)
completion_characters += usage_metadata.get(
"candidates_billable_characters", 0
)
prompt_characters += usage_metadata.get("prompt_billable_characters", 0)
with self._lock:
self.prompt_characters += prompt_characters
self.prompt_tokens += prompt_tokens
self.completion_characters += completion_characters
self.completion_tokens += completion_tokens
self.successful_requests += 1