Framework integrationsAgent frameworks
CrewAI
Connect CrewAI crews to Radicas via the OpenInference instrumentor.
Status: experimental — the strategy is implemented, but the deep-dive has NOT validated
this path: no captured fixture and no registry card yet (expected card:
openinference.crewai).
Install
pip install "radicas[crewai]" # = radicas + openinference-instrumentation-crewaiUse
import radicas
radicas.init(service="pricing-agent", feature="flight-pricing")
# instrument="auto" detects crewai and activates CrewAIInstrumentor().instrument()
# — or explicitly: radicas.init(instrument=["crewai"])
from crewai import Agent, Crew, Task
crew = Crew(agents=[analyst], tasks=[task])
crew.kickoff(inputs={"question": prompt})
radicas.shutdown()Explicit selection with the instrumentor missing raises MissingInstrumentorError naming
radicas[crewai].
What it emits
- Scope name:
openinference.instrumentation.crewai— expected, pending fixture. - Namespace:
llm.*/openinference.*(OpenInference) — CrewAI produces agent/task/tool spans, not the canonical names. - Coverage: no registry card yet — token/model/cache coverage is expected, pending fixture. (CrewAI's own opt-in product telemetry is unrelated to OTel.)
Shim behavior
- Client-side adapter: intended, pending card. Until
openinference.crewailands in the registry, the exporter passes CrewAI spans through unmapped (generic OpenInferencellm.*data is still caught by the ClickHouse COALESCE safety net for known aliases). - Server-side OTTL: pending the same card — write the mapping once, all three layers get it.
Known limitations
- Not fixture-verified end-to-end.
- The Traceloop route (
opentelemetry-instrumentation-crewai,gen_ai.*with older names) is the documented alternative; the deep-dive will pick the official route. - CrewAI's LiteLLM-backed
LLMclass may additionally emit through LiteLLM if you enable that strategy too — avoid double-activation unless you want both views.
Verify it works
SELECT model, input_tokens, output_tokens, estimated_cost_usd
FROM otel.llm_call ORDER BY ts DESC LIMIT 5;
SELECT DISTINCT ScopeName, SpanName FROM otel_traces ORDER BY 1, 2; -- deep-dive helperBench example (agent runnable, telemetry pending): agents/crewai/python in
radicas-integrations.