Remove incorrect `:0` suffix from regional Bedrock model identifiers:
- us.anthropic.claude-opus-4-6-v1:0 → us.anthropic.claude-opus-4-6-v1
- au.anthropic.claude-opus-4-6-v1:0 (duplicate removed)
The `:0` suffix is invalid for Bedrock inference profile ARNs and causes
"The provided model identifier is invalid" errors when calling the model.
Fixes#20562
- Add paragraph on release validation, extensibility, and 100% coverage goal
- Include OOMs and CPU regressions as issues surfaced under sustained load
The warning 'Semantic tool filter hook not initialized' was appearing on
every startup, even when the mcp_semantic_tool_filter feature was not
configured. This was confusing for users.
Now the function checks if the feature is actually configured and enabled
before proceeding with initialization. The warning will only appear if
the feature was explicitly enabled but failed to initialize.
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Previously, PR #19818 (via #20205) removed the model_list check entirely,
causing Router to be created even with no models AND no search_tools.
This fix adds back a conditional check that creates the Router only when:
- There are models to route, OR
- There are search_tools configured
This preserves the PR #19818 goal (search-tools-only deployments) while
avoiding unnecessary Router creation when there's nothing to route.
Fixes test_add_and_delete_deployments[0-None]
Fixes 15 failing tests in the MCP test suite:
1. **OAuth discoverable endpoints** (test_discoverable_endpoints.py):
- Added autouse fixture to mock IPAddressUtils.get_mcp_client_ip
- This bypasses IP-based access control which was blocking server lookup
- Fixes: test_authorize_*, test_token_*, test_oauth_*, test_register_*
2. **A2A endpoints** (test_a2a_endpoints.py):
- Fixed mock path for add_litellm_data_to_request
- Was patching litellm_pre_call_utils but function is called from common_request_processing
3. **MCP guardrail handler** (test_mcp_guardrail_handler.py):
- Updated tests to match new handler behavior
- Handler now passes tools (not texts) to guardrail
- Handler checks for mcp_tool_name (not messages array)
4. **MCP path-based segregation** (test_user_api_key_auth_mcp.py):
- Added client_ip to get_auth_context unpacking (7 values now)
- get_auth_context was updated to include client_ip
5. **MCP registry** (test_mcp_management_endpoints.py):
- Added mock for get_filtered_registry (not just get_registry)
- Registry endpoint uses get_filtered_registry for IP filtering
Co-authored-by: Shin <shin@openclaw.ai>
Add cheap .get() guards in should_run_callback() to short-circuit
the expensive EnterpriseCallbackControls.is_callback_disabled_dynamically()
call. When neither litellm_disabled_callbacks nor x-litellm-disable-callbacks
header is set (the common case), the enterprise function is never entered,
reducing should_run_callback from ~485ms to ~93-165ms across 54k calls.