Install
Add to Cargo.toml:
[dependencies]
otel-genai-bridge-rs = "0.1"
Source: github.com/MukundaKatta/otel-genai-bridge-rs
Siblings in the observability stack
| Lib |
Boundary |
Repo |
| agenttrace-rs |
Aggregates LLM calls into runs with cost and latency, produces the spans this library translates |
MukundaKatta/agenttrace-rs |
| agentsnap-rs |
Jest-style snapshots for full agent traces, useful for asserting attribute shape over time |
MukundaKatta/agentsnap-rs |
| agenttap |
Python wire-level capture, intercepts the raw HTTP request before any span is created |
MukundaKatta/agenttap |
| otel-genai-bridge-rs |
This library. Translates attribute names between conventions on the existing span map |
MukundaKatta/otel-genai-bridge-rs |
The layers do not overlap much. agenttap captures what went on the wire. agenttrace-rs aggregates spans into run-level cost and timing. agentsnap-rs snapshots the full trace for regression checks. This bridge sits at the export boundary, just before the spans leave your process.
What is next
The main gap right now is attribute completeness. The initial mapping table covers the core fields: model name, system, token counts, invocation parameters. Richer fields like individual message role attributes, tool call details, and embedding vector dimensions are not yet mapped.
A second gap is partial mapping reporting. If you translate a span and some keys do not have a known translation, you get them back unchanged with no signal. Adding an option to return which keys were translated, which were passed through, and which had no known mapping would make it easier to spot instrumentation gaps. Right now you only discover coverage holes by comparing the input and output maps yourself.
A third area worth exploring is a registry mode. Instead of a hard-coded static table, you could register custom mappings at startup. Teams that have added internal attribute namespaces on top of either convention could extend the bridge without forking it. The static table would remain the default, but the API could accept additional mappings as a slice passed into the translate call.
The library ships with no async dependency and no OTel SDK dependency. That constraint stays. The translation table can grow without changing the public API surface, and the no-SDK rule means it stays usable in any Rust project regardless of whether you have the OTel machinery wired up.
Built for the Hermes Agent Challenge. The library is MIT licensed.