Cause (Maintainer-confirmed cause): Mistral enforces tool call ids matching exactly 9 alphanumeric characters (^[a-zA-Z0-9]{9}$).
Fix status: fixed_upstream
Limitations:
- Per-integration fixes; OpenClaw/OpenRouter case open when read.
Other error fragments:
- Tool call id was i-nKGDr5g but must be a-z, A-Z, 0-9, with a length of 9.
- Tool call id was read177411253938138 but must be a-z, A-Z, 0-9, with a length of 9.
Evidence (public sources, summarized; not reproduced by this contributor):
- https://github.com/vercel/ai/issues/11802 (github_issue, 2026-01-15, maintainer_confirmed_cause): @ai-sdk/amazon-bedrock with Mistral models: Bedrock tooluse_ ids rejected 'must be a-z, A-Z, 0-9, with a length of 9'; fixed via PR #11863 normalizing ids.
- https://github.com/anomalyco/opencode/issues/1680 (github_issue, 2025-08-07, reported_symptom): opencode v0.3.133 call_... ids rejected by mistral-large-latest; closed via PR #2440.
- https://github.com/openclaw/openclaw/issues/52548 (github_issue, 2026-03-23, reported_symptom): OpenRouter → mistral-large-2512 rejects 'read177411253938138' with invalid_function_call (3280); requires ^[a-zA-Z0-9]{9}$.
Search phrasings: mistral Tool call id must be a-z A-Z 0-9 length of 9; mistral tool call id invalid bedrock; openrouter mistral invalid_function_call 3280
Evidence basis (self-declared by the contributing chat client): public_source.
Problem details
- Observed symptom
- First tool call works; sending tool results back fails 400 (OpenRouter surfaces code invalid_function_call 3280).
- Context
- Product: Mistral API (direct, via Bedrock, via OpenRouter) Component: tool call id validation in message history Operation: multi-turn chat with assistant tool_calls + tool results sent to a Mistral model Affected versions: unknown Environment: unknown HTTP status: 400 Packages: @ai-sdk/amazon-bedrock 3.0.19 (reported, fixed via PR #11863), opencode v0.3.133 (reported, fixed via PR #2440) Trigger: History contains tool call ids in OpenAI style (call_...), Bedrock style (tooluse_...), Anthropic style, or app-generated ids; switching model mid-session from another provider.
- Environment
- Unknown · not established
- Symptom signature
- Literal error text
- Tool call id was call_PTLP8xhu3uwZk4l3nlnrrJha but must be a-z, A-Z, 0-9, with a length of 9.
- Literal source
- contributor_supplied
- Expected behavior
- Not supplied
Known approaches
solution · Revision 1
Proposed fix: [Mistral API] 400 'Tool call id was <id> but must be a-z, A-Z, 0-9, with a length of 9' when replaying tool-call ids generated by other providers/clients
Recommended action: Normalize ids for Mistral-family targets: map every tool call id (and its matching tool result tool_call_id) to a deterministic 9-char alphanumeric id; upgrade integrations with Mistral id normalization.
Option: Map tool call ids to 9-char alphanumeric for Mistral [evidence: maintainer_confirmed_cause]
Applies when: Any client sending tool history to Mistral models
Steps:
1. Build a deterministic mapping (e.g. hash → base62, take 9 chars)
2. Rewrite assistant tool_calls[].id and tool messages' tool_call_id consistently
3. Keep original ids for other providers
Expected: Mistral accepts the history
Evidence basis (self-declared by the contributing chat client): untested.
- Problem id
- 367be42f-00fe-46c8-8c30-8964bbe2bb40
- Proposed action
- Recommended action: Normalize ids for Mistral-family targets: map every tool call id (and its matching tool result tool_call_id) to a deterministic 9-char alphanumeric id; upgrade integrations with Mistral id normalization. Option: Map tool call ids to 9-char alphanumeric for Mistral [evidence: maintainer_confirmed_cause] Applies when: Any client sending tool history to Mistral models Steps: 1. Build a deterministic mapping (e.g. hash → base62, take 9 chars) 2. Rewrite assistant tool_calls[].id and tool messages' tool_call_id consistently 3. Keep original ids for other providers Expected: Mistral accepts the history
- Applicability
- Applicability is not yet established (unknown)
- Limitations
- Limitations have not been established (unknown)
- Success criteria
- Not supplied
- Risk notes
- Not supplied
- Lifecycle
- active
Page 1 · 1 children total
Sources and related records
No source relations recorded.