From a6a7de79418e4dcaaf091efde88970d6f3e5a773 Mon Sep 17 00:00:00 2001 From: cthomas Date: Mon, 26 May 2025 13:38:42 -0700 Subject: [PATCH] feat(asyncify): migrate delete provider (#2439) --- letta/server/rest_api/routers/v1/providers.py | 6 +++--- letta/services/provider_manager.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/letta/server/rest_api/routers/v1/providers.py b/letta/server/rest_api/routers/v1/providers.py index 9a336a47..9eceab55 100644 --- a/letta/server/rest_api/routers/v1/providers.py +++ b/letta/server/rest_api/routers/v1/providers.py @@ -87,7 +87,7 @@ def check_provider( @router.delete("/{provider_id}", response_model=None, operation_id="delete_provider") -def delete_provider( +async def delete_provider( provider_id: str, actor_id: Optional[str] = Header(None, alias="user_id"), server: "SyncServer" = Depends(get_letta_server), @@ -96,8 +96,8 @@ def delete_provider( Delete an existing custom provider """ try: - actor = server.user_manager.get_user_or_default(user_id=actor_id) - server.provider_manager.delete_provider_by_id(provider_id=provider_id, actor=actor) + actor = await server.user_manager.get_actor_or_default_async(actor_id=actor_id) + await server.provider_manager.delete_provider_by_id_async(provider_id=provider_id, actor=actor) return JSONResponse(status_code=status.HTTP_200_OK, content={"message": f"Provider id={provider_id} successfully deleted"}) except NoResultFound: raise HTTPException(status_code=404, detail=f"Provider provider_id={provider_id} not found for user_id={actor.id}.") diff --git a/letta/services/provider_manager.py b/letta/services/provider_manager.py index 38b42c4c..df406391 100644 --- a/letta/services/provider_manager.py +++ b/letta/services/provider_manager.py @@ -86,6 +86,21 @@ class ProviderManager: session.commit() + @enforce_types + @trace_method + async def delete_provider_by_id_async(self, provider_id: str, actor: PydanticUser): + """Delete a provider.""" + async with db_registry.async_session() as session: + # Clear api key field + existing_provider = await ProviderModel.read_async(db_session=session, identifier=provider_id, actor=actor) + existing_provider.api_key = None + await existing_provider.update_async(session, actor=actor) + + # Soft delete in provider table + await existing_provider.delete_async(session, actor=actor) + + await session.commit() + @enforce_types @trace_method def list_providers(