Skip to content

Fix extractJson picking up non-JSON brace groups (e.g., C# code)#100

Merged
JanKrivanek merged 2 commits into
mainfrom
fix-extract-json-non-json-braces
Feb 24, 2026
Merged

Fix extractJson picking up non-JSON brace groups (e.g., C# code)#100
JanKrivanek merged 2 commits into
mainfrom
fix-extract-json-non-json-braces

Conversation

@ViktorHofer

Copy link
Copy Markdown
Member

extractJson now validates each brace-matched candidate with JSON.parse before returning it. If the candidate isn't valid JSON (even after escape sanitization), it skips to the next brace group. This prevents C# code snippets or other non-JSON content from being mistakenly extracted as the judge's JSON response.

extractJson now validates each brace-matched candidate with JSON.parse
before returning it. If the candidate isn't valid JSON (even after
escape sanitization), it skips to the next brace group. This prevents
C# code snippets or other non-JSON content from being mistakenly
extracted as the judge's JSON response.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings February 23, 2026 22:30

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes a bug in the extractJson function where non-JSON brace groups (such as C# code snippets) could be mistakenly extracted as JSON responses from LLM outputs. The fix adds validation to each brace-matched candidate using JSON.parse before returning it, with a fallback attempt using escape sequence sanitization. If a candidate fails validation, the function moves to the next brace group instead of returning invalid content.

Changes:

  • Enhanced extractJson to validate each brace-matched candidate with JSON.parse before returning, skipping non-JSON content
  • Modified extractOutermostJson to return position metadata to enable searching for subsequent brace groups
  • Updated error message expectations in tests to reflect new "contained no JSON" behavior when no valid JSON is found

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
eng/skill-validator/src/llm-json.ts Added validation loop to extractJson that tries JSON.parse on each candidate; modified extractOutermostJson to return endIndex for iteration
eng/skill-validator/tests/llm-json.test.ts Added tests for skipping C# code, multiple non-JSON groups, and all-invalid scenarios
eng/skill-validator/tests/judge.test.ts Updated test error message expectations from specific parse failures to "contained no JSON"
eng/skill-validator/tests/pairwise-judge.test.ts Updated test error message expectations from specific parse failures to "contained no JSON"

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread eng/skill-validator/tests/llm-json.test.ts
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@JanKrivanek JanKrivanek merged commit f9cf1d6 into main Feb 24, 2026
2 checks passed
@JanKrivanek JanKrivanek deleted the fix-extract-json-non-json-braces branch February 24, 2026 08:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants