#854

tool_use/tool_choice.ipynb: the {"type": "any"} SMS bot is a hard 400 on Claude Fable 5.1

Openatilavahedianopened 1mo ago

The SMS bot section of tool_use/tool_choice.ipynb (at bbfab1b) demonstrates tool_choice={"type": "any"} so the model must always reply through send_text_to_user or get_customer_info. On Claude Fable 5.1 (released 2026-09-01) every such request is rejected:

tool_choice: type "tool" and "any" are not supported for this model.

HTTP 400, invalid_request_error, quoted verbatim from recorded responses — 25/25 runs across the notebook's own five example inputs (cells 35–41). The same requests succeed 25/25 on claude-fable-5. Anthropic's Fable 5.1 what's-new page lists this as one of the three breaking changes ("forced tool use returns an error"), with tool_choice: auto plus a prompt instruction as the replacement.

Reproduction

Run the notebook's SMS bot cells with MODEL_NAME = "claude-fable-5-1" and any of its example messages, e.g. "Hey there! How are you?".

What restored it, measured

Same prompt, same two tools, one call per message, 5 runs per input on Fable 5.1:

  1. Remove tool_choice and append one sentence to the system prompt — "Respond with a tool call rather than text whenever one of the tools applies." — restored 4 of the 5 example inputs (5/5 runs each). The "I need help with my order" input, where the bot should text back asking for a username, only reached 6/10.
  2. Raising effort one step (output_config.effort: "xhigh") took that input to 10/10 with the other four unchanged at 5/5.

So a Fable-5.1-ready version of the cell is: tool_choice dropped, that sentence added, and (for the ask-for-username behavior) effort raised. The notebook's {"type": "tool", "name": "print_sentiment_scores"} example earlier in the same file hits the identical 400 and has the same shape of fix (name the tool in the prompt instead).

Run records (every request/response, per-run results): https://github.com/atilavahedian/upshift/blob/main/reports/fable-5-1-upgrade.md — made with upshift, a tool I'm building that diffs agent behavior across model versions and verifies repairs against a suite; the records stand on their own.

Activity

0

No activity yet.