Skip to content

misc: Support property separator with xml format in EBNFComposer#8418

Closed
CatherineSue wants to merge 3 commits intomainfrom
chang/misc
Closed

misc: Support property separator with xml format in EBNFComposer#8418
CatherineSue wants to merge 3 commits intomainfrom
chang/misc

Conversation

@CatherineSue
Copy link
Copy Markdown
Collaborator

@CatherineSue CatherineSue commented Jul 27, 2025

Motivation

Currently, we only use ", " to concatenate the ebnf strings between different tool calls. This is because in both json or ast/pythonic format functions, they use , to between different arguments, such as: "parameters": {"a": 2, "b": 2}, add(a=1,b=2). However, since Qwen3-coder and other models may start to use XML tags for the function format, we should use \n in this case.

NOTE: the separator currently doesn't break any parsing. Because usually with full XML-ish format strings, we use regex to find all tags like <parameter=xxx> . The actually separator between them doesn't matter.

This PR is purely serving as a improvement.

Modifications

  • Added PROPERTY_SEPARATOR_MAP to handle format-specific separators
  • Fixed hardcoded comma separators that were incorrectly applied to XML
  • Updated both required and optional property handling

Checklist

- Added PROPERTY_SEPARATOR_MAP to handle format-specific separators
- Fixed hardcoded comma separators that were incorrectly applied to XML
- Updated both required and optional property handling
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Summary of Changes

Hello @CatherineSue, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request enhances the EBNF generation logic by introducing a flexible mechanism for defining property separators based on the output format. The primary goal is to correctly support XML-based function call formats, which require newline characters as property separators, while maintaining compatibility with existing JSON and Pythonic formats that use commas. This change improves the adaptability of the EBNF composer for various model outputs.

Highlights

  • Configurable Property Separators: Introduced a new PROPERTY_SEPARATOR_MAP within the EBNFComposer class. This map allows defining specific separators for properties based on the target function call format (e.g., ", " for pythonic and json, and "\n" for xml).
  • Dynamic Separator Application: Modified the build_ebnf function to dynamically retrieve the appropriate property separator from PROPERTY_SEPARATOR_MAP based on the function_format. This ensures that both required and optional properties are joined using the correct separator for the given format, specifically addressing the need for newline separators in XML.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments or fill out our survey to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces support for format-specific property separators in the EBNF composer, which improves handling formats like XML. The implementation is clear and directly addresses the problem. I suggest removing the hardcoded default value to improve maintainability.

Comment thread python/sglang/srt/function_call/ebnf_composer.py
@CatherineSue
Copy link
Copy Markdown
Collaborator Author

It seems ut-backend-1 (5) keeps failing due to OOM:
Screenshot 2025-07-27 at 4 43 44 PM

@CatherineSue
Copy link
Copy Markdown
Collaborator Author

#8224 implements the same support by adding a key_value_separator, which is more flexible. This PR can hold.

@CatherineSue
Copy link
Copy Markdown
Collaborator Author

Close this PR as it is a duplicate of #8224

@zhyncs zhyncs deleted the chang/misc branch July 31, 2025 02:51
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.

1 participant