Skip to main content

Python SDK for NodeLoom AI agent monitoring and telemetry

Project description

NodeLoom Python SDK

Python SDK for instrumenting AI agents and sending telemetry to NodeLoom.

Features

  • Fire-and-forget telemetry that never blocks or crashes your application
  • Automatic batching and retry with exponential backoff
  • Context manager support for traces and spans
  • Built-in integrations for LangChain and CrewAI
  • Thread-safe client (individual traces/spans are single-threaded)
  • Bounded in-memory queue prevents unbounded memory growth
  • Configurable via constructor arguments

Requirements

  • Python 3.9+

Installation

pip install nodeloom-sdk

With LangChain integration:

pip install nodeloom-sdk[langchain]

With CrewAI integration:

pip install nodeloom-sdk[crewai]

Quick Start

from nodeloom import NodeLoom, SpanType

client = NodeLoom(api_key="sdk_your_api_key")

with client.trace("my-agent", input={"query": "What is NodeLoom?"}) as trace:
    with trace.span("llm-call", type=SpanType.LLM) as span:
        span.set_input({"messages": [{"role": "user", "content": "What is NodeLoom?"}]})
        # ... call your LLM ...
        span.set_output({"text": "NodeLoom is an AI agent operations platform."})
        span.set_token_usage(prompt=15, completion=20, model="gpt-4o")

client.shutdown()

Traces and Spans

A trace represents a single end-to-end agent execution. A span represents a unit of work within a trace (an LLM call, tool invocation, retrieval step, etc.).

Span Types

Type Description
SpanType.LLM Language model call
SpanType.TOOL Tool or function invocation
SpanType.RETRIEVAL Vector search or data retrieval
SpanType.CHAIN Pipeline or chain of steps
SpanType.AGENT Sub-agent invocation
SpanType.CUSTOM User-defined operation

Nested Spans

with client.trace("my-agent") as trace:
    with trace.span("agent-step", type=SpanType.AGENT) as parent:
        with trace.span("llm-call", type=SpanType.LLM, parent_span_id=parent.span_id) as child:
            child.set_output({"response": "..."})
            child.set_token_usage(prompt=10, completion=20, model="gpt-4o")

Standalone Events

client.event("guardrail_triggered", level=EventLevel.WARN, data={"rule": "pii_detected"})

Error Handling

Traces and spans used as context managers automatically catch exceptions, mark the span/trace as ERROR, and re-raise:

with client.trace("my-agent") as trace:
    with trace.span("risky-call", type=SpanType.TOOL) as span:
        raise ValueError("something went wrong")
        # span is automatically marked as ERROR
    # trace is automatically marked as ERROR

You can also set errors manually:

span.set_error("Connection timeout")
trace.end(status=TraceStatus.ERROR, error="Agent failed")

LangChain Integration

from nodeloom import NodeLoom
from nodeloom.integrations.langchain import NodeLoomCallbackHandler

client = NodeLoom(api_key="sdk_your_api_key")
handler = NodeLoomCallbackHandler(client)

# Pass the handler to any LangChain chain, agent, or LLM
result = chain.invoke(input, config={"callbacks": [handler]})

client.shutdown()

The callback handler automatically instruments LLM calls, chain runs, tool invocations, and retriever queries with proper parent-child span relationships.

CrewAI Integration

Decorator

from nodeloom import NodeLoom
from nodeloom.integrations.crewai import instrument_crew

client = NodeLoom(api_key="sdk_your_api_key")

@instrument_crew(client, agent_name="my-crew", agent_version="1.0.0")
def run_crew():
    crew = Crew(agents=[...], tasks=[...])
    return crew.kickoff()

run_crew()
client.shutdown()

Manual Instrumentation

from nodeloom.integrations.crewai import CrewAIInstrumentation

inst = CrewAIInstrumentation(client)
with inst.trace_crew("my-crew") as ctx:
    with ctx.task("research", agent="researcher") as span:
        result = do_research()
        span.set_output({"result": result})

Configuration

Parameter Default Description
api_key required SDK API key (starts with sdk_)
endpoint https://api.nodeloom.io NodeLoom API base URL
environment production Deployment environment label
batch_size 100 Max events per batch
flush_interval 5.0 Seconds between automatic flushes
max_retries 3 Retry attempts for failed requests
queue_max_size 10000 Max queued events before dropping
timeout 10.0 HTTP request timeout in seconds
enabled True Set to False to disable telemetry

Running Tests

pip install -e ".[dev]"
pytest

License

MIT

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

nodeloom_sdk-0.10.0.tar.gz (43.7 kB view details)

Uploaded Source

Built Distribution

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

nodeloom_sdk-0.10.0-py3-none-any.whl (33.3 kB view details)

Uploaded Python 3

File details

Details for the file nodeloom_sdk-0.10.0.tar.gz.

File metadata

  • Download URL: nodeloom_sdk-0.10.0.tar.gz
  • Upload date:
  • Size: 43.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nodeloom_sdk-0.10.0.tar.gz
Algorithm Hash digest
SHA256 40a48859680b170e2b9332671ede8f013c7f77342ef64143a227b8d18a252417
MD5 55e0ed4219ba080a3100d40f9e744f4e
BLAKE2b-256 b27af9e2879e2412d9992f9825ebd210a0774ebe72e3935a63f44f15ae865394

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodeloom_sdk-0.10.0.tar.gz:

Publisher: publish.yml on Nodeloom/nodeloom-sdk-python

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

File details

Details for the file nodeloom_sdk-0.10.0-py3-none-any.whl.

File metadata

  • Download URL: nodeloom_sdk-0.10.0-py3-none-any.whl
  • Upload date:
  • Size: 33.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nodeloom_sdk-0.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b2cfe1b540e7ef4bbc8e1d8f9b66770cf3cda1c87bd8bbece9c8229004ad2dc4
MD5 7b5f33d03729081147384e15bf38fb48
BLAKE2b-256 b7f841a26d9fd99b453aef8152d86508820ca31bc062c7f201611fe59a9bf434

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodeloom_sdk-0.10.0-py3-none-any.whl:

Publisher: publish.yml on Nodeloom/nodeloom-sdk-python

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

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