AI API receipt · vllm-project/vllm

Olmo3 tool parser corrupts string arguments with newlines and drops calls split across lines

vllm-project/vllm#60421 · upstream bug reproduced by running the issue's own reproduction

Badgr cannot tell this response is wrong

A triple-quoted multi-line string argument came back as "def f():, return 1, " because the parser joins lines before parsing, as in the issue's reproduction.

a mangled string is still a valid string and the schema is satisfied; Badgr cannot know what the model meant to write. If the caller supplies the expected file content, Badgr rejects it: tool argument differs from the expected value. The receipt therefore records success. This is a limit of what the contract can prove, shown here so it is not mistaken for protection.

What the upstream returned (replayed)

The output the bug produces, taken from the issue’s reproduction and fed to Badgr’s validators. Not a live provider call.

tool_calls: [{"type": "function", "function": {"name": "write_file", "arguments": "{\"path\": \"a.py\", \"content\": \"def f():, return 1, \"}"}}]
tools: ["write_file"]
tool_choice: "required"

Badgr receipt

Written by Badgr’s receipt ledger and read back from GET /v1/receipts/replay-vllm-60421-olmo3-newline-corrupts-args.

{
  "request_id": "replay-vllm-60421-olmo3-newline-corrupts-args",
  "status": "success",
  "endpoint": "/v1/chat/completions",
  "stream": false,
  "failure_stage": null,
  "error_code": null,
  "error_message": null,
  "retryable": null,
  "provider_mode": "replay",
  "routing_decision": "replayed_upstream_output",
  "created_at": "1791679879.0771751"
}

Recorded 2026-10-11 in Badgr’s local development environment. Replay cases and verdicts are pinned by backend/test_ai_api_replay_cases.py.

← All AI API receipts