Skip to content

Commit c620d76

Browse files
fix(team_callback_endpoints.py): fix adding callbacks to teams
Resolves error caused by the migration to a standard 'logging' field in metadata
1 parent 8352201 commit c620d76

File tree

1 file changed

+19
-55
lines changed

1 file changed

+19
-55
lines changed

litellm/proxy/management_endpoints/team_callback_endpoints.py

Lines changed: 19 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import json
88
import traceback
9-
from typing import Optional
9+
from typing import List, Optional
1010

1111
from fastapi import APIRouter, Depends, Header, HTTPException, Request, status
1212

@@ -102,66 +102,30 @@ async def add_team_callbacks(
102102

103103
# store team callback settings in metadata
104104
team_metadata = _existing_team.metadata
105-
team_callback_settings = team_metadata.get("callback_settings", {})
106-
# expect callback settings to be
107-
team_callback_settings_obj = TeamCallbackMetadata(**team_callback_settings)
108-
109-
if data.callback_type == "success":
110-
if team_callback_settings_obj.success_callback is None:
111-
team_callback_settings_obj.success_callback = []
112-
113-
if data.callback_name in team_callback_settings_obj.success_callback:
114-
raise ProxyException(
115-
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}",
116-
code=status.HTTP_400_BAD_REQUEST,
117-
type=ProxyErrorTypes.bad_request_error,
118-
param="callback_name",
119-
)
120-
121-
team_callback_settings_obj.success_callback.append(data.callback_name)
122-
elif data.callback_type == "failure":
123-
if team_callback_settings_obj.failure_callback is None:
124-
team_callback_settings_obj.failure_callback = []
125-
126-
if data.callback_name in team_callback_settings_obj.failure_callback:
127-
raise ProxyException(
128-
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}",
129-
code=status.HTTP_400_BAD_REQUEST,
130-
type=ProxyErrorTypes.bad_request_error,
131-
param="callback_name",
132-
)
133-
team_callback_settings_obj.failure_callback.append(data.callback_name)
134-
elif data.callback_type == "success_and_failure":
135-
if team_callback_settings_obj.success_callback is None:
136-
team_callback_settings_obj.success_callback = []
137-
if team_callback_settings_obj.failure_callback is None:
138-
team_callback_settings_obj.failure_callback = []
139-
if data.callback_name in team_callback_settings_obj.success_callback:
140-
raise ProxyException(
141-
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}",
142-
code=status.HTTP_400_BAD_REQUEST,
143-
type=ProxyErrorTypes.bad_request_error,
144-
param="callback_name",
145-
)
146-
147-
if data.callback_name in team_callback_settings_obj.failure_callback:
105+
team_callback_settings: List[dict] = team_metadata.get(
106+
"logging"
107+
) # will be dict of type AddTeamCallback
108+
if team_callback_settings is None or not isinstance(
109+
team_callback_settings, list
110+
):
111+
team_callback_settings = []
112+
113+
## check if it already exists, for the same callback event
114+
for callback in team_callback_settings:
115+
if (
116+
callback.get("callback_name") == data.callback_name
117+
and callback.get("callback_type") == data.callback_type
118+
):
148119
raise ProxyException(
149-
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}",
120+
message=f"callback_name = {data.callback_name} already exists in team_callback_settings, for team_id = {team_id} and event = {data.callback_type}",
150121
code=status.HTTP_400_BAD_REQUEST,
151122
type=ProxyErrorTypes.bad_request_error,
152123
param="callback_name",
153124
)
154125

155-
team_callback_settings_obj.success_callback.append(data.callback_name)
156-
team_callback_settings_obj.failure_callback.append(data.callback_name)
157-
for var, value in data.callback_vars.items():
158-
if team_callback_settings_obj.callback_vars is None:
159-
team_callback_settings_obj.callback_vars = {}
160-
team_callback_settings_obj.callback_vars[var] = value
161-
162-
team_callback_settings_obj_dict = team_callback_settings_obj.model_dump()
126+
team_callback_settings.append(data.model_dump())
163127

164-
team_metadata["callback_settings"] = team_callback_settings_obj_dict
128+
team_metadata["logging"] = team_callback_settings
165129
team_metadata_json = json.dumps(team_metadata) # update team_metadata
166130

167131
new_team_row = await prisma_client.db.litellm_teamtable.update(
@@ -178,7 +142,7 @@ async def add_team_callbacks(
178142
except ProxyException as e:
179143
raise e
180144
except Exception as e:
181-
verbose_proxy_logger.error(
145+
verbose_proxy_logger.exception(
182146
"litellm.proxy.proxy_server.add_team_callbacks(): Exception occured - {}".format(
183147
str(e)
184148
)

0 commit comments

Comments
 (0)