@warpmetrics/warp 0.0.18 → 0.0.19
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/package.json +1 -1
- package/src/core/transport.js +2 -2
- package/src/core/warp.js +13 -7
- package/src/index.d.ts +5 -3
- package/src/trace/group.js +2 -0
- package/src/trace/run.js +2 -0
- package/src/trace/trace.js +7 -2
package/package.json
CHANGED
package/src/core/transport.js
CHANGED
|
@@ -166,7 +166,7 @@ export function logRun(data) {
|
|
|
166
166
|
label: data.label,
|
|
167
167
|
opts: data.opts || null,
|
|
168
168
|
refId: data.refId || null,
|
|
169
|
-
|
|
169
|
+
startedAt: data.startedAt || new Date().toISOString(),
|
|
170
170
|
});
|
|
171
171
|
}
|
|
172
172
|
|
|
@@ -175,7 +175,7 @@ export function logGroup(data) {
|
|
|
175
175
|
id: data.id,
|
|
176
176
|
label: data.label,
|
|
177
177
|
opts: data.opts || null,
|
|
178
|
-
|
|
178
|
+
startedAt: data.startedAt || new Date().toISOString(),
|
|
179
179
|
});
|
|
180
180
|
}
|
|
181
181
|
|
package/src/core/warp.js
CHANGED
|
@@ -32,13 +32,14 @@ function createInterceptor(originalFn, context, provider) {
|
|
|
32
32
|
|
|
33
33
|
try {
|
|
34
34
|
const result = await originalFn.apply(context, args);
|
|
35
|
-
const
|
|
35
|
+
const duration = Date.now() - start;
|
|
36
36
|
|
|
37
37
|
if (stream) {
|
|
38
38
|
return wrapStream(result, { callId, provider, model, messages, tools, start });
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
const ext = provider.extract(result);
|
|
42
|
+
const endedAt = new Date().toISOString();
|
|
42
43
|
|
|
43
44
|
responseRegistry.set(result, {
|
|
44
45
|
id: callId,
|
|
@@ -47,8 +48,9 @@ function createInterceptor(originalFn, context, provider) {
|
|
|
47
48
|
response: ext.response,
|
|
48
49
|
tools: tools ? tools.map(t => t.function?.name || t.name).filter(Boolean) : null,
|
|
49
50
|
toolCalls: ext.toolCalls,
|
|
50
|
-
tokens: ext.tokens,
|
|
51
|
-
|
|
51
|
+
tokens: ext.tokens, duration,
|
|
52
|
+
startedAt: new Date(start).toISOString(),
|
|
53
|
+
endedAt,
|
|
52
54
|
status: 'success',
|
|
53
55
|
},
|
|
54
56
|
});
|
|
@@ -56,13 +58,15 @@ function createInterceptor(originalFn, context, provider) {
|
|
|
56
58
|
return result;
|
|
57
59
|
} catch (error) {
|
|
58
60
|
const errorResult = { _warpError: true };
|
|
61
|
+
const duration = Date.now() - start;
|
|
59
62
|
responseRegistry.set(errorResult, {
|
|
60
63
|
id: callId,
|
|
61
64
|
data: {
|
|
62
65
|
id: callId, provider: provider.name, model, messages,
|
|
63
66
|
error: error.message,
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
duration,
|
|
68
|
+
startedAt: new Date(start).toISOString(),
|
|
69
|
+
endedAt: new Date().toISOString(),
|
|
66
70
|
status: 'error',
|
|
67
71
|
},
|
|
68
72
|
});
|
|
@@ -95,6 +99,7 @@ function wrapStream(stream, ctx) {
|
|
|
95
99
|
? ctx.provider.normalizeUsage(usage)
|
|
96
100
|
: { prompt: 0, completion: 0, total: 0 };
|
|
97
101
|
|
|
102
|
+
const duration = Date.now() - ctx.start;
|
|
98
103
|
responseRegistry.set(wrapped, {
|
|
99
104
|
id: ctx.callId,
|
|
100
105
|
data: {
|
|
@@ -102,8 +107,9 @@ function wrapStream(stream, ctx) {
|
|
|
102
107
|
response: content,
|
|
103
108
|
tools: ctx.tools ? ctx.tools.map(t => t.function?.name || t.name).filter(Boolean) : null,
|
|
104
109
|
tokens,
|
|
105
|
-
|
|
106
|
-
|
|
110
|
+
duration,
|
|
111
|
+
startedAt: new Date(ctx.start).toISOString(),
|
|
112
|
+
endedAt: new Date().toISOString(),
|
|
107
113
|
status: 'success',
|
|
108
114
|
},
|
|
109
115
|
});
|
package/src/index.d.ts
CHANGED
|
@@ -63,9 +63,11 @@ export interface TraceData {
|
|
|
63
63
|
/** Token usage. */
|
|
64
64
|
tokens?: { prompt?: number; completion?: number; total?: number };
|
|
65
65
|
/** Duration in milliseconds. */
|
|
66
|
-
|
|
67
|
-
/** ISO 8601 timestamp
|
|
68
|
-
|
|
66
|
+
duration?: number;
|
|
67
|
+
/** ISO 8601 timestamp of when the call started. */
|
|
68
|
+
startedAt?: string;
|
|
69
|
+
/** ISO 8601 timestamp of when the call ended (auto-generated if omitted). */
|
|
70
|
+
endedAt?: string;
|
|
69
71
|
/** "success" (default) or "error". */
|
|
70
72
|
status?: string;
|
|
71
73
|
/** Error message. */
|
package/src/trace/group.js
CHANGED
|
@@ -14,6 +14,7 @@ import { logGroup, logLink, getConfig } from '../core/transport.js';
|
|
|
14
14
|
* @returns {{ readonly id: string, readonly _type: 'group' }}
|
|
15
15
|
*/
|
|
16
16
|
export function group(target, label, opts) {
|
|
17
|
+
const startedAt = new Date().toISOString();
|
|
17
18
|
const targetId = getRef(target);
|
|
18
19
|
if (!targetId) {
|
|
19
20
|
if (getConfig().debug) console.warn('[warpmetrics] group() — target not recognised.');
|
|
@@ -29,6 +30,7 @@ export function group(target, label, opts) {
|
|
|
29
30
|
label,
|
|
30
31
|
opts: opts || null,
|
|
31
32
|
parentId: targetId,
|
|
33
|
+
startedAt,
|
|
32
34
|
groups: [],
|
|
33
35
|
calls: [],
|
|
34
36
|
};
|
package/src/trace/run.js
CHANGED
|
@@ -14,6 +14,7 @@ import { logRun, getConfig } from '../core/transport.js';
|
|
|
14
14
|
* @returns {{ readonly id: string, readonly _type: 'run' }}
|
|
15
15
|
*/
|
|
16
16
|
export function run(labelOrRef, labelOrOpts, maybeOpts) {
|
|
17
|
+
const startedAt = new Date().toISOString();
|
|
17
18
|
let refId = null;
|
|
18
19
|
let label, opts;
|
|
19
20
|
|
|
@@ -37,6 +38,7 @@ export function run(labelOrRef, labelOrOpts, maybeOpts) {
|
|
|
37
38
|
label,
|
|
38
39
|
opts,
|
|
39
40
|
refId,
|
|
41
|
+
startedAt,
|
|
40
42
|
groups: [],
|
|
41
43
|
calls: [],
|
|
42
44
|
};
|
package/src/trace/trace.js
CHANGED
|
@@ -26,6 +26,10 @@ export function trace(target, data) {
|
|
|
26
26
|
|
|
27
27
|
const id = generateId('call');
|
|
28
28
|
|
|
29
|
+
const endedAt = data.endedAt || data.timestamp || new Date().toISOString();
|
|
30
|
+
const duration = data.duration ?? data.latency ?? null;
|
|
31
|
+
const startedAt = data.startedAt || (duration != null ? new Date(new Date(endedAt).getTime() - duration).toISOString() : endedAt);
|
|
32
|
+
|
|
29
33
|
const event = {
|
|
30
34
|
id,
|
|
31
35
|
provider: data.provider,
|
|
@@ -35,8 +39,9 @@ export function trace(target, data) {
|
|
|
35
39
|
tools: data.tools || null,
|
|
36
40
|
toolCalls: data.toolCalls || null,
|
|
37
41
|
tokens: data.tokens || null,
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
duration,
|
|
43
|
+
startedAt,
|
|
44
|
+
endedAt,
|
|
40
45
|
status: data.status || 'success',
|
|
41
46
|
};
|
|
42
47
|
|