fix(team_callback_endpoints.py): fix adding callbacks to teams

Resolves error caused by the migration to a standard 'logging' field in metadata
This commit is contained in:
Krrish Dholakia 2025-09-17 19:01:34 -07:00
parent 83522016f2
commit c620d76fe4

View file

@ -6,7 +6,7 @@ Use this when each team should control its own callbacks
import json import json
import traceback import traceback
from typing import Optional from typing import List, Optional
from fastapi import APIRouter, Depends, Header, HTTPException, Request, status from fastapi import APIRouter, Depends, Header, HTTPException, Request, status
@ -102,66 +102,30 @@ async def add_team_callbacks(
# store team callback settings in metadata # store team callback settings in metadata
team_metadata = _existing_team.metadata team_metadata = _existing_team.metadata
team_callback_settings = team_metadata.get("callback_settings", {}) team_callback_settings: List[dict] = team_metadata.get(
# expect callback settings to be "logging"
team_callback_settings_obj = TeamCallbackMetadata(**team_callback_settings) ) # 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": ## check if it already exists, for the same callback event
if team_callback_settings_obj.success_callback is None: for callback in team_callback_settings:
team_callback_settings_obj.success_callback = [] if (
callback.get("callback_name") == data.callback_name
if data.callback_name in team_callback_settings_obj.success_callback: and callback.get("callback_type") == data.callback_type
):
raise ProxyException( 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, code=status.HTTP_400_BAD_REQUEST,
type=ProxyErrorTypes.bad_request_error, type=ProxyErrorTypes.bad_request_error,
param="callback_name", param="callback_name",
) )
team_callback_settings_obj.success_callback.append(data.callback_name) team_callback_settings.append(data.model_dump())
elif data.callback_type == "failure":
if team_callback_settings_obj.failure_callback is None:
team_callback_settings_obj.failure_callback = []
if data.callback_name in team_callback_settings_obj.failure_callback: team_metadata["logging"] = team_callback_settings
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_json = json.dumps(team_metadata) # update team_metadata team_metadata_json = json.dumps(team_metadata) # update team_metadata
new_team_row = await prisma_client.db.litellm_teamtable.update( new_team_row = await prisma_client.db.litellm_teamtable.update(
@ -178,7 +142,7 @@ async def add_team_callbacks(
except ProxyException as e: except ProxyException as e:
raise e raise e
except Exception as e: except Exception as e:
verbose_proxy_logger.error( verbose_proxy_logger.exception(
"litellm.proxy.proxy_server.add_team_callbacks(): Exception occured - {}".format( "litellm.proxy.proxy_server.add_team_callbacks(): Exception occured - {}".format(
str(e) str(e)
) )