@strands-agents/sdk 0.4.0 → 0.6.0
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/dist/src/__fixtures__/agent-helpers.d.ts +10 -1
- package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/agent-helpers.js +13 -2
- package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
- package/dist/src/__fixtures__/metrics-helpers.d.ts +25 -0
- package/dist/src/__fixtures__/metrics-helpers.d.ts.map +1 -0
- package/dist/src/__fixtures__/metrics-helpers.js +34 -0
- package/dist/src/__fixtures__/metrics-helpers.js.map +1 -0
- package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-message-model.js +12 -0
- package/dist/src/__fixtures__/mock-message-model.js.map +1 -1
- package/dist/src/__fixtures__/mock-span.d.ts +78 -0
- package/dist/src/__fixtures__/mock-span.d.ts.map +1 -0
- package/dist/src/__fixtures__/mock-span.js +93 -0
- package/dist/src/__fixtures__/mock-span.js.map +1 -0
- package/dist/src/__fixtures__/mock-storage-provider.d.ts +5 -0
- package/dist/src/__fixtures__/mock-storage-provider.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-storage-provider.js +23 -6
- package/dist/src/__fixtures__/mock-storage-provider.js.map +1 -1
- package/dist/src/__fixtures__/slim-types.d.ts +2 -1
- package/dist/src/__fixtures__/slim-types.d.ts.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.d.ts +2 -2
- package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.js +4 -4
- package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
- package/dist/src/__tests__/app-state.test.d.ts +2 -0
- package/dist/src/__tests__/app-state.test.d.ts.map +1 -0
- package/dist/src/{agent/__tests__/state.test.js → __tests__/app-state.test.js} +46 -46
- package/dist/src/__tests__/app-state.test.js.map +1 -0
- package/dist/src/__tests__/mcp.test.js +129 -18
- package/dist/src/__tests__/mcp.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.test.js +119 -11
- package/dist/src/agent/__tests__/agent.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.tracer.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.tracer.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.tracer.test.js +470 -0
- package/dist/src/agent/__tests__/agent.tracer.test.js.map +1 -0
- package/dist/src/agent/agent.d.ts +79 -9
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +253 -68
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/{agent/state.d.ts → app-state.d.ts} +7 -7
- package/dist/src/app-state.d.ts.map +1 -0
- package/dist/src/{agent/state.js → app-state.js} +6 -6
- package/dist/src/app-state.js.map +1 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js +1 -1
- package/dist/src/errors.d.ts +6 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +9 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/hooks/__tests__/events.test.js +2 -0
- package/dist/src/hooks/__tests__/events.test.js.map +1 -1
- package/dist/src/hooks/events.d.ts +16 -0
- package/dist/src/hooks/events.d.ts.map +1 -1
- package/dist/src/hooks/events.js.map +1 -1
- package/dist/src/hooks/index.d.ts +1 -1
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/index.d.ts +23 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +19 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp.d.ts +41 -0
- package/dist/src/mcp.d.ts.map +1 -1
- package/dist/src/mcp.js +60 -6
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/models/__tests__/bedrock.test.js +688 -0
- package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
- package/dist/src/models/__tests__/model.test.js +113 -0
- package/dist/src/models/__tests__/model.test.js.map +1 -1
- package/dist/src/models/__tests__/streaming.test.d.ts +2 -0
- package/dist/src/models/__tests__/streaming.test.d.ts.map +1 -0
- package/dist/src/models/__tests__/streaming.test.js +50 -0
- package/dist/src/models/__tests__/streaming.test.js.map +1 -0
- package/dist/src/models/bedrock.d.ts +80 -1
- package/dist/src/models/bedrock.d.ts.map +1 -1
- package/dist/src/models/bedrock.js +214 -5
- package/dist/src/models/bedrock.js.map +1 -1
- package/dist/src/models/model.d.ts +10 -0
- package/dist/src/models/model.d.ts.map +1 -1
- package/dist/src/models/model.js +58 -2
- package/dist/src/models/model.js.map +1 -1
- package/dist/src/models/streaming.d.ts +84 -3
- package/dist/src/models/streaming.d.ts.map +1 -1
- package/dist/src/models/streaming.js +26 -0
- package/dist/src/models/streaming.js.map +1 -1
- package/dist/src/multiagent/__tests__/events.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/events.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/events.test.js +205 -0
- package/dist/src/multiagent/__tests__/events.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/graph.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/graph.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/graph.test.js +438 -0
- package/dist/src/multiagent/__tests__/graph.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/nodes.test.js +105 -9
- package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/queue.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/queue.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/queue.test.js +118 -0
- package/dist/src/multiagent/__tests__/queue.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/swarm.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/swarm.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/swarm.test.js +241 -0
- package/dist/src/multiagent/__tests__/swarm.test.js.map +1 -0
- package/dist/src/multiagent/base.d.ts +25 -0
- package/dist/src/multiagent/base.d.ts.map +1 -0
- package/dist/src/multiagent/base.js +2 -0
- package/dist/src/multiagent/base.js.map +1 -0
- package/dist/src/multiagent/edge.d.ts +36 -0
- package/dist/src/multiagent/edge.d.ts.map +1 -0
- package/dist/src/multiagent/edge.js +15 -0
- package/dist/src/multiagent/edge.js.map +1 -0
- package/dist/src/multiagent/events.d.ts +129 -4
- package/dist/src/multiagent/events.d.ts.map +1 -1
- package/dist/src/multiagent/events.js +140 -2
- package/dist/src/multiagent/events.js.map +1 -1
- package/dist/src/multiagent/graph.d.ts +125 -0
- package/dist/src/multiagent/graph.d.ts.map +1 -0
- package/dist/src/multiagent/graph.js +394 -0
- package/dist/src/multiagent/graph.js.map +1 -0
- package/dist/src/multiagent/index.d.ts +12 -6
- package/dist/src/multiagent/index.d.ts.map +1 -1
- package/dist/src/multiagent/index.js +6 -3
- package/dist/src/multiagent/index.js.map +1 -1
- package/dist/src/multiagent/nodes.d.ts +66 -16
- package/dist/src/multiagent/nodes.d.ts.map +1 -1
- package/dist/src/multiagent/nodes.js +82 -24
- package/dist/src/multiagent/nodes.js.map +1 -1
- package/dist/src/multiagent/queue.d.ts +73 -0
- package/dist/src/multiagent/queue.d.ts.map +1 -0
- package/dist/src/multiagent/queue.js +72 -0
- package/dist/src/multiagent/queue.js.map +1 -0
- package/dist/src/multiagent/state.d.ts +79 -10
- package/dist/src/multiagent/state.d.ts.map +1 -1
- package/dist/src/multiagent/state.js +101 -9
- package/dist/src/multiagent/state.js.map +1 -1
- package/dist/src/multiagent/swarm.d.ts +102 -0
- package/dist/src/multiagent/swarm.d.ts.map +1 -0
- package/dist/src/multiagent/swarm.js +238 -0
- package/dist/src/multiagent/swarm.js.map +1 -0
- package/dist/src/registry/__tests__/tool-registry.test.d.ts +2 -0
- package/dist/src/registry/__tests__/tool-registry.test.d.ts.map +1 -0
- package/dist/src/registry/__tests__/tool-registry.test.js +124 -0
- package/dist/src/registry/__tests__/tool-registry.test.js.map +1 -0
- package/dist/src/registry/tool-registry.d.ts +32 -20
- package/dist/src/registry/tool-registry.d.ts.map +1 -1
- package/dist/src/registry/tool-registry.js +60 -158
- package/dist/src/registry/tool-registry.js.map +1 -1
- package/dist/src/session/__tests__/file-storage.test.node.js +75 -15
- package/dist/src/session/__tests__/file-storage.test.node.js.map +1 -1
- package/dist/src/session/__tests__/s3-storage.test.d.ts +2 -0
- package/dist/src/session/__tests__/s3-storage.test.d.ts.map +1 -0
- package/dist/src/session/__tests__/{s3-storage.test.node.js → s3-storage.test.js} +161 -75
- package/dist/src/session/__tests__/s3-storage.test.js.map +1 -0
- package/dist/src/session/__tests__/session-manager.test.d.ts +2 -0
- package/dist/src/session/__tests__/session-manager.test.d.ts.map +1 -0
- package/dist/src/session/__tests__/session-manager.test.js +461 -0
- package/dist/src/session/__tests__/session-manager.test.js.map +1 -0
- package/dist/src/session/__tests__/validation.test.js +28 -1
- package/dist/src/session/__tests__/validation.test.js.map +1 -1
- package/dist/src/session/file-storage.d.ts +53 -27
- package/dist/src/session/file-storage.d.ts.map +1 -1
- package/dist/src/session/file-storage.js +103 -52
- package/dist/src/session/file-storage.js.map +1 -1
- package/dist/src/session/index.d.ts +6 -13
- package/dist/src/session/index.d.ts.map +1 -1
- package/dist/src/session/index.js +4 -12
- package/dist/src/session/index.js.map +1 -1
- package/dist/src/session/s3-storage.d.ts +49 -20
- package/dist/src/session/s3-storage.d.ts.map +1 -1
- package/dist/src/session/s3-storage.js +120 -35
- package/dist/src/session/s3-storage.js.map +1 -1
- package/dist/src/session/session-manager.d.ts +83 -0
- package/dist/src/session/session-manager.d.ts.map +1 -0
- package/dist/src/session/session-manager.js +122 -0
- package/dist/src/session/session-manager.js.map +1 -0
- package/dist/src/session/storage.d.ts +19 -11
- package/dist/src/session/storage.d.ts.map +1 -1
- package/dist/src/session/types.d.ts +6 -18
- package/dist/src/session/types.d.ts.map +1 -1
- package/dist/src/session/validation.d.ts +7 -0
- package/dist/src/session/validation.d.ts.map +1 -1
- package/dist/src/session/validation.js +12 -0
- package/dist/src/session/validation.js.map +1 -1
- package/dist/src/structured-output/__tests__/context.test.js +13 -13
- package/dist/src/structured-output/__tests__/context.test.js.map +1 -1
- package/dist/src/structured-output/context.js +1 -1
- package/dist/src/structured-output/context.js.map +1 -1
- package/dist/src/telemetry/__tests__/config.test.d.ts +2 -0
- package/dist/src/telemetry/__tests__/config.test.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/config.test.js +40 -0
- package/dist/src/telemetry/__tests__/config.test.js.map +1 -0
- package/dist/src/telemetry/__tests__/config.test.node.d.ts +2 -0
- package/dist/src/telemetry/__tests__/config.test.node.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/config.test.node.js +103 -0
- package/dist/src/telemetry/__tests__/config.test.node.js.map +1 -0
- package/dist/src/telemetry/__tests__/json.test.d.ts +2 -0
- package/dist/src/telemetry/__tests__/json.test.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/json.test.js +89 -0
- package/dist/src/telemetry/__tests__/json.test.js.map +1 -0
- package/dist/src/telemetry/__tests__/meter.test.d.ts +2 -0
- package/dist/src/telemetry/__tests__/meter.test.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/meter.test.js +457 -0
- package/dist/src/telemetry/__tests__/meter.test.js.map +1 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.d.ts +2 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.js +611 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.js.map +1 -0
- package/dist/src/telemetry/config.d.ts +82 -0
- package/dist/src/telemetry/config.d.ts.map +1 -0
- package/dist/src/telemetry/config.js +133 -0
- package/dist/src/telemetry/config.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +34 -0
- package/dist/src/telemetry/index.d.ts.map +1 -0
- package/dist/src/telemetry/index.js +33 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/json.d.ts +11 -0
- package/dist/src/telemetry/json.d.ts.map +1 -0
- package/dist/src/telemetry/json.js +25 -0
- package/dist/src/telemetry/json.js.map +1 -0
- package/dist/src/telemetry/meter.d.ts +277 -0
- package/dist/src/telemetry/meter.d.ts.map +1 -0
- package/dist/src/telemetry/meter.js +292 -0
- package/dist/src/telemetry/meter.js.map +1 -0
- package/dist/src/telemetry/tracer.d.ts +219 -0
- package/dist/src/telemetry/tracer.d.ts.map +1 -0
- package/dist/src/telemetry/tracer.js +610 -0
- package/dist/src/telemetry/tracer.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +101 -0
- package/dist/src/telemetry/types.d.ts.map +1 -0
- package/dist/src/telemetry/types.js +5 -0
- package/dist/src/{multiagent → telemetry}/types.js.map +1 -1
- package/dist/src/tools/__tests__/tool-factory.test.d.ts +2 -0
- package/dist/src/tools/__tests__/tool-factory.test.d.ts.map +1 -0
- package/dist/src/tools/__tests__/tool-factory.test.js +98 -0
- package/dist/src/tools/__tests__/tool-factory.test.js.map +1 -0
- package/dist/src/tools/__tests__/zod-tool.test-d.js +1 -1
- package/dist/src/tools/__tests__/zod-tool.test-d.js.map +1 -1
- package/dist/src/tools/__tests__/zod-tool.test.js +3 -4
- package/dist/src/tools/__tests__/zod-tool.test.js.map +1 -1
- package/dist/src/tools/function-tool.d.ts +15 -2
- package/dist/src/tools/function-tool.d.ts.map +1 -1
- package/dist/src/tools/function-tool.js +24 -0
- package/dist/src/tools/function-tool.js.map +1 -1
- package/dist/src/tools/tool-factory.d.ts +22 -0
- package/dist/src/tools/tool-factory.d.ts.map +1 -0
- package/dist/src/tools/tool-factory.js +55 -0
- package/dist/src/tools/tool-factory.js.map +1 -0
- package/dist/src/tools/tool.d.ts +1 -1
- package/dist/src/tools/tool.js +1 -1
- package/dist/src/tools/zod-tool.d.ts +55 -52
- package/dist/src/tools/zod-tool.d.ts.map +1 -1
- package/dist/src/tools/zod-tool.js +7 -61
- package/dist/src/tools/zod-tool.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/__tests__/agent.test.js +11 -0
- package/dist/src/types/__tests__/agent.test.js.map +1 -1
- package/dist/src/types/__tests__/citations.test.d.ts +2 -0
- package/dist/src/types/__tests__/citations.test.d.ts.map +1 -0
- package/dist/src/types/__tests__/citations.test.js +104 -0
- package/dist/src/types/__tests__/citations.test.js.map +1 -0
- package/dist/src/types/__tests__/messages.test.js +26 -0
- package/dist/src/types/__tests__/messages.test.js.map +1 -1
- package/dist/src/types/agent.d.ts +10 -3
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/agent.js +9 -0
- package/dist/src/types/agent.js.map +1 -1
- package/dist/src/types/citations.d.ts +180 -0
- package/dist/src/types/citations.d.ts.map +1 -0
- package/dist/src/types/citations.js +45 -0
- package/dist/src/types/citations.js.map +1 -0
- package/dist/src/types/messages.d.ts +9 -5
- package/dist/src/types/messages.d.ts.map +1 -1
- package/dist/src/types/messages.js +5 -1
- package/dist/src/types/messages.js.map +1 -1
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +2 -2
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
- package/dist/src/vended-tools/bash/bash.d.ts.map +1 -1
- package/dist/src/vended-tools/bash/bash.js +1 -2
- package/dist/src/vended-tools/bash/bash.js.map +1 -1
- package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js +4 -4
- package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js.map +1 -1
- package/dist/src/vended-tools/file_editor/file-editor.js +1 -1
- package/dist/src/vended-tools/file_editor/file-editor.js.map +1 -1
- package/dist/src/vended-tools/http_request/http-request.d.ts.map +1 -1
- package/dist/src/vended-tools/http_request/http-request.js +1 -2
- package/dist/src/vended-tools/http_request/http-request.js.map +1 -1
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +2 -2
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
- package/dist/src/vended-tools/notebook/notebook.d.ts +1 -1
- package/package.json +25 -4
- package/dist/src/agent/__tests__/state.test.d.ts +0 -2
- package/dist/src/agent/__tests__/state.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/state.test.js.map +0 -1
- package/dist/src/agent/state.d.ts.map +0 -1
- package/dist/src/agent/state.js.map +0 -1
- package/dist/src/multiagent/types.d.ts +0 -5
- package/dist/src/multiagent/types.d.ts.map +0 -1
- package/dist/src/multiagent/types.js +0 -2
- package/dist/src/registry/registry.d.ts +0 -117
- package/dist/src/registry/registry.d.ts.map +0 -1
- package/dist/src/registry/registry.js +0 -298
- package/dist/src/registry/registry.js.map +0 -1
- package/dist/src/session/__tests__/s3-storage.test.node.d.ts +0 -2
- package/dist/src/session/__tests__/s3-storage.test.node.d.ts.map +0 -1
- package/dist/src/session/__tests__/s3-storage.test.node.js.map +0 -1
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent loop metrics tracking.
|
|
3
|
+
*
|
|
4
|
+
* The {@link Meter} accumulates local metrics during agent invocation and
|
|
5
|
+
* provides them as a read-only {@link AgentMetrics} snapshot via the
|
|
6
|
+
* {@link Meter.metrics} getter for inclusion in {@link AgentResult}.
|
|
7
|
+
*/
|
|
8
|
+
import type { Usage, Metrics, ModelMetadataEventData } from '../models/streaming.js';
|
|
9
|
+
import type { ToolUse } from '../tools/types.js';
|
|
10
|
+
import type { JSONSerializable } from '../types/json.js';
|
|
11
|
+
/**
|
|
12
|
+
* Per-tool execution metrics.
|
|
13
|
+
*/
|
|
14
|
+
export interface ToolMetricsData {
|
|
15
|
+
/**
|
|
16
|
+
* Total number of calls to this tool.
|
|
17
|
+
*/
|
|
18
|
+
callCount: number;
|
|
19
|
+
/**
|
|
20
|
+
* Number of successful calls.
|
|
21
|
+
*/
|
|
22
|
+
successCount: number;
|
|
23
|
+
/**
|
|
24
|
+
* Number of failed calls.
|
|
25
|
+
*/
|
|
26
|
+
errorCount: number;
|
|
27
|
+
/**
|
|
28
|
+
* Total execution time in milliseconds.
|
|
29
|
+
*/
|
|
30
|
+
totalTime: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Per-cycle usage tracking.
|
|
34
|
+
*/
|
|
35
|
+
export interface AgentLoopMetricsData {
|
|
36
|
+
/**
|
|
37
|
+
* Unique identifier for this cycle.
|
|
38
|
+
*/
|
|
39
|
+
cycleId: string;
|
|
40
|
+
/**
|
|
41
|
+
* Duration of this cycle in milliseconds.
|
|
42
|
+
*/
|
|
43
|
+
duration: number;
|
|
44
|
+
/**
|
|
45
|
+
* Token usage for this cycle.
|
|
46
|
+
*/
|
|
47
|
+
usage: Usage;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Per-invocation metrics tracking.
|
|
51
|
+
*/
|
|
52
|
+
export interface InvocationMetricsData {
|
|
53
|
+
/**
|
|
54
|
+
* Cycle metrics for this invocation.
|
|
55
|
+
*/
|
|
56
|
+
cycles: AgentLoopMetricsData[];
|
|
57
|
+
/**
|
|
58
|
+
* Accumulated token usage for this invocation.
|
|
59
|
+
*/
|
|
60
|
+
usage: Usage;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* JSON-serializable representation of AgentMetrics.
|
|
64
|
+
*/
|
|
65
|
+
export interface AgentMetricsData {
|
|
66
|
+
/**
|
|
67
|
+
* Number of agent loop cycles executed.
|
|
68
|
+
*/
|
|
69
|
+
cycleCount: number;
|
|
70
|
+
/**
|
|
71
|
+
* Accumulated token usage across all model invocations.
|
|
72
|
+
*/
|
|
73
|
+
accumulatedUsage: Usage;
|
|
74
|
+
/**
|
|
75
|
+
* Accumulated performance metrics across all model invocations.
|
|
76
|
+
*/
|
|
77
|
+
accumulatedMetrics: Metrics;
|
|
78
|
+
/**
|
|
79
|
+
* Per-invocation metrics.
|
|
80
|
+
*/
|
|
81
|
+
agentInvocations: InvocationMetricsData[];
|
|
82
|
+
/**
|
|
83
|
+
* Per-tool execution metrics keyed by tool name.
|
|
84
|
+
*/
|
|
85
|
+
toolMetrics: Record<string, ToolMetricsData>;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Options for recording tool usage.
|
|
89
|
+
*/
|
|
90
|
+
interface ToolUsageOptions {
|
|
91
|
+
/**
|
|
92
|
+
* The tool that was used.
|
|
93
|
+
*/
|
|
94
|
+
tool: ToolUse;
|
|
95
|
+
/**
|
|
96
|
+
* Execution duration in milliseconds.
|
|
97
|
+
*/
|
|
98
|
+
duration: number;
|
|
99
|
+
/**
|
|
100
|
+
* Whether the tool call succeeded.
|
|
101
|
+
*/
|
|
102
|
+
success: boolean;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Read-only snapshot of aggregated agent metrics.
|
|
106
|
+
*
|
|
107
|
+
* Returned by {@link Meter.metrics} and stored on {@link AgentResult}.
|
|
108
|
+
* Provides access to cycle counts, tool usage, token consumption,
|
|
109
|
+
* and per-invocation breakdowns. Supports serialization via {@link toJSON}.
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```typescript
|
|
113
|
+
* const result = await agent.invoke('Hello')
|
|
114
|
+
* console.log(result.metrics.cycleCount)
|
|
115
|
+
* console.log(result.metrics.totalDuration)
|
|
116
|
+
* console.log(result.metrics.accumulatedData)
|
|
117
|
+
* console.log(result.metrics.toolMetrics)
|
|
118
|
+
* console.log(JSON.stringify(result.metrics))
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
export declare class AgentMetrics implements JSONSerializable<AgentMetricsData> {
|
|
122
|
+
/**
|
|
123
|
+
* Number of agent loop cycles executed.
|
|
124
|
+
*/
|
|
125
|
+
readonly cycleCount: number;
|
|
126
|
+
/**
|
|
127
|
+
* Accumulated token usage across all model invocations.
|
|
128
|
+
*/
|
|
129
|
+
readonly accumulatedUsage: Usage;
|
|
130
|
+
/**
|
|
131
|
+
* Accumulated performance metrics across all model invocations.
|
|
132
|
+
*/
|
|
133
|
+
readonly accumulatedMetrics: Metrics;
|
|
134
|
+
/**
|
|
135
|
+
* Per-invocation metrics.
|
|
136
|
+
*/
|
|
137
|
+
readonly agentInvocations: InvocationMetricsData[];
|
|
138
|
+
/**
|
|
139
|
+
* Per-tool execution metrics keyed by tool name.
|
|
140
|
+
*/
|
|
141
|
+
readonly toolMetrics: Record<string, ToolMetricsData>;
|
|
142
|
+
constructor(data?: Partial<AgentMetricsData>);
|
|
143
|
+
/**
|
|
144
|
+
* The most recent agent invocation, or undefined if none exist.
|
|
145
|
+
*/
|
|
146
|
+
get latestAgentInvocation(): InvocationMetricsData | undefined;
|
|
147
|
+
/**
|
|
148
|
+
* Accumulated usage and performance metrics across all model invocations.
|
|
149
|
+
*/
|
|
150
|
+
get accumulatedData(): {
|
|
151
|
+
usage: Usage;
|
|
152
|
+
metrics: Metrics;
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Total duration of all cycles in milliseconds.
|
|
156
|
+
*/
|
|
157
|
+
get totalDuration(): number;
|
|
158
|
+
/**
|
|
159
|
+
* Average cycle duration in milliseconds, or 0 if no cycles exist.
|
|
160
|
+
*/
|
|
161
|
+
get averageCycleTime(): number;
|
|
162
|
+
/**
|
|
163
|
+
* Per-tool execution statistics with computed averages and rates.
|
|
164
|
+
*/
|
|
165
|
+
get toolUsage(): Record<string, ToolMetricsData & {
|
|
166
|
+
averageTime: number;
|
|
167
|
+
successRate: number;
|
|
168
|
+
}>;
|
|
169
|
+
/**
|
|
170
|
+
* Returns a JSON-serializable representation of all collected metrics.
|
|
171
|
+
* Called automatically by JSON.stringify().
|
|
172
|
+
*
|
|
173
|
+
* @returns A plain object suitable for round-trip serialization
|
|
174
|
+
*/
|
|
175
|
+
toJSON(): AgentMetricsData;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Accumulates local metrics during agent invocation.
|
|
179
|
+
*
|
|
180
|
+
* Tracks cycle counts, token usage, tool execution stats, and model latency.
|
|
181
|
+
* Use the {@link metrics} getter to obtain a read-only {@link AgentMetrics}
|
|
182
|
+
* snapshot for inclusion in {@link AgentResult}.
|
|
183
|
+
*
|
|
184
|
+
*/
|
|
185
|
+
export declare class Meter {
|
|
186
|
+
/**
|
|
187
|
+
* Number of agent loop cycles executed.
|
|
188
|
+
*/
|
|
189
|
+
private _cycleCount;
|
|
190
|
+
/**
|
|
191
|
+
* Accumulated token usage across all model invocations.
|
|
192
|
+
*/
|
|
193
|
+
private readonly _accumulatedUsage;
|
|
194
|
+
/**
|
|
195
|
+
* Accumulated performance metrics across all model invocations.
|
|
196
|
+
*/
|
|
197
|
+
private readonly _accumulatedMetrics;
|
|
198
|
+
/**
|
|
199
|
+
* Per-invocation metrics.
|
|
200
|
+
*/
|
|
201
|
+
private readonly _agentInvocations;
|
|
202
|
+
/**
|
|
203
|
+
* Per-tool execution metrics keyed by tool name.
|
|
204
|
+
*/
|
|
205
|
+
private readonly _toolMetrics;
|
|
206
|
+
/**
|
|
207
|
+
* Begin tracking a new agent invocation.
|
|
208
|
+
* Creates a new InvocationMetricsData entry for per-invocation metrics.
|
|
209
|
+
*/
|
|
210
|
+
startNewInvocation(): void;
|
|
211
|
+
/**
|
|
212
|
+
* Start a new agent loop cycle.
|
|
213
|
+
*
|
|
214
|
+
* @returns The cycle id and start time
|
|
215
|
+
*/
|
|
216
|
+
startCycle(): {
|
|
217
|
+
cycleId: string;
|
|
218
|
+
startTime: number;
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* End the current agent loop cycle and record its duration.
|
|
222
|
+
*
|
|
223
|
+
* @param startTime - The timestamp when the cycle started (milliseconds since epoch)
|
|
224
|
+
*/
|
|
225
|
+
endCycle(startTime: number): void;
|
|
226
|
+
/**
|
|
227
|
+
* Record metrics for a completed tool invocation.
|
|
228
|
+
*
|
|
229
|
+
* @param options - Tool usage recording options
|
|
230
|
+
*/
|
|
231
|
+
endToolCall(options: ToolUsageOptions): void;
|
|
232
|
+
/**
|
|
233
|
+
* Update loop-level metrics from a model response.
|
|
234
|
+
*
|
|
235
|
+
* Call this after each model invocation within a cycle to
|
|
236
|
+
* accumulate usage and latency.
|
|
237
|
+
*
|
|
238
|
+
* @param metadata - The metadata event from a model invocation, or undefined if unavailable
|
|
239
|
+
*/
|
|
240
|
+
updateCycle(metadata?: ModelMetadataEventData): void;
|
|
241
|
+
/**
|
|
242
|
+
* Read-only snapshot of the accumulated metrics.
|
|
243
|
+
* Returns an AgentMetrics instance suitable for inclusion in AgentResult.
|
|
244
|
+
*/
|
|
245
|
+
get metrics(): AgentMetrics;
|
|
246
|
+
/**
|
|
247
|
+
* The most recent agent invocation, or undefined if none exist.
|
|
248
|
+
*/
|
|
249
|
+
private get _latestAgentInvocation();
|
|
250
|
+
/**
|
|
251
|
+
* Update accumulated usage and metrics from a model metadata event.
|
|
252
|
+
*
|
|
253
|
+
* @param metadata - The metadata event from a model invocation
|
|
254
|
+
*/
|
|
255
|
+
private _updateFromMetadata;
|
|
256
|
+
/**
|
|
257
|
+
* Update the accumulated token usage with new usage data.
|
|
258
|
+
*
|
|
259
|
+
* @param usage - The usage data to accumulate
|
|
260
|
+
*/
|
|
261
|
+
private _updateUsage;
|
|
262
|
+
/**
|
|
263
|
+
* Creates an empty Usage object with all counters set to zero.
|
|
264
|
+
*
|
|
265
|
+
* @returns A Usage object with zeroed counters
|
|
266
|
+
*/
|
|
267
|
+
private static _createEmptyUsage;
|
|
268
|
+
/**
|
|
269
|
+
* Accumulates token usage from a source into a target Usage object.
|
|
270
|
+
*
|
|
271
|
+
* @param target - The Usage object to accumulate into (mutated in place)
|
|
272
|
+
* @param source - The Usage object to accumulate from
|
|
273
|
+
*/
|
|
274
|
+
private static _accumulateUsage;
|
|
275
|
+
}
|
|
276
|
+
export {};
|
|
277
|
+
//# sourceMappingURL=meter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meter.d.ts","sourceRoot":"","sources":["../../../src/telemetry/meter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent loop metrics tracking.
|
|
3
|
+
*
|
|
4
|
+
* The {@link Meter} accumulates local metrics during agent invocation and
|
|
5
|
+
* provides them as a read-only {@link AgentMetrics} snapshot via the
|
|
6
|
+
* {@link Meter.metrics} getter for inclusion in {@link AgentResult}.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Read-only snapshot of aggregated agent metrics.
|
|
10
|
+
*
|
|
11
|
+
* Returned by {@link Meter.metrics} and stored on {@link AgentResult}.
|
|
12
|
+
* Provides access to cycle counts, tool usage, token consumption,
|
|
13
|
+
* and per-invocation breakdowns. Supports serialization via {@link toJSON}.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const result = await agent.invoke('Hello')
|
|
18
|
+
* console.log(result.metrics.cycleCount)
|
|
19
|
+
* console.log(result.metrics.totalDuration)
|
|
20
|
+
* console.log(result.metrics.accumulatedData)
|
|
21
|
+
* console.log(result.metrics.toolMetrics)
|
|
22
|
+
* console.log(JSON.stringify(result.metrics))
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export class AgentMetrics {
|
|
26
|
+
/**
|
|
27
|
+
* Number of agent loop cycles executed.
|
|
28
|
+
*/
|
|
29
|
+
cycleCount;
|
|
30
|
+
/**
|
|
31
|
+
* Accumulated token usage across all model invocations.
|
|
32
|
+
*/
|
|
33
|
+
accumulatedUsage;
|
|
34
|
+
/**
|
|
35
|
+
* Accumulated performance metrics across all model invocations.
|
|
36
|
+
*/
|
|
37
|
+
accumulatedMetrics;
|
|
38
|
+
/**
|
|
39
|
+
* Per-invocation metrics.
|
|
40
|
+
*/
|
|
41
|
+
agentInvocations;
|
|
42
|
+
/**
|
|
43
|
+
* Per-tool execution metrics keyed by tool name.
|
|
44
|
+
*/
|
|
45
|
+
toolMetrics;
|
|
46
|
+
constructor(data) {
|
|
47
|
+
this.cycleCount = data?.cycleCount ?? 0;
|
|
48
|
+
this.accumulatedUsage = data?.accumulatedUsage ?? { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
|
|
49
|
+
this.accumulatedMetrics = data?.accumulatedMetrics ?? { latencyMs: 0 };
|
|
50
|
+
this.agentInvocations = data?.agentInvocations ?? [];
|
|
51
|
+
this.toolMetrics = data?.toolMetrics ?? {};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The most recent agent invocation, or undefined if none exist.
|
|
55
|
+
*/
|
|
56
|
+
get latestAgentInvocation() {
|
|
57
|
+
return this.agentInvocations.length > 0 ? this.agentInvocations[this.agentInvocations.length - 1] : undefined;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Accumulated usage and performance metrics across all model invocations.
|
|
61
|
+
*/
|
|
62
|
+
get accumulatedData() {
|
|
63
|
+
return { usage: this.accumulatedUsage, metrics: this.accumulatedMetrics };
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Total duration of all cycles in milliseconds.
|
|
67
|
+
*/
|
|
68
|
+
get totalDuration() {
|
|
69
|
+
return this.agentInvocations.flatMap((inv) => inv.cycles.map((c) => c.duration)).reduce((sum, d) => sum + d, 0);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Average cycle duration in milliseconds, or 0 if no cycles exist.
|
|
73
|
+
*/
|
|
74
|
+
get averageCycleTime() {
|
|
75
|
+
const durations = this.agentInvocations.flatMap((inv) => inv.cycles.map((c) => c.duration));
|
|
76
|
+
return durations.length > 0 ? durations.reduce((sum, d) => sum + d, 0) / durations.length : 0;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Per-tool execution statistics with computed averages and rates.
|
|
80
|
+
*/
|
|
81
|
+
get toolUsage() {
|
|
82
|
+
const usage = {};
|
|
83
|
+
for (const [toolName, toolEntry] of Object.entries(this.toolMetrics)) {
|
|
84
|
+
usage[toolName] = {
|
|
85
|
+
...toolEntry,
|
|
86
|
+
averageTime: toolEntry.callCount > 0 ? toolEntry.totalTime / toolEntry.callCount : 0,
|
|
87
|
+
successRate: toolEntry.callCount > 0 ? toolEntry.successCount / toolEntry.callCount : 0,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
return usage;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Returns a JSON-serializable representation of all collected metrics.
|
|
94
|
+
* Called automatically by JSON.stringify().
|
|
95
|
+
*
|
|
96
|
+
* @returns A plain object suitable for round-trip serialization
|
|
97
|
+
*/
|
|
98
|
+
toJSON() {
|
|
99
|
+
return {
|
|
100
|
+
cycleCount: this.cycleCount,
|
|
101
|
+
accumulatedUsage: this.accumulatedUsage,
|
|
102
|
+
accumulatedMetrics: this.accumulatedMetrics,
|
|
103
|
+
agentInvocations: this.agentInvocations,
|
|
104
|
+
toolMetrics: this.toolMetrics,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Accumulates local metrics during agent invocation.
|
|
110
|
+
*
|
|
111
|
+
* Tracks cycle counts, token usage, tool execution stats, and model latency.
|
|
112
|
+
* Use the {@link metrics} getter to obtain a read-only {@link AgentMetrics}
|
|
113
|
+
* snapshot for inclusion in {@link AgentResult}.
|
|
114
|
+
*
|
|
115
|
+
*/
|
|
116
|
+
export class Meter {
|
|
117
|
+
/**
|
|
118
|
+
* Number of agent loop cycles executed.
|
|
119
|
+
*/
|
|
120
|
+
_cycleCount = 0;
|
|
121
|
+
/**
|
|
122
|
+
* Accumulated token usage across all model invocations.
|
|
123
|
+
*/
|
|
124
|
+
_accumulatedUsage = Meter._createEmptyUsage();
|
|
125
|
+
/**
|
|
126
|
+
* Accumulated performance metrics across all model invocations.
|
|
127
|
+
*/
|
|
128
|
+
_accumulatedMetrics = { latencyMs: 0 };
|
|
129
|
+
/**
|
|
130
|
+
* Per-invocation metrics.
|
|
131
|
+
*/
|
|
132
|
+
_agentInvocations = [];
|
|
133
|
+
/**
|
|
134
|
+
* Per-tool execution metrics keyed by tool name.
|
|
135
|
+
*/
|
|
136
|
+
_toolMetrics = {};
|
|
137
|
+
/**
|
|
138
|
+
* Begin tracking a new agent invocation.
|
|
139
|
+
* Creates a new InvocationMetricsData entry for per-invocation metrics.
|
|
140
|
+
*/
|
|
141
|
+
startNewInvocation() {
|
|
142
|
+
this._agentInvocations.push({
|
|
143
|
+
cycles: [],
|
|
144
|
+
usage: Meter._createEmptyUsage(),
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Start a new agent loop cycle.
|
|
149
|
+
*
|
|
150
|
+
* @returns The cycle id and start time
|
|
151
|
+
*/
|
|
152
|
+
startCycle() {
|
|
153
|
+
this._cycleCount++;
|
|
154
|
+
const cycleId = `cycle-${this._cycleCount}`;
|
|
155
|
+
const startTime = Date.now();
|
|
156
|
+
const latestInvocation = this._latestAgentInvocation;
|
|
157
|
+
if (latestInvocation) {
|
|
158
|
+
latestInvocation.cycles.push({
|
|
159
|
+
cycleId: cycleId,
|
|
160
|
+
duration: 0,
|
|
161
|
+
usage: Meter._createEmptyUsage(),
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
return { cycleId, startTime };
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* End the current agent loop cycle and record its duration.
|
|
168
|
+
*
|
|
169
|
+
* @param startTime - The timestamp when the cycle started (milliseconds since epoch)
|
|
170
|
+
*/
|
|
171
|
+
endCycle(startTime) {
|
|
172
|
+
const latestInvocation = this._latestAgentInvocation;
|
|
173
|
+
if (latestInvocation) {
|
|
174
|
+
const cycles = latestInvocation.cycles;
|
|
175
|
+
if (cycles.length > 0) {
|
|
176
|
+
cycles[cycles.length - 1].duration = Date.now() - startTime;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Record metrics for a completed tool invocation.
|
|
182
|
+
*
|
|
183
|
+
* @param options - Tool usage recording options
|
|
184
|
+
*/
|
|
185
|
+
endToolCall(options) {
|
|
186
|
+
const { tool, duration, success } = options;
|
|
187
|
+
const toolName = tool.name;
|
|
188
|
+
if (!this._toolMetrics[toolName]) {
|
|
189
|
+
this._toolMetrics[toolName] = { callCount: 0, successCount: 0, errorCount: 0, totalTime: 0 };
|
|
190
|
+
}
|
|
191
|
+
const toolEntry = this._toolMetrics[toolName];
|
|
192
|
+
toolEntry.callCount++;
|
|
193
|
+
toolEntry.totalTime += duration;
|
|
194
|
+
if (success) {
|
|
195
|
+
toolEntry.successCount++;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
toolEntry.errorCount++;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Update loop-level metrics from a model response.
|
|
203
|
+
*
|
|
204
|
+
* Call this after each model invocation within a cycle to
|
|
205
|
+
* accumulate usage and latency.
|
|
206
|
+
*
|
|
207
|
+
* @param metadata - The metadata event from a model invocation, or undefined if unavailable
|
|
208
|
+
*/
|
|
209
|
+
updateCycle(metadata) {
|
|
210
|
+
if (metadata) {
|
|
211
|
+
this._updateFromMetadata(metadata);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Read-only snapshot of the accumulated metrics.
|
|
216
|
+
* Returns an AgentMetrics instance suitable for inclusion in AgentResult.
|
|
217
|
+
*/
|
|
218
|
+
get metrics() {
|
|
219
|
+
return new AgentMetrics({
|
|
220
|
+
cycleCount: this._cycleCount,
|
|
221
|
+
accumulatedUsage: this._accumulatedUsage,
|
|
222
|
+
accumulatedMetrics: this._accumulatedMetrics,
|
|
223
|
+
agentInvocations: this._agentInvocations,
|
|
224
|
+
toolMetrics: this._toolMetrics,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* The most recent agent invocation, or undefined if none exist.
|
|
229
|
+
*/
|
|
230
|
+
get _latestAgentInvocation() {
|
|
231
|
+
return this._agentInvocations.length > 0 ? this._agentInvocations[this._agentInvocations.length - 1] : undefined;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Update accumulated usage and metrics from a model metadata event.
|
|
235
|
+
*
|
|
236
|
+
* @param metadata - The metadata event from a model invocation
|
|
237
|
+
*/
|
|
238
|
+
_updateFromMetadata(metadata) {
|
|
239
|
+
if (metadata.usage) {
|
|
240
|
+
this._updateUsage(metadata.usage);
|
|
241
|
+
}
|
|
242
|
+
if (metadata.metrics) {
|
|
243
|
+
this._accumulatedMetrics.latencyMs += metadata.metrics.latencyMs;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Update the accumulated token usage with new usage data.
|
|
248
|
+
*
|
|
249
|
+
* @param usage - The usage data to accumulate
|
|
250
|
+
*/
|
|
251
|
+
_updateUsage(usage) {
|
|
252
|
+
Meter._accumulateUsage(this._accumulatedUsage, usage);
|
|
253
|
+
const latestInvocation = this._latestAgentInvocation;
|
|
254
|
+
if (latestInvocation) {
|
|
255
|
+
Meter._accumulateUsage(latestInvocation.usage, usage);
|
|
256
|
+
const cycles = latestInvocation.cycles;
|
|
257
|
+
if (cycles.length > 0) {
|
|
258
|
+
Meter._accumulateUsage(cycles[cycles.length - 1].usage, usage);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Creates an empty Usage object with all counters set to zero.
|
|
264
|
+
*
|
|
265
|
+
* @returns A Usage object with zeroed counters
|
|
266
|
+
*/
|
|
267
|
+
static _createEmptyUsage() {
|
|
268
|
+
return {
|
|
269
|
+
inputTokens: 0,
|
|
270
|
+
outputTokens: 0,
|
|
271
|
+
totalTokens: 0,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Accumulates token usage from a source into a target Usage object.
|
|
276
|
+
*
|
|
277
|
+
* @param target - The Usage object to accumulate into (mutated in place)
|
|
278
|
+
* @param source - The Usage object to accumulate from
|
|
279
|
+
*/
|
|
280
|
+
static _accumulateUsage(target, source) {
|
|
281
|
+
target.inputTokens += source.inputTokens;
|
|
282
|
+
target.outputTokens += source.outputTokens;
|
|
283
|
+
target.totalTokens += source.totalTokens;
|
|
284
|
+
if (source.cacheReadInputTokens !== undefined) {
|
|
285
|
+
target.cacheReadInputTokens = (target.cacheReadInputTokens ?? 0) + source.cacheReadInputTokens;
|
|
286
|
+
}
|
|
287
|
+
if (source.cacheWriteInputTokens !== undefined) {
|
|
288
|
+
target.cacheWriteInputTokens = (target.cacheWriteInputTokens ?? 0) + source.cacheWriteInputTokens;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=meter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meter.js","sourceRoot":"","sources":["../../../src/telemetry/meter.ts"],"names":[],"mappings":"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"}
|