From 8d6240244d45b006690dcbd0968022baf9c11581 Mon Sep 17 00:00:00 2001 From: Karan Vaidya Date: Fri, 7 Jun 2024 18:09:22 +0530 Subject: [PATCH] Handle download response in file --- composio/constants.py | 5 +++++ composio/tools/__init__.py | 15 ++++++++++++++- examples/local_tools/langchain_math.py | 2 +- plugins/autogen/composio_autogen/toolset.py | 3 +++ plugins/claude/composio_claude/toolset.py | 7 +++++-- plugins/griptape/composio_griptape/toolset.py | 3 +++ plugins/julep/composio_julep/toolset.py | 3 +++ plugins/langchain/composio_langchain/toolset.py | 3 +++ plugins/lyzr/composio_lyzr/toolset.py | 3 +++ plugins/openai/composio_openai/toolset.py | 3 +++ 10 files changed, 43 insertions(+), 4 deletions(-) diff --git a/composio/constants.py b/composio/constants.py index 04685e46d..d9631ed99 100644 --- a/composio/constants.py +++ b/composio/constants.py @@ -12,6 +12,11 @@ Local cache directory name for composio CLI """ +LOCAL_OUTPUT_FILE_DIRECTORY_NAME = "output" +""" +Local output file directory name for composio tools +""" + USER_DATA_FILE_NAME = "user_data.json" """ Filename for storing user data. diff --git a/composio/tools/__init__.py b/composio/tools/__init__.py index a42a41237..a244bb600 100644 --- a/composio/tools/__init__.py +++ b/composio/tools/__init__.py @@ -3,6 +3,7 @@ """ import os +import time import typing as t from pathlib import Path @@ -13,6 +14,7 @@ ENV_COMPOSIO_API_KEY, LOCAL_CACHE_DIRECTORY_NAME, USER_DATA_FILE_NAME, + LOCAL_OUTPUT_FILE_DIRECTORY_NAME, ) from composio.exceptions import raise_api_key_missing from composio.storage.user import UserData @@ -28,6 +30,7 @@ def __init__( api_key: t.Optional[str] = None, base_url: t.Optional[str] = None, runtime: t.Optional[str] = None, + output_in_file: bool = False, entity_id: str = DEFAULT_ENTITY_ID, ) -> None: """ @@ -53,6 +56,7 @@ def __init__( ) self.runtime = runtime self.entity_id = entity_id + self.output_in_file = output_in_file def execute_action( self, @@ -71,4 +75,13 @@ def execute_action( """ if isinstance(action, str): action = Action(action) - return self.client.get_entity(entity_id).execute(action=action, params=params) + + output = self.client.get_entity(entity_id).execute(action=action, params=params) + if self.output_in_file: + if not os.path.exists(Path.home() / LOCAL_CACHE_DIRECTORY_NAME / LOCAL_OUTPUT_FILE_DIRECTORY_NAME): + os.makedirs(Path.home() / LOCAL_CACHE_DIRECTORY_NAME / LOCAL_OUTPUT_FILE_DIRECTORY_NAME) + output_file_path = Path.home() / LOCAL_CACHE_DIRECTORY_NAME / LOCAL_OUTPUT_FILE_DIRECTORY_NAME / f"{action.name}_{entity_id}_{time.time()}" + with open(output_file_path, 'w') as file: + file.write(str(output)) + return {"output_file": f"{output_file_path}"} + return output diff --git a/examples/local_tools/langchain_math.py b/examples/local_tools/langchain_math.py index 774d12c37..da16bb3a3 100644 --- a/examples/local_tools/langchain_math.py +++ b/examples/local_tools/langchain_math.py @@ -12,7 +12,7 @@ prompt = hub.pull("hwchase17/openai-functions-agent") # Get All the tools -tools = ComposioToolSet().get_tools([App.MATHEMATICAL]) +tools = ComposioToolSet(output_in_file=True).get_tools([App.MATHEMATICAL]) print(tools) diff --git a/plugins/autogen/composio_autogen/toolset.py b/plugins/autogen/composio_autogen/toolset.py index 22326a070..40ca971fe 100644 --- a/plugins/autogen/composio_autogen/toolset.py +++ b/plugins/autogen/composio_autogen/toolset.py @@ -24,6 +24,7 @@ def __init__( api_key: t.Optional[str] = None, base_url: t.Optional[str] = None, entity_id: str = DEFAULT_ENTITY_ID, + output_in_file: bool = False, ) -> None: """ Initialize composio toolset. @@ -33,12 +34,14 @@ def __init__( :param api_key: Composio API key :param base_url: Base URL for the Composio API server :param entity_id: Entity ID for making function calls + :param output_in_file: Whether to write output to a file """ super().__init__( api_key=api_key, base_url=base_url, runtime="autogen", entity_id=entity_id, + output_in_file=output_in_file, ) self.caller = caller self.executor = executor diff --git a/plugins/claude/composio_claude/toolset.py b/plugins/claude/composio_claude/toolset.py index 6044a2f82..5db9ac2b8 100644 --- a/plugins/claude/composio_claude/toolset.py +++ b/plugins/claude/composio_claude/toolset.py @@ -5,11 +5,11 @@ from composio.client.enums import Action, App, Tag from composio.constants import DEFAULT_ENTITY_ID -from composio.tools import ComposioToolSet +from composio.tools import ComposioToolSet as BaseComposioToolSet from composio.tools.schema import ClaudeSchema, SchemaType -class ComposioToolset(ComposioToolSet): +class ComposioToolset(BaseComposioToolSet): """ Composio toolset for Anthropic Claude platform. @@ -55,6 +55,7 @@ def __init__( api_key: t.Optional[str] = None, base_url: t.Optional[str] = None, entity_id: str = DEFAULT_ENTITY_ID, + output_in_file: bool = False, ) -> None: """ Initialize composio toolset. @@ -62,12 +63,14 @@ def __init__( :param api_key: Composio API key :param base_url: Base URL for the Composio API server :param entity_id: Entity ID for making function calls + :param output_in_file: Whether to write output to a file """ super().__init__( api_key=api_key, base_url=base_url, runtime="claude", entity_id=entity_id, + output_in_file=output_in_file, ) self.schema = SchemaType.CLAUDE diff --git a/plugins/griptape/composio_griptape/toolset.py b/plugins/griptape/composio_griptape/toolset.py index df914ea5a..6b3dacf73 100644 --- a/plugins/griptape/composio_griptape/toolset.py +++ b/plugins/griptape/composio_griptape/toolset.py @@ -48,6 +48,7 @@ def __init__( api_key: t.Optional[str] = None, base_url: t.Optional[str] = None, entity_id: str = DEFAULT_ENTITY_ID, + output_in_file: bool = False, ) -> None: """ Initialize composio toolset. @@ -55,12 +56,14 @@ def __init__( :param api_key: Composio API key :param base_url: Base URL for the Composio API server :param entity_id: Entity ID for making function calls + :param output_in_file: Whether to write output to a file """ super().__init__( api_key=api_key, base_url=base_url, runtime="griptape", entity_id=entity_id, + output_in_file=output_in_file, ) def _wrap_tool( diff --git a/plugins/julep/composio_julep/toolset.py b/plugins/julep/composio_julep/toolset.py index e2ad22c3c..b86a39d50 100644 --- a/plugins/julep/composio_julep/toolset.py +++ b/plugins/julep/composio_julep/toolset.py @@ -19,6 +19,7 @@ def __init__( api_key: t.Optional[str] = None, base_url: t.Optional[str] = None, entity_id: str = DEFAULT_ENTITY_ID, + output_in_file: bool = False, ) -> None: """ Initialize composio toolset. @@ -26,11 +27,13 @@ def __init__( :param api_key: Composio API key :param base_url: Base URL for the Composio API server :param entity_id: Entity ID for making function calls + :param output_in_file: Whether to write output to a file """ super().__init__( api_key, base_url, entity_id=entity_id, + output_in_file=output_in_file, ) self.runtime = "julep" diff --git a/plugins/langchain/composio_langchain/toolset.py b/plugins/langchain/composio_langchain/toolset.py index f6433cc25..25136a709 100644 --- a/plugins/langchain/composio_langchain/toolset.py +++ b/plugins/langchain/composio_langchain/toolset.py @@ -60,6 +60,7 @@ def __init__( api_key: t.Optional[str] = None, base_url: t.Optional[str] = None, entity_id: str = DEFAULT_ENTITY_ID, + output_in_file: bool = False, ) -> None: """ Initialize composio toolset. @@ -67,12 +68,14 @@ def __init__( :param api_key: Composio API key :param base_url: Base URL for the Composio API server :param entity_id: Entity ID for making function calls + :param output_in_file: Whether to write output to a file """ super().__init__( api_key=api_key, base_url=base_url, runtime="langchain", entity_id=entity_id, + output_in_file=output_in_file, ) def _wrap_tool( diff --git a/plugins/lyzr/composio_lyzr/toolset.py b/plugins/lyzr/composio_lyzr/toolset.py index f87b68dca..a98c2d492 100644 --- a/plugins/lyzr/composio_lyzr/toolset.py +++ b/plugins/lyzr/composio_lyzr/toolset.py @@ -27,6 +27,7 @@ def __init__( api_key: t.Optional[str] = None, base_url: t.Optional[str] = None, entity_id: str = DEFAULT_ENTITY_ID, + output_in_file: bool = False, ) -> None: """ Initialize composio toolset. @@ -34,12 +35,14 @@ def __init__( :param api_key: Composio API key :param base_url: Base URL for the Composio API server :param entity_id: Entity ID for making function calls + :param output_in_file: Whether to write output to a file """ super().__init__( api_key=api_key, base_url=base_url, runtime="lyzr", entity_id=entity_id, + output_in_file=output_in_file, ) def _wrap_tool( diff --git a/plugins/openai/composio_openai/toolset.py b/plugins/openai/composio_openai/toolset.py index 896b97c5f..349654ecb 100644 --- a/plugins/openai/composio_openai/toolset.py +++ b/plugins/openai/composio_openai/toolset.py @@ -67,6 +67,7 @@ def __init__( api_key: t.Optional[str] = None, base_url: t.Optional[str] = None, entity_id: str = DEFAULT_ENTITY_ID, + output_in_file: bool = False, ) -> None: """ Initialize composio toolset. @@ -74,12 +75,14 @@ def __init__( :param api_key: Composio API key :param base_url: Base URL for the Composio API server :param entity_id: Entity ID for making function calls + :param output_in_file: Whether to write output to a file """ super().__init__( api_key, base_url, runtime="openai", entity_id=entity_id, + output_in_file=output_in_file, ) self.schema = SchemaType.OPENAI