530 lines
20 KiB
YAML
530 lines
20 KiB
YAML
name: Google ADK
|
|
slug: google-adk
|
|
category: agent-framework
|
|
language: python
|
|
logo: /logos/google-adk.svg
|
|
description: >-
|
|
CopilotKit integration with Google ADK (Agent Development Kit). Each demo is
|
|
a distinct ADK LlmAgent powered by Gemini, exposed via the ag-ui-adk
|
|
middleware so the React-side CopilotKit components can drive real ADK agents
|
|
end-to-end.
|
|
partner_docs: null
|
|
repo: https://github.com/CopilotKit/CopilotKit/tree/main/showcase/integrations/google-adk
|
|
copilotkit_version: 2.0.0
|
|
deployed: true
|
|
docs_mode: generated
|
|
sort_order: 15
|
|
generative_ui:
|
|
- constrained-explicit
|
|
- a2ui-fixed-schema
|
|
- a2ui-dynamic-schema
|
|
interaction_modalities:
|
|
- sidebar
|
|
- embedded
|
|
- chat
|
|
managed_platform:
|
|
name: Google AI Studio
|
|
url: https://aistudio.google.com
|
|
features:
|
|
- beautiful-chat
|
|
- cli-start
|
|
- agentic-chat
|
|
- prebuilt-sidebar
|
|
- prebuilt-popup
|
|
- chat-slots
|
|
- chat-customization-css
|
|
- headless-simple
|
|
- headless-complete
|
|
- reasoning-custom
|
|
- reasoning-default
|
|
- frontend-tools
|
|
- frontend-tools-async
|
|
- gen-ui-tool-based
|
|
- hitl-in-app
|
|
- hitl-in-chat
|
|
- declarative-gen-ui
|
|
- a2ui-fixed-schema
|
|
- a2ui-recovery
|
|
- gen-ui-agent
|
|
- tool-rendering-default-catchall
|
|
- tool-rendering-custom-catchall
|
|
- tool-rendering
|
|
- shared-state-read
|
|
- shared-state-read-write
|
|
- shared-state-streaming
|
|
- readonly-state-agent-context
|
|
- subagents
|
|
- multimodal
|
|
- auth
|
|
- declarative-hashbrown
|
|
- declarative-json-render
|
|
- open-gen-ui
|
|
- open-gen-ui-advanced
|
|
- voice
|
|
- agent-config
|
|
- mcp-apps
|
|
- gen-ui-interrupt
|
|
not_supported_features:
|
|
# Strategy-B (frontend-tool Promise) can't drive the headless `on_interrupt`
|
|
# event that this demo needs, and aimock can't replay custom events — so it's
|
|
# marked unsupported until aimock gains customEvents support (follow-up).
|
|
- interrupt-headless
|
|
- reasoning-default-render
|
|
- agentic-chat-reasoning
|
|
a2ui_pattern: schema-loading
|
|
thread_persistence_pattern: adk-session
|
|
agent_config_pattern: shared-state
|
|
auth_pattern: runtime-onrequest
|
|
demos:
|
|
- id: cli-start
|
|
name: CLI Start Command
|
|
description: Copy-paste command to clone the canonical starter
|
|
tags:
|
|
- chat-ui
|
|
command: "npx copilotkit@latest init --framework google-adk"
|
|
- id: agentic-chat
|
|
name: "Pre-Built: CopilotChat"
|
|
description: Vanilla CopilotChat with three starter-prompt suggestions — the minimum-viable surface for free-form chat
|
|
tags:
|
|
- chat-ui
|
|
route: /demos/agentic-chat
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/shared_chat.py
|
|
- src/app/demos/agentic-chat/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: chat-customization-css
|
|
name: Chat Customization (CSS)
|
|
description: Default CopilotChat re-themed via CopilotKitCSSProperties
|
|
tags:
|
|
- chat-ui
|
|
route: /demos/chat-customization-css
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/shared_chat.py
|
|
- src/app/demos/chat-customization-css/page.tsx
|
|
- src/app/demos/chat-customization-css/theme.css
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: tool-rendering-default-catchall
|
|
name: Tool Rendering (Default Catch-all)
|
|
description: Out-of-the-box tool rendering — backend defines the tools; the frontend adds zero custom renderers and relies on CopilotKit's built-in default UI
|
|
tags:
|
|
- generative-ui
|
|
route: /demos/tool-rendering-default-catchall
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/app/demos/tool-rendering-default-catchall/page.tsx
|
|
- src/agents/tool_rendering_default_catchall_agent.py
|
|
- src/agents/tool_rendering_common.py
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: tool-rendering-custom-catchall
|
|
name: Tool Rendering (Custom Catch-all)
|
|
description: Single branded wildcard renderer via useDefaultRenderTool — the same app-designed card paints every tool call
|
|
tags:
|
|
- generative-ui
|
|
route: /demos/tool-rendering-custom-catchall
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/app/demos/tool-rendering-custom-catchall/page.tsx
|
|
- src/app/demos/tool-rendering-custom-catchall/custom-catchall-renderer.tsx
|
|
- src/agents/tool_rendering_custom_catchall_agent.py
|
|
- src/agents/tool_rendering_common.py
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: frontend-tools
|
|
name: Frontend Tools (In-App Actions)
|
|
description: Agent invokes client-side handlers registered with useFrontendTool
|
|
tags:
|
|
- interactivity
|
|
route: /demos/frontend-tools
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/shared_chat.py
|
|
- src/app/demos/frontend-tools/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: frontend-tools-async
|
|
name: Frontend Tools (Async)
|
|
description: useFrontendTool with an async handler — agent awaits a client-side async operation and uses the returned result
|
|
tags:
|
|
- interactivity
|
|
route: /demos/frontend-tools-async
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/shared_chat.py
|
|
- src/app/demos/frontend-tools-async/page.tsx
|
|
- src/app/demos/frontend-tools-async/notes-card.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: hitl-in-chat
|
|
name: "Human In the Loop: In-chat"
|
|
description: Time-slot picker rendered inline in the chat via `useHumanInTheLoop` — the agent requests user input, the frontend renders a TimePickerCard, and the user's choice resumes the agent.
|
|
tags:
|
|
- interactivity
|
|
route: /demos/hitl-in-chat
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/hitl_in_chat_book_call_agent.py
|
|
- src/app/demos/hitl-in-chat/page.tsx
|
|
- src/app/demos/hitl-in-chat/time-picker-card.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: mcp-apps
|
|
name: MCP Apps
|
|
description: Runtime mcpApps config wires an Excalidraw MCP server; the built-in MCPAppsActivityRenderer renders the sandboxed iframe inline in the chat with no app-side renderer
|
|
tags:
|
|
- generative-ui
|
|
route: /demos/mcp-apps
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/mcp_apps_agent.py
|
|
- src/app/demos/mcp-apps/page.tsx
|
|
- src/app/api/copilotkit-mcp-apps/route.ts
|
|
- id: hitl-in-app
|
|
name: In-App Human in the Loop (Frontend Tools + async HITL)
|
|
description: Agent requests approval via a frontend tool with an async handler; the approval UI pops up as an app-level modal OUTSIDE the chat, and a completion callback resolves the pending tool Promise with the user's decision
|
|
tags:
|
|
- interactivity
|
|
route: /demos/hitl-in-app
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/hitl_in_app_agent.py
|
|
- src/app/demos/hitl-in-app/page.tsx
|
|
- src/app/demos/hitl-in-app/approval-dialog.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: gen-ui-interrupt
|
|
name: "Human in the Loop: Interrupts"
|
|
description: "Interactive time-picker rendered inline in the chat. ADK has no LangGraph interrupt() primitive, so this uses the Strategy-B adaptation — the agent calls a frontend schedule_meeting tool (useHumanInTheLoop) whose Promise resolves only once the user picks a slot, giving the same inline-card UX as the LangGraph reference."
|
|
tags:
|
|
- interactivity
|
|
route: /demos/gen-ui-interrupt
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/interrupt_agent.py
|
|
- src/app/demos/gen-ui-interrupt/page.tsx
|
|
- src/app/demos/gen-ui-interrupt/_components/time-picker-card.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: tool-rendering
|
|
name: Tool Rendering
|
|
description: Custom per-tool renderers (WeatherCard, FlightListCard) plus a wildcard catch-all for every other tool
|
|
tags:
|
|
- agent-capabilities
|
|
route: /demos/tool-rendering
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/tool_rendering_agent.py
|
|
- src/agents/tool_rendering_common.py
|
|
- src/app/demos/tool-rendering/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: gen-ui-tool-based
|
|
name: Tool-Based Generative UI
|
|
description: Agent uses tools to trigger UI generation
|
|
tags:
|
|
- controlled-generative-ui
|
|
route: /demos/gen-ui-tool-based
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/gen_ui_tool_based_agent.py
|
|
- src/app/demos/gen-ui-tool-based/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: gen-ui-agent
|
|
name: Agentic Generative UI
|
|
description: Canonical agent-state-driven Gen UI — the agent plans a live step list and emits it via state["steps"]; the frontend renders it via useAgent
|
|
tags:
|
|
- generative-ui
|
|
route: /demos/gen-ui-agent
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/gen_ui_agent.py
|
|
- src/app/demos/gen-ui-agent/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: shared-state-read
|
|
name: "Shared State: Read-only"
|
|
description: "Recipe editor publishes form state via agent.setState; the agent reads the recipe context but does not mutate it (no backend tool — neutral default agent)."
|
|
tags:
|
|
- agent-state
|
|
route: /demos/shared-state-read
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/app/demos/shared-state-read/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: shared-state-read-write
|
|
name: "Shared State: Read + Write"
|
|
description: Bidirectional shared state — UI writes preferences via agent.setState; agent writes notes via a Command-returning tool
|
|
tags:
|
|
- agent-state
|
|
route: /demos/shared-state-read-write
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/shared_state_read_write_agent.py
|
|
- src/app/demos/shared-state-read-write/page.tsx
|
|
- src/app/demos/shared-state-read-write/preferences-card.tsx
|
|
- src/app/demos/shared-state-read-write/notes-card.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: shared-state-streaming
|
|
name: State Streaming
|
|
description: Per-token state delta streaming from agent to UI via PredictStateMapping
|
|
tags:
|
|
- agent-state
|
|
route: /demos/shared-state-streaming
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/shared_state_streaming_agent.py
|
|
- src/app/demos/shared-state-streaming/page.tsx
|
|
- src/app/demos/shared-state-streaming/document-view.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: subagents
|
|
name: Sub-Agents
|
|
description: Multiple agents with visible task delegation
|
|
tags:
|
|
- multi-agent
|
|
route: /demos/subagents
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/subagents_agent.py
|
|
- src/app/demos/subagents/page.tsx
|
|
- src/app/demos/subagents/delegation-log.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: prebuilt-sidebar
|
|
name: "Pre-Built: Sidebar"
|
|
description: Docked sidebar chat via <CopilotSidebar />
|
|
tags:
|
|
- chat-ui
|
|
route: /demos/prebuilt-sidebar
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/shared_chat.py
|
|
- src/app/demos/prebuilt-sidebar/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: prebuilt-popup
|
|
name: "Pre-Built: Popup"
|
|
description: Floating popup chat via <CopilotPopup />
|
|
tags:
|
|
- chat-ui
|
|
route: /demos/prebuilt-popup
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/shared_chat.py
|
|
- src/app/demos/prebuilt-popup/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: chat-slots
|
|
name: Chat Customization (Slots)
|
|
description: Customize CopilotChat via its slot system
|
|
tags:
|
|
- chat-ui
|
|
route: /demos/chat-slots
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/shared_chat.py
|
|
- src/app/demos/chat-slots/page.tsx
|
|
- src/app/demos/chat-slots/slot-wrappers.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: headless-simple
|
|
name: Headless Chat (Simple)
|
|
description: Minimal custom chat surface built on useAgent
|
|
tags:
|
|
- chat-ui
|
|
route: /demos/headless-simple
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/shared_chat.py
|
|
- src/app/demos/headless-simple/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: headless-complete
|
|
name: Headless Chat (Complete)
|
|
description: Full chat implementation built from scratch on useAgent
|
|
tags:
|
|
- chat-ui
|
|
route: /demos/headless-complete
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/shared_chat.py
|
|
- src/app/demos/headless-complete/page.tsx
|
|
- src/app/demos/headless-complete/chat/chat.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: reasoning-custom
|
|
name: "Reasoning: Custom"
|
|
description: Visible reasoning/thinking chain alongside the final answer (Gemini 3.1 thinking mode)
|
|
tags:
|
|
- chat-ui
|
|
route: /demos/reasoning-custom
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/app/demos/reasoning-custom/page.tsx
|
|
- src/app/demos/reasoning-custom/reasoning-block.tsx
|
|
- src/agents/shared_chat.py
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: reasoning-default
|
|
name: "Reasoning: Default"
|
|
description: Built-in CopilotChatReasoningMessage rendering with no slot override.
|
|
tags:
|
|
- chat-ui
|
|
route: /demos/reasoning-default
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/shared_chat.py
|
|
- src/app/demos/reasoning-default/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: declarative-gen-ui
|
|
name: Declarative Generative UI (A2UI)
|
|
description: Canonical A2UI BYOC — custom catalog (Card/StatusBadge/Metric/InfoRow/PrimaryButton) wired via a2ui.catalog on the provider; the runtime injects the render_a2ui tool automatically (injectA2UITool=true) and the ag_ui_adk adapter auto-injects generate_a2ui
|
|
tags:
|
|
- generative-ui
|
|
route: /demos/declarative-gen-ui
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/declarative_gen_ui_agent.py
|
|
- src/app/demos/declarative-gen-ui/page.tsx
|
|
- src/app/demos/declarative-gen-ui/a2ui/catalog.ts
|
|
- src/app/demos/declarative-gen-ui/a2ui/definitions.ts
|
|
- src/app/demos/declarative-gen-ui/a2ui/renderers.tsx
|
|
- src/app/api/copilotkit-declarative-gen-ui/route.ts
|
|
- id: a2ui-fixed-schema
|
|
name: Declarative Generative UI (A2UI — Fixed Schema)
|
|
description: A2UI rendering against a known client-side schema
|
|
tags:
|
|
- generative-ui
|
|
route: /demos/a2ui-fixed-schema
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/a2ui_fixed_agent.py
|
|
- src/agents/a2ui_schemas/flight_schema.json
|
|
- src/agents/a2ui_schemas/booked_schema.json
|
|
- src/app/demos/a2ui-fixed-schema/page.tsx
|
|
- src/app/demos/a2ui-fixed-schema/a2ui/catalog.ts
|
|
- src/app/demos/a2ui-fixed-schema/a2ui/definitions.ts
|
|
- src/app/demos/a2ui-fixed-schema/a2ui/renderers.tsx
|
|
- src/app/api/copilotkit-a2ui-fixed-schema/route.ts
|
|
- id: a2ui-recovery
|
|
name: A2UI Error Recovery
|
|
description: Makes the A2UI validate->retry recovery loop visible — an invalid first render heals to a valid one, and an always-invalid render shows a graceful recovery-exhausted fallback. Backend-owned via get_a2ui_tool (injectA2UITool=false); reuses the declarative-gen-ui catalog. Also shipped for langgraph (python/fastapi/typescript) and strands (python/typescript).
|
|
tags:
|
|
- generative-ui
|
|
route: /demos/a2ui-recovery
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/recovery_agent.py
|
|
- src/app/demos/a2ui-recovery/page.tsx
|
|
- src/app/demos/a2ui-recovery/suggestions.ts
|
|
- src/app/api/copilotkit-a2ui-recovery/route.ts
|
|
- id: readonly-state-agent-context
|
|
name: Readonly State (Agent Context)
|
|
description: Frontend provides read-only context to the agent via useAgentContext
|
|
tags:
|
|
- agent-state
|
|
route: /demos/readonly-state-agent-context
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/readonly_state_agent_context_agent.py
|
|
- src/app/demos/readonly-state-agent-context/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: tool-rendering-reasoning-chain
|
|
name: Tool Rendering + Reasoning Chain (testing)
|
|
description: Sequential tool calls with reasoning tokens rendered side-by-side
|
|
tags:
|
|
- generative-ui
|
|
route: /demos/tool-rendering-reasoning-chain
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/tool_rendering_reasoning_chain_agent.py
|
|
- src/agents/tool_rendering_common.py
|
|
- src/app/demos/tool-rendering-reasoning-chain/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: declarative-json-render
|
|
name: "Declarative UI: json-render"
|
|
description: Streaming hierarchical JSON UI spec rendered via @json-render/react, with a Zod-validated catalog (MetricCard + PieChart + BarChart)
|
|
tags:
|
|
- generative-ui
|
|
route: /demos/declarative-json-render
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/byoc_agents.py
|
|
- src/app/demos/declarative-json-render/page.tsx
|
|
- src/app/demos/declarative-json-render/json-render-renderer.tsx
|
|
- src/app/api/copilotkit-declarative-json-render/route.ts
|
|
- id: beautiful-chat
|
|
name: Beautiful Chat
|
|
description: Canonical polished starter chat — brand fonts, theme tokens, suggestion pills
|
|
tags:
|
|
- chat-ui
|
|
route: /demos/beautiful-chat
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/beautiful_chat_agent.py
|
|
- src/app/demos/beautiful-chat/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: multimodal
|
|
name: Multimodal Attachments
|
|
description: Image and PDF uploads via CopilotChat attachments, processed by a Gemini multimodal agent
|
|
tags:
|
|
- chat-ui
|
|
route: /demos/multimodal
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/multimodal_agent.py
|
|
- src/app/demos/multimodal/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|
|
- id: auth
|
|
name: Authentication
|
|
description: Bearer-token gate via runtime onRequest hook with unauthenticated / authenticated states
|
|
tags:
|
|
- chat-ui
|
|
route: /demos/auth
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/app/demos/auth/page.tsx
|
|
- src/app/demos/auth/auth-banner.tsx
|
|
- src/app/demos/auth/demo-token.ts
|
|
- src/app/api/copilotkit-auth/route.ts
|
|
- id: declarative-hashbrown
|
|
name: "Declarative UI: Hashbrown"
|
|
description: Streaming structured output via @hashbrownai/react, rendering a sales dashboard catalog (MetricCard + PieChart + BarChart)
|
|
tags:
|
|
- generative-ui
|
|
route: /demos/declarative-hashbrown
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/byoc_agents.py
|
|
- src/app/demos/declarative-hashbrown/page.tsx
|
|
- src/app/api/copilotkit-declarative-hashbrown/route.ts
|
|
- id: open-gen-ui
|
|
name: Fully Open-Ended Generative UI
|
|
description: Agent generates UI from an arbitrary component library
|
|
tags:
|
|
- generative-ui
|
|
route: /demos/open-gen-ui
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/open_gen_ui_agents.py
|
|
- src/app/demos/open-gen-ui/page.tsx
|
|
- src/app/api/copilotkit-ogui/route.ts
|
|
- id: open-gen-ui-advanced
|
|
name: "Open-Ended Gen UI (Advanced: with frontend function calling)"
|
|
description: Agent-authored UI that can invoke frontend sandbox functions from inside the iframe
|
|
tags:
|
|
- generative-ui
|
|
route: /demos/open-gen-ui-advanced
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/open_gen_ui_agents.py
|
|
- src/app/demos/open-gen-ui-advanced/page.tsx
|
|
- src/app/api/copilotkit-ogui/route.ts
|
|
- id: voice
|
|
name: Voice Input
|
|
description: Speech-to-text via @copilotkit/voice with a bundled sample audio button
|
|
tags:
|
|
- chat-ui
|
|
route: /demos/voice
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/app/demos/voice/page.tsx
|
|
- src/app/demos/voice/sample-audio-button.tsx
|
|
- src/app/api/copilotkit-voice/[[...slug]]/route.ts
|
|
- id: agent-config
|
|
name: Agent Config Object
|
|
description: Forward a typed config object (tone / expertise / response length) from the provider to the agent's dynamic system prompt
|
|
tags:
|
|
- platform
|
|
route: /demos/agent-config
|
|
animated_preview_url:
|
|
highlight:
|
|
- src/agents/agent_config_agent.py
|
|
- src/app/demos/agent-config/page.tsx
|
|
- src/app/api/copilotkit/route.ts
|