Google Gemma models for ADK agents¶
ADK agents can use the Google Gemma family of generative AI models that offer a wide range of capabilities. ADK supports many Gemma features, including Tool Calling and Structured Output.
You can use Gemma 4 through the Gemini API, or by using one of many self-hosting options on Google Cloud: Vertex AI, Google Kubernetes Engine, Cloud Run.
Gemini API Example¶
Create an API key in Google AI Studio.
# Set GEMINI_API_KEY environment variable to your API key
# export GEMINI_API_KEY="YOUR_API_KEY"
# Simple tool to try
def get_weather(location: str) -> str:
return f"Location: {location}. Weather: sunny, 76 degrees Fahrenheit, 8 mph wind."
root_agent = LlmAgent(
model="gemma-4-31b-it",
name="weather_agent",
instruction="You are a helpful assistant that can provide current weather.",
tools=[get_weather] # Tools!
)
Self-hosted vLLM Example¶
To access Gemma 4 endpoints in these services, you can use vLLM models through the LiteLLM library for Python.
The following example shows how to use a Gemma 4 vLLM endpoint with ADK agents.
Setup¶
- Deploy Model: Deploy your chosen model using
Vertex AI,
Google Kubernetes Engine,
or Cloud Run,
and use its OpenAI-compatible API endpoint.
Note that the API base URL includes
/v1(e.g.,https://your-vllm-endpoint.run.app/v1).- Important for ADK Tools: When deploying, ensure the serving tool supports and enables compatible tool/function calling and reasoning parsers.
- Authentication: Determine how your endpoint handles authentication (e.g., API key, bearer token).
Code¶
import subprocess
from google.adk.agents import LlmAgent
from google.adk.models.lite_llm import LiteLlm
# --- Example Agent using a model hosted on a vLLM endpoint ---
# Endpoint URL provided by your model deployment
api_base_url = "https://your-vllm-endpoint.run.app/v1"
# Model name as recognized by *your* vLLM endpoint configuration
model_name_at_endpoint = "openai/google/gemma-4-31B-it"
# Simple tool to try
def get_weather(location: str) -> str:
return f"Location: {location}. Weather: sunny, 76 degrees Fahrenheit, 8 mph wind."
# Authentication (Example: using gcloud identity token for a Cloud Run deployment)
# Adapt this based on your endpoint's security
try:
gcloud_token = subprocess.check_output(
["gcloud", "auth", "print-identity-token", "-q"]
).decode().strip()
auth_headers = {"Authorization": f"Bearer {gcloud_token}"}
except Exception as e:
print(f"Warning: Could not get gcloud token - {e}.")
auth_headers = None # Or handle error appropriately
root_agent = LlmAgent(
model=LiteLlm(
model=model_name_at_endpoint,
api_base=api_base_url,
# Pass authentication headers if needed
extra_headers=auth_headers
# Alternatively, if endpoint uses an API key:
# api_key="YOUR_ENDPOINT_API_KEY",
extra_body={
"chat_template_kwargs": {
"enable_thinking": True # Enable thinking
},
"skip_special_tokens": False # Should be set to False
},
),
name="weather_agent",
instruction="You are a helpful assistant that can provide current weather.",
tools=[get_weather] # Tools!
)
Build a food tour agent with Gemma 4, ADK, and Google Maps MCP¶
This sample shows how to build a personalized food tour agent using Gemma 4, ADK, and the Google Maps MCP server. The agent takes a user’s dish photo or text description, a location, and an optional budget, then recommends places to eat and organizes them into a walking route.
Prerequisites¶
- Enable Google Maps API on Google Cloud Console.
- Create a Google Maps Platform API key.
- Create a Gemini API key in Google AI Studio.
- ADK installed and configured in your Python environment
Project structure¶
Full project can be found hereagent.py
import os
import dotenv
from google.adk.agents import LlmAgent
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams
dotenv.load_dotenv()
system_instruction = """
You are an expert personalized food tour guide.
Your goal is to build a culinary tour based on the user's inputs: a photo of a dish (or a text description), a location, and a budget.
Follow these 4 rigorous steps:
1. **Identify the Cuisine/Dish:** Analyze the user's provided description or image URL to determine the primary cuisine or specific dish.
2. **Find the Best Spots:** Use the `search_places` tool to find highly rated restaurants, stalls, or cafes serving that cuisine/dish in the user's specified location.
**CRITICAL RULE FOR PLACES:** `search_places` returns AI-generated place data summaries along with `place_id`, latitude/longitude coordinates, and map links for each place, but may lack a direct, explicit name field. You must carefully associate each described place to its provided `place_id` or `lat_lng`.
3. **Build the Route:** Use the `compute_routes` tool to structure a walking-optimized route between the selected spots.
**CRITICAL ROUTING RULE:** To avoid hallucinating, you MUST provide the `origin` and `destination` using the exact `place_id` string OR `lat_lng` object returned by `search_places`. Do NOT guess or hallucinate an `address` or `place_id` if you do not know the exact name.
4. **Insider Tips:** Provide specific "order this, skip that" insider tips for each location on the tour.
Structure your response clearly and concisely. If the user provides a budget, ensure your suggestions align with it.
"""
MAPS_MCP_URL = "https://mapstools.googleapis.com/mcp"
def get_maps_mcp_toolset():
dotenv.load_dotenv()
maps_api_key = os.getenv('MAPS_API_KEY')
if not maps_api_key:
print("Warning: MAPS_API_KEY environment variable not found.")
maps_api_key = "no_api_found"
tools = MCPToolset(
connection_params=StreamableHTTPConnectionParams(
url=MAPS_MCP_URL,
headers={
"X-Goog-Api-Key": maps_api_key
}
)
)
print("Google Maps MCP Toolset configured.")
return tools
maps_toolset = get_maps_mcp_toolset()
root_agent = LlmAgent(
model="gemma-4-31b-it",
name="food_tour_agent",
instruction=system_instruction,
tools=[maps_toolset],
)
Environment variables¶
Set the required environment variables before running the agent.
Example usage¶
To test out the capabilities of the Food Tour Agent, try pasting one of these prompts into the chat:
- "I want to do a ramen tour in Toronto. My budget is $60 for the day. Give me a walking route for the top 3 spots and tell me what I should order at each."
- "I have this photo of a deep dish pizza [insert image URL]. I want to find the best places for this around Navy Pier in Chicago. Structure a walking tour and tell me what the must-have slice is at each stop."
- "I'm in Downtown Austin looking for an authentic BBQ tour. Let's keep the budget under $100. Build a walking route between 3 highly-rated spots and give me insider tips on the best cuts of meat to get."
The agent will:
- Infer the likely cuisine or dish style
- Search for relevant places using Google Maps MCP tools
- Compute a walking route between selected stops
- Return a structured food tour with recommendations and insider tips