Metadata-Version: 2.5
Name: genkit-a2ui
Version: 0.12.0
Summary: A2UI (Agent-to-UI) middleware for Genkit.
Project-URL: Bug Tracker, https://github.com/genkit-ai/genkit/issues
Project-URL: Changelog, https://github.com/genkit-ai/genkit/releases
Project-URL: Documentation, https://genkit.dev/docs/get-started/?lang=python
Project-URL: Homepage, https://github.com/genkit-ai/genkit
Project-URL: Repository, https://github.com/genkit-ai/genkit/tree/main/py
Author: Google
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: a2ui,ai,genkit,llm,middleware
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Environment :: Web Environment
Classifier: Framework :: AsyncIO
Classifier: Framework :: Pydantic
Classifier: Framework :: Pydantic :: 2
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries
Classifier: Typing :: Typed
Requires-Python: >=3.10
Requires-Dist: genkit>=0.9.0
Requires-Dist: pydantic>=2.10.5
Provides-Extra: dev
Requires-Dist: pytest-asyncio>=0.25.2; extra == 'dev'
Requires-Dist: pytest-cov>=6.0.0; extra == 'dev'
Requires-Dist: pytest-xdist>=3.6.1; extra == 'dev'
Requires-Dist: pytest>=8.3.4; extra == 'dev'
Description-Content-Type: text/markdown

# genkit-a2ui

Experimental [A2UI](https://a2ui.org/) middleware for Genkit Python.

Add `Surfaces()` to `use=[...]` on `ai.generate` or `define_agent`. The model may
emit ` ```a2ui ` fences; the middleware rewrites them into
`application/a2ui+json` data parts. On the next turn, those parts become text
again so the model can see prior surfaces and button clicks.

```python
from genkit import Genkit
from genkit_a2ui import Surfaces, envelopes_from_parts
from genkit_google_genai import GoogleAI

ai = Genkit(plugins=[GoogleAI()])

response = await ai.generate(
    model='googleai/gemini-2.5-flash',
    prompt='Show me the weather in Tokyo',
    use=[Surfaces()],
)
envelopes = envelopes_from_parts(response.message.content)
```

`Surfaces()` uses the bundled basic catalog. To use your own components, register a
catalog and pass its id:

```python
from genkit_a2ui import Surfaces, A2uiCatalog, A2uiCatalogComponent, load_catalog

catalog = A2uiCatalog(
    id='https://my-app.org/catalogs/custom.json',
    components=(
        A2uiCatalogComponent(name='Banner', description='A prominent alert.', props='title: string.'),
    ),
)
load_catalog(ai, catalog)

response = await ai.generate(
    model='googleai/gemini-2.5-flash',
    prompt='Show a warning banner',
    use=[Surfaces(catalog=catalog.id)],
)
```

`load_catalog_file(ai, './my-catalog.json')` does the same from disk.
`register_basic_catalog(ai)` puts the bundled catalog on the registry so the
Developer UI can list it next to custom ones (`GET /api/values?type=a2ui-catalog`).

> Status: experimental.
