showcase/integrations/pydantic-ai/docs/setup/frontend-tools-setup.mdx
PydanticAI's AG-UI bridge surfaces frontend-registered tools to the model on
every run, so the agent declares no tools of its own. A component registered
with `useComponent` reaches the model through the AG-UI request payload and
the model calls it by name.
```python title="src/agents/chart_agent.py"
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIResponsesModel
agent = Agent(
model=OpenAIResponsesModel("gpt-4.1-mini"),
system_prompt=SYSTEM_PROMPT,
)
```
This is the part that is easy to miss. The tool arrives on every run, but a
model with no instruction about it will answer in prose and never call it.
Name the tool in the system prompt and say what it is for.
```python title="src/agents/chart_agent.py"
SYSTEM_PROMPT = """
You are a data visualization assistant.
When the user asks for a chart, call `render_bar_chart` with a concise
title and a `data` array of `{label, value}` items.
Keep chat responses brief — let the chart do the talking.
"""
```