Skip to main content

obyflow-python

Python instrumentation SDK for Obyflow — an AI-native, CLI-first observability platform for tracing, debugging, and understanding modern applications (LLM calls, vector-store queries, LangChain steps, and plain HTTP included).

Events are captured locally to SQLite (no external backend required) and can then be explored, correlated, and investigated with the obyflow CLI.

Installation

pip install obyflow-python

Requires Python ≥ 3.9.

Optional extras

pip install "obyflow-python[langchain]"   # LangChain callback instrumentation
pip install "obyflow-python[analysis]"    # scikit-learn/numpy-backed ML anomaly detection

Quick start

from obyflow import start
from obyflow.instrumentation.asgi import ObyflowASGIMiddleware

handle = start(service="checkout-api")
app.add_middleware(ObyflowASGIMiddleware, service="checkout-api", store=handle.store)

For synchronous WSGI apps (Flask, Django sync views), use ObyflowWSGIMiddleware instead:

from obyflow import start
from obyflow.instrumentation.wsgi import ObyflowWSGIMiddleware

handle = start(service="checkout-api")
app.wsgi_app = ObyflowWSGIMiddleware(app.wsgi_app, service="checkout-api", store=handle.store)

Unlike the Node SDK, which auto-instruments any http-based server via a runtime patch installed by start(), Python's inbound HTTP tracing requires this explicit middleware registration by design (Node's global http.Server.prototype.emit patch has no equivalent that's safe across Python's various sync/async server models).

start() auto-instruments outbound HTTP, including automatic cross-service trace propagation (x-obyflow-trace-id / x-obyflow-parent-span-id headers), so traces stay linked across service boundaries with no manual header wiring.

handle.instrument is pre-bound to service/store/deployment_id/resource_attributes, so vector-store and LangChain instrumentation don't need those threaded through every call site:

handle.instrument.pinecone(index)
handle.instrument.langchain()

For manual trace-context propagation, use with_trace_context as a scoped context manager instead of the lower-level set_trace_context/reset_trace_context pair:

from obyflow import TraceContext, with_trace_context

with with_trace_context(TraceContext(trace_id="trace_123", request_id="req_123")):
    ...

Then, from the same project:

npx obyflow init
npx obyflow traces
npx obyflow investigate --since 15m

What's included

  • Canonical event model — Event, EmbeddingAttributes, VectorOpAttributes, ChainAttributes, ToolCallAttributes, LlmCallAttributes, with validate_event/safe_validate_event
  • ASGI middleware (ObyflowASGIMiddleware) — automatic inbound request tracing for FastAPI/Starlette and other ASGI apps
  • WSGI middleware (ObyflowWSGIMiddleware) — automatic inbound request tracing for Flask and Django (sync) apps
  • Outbound HTTP instrumentation (instrument_outbound_http) — wraps outbound calls (requests/httpx) with automatic trace-context propagation
  • LangChain instrumentation (ObyflowLangChainCallbackHandler / create_langchain_callback_handler) — chain, tool, and LLM call events
  • Vector database instrumentation — Pinecone, Qdrant, Weaviate, Chroma, pgvector, and Milvus, plus OpenAI/Anthropic/Cohere embedding calls
  • Statistical anomaly detection (compute_baseline_stats, classify_severity) — plain mean/stddev z-scored deviation baselining; a separate, Python-only convenience toolkit, not a port of the TypeScript core's rolling/robust baseline engine (see "Anomaly detection: Node vs Python" below)
  • ML-based anomaly detection (detect_ml_anomalies, [analysis] extra) — scikit-learn-backed anomaly scoring over event duration/error-rate features; Python-exclusive, with no TypeScript/core equivalent

Anomaly detection: Node vs Python

Capability Node/CLI (packages/core) Python (obyflow.analysis)
Mean/stddev baselining Yes Yes
Median/MAD ("robust") baselining Yes No
Rolling time-windowed buckets Yes No
Deployment-aware bucketing Yes No
Configurable z-score threshold Yes No (fixed thresholds in classify_severity)
ML-based detection (IsolationForest) No Yes (detect_ml_anomalies, [analysis] extra)

obyflow.analysis.stats/obyflow.analysis.anomaly are a separate, Python-only convenience toolkit rather than a port of the CLI's packages/core/src/anomaly/baseline.ts engine. A Python caller of compute_baseline_stats should not expect the same rigor (robust/rolling/deployment-aware baselining) the CLI's investigate/ask/incident commands get from core.

  • Redaction (redaction.py) — scrubs sensitive fields (passwords, tokens, credit cards, SSNs, API keys) before events are stored
  • Resource attributes (resource_attributes.py) — every event is auto-tagged with hostname, PID, Python version, and the current git commit SHA (from CI env vars or a local git rev-parse HEAD), powering commit-based "what changed" correlation in the CLI with no extra setup
  • Trace context propagation (context.py) — get_active_trace_id, get_active_request_id, get_active_span_id, get_active_parent_span_id, get_active_trace_context, and the scoped with_trace_context context manager for manual instrumentation

License

MIT © Anupam Kumar

Metadata

Release files for obyflow-python 1.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for obyflow-python 1.1.2
File Size Uploaded
obyflow_python-1.1.2.tar.gz 33.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for obyflow-python 1.1.2
File Interpreter ABI Platform
obyflow_python-1.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 60.5 kB

Release files / obyflow_python-1.1.2.tar.gz

Download URL obyflow_python-1.1.2.tar.gz
Size 33.2 kB
Tags Source
SHA-256 checksum
How to use checksums
ab6ef7c096d07be2b56f23b9e37fd4ac7d76b56eb22bc1353d83adc49d5bd2de
BLAKE2b-256 checksum
How to use checksums
9906f4a86e4abdfa600b7aceb04583a773a5185e9bd51bd8df98aaafb6b018ed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / obyflow_python-1.1.2-py3-none-any.whl

Download URL obyflow_python-1.1.2-py3-none-any.whl
Size 27.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ee15cf7ea08c2443d97d86fd471fdaa05bdab365511bee25050eb9a3a3652572
BLAKE2b-256 checksum
How to use checksums
b4ca20ede3c87bc311bc4c3b1140e001ad829406ab808c28642fcf0786958b1b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release history Release notifications | RSS feed

This release

1.1.2 This release

2 release files

1.1.1

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page