#30662 [Bug]: Anthropic /v1/messages passthrough serializes callback-injected non-serializable metadata into the request body
### Check for existing issues
☑ Searched — not a duplicate. Closest is #12354 (`_Span is not JSON serializable`, but spend-logs / `litellm_parent_otel_span`, not the Anthropic passthrough request body).
### What happened?
When a litellm `input_callback` adds a non-JSON-serializable value to metadata, the Anthropic `/v1/messages` passthrough serializes that polluted metadata into the **outbound request body** via a bare `json.dumps(request_body)`, crashing the call. Real-world trigger: Sentry's `LiteLLMIntegration` stores a live `Span` at `metadata["_sentry_span"]` (root cause filed at getsentry/sentry-python#6596).
Note: caller-supplied metadata is already correctly sanitized — `validate_anthropic_api_metadata` strips unknown keys (verified: passing `metadata={"user_id":"x","evil":<obj>}` yields body `{"user_id":"x"}`). The gap is specifically values injected into `litellm_params["metadata"]` by input-callbacks **after** validation, which still reach the serialized request body.
**Expected:** the passthrough body builder should not let non-serializable callback-injected metadata into the provider request — strip it (as #15728 did for `litellm_parent_otel_span`) or serialize wi…