Make visualization outputs configurable

November 9, 2025 ยท View on GitHub

To showcase the settings extension of Agent Stack we can make the visualizations optional. Users can then turn them off before sending a new request to the agent. The following example show the use of agent settings:

from agentstack_sdk.a2a.extensions import (
    SettingsExtensionServer,
    SettingsExtensionSpec,
    SettingsRender,
    CheckboxGroupField,
    CheckboxField,
)

@server.agent()
async def flight_search_agent(
    ...,
    settings: Annotated[
        SettingsExtensionServer,
        SettingsExtensionSpec(
            params=SettingsRender(
                fields=[
                    CheckboxGroupField(
                        id="create_visualization",
                        fields=[
                            CheckboxField(id="png", label="Create PNG Visualization", default_value=True),
                            CheckboxField(id="html", label="Create HTML Visualization", default_value=True),
                        ],
                    ),
                ],
            ),
        ),
    ],
):
    # define variables we will use to configure agent
    create_visualization_settings = settings.parse_settings_response().values["create_visualization"].values
    create_png = create_visualization_settings["png"].value
    create_html = create_visualization_settings["html"].value
    create_visualization = create_png or create_html

Now we can just add a few if statements and contitions:

@server.agent()
async def flight_search_agent(...):
    @tool
    async def visualize_flights(flights: list[list[str]]) -> None:
        ...
        # save resource by skipping visualization if not required
        if create_png:
            static_png_bytes = create_static_map(flights_gdf, airports_gdf)
        if create_html:
            interactive_html_bytes = create_interactive_map(flights_gdf, airports_gdf)

    # updagte agent requirements:
    async for event, meta in RequirementAgent(
        llm=llm,
        tools=[*kiwi_tools, ensure_all_data, visualize_flights],
        requirements=[
            ...,
            ConditionalRequirement(visualize_flights, force_after=kiwi_tools, enabled=create_visualization),
        ],
    ).run(prompt):
        ...

settings

Let's move on to the next topic: 06-save-conversation