Introduction
Currai is observability for LLM apps. Trace every prompt, token, and tool call so you can debug, measure, and ship with confidence.
Currai captures what your LLM app is actually doing — every prompt, completion, tool call, token, and dollar — and turns it into traces you can search, replay, and roll up on a dashboard. Drop in an SDK (or point your existing OpenTelemetry exporter at Currai) and start sending data in minutes. No collector to run, no schema to define.
The data model
Everything Currai stores hangs off two concepts:
- A trace is one logical operation in your app — a chat turn, a RAG answer, an agent run. It carries top-level metadata: name, user, session, tags, environment, input, and output.
- An observation is a step inside a trace. There are three kinds:
- a generation — a single model call, with its model, parameters, prompt, completion, token usage, and latency;
- a span — any other unit of work, such as a retriever lookup or a tool call;
- an event — a point-in-time marker.
Observations nest freely: a span can contain generations and more spans, so the full tree of a request — retriever, tool, model, sub-model — is preserved.
How data gets in
You have two paths, and they write to the same backend:
- The SDKs — first-party TypeScript and Python clients mirror the Langfuse SDK surface (
trace(),generation(),span(),flush). They batch events in the background and POST them to the ingestion API. - OpenTelemetry — send OTLP spans carrying the
gen_ai.*semantic conventions to Currai's OTLP endpoint. Any OTel SDK in any language works. See OpenTelemetry.
Because the SDKs are wire-compatible with Langfuse, an app already instrumented with Langfuse can switch to Currai by changing one URL.
What you get
- Full traces with nested generations and spans, replayable end to end.
- Token usage and cost, computed for you and rolled up per trace, model, user, and day.
- Sessions and users — multi-turn conversations stitched together and sliced by end user.
- Hosted ingestion, storage, and dashboards — you operate none of it.
Next steps
- Installation — add the SDK to a TypeScript or Python app.
- Authentication — create your API keys.
- Your first trace — send a trace end to end.
currai