```diff
--- test_files/018-original.txt	2025-03-07 19:06:14
+++ test_files/018-modified.txt	2025-03-07 19:06:14
@@ -1,19 +1,38 @@
 import types
 import typing as t
+import warnings
 from inspect import Signature
 
-from langchain_core.tools import StructuredTool
+import pydantic
+import pydantic.error_wrappers
+import typing_extensions as te
+from langchain_core.tools import StructuredTool as BaseStructuredTool
 
-from composio.client.enums import Action, App, Tag
-from composio.constants import DEFAULT_ENTITY_ID
+from composio import ActionType, AppType, TagType
 from composio.tools import ComposioToolSet as BaseComposioToolSet
+from composio.tools.toolset import ProcessorsType
+from composio.utils import help_msg
+from composio.utils.pydantic import parse_pydantic_error
 from composio.utils.shared import (
     get_signature_format_from_schema_params,
     json_schema_to_model,
 )
 
 
-class ComposioToolSet(BaseComposioToolSet):
+class StructuredTool(BaseStructuredTool):
+    def run(self, *args, **kwargs):
+        try:
+            return super().run(*args, **kwargs)
+        except pydantic.ValidationError as e:
+            return {"successful": False, "error": parse_pydantic_error(e), "data": None}
+
+
+class ComposioToolSet(
+    BaseComposioToolSet,
+    runtime="langchain",
+    description_char_limit=1024,
+    action_name_char_limit=64,
+):
     """
     Composio toolset for Langchain framework.
 
@@ -44,7 +63,7 @@
         tools = composio_toolset.get_tools(apps=[App.GITHUB])
 
         # Define task
-        task = "Star a repo SamparkAI/docs on GitHub"
+        task = "Star a repo composiohq/docs on GitHub"
 
         # Define agent
         agent = create_openai_functions_agent(openai_client, tools, prompt)
@@ -55,41 +74,21 @@
     ```
     """
 
-    def __init__(
+    def _wrap_action(
         self,
-        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.
-
-        :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 prepare_python_function(
-        self, app, action, description, schema_params, entity_id
+        action: str,
+        description: str,
+        schema_params: t.Dict,
+        entity_id: t.Optional[str] = None,
     ):
         def function(**kwargs: t.Any) -> t.Dict:
             """Wrapper function for composio action."""
+            self.logger.debug(f"Executing action: {action} with params: {kwargs}")
             return self.execute_action(
-                action=Action.from_app_and_action(
-                    app=app,
-                    name=action,
-                ),
+                action=action,
                 params=kwargs,
                 entity_id=entity_id or self.entity_id,
+                _check_requested_actions=True,
             )
 
         action_func = types.FunctionType(
@@ -114,33 +113,29 @@
         entity_id: t.Optional[str] = None,
     ) -> StructuredTool:
         """Wraps composio tool as Langchain StructuredTool object."""
-        app = schema["appName"]
         action = schema["name"]
         description = schema["description"]
         schema_params = schema["parameters"]
-
-        action_func = self.prepare_python_function(
-            app=app,
+        action_func = self._wrap_action(
             action=action,
             description=description,
             schema_params=schema_params,
             entity_id=entity_id,
         )
-
-        parameters = json_schema_to_model(
-            json_schema=schema_params,
-        )
-        return StructuredTool.from_function(
+        parameters = json_schema_to_model(json_schema=schema_params)
+        tool = StructuredTool.from_function(
             name=action,
             description=description,
             args_schema=parameters,
             return_schema=True,
             func=action_func,
         )
+        return tool  # type: ignore
 
+    @te.deprecated("Use `ComposioToolSet.get_tools` instead.\n", category=None)
     def get_actions(
         self,
-        actions: t.Sequence[Action],
+        actions: t.Sequence[ActionType],
         entity_id: t.Optional[str] = None,
     ) -> t.Sequence[StructuredTool]:
         """
@@ -148,36 +143,51 @@
 
         :param actions: List of actions to wrap
         :param entity_id: Entity ID to use for executing function calls.
+
         :return: Composio tools wrapped as `StructuredTool` objects
         """
+        warnings.warn(
+            "Use `ComposioToolSet.get_tools` instead.\n" + help_msg(),
+            DeprecationWarning,
+            stacklevel=2,
+        )
+        return self.get_tools(actions=actions, entity_id=entity_id)
 
-        return [
-            self._wrap_tool(
-                schema=tool.model_dump(exclude_none=True),
-                entity_id=entity_id or self.entity_id,
-            )
-            for tool in self.get_action_schemas(actions=actions)
-        ]
-
     def get_tools(
         self,
-        apps: t.Sequence[App],
-        tags: t.Optional[t.List[t.Union[str, Tag]]] = None,
+        actions: t.Optional[t.Sequence[ActionType]] = None,
+        apps: t.Optional[t.Sequence[AppType]] = None,
+        tags: t.Optional[t.List[TagType]] = None,
         entity_id: t.Optional[str] = None,
+        *,
+        processors: t.Optional[ProcessorsType] = None,
+        check_connected_accounts: bool = True,
     ) -> t.Sequence[StructuredTool]:
         """
         Get composio tools wrapped as Langchain StructuredTool objects.
 
+        :param actions: List of actions to wrap
         :param apps: List of apps to wrap
         :param tags: Filter the apps by given tags
-        :param entity_id: Entity ID to use for executing function calls.
+        :param entity_id: Entity ID for the function wrapper
+
         :return: Composio tools wrapped as `StructuredTool` objects
         """
-
+        self.validate_tools(apps=apps, actions=actions, tags=tags)
+        if processors is not None:
+            self._processor_helpers.merge_processors(processors)
         return [
             self._wrap_tool(
-                schema=tool.model_dump(exclude_none=True),
+                schema=tool.model_dump(
+                    exclude_none=True,
+                ),
                 entity_id=entity_id or self.entity_id,
             )
-            for tool in self.get_action_schemas(apps=apps, tags=tags)
+            for tool in self.get_action_schemas(
+                actions=actions,
+                apps=apps,
+                tags=tags,
+                check_connected_accounts=check_connected_accounts,
+                _populate_requested=True,
+            )
         ]
```
