Skip to Content
RiusSDKUpgrading to 1.0

Upgrading to 1.0

Version 1.0.0 of both SDKs, glassflow-rius for Python and @glassflow-ai/rius for TypeScript, finishes the move from the GlassFlow name to Rius and brings span names in line with the OpenTelemetry GenAI conventions. The package names, the Python import (rius), and the supported runtimes (Python 3.10+, Node 18+) are unchanged.

1.0.0 needs the Rius platform release of 2026-09-29 or later, which reads the new rius.span.pending attribute. The hosted platform already runs it.

Python: rename your GLASSFLOW_* environment variables first. 1.0.0 reads only RIUS_* names. A GLASSFLOW_API_KEY or GLASSFLOW_ENDPOINT left in the environment is ignored, and with no API key the SDK exports nothing. The TypeScript SDK never read the old names.

Upgrade checklist

  1. Rename environment variables from GLASSFLOW_* to RIUS_*, for example GLASSFLOW_API_KEY to RIUS_API_KEY and GLASSFLOW_ENDPOINT to RIUS_ENDPOINT (Python only).

  2. Upgrade the package:

    pip install --upgrade "glassflow-rius>=1.0.0" npm install @glassflow-ai/rius@^1.0.0
  3. TypeScript with the Anthropic OpenInference instrumentation: upgrade @arizeai/openinference-instrumentation-anthropic to ^0.2.7 or later, the first version that reports prompt-cache tokens.

  4. Review saved searches, alerts, and dashboards that match on span names, operation names, or gen_ai.request.* keys. The tables below list what moved.

  5. If you run Langfuse, Traceloop, Logfire, MLflow, OpenLIT, or Laminar in the same process, decide whether to turn on the foreign provider bridge.

Breaking changes

What changedWhat to do
Python no longer reads GLASSFLOW_* environment variables.Rename them to RIUS_*.
The pending-span attribute is rius.span.pending, not glassflow.span.pending.Update any code that imports the constant.
The tracer scope is rius, not glassflow.Update collector or processor rules that filter on the instrumentation scope.
Unnamed spans follow the GenAI conventions: chat {model}, embeddings {model}, execute_tool {tool}, invoke_agent {agent}, retrieval {data_source}. CHAIN spans keep the function name, and an explicit name still wins.Update saved searches, alerts, and dashboards keyed on span name, or pass an explicit name.
RETRIEVER spans carry gen_ai.operation.name="retrieval" and accept data_source_id= (dataSourceId in TypeScript).Update filters on the old operation name.
model_parameters (modelParameters) maps 43 aliases onto 15 standard gen_ai.request.* keys. Other keys go under rius.request.*.Filter on the standard keys, or on rius.request.<key> for the rest.
TypeScript: the @arizeai/openinference-instrumentation-anthropic peer needs ^0.2.7.Upgrade that peer dependency.

Request parameters that moved

A parameter the GenAI conventions do not define no longer lands under gen_ai.request.*. The most common one is response_format:

0.x1.0
gen_ai.request.response_formatrius.request.response_format, as compact JSON
gen_ai.request.tool_choicerius.request.tool_choice
gen_ai.request.max_completion_tokensgen_ai.request.max_tokens
gen_ai.request.stopgen_ai.request.stop_sequences

See Request parameters for the full mapping rules.

Behaviour changes

  • Tool names. Python TOOL spans take tool_name=, and the TypeScript span helpers take toolName, so the tool name no longer comes from the span name. In Python the old form still works but emits a DeprecationWarning.
  • Attribute limit. A span can carry up to 4096 attributes, up from 128, so long agent spans keep their model, tools, usage, and system prompt. An OTEL_* attribute-count limit you set yourself still wins. See Span attribute limit.
  • Content capture. With content capture off, the OpenInference request-parameter bag (llm.invocation_parameters) is treated as content and is not sent. Embedding vectors are no longer exported by the Python SDK.
  • OpenInference spans are normalized to the GenAI conventions inside the SDK, so query the canonical keys, for example gen_ai.usage.input_tokens rather than llm.token_count.prompt.

Other OpenTelemetry SDKs in the same process

When Langfuse, Traceloop, Logfire, MLflow, OpenLIT, or Laminar owns the global tracer provider, Rius can bridge it, so that their spans, often the parents of your LLM calls, reach Rius too. The bridge is off by default. Turn it on with:

export RIUS_BRIDGE_FOREIGN_PROVIDER=1

or in code with bridge_foreign_provider=True (Python) or bridgeForeignProvider: true (TypeScript). Spans whose parent Rius never saw are flagged rius.parent.foreign either way.

With content capture off, the content keys those SDKs write are stripped too: Langfuse, Traceloop, Logfire, MLflow, and OpenLIT in Python, and Laminar’s lmnr.* keys in both SDKs.

Also new in 1.0

  • Context-size attribution on LLM spans, which feeds the context usage view.
  • record_exception, agent_name and agent_id, the RIUS_MAIN_AGENT_* environment variables, a first-token event, the response id, and service.version.

The full list is in each SDK’s changelog on GitHub: Python  and TypeScript .

Next steps

Last updated on