OpenRouter 200-response body errors are stringified as ValueError instead of classified ModelError
langchain-openrouter streaming paths raise plain ValueError with the numeric error code interpolated into prose, discarding structured error classification and the is_retryable attribute. Callers cannot distinguish retryable 502/429 from non-retryable 401/403. Non-streaming invoke path also fails with a misleading no-choices ValueError because the error field is dropped during SDK parsing.
