mirror of
https://github.com/CopilotKit/CopilotKit.git
synced 2026-09-14 16:26:20 +08:00
cf060da900
`generative-ui/tool-based` is the terminal page every onboarding run fetches, and its `## How it works in code` section renders a per-framework snippet. Nine frameworks shipped no snippet, so the section rendered nothing and the silence meant both "no agent-side wiring is needed" and "wiring is needed and nobody wrote it down". Each verdict was read out of the pinned adapter rather than the docs: - ag2: `run_stream` builds `client_tools` from `incoming.tools`. - mastra: the adapter reduces `input.tools` into `clientTools`. - strands, strands-typescript: a proxy tool per forwarded tool is registered in the agent's tool registry, and a native tool of the same name wins. - agno: its AG-UI interface never reads `RunAgentInput.tools`, so a component needs an `external_execution=True` stub and a `db` for the paused run. - deepagents: `CopilotKitMiddleware` merges `copilotkit.actions` into `request.tools`, so the middleware is load-bearing. - built-in-agent: config mode forwards for you, a factory does not. It is also the root framework, so this is the unscoped default page. The two .NET columns rest on their own demo agents, which render charts with an empty tool list. No .NET SDK was available to read the NuGet hosting package. REQUIREMENT_NOT_ESTABLISHED is now empty. The shape test pins each snippet, and setup-concept.test.ts no longer depends on ag2 being an open gap. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
45 lines
1.4 KiB
Plaintext
45 lines
1.4 KiB
Plaintext
<Steps>
|
|
<Step>
|
|
### Nothing to wire on the agent
|
|
|
|
AG2's AG-UI stream surfaces frontend-registered tools to the model on every
|
|
run, so the agent declares none of its own. A component registered with
|
|
`useComponent` reaches the model through the AG-UI request payload, and the
|
|
model calls it by name. Leave `functions` empty when the only tools in play
|
|
are frontend ones.
|
|
|
|
```python title="src/agents/chart_agent.py"
|
|
from autogen import ConversableAgent, LLMConfig
|
|
from autogen.ag_ui import AGUIStream
|
|
|
|
chart_agent = ConversableAgent(
|
|
name="chart_agent",
|
|
system_message=SYSTEM_PROMPT,
|
|
llm_config=LLMConfig({"model": "gpt-4o-mini", "stream": True}),
|
|
human_input_mode="NEVER",
|
|
functions=[],
|
|
)
|
|
|
|
chart_stream = AGUIStream(chart_agent)
|
|
```
|
|
|
|
</Step>
|
|
<Step>
|
|
### Tell the model when to call it
|
|
|
|
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 `system_message` 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 and let the chart do the talking."
|
|
)
|
|
```
|
|
|
|
</Step>
|
|
</Steps>
|