Skip to main content
Rime’s API and model services expose separate health endpoints. Check both before sending production traffic.

API container health

The API container serves /health on port 8000:
A ready deployment returns HTTP 200 with apiStatus: "ok" and modelReachable: true:
licenseStatus reads expired-or-not-set until the first authenticated request initializes the license, then valid. This does not affect the health endpoint’s status code.

Model container health

The model container serves /livez and /readyz on port 8080. Use /livez to confirm that the process is running and /readyz to confirm that it can accept inference requests.
A ready model returns ok.

OpenTelemetry metrics

The Rime engine exposes these metrics:
  • rime.engine.concurrent_pipeline
  • rime.engine.generated_audio_duration
  • rime.engine.gpu_load
  • rime.engine.initial_latency
  • rime.engine.invocation_request
  • rime.engine.unicode_scalar_value_count
  • rime.engine.stage.items_in
  • rime.engine.stage.items_out
  • rime.engine.stage.first_output_latency
The rime.engine.stage.* series carry a stage attribute. Set OTEL_COLLECTOR_PROTOCOL to grpc (recommended), http/protobuf, or http/json, and set OTEL_COLLECTOR_ENDPOINT to your collector endpoint:
The model does not set resource attributes. Use OTEL_RESOURCE_ATTRIBUTES to add them. The model also does not implement OpenTelemetry authentication, so run a collector sidecar when the upstream endpoint requires credentials. To expose the OpenTelemetry series for Prometheus, follow the Prometheus integration guide.

Logs

The model container writes one plain-text line per event to its standard output. Request text is not included by default: lines that describe a request carry text_chars, the length of the input, instead of the input itself. Set RIME_LOG_REQUEST_TEXT=true to include request text in those lines. Do this only where the container log stays inside a boundary that may hold end-user text; anything reading the log, including a log forwarder, receives the text verbatim.
Set OTEL_LOGS_EXPORTER=otlp to have the model also send every log line to the collector named by OTEL_COLLECTOR_ENDPOINT, over OTEL_COLLECTOR_PROTOCOL; both variables must be set as for metrics, or the switch exports nothing. The model sends each line as one OTLP log record: the line is the body, the log level is the severity, and request_id is an attribute on lines that belong to a request. The model sends logs nowhere else, and never to Rime.
Leave OTEL_LOGS_EXPORTER unset to keep logs on standard output only; the collector endpoint then carries metrics alone.

Histogram tuning

Metrics that emit histogram data use preconfigured bucket boundaries. Override them with the corresponding HISTOGRAM_BUCKETS_* environment variable. Add a separate suffix with HISTOGRAM_SUFFIX_* when you need to distinguish differently tuned series.

Initial latency

rime.engine.initial_latency is measured in milliseconds. Default bounds:
Example overrides:
The suffix produces rime.engine.initial_latency.tuned_120ms.

Generated audio duration

rime.engine.generated_audio_duration is measured in seconds. Default bounds:
Example overrides:
The suffix produces rime.engine.generated_audio_duration.tuned_3s.