* feat(key_management_endpoints.py): adding support for rotating master key
* feat(key_management_endpoints.py): support decryption-re-encryption of models in db, when master key rotated
* fix(user_api_key_auth.py): raise valid token is None error earlier
enables easier debugging with api key hash in error message
* feat(key_management_endpoints.py): rotate any env vars
* fix(key_management_endpoints.py): uncomment check
* fix: fix linting error
* fix(team_endpoints.py): ensure 404 raised when team not found
* fix(key_management_endpoints.py): fix adding tags to key when metadata is empty
* fix(key_management_endpoints.py): refactor set metadata field to use common function across keys + teams
reduces scope for errors + easier testing
* fix: fix linting error
* fix(core_helpers.py): handle litellm_metadata instead of 'metadata'
* feat(batches/): ensure batches logs are written to db
makes batches response dict compatible
* fix(cost_calculator.py): handle batch response being a dictionary
* fix(batches/main.py): modify retrieve endpoints to use @client decorator
enables logging to work on retrieve call
* fix(batches/main.py): fix retrieve batch response type to be 'dict' compatible
* fix(spend_tracking_utils.py): send unique uuid for retrieve batch call type
create batch and retrieve batch share the same id
* fix(spend_tracking_utils.py): prevent duplicate retrieve batch calls from being double counted
* refactor(batches/): refactor cost tracking for batches - do it on retrieve, and within the established litellm_logging pipeline
ensures cost is always logged to db
* fix: fix linting errors
* fix: fix linting error
* add cookieUtils
* use utils for clearing cookies
* on logout use clearTokenCookies
* ui use correct clearTokenCookies
* navbar show userEmail on UserID page
* add timestamp on token cookie
* update generate_authenticated_redirect_response
* use common getAuthToken
* fix clearTokenCookies
* fixes for get auth token
* fix invitation link sign in logic
* Revert "fix invitation link sign in logic"
This reverts commit 30e5308cb3.
* fix getAuthToken
* update setAuthToken
* fix ui session handling
* fix ui session handler
* fix(create_user_button.tsx): allow admin to set models user has access to, on invite
Enables controlling model access on invite
* feat(auth_checks.py): enforce 'no-model-access' special model name on backend
prevent user from calling models if default key has no model access
* fix(chat_ui.tsx): allow user to input custom model
* fix(chat_ui.tsx): pull available models based on models key has access to
* style(create_user_button.tsx): move default model inside 'personal key creation' accordion
* fix(chat_ui.tsx): fix linting error
* test(test_auth_checks.py): add unit-test for special model name
* docs(internal_user_endpoints.py): update docstring
* fix test_moderations_bad_model
* Litellm dev 02 27 2025 p6 (#8891)
* fix(http_parsing_utils.py): orjson can throw errors on some emoji's in text, default to json.loads
* fix(sagemaker/handler.py): support passing model id on async streaming
* fix(litellm_pre_call_utils.py): Fixes https://github.com/BerriAI/litellm/issues/7237
* Fix calling claude via invoke route + response_format support for claude on invoke route (#8908)
* fix(anthropic_claude3_transformation.py): fix amazon anthropic claude 3 tool calling transformation on invoke route
move to using anthropic config as base
* fix(utils.py): expose anthropic config via providerconfigmanager
* fix(llm_http_handler.py): support json mode on async completion calls
* fix(invoke_handler/make_call): support json mode for anthropic called via bedrock invoke
* fix(anthropic/): handle 'response_format: {"type": "text"}` + migrate amazon claude 3 invoke config to inherit from anthropic config
Prevents error when passing in 'response_format: {"type": "text"}
* test: fix test
* fix(utils.py): fix base invoke provider check
* fix(anthropic_claude3_transformation.py): don't pass 'stream' param
* fix: fix linting errors
* fix(converse_transformation.py): handle response_format type=text for converse
* converse_transformation: pass 'description' if set in response_format (#8907)
* test(test_bedrock_completion.py): e2e test ensuring tool description is passed in
* fix(converse_transformation.py): pass description, if set
* fix(transformation.py): Fixes https://github.com/BerriAI/litellm/issues/8767#issuecomment-2689887663
* Fix bedrock passing `response_format: {"type": "text"}` (#8900)
* fix(converse_transformation.py): ignore type: text, value in response_format
no-op for bedrock
* fix(converse_transformation.py): handle adding response format value to tools
* fix(base_invoke_transformation.py): fix 'get_bedrock_invoke_provider' to handle cross-region-inferencing models
* test(test_bedrock_completion.py): add unit testing for bedrock invoke provider logic
* test: update test
* fix(exception_mapping_utils.py): add context window exceeded error handling for databricks provider route
* fix(fireworks_ai/): support passing tools + response_format together
* fix: cleanup
* fix(base_invoke_transformation.py): fix imports
* (Feat) - Show Error Logs on LiteLLM UI (#8904)
* fix test_moderations_bad_model
* use async_post_call_failure_hook
* basic logging errors in DB
* show status on ui
* show status on ui
* ui show request / response side by side
* stash fixes
* working, track raw request
* track error info in metadata
* fix showing error / request / response logs
* show traceback on error viewer
* ui with traceback of error
* fix async_post_call_failure_hook
* fix(http_parsing_utils.py): orjson can throw errors on some emoji's in text, default to json.loads
* test_get_error_information
* fix code quality
* rename proxy track cost callback test
* _should_store_errors_in_spend_logs
* feature flag error logs
* Revert "_should_store_errors_in_spend_logs"
This reverts commit 7f345df477.
* Revert "feature flag error logs"
This reverts commit 0e90c022bb.
* test_spend_logs_payload
* fix OTEL log_db_metrics
* fix import json
* fix ui linting error
* test_async_post_call_failure_hook
* test_chat_completion_bad_model_with_spend_logs
---------
Co-authored-by: Krrish Dholakia <krrishdholakia@gmail.com>
* ui new build
* test_chat_completion_bad_model_with_spend_logs
* docs(release_cycle.md): document release cycle
* bump: version 1.62.0 → 1.62.1
---------
Co-authored-by: Ishaan Jaff <ishaanjaffer0324@gmail.com>
* refactor(internal_user_endpoints.py): refactor `/user/list` to accept 'user_ids' and use prisma for db calls
enables bulk search from UI
* fix(internal_user_endpoints.py): fix linting errors
* fix(all_keys_table.tsx): show user email on create key table
make it easier for admin to know which key is associated to which user
* docs(internal_user_endpoints.py): improve docstring
* fix: sync schema with main
* fix(columns.tsx): display SSO ID on Internal User Table
make it easy to identify what the SSO ID for a user is
* fix(columns.tsx): add tooltip to header
help user understand what SSO ID means
* style: add more tooltips in the management flows
make it easier to understand what you're seeing
* style(all_keys_table.tsx): replace 'Not Set' with '-'
reduces words on table
* fix(internal_user_endpoints.py): fix user ids check
* test: fix test
* fix(internal_user_endpoints.py): maintain returning key count in `/user/list`
* fix(proxy/_types.py): return created_by and updated_by on /key/list
enables better trail of who made a key
* fix(all_keys_table.tsx): add created by to key table
allows easier tracking of who generated the key
* fix(key_management_endpoints.py): track 'created_by' and 'updated_by' fields
enable easier tracking of who created proxy keys
* allow bulk adding internal users
* allow sorting users by created at
* cleanup
* clean up user table
* show total num users
* show per user error when bulk adding users
* fix - don't allow creating duplicate internal users in DB
* ui flow fix for bulk adding users
* allow adding user in multiple teams with models
* correctly extract info
* working invitation link
* fix fill in table after bulk add
* fix the results from creating new users in bulkd
* bulk invite users
* fix view user flow
* fix ui type errors
* fix type errors
* fix type errors
* fix(proxy/_types.py): fixes issue where internal user able to escalate their role with ui key
Fixes https://github.com/BerriAI/litellm/issues/8029
* style: cleanup
* test: handle bedrock instability
* fix(amazon_deepseek_transformation.py): remove </think> from stream output - cleanup user facing stream
* fix(key_managenet_endpoints.py): return `/key/list` sorted by created_at
makes it easier to see created key
* style: cleanup team table
* feat(key_edit_view.tsx): support setting model specific tpm/rpm limits on keys
* feat(create_key_button.tsx): initial commit using openapi.json to ensure all values via api are supported on ui for `/key/generate`
Closes https://github.com/BerriAI/litellm/issues/7763
* style(create_key_button.tsx): put openapi settings inside 'advanced setting' accordion
* fix(check_openapi_schema.tsx): style improvements for advanced settings
* style(create_key_button.tsx): add tooltip explaining what the settings mean
* fix(team_info.tsx): render metadata field on team update
allow updating a team's metadata
* fix(networking.tsx): add 'metadata' field to create team form
* refactor: cleanup dead codeblock
* fix(organization_endpoints.py): fix metadata param support on `/organization/new`
* feat(organization_endpoints.py): support updating metadata for organization on api + ui
* test: mark flaky test
* fix(team_endpoints.py): allow team member to view team info
* test: handle model overloaded in tool calling test
* test: handle internal server error
* refactor get model info for team models
* allow adding a model to a team when creating team specific model
* ui update selected Team on Team Dropdown
* test_team_model_association
* testing for team specific models
* test_get_team_specific_model
* test: skip on internal server error
* remove model alias card on teams page
* linting fix _get_team_specific_model
* fix DeploymentTypedDict
* fix linting error
* fix code quality
* fix model info checks
---------
Co-authored-by: Krrish Dholakia <krrishdholakia@gmail.com>
* fix(team_endpoints.py): cleanup user <-> team association on team delete
Fixes issue where user table still listed team membership post delete
* test(test_team.py): update e2e test - ensure user/team membership is deleted on team delete
* fix(base_invoke_transformation.py): fix deepseek r1 transformation
remove deepseek name from model url
* test(test_completion.py): assert model route not in url
* feat(base_invoke_transformation.py): infer region name from model arn
prevent errors due to different region name in env var vs. model arn, respect if explicitly set in call though
* test: fix test
* test: skip on internal server error
* ui - use common team dropdown component
* re-use team component
* rename org field on add model
* handle add model submit
* working view model_id and team_id on root models page
* cleaner
* show all fields
* working model info view
* working team info selector
* clean up team id
* new component for model dashboard
* ui show table with dropdown
* make public model names like email
* revert changes to litellm model name
* fix litellm model name
* ui fix public model
* fix mappings
* fix conditional text input
* fix message
* ui fix bulk add models
* _add_team_model_to_db
* move model mgmt helper funcs
* test_add_team_model_to_db
* ui - display model team model name
* fix add model tab
* fix remove redundant info tab on models page
* dont pass model mappings all the way through
* fix jarring model name when adding team models
* fix edit model button
* delete button on model info
* ui fix model dashboard
* fix DeploymentTypedDict
* _is_model_access_group_for_wildcard_route
* test _get_public_model_name
* ui fix viewing public model name
* fix linting error
* fix linting errors
* fix selectedModel logic
* fix(key_management_endpoints.py): initial commit with logic to get all keys for teams user is an admin for
* fix(key_managements_endpoints.py): return all keys for teams user is an admin for
* fix(key_management_endpoints.py): add query param to ensure user opts into seeing all team keys (not just their own)
* fix(regenerate_key_modal.tsx): fix key regenerate
* fix(proxy_server.py): fix model metrics check on none api base
* test(test_key_generate_prisma.py): remove redundant test
* test(test_proxy_utils.py): add unit test covering new management endpoint helper util
* fix: fix test
* test(test_proxy_server.py): fix test
* refactor(teams.tsx): refactor to display all teams, across all orgs
removes org switcher from navbar, simplifies viewing/creating teams on UI
* fix(key_list.tsx): show user keys across all orgs
make it easy to see flat list of keys across orgs on key table
* style(all_keys_table.tsx): cleanup keys table
* fix(user_dashboard.tsx): remove overflow-hidden in dashboard component
* fix(teams.tsx): move org id placement in create team flow
* fix(teams.tsx): support model selection on create team based on selected org
* feat(view_key_table.tsx): move to using a filter component on keys page
allows filtering keys by org and team
* fix(filter.tsx): handle reset filter
* fix: fix linting error
* (Feat) - return `x-litellm-attempted-fallbacks` in responses from litellm proxy (#8558)
* add_fallback_headers_to_response
* test x-litellm-attempted-fallbacks
* unit test attempted fallbacks
* fix add_fallback_headers_to_response
* docs document response headers
* fix file name
* test fix use mock endpoints for e2e files and ft tests
* Revert "test fix use mock endpoints for e2e files and ft tests"
This reverts commit c921d8dd81.
* cleanup_azure_files
* Add remaining org CRUD endpoints + support deleting orgs on UI (#8561)
* feat(organization_endpoints.py): expose new `/organization/delete` endpoint. Cascade org deletion to member, teams and keys
Ensures any org deletion is handled correctly
* test(test_organizations.py): add simple test to ensure org deletion works
* feat(organization_endpoints.py): expose /organization/update endpoint, and define response models for org delete + update
* fix(organizations.tsx): support org delete on UI + move org/delete endpoint to use DELETE
* feat(organization_endpoints.py): support `/organization/member_update` endpoint
Allow admin to update member's role within org
* feat(organization_endpoints.py): support deleting member from org
* test(test_organizations.py): add e2e test to ensure org member flow works
* fix(organization_endpoints.py): fix code qa check
* fix(schema.prisma): don't introduce ondelete:cascade - breaking change
* docs(organization_endpoints.py): document missing params
* refactor(organization_view.tsx): initial commit creating a generic update member component shared between org and team member classes
* feat(organization_view.tsx): support updating org member role on UI
* feat(organization_view.tsx): allow proxy admin to delete members from org
* Enable update/delete org members on UI (#8560)
* feat(organization_endpoints.py): expose new `/organization/delete` endpoint. Cascade org deletion to member, teams and keys
Ensures any org deletion is handled correctly
* test(test_organizations.py): add simple test to ensure org deletion works
* feat(organization_endpoints.py): expose /organization/update endpoint, and define response models for org delete + update
* fix(organizations.tsx): support org delete on UI + move org/delete endpoint to use DELETE
* feat(organization_endpoints.py): support `/organization/member_update` endpoint
Allow admin to update member's role within org
* feat(organization_endpoints.py): support deleting member from org
* test(test_organizations.py): add e2e test to ensure org member flow works
* fix(organization_endpoints.py): fix code qa check
* fix(schema.prisma): don't introduce ondelete:cascade - breaking change
* docs(organization_endpoints.py): document missing params
* (Bug Fix) - Add Regenerate Key on Virtual Keys Tab (#8567)
* add regenerate key to ui
* ui fix key info
* (Bug Fix + Better Observability) - BudgetResetJob: (#8562)
* use class ResetBudgetJob
* refactor reset budget job
* update reset_budget job
* refactor reset budget job
* fix LiteLLM_UserTable
* refactor reset budget job
* add telemetry for reset budget job
* dd - log service success/failure on DD
* add detailed reset budget reset info on DD
* initialize_scheduled_background_jobs
* refactor reset budget job
* trigger service failure hook when fails to reset a budget for team, key, user
* fix resetBudgetJob
* unit testing for ResetBudgetJob
* test_duration_in_seconds_basic
* testing for triggering service logging
* fix logs on test teams fail
* remove unused imports
* fix import duration in s
* duration_in_seconds
* (Patch/bug fix) - UI, filter out litellm ui session tokens on Virtual Keys Page (#8568)
* fix key list endpoint
* _get_condition_to_filter_out_ui_session_tokens
* duration_in_seconds
* test_list_key_helper_team_filtering
* bump: version 1.61.4 → 1.61.5
* ui fix tsx linting
* ui new build
* test_list_key_helper_team_filtering
* ui new build
* test_openai_fine_tuning
* test_openai_fine_tuning
---------
Co-authored-by: Ishaan Jaff <ishaanjaffer0324@gmail.com>
* use class ResetBudgetJob
* refactor reset budget job
* update reset_budget job
* refactor reset budget job
* fix LiteLLM_UserTable
* refactor reset budget job
* add telemetry for reset budget job
* dd - log service success/failure on DD
* add detailed reset budget reset info on DD
* initialize_scheduled_background_jobs
* refactor reset budget job
* trigger service failure hook when fails to reset a budget for team, key, user
* fix resetBudgetJob
* unit testing for ResetBudgetJob
* test_duration_in_seconds_basic
* testing for triggering service logging
* fix logs on test teams fail
* remove unused imports
* fix import duration in s
* duration_in_seconds
* feat(organization_endpoints.py): expose new `/organization/delete` endpoint. Cascade org deletion to member, teams and keys
Ensures any org deletion is handled correctly
* test(test_organizations.py): add simple test to ensure org deletion works
* feat(organization_endpoints.py): expose /organization/update endpoint, and define response models for org delete + update
* fix(organizations.tsx): support org delete on UI + move org/delete endpoint to use DELETE
* feat(organization_endpoints.py): support `/organization/member_update` endpoint
Allow admin to update member's role within org
* feat(organization_endpoints.py): support deleting member from org
* test(test_organizations.py): add e2e test to ensure org member flow works
* fix(organization_endpoints.py): fix code qa check
* fix(schema.prisma): don't introduce ondelete:cascade - breaking change
* docs(organization_endpoints.py): document missing params
* refactor(organization_view.tsx): initial commit creating a generic update member component shared between org and team member classes
* feat(organization_view.tsx): support updating org member role on UI
* feat(organization_view.tsx): allow proxy admin to delete members from org
* refactor(organization.tsx): initial commit with orgs tab refactor
make it similar to 'Teams' tab - simplifies org management actions
* fix(page.tsx): pass user orgs to component
* fix(organization_view.tsx): fix to pull info from org info endpoint
* feat(organization_endpoints.py): return org members when calling /org/info
* fix(organization_view.tsx): show org members on info page
* feat(organization_view.tsx): allow adding user to org via user email
Resolves https://github.com/BerriAI/litellm/issues/8330
* fix(organization_endpoints.py): raise better error when duplicate user_email found in db
* fix(organization_view.tsx): cleanup user_email for now
not in initial org info - will need to prefetch
* fix(page.tsx): fix getting user models on page load
allows passing down the user models to org
* fix(organizations.tsx): fix creating org on ui
* fix(proxy/_types.py): include org created at and updated at
cleans up ui
* fix(navbar.tsx): cleanup
* fix(organizations.tsx): fix tpm/rpm limits on org
* fix(organizations.tsx): fix linting error
* fix(organizations.tsx): fix linting \
* (Feat) - Add `/bedrock/meta.llama3-3-70b-instruct-v1:0` tool calling support + cost tracking + base llm unit test for tool calling (#8545)
* Add support for bedrock meta.llama3-3-70b-instruct-v1:0 tool calling (#8512)
* fix(converse_transformation.py): fixing bedrock meta.llama3-3-70b tool calling
* test(test_bedrock_completion.py): adding llama3.3 tool compatibility check
* add TestBedrockTestSuite
* add bedrock llama 3.3 to base llm class
* us.meta.llama3-3-70b-instruct-v1:0
* test_basic_tool_calling
* TestAzureOpenAIO1
* test_basic_tool_calling
* test_basic_tool_calling
---------
Co-authored-by: miraclebakelaser <65143272+miraclebakelaser@users.noreply.github.com>
* fix(general_settings.tsx): filter out empty dictionaries post fallback delete (#8550)
Fixes https://github.com/BerriAI/litellm/issues/8331
* bump: version 1.61.3 → 1.61.4
* (perf) Fix memory leak on `/completions` route (#8551)
* initial mem util test
* fix _cached_get_model_info_helper
* test memory usage
* fix tests
* fix mem usage
---------
Co-authored-by: Ishaan Jaff <ishaanjaffer0324@gmail.com>
Co-authored-by: miraclebakelaser <65143272+miraclebakelaser@users.noreply.github.com>
* refactor(admin.tsx): cleanup add new admin flow
removes buggy flow. Ensures just 1 simple way to add users / update roles.
* fix(user_search_modal.tsx): ensure 'add member' button is always visible
* fix(edit_membership.tsx): ensure 'save changes' button always visible
* fix(internal_user_endpoints.py): ensure user in org can be deleted
Fixes issue where user couldn't be deleted if they were a member of an org
* fix: fix linting error
* fix(key_management_endpoints.py): fix `/key/list` to include `return_full_object` as a top-level query param
Allows user to specify they want the keys as a list of objects
* refactor(key_list.tsx): initial refactor of key table in user dashboard
offloads key filtering logic to backend api
prevents common error of user not being able to see their keys
* fix(key_management_endpoints.py): allow internal user to query `/key/list` to see their keys
* fix(key_management_endpoints.py): add validation checks and filtering to `/key/list` endpoint
allow internal user to see their keys. not anybody else's
* fix(view_key_table.tsx): fix issue where internal user could not see default team keys
* fix: fix linting error
* fix: fix linting error
* fix: fix linting error
* fix: fix linting error
* fix: fix linting error
* fix: fix linting error
* fix: fix linting error