a2ui-project / a2ui-project/a2ui
Unify System Instruction Generation for Text and Tool Output Modes
- Lenguaje dominante
- TypeScript
- Estrellas
- 16.4k
- Forks
- 1.3k
- Merge medio
- 2 d 13 h
- PR fusionados (30 d)
- 134
Descripción
## 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 https://github.com/google/A2UI/pull/1466 and https://github.com/google/A2UI/pull/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.
```python
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
```
Guía de contribución
Evaluación
Este issue todavía no se ha evaluado.