Context
Currently, a2ui.schema.manager.generate_system_prompt and send_a2ui_to_client_toolset provide two separate paths for instructing the LLM on how to handle A2UI. This makes it difficult for developers to know exactly what is being sent in the final system instruction.
Problem
- Developers need to set paremeters
include_schema and include_examples to False to avoid conflicts with tool-based instructions, which creates ambiguity when a toolset is already providing that context.
- Appending multiple strings from different modules makes prompt tuning and debugging difficult.
Proposed Sollution
Refactor the prompt generation logic into a unified "Skill" or configuration object.
Introduce an explicit A2UIOutputMode enum: TEXT (for direct schema injection) and TOOL (for tool-calling environments).
Simplify the API so that system instructions are generated based on the selected mode, preventing accidental double-injection of schemas or instructions.
After reviewing both #1466 and #1465 together, I want to propose a design refinement that addresses the parameter naming issue and consolidates both concerns cleanly.
- Repurpose
output_mode enum for the output strictness level.
- Introduce a new
schema_injection_mode enum for where and when the schema should be injected.
class A2UISchemaInjectionMode(Enum):
"""Where/when the schema is injected."""
EMBEDDED = "embedded" # Schema in system prompt (upfront, one-time)
TOOL = "tool" # Schema injected per-request by toolset
NONE = "none" # No schema injection (default)
class A2UIOutputMode(Enum):
"""How the LLM should prioritize A2UI vs. text."""
A2UI_FIRST = "a2ui_first" # A2UI blocks first, minimal text after
TEXT_FIRST = "text_first" # Text and A2UI can be interleaved (default)
# Future: STRICT_A2UI, A2UI_ONLY for even stricter modes
Context
Currently,
a2ui.schema.manager.generate_system_promptandsend_a2ui_to_client_toolsetprovide two separate paths for instructing the LLM on how to handle A2UI. This makes it difficult for developers to know exactly what is being sent in the final system instruction.Problem
include_schemaandinclude_examplesto False to avoid conflicts with tool-based instructions, which creates ambiguity when a toolset is already providing that context.Proposed Sollution
Refactor the prompt generation logic into a unified "Skill" or configuration object.
Introduce an explicitA2UIOutputModeenum: TEXT (for direct schema injection) and TOOL (for tool-calling environments).Simplify the API so that system instructions are generated based on the selected mode, preventing accidental double-injection of schemas or instructions.After reviewing both #1466 and #1465 together, I want to propose a design refinement that addresses the parameter naming issue and consolidates both concerns cleanly.
output_modeenum for the output strictness level.schema_injection_modeenum for where and when the schema should be injected.