Skip to main content

TraceMeter

CI PyPI

Local-first, zero-infra cost & latency dashboard for LLM pipelines — built on OpenTelemetry GenAI semantic conventions, not competing with them.

OTel standardized the schema for LLM telemetry (gen_ai.* attributes). It deliberately ships no collector, no cost layer, and no UI for a solo developer to just run. TraceMeter is that missing piece: a single pip install gets you OTel-GenAI-compliant tracing, a local SQLite store, automatic cost calculation, and a dashboard — no collector, no exporter config, no account signup.

from openai import OpenAI
import tracemeter

client = tracemeter.instrument_openai(OpenAI())

with tracemeter.span("my_pipeline"):
    client.chat.completions.create(model="gpt-4o-mini", messages=[...])
tracemeter serve

Opens a local dashboard at http://127.0.0.1:8765 showing cost and latency broken down by run, step, and model — waterfall view per trace, cost breakdown by model, run-vs-run comparison, CSV/JSON export.

Why

  1. A product, not just a spec. OTel GenAI conventions describe the shape of the data; you still need a collector + backend + UI to see anything. TraceMeter is that consumer, ready to run locally in minutes.
  2. A cost layer. OTel captures token counts as attributes and stops there. TraceMeter ships a maintained, PR-friendly pricing table and computes cost automatically from standard gen_ai.usage.* attributes.
  3. A fast path to first insight. No collector to stand up, no exporter to configure, no backend to connect. pip install tracemeter to a cost-annotated dashboard in minutes.
  4. Interoperable by construction. Every span TraceMeter emits follows gen_ai.* naming, so the same data is portable to Datadog, Grafana/Tempo, Jaeger, or any OTLP-compatible backend. TraceMeter isn't a silo.

Status

Early / pre-alpha, but functional end-to-end. Working today:

  • Core SDK: @trace / tracemeter.span(), nested spans, SQLite storage
  • Auto-instrumentation for openai, anthropic, litellm client instances (sync + streaming)
  • Pricing engine with a versioned, PR-friendly table; unknown models fail open
  • Local dashboard (tracemeter serve): waterfall view, cost breakdown by model, run comparison, filtering, CSV/JSON export
  • OTLP/HTTP ingest (POST /v1/traces, both protobuf and JSON) so any OTel-instrumented app can use TraceMeter as a backend without its own SDK

Published on PyPI; not yet used in production anywhere — see Issues and PRD.md for the roadmap.

Install

pip install "tracemeter[all]"

Extras: [openai], [anthropic], [server] (dashboard), [otlp] (OTLP ingest), [all] (everything). For local development: git clone + pip install -e ".[all]".

Quickstart

from openai import OpenAI
import tracemeter

client = tracemeter.instrument_openai(OpenAI())

with tracemeter.span("summarize_doc"):
    client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": "Summarize this in one sentence: ..."}],
    )
tracemeter serve

Traces land in ~/.tracemeter/traces.db (override with TRACEMETER_DB_PATH); the dashboard reads from there. No collector, no exporter config, no account.

Using TraceMeter without its own SDK

Point any OTel SDK's OTLP exporter at a running tracemeter serve instance:

OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:8765

Spans with gen_ai.* attributes get cost computed automatically on ingest, same as spans from TraceMeter's own SDK. Verified against a real opentelemetry-sdk + opentelemetry-exporter-otlp-proto-http export during development.

Using TraceMeter with an AI coding assistant

If you're using Claude Code, Cursor, or another AI coding assistant and want it to add cost/latency tracing to your LLM calls, point it at this repo or paste something like:

Add tracing with tracemeter (pip install "tracemeter[all]", https://github.com/Kazu-Labs/tracemeter). Wrap the OpenAI/Anthropic client with tracemeter.instrument_openai() / instrument_anthropic(), wrap the pipeline in with tracemeter.span("..."):, and run tracemeter serve to see cost and latency locally.

The repo also includes llms.txt, a machine-readable summary of the API surface for agents that check for it.

Core concepts

  • Spans are OTel-GenAI-compliant: gen_ai.system, gen_ai.request.model, gen_ai.usage.input_tokens, etc., plus TraceMeter-specific extensions (tracemeter.cost.usd, tracemeter.latency_ms) namespaced so they never collide with future upstream additions.
  • Storage is local SQLite by default (~/.tracemeter/traces.db, override with TRACEMETER_DB_PATH). No infra required.
  • Pricing is a versioned JSON table (src/tracemeter/pricing/prices.json). Unknown models fail open: cost shows as "unknown," never silently wrong. PRs to keep it current are welcome.

Contributing

Pricing table updates are the easiest and most valuable contribution — see src/tracemeter/pricing/prices.json. It's a plain JSON file: add a model, open a PR.

pip install -e ".[dev,server,otlp]"
pytest

License

Apache 2.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tracemeter-0.1.1.tar.gz (40.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tracemeter-0.1.1-py3-none-any.whl (35.6 kB view details)

Uploaded Python 3

File details

Details for the file tracemeter-0.1.1.tar.gz.

File metadata

  • Download URL: tracemeter-0.1.1.tar.gz
  • Upload date:
  • Size: 40.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for tracemeter-0.1.1.tar.gz
Algorithm Hash digest
SHA256 b5da08bb5ae24fe889942a192d57ffb966b243a2aa573136e5130713d73c2408
MD5 b6957a0a33974bfec972ca6b106e9b8b
BLAKE2b-256 19c77c3f75e03a327cbfd890eafe595dcc8a3abb11679b681e9fd315ba5a0bdb

See more details on using hashes here.

Provenance

The following attestation bundles were made for tracemeter-0.1.1.tar.gz:

Publisher: release.yml on Kazu-Labs/tracemeter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tracemeter-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: tracemeter-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 35.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for tracemeter-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f34dade42d0a53c30a9a7538e0877bbc6d84dcaaebdafe171df1b3a980562d6b
MD5 958f78be4a79f883dffb88ac5720a888
BLAKE2b-256 671527285818994caa63abf53b4b0bd1390457eba4a72f8c5c75a7bdc388f19a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tracemeter-0.1.1-py3-none-any.whl:

Publisher: release.yml on Kazu-Labs/tracemeter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.2.0

2 files

This release

0.1.1 This release

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page