Skip to main content

traceguard

Point-in-time correct LLM instrumentation — the time-integrity layer for LLM pipelines.

When you run LLMs over historical data — backtesting a signal, replaying a pipeline, re-scoring an archive — TraceGuard makes it structurally hard to accidentally use a model or prompt that did not yet exist at the point in time you are simulating.

It is not a dashboard or a gateway; it is the lower layer that guarantees the timeline underneath one. It interoperates with observability stacks (Langfuse / Phoenix via the optional traceguard[otel] exporter) rather than competing with them. See docs/POSITIONING.md.

  • traceguard.registry.models — model registry with released_at / available_to_us_at; select_model(..., strict=...) with mandatory explicit mode (no default), so anachronistic choices fail loudly.
  • traceguard.registry.prompts — git-tracked YAML prompt templates; load_prompt pins the content hash into every trace.
  • traceguard.sdk.tracer@tracer.trace decorator and tracer.span() context manager recording input hash, model/prompt versions, output, and perf into SQLAlchemy (SQLite by default).
  • traceguard.sdk.normalizer — the single canonical normalize_input / input_hash (sorted keys, fixed float precision, normalized whitespace).
  • traceguard.sdk.wrappers.anthropicwrap_anthropic auto-instruments an Anthropic SDK client (extra: traceguard[anthropic]).
  • traceguard.validators.lookahead — pure-function invariant validators (validate_feature_as_of, validate_model_timing, validate_reference_timing) that raise InvariantViolation; call them in pytest/CI.

Install

pip install traceguard

Requires Python 3.11+. Optional extras: pip install "traceguard[anthropic]" (Anthropic client wrapper) and pip install "traceguard[otel]" (OpenTelemetry / OpenInference export to Langfuse, Phoenix, or any OTLP backend).

Example

from datetime import datetime, timezone
from traceguard.registry.models import register_model, select_model
from traceguard.store.models import make_engine

engine = make_engine("sqlite:///traceguard.db")

register_model("demo-llm-2024", model_family="internal-ml",
               capability_class="general-llm",
               released_at=datetime(2024, 1, 10, tzinfo=timezone.utc),
               available_to_us_at=datetime(2024, 2, 1, tzinfo=timezone.utc),
               engine=engine)

# Backtesting as of mid-2025: models that arrived later are invisible.
model_id = select_model("general-llm",
                        available_at=datetime(2025, 6, 30, tzinfo=timezone.utc),
                        strict=True, engine=engine)

A complete runnable tour (synthetic data, no API keys) lives in examples/quickstart.

Contract

The binding interface contract — table schemas, SDK signatures, the four look-ahead invariants, SemVer rules — is in docs/SPEC.md.

Phase 0 scope: tracer, model/prompt registries, normalizer, invariants 1–3, Anthropic wrapper. Not yet: drift checks, replay sets (invariant 4), CLI, Postgres/TimescaleDB, OpenAI/Voyage wrappers — see TRACEGUARD_ROADMAP.md.

Development

cd packages/traceguard
uv sync
uv run pytest        # 70 tests

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

traceguard-0.4.0.tar.gz (138.7 kB view details)

Uploaded Source

Built Distribution

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

traceguard-0.4.0-py3-none-any.whl (41.4 kB view details)

Uploaded Python 3

File details

Details for the file traceguard-0.4.0.tar.gz.

File metadata

  • Download URL: traceguard-0.4.0.tar.gz
  • Upload date:
  • Size: 138.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for traceguard-0.4.0.tar.gz
Algorithm Hash digest
SHA256 61ffbd6b67e5047b061cedc1cdbbb860356d6a43e4d1ccacce0be4257a31adf4
MD5 f2d3bdec9b558e1fa4c0f8b8c9b91d5c
BLAKE2b-256 1023b29c86c6eef24b22b514d5265f219a2473f77ae1516b19e02337ca03bc7c

See more details on using hashes here.

File details

Details for the file traceguard-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: traceguard-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 41.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for traceguard-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b9466169994a4c25fe936ca3f1ba0ceeb94d7403f9f11797e7b26b454c873de1
MD5 d9f32eaa0615dccc2d16f9e257a92184
BLAKE2b-256 a102db5509bebfb3cabb81b23ef68b1eff58c02e0edd2afc7f2e9eaa928d9c2e

See more details on using hashes here.

Supported by

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