Framework integrationsAgent frameworks
Google ADK
Connect a Google ADK agent to Radicas — the reference integration, native gen_ai telemetry, no shim.
Status: stable — the reference integration and the only one verified end-to-end on the
bench (fixture captured, registry card google-adk filled, ClickHouse views confirmed).
Install
pip install "radicas[adk]" # = radicas + google-adkUse
import radicas
radicas.init(service="pricing-agent", feature="flight-pricing")
# instrument="auto" detects google.adk — activation is a no-op because ADK emits
# canonical gen_ai.* on the global tracer the SDK wired. Nothing else to do.
from google.adk.runners import InMemoryRunner
runner = InMemoryRunner(agent=my_agent, app_name="pricing-agent")
# ... drive the agent ...
radicas.shutdown()Explicit selection also works: radicas.init(instrument=["adk"]) (alias for google-adk).
What it emits
- Scope name:
google.adk(alsogcp.vertex.agent_engineon Agent Engine) — verified. - Span tree: the canonical
invoke_agent → generate_content → execute_tool, natively.transfer_to_agentspans are routing, excluded from tool counts. - Coverage (from the registry card, fixture-verified):
| Field | Covered |
|---|---|
gen_ai.request.model | yes |
gen_ai.usage.input_tokens | yes |
gen_ai.usage.output_tokens | yes |
gen_ai.usage.reasoning.output_tokens | yes |
cache tokens (cache_read / cache_creation) | not yet in the coverage matrix — pending fixture with caching enabled |
gen_ai.response.finish_reasons | yes |
gen_ai.system (provider) | no — ADK (verified 2.3.0) does not set it on generate_content; cost is unaffected (it keys on the model) |
| tool tree | yes |
| content events | yes (opt-in, logs signal) |
Shim behavior
- Client-side adapter: none needed — identity maps. The SDK still stamps
radicas.source_framework=google-adkat export for observability. - Server-side OTTL: stamp only, no renames.
Known limitations
gen_ai.systemis empty on realgenerate_contentspans (see above).- This page's example uses Gemini via an AI Studio API key; Vertex deployments emit under the
gcp.vertex.agent_enginescope, which the registry also recognizes.
Verify it works
-- ClickHouse (local lab: clickhouse-client / HTTP :8123)
SELECT agent_id, invocations, total_tokens, estimated_cost_usd FROM otel.agent_fleet;
SELECT model, input_tokens, output_tokens, estimated_cost_usd
FROM otel.llm_call ORDER BY ts DESC LIMIT 5;
SELECT tool_name, status, error_type FROM otel.tool_call ORDER BY ts DESC LIMIT 5;Dashboard: Cost & Profitability should show your feature within one metric interval.
Runnable bench example: agents/google-adk/python/run_sdk.py in radicas-integrations.