Installation
npm
npm install @raindrop-ai/vertex-ai @google/genai
pip
Quick Start
TypeScript
import { createRaindropVertexAI } from "@raindrop-ai/vertex-ai";
import { GoogleGenAI } from "@google/genai";
const raindrop = createRaindropVertexAI({
writeKey: "your-write-key",
userId: "user-123",
});
const client = new GoogleGenAI({ apiKey: "..." });
const wrapped = raindrop.wrap(client);
const response = await wrapped.models.generateContent({
model: "gemini-2.0-flash",
contents: "What is the capital of France?",
});
console.log(response.text);
await raindrop.shutdown();
Python
What Gets Traced
- generateContent — input text (user messages only), output, model, token usage (promptTokenCount/candidatesTokenCount)
- Cached tokens —
cached_content_token_countfrom usage metadata →ai.usage.cached_tokens - Thinking tokens —
thoughts_token_countfrom usage metadata (Gemini 2.5) →ai.usage.thoughts_tokens - Finish reason —
candidate.finish_reason(STOP, MAX_TOKENS, SAFETY, RECITATION) →vertex_ai.finish_reason - Errors — captured with error status, re-thrown to caller
Configuration
TypeScript
const raindrop = createRaindropVertexAI({
writeKey: "your-write-key", // Optional: omit to disable telemetry
endpoint: "...", // Optional: custom Raindrop API endpoint
userId: "user-123", // Optional: associate events with a user
convoId: "convo-456", // Optional: conversation/thread ID
debug: false, // Optional: enable verbose logging
});
Python
raindrop.identify(user_id="user-123", traits={"plan": "pro", "org": "acme"})
track_signal()
Python
raindrop.track_signal(
event_id="evt-abc",
name="thumbs_up",
signal_type="feedback",
sentiment="POSITIVE",
comment="Great response!",
)
Flushing and Shutdown
TypeScript
await raindrop.flush(); // flush pending data
await raindrop.shutdown(); // flush + release resources
Python
finish_reason Tracking
The Python wrapper captures candidate.finish_reason from Vertex AI responses and maps it to vertex_ai.finish_reason in event properties. Possible values: STOP, MAX_TOKENS, SAFETY, RECITATION.
Token Tracking
The following token usage fields are captured from usage_metadata:
| Field | Property Key | Description |
|---|---|---|
prompt_token_count |
ai.usage.prompt_tokens |
Input tokens |
candidates_token_count |
ai.usage.completion_tokens |
Output tokens |
cached_content_token_count |
ai.usage.cached_tokens |
Cached input tokens |
thoughts_token_count |
ai.usage.thoughts_tokens |
Thinking tokens (Gemini 2.5) |
Factory Function
A create_raindrop_vertex_ai() factory is also available:
from raindrop_vertex_ai import create_raindrop_vertex_ai
raindrop = create_raindrop_vertex_ai(api_key="rk_...", user_id="user-123")
Known Limitations
- Python SDK: No
events.*API — useraindrop.analyticsdirectly.identify()andtrack_signal()are available on the wrapper instance. - Streaming:
generateContentStream()is not instrumented. OnlygenerateContent()is traced.