feat: Catch composio errors and return informative errors in the endpoint (#2247)

This commit is contained in:
Matthew Zhou
2024-12-13 11:48:07 -08:00
committed by GitHub
parent 338c142474
commit 65fd731917

View File

@@ -1,6 +1,8 @@
from typing import List, Optional
from composio.client.collections import ActionModel, AppModel
from composio.client.enums.base import EnumStringNotFound
from composio.exceptions import ComposioSDKError
from fastapi import APIRouter, Body, Depends, Header, HTTPException
from letta.errors import LettaToolCreateError
@@ -248,8 +250,26 @@ def add_composio_tool(
"""
actor = server.get_user_or_default(user_id=user_id)
composio_api_key = get_composio_key(server, actor=actor)
tool_create = ToolCreate.from_composio(action_name=composio_action_name, api_key=composio_api_key)
return server.tool_manager.create_or_update_tool(pydantic_tool=Tool(**tool_create.model_dump()), actor=actor)
try:
tool_create = ToolCreate.from_composio(action_name=composio_action_name, api_key=composio_api_key)
return server.tool_manager.create_or_update_tool(pydantic_tool=Tool(**tool_create.model_dump()), actor=actor)
except EnumStringNotFound:
raise HTTPException(
status_code=400, # Bad Request
detail={
"message": f"Cannot find composio action with name `{composio_action_name}`.",
"composio_action_name": composio_action_name,
},
)
except ComposioSDKError:
raise HTTPException(
status_code=400, # Bad Request
detail={
"message": f"No connected account found for tool `{composio_action_name}`. You need to connect the relevant app in Composio order to use the tool.",
"composio_action_name": composio_action_name,
},
)
# TODO: Factor this out to somewhere else