diff --git a/letta/client/client.py b/letta/client/client.py index f4dfdc3d..711f88e3 100644 --- a/letta/client/client.py +++ b/letta/client/client.py @@ -1455,12 +1455,14 @@ class RESTClient(AbstractClient): Returns: id (str): ID of the tool (`None` if not found) """ - response = requests.get(f"{self.base_url}/{self.api_prefix}/tools/name/{tool_name}", headers=self.headers) - if response.status_code == 404: - return None - elif response.status_code != 200: + response = requests.get(f"{self.base_url}/{self.api_prefix}/tools", headers=self.headers) + if response.status_code != 200: raise ValueError(f"Failed to get tool: {response.text}") - return response.json() + + tools = [tool for tool in [Tool(**tool) for tool in response.json()] if tool.name == tool_name] + if not tools: + return None + return tools[0].id def upsert_base_tools(self) -> List[Tool]: response = requests.post(f"{self.base_url}/{self.api_prefix}/tools/add-base-tools/", headers=self.headers) diff --git a/letta/server/rest_api/routers/v1/tools.py b/letta/server/rest_api/routers/v1/tools.py index 8ea4d037..4fee8e48 100644 --- a/letta/server/rest_api/routers/v1/tools.py +++ b/letta/server/rest_api/routers/v1/tools.py @@ -48,23 +48,6 @@ def get_tool( return tool -@router.get("/name/{tool_name}", response_model=str, operation_id="get_tool_id_by_name") -def get_tool_id( - tool_name: str, - server: SyncServer = Depends(get_letta_server), - user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present -): - """ - Get a tool ID by name - """ - actor = server.user_manager.get_user_or_default(user_id=user_id) - tool = server.tool_manager.get_tool_by_name(tool_name=tool_name, actor=actor) - if tool: - return tool.id - else: - raise HTTPException(status_code=404, detail=f"Tool with name {tool_name} and organization id {actor.organization_id} not found.") - - @router.get("/", response_model=List[Tool], operation_id="list_tools") def list_tools( cursor: Optional[str] = None, diff --git a/tests/test_v1_routes.py b/tests/test_v1_routes.py index 8394e61e..0dbb2bdb 100644 --- a/tests/test_v1_routes.py +++ b/tests/test_v1_routes.py @@ -204,27 +204,6 @@ def test_get_tool_404(client, mock_sync_server, add_integers_tool): assert response.json()["detail"] == f"Tool with id {add_integers_tool.id} not found." -def test_get_tool_id(client, mock_sync_server, add_integers_tool): - mock_sync_server.tool_manager.get_tool_by_name.return_value = add_integers_tool - - response = client.get(f"/v1/tools/name/{add_integers_tool.name}", headers={"user_id": "test_user"}) - - assert response.status_code == 200 - assert response.json() == add_integers_tool.id - mock_sync_server.tool_manager.get_tool_by_name.assert_called_once_with( - tool_name=add_integers_tool.name, actor=mock_sync_server.user_manager.get_user_or_default.return_value - ) - - -def test_get_tool_id_404(client, mock_sync_server): - mock_sync_server.tool_manager.get_tool_by_name.return_value = None - - response = client.get("/v1/tools/name/UnknownTool", headers={"user_id": "test_user"}) - - assert response.status_code == 404 - assert "Tool with name UnknownTool" in response.json()["detail"] - - def test_list_tools(client, mock_sync_server, add_integers_tool): mock_sync_server.tool_manager.list_tools.return_value = [add_integers_tool]