Skip to main content

Telemetry collector for AI agents — stream runs, tools, LLM calls, and chains to the Dobby AI Control Plane for governance

Project description

dobby-collector

Telemetry collector for AI agents — stream runs, tools, LLM calls, and chains to the Dobby AI Control Plane for governance and compliance.

Status Python License

dobby-collector is the customer-side Python package for sending telemetry from any AI agent — LangChain, CrewAI, AutoGen, plain OpenAI/Anthropic SDKs, or custom code — to Dobby's governance plane. Every captured run gets evaluated by the Policy Scanner against your imported Compliance Packs (SOC 2, GDPR, EU AI Act, etc.) and surfaces violations in the Dobby dashboard.

Install

pip install dobby-collector

Quickstart

from dobby_collector import init, track, span, start_run, end_run

# 1. Initialize once at agent startup
init(
    api_key="dsdk_...",       # Generate at /dashboard/workloads/connect/python-sdk
    connector_id="wc_...",       # Same wizard hands you the connector ID
    framework="langchain",        # or 'crewai' | 'autogen' | omit to auto-detect
)

# 2. Decorate tool functions
@track(name="search_database", kind="tool")
def search_db(query: str) -> list:
    return db.execute(query)

# 3. Use spans for fine-grained capture
with span("retrieval", kind="tool", inputs={"query": "find AI startups"}):
    docs = retriever.invoke("find AI startups")

# 4. Wrap agent invocations in start/end_run
run = start_run(name="weekly_report", inputs={"week": "2026-W19"})
try:
    output = my_agent.run("Generate the weekly report")
    end_run(run, outputs={"report": output}, status="success")
except Exception as e:
    end_run(run, error=str(e), status="error")
    raise

The SDK runs a background thread that flushes events every 10 seconds (or immediately on terminal run.completed / run.failed events). Telemetry never blocks your agent — buffer overflow drops the oldest events silently.

What gets captured

What When Captured fields
Run boundaries start_run / end_run inputs, outputs, status, duration
Tool calls @track(kind="tool") or span(kind="tool") tool name, args, output, duration
LLM calls LangChain / Gemini (google-genai) auto-instrument, or @track(kind="llm") model, prompt, completion, tokens, latency
Custom spans @track() / span() name, inputs, outputs, duration

Config reference

init(
    api_key="dsdk_...",              # REQUIRED — or set DOBBY_API_KEY env var
    connector_id="wc_...",              # REQUIRED — or set DOBBY_CONNECTOR_ID env var
    base_url="https://dobby-ai.com",    # Override for self-hosted; or DOBBY_BASE_URL env
    flush_interval_seconds=10.0,        # How often the sender thread flushes
    max_buffer_events=10_000,           # Ring buffer cap (oldest dropped on overflow)
    framework="auto",                   # Hint or pin: 'langchain' | 'crewai' | 'autogen'
    host_fingerprint=None,              # Optional hostname/container ID for multi-replica
    exclude_fields=[],                  # Fields to scrub from `data` payloads (Phase 2b)
)

Environment variables

The SDK reads these as fallbacks for init() args:

Env var Default Purpose
DOBBY_API_KEY Connector bearer token (dsdk_*) — minted by the wizard
DOBBY_CONNECTOR_ID Workload connector ID (wc_*)
DOBBY_BASE_URL https://dobby-ai.com Dobby control-plane URL

Set them in your deployment config and skip the corresponding init() args.

Lifecycle

from dobby_collector import init, shutdown

init(...)
# ... your agent runs ...
shutdown(timeout_seconds=5.0)  # Drains buffer + stops sender thread

shutdown() auto-fires via atexit if you forget, but call it explicitly when possible — atexit hooks have less time to drain before SIGTERM.

Status — v0.4.1 LIVE on PyPI · v0.4.2 pending publish

Shipped (Phases 1 → 6):

  • ✅ Manual API: init / track / span / start_run / end_run / shutdown
  • ✅ In-memory ring buffer + background sender + HTTP retries
  • ✅ SQLite DLQ — events survive network outages + process crashes
  • ✅ Field exclusion (exclude_fields=[...])
  • LangChain auto-instrumentfrom dobby_collector.integrations.langchain import DobbyCallbackHandler
  • CrewAI auto-instrumentfrom dobby_collector.integrations.crewai import DobbyCrewAIHandler (CrewAI ≥ 1.0)
  • AutoGen auto-instrumentfrom dobby_collector.integrations.autogen import DobbyAutoGenLogHandler (AutoGen ≥ 0.4)
  • OpenAI Assistants auto-instrumentfrom dobby_collector.integrations.openai_assistants import DobbyAssistantsHandler
  • Google Gen AI (Gemini) auto-instrumentfrom dobby_collector.integrations.google_genai import instrument_google_genai (google-genai ≥ 1.0; patches client.models.generate_content + stream + async). Install: pip install dobby-collector[google_genai]
  • call_gemini_json() — direct-REST Gemini call → parsed JSON, for agents that don't use the google-genai SDK — from dobby_collector.integrations.google_genai import call_gemini_json, LlmJsonError. Thinking disabled by default (a "thinking" model sharing maxOutputTokens between reasoning and the answer can truncate the JSON mid-response) + one bounded retry on a truncated/malformed response before raising typed LlmJsonError (never a bare JSONDecodeError). No extra install — pure httpx (already a core dependency).
  • W3C Trace Context auto-emission per outbound batch (Option C, v0.4.0)

Quickstart pages (customer-facing on dobby-ai.com):

Coming up (separate session):

  • Node.js port — see .claude/plans/parallel-sessions/node-collector-sdk-port-2026-05-16.md

See CHANGELOG.md for the per-version detail.

License

MIT — see LICENSE.

Runnable examples

Six end-to-end working agents you can python immediately after pip install. All make REAL LLM calls (no mocks) — substitute the model/tool for whatever your stack uses:

  • examples/langchain_real_agent.py — LangChain ReAct agent with DuckDuckGo search, instrumented via DobbyCallbackHandler. Install: pip install dobby-collector[langchain].
  • examples/crewai_real_agent.py — CrewAI sequential crew (Researcher + Writer) with optional web search tool, instrumented via DobbyCrewAIHandler. Requires crewai>=1.0. Install: pip install dobby-collector[crewai].
  • examples/autogen_real_agent.py — AutoGen AssistantAgent (gpt-4o-mini) with a Python tool function, instrumented via DobbyAutoGenLogHandler. Requires autogen-core>=0.4. Install: pip install dobby-collector[autogen].
  • examples/openai_assistants_real_agent.py — OpenAI Assistants API with a function tool, streamed through client.beta.threads.runs.stream() with DobbyAssistantsHandler. Install: pip install dobby-collector[openai_assistants].
  • examples/google_genai_real_agent.py — Gemini via the google-genai SDK (client.models.generate_content) plus a urllib tool call, auto-instrumented via instrument_google_genai() (monkey-patches the SDK — google-genai has no callback hook surface). Install: pip install dobby-collector[google_genai].
  • examples/manual_api_real_agent.py — Plain Python + OpenAI SDK + urllib, instrumented via manual @track / span / start_run API. Recommended for custom orchestration / OpenAI Responses API / any framework without a Dobby auto-handler yet.

All scripts call https://dobby-ai.com and produce real workload_runs + compliance_scans rows visible in the UI within ~60s.

Customer walkthrough

Step-by-step onboarding guide (10–15 min, written for non-Dobby engineers):

Covers: wizard navigation → install → run → verify in UI + 7 troubleshooting scenarios (auth errors / DLQ / proxies / serverless / field exclusion).

Links

Project details


Download files

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

Source Distribution

dobby_collector-0.8.0.tar.gz (126.4 kB view details)

Uploaded Source

Built Distribution

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

dobby_collector-0.8.0-py3-none-any.whl (68.4 kB view details)

Uploaded Python 3

File details

Details for the file dobby_collector-0.8.0.tar.gz.

File metadata

  • Download URL: dobby_collector-0.8.0.tar.gz
  • Upload date:
  • Size: 126.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for dobby_collector-0.8.0.tar.gz
Algorithm Hash digest
SHA256 dc548f16d82e0971bc3b61d0fd1a7371fed6e032fafcd362b870baf2c7fd209e
MD5 b59ffd8a419d0fe27ee758ad54b01b06
BLAKE2b-256 ef67e0634c2d93a5433e874f2c13b38144065d66eea5f23f42133db1cc42cbef

See more details on using hashes here.

File details

Details for the file dobby_collector-0.8.0-py3-none-any.whl.

File metadata

File hashes

Hashes for dobby_collector-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7630cfdfd0852b6f3174ebe631e30a08f7318585bdbc2d5d3e040ac8330dc599
MD5 ca38b936ab71521258c34869641848d4
BLAKE2b-256 d260646afe336e2d10857c10ad5f6c1b5d700f428020495cff5320a80d8f75ec

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