Source code for langchain_google_vertexai.utils

from datetime import datetime, timedelta
from typing import List, Optional

from langchain_core.messages import BaseMessage
from vertexai.preview import caching  # type: ignore

from langchain_google_vertexai.chat_models import (
    ChatVertexAI,
    _parse_chat_history_gemini,
)
from langchain_google_vertexai.functions_utils import (
    _format_to_gapic_tool,
    _format_tool_config,
    _ToolConfigDict,
    _ToolsType,
)


[docs]def create_context_cache( model: ChatVertexAI, messages: List[BaseMessage], expire_time: Optional[datetime] = None, time_to_live: Optional[timedelta] = None, tools: Optional[_ToolsType] = None, tool_config: Optional[_ToolConfigDict] = None, ) -> str: """Creates a cache for content in some model. Args: model: ChatVertexAI model. Must be at least gemini-1.5 pro or flash. messages: List of messages to cache. expire_time: Timestamp of when this resource is considered expired. At most one of expire_time and ttl can be set. If neither is set, default TTL on the API side will be used (currently 1 hour). time_to_live: The TTL for this resource. If provided, the expiration time is computed: created_time + TTL. At most one of expire_time and ttl can be set. If neither is set, default TTL on the API side will be used (currently 1 hour). tools: A list of tool definitions to bind to this chat model. Can be a pydantic model, callable, or BaseTool. Pydantic models, callables, and BaseTools will be automatically converted to their schema dictionary representation. tool_config: Optional. Immutable. Tool config. This config is shared for all tools. Raises: ValueError: If model doesn't support context catching. Returns: String with the identificator of the created cache. """ if not model._is_gemini_advanced: error_msg = f"Model {model.full_model_name} doesn't support context catching" raise ValueError(error_msg) system_instruction, contents = _parse_chat_history_gemini(messages, model.project) if tool_config: tool_config = _format_tool_config(tool_config) if tools is not None: tools = _format_to_gapic_tool(tools) cached_content = caching.CachedContent.create( model_name=model.full_model_name, system_instruction=system_instruction, contents=contents, ttl=time_to_live, expire_time=expire_time, tool_config=tool_config, tools=tools, ) return cached_content.name