diff --git a/litellm/proxy/management_endpoints/team_callback_endpoints.py b/litellm/proxy/management_endpoints/team_callback_endpoints.py index 5352cec80c9..4eec7c6b7c0 100644 --- a/litellm/proxy/management_endpoints/team_callback_endpoints.py +++ b/litellm/proxy/management_endpoints/team_callback_endpoints.py @@ -6,7 +6,7 @@ Use this when each team should control its own callbacks import json import traceback -from typing import Optional +from typing import List, Optional from fastapi import APIRouter, Depends, Header, HTTPException, Request, status @@ -102,66 +102,30 @@ async def add_team_callbacks( # store team callback settings in metadata team_metadata = _existing_team.metadata - team_callback_settings = team_metadata.get("callback_settings", {}) - # expect callback settings to be - team_callback_settings_obj = TeamCallbackMetadata(**team_callback_settings) + team_callback_settings: List[dict] = team_metadata.get( + "logging" + ) # will be dict of type AddTeamCallback + if team_callback_settings is None or not isinstance( + team_callback_settings, list + ): + team_callback_settings = [] - if data.callback_type == "success": - if team_callback_settings_obj.success_callback is None: - team_callback_settings_obj.success_callback = [] - - if data.callback_name in team_callback_settings_obj.success_callback: + ## check if it already exists, for the same callback event + for callback in team_callback_settings: + if ( + callback.get("callback_name") == data.callback_name + and callback.get("callback_type") == data.callback_type + ): raise ProxyException( - message=f"callback_name = {data.callback_name} already exists in success_callback, for team_id = {team_id}. \n Existing failure_callback = {team_callback_settings_obj.success_callback}", + message=f"callback_name = {data.callback_name} already exists in team_callback_settings, for team_id = {team_id} and event = {data.callback_type}", code=status.HTTP_400_BAD_REQUEST, type=ProxyErrorTypes.bad_request_error, param="callback_name", ) - team_callback_settings_obj.success_callback.append(data.callback_name) - elif data.callback_type == "failure": - if team_callback_settings_obj.failure_callback is None: - team_callback_settings_obj.failure_callback = [] + team_callback_settings.append(data.model_dump()) - if data.callback_name in team_callback_settings_obj.failure_callback: - raise ProxyException( - message=f"callback_name = {data.callback_name} already exists in failure_callback, for team_id = {team_id}. \n Existing failure_callback = {team_callback_settings_obj.failure_callback}", - code=status.HTTP_400_BAD_REQUEST, - type=ProxyErrorTypes.bad_request_error, - param="callback_name", - ) - team_callback_settings_obj.failure_callback.append(data.callback_name) - elif data.callback_type == "success_and_failure": - if team_callback_settings_obj.success_callback is None: - team_callback_settings_obj.success_callback = [] - if team_callback_settings_obj.failure_callback is None: - team_callback_settings_obj.failure_callback = [] - if data.callback_name in team_callback_settings_obj.success_callback: - raise ProxyException( - message=f"callback_name = {data.callback_name} already exists in success_callback, for team_id = {team_id}. \n Existing success_callback = {team_callback_settings_obj.success_callback}", - code=status.HTTP_400_BAD_REQUEST, - type=ProxyErrorTypes.bad_request_error, - param="callback_name", - ) - - if data.callback_name in team_callback_settings_obj.failure_callback: - raise ProxyException( - message=f"callback_name = {data.callback_name} already exists in failure_callback, for team_id = {team_id}. \n Existing failure_callback = {team_callback_settings_obj.failure_callback}", - code=status.HTTP_400_BAD_REQUEST, - type=ProxyErrorTypes.bad_request_error, - param="callback_name", - ) - - team_callback_settings_obj.success_callback.append(data.callback_name) - team_callback_settings_obj.failure_callback.append(data.callback_name) - for var, value in data.callback_vars.items(): - if team_callback_settings_obj.callback_vars is None: - team_callback_settings_obj.callback_vars = {} - team_callback_settings_obj.callback_vars[var] = value - - team_callback_settings_obj_dict = team_callback_settings_obj.model_dump() - - team_metadata["callback_settings"] = team_callback_settings_obj_dict + team_metadata["logging"] = team_callback_settings team_metadata_json = json.dumps(team_metadata) # update team_metadata new_team_row = await prisma_client.db.litellm_teamtable.update( @@ -178,7 +142,7 @@ async def add_team_callbacks( except ProxyException as e: raise e except Exception as e: - verbose_proxy_logger.error( + verbose_proxy_logger.exception( "litellm.proxy.proxy_server.add_team_callbacks(): Exception occured - {}".format( str(e) )