@raindrop-ai/ai-sdk 0.0.32 → 0.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -3
- package/dist/{chunk-YDMJ6ABM.mjs → chunk-FIX66Y7M.mjs} +120 -36
- package/dist/{index-CwK0GdEe.d.mts → index-Dcf4FPZL.d.mts} +86 -3
- package/dist/{index-CwK0GdEe.d.ts → index-Dcf4FPZL.d.ts} +86 -3
- package/dist/index.browser.d.mts +86 -3
- package/dist/index.browser.d.ts +86 -3
- package/dist/index.browser.js +120 -35
- package/dist/index.browser.mjs +120 -36
- package/dist/index.node.d.mts +1 -1
- package/dist/index.node.d.ts +1 -1
- package/dist/index.node.js +120 -35
- package/dist/index.node.mjs +1 -1
- package/dist/index.workers.d.mts +1 -1
- package/dist/index.workers.d.ts +1 -1
- package/dist/index.workers.js +120 -35
- package/dist/index.workers.mjs +1 -1
- package/package.json +2 -2
package/dist/index.browser.mjs
CHANGED
|
@@ -1017,7 +1017,7 @@ async function* asyncGeneratorWithCurrent(span, gen) {
|
|
|
1017
1017
|
// package.json
|
|
1018
1018
|
var package_default = {
|
|
1019
1019
|
name: "@raindrop-ai/ai-sdk",
|
|
1020
|
-
version: "0.0.
|
|
1020
|
+
version: "0.0.33"};
|
|
1021
1021
|
|
|
1022
1022
|
// src/internal/version.ts
|
|
1023
1023
|
var libraryName = package_default.name;
|
|
@@ -1800,6 +1800,25 @@ var RaindropTelemetryIntegration = class {
|
|
|
1800
1800
|
* (the `event.callId` can be the same for parallel sibling tools).
|
|
1801
1801
|
*/
|
|
1802
1802
|
this.priorParentContexts = /* @__PURE__ */ new Map();
|
|
1803
|
+
// ── lifecycle ─────────────────────────────────────────────────────────────
|
|
1804
|
+
//
|
|
1805
|
+
// The shippers buffer spans/events and flush on a timer, so a short-lived
|
|
1806
|
+
// script (e.g. a single `generateText` then `process.exit`) can exit before
|
|
1807
|
+
// anything ships. Expose `flush`/`shutdown` on the integration itself so the
|
|
1808
|
+
// value returned by `raindrop()` is self-sufficient — callers can keep the
|
|
1809
|
+
// reference they pass to `registerTelemetry` and `await rd.flush()` before
|
|
1810
|
+
// exiting, without also constructing a separate client.
|
|
1811
|
+
/** Flush any buffered events and trace spans to their destinations. */
|
|
1812
|
+
this.flush = async () => {
|
|
1813
|
+
await Promise.all([this.eventShipper.flush(), this.traceShipper.flush()]);
|
|
1814
|
+
};
|
|
1815
|
+
/** Flush and stop the background flush timers. */
|
|
1816
|
+
this.shutdown = async () => {
|
|
1817
|
+
await Promise.all([
|
|
1818
|
+
this.eventShipper.shutdown(),
|
|
1819
|
+
this.traceShipper.shutdown()
|
|
1820
|
+
]);
|
|
1821
|
+
};
|
|
1803
1822
|
// ── onStart ─────────────────────────────────────────────────────────────
|
|
1804
1823
|
this.onStart = (event) => {
|
|
1805
1824
|
var _a, _b, _c, _d, _e;
|
|
@@ -2193,8 +2212,56 @@ var RaindropTelemetryIntegration = class {
|
|
|
2193
2212
|
if (state.subagentToolCallSpan) {
|
|
2194
2213
|
this.traceShipper.endSpan(state.subagentToolCallSpan, { error: actualError });
|
|
2195
2214
|
}
|
|
2215
|
+
const isEmbed = state.operationId === "ai.embed" || state.operationId === "ai.embedMany";
|
|
2216
|
+
if (!isEmbed) {
|
|
2217
|
+
this.finalizeGenerateEvent(state, state.accumulatedText || void 0, void 0);
|
|
2218
|
+
}
|
|
2196
2219
|
this.cleanup(event.callId);
|
|
2197
2220
|
};
|
|
2221
|
+
// ── onAbort ─────────────────────────────────────────────────────────────
|
|
2222
|
+
//
|
|
2223
|
+
// Dispatched by the v7 canary line (post-beta.116) when a `streamText` call
|
|
2224
|
+
// is cancelled via its `AbortSignal`. On abort the SDK fires neither `onEnd`
|
|
2225
|
+
// nor `onError`, so without this every open span would leak and the event
|
|
2226
|
+
// would hang forever in its `isPending` state. We close every open span with
|
|
2227
|
+
// an `ai.response.aborted` marker (no error status — an abort is not a model
|
|
2228
|
+
// failure) and flush the partial event.
|
|
2229
|
+
this.onAbort = (event) => {
|
|
2230
|
+
const callId = event == null ? void 0 : event.callId;
|
|
2231
|
+
if (!callId) return;
|
|
2232
|
+
const state = this.getState(callId);
|
|
2233
|
+
if (!state) return;
|
|
2234
|
+
const abortedAttr = attrString("ai.response.aborted", "true");
|
|
2235
|
+
if (state.stepSpan) {
|
|
2236
|
+
this.traceShipper.endSpan(state.stepSpan, { attributes: [abortedAttr] });
|
|
2237
|
+
state.stepSpan = void 0;
|
|
2238
|
+
state.stepParent = void 0;
|
|
2239
|
+
}
|
|
2240
|
+
for (const embedSpan of state.embedSpans.values()) {
|
|
2241
|
+
this.traceShipper.endSpan(embedSpan, { attributes: [abortedAttr] });
|
|
2242
|
+
}
|
|
2243
|
+
state.embedSpans.clear();
|
|
2244
|
+
for (const toolCallId of state.parentContextToolCallIds) {
|
|
2245
|
+
this.priorParentContexts.delete(toolCallId);
|
|
2246
|
+
}
|
|
2247
|
+
state.parentContextToolCallIds.clear();
|
|
2248
|
+
for (const toolSpan of state.toolSpans.values()) {
|
|
2249
|
+
this.traceShipper.endSpan(toolSpan, { attributes: [abortedAttr] });
|
|
2250
|
+
}
|
|
2251
|
+
state.toolSpans.clear();
|
|
2252
|
+
if (state.rootSpan) {
|
|
2253
|
+
this.traceShipper.endSpan(state.rootSpan, {
|
|
2254
|
+
attributes: [abortedAttr, attrInt("ai.toolCall.count", state.toolCallCount)]
|
|
2255
|
+
});
|
|
2256
|
+
}
|
|
2257
|
+
if (state.subagentToolCallSpan) {
|
|
2258
|
+
this.traceShipper.endSpan(state.subagentToolCallSpan, {
|
|
2259
|
+
attributes: [abortedAttr]
|
|
2260
|
+
});
|
|
2261
|
+
}
|
|
2262
|
+
this.finalizeGenerateEvent(state, state.accumulatedText || void 0, void 0);
|
|
2263
|
+
this.cleanup(callId);
|
|
2264
|
+
};
|
|
2198
2265
|
// ── executeTool ─────────────────────────────────────────────────────────
|
|
2199
2266
|
this.executeTool = async ({
|
|
2200
2267
|
callId,
|
|
@@ -2352,11 +2419,12 @@ var RaindropTelemetryIntegration = class {
|
|
|
2352
2419
|
const toolSpan = state.toolSpans.get(event.toolCall.toolCallId);
|
|
2353
2420
|
if (!toolSpan) return;
|
|
2354
2421
|
state.toolCallCount += 1;
|
|
2355
|
-
|
|
2356
|
-
|
|
2422
|
+
const outcome = "toolOutput" in event ? event.toolOutput.type === "tool-result" ? { success: true, output: event.toolOutput.output } : { success: false, error: event.toolOutput.error } : event.success ? { success: true, output: event.output } : { success: false, error: event.error };
|
|
2423
|
+
if (outcome.success) {
|
|
2424
|
+
const outputAttrs = state.recordOutputs ? [attrString("ai.toolCall.result", safeJsonWithUint8(outcome.output))] : [];
|
|
2357
2425
|
this.traceShipper.endSpan(toolSpan, { attributes: outputAttrs });
|
|
2358
2426
|
} else {
|
|
2359
|
-
this.traceShipper.endSpan(toolSpan, { error:
|
|
2427
|
+
this.traceShipper.endSpan(toolSpan, { error: outcome.error });
|
|
2360
2428
|
}
|
|
2361
2429
|
this.emitLive(state, "tool_result", event.toolCall.toolName);
|
|
2362
2430
|
state.toolSpans.delete(event.toolCall.toolCallId);
|
|
@@ -2430,7 +2498,7 @@ var RaindropTelemetryIntegration = class {
|
|
|
2430
2498
|
}
|
|
2431
2499
|
}
|
|
2432
2500
|
finishGenerate(event, state) {
|
|
2433
|
-
var _a, _b, _c, _d, _e, _f
|
|
2501
|
+
var _a, _b, _c, _d, _e, _f;
|
|
2434
2502
|
if (state.rootSpan) {
|
|
2435
2503
|
const outputAttrs = [];
|
|
2436
2504
|
if (state.recordOutputs) {
|
|
@@ -2478,38 +2546,47 @@ var RaindropTelemetryIntegration = class {
|
|
|
2478
2546
|
);
|
|
2479
2547
|
this.traceShipper.endSpan(state.rootSpan, { attributes: outputAttrs });
|
|
2480
2548
|
}
|
|
2549
|
+
this.finalizeGenerateEvent(
|
|
2550
|
+
state,
|
|
2551
|
+
(_e = event.text) != null ? _e : state.accumulatedText || void 0,
|
|
2552
|
+
(_f = event.response) == null ? void 0 : _f.modelId
|
|
2553
|
+
);
|
|
2554
|
+
}
|
|
2555
|
+
/**
|
|
2556
|
+
* Patch the Raindrop event for a completed, aborted, or errored text
|
|
2557
|
+
* generation so it leaves the `isPending` state. Shared by `onFinish`/`onEnd`,
|
|
2558
|
+
* `onAbort`, and `onError`.
|
|
2559
|
+
*/
|
|
2560
|
+
finalizeGenerateEvent(state, output, model) {
|
|
2561
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
2481
2562
|
const suppressSubagentEvent = state.subagentName !== void 0 && state.subagentToolCallSpan !== void 0;
|
|
2482
|
-
if (this.sendEvents
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
`[raindrop-ai/ai-sdk] event patch failed: ${err instanceof Error ? err.message : err}`
|
|
2508
|
-
);
|
|
2509
|
-
}
|
|
2510
|
-
});
|
|
2563
|
+
if (!this.sendEvents || suppressSubagentEvent) return;
|
|
2564
|
+
const callMeta = this.extractRaindropMetadata(state.metadata);
|
|
2565
|
+
const userId = (_b = callMeta.userId) != null ? _b : (_a = this.defaultContext) == null ? void 0 : _a.userId;
|
|
2566
|
+
if (!userId) return;
|
|
2567
|
+
const eventName = (_e = (_d = callMeta.eventName) != null ? _d : (_c = this.defaultContext) == null ? void 0 : _c.eventName) != null ? _e : state.operationId;
|
|
2568
|
+
const input = state.inputText;
|
|
2569
|
+
const properties = {
|
|
2570
|
+
...(_f = this.defaultContext) == null ? void 0 : _f.properties,
|
|
2571
|
+
...callMeta.properties
|
|
2572
|
+
};
|
|
2573
|
+
const convoId = (_h = callMeta.convoId) != null ? _h : (_g = this.defaultContext) == null ? void 0 : _g.convoId;
|
|
2574
|
+
void this.eventShipper.patch(state.eventId, {
|
|
2575
|
+
eventName,
|
|
2576
|
+
userId,
|
|
2577
|
+
convoId,
|
|
2578
|
+
input,
|
|
2579
|
+
output,
|
|
2580
|
+
model,
|
|
2581
|
+
properties: Object.keys(properties).length > 0 ? properties : void 0,
|
|
2582
|
+
isPending: false
|
|
2583
|
+
}).catch((err) => {
|
|
2584
|
+
if (this.debug) {
|
|
2585
|
+
console.warn(
|
|
2586
|
+
`[raindrop-ai/ai-sdk] event patch failed: ${err instanceof Error ? err.message : err}`
|
|
2587
|
+
);
|
|
2511
2588
|
}
|
|
2512
|
-
}
|
|
2589
|
+
});
|
|
2513
2590
|
}
|
|
2514
2591
|
finishEmbed(event, state) {
|
|
2515
2592
|
var _a;
|
|
@@ -4842,5 +4919,12 @@ function createRaindropAISDK(opts) {
|
|
|
4842
4919
|
}
|
|
4843
4920
|
};
|
|
4844
4921
|
}
|
|
4922
|
+
function raindrop(options = {}) {
|
|
4923
|
+
var _a;
|
|
4924
|
+
const { context, subagentWrapping, writeKey, ...rest } = options;
|
|
4925
|
+
const resolvedWriteKey = writeKey != null ? writeKey : typeof process !== "undefined" ? (_a = process.env) == null ? void 0 : _a.RAINDROP_WRITE_KEY : void 0;
|
|
4926
|
+
const client = createRaindropAISDK({ ...rest, writeKey: resolvedWriteKey });
|
|
4927
|
+
return client.createTelemetryIntegration({ context, subagentWrapping });
|
|
4928
|
+
}
|
|
4845
4929
|
|
|
4846
|
-
export { DEFAULT_REDACT_ATTRIBUTE_KEYS, DEFAULT_SECRET_KEY_NAMES, REDACTED_PLACEHOLDER, RaindropTelemetryIntegration, _resetParentToolContextStorage, _resetRaindropCallMetadataStorage, _resetWarnedMissingUserId, clearParentToolContext, createRaindropAISDK, currentSpan, defaultTransformSpan, enterParentToolContext, eventMetadata, eventMetadataFromChatRequest, getContextManager, getCurrentParentToolContext, getCurrentRaindropCallMetadata, readRaindropCallMetadataFromArgs, redactJsonAttributeValue, redactSecretsInObject, runWithParentToolContext, runWithRaindropCallMetadata, withCurrent };
|
|
4930
|
+
export { DEFAULT_REDACT_ATTRIBUTE_KEYS, DEFAULT_SECRET_KEY_NAMES, REDACTED_PLACEHOLDER, RaindropTelemetryIntegration, _resetParentToolContextStorage, _resetRaindropCallMetadataStorage, _resetWarnedMissingUserId, clearParentToolContext, createRaindropAISDK, currentSpan, defaultTransformSpan, enterParentToolContext, eventMetadata, eventMetadataFromChatRequest, getContextManager, getCurrentParentToolContext, getCurrentRaindropCallMetadata, raindrop, readRaindropCallMetadataFromArgs, redactJsonAttributeValue, redactSecretsInObject, runWithParentToolContext, runWithRaindropCallMetadata, withCurrent };
|
package/dist/index.node.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as AISDKChatRequestLike, a as AISDKChatRequestMessageLike, b as AISDKMessage, c as AgentCallMetadata, d as AgentWithMetadata, e as Attachment, B as BuildEventPatch, C as ContextManager, f as ContextSpan, g as CreateSpanArgs, D as DEFAULT_REDACT_ATTRIBUTE_KEYS, h as DEFAULT_SECRET_KEY_NAMES, E as EndSpanArgs, i as EventBuilder, j as EventMetadataOptions, I as IdentifyInput, O as OtlpAnyValue, k as OtlpSpan, P as ParentToolContext, R as REDACTED_PLACEHOLDER, l as RaindropAISDKClient, m as RaindropAISDKContext, n as RaindropAISDKOptions, o as RaindropCallMetadata, p as RaindropTelemetryIntegration, q as RaindropTelemetryIntegrationOptions, S as SelfDiagnosticsOptions,
|
|
1
|
+
export { A as AISDKChatRequestLike, a as AISDKChatRequestMessageLike, b as AISDKMessage, c as AgentCallMetadata, d as AgentWithMetadata, e as Attachment, B as BuildEventPatch, C as ContextManager, f as ContextSpan, g as CreateSpanArgs, D as DEFAULT_REDACT_ATTRIBUTE_KEYS, h as DEFAULT_SECRET_KEY_NAMES, E as EndSpanArgs, i as EventBuilder, j as EventMetadataOptions, I as IdentifyInput, O as OtlpAnyValue, k as OtlpSpan, P as ParentToolContext, R as REDACTED_PLACEHOLDER, l as RaindropAISDKClient, m as RaindropAISDKContext, n as RaindropAISDKOptions, o as RaindropCallMetadata, p as RaindropTelemetryIntegration, q as RaindropTelemetryIntegrationOptions, r as RaindropTelemetryOptions, S as SelfDiagnosticsOptions, s as SelfDiagnosticsSignalDefinition, t as SelfDiagnosticsSignalDefinitions, u as SelfDiagnosticsTool, v as SelfDiagnosticsToolInput, w as SelfDiagnosticsToolOptions, x as SelfDiagnosticsToolResult, y as StartSpanArgs, T as TraceSpan, z as TransformSpanHook, W as WrapAISDKOptions, F as WrappedAI, G as WrappedAISDK, _ as _resetParentToolContextStorage, H as _resetRaindropCallMetadataStorage, J as _resetWarnedMissingUserId, K as clearParentToolContext, L as createRaindropAISDK, M as currentSpan, N as defaultTransformSpan, Q as enterParentToolContext, U as eventMetadata, V as eventMetadataFromChatRequest, X as getContextManager, Y as getCurrentParentToolContext, Z as getCurrentRaindropCallMetadata, $ as raindrop, a0 as readRaindropCallMetadataFromArgs, a1 as redactJsonAttributeValue, a2 as redactSecretsInObject, a3 as runWithParentToolContext, a4 as runWithRaindropCallMetadata, a5 as withCurrent } from './index-Dcf4FPZL.mjs';
|
|
2
2
|
|
|
3
3
|
declare global {
|
|
4
4
|
var RAINDROP_ASYNC_LOCAL_STORAGE: (new <T>() => {
|
package/dist/index.node.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as AISDKChatRequestLike, a as AISDKChatRequestMessageLike, b as AISDKMessage, c as AgentCallMetadata, d as AgentWithMetadata, e as Attachment, B as BuildEventPatch, C as ContextManager, f as ContextSpan, g as CreateSpanArgs, D as DEFAULT_REDACT_ATTRIBUTE_KEYS, h as DEFAULT_SECRET_KEY_NAMES, E as EndSpanArgs, i as EventBuilder, j as EventMetadataOptions, I as IdentifyInput, O as OtlpAnyValue, k as OtlpSpan, P as ParentToolContext, R as REDACTED_PLACEHOLDER, l as RaindropAISDKClient, m as RaindropAISDKContext, n as RaindropAISDKOptions, o as RaindropCallMetadata, p as RaindropTelemetryIntegration, q as RaindropTelemetryIntegrationOptions, S as SelfDiagnosticsOptions,
|
|
1
|
+
export { A as AISDKChatRequestLike, a as AISDKChatRequestMessageLike, b as AISDKMessage, c as AgentCallMetadata, d as AgentWithMetadata, e as Attachment, B as BuildEventPatch, C as ContextManager, f as ContextSpan, g as CreateSpanArgs, D as DEFAULT_REDACT_ATTRIBUTE_KEYS, h as DEFAULT_SECRET_KEY_NAMES, E as EndSpanArgs, i as EventBuilder, j as EventMetadataOptions, I as IdentifyInput, O as OtlpAnyValue, k as OtlpSpan, P as ParentToolContext, R as REDACTED_PLACEHOLDER, l as RaindropAISDKClient, m as RaindropAISDKContext, n as RaindropAISDKOptions, o as RaindropCallMetadata, p as RaindropTelemetryIntegration, q as RaindropTelemetryIntegrationOptions, r as RaindropTelemetryOptions, S as SelfDiagnosticsOptions, s as SelfDiagnosticsSignalDefinition, t as SelfDiagnosticsSignalDefinitions, u as SelfDiagnosticsTool, v as SelfDiagnosticsToolInput, w as SelfDiagnosticsToolOptions, x as SelfDiagnosticsToolResult, y as StartSpanArgs, T as TraceSpan, z as TransformSpanHook, W as WrapAISDKOptions, F as WrappedAI, G as WrappedAISDK, _ as _resetParentToolContextStorage, H as _resetRaindropCallMetadataStorage, J as _resetWarnedMissingUserId, K as clearParentToolContext, L as createRaindropAISDK, M as currentSpan, N as defaultTransformSpan, Q as enterParentToolContext, U as eventMetadata, V as eventMetadataFromChatRequest, X as getContextManager, Y as getCurrentParentToolContext, Z as getCurrentRaindropCallMetadata, $ as raindrop, a0 as readRaindropCallMetadataFromArgs, a1 as redactJsonAttributeValue, a2 as redactSecretsInObject, a3 as runWithParentToolContext, a4 as runWithRaindropCallMetadata, a5 as withCurrent } from './index-Dcf4FPZL.js';
|
|
2
2
|
|
|
3
3
|
declare global {
|
|
4
4
|
var RAINDROP_ASYNC_LOCAL_STORAGE: (new <T>() => {
|
package/dist/index.node.js
CHANGED
|
@@ -1024,7 +1024,7 @@ globalThis.RAINDROP_ASYNC_LOCAL_STORAGE = async_hooks.AsyncLocalStorage;
|
|
|
1024
1024
|
// package.json
|
|
1025
1025
|
var package_default = {
|
|
1026
1026
|
name: "@raindrop-ai/ai-sdk",
|
|
1027
|
-
version: "0.0.
|
|
1027
|
+
version: "0.0.33"};
|
|
1028
1028
|
|
|
1029
1029
|
// src/internal/version.ts
|
|
1030
1030
|
var libraryName = package_default.name;
|
|
@@ -1807,6 +1807,25 @@ var RaindropTelemetryIntegration = class {
|
|
|
1807
1807
|
* (the `event.callId` can be the same for parallel sibling tools).
|
|
1808
1808
|
*/
|
|
1809
1809
|
this.priorParentContexts = /* @__PURE__ */ new Map();
|
|
1810
|
+
// ── lifecycle ─────────────────────────────────────────────────────────────
|
|
1811
|
+
//
|
|
1812
|
+
// The shippers buffer spans/events and flush on a timer, so a short-lived
|
|
1813
|
+
// script (e.g. a single `generateText` then `process.exit`) can exit before
|
|
1814
|
+
// anything ships. Expose `flush`/`shutdown` on the integration itself so the
|
|
1815
|
+
// value returned by `raindrop()` is self-sufficient — callers can keep the
|
|
1816
|
+
// reference they pass to `registerTelemetry` and `await rd.flush()` before
|
|
1817
|
+
// exiting, without also constructing a separate client.
|
|
1818
|
+
/** Flush any buffered events and trace spans to their destinations. */
|
|
1819
|
+
this.flush = async () => {
|
|
1820
|
+
await Promise.all([this.eventShipper.flush(), this.traceShipper.flush()]);
|
|
1821
|
+
};
|
|
1822
|
+
/** Flush and stop the background flush timers. */
|
|
1823
|
+
this.shutdown = async () => {
|
|
1824
|
+
await Promise.all([
|
|
1825
|
+
this.eventShipper.shutdown(),
|
|
1826
|
+
this.traceShipper.shutdown()
|
|
1827
|
+
]);
|
|
1828
|
+
};
|
|
1810
1829
|
// ── onStart ─────────────────────────────────────────────────────────────
|
|
1811
1830
|
this.onStart = (event) => {
|
|
1812
1831
|
var _a, _b, _c, _d, _e;
|
|
@@ -2200,8 +2219,56 @@ var RaindropTelemetryIntegration = class {
|
|
|
2200
2219
|
if (state.subagentToolCallSpan) {
|
|
2201
2220
|
this.traceShipper.endSpan(state.subagentToolCallSpan, { error: actualError });
|
|
2202
2221
|
}
|
|
2222
|
+
const isEmbed = state.operationId === "ai.embed" || state.operationId === "ai.embedMany";
|
|
2223
|
+
if (!isEmbed) {
|
|
2224
|
+
this.finalizeGenerateEvent(state, state.accumulatedText || void 0, void 0);
|
|
2225
|
+
}
|
|
2203
2226
|
this.cleanup(event.callId);
|
|
2204
2227
|
};
|
|
2228
|
+
// ── onAbort ─────────────────────────────────────────────────────────────
|
|
2229
|
+
//
|
|
2230
|
+
// Dispatched by the v7 canary line (post-beta.116) when a `streamText` call
|
|
2231
|
+
// is cancelled via its `AbortSignal`. On abort the SDK fires neither `onEnd`
|
|
2232
|
+
// nor `onError`, so without this every open span would leak and the event
|
|
2233
|
+
// would hang forever in its `isPending` state. We close every open span with
|
|
2234
|
+
// an `ai.response.aborted` marker (no error status — an abort is not a model
|
|
2235
|
+
// failure) and flush the partial event.
|
|
2236
|
+
this.onAbort = (event) => {
|
|
2237
|
+
const callId = event == null ? void 0 : event.callId;
|
|
2238
|
+
if (!callId) return;
|
|
2239
|
+
const state = this.getState(callId);
|
|
2240
|
+
if (!state) return;
|
|
2241
|
+
const abortedAttr = attrString("ai.response.aborted", "true");
|
|
2242
|
+
if (state.stepSpan) {
|
|
2243
|
+
this.traceShipper.endSpan(state.stepSpan, { attributes: [abortedAttr] });
|
|
2244
|
+
state.stepSpan = void 0;
|
|
2245
|
+
state.stepParent = void 0;
|
|
2246
|
+
}
|
|
2247
|
+
for (const embedSpan of state.embedSpans.values()) {
|
|
2248
|
+
this.traceShipper.endSpan(embedSpan, { attributes: [abortedAttr] });
|
|
2249
|
+
}
|
|
2250
|
+
state.embedSpans.clear();
|
|
2251
|
+
for (const toolCallId of state.parentContextToolCallIds) {
|
|
2252
|
+
this.priorParentContexts.delete(toolCallId);
|
|
2253
|
+
}
|
|
2254
|
+
state.parentContextToolCallIds.clear();
|
|
2255
|
+
for (const toolSpan of state.toolSpans.values()) {
|
|
2256
|
+
this.traceShipper.endSpan(toolSpan, { attributes: [abortedAttr] });
|
|
2257
|
+
}
|
|
2258
|
+
state.toolSpans.clear();
|
|
2259
|
+
if (state.rootSpan) {
|
|
2260
|
+
this.traceShipper.endSpan(state.rootSpan, {
|
|
2261
|
+
attributes: [abortedAttr, attrInt("ai.toolCall.count", state.toolCallCount)]
|
|
2262
|
+
});
|
|
2263
|
+
}
|
|
2264
|
+
if (state.subagentToolCallSpan) {
|
|
2265
|
+
this.traceShipper.endSpan(state.subagentToolCallSpan, {
|
|
2266
|
+
attributes: [abortedAttr]
|
|
2267
|
+
});
|
|
2268
|
+
}
|
|
2269
|
+
this.finalizeGenerateEvent(state, state.accumulatedText || void 0, void 0);
|
|
2270
|
+
this.cleanup(callId);
|
|
2271
|
+
};
|
|
2205
2272
|
// ── executeTool ─────────────────────────────────────────────────────────
|
|
2206
2273
|
this.executeTool = async ({
|
|
2207
2274
|
callId,
|
|
@@ -2359,11 +2426,12 @@ var RaindropTelemetryIntegration = class {
|
|
|
2359
2426
|
const toolSpan = state.toolSpans.get(event.toolCall.toolCallId);
|
|
2360
2427
|
if (!toolSpan) return;
|
|
2361
2428
|
state.toolCallCount += 1;
|
|
2362
|
-
|
|
2363
|
-
|
|
2429
|
+
const outcome = "toolOutput" in event ? event.toolOutput.type === "tool-result" ? { success: true, output: event.toolOutput.output } : { success: false, error: event.toolOutput.error } : event.success ? { success: true, output: event.output } : { success: false, error: event.error };
|
|
2430
|
+
if (outcome.success) {
|
|
2431
|
+
const outputAttrs = state.recordOutputs ? [attrString("ai.toolCall.result", safeJsonWithUint8(outcome.output))] : [];
|
|
2364
2432
|
this.traceShipper.endSpan(toolSpan, { attributes: outputAttrs });
|
|
2365
2433
|
} else {
|
|
2366
|
-
this.traceShipper.endSpan(toolSpan, { error:
|
|
2434
|
+
this.traceShipper.endSpan(toolSpan, { error: outcome.error });
|
|
2367
2435
|
}
|
|
2368
2436
|
this.emitLive(state, "tool_result", event.toolCall.toolName);
|
|
2369
2437
|
state.toolSpans.delete(event.toolCall.toolCallId);
|
|
@@ -2437,7 +2505,7 @@ var RaindropTelemetryIntegration = class {
|
|
|
2437
2505
|
}
|
|
2438
2506
|
}
|
|
2439
2507
|
finishGenerate(event, state) {
|
|
2440
|
-
var _a, _b, _c, _d, _e, _f
|
|
2508
|
+
var _a, _b, _c, _d, _e, _f;
|
|
2441
2509
|
if (state.rootSpan) {
|
|
2442
2510
|
const outputAttrs = [];
|
|
2443
2511
|
if (state.recordOutputs) {
|
|
@@ -2485,38 +2553,47 @@ var RaindropTelemetryIntegration = class {
|
|
|
2485
2553
|
);
|
|
2486
2554
|
this.traceShipper.endSpan(state.rootSpan, { attributes: outputAttrs });
|
|
2487
2555
|
}
|
|
2556
|
+
this.finalizeGenerateEvent(
|
|
2557
|
+
state,
|
|
2558
|
+
(_e = event.text) != null ? _e : state.accumulatedText || void 0,
|
|
2559
|
+
(_f = event.response) == null ? void 0 : _f.modelId
|
|
2560
|
+
);
|
|
2561
|
+
}
|
|
2562
|
+
/**
|
|
2563
|
+
* Patch the Raindrop event for a completed, aborted, or errored text
|
|
2564
|
+
* generation so it leaves the `isPending` state. Shared by `onFinish`/`onEnd`,
|
|
2565
|
+
* `onAbort`, and `onError`.
|
|
2566
|
+
*/
|
|
2567
|
+
finalizeGenerateEvent(state, output, model) {
|
|
2568
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
2488
2569
|
const suppressSubagentEvent = state.subagentName !== void 0 && state.subagentToolCallSpan !== void 0;
|
|
2489
|
-
if (this.sendEvents
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
`[raindrop-ai/ai-sdk] event patch failed: ${err instanceof Error ? err.message : err}`
|
|
2515
|
-
);
|
|
2516
|
-
}
|
|
2517
|
-
});
|
|
2570
|
+
if (!this.sendEvents || suppressSubagentEvent) return;
|
|
2571
|
+
const callMeta = this.extractRaindropMetadata(state.metadata);
|
|
2572
|
+
const userId = (_b = callMeta.userId) != null ? _b : (_a = this.defaultContext) == null ? void 0 : _a.userId;
|
|
2573
|
+
if (!userId) return;
|
|
2574
|
+
const eventName = (_e = (_d = callMeta.eventName) != null ? _d : (_c = this.defaultContext) == null ? void 0 : _c.eventName) != null ? _e : state.operationId;
|
|
2575
|
+
const input = state.inputText;
|
|
2576
|
+
const properties = {
|
|
2577
|
+
...(_f = this.defaultContext) == null ? void 0 : _f.properties,
|
|
2578
|
+
...callMeta.properties
|
|
2579
|
+
};
|
|
2580
|
+
const convoId = (_h = callMeta.convoId) != null ? _h : (_g = this.defaultContext) == null ? void 0 : _g.convoId;
|
|
2581
|
+
void this.eventShipper.patch(state.eventId, {
|
|
2582
|
+
eventName,
|
|
2583
|
+
userId,
|
|
2584
|
+
convoId,
|
|
2585
|
+
input,
|
|
2586
|
+
output,
|
|
2587
|
+
model,
|
|
2588
|
+
properties: Object.keys(properties).length > 0 ? properties : void 0,
|
|
2589
|
+
isPending: false
|
|
2590
|
+
}).catch((err) => {
|
|
2591
|
+
if (this.debug) {
|
|
2592
|
+
console.warn(
|
|
2593
|
+
`[raindrop-ai/ai-sdk] event patch failed: ${err instanceof Error ? err.message : err}`
|
|
2594
|
+
);
|
|
2518
2595
|
}
|
|
2519
|
-
}
|
|
2596
|
+
});
|
|
2520
2597
|
}
|
|
2521
2598
|
finishEmbed(event, state) {
|
|
2522
2599
|
var _a;
|
|
@@ -4849,6 +4926,13 @@ function createRaindropAISDK(opts) {
|
|
|
4849
4926
|
}
|
|
4850
4927
|
};
|
|
4851
4928
|
}
|
|
4929
|
+
function raindrop(options = {}) {
|
|
4930
|
+
var _a;
|
|
4931
|
+
const { context, subagentWrapping, writeKey, ...rest } = options;
|
|
4932
|
+
const resolvedWriteKey = writeKey != null ? writeKey : typeof process !== "undefined" ? (_a = process.env) == null ? void 0 : _a.RAINDROP_WRITE_KEY : void 0;
|
|
4933
|
+
const client = createRaindropAISDK({ ...rest, writeKey: resolvedWriteKey });
|
|
4934
|
+
return client.createTelemetryIntegration({ context, subagentWrapping });
|
|
4935
|
+
}
|
|
4852
4936
|
|
|
4853
4937
|
// src/index.node.ts
|
|
4854
4938
|
globalThis.RAINDROP_ASYNC_LOCAL_STORAGE = async_hooks.AsyncLocalStorage;
|
|
@@ -4870,6 +4954,7 @@ exports.eventMetadataFromChatRequest = eventMetadataFromChatRequest;
|
|
|
4870
4954
|
exports.getContextManager = getContextManager;
|
|
4871
4955
|
exports.getCurrentParentToolContext = getCurrentParentToolContext;
|
|
4872
4956
|
exports.getCurrentRaindropCallMetadata = getCurrentRaindropCallMetadata;
|
|
4957
|
+
exports.raindrop = raindrop;
|
|
4873
4958
|
exports.readRaindropCallMetadataFromArgs = readRaindropCallMetadataFromArgs;
|
|
4874
4959
|
exports.redactJsonAttributeValue = redactJsonAttributeValue;
|
|
4875
4960
|
exports.redactSecretsInObject = redactSecretsInObject;
|
package/dist/index.node.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { DEFAULT_REDACT_ATTRIBUTE_KEYS, DEFAULT_SECRET_KEY_NAMES, REDACTED_PLACEHOLDER, RaindropTelemetryIntegration, _resetParentToolContextStorage, _resetRaindropCallMetadataStorage, _resetWarnedMissingUserId, clearParentToolContext, createRaindropAISDK, currentSpan, defaultTransformSpan, enterParentToolContext, eventMetadata, eventMetadataFromChatRequest, getContextManager, getCurrentParentToolContext, getCurrentRaindropCallMetadata, readRaindropCallMetadataFromArgs, redactJsonAttributeValue, redactSecretsInObject, runWithParentToolContext, runWithRaindropCallMetadata, withCurrent } from './chunk-
|
|
1
|
+
export { DEFAULT_REDACT_ATTRIBUTE_KEYS, DEFAULT_SECRET_KEY_NAMES, REDACTED_PLACEHOLDER, RaindropTelemetryIntegration, _resetParentToolContextStorage, _resetRaindropCallMetadataStorage, _resetWarnedMissingUserId, clearParentToolContext, createRaindropAISDK, currentSpan, defaultTransformSpan, enterParentToolContext, eventMetadata, eventMetadataFromChatRequest, getContextManager, getCurrentParentToolContext, getCurrentRaindropCallMetadata, raindrop, readRaindropCallMetadataFromArgs, redactJsonAttributeValue, redactSecretsInObject, runWithParentToolContext, runWithRaindropCallMetadata, withCurrent } from './chunk-FIX66Y7M.mjs';
|
|
2
2
|
import { AsyncLocalStorage } from 'async_hooks';
|
|
3
3
|
|
|
4
4
|
globalThis.RAINDROP_ASYNC_LOCAL_STORAGE = AsyncLocalStorage;
|
package/dist/index.workers.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as AISDKChatRequestLike, a as AISDKChatRequestMessageLike, b as AISDKMessage, c as AgentCallMetadata, d as AgentWithMetadata, e as Attachment, B as BuildEventPatch, C as ContextManager, f as ContextSpan, g as CreateSpanArgs, D as DEFAULT_REDACT_ATTRIBUTE_KEYS, h as DEFAULT_SECRET_KEY_NAMES, E as EndSpanArgs, i as EventBuilder, j as EventMetadataOptions, I as IdentifyInput, O as OtlpAnyValue, k as OtlpSpan, P as ParentToolContext, R as REDACTED_PLACEHOLDER, l as RaindropAISDKClient, m as RaindropAISDKContext, n as RaindropAISDKOptions, o as RaindropCallMetadata, p as RaindropTelemetryIntegration, q as RaindropTelemetryIntegrationOptions, S as SelfDiagnosticsOptions,
|
|
1
|
+
export { A as AISDKChatRequestLike, a as AISDKChatRequestMessageLike, b as AISDKMessage, c as AgentCallMetadata, d as AgentWithMetadata, e as Attachment, B as BuildEventPatch, C as ContextManager, f as ContextSpan, g as CreateSpanArgs, D as DEFAULT_REDACT_ATTRIBUTE_KEYS, h as DEFAULT_SECRET_KEY_NAMES, E as EndSpanArgs, i as EventBuilder, j as EventMetadataOptions, I as IdentifyInput, O as OtlpAnyValue, k as OtlpSpan, P as ParentToolContext, R as REDACTED_PLACEHOLDER, l as RaindropAISDKClient, m as RaindropAISDKContext, n as RaindropAISDKOptions, o as RaindropCallMetadata, p as RaindropTelemetryIntegration, q as RaindropTelemetryIntegrationOptions, r as RaindropTelemetryOptions, S as SelfDiagnosticsOptions, s as SelfDiagnosticsSignalDefinition, t as SelfDiagnosticsSignalDefinitions, u as SelfDiagnosticsTool, v as SelfDiagnosticsToolInput, w as SelfDiagnosticsToolOptions, x as SelfDiagnosticsToolResult, y as StartSpanArgs, T as TraceSpan, z as TransformSpanHook, W as WrapAISDKOptions, F as WrappedAI, G as WrappedAISDK, _ as _resetParentToolContextStorage, H as _resetRaindropCallMetadataStorage, J as _resetWarnedMissingUserId, K as clearParentToolContext, L as createRaindropAISDK, M as currentSpan, N as defaultTransformSpan, Q as enterParentToolContext, U as eventMetadata, V as eventMetadataFromChatRequest, X as getContextManager, Y as getCurrentParentToolContext, Z as getCurrentRaindropCallMetadata, $ as raindrop, a0 as readRaindropCallMetadataFromArgs, a1 as redactJsonAttributeValue, a2 as redactSecretsInObject, a3 as runWithParentToolContext, a4 as runWithRaindropCallMetadata, a5 as withCurrent } from './index-Dcf4FPZL.mjs';
|
|
2
2
|
|
|
3
3
|
declare global {
|
|
4
4
|
var RAINDROP_ASYNC_LOCAL_STORAGE: (new <T>() => {
|
package/dist/index.workers.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as AISDKChatRequestLike, a as AISDKChatRequestMessageLike, b as AISDKMessage, c as AgentCallMetadata, d as AgentWithMetadata, e as Attachment, B as BuildEventPatch, C as ContextManager, f as ContextSpan, g as CreateSpanArgs, D as DEFAULT_REDACT_ATTRIBUTE_KEYS, h as DEFAULT_SECRET_KEY_NAMES, E as EndSpanArgs, i as EventBuilder, j as EventMetadataOptions, I as IdentifyInput, O as OtlpAnyValue, k as OtlpSpan, P as ParentToolContext, R as REDACTED_PLACEHOLDER, l as RaindropAISDKClient, m as RaindropAISDKContext, n as RaindropAISDKOptions, o as RaindropCallMetadata, p as RaindropTelemetryIntegration, q as RaindropTelemetryIntegrationOptions, S as SelfDiagnosticsOptions,
|
|
1
|
+
export { A as AISDKChatRequestLike, a as AISDKChatRequestMessageLike, b as AISDKMessage, c as AgentCallMetadata, d as AgentWithMetadata, e as Attachment, B as BuildEventPatch, C as ContextManager, f as ContextSpan, g as CreateSpanArgs, D as DEFAULT_REDACT_ATTRIBUTE_KEYS, h as DEFAULT_SECRET_KEY_NAMES, E as EndSpanArgs, i as EventBuilder, j as EventMetadataOptions, I as IdentifyInput, O as OtlpAnyValue, k as OtlpSpan, P as ParentToolContext, R as REDACTED_PLACEHOLDER, l as RaindropAISDKClient, m as RaindropAISDKContext, n as RaindropAISDKOptions, o as RaindropCallMetadata, p as RaindropTelemetryIntegration, q as RaindropTelemetryIntegrationOptions, r as RaindropTelemetryOptions, S as SelfDiagnosticsOptions, s as SelfDiagnosticsSignalDefinition, t as SelfDiagnosticsSignalDefinitions, u as SelfDiagnosticsTool, v as SelfDiagnosticsToolInput, w as SelfDiagnosticsToolOptions, x as SelfDiagnosticsToolResult, y as StartSpanArgs, T as TraceSpan, z as TransformSpanHook, W as WrapAISDKOptions, F as WrappedAI, G as WrappedAISDK, _ as _resetParentToolContextStorage, H as _resetRaindropCallMetadataStorage, J as _resetWarnedMissingUserId, K as clearParentToolContext, L as createRaindropAISDK, M as currentSpan, N as defaultTransformSpan, Q as enterParentToolContext, U as eventMetadata, V as eventMetadataFromChatRequest, X as getContextManager, Y as getCurrentParentToolContext, Z as getCurrentRaindropCallMetadata, $ as raindrop, a0 as readRaindropCallMetadataFromArgs, a1 as redactJsonAttributeValue, a2 as redactSecretsInObject, a3 as runWithParentToolContext, a4 as runWithRaindropCallMetadata, a5 as withCurrent } from './index-Dcf4FPZL.js';
|
|
2
2
|
|
|
3
3
|
declare global {
|
|
4
4
|
var RAINDROP_ASYNC_LOCAL_STORAGE: (new <T>() => {
|