Skip to main content

Raindrop integration for LangChain

Project description

raindrop-langchain

Raindrop integration for LangChain (Python). Automatically captures LLM calls, tool usage, chains, and retrievers via LangChain's callback system.

Installation

pip install raindrop-langchain langchain-core

Quick Start

from raindrop_langchain import RaindropLangchain
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage

raindrop = RaindropLangchain(
    api_key="rk_...",
    user_id="user-123",
)

model = ChatOpenAI(model="gpt-4o")

result = model.invoke(
    [HumanMessage(content="Hello!")],
    config={"callbacks": [raindrop.handler]},
)

raindrop.flush()

Factory Function (alternative)

from raindrop_langchain import create_raindrop_langchain

raindrop = create_raindrop_langchain(api_key="rk_...", user_id="user-123")
model = ChatOpenAI(model="gpt-4o")
result = model.invoke("Hello!", config={"callbacks": [raindrop.handler]})
raindrop.flush()

What Gets Captured

  • LLM calls — model name, input, output, token usage, finish reason
  • Tool calls — tool name, input arguments, output, duration (via interaction.track_tool() spans)
  • Chains — execution tracking
  • Retrievers — query and document count
  • Errors — error type and message captured in event properties
  • Extended token categories — cached tokens (ai.usage.cached_tokens) and reasoning tokens (ai.usage.thoughts_tokens) when available from the provider (e.g. OpenAI)
  • Finish reason — captured as ai.finish_reason in event properties (e.g. "stop", "length")

Debug Mode

Enable verbose logging with debug=True:

raindrop = RaindropLangchain(
    api_key="rk_...",
    debug=True,
)

Identify Users

Associate events with a user after initialization:

raindrop.identify("user-123", {"name": "Alice", "plan": "pro"})

Track Signals

Send feedback, edits, or custom signals:

raindrop.track_signal(
    event_id="evt-abc",
    name="thumbs_up",
    signal_type="feedback",
    sentiment="POSITIVE",
)

Flushing and Shutdown

raindrop.flush()     # flush pending data
raindrop.shutdown()  # flush + release resources

API Reference

RaindropLangchain

Parameter Type Default Description
api_key Optional[str] None Raindrop API key. If None, telemetry is disabled
user_id Optional[str] None Associate all events with a user
convo_id Optional[str] None Group events into a conversation
trace_chains bool True Track chain execution
trace_retrievers bool True Track retriever calls
filter_langgraph_internals bool True Filter LangGraph-internal chain events and deduplicate LLM callbacks
tracing_enabled bool True Enable distributed tracing
bypass_otel_for_tools bool True Bypass OTEL for tool spans
debug bool False Enable debug logging

Methods

Method Description
handler Property — the LangChain callback handler to pass into config={"callbacks": [...]}
flush() Flush all pending events to the Raindrop API
shutdown() Flush remaining events and release resources
identify(user_id, traits) Identify a user with optional traits
track_signal(event_id, name, ...) Track a signal event

Async Support

The callback handler inherits from LangChain's AsyncCallbackHandler and works with both synchronous and asynchronous LangChain invocations.

result = await model.ainvoke(
    [HumanMessage(content="Hello!")],
    config={"callbacks": [raindrop.handler]},
)

LangGraph Support

Works with LangGraph out of the box. The handler automatically filters LangGraph-internal chain events and deduplicates LLM callbacks. Pass the handler to the model inside your LLM node — not to graph.invoke(). See examples/langchain-langgraph-python-basic/ for a full example.

LangSmith Coexistence

Raindrop and LangSmith can run simultaneously. Set LANGSMITH_TRACING=false to disable LangSmith if you only want Raindrop.

Payload size bounds

Payloads the handler serializes itself — multi-modal chat content lists and agent-action tool inputs — are bounded to 1,000,000 characters with a ...[truncated by raindrop] marker. The bound is enforced during serialization (cost proportional to the cap, not the payload), so a multi-MB content list (e.g. base64 image parts) can't stall your event loop inside a synchronous callback. Plain-string prompts and tool outputs are capped by the Raindrop SDK's own per-field limit (max_text_field_chars, raindrop-ai

= 0.0.51).

Known Limitations

  • Multi-LLM chain data: In ReAct loops with multiple child LLMs, only the last child's data survives (Python SDK uses one-shot track_ai vs TS's accumulative EventShipper.patch).
  • Error-path input loss: On LLM errors, the input captured during on_llm_start is not forwarded to the finalized event.

Testing

cd packages/langchain-python
pip install -e .
python -m pytest tests/ -v

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

raindrop_langchain-0.0.4.tar.gz (25.4 kB view details)

Uploaded Source

Built Distribution

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

raindrop_langchain-0.0.4-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file raindrop_langchain-0.0.4.tar.gz.

File metadata

  • Download URL: raindrop_langchain-0.0.4.tar.gz
  • Upload date:
  • Size: 25.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for raindrop_langchain-0.0.4.tar.gz
Algorithm Hash digest
SHA256 da6b7bc298d69b09ce7c62394a10c011401022086c30e280d6cb67c77ce57411
MD5 39e7833585f818d257d0e70ce2395f7b
BLAKE2b-256 fd6bdca25cb45c51d6aba9b5f8b05a90845a20f7055340d352ce4b4367462690

See more details on using hashes here.

File details

Details for the file raindrop_langchain-0.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for raindrop_langchain-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 60bfd7fcae32744debc02858f4ab5d453a68549be4e0cf51f8f80f430dfb262e
MD5 0b4943bac6588ae8f1e12358070ea486
BLAKE2b-256 cc95c5ffb5f40202aa2b1feb9b193905a5887709a327c6e3603e4980e3ddd829

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