agentic-qe 1.8.4 → 1.9.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/.claude/skills/agentic-jujutsu/SKILL.md +645 -0
- package/CHANGELOG.md +375 -0
- package/README.md +86 -18
- package/dist/App.d.ts +5 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/App.js +15 -0
- package/dist/App.js.map +1 -0
- package/dist/cli/commands/constitution.d.ts +34 -0
- package/dist/cli/commands/constitution.d.ts.map +1 -0
- package/dist/cli/commands/constitution.js +679 -0
- package/dist/cli/commands/constitution.js.map +1 -0
- package/dist/cli/commands/init.d.ts +8 -75
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +22 -2292
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/telemetry.d.ts +36 -0
- package/dist/cli/commands/telemetry.d.ts.map +1 -0
- package/dist/cli/commands/telemetry.js +364 -0
- package/dist/cli/commands/telemetry.js.map +1 -0
- package/dist/cli/index.js +66 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/agents.d.ts +22 -0
- package/dist/cli/init/agents.d.ts.map +1 -0
- package/dist/cli/init/agents.js +522 -0
- package/dist/cli/init/agents.js.map +1 -0
- package/dist/cli/init/bash-wrapper.d.ts +14 -0
- package/dist/cli/init/bash-wrapper.d.ts.map +1 -0
- package/dist/cli/init/bash-wrapper.js +47 -0
- package/dist/cli/init/bash-wrapper.js.map +1 -0
- package/dist/cli/init/claude-config.d.ts +24 -0
- package/dist/cli/init/claude-config.d.ts.map +1 -0
- package/dist/cli/init/claude-config.js +275 -0
- package/dist/cli/init/claude-config.js.map +1 -0
- package/dist/cli/init/claude-md.d.ts +19 -0
- package/dist/cli/init/claude-md.d.ts.map +1 -0
- package/dist/cli/init/claude-md.js +153 -0
- package/dist/cli/init/claude-md.js.map +1 -0
- package/dist/cli/init/commands.d.ts +6 -0
- package/dist/cli/init/commands.d.ts.map +1 -0
- package/dist/cli/init/commands.js +83 -0
- package/dist/cli/init/commands.js.map +1 -0
- package/dist/cli/init/database-init.d.ts +15 -0
- package/dist/cli/init/database-init.d.ts.map +1 -0
- package/dist/cli/init/database-init.js +203 -0
- package/dist/cli/init/database-init.js.map +1 -0
- package/dist/cli/init/directory-structure.d.ts +14 -0
- package/dist/cli/init/directory-structure.d.ts.map +1 -0
- package/dist/cli/init/directory-structure.js +107 -0
- package/dist/cli/init/directory-structure.js.map +1 -0
- package/dist/cli/init/documentation.d.ts +14 -0
- package/dist/cli/init/documentation.d.ts.map +1 -0
- package/dist/cli/init/documentation.js +195 -0
- package/dist/cli/init/documentation.js.map +1 -0
- package/dist/cli/init/fleet-config.d.ts +34 -0
- package/dist/cli/init/fleet-config.d.ts.map +1 -0
- package/dist/cli/init/fleet-config.js +269 -0
- package/dist/cli/init/fleet-config.js.map +1 -0
- package/dist/cli/init/helpers.d.ts +6 -0
- package/dist/cli/init/helpers.d.ts.map +1 -0
- package/dist/cli/init/helpers.js +94 -0
- package/dist/cli/init/helpers.js.map +1 -0
- package/dist/cli/init/index.d.ts +32 -0
- package/dist/cli/init/index.d.ts.map +1 -0
- package/dist/cli/init/index.js +294 -0
- package/dist/cli/init/index.js.map +1 -0
- package/dist/cli/init/skills.d.ts +6 -0
- package/dist/cli/init/skills.d.ts.map +1 -0
- package/dist/cli/init/skills.js +138 -0
- package/dist/cli/init/skills.js.map +1 -0
- package/dist/cli/init/utils/file-utils.d.ts +74 -0
- package/dist/cli/init/utils/file-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/file-utils.js +187 -0
- package/dist/cli/init/utils/file-utils.js.map +1 -0
- package/dist/cli/init/utils/index.d.ts +18 -0
- package/dist/cli/init/utils/index.d.ts.map +1 -0
- package/dist/cli/init/utils/index.js +48 -0
- package/dist/cli/init/utils/index.js.map +1 -0
- package/dist/cli/init/utils/log-utils.d.ts +47 -0
- package/dist/cli/init/utils/log-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/log-utils.js +68 -0
- package/dist/cli/init/utils/log-utils.js.map +1 -0
- package/dist/cli/init/utils/path-utils.d.ts +91 -0
- package/dist/cli/init/utils/path-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/path-utils.js +208 -0
- package/dist/cli/init/utils/path-utils.js.map +1 -0
- package/dist/cli/init/utils/validation-utils.d.ts +44 -0
- package/dist/cli/init/utils/validation-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/validation-utils.js +68 -0
- package/dist/cli/init/utils/validation-utils.js.map +1 -0
- package/dist/cli/init/utils.d.ts +183 -0
- package/dist/cli/init/utils.d.ts.map +1 -0
- package/dist/cli/init/utils.js +354 -0
- package/dist/cli/init/utils.js.map +1 -0
- package/dist/components/Dashboard/Dashboard.d.ts +4 -0
- package/dist/components/Dashboard/Dashboard.d.ts.map +1 -0
- package/dist/components/Dashboard/Dashboard.js +148 -0
- package/dist/components/Dashboard/Dashboard.js.map +1 -0
- package/dist/components/Dashboard/DashboardHeader.d.ts +4 -0
- package/dist/components/Dashboard/DashboardHeader.d.ts.map +1 -0
- package/dist/components/Dashboard/DashboardHeader.js +138 -0
- package/dist/components/Dashboard/DashboardHeader.js.map +1 -0
- package/dist/constitution/evaluators/ast-evaluator.d.ts +42 -0
- package/dist/constitution/evaluators/ast-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/ast-evaluator.js +303 -0
- package/dist/constitution/evaluators/ast-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/base.d.ts +144 -0
- package/dist/constitution/evaluators/base.d.ts.map +1 -0
- package/dist/constitution/evaluators/base.js +144 -0
- package/dist/constitution/evaluators/base.js.map +1 -0
- package/dist/constitution/evaluators/index.d.ts +19 -0
- package/dist/constitution/evaluators/index.d.ts.map +1 -0
- package/dist/constitution/evaluators/index.js +56 -0
- package/dist/constitution/evaluators/index.js.map +1 -0
- package/dist/constitution/evaluators/metric-evaluator.d.ts +59 -0
- package/dist/constitution/evaluators/metric-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/metric-evaluator.js +195 -0
- package/dist/constitution/evaluators/metric-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/pattern-evaluator.d.ts +66 -0
- package/dist/constitution/evaluators/pattern-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/pattern-evaluator.js +221 -0
- package/dist/constitution/evaluators/pattern-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/semantic-evaluator.d.ts +68 -0
- package/dist/constitution/evaluators/semantic-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/semantic-evaluator.js +250 -0
- package/dist/constitution/evaluators/semantic-evaluator.js.map +1 -0
- package/dist/contexts/DashboardContext.d.ts +41 -0
- package/dist/contexts/DashboardContext.d.ts.map +1 -0
- package/dist/contexts/DashboardContext.js +187 -0
- package/dist/contexts/DashboardContext.js.map +1 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts +40 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +279 -120
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/hooks/useKeyboardShortcuts.d.ts +12 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.js +69 -0
- package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/telemetry/instrumentation/agent.d.ts +158 -0
- package/dist/telemetry/instrumentation/agent.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/agent.js +372 -0
- package/dist/telemetry/instrumentation/agent.js.map +1 -0
- package/dist/telemetry/instrumentation/index.d.ts +24 -0
- package/dist/telemetry/instrumentation/index.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/index.js +54 -0
- package/dist/telemetry/instrumentation/index.js.map +1 -0
- package/dist/telemetry/instrumentation/memory.d.ts +313 -0
- package/dist/telemetry/instrumentation/memory.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/memory.js +552 -0
- package/dist/telemetry/instrumentation/memory.js.map +1 -0
- package/dist/telemetry/instrumentation/task.d.ts +146 -0
- package/dist/telemetry/instrumentation/task.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/task.js +305 -0
- package/dist/telemetry/instrumentation/task.js.map +1 -0
- package/dist/telemetry/metrics/collectors/cost.d.ts +246 -0
- package/dist/telemetry/metrics/collectors/cost.d.ts.map +1 -0
- package/dist/telemetry/metrics/collectors/cost.js +526 -0
- package/dist/telemetry/metrics/collectors/cost.js.map +1 -0
- package/dist/telemetry/metrics/collectors/pricing-config.d.ts +87 -0
- package/dist/telemetry/metrics/collectors/pricing-config.d.ts.map +1 -0
- package/dist/telemetry/metrics/collectors/pricing-config.js +207 -0
- package/dist/telemetry/metrics/collectors/pricing-config.js.map +1 -0
- package/dist/telemetry/metrics/index.d.ts +4 -1
- package/dist/telemetry/metrics/index.d.ts.map +1 -1
- package/dist/telemetry/metrics/index.js +18 -2
- package/dist/telemetry/metrics/index.js.map +1 -1
- package/dist/telemetry/types.d.ts +1 -1
- package/dist/telemetry/types.d.ts.map +1 -1
- package/dist/visualization/api/RestEndpoints.d.ts +136 -0
- package/dist/visualization/api/RestEndpoints.d.ts.map +1 -0
- package/dist/visualization/api/RestEndpoints.js +428 -0
- package/dist/visualization/api/RestEndpoints.js.map +1 -0
- package/dist/visualization/api/WebSocketServer.d.ts +165 -0
- package/dist/visualization/api/WebSocketServer.d.ts.map +1 -0
- package/dist/visualization/api/WebSocketServer.js +518 -0
- package/dist/visualization/api/WebSocketServer.js.map +1 -0
- package/dist/visualization/core/DataTransformer.d.ts +89 -0
- package/dist/visualization/core/DataTransformer.d.ts.map +1 -0
- package/dist/visualization/core/DataTransformer.js +478 -0
- package/dist/visualization/core/DataTransformer.js.map +1 -0
- package/dist/visualization/index.d.ts +92 -0
- package/dist/visualization/index.d.ts.map +1 -0
- package/dist/visualization/index.js +121 -0
- package/dist/visualization/index.js.map +1 -0
- package/dist/visualization/types.d.ts +148 -0
- package/dist/visualization/types.d.ts.map +1 -0
- package/dist/visualization/types.js +7 -0
- package/dist/visualization/types.js.map +1 -0
- package/dist/voting/consensus.d.ts +87 -0
- package/dist/voting/consensus.d.ts.map +1 -0
- package/dist/voting/consensus.js +568 -0
- package/dist/voting/consensus.js.map +1 -0
- package/dist/voting/index.d.ts +12 -0
- package/dist/voting/index.d.ts.map +1 -0
- package/dist/voting/index.js +36 -0
- package/dist/voting/index.js.map +1 -0
- package/dist/voting/orchestrator.d.ts +65 -0
- package/dist/voting/orchestrator.d.ts.map +1 -0
- package/dist/voting/orchestrator.js +306 -0
- package/dist/voting/orchestrator.js.map +1 -0
- package/dist/voting/panel-assembly.d.ts +54 -0
- package/dist/voting/panel-assembly.d.ts.map +1 -0
- package/dist/voting/panel-assembly.js +192 -0
- package/dist/voting/panel-assembly.js.map +1 -0
- package/dist/voting/protocol.d.ts +119 -0
- package/dist/voting/protocol.d.ts.map +1 -0
- package/dist/voting/protocol.js +18 -0
- package/dist/voting/protocol.js.map +1 -0
- package/dist/voting/types.d.ts +125 -0
- package/dist/voting/types.d.ts.map +1 -0
- package/dist/voting/types.js +7 -0
- package/dist/voting/types.js.map +1 -0
- package/package.json +27 -2
|
@@ -0,0 +1,526 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Token and Cost Tracking Collector (Phase 2 - Action A5)
|
|
4
|
+
*
|
|
5
|
+
* Implements middleware for tracking LLM token usage and costs across agents,
|
|
6
|
+
* tasks, and fleet operations. Supports multiple LLM providers with accurate
|
|
7
|
+
* cost calculations based on pricing tables.
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - Token counting for input/output from all LLM API responses
|
|
11
|
+
* - Per-agent cost tracking with attribution
|
|
12
|
+
* - Fleet-wide cost aggregation
|
|
13
|
+
* - Support for Anthropic, OpenRouter, ONNX (local), OpenAI
|
|
14
|
+
* - Prometheus-compatible metric export
|
|
15
|
+
* - Cache-aware cost calculation (write premium, read discount)
|
|
16
|
+
*
|
|
17
|
+
* @module telemetry/metrics/collectors/cost
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.CostTracker = exports.PRICING_TABLE = void 0;
|
|
21
|
+
exports.getCostTracker = getCostTracker;
|
|
22
|
+
exports.withTokenTracking = withTokenTracking;
|
|
23
|
+
const bootstrap_1 = require("../../bootstrap");
|
|
24
|
+
/**
|
|
25
|
+
* Pricing table for supported LLM providers
|
|
26
|
+
*
|
|
27
|
+
* Anthropic pricing (January 2025):
|
|
28
|
+
* - Claude Sonnet 4.5: $3.00 input / $15.00 output per 1M tokens
|
|
29
|
+
* - Cache write: 25% premium ($3.75/M)
|
|
30
|
+
* - Cache read: 90% discount ($0.30/M)
|
|
31
|
+
*
|
|
32
|
+
* OpenRouter: ~99% cost savings vs Anthropic
|
|
33
|
+
* ONNX: $0 (local inference)
|
|
34
|
+
*/
|
|
35
|
+
exports.PRICING_TABLE = [
|
|
36
|
+
// Anthropic models
|
|
37
|
+
{
|
|
38
|
+
provider: 'anthropic',
|
|
39
|
+
model: 'claude-sonnet-4-5-20250929',
|
|
40
|
+
inputCostPerMillion: 3.0,
|
|
41
|
+
outputCostPerMillion: 15.0,
|
|
42
|
+
cacheWriteCostPerMillion: 3.75, // 25% premium
|
|
43
|
+
cacheReadCostPerMillion: 0.3, // 90% discount
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
provider: 'anthropic',
|
|
47
|
+
model: 'claude-sonnet-4',
|
|
48
|
+
inputCostPerMillion: 3.0,
|
|
49
|
+
outputCostPerMillion: 15.0,
|
|
50
|
+
cacheWriteCostPerMillion: 3.75,
|
|
51
|
+
cacheReadCostPerMillion: 0.3,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
provider: 'anthropic',
|
|
55
|
+
model: 'claude-3-5-sonnet-20241022',
|
|
56
|
+
inputCostPerMillion: 3.0,
|
|
57
|
+
outputCostPerMillion: 15.0,
|
|
58
|
+
cacheWriteCostPerMillion: 3.75,
|
|
59
|
+
cacheReadCostPerMillion: 0.3,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
provider: 'anthropic',
|
|
63
|
+
model: 'claude-3-5-haiku-20241022',
|
|
64
|
+
inputCostPerMillion: 1.0,
|
|
65
|
+
outputCostPerMillion: 5.0,
|
|
66
|
+
cacheWriteCostPerMillion: 1.25,
|
|
67
|
+
cacheReadCostPerMillion: 0.1,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
provider: 'anthropic',
|
|
71
|
+
model: 'claude-3-opus-20240229',
|
|
72
|
+
inputCostPerMillion: 15.0,
|
|
73
|
+
outputCostPerMillion: 75.0,
|
|
74
|
+
cacheWriteCostPerMillion: 18.75,
|
|
75
|
+
cacheReadCostPerMillion: 1.5,
|
|
76
|
+
},
|
|
77
|
+
// OpenRouter (99% cost savings)
|
|
78
|
+
{
|
|
79
|
+
provider: 'openrouter',
|
|
80
|
+
model: 'meta-llama/llama-3.1-8b-instruct',
|
|
81
|
+
inputCostPerMillion: 0.03, // ~99% cheaper than Claude
|
|
82
|
+
outputCostPerMillion: 0.15,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
provider: 'openrouter',
|
|
86
|
+
model: 'openai/gpt-3.5-turbo',
|
|
87
|
+
inputCostPerMillion: 0.5,
|
|
88
|
+
outputCostPerMillion: 1.5,
|
|
89
|
+
},
|
|
90
|
+
// OpenAI (for comparison)
|
|
91
|
+
{
|
|
92
|
+
provider: 'openai',
|
|
93
|
+
model: 'gpt-4-turbo',
|
|
94
|
+
inputCostPerMillion: 10.0,
|
|
95
|
+
outputCostPerMillion: 30.0,
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
provider: 'openai',
|
|
99
|
+
model: 'gpt-3.5-turbo',
|
|
100
|
+
inputCostPerMillion: 0.5,
|
|
101
|
+
outputCostPerMillion: 1.5,
|
|
102
|
+
},
|
|
103
|
+
// ONNX (local, free)
|
|
104
|
+
{
|
|
105
|
+
provider: 'onnx',
|
|
106
|
+
model: 'Xenova/gpt2',
|
|
107
|
+
inputCostPerMillion: 0,
|
|
108
|
+
outputCostPerMillion: 0,
|
|
109
|
+
},
|
|
110
|
+
];
|
|
111
|
+
/**
|
|
112
|
+
* CostTracker
|
|
113
|
+
*
|
|
114
|
+
* Middleware for tracking LLM token usage and costs with OpenTelemetry metrics.
|
|
115
|
+
*
|
|
116
|
+
* Usage:
|
|
117
|
+
* 1. Wrap LLM calls with trackTokens()
|
|
118
|
+
* 2. Extract usage from API response
|
|
119
|
+
* 3. Metrics automatically exported to OTEL collector
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* const costTracker = new CostTracker();
|
|
124
|
+
*
|
|
125
|
+
* // Track Anthropic call
|
|
126
|
+
* const response = await anthropic.messages.create({...});
|
|
127
|
+
* costTracker.trackTokens({
|
|
128
|
+
* agentId: 'test-gen-001',
|
|
129
|
+
* taskId: 'task-123',
|
|
130
|
+
* provider: 'anthropic',
|
|
131
|
+
* model: 'claude-sonnet-4',
|
|
132
|
+
* usage: {
|
|
133
|
+
* inputTokens: response.usage.input_tokens,
|
|
134
|
+
* outputTokens: response.usage.output_tokens,
|
|
135
|
+
* cacheCreationTokens: response.usage.cache_creation_input_tokens,
|
|
136
|
+
* cacheReadTokens: response.usage.cache_read_input_tokens,
|
|
137
|
+
* totalTokens: response.usage.input_tokens + response.usage.output_tokens,
|
|
138
|
+
* },
|
|
139
|
+
* });
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
class CostTracker {
|
|
143
|
+
constructor() {
|
|
144
|
+
// In-memory aggregations
|
|
145
|
+
this.agentMetrics = new Map();
|
|
146
|
+
this.taskMetrics = new Map();
|
|
147
|
+
this.fleetMetrics = null;
|
|
148
|
+
const meter = (0, bootstrap_1.getMeter)('agentic-qe-cost-tracker', '1.0.0');
|
|
149
|
+
// Token counters
|
|
150
|
+
this.tokenCounter = meter.createCounter('aqe.agent.token.count', {
|
|
151
|
+
description: 'Total tokens consumed by agents',
|
|
152
|
+
unit: 'tokens',
|
|
153
|
+
});
|
|
154
|
+
// Cost counters
|
|
155
|
+
this.costCounter = meter.createCounter('aqe.agent.cost.total', {
|
|
156
|
+
description: 'Total cost incurred by agents',
|
|
157
|
+
unit: 'usd',
|
|
158
|
+
});
|
|
159
|
+
// Token histograms (distribution)
|
|
160
|
+
this.tokenHistogram = meter.createHistogram('aqe.agent.token.distribution', {
|
|
161
|
+
description: 'Distribution of token usage per call',
|
|
162
|
+
unit: 'tokens',
|
|
163
|
+
});
|
|
164
|
+
// Cost histograms
|
|
165
|
+
this.costHistogram = meter.createHistogram('aqe.agent.cost.distribution', {
|
|
166
|
+
description: 'Distribution of costs per call',
|
|
167
|
+
unit: 'usd',
|
|
168
|
+
});
|
|
169
|
+
// Active agents counter (using UpDownCounter instead of Gauge)
|
|
170
|
+
this.activeAgentsGauge = meter.createUpDownCounter('aqe.agent.cost_tracking.active', {
|
|
171
|
+
description: 'Number of agents with active cost tracking',
|
|
172
|
+
});
|
|
173
|
+
// Initialize fleet metrics
|
|
174
|
+
this.initializeFleetMetrics();
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Track token usage and costs for an LLM call
|
|
178
|
+
*
|
|
179
|
+
* Extracts token counts from API response, calculates costs using pricing table,
|
|
180
|
+
* and records metrics to OpenTelemetry.
|
|
181
|
+
*
|
|
182
|
+
* @param params - Tracking parameters
|
|
183
|
+
*/
|
|
184
|
+
trackTokens(params) {
|
|
185
|
+
const { agentId, taskId, provider, model, usage, attributes } = params;
|
|
186
|
+
// Get pricing for this model
|
|
187
|
+
const pricing = this.getPricing(provider, model);
|
|
188
|
+
if (!pricing) {
|
|
189
|
+
console.warn(`No pricing found for provider=${provider} model=${model}`);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
// Calculate costs
|
|
193
|
+
const cost = this.calculateCost(usage, pricing);
|
|
194
|
+
// Create metrics object
|
|
195
|
+
const metrics = {
|
|
196
|
+
id: agentId,
|
|
197
|
+
type: 'agent',
|
|
198
|
+
tokens: usage,
|
|
199
|
+
cost,
|
|
200
|
+
provider,
|
|
201
|
+
model,
|
|
202
|
+
timestamp: Date.now(),
|
|
203
|
+
};
|
|
204
|
+
// Store agent metrics
|
|
205
|
+
this.updateAgentMetrics(agentId, metrics);
|
|
206
|
+
// Store task metrics if provided
|
|
207
|
+
if (taskId) {
|
|
208
|
+
this.updateTaskMetrics(taskId, metrics);
|
|
209
|
+
}
|
|
210
|
+
// Update fleet metrics
|
|
211
|
+
this.updateFleetMetrics(metrics);
|
|
212
|
+
// Record to OpenTelemetry
|
|
213
|
+
this.recordMetrics(metrics, attributes);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Get pricing configuration for a provider/model
|
|
217
|
+
*/
|
|
218
|
+
getPricing(provider, model) {
|
|
219
|
+
return exports.PRICING_TABLE.find(p => p.provider === provider && p.model === model) || null;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Calculate cost breakdown from token usage
|
|
223
|
+
*/
|
|
224
|
+
calculateCost(usage, pricing) {
|
|
225
|
+
// Regular tokens (non-cached)
|
|
226
|
+
const regularInputTokens = usage.inputTokens - (usage.cacheCreationTokens || 0) - (usage.cacheReadTokens || 0);
|
|
227
|
+
const inputCost = (regularInputTokens / 1000000) * pricing.inputCostPerMillion;
|
|
228
|
+
const outputCost = (usage.outputTokens / 1000000) * pricing.outputCostPerMillion;
|
|
229
|
+
let cacheWriteCost;
|
|
230
|
+
let cacheReadCost;
|
|
231
|
+
let cacheSavings;
|
|
232
|
+
// Cache write cost (25% premium)
|
|
233
|
+
if (usage.cacheCreationTokens && pricing.cacheWriteCostPerMillion) {
|
|
234
|
+
cacheWriteCost = (usage.cacheCreationTokens / 1000000) * pricing.cacheWriteCostPerMillion;
|
|
235
|
+
}
|
|
236
|
+
// Cache read cost (90% discount)
|
|
237
|
+
if (usage.cacheReadTokens && pricing.cacheReadCostPerMillion) {
|
|
238
|
+
cacheReadCost = (usage.cacheReadTokens / 1000000) * pricing.cacheReadCostPerMillion;
|
|
239
|
+
// Calculate savings vs regular cost
|
|
240
|
+
const regularCostWouldBe = (usage.cacheReadTokens / 1000000) * pricing.inputCostPerMillion;
|
|
241
|
+
cacheSavings = regularCostWouldBe - cacheReadCost;
|
|
242
|
+
}
|
|
243
|
+
const totalCost = inputCost + outputCost + (cacheWriteCost || 0) + (cacheReadCost || 0);
|
|
244
|
+
return {
|
|
245
|
+
inputCost,
|
|
246
|
+
outputCost,
|
|
247
|
+
cacheWriteCost,
|
|
248
|
+
cacheReadCost,
|
|
249
|
+
totalCost,
|
|
250
|
+
cacheSavings,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Update agent-level metrics (accumulate)
|
|
255
|
+
*/
|
|
256
|
+
updateAgentMetrics(agentId, metrics) {
|
|
257
|
+
const existing = this.agentMetrics.get(agentId);
|
|
258
|
+
if (existing) {
|
|
259
|
+
// Accumulate tokens
|
|
260
|
+
existing.tokens.inputTokens += metrics.tokens.inputTokens;
|
|
261
|
+
existing.tokens.outputTokens += metrics.tokens.outputTokens;
|
|
262
|
+
existing.tokens.totalTokens += metrics.tokens.totalTokens;
|
|
263
|
+
if (metrics.tokens.cacheCreationTokens) {
|
|
264
|
+
existing.tokens.cacheCreationTokens = (existing.tokens.cacheCreationTokens || 0) + metrics.tokens.cacheCreationTokens;
|
|
265
|
+
}
|
|
266
|
+
if (metrics.tokens.cacheReadTokens) {
|
|
267
|
+
existing.tokens.cacheReadTokens = (existing.tokens.cacheReadTokens || 0) + metrics.tokens.cacheReadTokens;
|
|
268
|
+
}
|
|
269
|
+
// Accumulate costs
|
|
270
|
+
existing.cost.inputCost += metrics.cost.inputCost;
|
|
271
|
+
existing.cost.outputCost += metrics.cost.outputCost;
|
|
272
|
+
existing.cost.totalCost += metrics.cost.totalCost;
|
|
273
|
+
if (metrics.cost.cacheWriteCost) {
|
|
274
|
+
existing.cost.cacheWriteCost = (existing.cost.cacheWriteCost || 0) + metrics.cost.cacheWriteCost;
|
|
275
|
+
}
|
|
276
|
+
if (metrics.cost.cacheReadCost) {
|
|
277
|
+
existing.cost.cacheReadCost = (existing.cost.cacheReadCost || 0) + metrics.cost.cacheReadCost;
|
|
278
|
+
}
|
|
279
|
+
if (metrics.cost.cacheSavings) {
|
|
280
|
+
existing.cost.cacheSavings = (existing.cost.cacheSavings || 0) + metrics.cost.cacheSavings;
|
|
281
|
+
}
|
|
282
|
+
existing.timestamp = metrics.timestamp;
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
this.agentMetrics.set(agentId, { ...metrics });
|
|
286
|
+
this.activeAgentsGauge.add(1, { agent_id: agentId });
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Update task-level metrics
|
|
291
|
+
*/
|
|
292
|
+
updateTaskMetrics(taskId, metrics) {
|
|
293
|
+
const taskMetrics = { ...metrics, id: taskId, type: 'task' };
|
|
294
|
+
this.taskMetrics.set(taskId, taskMetrics);
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Update fleet-wide metrics
|
|
298
|
+
*/
|
|
299
|
+
updateFleetMetrics(metrics) {
|
|
300
|
+
if (!this.fleetMetrics) {
|
|
301
|
+
this.initializeFleetMetrics();
|
|
302
|
+
}
|
|
303
|
+
if (this.fleetMetrics) {
|
|
304
|
+
// Accumulate fleet totals
|
|
305
|
+
this.fleetMetrics.tokens.inputTokens += metrics.tokens.inputTokens;
|
|
306
|
+
this.fleetMetrics.tokens.outputTokens += metrics.tokens.outputTokens;
|
|
307
|
+
this.fleetMetrics.tokens.totalTokens += metrics.tokens.totalTokens;
|
|
308
|
+
if (metrics.tokens.cacheCreationTokens) {
|
|
309
|
+
this.fleetMetrics.tokens.cacheCreationTokens = (this.fleetMetrics.tokens.cacheCreationTokens || 0) + metrics.tokens.cacheCreationTokens;
|
|
310
|
+
}
|
|
311
|
+
if (metrics.tokens.cacheReadTokens) {
|
|
312
|
+
this.fleetMetrics.tokens.cacheReadTokens = (this.fleetMetrics.tokens.cacheReadTokens || 0) + metrics.tokens.cacheReadTokens;
|
|
313
|
+
}
|
|
314
|
+
this.fleetMetrics.cost.inputCost += metrics.cost.inputCost;
|
|
315
|
+
this.fleetMetrics.cost.outputCost += metrics.cost.outputCost;
|
|
316
|
+
this.fleetMetrics.cost.totalCost += metrics.cost.totalCost;
|
|
317
|
+
if (metrics.cost.cacheWriteCost) {
|
|
318
|
+
this.fleetMetrics.cost.cacheWriteCost = (this.fleetMetrics.cost.cacheWriteCost || 0) + metrics.cost.cacheWriteCost;
|
|
319
|
+
}
|
|
320
|
+
if (metrics.cost.cacheReadCost) {
|
|
321
|
+
this.fleetMetrics.cost.cacheReadCost = (this.fleetMetrics.cost.cacheReadCost || 0) + metrics.cost.cacheReadCost;
|
|
322
|
+
}
|
|
323
|
+
if (metrics.cost.cacheSavings) {
|
|
324
|
+
this.fleetMetrics.cost.cacheSavings = (this.fleetMetrics.cost.cacheSavings || 0) + metrics.cost.cacheSavings;
|
|
325
|
+
}
|
|
326
|
+
this.fleetMetrics.timestamp = metrics.timestamp;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Initialize empty fleet metrics
|
|
331
|
+
*/
|
|
332
|
+
initializeFleetMetrics() {
|
|
333
|
+
this.fleetMetrics = {
|
|
334
|
+
id: 'fleet',
|
|
335
|
+
type: 'fleet',
|
|
336
|
+
tokens: {
|
|
337
|
+
inputTokens: 0,
|
|
338
|
+
outputTokens: 0,
|
|
339
|
+
totalTokens: 0,
|
|
340
|
+
cacheCreationTokens: 0,
|
|
341
|
+
cacheReadTokens: 0,
|
|
342
|
+
},
|
|
343
|
+
cost: {
|
|
344
|
+
inputCost: 0,
|
|
345
|
+
outputCost: 0,
|
|
346
|
+
totalCost: 0,
|
|
347
|
+
cacheWriteCost: 0,
|
|
348
|
+
cacheReadCost: 0,
|
|
349
|
+
cacheSavings: 0,
|
|
350
|
+
},
|
|
351
|
+
provider: 'mixed',
|
|
352
|
+
model: 'mixed',
|
|
353
|
+
timestamp: Date.now(),
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Record metrics to OpenTelemetry
|
|
358
|
+
*/
|
|
359
|
+
recordMetrics(metrics, attributes) {
|
|
360
|
+
const baseAttrs = {
|
|
361
|
+
agent_id: metrics.id,
|
|
362
|
+
provider: metrics.provider,
|
|
363
|
+
model: metrics.model,
|
|
364
|
+
type: metrics.type,
|
|
365
|
+
...attributes,
|
|
366
|
+
};
|
|
367
|
+
// Token counters
|
|
368
|
+
this.tokenCounter.add(metrics.tokens.inputTokens, {
|
|
369
|
+
...baseAttrs,
|
|
370
|
+
token_type: 'input',
|
|
371
|
+
});
|
|
372
|
+
this.tokenCounter.add(metrics.tokens.outputTokens, {
|
|
373
|
+
...baseAttrs,
|
|
374
|
+
token_type: 'output',
|
|
375
|
+
});
|
|
376
|
+
if (metrics.tokens.cacheCreationTokens) {
|
|
377
|
+
this.tokenCounter.add(metrics.tokens.cacheCreationTokens, {
|
|
378
|
+
...baseAttrs,
|
|
379
|
+
token_type: 'cache_write',
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
if (metrics.tokens.cacheReadTokens) {
|
|
383
|
+
this.tokenCounter.add(metrics.tokens.cacheReadTokens, {
|
|
384
|
+
...baseAttrs,
|
|
385
|
+
token_type: 'cache_read',
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
// Cost counters
|
|
389
|
+
this.costCounter.add(metrics.cost.totalCost, baseAttrs);
|
|
390
|
+
// Token distribution histogram
|
|
391
|
+
this.tokenHistogram.record(metrics.tokens.totalTokens, baseAttrs);
|
|
392
|
+
// Cost distribution histogram
|
|
393
|
+
this.costHistogram.record(metrics.cost.totalCost, baseAttrs);
|
|
394
|
+
// Cache savings (if applicable)
|
|
395
|
+
if (metrics.cost.cacheSavings && metrics.cost.cacheSavings > 0) {
|
|
396
|
+
this.costCounter.add(-metrics.cost.cacheSavings, {
|
|
397
|
+
...baseAttrs,
|
|
398
|
+
cost_type: 'cache_savings',
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Get metrics for a specific agent
|
|
404
|
+
*/
|
|
405
|
+
getAgentMetrics(agentId) {
|
|
406
|
+
return this.agentMetrics.get(agentId) || null;
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Get metrics for a specific task
|
|
410
|
+
*/
|
|
411
|
+
getTaskMetrics(taskId) {
|
|
412
|
+
return this.taskMetrics.get(taskId) || null;
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Get fleet-wide metrics
|
|
416
|
+
*/
|
|
417
|
+
getFleetMetrics() {
|
|
418
|
+
return this.fleetMetrics;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Get all agent metrics
|
|
422
|
+
*/
|
|
423
|
+
getAllAgentMetrics() {
|
|
424
|
+
return new Map(this.agentMetrics);
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Reset all metrics (for testing)
|
|
428
|
+
*/
|
|
429
|
+
reset() {
|
|
430
|
+
this.agentMetrics.clear();
|
|
431
|
+
this.taskMetrics.clear();
|
|
432
|
+
this.initializeFleetMetrics();
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Export metrics in Prometheus format
|
|
436
|
+
*/
|
|
437
|
+
exportPrometheusMetrics() {
|
|
438
|
+
const lines = [];
|
|
439
|
+
// Fleet metrics
|
|
440
|
+
if (this.fleetMetrics) {
|
|
441
|
+
lines.push('# HELP aqe_fleet_tokens_total Total tokens consumed by fleet');
|
|
442
|
+
lines.push('# TYPE aqe_fleet_tokens_total counter');
|
|
443
|
+
lines.push(`aqe_fleet_tokens_total{type="input"} ${this.fleetMetrics.tokens.inputTokens}`);
|
|
444
|
+
lines.push(`aqe_fleet_tokens_total{type="output"} ${this.fleetMetrics.tokens.outputTokens}`);
|
|
445
|
+
lines.push('');
|
|
446
|
+
lines.push('# HELP aqe_fleet_cost_total Total cost incurred by fleet');
|
|
447
|
+
lines.push('# TYPE aqe_fleet_cost_total counter');
|
|
448
|
+
lines.push(`aqe_fleet_cost_total ${this.fleetMetrics.cost.totalCost}`);
|
|
449
|
+
lines.push('');
|
|
450
|
+
if (this.fleetMetrics.cost.cacheSavings) {
|
|
451
|
+
lines.push('# HELP aqe_fleet_cache_savings_total Total cache savings');
|
|
452
|
+
lines.push('# TYPE aqe_fleet_cache_savings_total counter');
|
|
453
|
+
lines.push(`aqe_fleet_cache_savings_total ${this.fleetMetrics.cost.cacheSavings}`);
|
|
454
|
+
lines.push('');
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
// Per-agent metrics
|
|
458
|
+
this.agentMetrics.forEach((metrics, agentId) => {
|
|
459
|
+
const labels = `agent_id="${agentId}",provider="${metrics.provider}",model="${metrics.model}"`;
|
|
460
|
+
lines.push(`aqe_agent_tokens_total{${labels},type="input"} ${metrics.tokens.inputTokens}`);
|
|
461
|
+
lines.push(`aqe_agent_tokens_total{${labels},type="output"} ${metrics.tokens.outputTokens}`);
|
|
462
|
+
lines.push(`aqe_agent_cost_total{${labels}} ${metrics.cost.totalCost}`);
|
|
463
|
+
});
|
|
464
|
+
return lines.join('\n');
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
exports.CostTracker = CostTracker;
|
|
468
|
+
/**
|
|
469
|
+
* Singleton instance for global cost tracking
|
|
470
|
+
*/
|
|
471
|
+
let globalCostTracker = null;
|
|
472
|
+
/**
|
|
473
|
+
* Get or create the global CostTracker instance
|
|
474
|
+
*/
|
|
475
|
+
function getCostTracker() {
|
|
476
|
+
if (!globalCostTracker) {
|
|
477
|
+
globalCostTracker = new CostTracker();
|
|
478
|
+
}
|
|
479
|
+
return globalCostTracker;
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Middleware wrapper for LLM calls with automatic token tracking
|
|
483
|
+
*
|
|
484
|
+
* @example
|
|
485
|
+
* ```typescript
|
|
486
|
+
* const callLLM = withTokenTracking(
|
|
487
|
+
* async (prompt: string) => {
|
|
488
|
+
* const response = await anthropic.messages.create({
|
|
489
|
+
* model: 'claude-sonnet-4',
|
|
490
|
+
* messages: [{ role: 'user', content: prompt }],
|
|
491
|
+
* });
|
|
492
|
+
* return response;
|
|
493
|
+
* },
|
|
494
|
+
* {
|
|
495
|
+
* agentId: 'test-gen-001',
|
|
496
|
+
* taskId: 'task-123',
|
|
497
|
+
* provider: 'anthropic',
|
|
498
|
+
* model: 'claude-sonnet-4',
|
|
499
|
+
* }
|
|
500
|
+
* );
|
|
501
|
+
*
|
|
502
|
+
* const result = await callLLM('Generate tests for...');
|
|
503
|
+
* ```
|
|
504
|
+
*/
|
|
505
|
+
function withTokenTracking(fn, context) {
|
|
506
|
+
return async (...args) => {
|
|
507
|
+
const tracker = getCostTracker();
|
|
508
|
+
const result = await fn(...args);
|
|
509
|
+
// Extract usage from response
|
|
510
|
+
const usage = result.usage;
|
|
511
|
+
if (usage) {
|
|
512
|
+
tracker.trackTokens({
|
|
513
|
+
...context,
|
|
514
|
+
usage: {
|
|
515
|
+
inputTokens: usage.input_tokens || 0,
|
|
516
|
+
outputTokens: usage.output_tokens || 0,
|
|
517
|
+
cacheCreationTokens: usage.cache_creation_input_tokens,
|
|
518
|
+
cacheReadTokens: usage.cache_read_input_tokens,
|
|
519
|
+
totalTokens: (usage.input_tokens || 0) + (usage.output_tokens || 0),
|
|
520
|
+
},
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
return result;
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
//# sourceMappingURL=cost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../../../../src/telemetry/metrics/collectors/cost.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Provider Pricing Configuration
|
|
3
|
+
*
|
|
4
|
+
* Centralized pricing tables for all supported LLM providers.
|
|
5
|
+
* Prices are updated as of January 2025.
|
|
6
|
+
*
|
|
7
|
+
* Storage: This configuration is stored in memory namespace:
|
|
8
|
+
* - `aqe/phase2/instrumentation/token-metrics/pricing`
|
|
9
|
+
*
|
|
10
|
+
* @module telemetry/metrics/collectors/pricing-config
|
|
11
|
+
*/
|
|
12
|
+
import { ProviderPricing } from './cost';
|
|
13
|
+
/**
|
|
14
|
+
* Pricing update metadata
|
|
15
|
+
*/
|
|
16
|
+
export interface PricingMetadata {
|
|
17
|
+
/** Last updated timestamp */
|
|
18
|
+
lastUpdated: string;
|
|
19
|
+
/** Pricing version */
|
|
20
|
+
version: string;
|
|
21
|
+
/** Source of pricing data */
|
|
22
|
+
source: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Extended pricing configuration with metadata
|
|
26
|
+
*/
|
|
27
|
+
export interface PricingConfig {
|
|
28
|
+
/** Pricing metadata */
|
|
29
|
+
metadata: PricingMetadata;
|
|
30
|
+
/** Provider pricing tables */
|
|
31
|
+
providers: ProviderPricing[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Current pricing configuration (January 2025)
|
|
35
|
+
*
|
|
36
|
+
* Sources:
|
|
37
|
+
* - Anthropic: https://docs.anthropic.com/claude/pricing
|
|
38
|
+
* - OpenRouter: https://openrouter.ai/models
|
|
39
|
+
* - OpenAI: https://openai.com/pricing
|
|
40
|
+
*/
|
|
41
|
+
export declare const PRICING_CONFIG: PricingConfig;
|
|
42
|
+
/**
|
|
43
|
+
* Get pricing for a specific provider and model
|
|
44
|
+
*
|
|
45
|
+
* @param provider - Provider name
|
|
46
|
+
* @param model - Model identifier
|
|
47
|
+
* @returns Pricing configuration or null if not found
|
|
48
|
+
*/
|
|
49
|
+
export declare function getPricing(provider: string, model: string): ProviderPricing | null;
|
|
50
|
+
/**
|
|
51
|
+
* Get all pricing for a provider
|
|
52
|
+
*
|
|
53
|
+
* @param provider - Provider name
|
|
54
|
+
* @returns Array of pricing configurations
|
|
55
|
+
*/
|
|
56
|
+
export declare function getProviderPricing(provider: string): ProviderPricing[];
|
|
57
|
+
/**
|
|
58
|
+
* Calculate cost savings percentage comparing two models
|
|
59
|
+
*
|
|
60
|
+
* @param baseModel - Base model for comparison (e.g., Claude)
|
|
61
|
+
* @param compareModel - Model to compare against
|
|
62
|
+
* @param tokenCount - Number of tokens to calculate savings for
|
|
63
|
+
* @returns Savings percentage (0-1)
|
|
64
|
+
*/
|
|
65
|
+
export declare function calculateSavingsPercentage(baseModel: {
|
|
66
|
+
provider: string;
|
|
67
|
+
model: string;
|
|
68
|
+
}, compareModel: {
|
|
69
|
+
provider: string;
|
|
70
|
+
model: string;
|
|
71
|
+
}, tokenCount: {
|
|
72
|
+
input: number;
|
|
73
|
+
output: number;
|
|
74
|
+
}): number | null;
|
|
75
|
+
/**
|
|
76
|
+
* Export pricing configuration as JSON for memory storage
|
|
77
|
+
*/
|
|
78
|
+
export declare function exportPricingConfig(): string;
|
|
79
|
+
/**
|
|
80
|
+
* Memory namespace for pricing configuration
|
|
81
|
+
*/
|
|
82
|
+
export declare const PRICING_MEMORY_NAMESPACE = "aqe/phase2/instrumentation/token-metrics";
|
|
83
|
+
/**
|
|
84
|
+
* Memory key for pricing data
|
|
85
|
+
*/
|
|
86
|
+
export declare const PRICING_MEMORY_KEY = "pricing";
|
|
87
|
+
//# sourceMappingURL=pricing-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing-config.d.ts","sourceRoot":"","sources":["../../../../src/telemetry/metrics/collectors/pricing-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,QAAQ,EAAE,eAAe,CAAC;IAC1B,8BAA8B;IAC9B,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,EAAE,aA+H5B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,eAAe,GAAG,IAAI,CAIxB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,GACf,eAAe,EAAE,CAEnB;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAC9C,YAAY,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACjD,UAAU,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5C,MAAM,GAAG,IAAI,CAmBf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,6CAA6C,CAAC;AAEnF;;GAEG;AACH,eAAO,MAAM,kBAAkB,YAAY,CAAC"}
|