Files
composiohq--composio/python/composio/core/provider/base.py
T
2026-07-13 12:38:34 +08:00

74 lines
2.0 KiB
Python

"""
BaseProvider module
Defines the barebones provider metaclass that needs to be subclassed for every provider.
"""
from __future__ import annotations
import typing as t
import typing_extensions as te
if t.TYPE_CHECKING:
from composio.core.models.tools import Modifiers, ToolExecutionResponse
TTool = t.TypeVar("TTool")
TToolCollection = t.TypeVar("TToolCollection")
class ExecuteToolFn(t.Protocol):
def __call__(
self,
slug: str,
arguments: t.Dict,
*,
modifiers: t.Optional[Modifiers] = None,
user_id: t.Optional[str] = None,
) -> ToolExecutionResponse:
"""
Execute a wrapped tool by slug, passing an arbitrary input dict.
This function is used by the providers to execute tools for the helper methods.
Returns a dict with the following keys:
- data: The data returned by the tool.
- error: The error returned by the tool.
- successful: Whether the tool was successful.
"""
...
class SchemaConfig(te.TypedDict):
skip_defaults: te.NotRequired[bool]
class BaseProviderConfig(te.TypedDict):
schema_config: te.NotRequired[SchemaConfig]
class BaseProvider(t.Generic[TTool, TToolCollection]):
"""
BaseProvider class
All providers should inherit from this class and implement `wrap_tools` so that
they can be used with the core Composio class.
"""
name: str
"""Name of the provider"""
__schema_skip_defaults__ = False
execute_tool: ExecuteToolFn
"""
The function to execute a tool for the provider's helper methods.
This is automatically injected by the core SDK.
"""
def __init__(self, **kwargs: t.Unpack[BaseProviderConfig]) -> None:
self.skip_default = kwargs.get("schema_config", {}).get(
"skip_defaults", self.__schema_skip_defaults__
)
def set_execute_tool_fn(self, execute_tool_fn: ExecuteToolFn) -> None:
self.execute_tool = execute_tool_fn