Works with your whole stack
One OpenTelemetry-native SDK instruments your providers and frameworks automatically, with no proxy in the request path. FortifyRoot normalizes who served, routed, and billed each call, even behind a gateway.

Model providers
OpenAI
Direct calls billed via openai.
Anthropic
Direct, and as the model provider behind OpenRouter / LiteLLM.
Google GenAI
Gemini-style traffic.
AWS Bedrock
Bedrock-native and Bedrock-routed roles.
xAI
Via OpenAI-compatible / OpenRouter paths (not a dedicated instrument).
Gateways & routers
OpenRouter
routing_provider=openrouter; model provider stays the underlying vendor.
LiteLLM (self-hosted)
routing_provider=litellm; billing defaults to the underlying model provider.
Frameworks
LangChain
Preserves the underlying provider on supported paths.
LangGraph
Via the LangChain instrumentation path.
LlamaIndex
Preserves the underlying provider on supported paths.
LiteLLM
Deterministic model/billing provider identification.
Provider-role normalization
FortifyRoot separates provider identity into three product-facing roles so cost and filters stay accurate behind gateways:
- Model provider
Whose model was used (e.g. Claude → anthropic).
- Routing provider
The gateway or proxy the call passed through (e.g. openrouter).
- Billing provider
Who priced/billed the call, for cost attribution.
This is the launch-certified support matrix, not an exhaustive list of every importable library. Provider-role labels require a current SDK and service version.
Instrument your stack in 2 lines
import fortifyroot.ocelle as ocelle
# Before running: export FORTIFYROOT_API_KEY="fr_sk_..."
ocelle.init(app_name="my-llm-app")pip install fortifyroot-ocelle, setFORTIFYROOT_API_KEY through your deployment environment, then keep calling your providers as usual.