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”-
Install dependencies
Terminal window pip install google-adk sideseat# oruv add google-adk sideseat -
Add telemetry
from sideseat import SideSeat, FrameworksSideSeat(framework=Frameworks.GoogleADK)from google.adk.agents import Agentfrom google.adk.runners import Runneragent = Agent(model="gemini-2.5-flash",name="assistant",instruction="You are a helpful assistant.")
Without SideSeat SDK
Section titled “Without SideSeat SDK”Use the OpenTelemetry SDK directly:
from opentelemetry import tracefrom opentelemetry.sdk.trace import TracerProviderfrom opentelemetry.sdk.trace.export import BatchSpanProcessorfrom opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
provider = TracerProvider()provider.add_span_processor( BatchSpanProcessor( OTLPSpanExporter(endpoint="http://localhost:5388/otel/default/v1/traces") ))trace.set_tracer_provider(provider)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 Vertex AI — provider details
- Python SDK — SDK reference
- Core Concepts — understanding runs, steps, and messages