feat: Catch composio errors and return informative errors in the endpoint (#2247)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user