From 0c3c5e5c7d3a3dc499eaea81c082d19b8ec1e57d Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Wed, 22 Apr 2026 11:54:20 -0400 Subject: [PATCH] Widen ToolsSchema.standard_tools to Sequence for covariance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `ToolsSchema.__init__` declared `standard_tools: list[FunctionSchema | DirectFunction]`. Callers (`BaseLLMAdapter`, `MCPService`) pass in `list[FunctionSchema]`, which is not assignable to the union list because `list` is invariant in its element type. Widen the parameter to `Sequence[...]` (covariant) so `list[X]` and `list[X | Y]` both fit. A narrower `list[FunctionSchema]` is still accepted, and nothing in this class mutates the argument — the constructor immediately copies it via `_map_standard_tools`. Also correct the `custom_tools` property return type to include `None`, matching the stored `_custom_tools` field. This single edit clears the pyright errors for three ignore-list entries: `tools_schema.py`, `base_llm_adapter.py`, and `mcp_service.py`. --- pyrightconfig.json | 3 --- src/pipecat/adapters/schemas/tools_schema.py | 5 +++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/pyrightconfig.json b/pyrightconfig.json index d087425bf..75d7ca777 100644 --- a/pyrightconfig.json +++ b/pyrightconfig.json @@ -6,9 +6,7 @@ "exclude": ["**/*_pb2.py", "**/__pycache__"], "ignore": [ "tests", - "src/pipecat/adapters/base_llm_adapter.py", "src/pipecat/adapters/schemas/direct_function.py", - "src/pipecat/adapters/schemas/tools_schema.py", "src/pipecat/adapters/services/anthropic_adapter.py", "src/pipecat/adapters/services/aws_nova_sonic_adapter.py", "src/pipecat/adapters/services/bedrock_adapter.py", @@ -78,7 +76,6 @@ "src/pipecat/services/kokoro/tts.py", "src/pipecat/services/llm_service.py", "src/pipecat/services/lmnt/tts.py", - "src/pipecat/services/mcp_service.py", "src/pipecat/services/mem0/memory.py", "src/pipecat/services/mistral/llm.py", "src/pipecat/services/mistral/stt.py", diff --git a/src/pipecat/adapters/schemas/tools_schema.py b/src/pipecat/adapters/schemas/tools_schema.py index 28c2b9b88..147014f16 100644 --- a/src/pipecat/adapters/schemas/tools_schema.py +++ b/src/pipecat/adapters/schemas/tools_schema.py @@ -10,6 +10,7 @@ This module provides schemas for managing both standardized function tools and custom adapter-specific tools in the Pipecat framework. """ +from collections.abc import Sequence from enum import Enum from typing import Any @@ -39,7 +40,7 @@ class ToolsSchema: def __init__( self, - standard_tools: list[FunctionSchema | DirectFunction], + standard_tools: Sequence[FunctionSchema | DirectFunction], custom_tools: dict[AdapterType, list[dict[str, Any]]] | None = None, ) -> None: """Initialize the tools schema. @@ -75,7 +76,7 @@ class ToolsSchema: return self._standard_tools @property - def custom_tools(self) -> dict[AdapterType, list[dict[str, Any]]]: + def custom_tools(self) -> dict[AdapterType, list[dict[str, Any]]] | None: """Get the custom tools dictionary. Returns: