bento.track_ai was modeled on Raindrop’s, so most call shapes survive the port unchanged. Two things differ. Bento requires provider= on every call, and Bento’s native integration ships for Google ADK only. To keep Raindrop’s auto-capture for OpenAI, Anthropic, and Bedrock, swap to OpenInference instrumentors.
Migrate with an AI coding tool
Install Bento’s Agent Skills so your AI coding tool knows how to do the migration. Copy this prompt into Claude Code, Cursor, Codex, OpenCode, or Windsurf:The three paths
Pick the smoothest applicable one and fall through. Most migrations end up using B for the bulk and C for the handful of bespoke decorators.Path A: Google ADK integration
If your app runs Google ADK agents, this captures every model call, tool call, and agent step automatically.Path B: Auto-capture with OpenInference
Raindrop’sauto_instrument=True (powered by Traceloop) wrapped OpenAI, Anthropic, and Bedrock automatically. You get the same auto-capture from OpenInference instrumentors registered against a BentoLabsSpanProcessor. Your call sites stay untouched. Every LLM call is captured at the SDK level.
raindrop.init(...) and the auto_instrument=True flag. The instrumentor captures your OpenAI call sites:
openinference-instrumentation-* and register it the same way.
Full reference: OTel transport.
Path C: Manual translation
For bespoke decorators, manualtrack_ai calls, and identity helpers, translate per the tables.
Setup
Tracking
Decorators
What’s gone
Watch out for
provider=is required. Raindrop infers it via Traceloop; Bento does not. Bedrock model IDs needprovider="aws_bedrock", not"anthropic".identify()data is lost. No user-profile store in Bento. Port traits to per-callproperties=or init-timetags.- OTel context. Bento detaches from any outer OTel context; Raindrop participates in it. Agent runs become standalone traces.
Side-by-side
Raindrop
Bento
See also
Configuration
init(), identity getters, env vars.Tracking events
The
bento.track_ai reference.