diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 4fcb017fa..0250683e5 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -2762,10 +2762,12 @@ async def generate_key_helper_fn( "model_max_budget": model_max_budget_json, "budget_id": budget_id, } + if ( - general_settings.get("allow_user_auth", False) == True - or _has_user_setup_sso() == True - ): + litellm.get_secret("DISABLE_KEY_NAME", False) == True + ): # allow user to disable storing abbreviated key name (shown in UI, to help figure out which key spent how much) + pass + else: key_data["key_name"] = f"sk-...{token[-4:]}" saved_token = copy.deepcopy(key_data) if isinstance(saved_token["aliases"], str): diff --git a/ui/litellm-dashboard/src/components/view_key_table.tsx b/ui/litellm-dashboard/src/components/view_key_table.tsx index 1aa6fe7bc..669547396 100644 --- a/ui/litellm-dashboard/src/components/view_key_table.tsx +++ b/ui/litellm-dashboard/src/components/view_key_table.tsx @@ -94,6 +94,9 @@ const ViewKeyTable: React.FC = ({ const [editModalVisible, setEditModalVisible] = useState(false); const [selectedToken, setSelectedToken] = useState(null); const [userModels, setUserModels] = useState([]); + const initialKnownTeamIDs: Set = new Set(); + + const [knownTeamIDs, setKnownTeamIDs] = useState(initialKnownTeamIDs); useEffect(() => { const fetchUserModels = async () => { @@ -118,6 +121,16 @@ const ViewKeyTable: React.FC = ({ fetchUserModels(); }, [accessToken, userID, userRole]); + useEffect(() => { + if (teams) { + const teamIDSet: Set = new Set(); + teams.forEach((team: any, index: number) => { + const team_obj: string = team.team_id + teamIDSet.add(team_obj); + }); + setKnownTeamIDs(teamIDSet) + } + }, [teams]) const EditKeyModal: React.FC = ({ visible, onCancel, token, onSubmit }) => { const [form] = Form.useForm(); const [keyTeam, setKeyTeam] = useState(selectedTeam); @@ -277,12 +290,12 @@ const ViewKeyTable: React.FC = ({ setEditModalVisible(true); }; -const handleEditCancel = () => { - setEditModalVisible(false); - setSelectedToken(null); -}; + const handleEditCancel = () => { + setEditModalVisible(false); + setSelectedToken(null); + }; -const handleEditSubmit = async (formValues: Record) => { + const handleEditSubmit = async (formValues: Record) => { /** * Call API to update team with teamId and values * @@ -294,7 +307,7 @@ const handleEditSubmit = async (formValues: Record) => { const currentKey = formValues.token; formValues.key = currentKey; - + console.log("handleEditSubmit:", formValues); let newKeyValues = await keyUpdateCall(accessToken, formValues); @@ -311,7 +324,7 @@ const handleEditSubmit = async (formValues: Record) => { setEditModalVisible(false); setSelectedToken(null); -}; + }; @@ -419,12 +432,8 @@ const handleEditSubmit = async (formValues: Record) => { Secret Key Spend (USD) Budget (USD) - {/* Spend Report */} - {/* Team */} - {/* Metadata */} Models TPM / RPM Limits - {/* Expires */} @@ -435,9 +444,17 @@ const handleEditSubmit = async (formValues: Record) => { return null; } if (selectedTeam) { - if (item.team_id != selectedTeam.team_id) { + /** + * if selected team id is null -> show the keys with no team id or team id's that don't exist in db + */ + console.log(`item team id: ${item.team_id}, knownTeamIDs.has(item.team_id): ${knownTeamIDs.has(item.team_id)}, selectedTeam id: ${selectedTeam.team_id}`) + if (selectedTeam.team_id == null && item.team_id !== null && !knownTeamIDs.has(item.team_id)) { + // do nothing -> returns a row with this key + } + else if (item.team_id != selectedTeam.team_id) { return null; } + console.log(`item team id: ${item.team_id}, is returned`) } return (