Google ADK
Google ADK (Agent Development Kit) is Google’s framework for building AI agents powered by Gemini models. It provides native OpenTelemetry support for tracing agent runs.
Prerequisites
Section titled “Prerequisites”- SideSeat running locally (
sideseat) - Python 3.9+
- Google Cloud credentials configured
Quick Start
Section titled “Quick Start”-
Start SideSeat
Terminal window npx sideseat -
Install dependencies
Terminal window pip install google-adk sideseatTerminal window uv add google-adk sideseat -
Add telemetry
from sideseat import SideSeat, Frameworksfrom google.adk.agents import Agentfrom google.adk.runners import RunnerSideSeat(framework=Frameworks.GoogleADK)agent = Agent(model="gemini-2.5-flash",name="assistant",instruction="You are a helpful assistant.") -
View runs
Open http://localhost:5388 to see your runs.
Without SideSeat SDK
Section titled “Without SideSeat SDK”-
Start SideSeat
Terminal window npx sideseat -
Set the endpoint
Terminal window export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:5388/otel/default -
Install dependencies
Terminal window pip install google-adk opentelemetry-sdk opentelemetry-exporter-otlpTerminal window uv add google-adk opentelemetry-sdk opentelemetry-exporter-otlp -
Add telemetry
from opentelemetry import tracefrom opentelemetry.sdk.trace import TracerProviderfrom opentelemetry.sdk.trace.export import BatchSpanProcessorfrom opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporterprovider = TracerProvider()provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter()))trace.set_tracer_provider(provider) -
View runs
Open http://localhost:5388 to see your runs.
Define tools for your agent:
from google.adk.agents import Agent
def get_weather(city: str) -> dict: """Get weather for a city.""" return {"city": city, "forecast": "sunny"}
agent = Agent( model="gemini-2.5-flash", name="weather_assistant", instruction="Use the get_weather tool to provide forecasts.", tools=[get_weather])SideSeat shows:
- Parent span for the agent run
- Child spans for each Gemini call
- Child spans for each tool execution
Sessions
Section titled “Sessions”ADK supports session management:
import asynciofrom google.adk.apps import Appfrom google.adk.runners import Runnerfrom google.adk.sessions import InMemorySessionServicefrom google.genai import types
app = App(name="my_app", root_agent=agent)session_service = InMemorySessionService()
async def run(): session = await session_service.create_session( app_name="my_app", user_id="user-123", session_id="session-456" )
runner = Runner(app=app, session_service=session_service)
message = types.Content( role="user", parts=[types.Part(text="Hello!")] )
async for event in runner.run_async( session_id=session.id, user_id="user-123", new_message=message ): if event.content and event.content.parts: for part in event.content.parts: if hasattr(part, "text") and part.text: print(part.text)
asyncio.run(run())Extracted Attributes
Section titled “Extracted Attributes”| Attribute | Description |
|---|---|
gen_ai.system | google_adk |
gen_ai.request.model | Gemini model ID |
gen_ai.usage.input_tokens | Input token count |
gen_ai.usage.output_tokens | Output token count |
Next Steps
Section titled “Next Steps”- Google Gemini — provider details
- Python SDK — SDK reference
- Core Concepts — understanding runs, steps, and messages