diff --git a/examples/foundational/14b-function-calling-anthropic-video.py b/examples/foundational/14b-function-calling-anthropic-video.py index f2364cbee..d526ce4aa 100644 --- a/examples/foundational/14b-function-calling-anthropic-video.py +++ b/examples/foundational/14b-function-calling-anthropic-video.py @@ -97,7 +97,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): llm = AnthropicLLMService( api_key=os.getenv("ANTHROPIC_API_KEY"), model="claude-3-7-sonnet-latest", - params=AnthropicLLMService.InputParams(enable_prompt_caching_beta=True), + params=AnthropicLLMService.InputParams(enable_prompt_caching=True), ) llm.register_function("get_weather", get_weather) llm.register_function("get_image", get_image) diff --git a/examples/foundational/14z-function-calling-anthropic-universal-context.py b/examples/foundational/14z-function-calling-anthropic-universal-context.py index 9129e52e3..30d668ddc 100644 --- a/examples/foundational/14z-function-calling-anthropic-universal-context.py +++ b/examples/foundational/14z-function-calling-anthropic-universal-context.py @@ -98,7 +98,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): llm = AnthropicLLMService( api_key=os.getenv("ANTHROPIC_API_KEY"), model="claude-3-7-sonnet-latest", - params=AnthropicLLMService.InputParams(enable_prompt_caching_beta=True), + params=AnthropicLLMService.InputParams(enable_prompt_caching=True), ) llm.register_function("get_weather", get_weather) llm.register_function("get_image", get_image) diff --git a/src/pipecat/adapters/services/anthropic_adapter.py b/src/pipecat/adapters/services/anthropic_adapter.py index a32857d8a..a507f7211 100644 --- a/src/pipecat/adapters/services/anthropic_adapter.py +++ b/src/pipecat/adapters/services/anthropic_adapter.py @@ -62,9 +62,11 @@ class AnthropicLLMAdapter(BaseLLMAdapter[AnthropicLLMInvocationParams]): messages = self._from_universal_context_messages(self._get_messages(context)) return { "system": messages.system, - "messages": self._with_cache_control_markers(messages.messages) - if enable_prompt_caching - else messages.messages, + "messages": ( + self._with_cache_control_markers(messages.messages) + if enable_prompt_caching + else messages.messages + ), # NOTE: LLMContext's tools are guaranteed to be a ToolsSchema (or NOT_GIVEN) "tools": self.from_standard_tools(context.tools), } diff --git a/src/pipecat/services/anthropic/llm.py b/src/pipecat/services/anthropic/llm.py index e059842ef..39d66d5fe 100644 --- a/src/pipecat/services/anthropic/llm.py +++ b/src/pipecat/services/anthropic/llm.py @@ -115,7 +115,12 @@ class AnthropicLLMService(LLMService): """Input parameters for Anthropic model inference. Parameters: - enable_prompt_caching_beta: Whether to enable beta prompt caching feature. + enable_prompt_caching: Whether to enable the prompt caching feature. + enable_prompt_caching_beta (deprecated): Whether to enable the beta prompt caching feature. + + .. deprecated:: 0.0.83 + Use the `enable_prompt_caching` parameter instead. + max_tokens: Maximum tokens to generate. Must be at least 1. temperature: Sampling temperature between 0.0 and 1.0. top_k: Top-k sampling parameter. @@ -123,7 +128,8 @@ class AnthropicLLMService(LLMService): extra: Additional parameters to pass to the API. """ - enable_prompt_caching_beta: Optional[bool] = False + enable_prompt_caching: Optional[bool] = None + enable_prompt_caching_beta: Optional[bool] = None max_tokens: Optional[int] = Field(default_factory=lambda: 4096, ge=1) temperature: Optional[float] = Field(default_factory=lambda: NOT_GIVEN, ge=0.0, le=1.0) top_k: Optional[int] = Field(default_factory=lambda: NOT_GIVEN, ge=0) @@ -162,7 +168,15 @@ class AnthropicLLMService(LLMService): self._retry_on_timeout = retry_on_timeout self._settings = { "max_tokens": params.max_tokens, - "enable_prompt_caching_beta": params.enable_prompt_caching_beta or False, + "enable_prompt_caching": ( + params.enable_prompt_caching + if params.enable_prompt_caching is not None + else ( + params.enable_prompt_caching_beta + if params.enable_prompt_caching_beta is not None + else False + ) + ), "temperature": params.temperature, "top_k": params.top_k, "top_p": params.top_p, @@ -222,7 +236,7 @@ class AnthropicLLMService(LLMService): if isinstance(context, LLMContext): adapter: AnthropicLLMAdapter = self.get_llm_adapter() params = adapter.get_llm_invocation_params( - context, enable_prompt_caching=self._settings["enable_prompt_caching_beta"] + context, enable_prompt_caching=self._settings["enable_prompt_caching"] ) messages = params["messages"] system = params["system"] @@ -242,15 +256,6 @@ class AnthropicLLMService(LLMService): return response.content[0].text - @property - def enable_prompt_caching_beta(self) -> bool: - """Check if prompt caching beta feature is enabled. - - Returns: - True if prompt caching is enabled. - """ - return self._enable_prompt_caching_beta - def create_context_aggregator( self, context: OpenAILLMContext, @@ -287,14 +292,14 @@ class AnthropicLLMService(LLMService): if isinstance(context, LLMContext): adapter: AnthropicLLMAdapter = self.get_llm_adapter() params = adapter.get_llm_invocation_params( - context, enable_prompt_caching=self._settings["enable_prompt_caching_beta"] + context, enable_prompt_caching=self._settings["enable_prompt_caching"] ) return params # Anthropic-specific context messages = ( context.get_messages_with_cache_control_markers() - if self._settings["enable_prompt_caching_beta"] + if self._settings["enable_prompt_caching"] else context.messages ) return AnthropicLLMInvocationParams( @@ -494,7 +499,7 @@ class AnthropicLLMService(LLMService): await self._update_settings(frame.settings) elif isinstance(frame, LLMEnablePromptCachingFrame): logger.debug(f"Setting enable prompt caching to: [{frame.enable}]") - self._settings["enable_prompt_caching_beta"] = frame.enable + self._settings["enable_prompt_caching"] = frame.enable else: await self.push_frame(frame, direction)