mirror of
https://github.com/BerriAI/litellm.git
synced 2026-11-13 08:52:02 +00:00
* feat(proxy): publish opted-in pass-through endpoints on the Model Hub Pass-through endpoints gain display_name and show_in_model_hub. Endpoints that opt in appear on /public/v1/model_hub and /public/model_hub as rows in mode passthrough, named by their display name or their path, with the route in pass_through_path. The admin UI exposes both fields on the create and edit forms and the public hub renders passthrough rows with a route-specific curl example Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(proxy): carry pass-through methods onto hub rows and key dashboard rows by route Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(proxy): keep health, cost and shell quoting correct for pass-through hub rows Pass-through rows no longer inherit a router model's health check when they share its name, the public table shows n/a instead of Free for their token costs, and the generated curl example escapes shell characters in the route Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(ui): quote the method in the pass-through hub curl example A configured method string is placed after curl -X inside escaped double quotes so it cannot alter the copied command Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * test(ui): build pass-through hub fixtures through a helper Keeps the dashboard lint budget for inline object arguments under its limit Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * test(integration): audit the pass-through Model Hub surface end to end Cover forwarding, pagination, validation, auth, updates, duplicate names, config-file precedence, health-name isolation, repeated reads and two chaos cells (create/delete churn, a killed proxy worker). Build the stored pass_through_endpoints list in one shot instead of appending to the list the config reader handed back Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(proxy): keep concurrent pass-through creates from overwriting each other Creating an endpoint appends to the general_settings list the proxy already holds instead of persisting a private copy, so two admins creating at the same time both land, as on main before this branch Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(proxy): serialize pass-through endpoint creates behind a process lock Each create copies the stored list under an asyncio lock before persisting, so simultaneous creates in one worker no longer overwrite each other and a rejected write (config-owned path) never lands in the in-memory settings Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * test(integration): collect paginated pass-through rows without mutating a list Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(ui): let a pass-through with no stored timeout save from the edit form Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * test(ui): type the pass-through edit fixture so a null timeout compiles Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * perf(proxy): read published pass-throughs from the in-memory settings store The public Model Hub routes read the pass-through list this worker already serves from proxy_config.settings instead of querying the config table on every anonymous hub read. Also drops a mutable-ok suppression that no longer guards a violation Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * test(integration): list a config file pass-through beside database rows on the hub Main merges database pass-throughs with config file ones on other paths since #43962, so a database write beside a config entry is accepted rather than rejected as config-owned Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * test(proxy): type the monkeypatch fixture in the pass-through hub tests Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * refactor(proxy): validate pass-through config entries instead of splatting unknown dicts Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * refactor(proxy): list model hub rows as a tagged union of model groups and pass-throughs Health enrichment and the no-router check now match on ModelGroupRow or PassThroughRow instead of testing pass_through_path in each route. Both hub routes share published_hub_rows, the v1 row helper is sync again, and the config list route goes back to main's inline merge since the hub no longer needs configured_pass_through_endpoints * test(ui): find the pass-through hub row by role to stay under the no-node-access budget * fix(proxy): keep database pass-through endpoints in the settings store across config reloads A config reload cleared the stored database row before rebuilding the pass-through list, so without store_model_in_db the list fell back to the config file entries alone. The Admin UI triggers that reload on page load through /get/config/callbacks, which dropped UI-created endpoints from the Model Hub until the next write * refactor(proxy): make the hub row matches exhaustive with assert_never * refactor(proxy): return the exhaustive match fallthrough and build hub test inputs in one shot Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * refactor(proxy): drop the in-process create lock from pass-through endpoints The lock only covered one worker, and the read-modify-write on the general_settings blob is a separate storage problem tracked as tech debt. Create goes back to main's behavior. * fix: align pass-through model hub with current lint rules Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * test: share worker state for pass-through hub restart coverage Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: show pass-through curl examples in model hub inspector Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: skip invalid pass-through hub entries and await peer refresh Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --------- Co-authored-by: ryan <ryan@berri.ai> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: mateo <277851410+mateo-berri@users.noreply.github.com> |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| _batch_file_caps.py | ||
| cost_center_service.py | ||
| team_metadata_validation_proxy_config.yaml | ||
| test_access_group_team_sync.py | ||
| test_added_backup_deployment_serves_peer_fallbacks.py | ||
| test_agent_management.py | ||
| test_auto_router_databricks_classifier_writes.py | ||
| test_batch_file_usage_caps.py | ||
| test_batch_file_usage_caps_chaos.py | ||
| test_batch_limit_metadata_admin_only.py | ||
| test_batch_output_file_listing.py | ||
| test_budget_list_sorting.py | ||
| test_budget_model_limits.py | ||
| test_budget_reset_windows.py | ||
| test_budget_updates.py | ||
| test_claude_code_plugin_installation_preference.py | ||
| test_credential_display_name.py | ||
| test_credential_federation_values.py | ||
| test_credential_migration_endpoint.py | ||
| test_credential_writes_survive_reload.py | ||
| test_customer_model_limits.py | ||
| test_customer_unknown_fields.py | ||
| test_f7_coverage_closeout.py | ||
| test_f7_key_coverage_push.py | ||
| test_fallback_management_public_names.py | ||
| test_guardrail_usage_config_guardrail.py | ||
| test_health_routing.py | ||
| test_key_aliases.py | ||
| test_key_block_unblock.py | ||
| test_key_budget_limits.py | ||
| test_key_bulk_update.py | ||
| test_key_default_allowed_routes.py | ||
| test_key_delete.py | ||
| test_key_delete_revocation.py | ||
| test_key_generate.py | ||
| test_key_generation_permissions.py | ||
| test_key_health.py | ||
| test_key_info.py | ||
| test_key_info_v2.py | ||
| test_key_list.py | ||
| test_key_regenerate.py | ||
| test_key_reset_spend.py | ||
| test_key_route_contracts.py | ||
| test_key_service_account_generate.py | ||
| test_key_team_change.py | ||
| test_key_update.py | ||
| test_key_updates.py | ||
| test_listing_and_health_contracts.py | ||
| test_managed_file_create_ownership.py | ||
| test_managed_vector_store_unified_id.py | ||
| test_model_credential_name_updates.py | ||
| test_model_deployment_lifecycle.py | ||
| test_model_health_check.py | ||
| test_model_hub_custom_metadata.py | ||
| test_model_rename_propagation.py | ||
| test_organization_budget_clear.py | ||
| test_organization_lifecycle.py | ||
| test_partial_update_sequences.py | ||
| test_pass_through_model_hub.py | ||
| test_policy_attachment_runtime.py | ||
| test_project_lifecycle.py | ||
| test_prompt_management.py | ||
| test_ptu_share_guards.py | ||
| test_scim_admin_group.py | ||
| test_scim_group_bulk_roster.py | ||
| test_scim_group_delete.py | ||
| test_scim_group_member_not_yet_provisioned.py | ||
| test_scim_group_pathless_patch.py | ||
| test_scim_user_lifecycle.py | ||
| test_search_tool_crud.py | ||
| test_skill_download_history.py | ||
| test_smoke.py | ||
| test_sso_sign_in.py | ||
| test_tag_budget_update.py | ||
| test_team_available.py | ||
| test_team_block.py | ||
| test_team_block_unblock.py | ||
| test_team_blocking_multi_instance.py | ||
| test_team_budget_duration_defaults.py | ||
| test_team_budget_limits.py | ||
| test_team_bulk_member_add.py | ||
| test_team_bulk_member_delete.py | ||
| test_team_daily_activity.py | ||
| test_team_delete.py | ||
| test_team_delete_chaos.py | ||
| test_team_delete_inputs.py | ||
| test_team_delete_large_membership.py | ||
| test_team_delete_member_add_race.py | ||
| test_team_delete_member_cache_eviction.py | ||
| test_team_delete_prometheus.py | ||
| test_team_filter_ui.py | ||
| test_team_info.py | ||
| test_team_key_bulk_update.py | ||
| test_team_list.py | ||
| test_team_list_sorting.py | ||
| test_team_list_v2.py | ||
| test_team_member_add.py | ||
| test_team_member_budget_cache.py | ||
| test_team_member_delete.py | ||
| test_team_member_info_validation.py | ||
| test_team_member_lifecycle.py | ||
| test_team_member_me.py | ||
| test_team_member_reset_budget.py | ||
| test_team_member_reset_spend.py | ||
| test_team_member_routes.py | ||
| test_team_member_update.py | ||
| test_team_metadata_schema.py | ||
| test_team_metadata_validation.py | ||
| test_team_model.py | ||
| test_team_new.py | ||
| test_team_permissions.py | ||
| test_team_permissions_bulk_update.py | ||
| test_team_spend_by_user.py | ||
| test_team_update.py | ||
| test_team_update_multi_instance.py | ||
| test_tool_policy_user.py | ||
| test_user_delete_revokes_keys.py | ||
| test_user_list_sorting.py | ||
| test_user_rate_limit_updates.py | ||
| test_user_routes.py | ||
| test_user_updates_wedged_coordination_redis.py | ||
| test_users_bulk_delete.py | ||
| test_vector_store_config_ownership.py | ||
| test_vector_store_file_list_managed_ids.py | ||