Changed
- Haystack, LlamaIndex, and CrewAI now use the OpenInference instrumentors instead of the OpenLLMetry/Traceloop ones (
opentelemetry-instrumentation-{haystack,llamaindex,crewai}). The OpenLLMetry instrumentors produced no/incomplete conversations and no model/token/cost (Haystack emitted dict-key "content", LlamaIndex emitted no LLM span at all, CrewAI dumped agent-config templates and leaked the provider API key). The OpenInference instrumentors capture the real exchange: Haystack and LlamaIndex now resolve provider/model and full tool-call conversations; CrewAI captures the whole conversation (incl. tool calls/results) and no longer leaks the API key. Instrumenting is unchanged ({"haystack": haystack},{"llamaindex": llama_index},{"crewai": crewai}). New deps:openinference-instrumentation-haystack==0.1.34,openinference-instrumentation-llama-index==4.4.2,openinference-instrumentation-crewai==1.1.9. - DSPy is now instrumented through litellm instead of the OpenInference DSPy instrumentor, which emitted no token usage (Arize/phoenix#3119, closed "not planned") and duplicated the conversation. DSPy runs every LM call through litellm, so
instrumentations={"litellm": litellm}captures the model call with provider/model/tokens/cost and the full conversation. Breaking: thedspyinstrumentation key is removed — passing{"dspy": ...}now raises (use{"litellm": litellm}). (Note: DSPy's response cache is on by default; cached calls don't hit litellm, so setcache=Falseondspy.LMto record usage on repeated runs.) - LiteLLM now uses LiteLLM's native OpenTelemetry callback instead of the OpenInference
openinference-instrumentation-litellm. The native callback emits standardgen_ai.*semantic-convention spans, so LiteLLM traces now resolve provider, cost, and token usage (previously no provider was emitted → cost was always 0). Instrumenting is unchanged — stillinstrumentations={"litellm": litellm}. The SDK configures the callback through env-backed settings, set withos.environ.setdefaultso you can override any of them:OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental(structuredgen_ai.{input,output}.messages),OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=SPAN_ONLY(record prompt/response content), andUSE_OTEL_LITELLM_REQUEST_SPAN=true(emit one child span per completion, so multiple calls in a capture no longer collapse onto the parent). Requireslitellm >= 1.88for the structured semconv + per-call spans; older versions still export but fall back to legacy attributes (no provider/cost). - OpenAI now uses the OpenInference
openaiinstrumentor (openinference-instrumentation-openai) instead of OpenLLMetry'sopentelemetry-instrumentation-openai. The OpenLLMetry instrumentor emitted nollm.request.typeon Responses API spans (so they resolvedoperation=unspecifiedand dropped out of the token/cost/conversation rollup) and flattened Responses tool turns into plain text. OpenInference resolves the operation natively for both Chat Completions and the Responses API, captures the fulltool_call/tool_call_responseturns, and records streaming token usage — provider/model/cost preserved. Instrumenting is unchanged ({"openai": openai}); Azure OpenAI (same key) benefits too. - Google Gemini now uses the OpenInference
google-genaiinstrumentor (openinference-instrumentation-google-genai) instead of the OpenLLMetryopentelemetry-instrumentation-google-generativeai. The OpenLLMetry instrumentor onlystr()-ified the currentgoogle-genaiSDK'sPartobjects, so tool calls and a binarythought_signatureleaked into message text as unreadable Python reprs. The OpenInference instrumentor structures tool calls (tool_callparts) and additionally captures reasoning-token usage. Instrumenting is unchanged — stillinstrumentations={"google_generativeai": genai}withfrom google import genai; install thegoogle-genaiSDK.
Removed
- Dropped the OpenLLMetry instrumentor deps
opentelemetry-instrumentation-haystack,opentelemetry-instrumentation-llamaindex, andopentelemetry-instrumentation-crewai(replaced by the OpenInference instrumentors). - Dropped the
opentelemetry-instrumentation-google-generativeaidependency (replaced byopeninference-instrumentation-google-genai). - Dropped the
opentelemetry-instrumentation-openaidependency (replaced byopeninference-instrumentation-openai). - Moved
openai-agentsout of runtime dependencies into the dev group — it's the host SDK for theopenai-agentsintegration (the user installs it when they use it), not something the SDK imports, so it no longer bloats every install. - Dropped the
openinference-instrumentation-dspydependency and thedspyinstrumentation key (DSPy is observed via litellm — see above). - Dropped the
openinference-instrumentation-litellmdependency (replaced by LiteLLM's built-in OpenTelemetry callback).