Skip to content

fix: case-sensitive json marshalling and unmarshalling - #1863

Merged
nacx merged 5 commits into
envoyproxy:mainfrom
nacx:json-config
Apr 15, 2026
Merged

fix: case-sensitive json marshalling and unmarshalling#1863
nacx merged 5 commits into
envoyproxy:mainfrom
nacx:json-config

Conversation

@nacx

@nacx nacx commented Feb 12, 2026

Copy link
Copy Markdown
Member

Description

Use strict json marshalling and unmarshalling configuration.

Related Issues/PRs (if applicable)

N/A

Special notes for reviewers (if applicable)

N/A

@codecov-commenter

codecov-commenter commented Feb 12, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 84.38%. Comparing base (a833780) to head (d81791e).

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #1863   +/-   ##
=======================================
  Coverage   84.38%   84.38%           
=======================================
  Files         130      130           
  Lines       18114    18114           
=======================================
  Hits        15285    15285           
  Misses       1883     1883           
  Partials      946      946           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@yuzisun

yuzisun commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

Can we make this configurable? it may break requests that are passing unknown elements or fields not defined on struct

@nacx nacx changed the title json: strict json marshalling and unmarshalling fix: case-sensitive json marshalling and unmarshalling Feb 20, 2026
@nacx

nacx commented Feb 20, 2026

Copy link
Copy Markdown
Member Author

I've updated the change to focus on case-sensitivity, which shouldn't affect unknown fields, etc, that we rely on.

nacx added 3 commits April 10, 2026 12:59
Signed-off-by: Ignasi Barrera <nacx@apache.org>
Signed-off-by: Ignasi Barrera <nacx@apache.org>
Signed-off-by: Ignasi Barrera <nacx@apache.org>
@nacx

nacx commented Apr 10, 2026

Copy link
Copy Markdown
Member Author

/retest

Signed-off-by: Ignasi Barrera <nacx@apache.org>
@nacx
nacx marked this pull request as ready for review April 12, 2026 11:21
@nacx
nacx requested a review from a team as a code owner April 12, 2026 11:21
@dosubot dosubot Bot added the size:S This PR changes 10-29 lines, ignoring generated files. label Apr 12, 2026
@nacx

nacx commented Apr 12, 2026

Copy link
Copy Markdown
Member Author

@yuzisun can you take a look and approve? This is passing all tests and fixes the security advisory on MCP.

@nacx
nacx requested a review from mathetake April 13, 2026 07:40

@mathetake mathetake left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

needs benchmark comparison just in case

// $ go install golang.org/x/perf/cmd/...@latest
// $ git checkout origin/main # Any base branch/commit to compare against.
// $ go test ./tests/data-plane -run='^$' -timeout=20m -count=10 -bench='BenchmarkChatCompletions' . > old.txt
// $ git checkout <your-feature-branch>
// $ go test ./tests/data-plane -run='^$' -timeout=20m -count=10 -bench='BenchmarkChatCompletions' . > new.txt
// $ benchstat old.txt new.txt
func BenchmarkChatCompletions(b *testing.B) {

@nacx

nacx commented Apr 15, 2026

Copy link
Copy Markdown
Member Author
❯ benchstat old.txt new.txt
goos: darwin
goarch: arm64
pkg: github.com/envoyproxy/ai-gateway/tests/data-plane
cpu: Apple M4 Pro
                                                                                        │    old.txt    │               new.txt               │
                                                                                        │    sec/op     │   sec/op     vs base                │
ChatCompletions/openai/10-messages/10-byte-per-message/small-response-12                  105.27µ ±  3%   81.54µ ± 1%  -22.54% (p=0.000 n=10)
ChatCompletions/openai/10-messages/1000-bytes-per-message/mediaum-response-12              261.2µ ±  1%   215.2µ ± 2%  -17.62% (p=0.000 n=10)
ChatCompletions/openai/10-messages/100000-bytes-per-message/large-response-12              2.221m ±  2%   1.881m ± 2%  -15.29% (p=0.000 n=10)
ChatCompletions/openai/10-messages/1000000-bytes-per-message/large-response-12             6.261m ±  1%   5.469m ± 2%  -12.65% (p=0.000 n=10)
ChatCompletions/openai/1000-messages/1-byte-per-message/small-response-12                  219.2µ ±  1%   164.3µ ± 2%  -25.06% (p=0.000 n=10)
ChatCompletions/openai/1000-messages/100-bytes-per-message/mediaum-response-12             408.1µ ±  2%   317.9µ ± 1%  -22.08% (p=0.000 n=10)
ChatCompletions/openai/1000-messages/10000-bytes-per-message/large-response-12             6.576m ±  3%   5.658m ± 3%  -13.96% (p=0.000 n=10)
ChatCompletions/openai/100000-messages/1-byte-per-message/large-response-12                12.56m ±  2%   11.09m ± 4%  -11.75% (p=0.000 n=10)
ChatCompletions/openai/500000-messages/1-byte-per-message/large-response-12                68.15m ±  7%   57.27m ± 8%  -15.97% (p=0.000 n=10)
ChatCompletions/aws-bedrock/10-messages/10-byte-per-message/small-response-12             100.66µ ±  2%   77.06µ ± 1%  -23.44% (p=0.000 n=10)
ChatCompletions/aws-bedrock/10-messages/1000-bytes-per-message/mediaum-response-12         118.3µ ± 16%   103.9µ ± 2%  -12.19% (p=0.029 n=10)
ChatCompletions/aws-bedrock/10-messages/100000-bytes-per-message/large-response-12         735.8µ ±  1%   721.4µ ± 1%   -1.95% (p=0.000 n=10)
ChatCompletions/aws-bedrock/10-messages/1000000-bytes-per-message/large-response-12        4.660m ±  1%   4.617m ± 1%        ~ (p=0.089 n=10)
ChatCompletions/aws-bedrock/1000-messages/1-byte-per-message/small-response-12             213.8µ ±  1%   210.7µ ± 1%   -1.44% (p=0.001 n=10)
ChatCompletions/aws-bedrock/1000-messages/100-bytes-per-message/mediaum-response-12        286.1µ ±  1%   286.3µ ± 1%        ~ (p=0.912 n=10)
ChatCompletions/aws-bedrock/1000-messages/10000-bytes-per-message/large-response-12        5.086m ±  4%   5.030m ± 4%        ~ (p=0.631 n=10)
ChatCompletions/aws-bedrock/100000-messages/1-byte-per-message/large-response-12           14.32m ±  2%   14.62m ± 4%        ~ (p=0.247 n=10)
ChatCompletions/aws-bedrock/500000-messages/1-byte-per-message/large-response-12           95.74m ±  8%   95.49m ± 6%        ~ (p=0.853 n=10)
ChatCompletions/gcp-vertexai/10-messages/10-byte-per-message/small-response-12             79.42µ ±  2%   78.09µ ± 2%        ~ (p=0.075 n=10)
ChatCompletions/gcp-vertexai/10-messages/1000-bytes-per-message/mediaum-response-12        168.2µ ±  1%   167.9µ ± 2%        ~ (p=0.436 n=10)
ChatCompletions/gcp-vertexai/10-messages/100000-bytes-per-message/large-response-12        1.167m ±  1%   1.165m ± 0%        ~ (p=0.971 n=10)
ChatCompletions/gcp-vertexai/10-messages/1000000-bytes-per-message/large-response-12       4.975m ±  2%   4.983m ± 1%        ~ (p=0.631 n=10)
ChatCompletions/gcp-vertexai/1000-messages/1-byte-per-message/small-response-12            199.7µ ±  1%   195.9µ ± 1%   -1.92% (p=0.000 n=10)
ChatCompletions/gcp-vertexai/1000-messages/100-bytes-per-message/mediaum-response-12       337.4µ ±  1%   330.6µ ± 1%   -2.01% (p=0.000 n=10)
ChatCompletions/gcp-vertexai/1000-messages/10000-bytes-per-message/large-response-12       5.440m ±  1%   5.418m ± 2%        ~ (p=0.481 n=10)
ChatCompletions/gcp-vertexai/100000-messages/1-byte-per-message/large-response-12          13.16m ±  5%   12.98m ± 4%        ~ (p=0.436 n=10)
ChatCompletions/gcp-vertexai/500000-messages/1-byte-per-message/large-response-12          82.56m ±  9%   86.13m ± 5%   +4.33% (p=0.035 n=10)
ChatCompletions/gcp-anthropicai/10-messages/10-byte-per-message/small-response-12          85.27µ ±  2%   84.16µ ± 2%        ~ (p=0.247 n=10)
ChatCompletions/gcp-anthropicai/10-messages/1000-bytes-per-message/mediaum-response-12     148.8µ ±  1%   145.7µ ± 1%   -2.06% (p=0.000 n=10)
ChatCompletions/gcp-anthropicai/10-messages/100000-bytes-per-message/large-response-12     1.807m ±  1%   1.787m ± 1%   -1.10% (p=0.002 n=10)
ChatCompletions/gcp-anthropicai/10-messages/1000000-bytes-per-message/large-response-12    14.11m ±  2%   13.87m ± 2%        ~ (p=0.063 n=10)
ChatCompletions/gcp-anthropicai/1000-messages/1-byte-per-message/small-response-12         418.6µ ±  2%   406.1µ ± 0%   -2.98% (p=0.000 n=10)
ChatCompletions/gcp-anthropicai/1000-messages/100-bytes-per-message/mediaum-response-12    628.9µ ±  0%   622.6µ ± 1%   -1.00% (p=0.002 n=10)
ChatCompletions/gcp-anthropicai/1000-messages/10000-bytes-per-message/large-response-12    14.50m ±  3%   14.28m ± 2%        ~ (p=0.247 n=10)
ChatCompletions/gcp-anthropicai/100000-messages/1-byte-per-message/large-response-12       43.22m ±  3%   42.18m ± 3%        ~ (p=0.165 n=10)
ChatCompletions/gcp-anthropicai/500000-messages/1-byte-per-message/large-response-12        1.071 ±  2%    1.073 ± 1%        ~ (p=0.912 n=10)
ChatCompletionsStreaming/OpenAI_Streaming-12                                               20.02m ±  0%   20.21m ± 1%   +0.98% (p=0.002 n=10)
ChatCompletionsStreaming/AWS_Streaming-12                                                  20.01m ±  2%   20.20m ± 1%   +0.96% (p=0.000 n=10)
geomean                                                                                    2.117m         1.991m        -5.94%

@mathetake

Copy link
Copy Markdown
Member

Nice

@nacx

nacx commented Apr 15, 2026

Copy link
Copy Markdown
Member Author

@mathetake can you stamp? :)

@nacx
nacx enabled auto-merge (squash) April 15, 2026 20:15
@nacx

nacx commented Apr 15, 2026

Copy link
Copy Markdown
Member Author

/retest

@nacx
nacx merged commit 7cf2c44 into envoyproxy:main Apr 15, 2026
55 of 57 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S This PR changes 10-29 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants