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 modelEvent, 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

Links

License

MIT © Anupam Kumar

Download files

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

Source Distribution

obyflow_python-0.0.5.tar.gz (32.0 kB view details)

Uploaded Source

Built Distribution

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

obyflow_python-0.0.5-py3-none-any.whl (26.8 kB view details)

Uploaded Python 3

File details

Details for the file obyflow_python-0.0.5.tar.gz.

File metadata

  • Download URL: obyflow_python-0.0.5.tar.gz
  • Upload date:
  • Size: 32.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for obyflow_python-0.0.5.tar.gz
Algorithm Hash digest
SHA256 5eb50a872fab1d72ecaf1630125c5fff6d7de63ab4b740f1197128bd26caa9d2
MD5 3628227c763f72d177938f4e1e8e7bc5
BLAKE2b-256 e4169ecb74c67cb56a6b58af623940f2255dd8771f80c753ef1a805162ddad5c

See more details on using hashes here.

File details

Details for the file obyflow_python-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: obyflow_python-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 26.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for obyflow_python-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 a263204897109dcbd58fb4408c81e6ac235d8b96d6581af476c2e9b627ba0c99
MD5 0acee3463473db223921c78632210ba1
BLAKE2b-256 c8e4c089481f4249736f450b5e82936e9cf9d4570277bb676c40d3df11dee30e

See more details on using hashes here.

Release history Release notifications | RSS feed

0.0.7

2 files

0.0.6

2 files

This release

0.0.5 This release

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 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