Run Google ADK (Agent Development Kit) agents on Flyte.
Project description
flyteplugins-agents-google
Run Google ADK (Agent Development Kit) agents on Flyte. You keep writing ADK agents; Flyte is the runtime underneath.
pip install flyteplugins-agents-google
import flyte
from flyteplugins.agents.google import tool, run_agent
env = flyte.TaskEnvironment(
"google-agent",
secrets=[flyte.Secret(key="google_api_key", as_env_var="GOOGLE_API_KEY")],
)
@tool
@env.task(cache="auto", retries=3)
async def get_weather(city: str) -> str:
"""Get the current weather for a city."""
return f"The weather in {city} is sunny, 22°C."
@env.task(report=True, retries=3)
async def city_agent(question: str) -> str:
return await run_agent(question, tools=[get_weather], model="gemini-2.0-flash")
How it maps to Flyte
- The SDK owns the loop — we don't reimplement it. ADK's
Runnerdrives the agent loop (model + tools, yieldingEvents);run_agentbuilds anLlmAgent, runsRunner.run_asyncinside your@env.task, and returns the final answer. - Tools as durable child actions.
toolwraps an@env.taskas the Python function ADK calls; its body dispatches totask.aio(), so each tool call runs as a durable Flyte child action. ADK derives the tool declaration from the task signature. - Durable, replayable model turns. With
durable=True, the agent's model is wrapped (FlyteLlm) so each turn throughBaseLlm.generate_content_async— the seam below the loop — is recorded viaflyte.trace. On a crash/retry, completed turns replay from their recordedLlmResponseand tools are cache hits. (Same idea as swapping OpenAI'sModelProvider: trace the model-call seam, not the loop.) - Observability: the turns and tool calls render into the task report.
The API key is read from the environment (e.g. GOOGLE_API_KEY for Gemini, or your
Vertex AI config), so it can't leak into task inputs — wire it as a Flyte secret.
Memory
Pass memory_key (a user/thread id) for cross-run memory — the agent continues
the same conversation across separate runs:
await run_agent(message, model="gemini-2.0-flash", memory_key="user-alice")
ADK keeps the conversation as a list of Events on the session; we persist those to a
durable, keyed MemoryStore and restore them into a fresh session on the next run
with the same key.
Examples
See examples/:
google_durable_agent.py— a single durable agent: tools as Flyte tasks, traced model turns, agent timeline in the report.google_multi_agent.py— multi-agent orchestration: a planner agent decomposes a topic, researcher agents fan out in parallel, an editor agent synthesizes — each agent its own durable action.google_crash_resume.py— crash & resume: the task crashes on its first attempt; on retry the completed model turns replay from theirflyte.tracerecords and the tool calls are cache hits. Run on a backend.google_memory.py— cross-run memory: two separate runs share amemory_key; the agent learns a fact in run 1 and recalls it in run 2.google_handoffs.py— native agent transfer: a triage agent transfers to a billing or technical-support sub-agent, the whole agent tree durable on Flyte. The specialist can pause on a Flyte condition (flyte.new_condition) to have a human share details mid-conversation, then resume with them.
Conformance
This adapter passes the shared flyteplugins.agents.core.testing.assert_adapter_conforms
check — the same one every adapter runs — so it follows the common format
(tool + run_agent, tool tasks wired to the resolver), shared with the
OpenAI, Claude and Mistral adapters.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flyteplugins_agents_google-2.5.11-py3-none-any.whl.
File metadata
- Download URL: flyteplugins_agents_google-2.5.11-py3-none-any.whl
- Upload date:
- Size: 9.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e025bb4c56dde762fe514911a5205cece7cea9387513b92bbe70d281d277cd2
|
|
| MD5 |
e7a241539f458a4d663047925cd0f576
|
|
| BLAKE2b-256 |
7dac30a01a55a23149ffcf421d015dc23a382f380670f904d3c396c2c7c745be
|