fix(anthropic): preserve canonical tool JSON#186
Merged
Conversation
raphael
marked this pull request as ready for review
July 18, 2026 23:48
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Rationale
The Anthropic SDK uses a custom reflection-based JSON encoder. Although
json.Decoder.UseNumberprevents float64 precision loss, the SDK observesjson.Numberas a string-backed type and serializes values such as2as"2". Numeric tool examples then contradict their JSON schemas and can cause repeated model tool-call failures.The adapter now materializes only the object envelope required by the SDK and retains each field as
json.RawMessage. This is simpler than recursively rewriting decoded values and preserves the canonical schema and example JSON verbatim.Impact
Anthropic requests now send tool schema constraints and provider-native input examples with their authored JSON types and numeric precision. This improves tool-call correctness without changing the goa-ai tool contract or other provider adapters.
Validation
go test ./features/model/anthropicmake lint