OpenInference
OpenInference instrumentors (the ones behind Arize Phoenix) work with Rius directly: they emit standard OpenTelemetry spans, so they only need an OTLP exporter pointed at the ingest endpoint.
Using Python? The Rius SDK ships these same instrumentors as extras and wires the exporter, privacy controls, and reliability behavior for you. This page is for running OpenInference without the SDK.
Wiring an instrumentor
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from openinference.instrumentation.openai import OpenAIInstrumentor
provider = TracerProvider()
provider.add_span_processor(
BatchSpanProcessor(
OTLPSpanExporter(
endpoint="https://ingest.eu.console.rius-glassflow.com/v1/traces",
headers={"Authorization": "Bearer <your API key>"},
)
)
)
OpenAIInstrumentor().instrument(tracer_provider=provider)Note the exporter class: otlp.proto.http (protobuf over HTTP). The
endpoint accepts no OTLP/JSON and no gRPC.
What gets captured
Everything. openinference.span.kind drives the span taxonomy (LLM, TOOL,
CHAIN, …), input.value / output.value are captured as span content, and
the LLM detail attributes (llm.model_name, llm.provider,
llm.token_count.*, llm.input_messages.*) are normalized into their
gen_ai.* equivalents at ingest, so OpenInference-instrumented calls get
model analytics, token usage, and server-side cost like native spans. On
streamed OpenAI calls the instrumentor’s first-token event is likewise
normalized to gen_ai.first_token, feeding time-to-first-token.
Details of the mapping, including the native-wins precedence rule, are in the supported-conventions matrix.
Next steps
- Auto-instrumentation: the same instrumentors, wired by the SDK, if your app is Python.
- Span attribute reference: the full normalization contract.