Skip to content

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.

  • SideSeat running locally (sideseat)
  • Python 3.9+
  • Google Cloud credentials configured
  1. Install dependencies

    Terminal window
    pip install google-adk sideseat
    # or
    uv add google-adk sideseat
  2. Add telemetry

    from sideseat import SideSeat, Frameworks
    SideSeat(framework=Frameworks.GoogleADK)
    from google.adk.agents import Agent
    from google.adk.runners import Runner
    agent = Agent(
    model="gemini-2.5-flash",
    name="assistant",
    instruction="You are a helpful assistant."
    )

Use the OpenTelemetry SDK directly:

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from 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

ADK supports session management:

import asyncio
from google.adk.apps import App
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from 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())
AttributeDescription
gen_ai.systemgoogle_adk
gen_ai.request.modelGemini model ID
gen_ai.usage.input_tokensInput token count
gen_ai.usage.output_tokensOutput token count