Skip to content

Commit

Permalink
Fixed metadata injection for local actions
Browse files Browse the repository at this point in the history
  • Loading branch information
mkrjn99 committed Feb 10, 2025
1 parent 71066d9 commit 9f05821
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 0 deletions.
12 changes: 12 additions & 0 deletions python/composio/tools/toolset.py
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,11 @@ def add_metadata(self, action: Action, metadata: t.Optional[t.Dict]) -> t.Dict:
metadata.update(self._get_metadata(key=action))
return metadata

def add_local_action_metadata(self, action_type: ActionType, metadata: t.Optional[t.Dict]) -> t.Dict:
metadata = metadata or {}
metadata.update(self._get_metadata(key=action_type))
return metadata


class FileIOHelper(WithLogger):

Expand Down Expand Up @@ -1858,6 +1863,7 @@ def execute_action(
:param connected_account_id: Connection ID for executing the remote action
:return: Output object from the function call
"""
original_action_type = action
action = Action(action)
if self._version_lock is not None:
(action,) = self._version_lock.apply(actions=[action])
Expand All @@ -1877,6 +1883,12 @@ def execute_action(
action=action,
request=params,
)

if action.is_local:
metadata = self._processor_helpers.add_local_action_metadata(
action_type=original_action_type, metadata=metadata
)

if not action.is_runtime:
params = self._processor_helpers.process_request(
action=action, request=params
Expand Down
33 changes: 33 additions & 0 deletions python/tests/test_tools/test_metadata_injection.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from pydantic import BaseModel, Field

from composio import ComposioToolSet, action


class RequestClass(BaseModel):
pass


class ResponseClass(BaseModel):
pass

metadata_value = None
API_KEY_KEY = "api_key"
API_KEY_VALUE = "api_key_value"

@action(toolname="tool")
def action_metadata_injection(request: RequestClass, metadata: dict) -> ResponseClass:
"""
Test metadata injection.
"""
global metadata_value
metadata_value = metadata[API_KEY_KEY]
return ResponseClass()


def test_metadata_injection() -> None:
toolset = ComposioToolSet(metadata={action_metadata_injection: {API_KEY_KEY: API_KEY_VALUE}})
toolset.execute_action(
action=action_metadata_injection,
params={},
)
assert (metadata_value == API_KEY_VALUE)

0 comments on commit 9f05821

Please sign in to comment.