@vorionsys/atsf-core 0.1.0 → 0.2.1
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 +12 -12
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +463 -35
- package/dist/api/server.js.map +1 -1
- package/dist/arbitration/index.d.ts.map +1 -1
- package/dist/arbitration/index.js +8 -6
- package/dist/arbitration/index.js.map +1 -1
- package/dist/audit/key-manager.d.ts +118 -0
- package/dist/audit/key-manager.d.ts.map +1 -0
- package/dist/audit/key-manager.js +565 -0
- package/dist/audit/key-manager.js.map +1 -0
- package/dist/basis/evaluator.d.ts +31 -0
- package/dist/basis/evaluator.d.ts.map +1 -1
- package/dist/basis/evaluator.js +205 -10
- package/dist/basis/evaluator.js.map +1 -1
- package/dist/basis/parser.d.ts +210 -210
- package/dist/basis/parser.js.map +1 -1
- package/dist/carbon-aware/carbon-metrics.d.ts +151 -0
- package/dist/carbon-aware/carbon-metrics.d.ts.map +1 -0
- package/dist/carbon-aware/carbon-metrics.js +370 -0
- package/dist/carbon-aware/carbon-metrics.js.map +1 -0
- package/dist/carbon-aware/carbon-router.d.ts +101 -0
- package/dist/carbon-aware/carbon-router.d.ts.map +1 -0
- package/dist/carbon-aware/carbon-router.js +400 -0
- package/dist/carbon-aware/carbon-router.js.map +1 -0
- package/dist/chain/index.d.ts +147 -0
- package/dist/chain/index.d.ts.map +1 -0
- package/dist/chain/index.js +219 -0
- package/dist/chain/index.js.map +1 -0
- package/dist/cognigate/index.d.ts +33 -4
- package/dist/cognigate/index.d.ts.map +1 -1
- package/dist/cognigate/index.js +199 -24
- package/dist/cognigate/index.js.map +1 -1
- package/dist/common/adapters.d.ts +172 -0
- package/dist/common/adapters.d.ts.map +1 -0
- package/dist/common/adapters.js +329 -0
- package/dist/common/adapters.js.map +1 -0
- package/dist/common/config.d.ts +168 -163
- package/dist/common/config.d.ts.map +1 -1
- package/dist/common/config.js +2 -0
- package/dist/common/config.js.map +1 -1
- package/dist/common/index.d.ts +1 -0
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +1 -0
- package/dist/common/index.js.map +1 -1
- package/dist/common/types.d.ts +67 -16
- package/dist/common/types.d.ts.map +1 -1
- package/dist/common/types.js +4 -0
- package/dist/common/types.js.map +1 -1
- package/dist/enforce/index.d.ts +226 -16
- package/dist/enforce/index.d.ts.map +1 -1
- package/dist/enforce/index.js +196 -49
- package/dist/enforce/index.js.map +1 -1
- package/dist/governance/fluid-workflow.d.ts +217 -0
- package/dist/governance/fluid-workflow.d.ts.map +1 -0
- package/dist/governance/fluid-workflow.js +491 -0
- package/dist/governance/fluid-workflow.js.map +1 -0
- package/dist/governance/index.d.ts +1 -0
- package/dist/governance/index.d.ts.map +1 -1
- package/dist/governance/index.js +1 -0
- package/dist/governance/index.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/intent/index.d.ts +127 -10
- package/dist/intent/index.d.ts.map +1 -1
- package/dist/intent/index.js +121 -16
- package/dist/intent/index.js.map +1 -1
- package/dist/langchain/executor.d.ts +19 -5
- package/dist/langchain/executor.d.ts.map +1 -1
- package/dist/langchain/executor.js +287 -36
- package/dist/langchain/executor.js.map +1 -1
- package/dist/langchain/index.d.ts +2 -1
- package/dist/langchain/index.d.ts.map +1 -1
- package/dist/langchain/index.js +3 -1
- package/dist/langchain/index.js.map +1 -1
- package/dist/langchain/tools.d.ts.map +1 -1
- package/dist/langchain/tools.js +2 -1
- package/dist/langchain/tools.js.map +1 -1
- package/dist/langchain/types.d.ts +41 -0
- package/dist/langchain/types.d.ts.map +1 -1
- package/dist/layers/index.d.ts +1 -1
- package/dist/layers/index.d.ts.map +1 -1
- package/dist/persistence/file.d.ts +35 -3
- package/dist/persistence/file.d.ts.map +1 -1
- package/dist/persistence/file.js +138 -11
- package/dist/persistence/file.js.map +1 -1
- package/dist/persistence/index.d.ts +11 -1
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +25 -1
- package/dist/persistence/index.js.map +1 -1
- package/dist/persistence/sqlite.d.ts +135 -0
- package/dist/persistence/sqlite.d.ts.map +1 -0
- package/dist/persistence/sqlite.js +372 -0
- package/dist/persistence/sqlite.js.map +1 -0
- package/dist/persistence/supabase.d.ts +93 -0
- package/dist/persistence/supabase.d.ts.map +1 -0
- package/dist/persistence/supabase.js +219 -0
- package/dist/persistence/supabase.js.map +1 -0
- package/dist/persistence/types.d.ts +5 -1
- package/dist/persistence/types.d.ts.map +1 -1
- package/dist/phase6/ceiling.d.ts +177 -0
- package/dist/phase6/ceiling.d.ts.map +1 -0
- package/dist/phase6/ceiling.js +463 -0
- package/dist/phase6/ceiling.js.map +1 -0
- package/dist/phase6/context.d.ts +207 -0
- package/dist/phase6/context.d.ts.map +1 -0
- package/dist/phase6/context.js +603 -0
- package/dist/phase6/context.js.map +1 -0
- package/dist/phase6/index.d.ts +79 -0
- package/dist/phase6/index.d.ts.map +1 -0
- package/dist/phase6/index.js +152 -0
- package/dist/phase6/index.js.map +1 -0
- package/dist/phase6/presets.d.ts +148 -0
- package/dist/phase6/presets.d.ts.map +1 -0
- package/dist/phase6/presets.js +467 -0
- package/dist/phase6/presets.js.map +1 -0
- package/dist/phase6/provenance.d.ts +148 -0
- package/dist/phase6/provenance.d.ts.map +1 -0
- package/dist/phase6/provenance.js +545 -0
- package/dist/phase6/provenance.js.map +1 -0
- package/dist/phase6/role-gates/index.d.ts +7 -0
- package/dist/phase6/role-gates/index.d.ts.map +1 -0
- package/dist/phase6/role-gates/index.js +7 -0
- package/dist/phase6/role-gates/index.js.map +1 -0
- package/dist/phase6/role-gates/kernel.d.ts +84 -0
- package/dist/phase6/role-gates/kernel.d.ts.map +1 -0
- package/dist/phase6/role-gates/kernel.js +258 -0
- package/dist/phase6/role-gates/kernel.js.map +1 -0
- package/dist/phase6/role-gates/policy.d.ts +110 -0
- package/dist/phase6/role-gates/policy.d.ts.map +1 -0
- package/dist/phase6/role-gates/policy.js +157 -0
- package/dist/phase6/role-gates/policy.js.map +1 -0
- package/dist/phase6/role-gates.d.ts +164 -0
- package/dist/phase6/role-gates.d.ts.map +1 -0
- package/dist/phase6/role-gates.js +536 -0
- package/dist/phase6/role-gates.js.map +1 -0
- package/dist/phase6/types.d.ts +1827 -0
- package/dist/phase6/types.d.ts.map +1 -0
- package/dist/phase6/types.js +450 -0
- package/dist/phase6/types.js.map +1 -0
- package/dist/phase6/weight-presets/canonical.d.ts +93 -0
- package/dist/phase6/weight-presets/canonical.d.ts.map +1 -0
- package/dist/phase6/weight-presets/canonical.js +122 -0
- package/dist/phase6/weight-presets/canonical.js.map +1 -0
- package/dist/phase6/weight-presets/deltas.d.ts +144 -0
- package/dist/phase6/weight-presets/deltas.d.ts.map +1 -0
- package/dist/phase6/weight-presets/deltas.js +184 -0
- package/dist/phase6/weight-presets/deltas.js.map +1 -0
- package/dist/phase6/weight-presets/index.d.ts +8 -0
- package/dist/phase6/weight-presets/index.d.ts.map +1 -0
- package/dist/phase6/weight-presets/index.js +8 -0
- package/dist/phase6/weight-presets/index.js.map +1 -0
- package/dist/phase6/weight-presets/merger.d.ts +79 -0
- package/dist/phase6/weight-presets/merger.d.ts.map +1 -0
- package/dist/phase6/weight-presets/merger.js +161 -0
- package/dist/phase6/weight-presets/merger.js.map +1 -0
- package/dist/proof/index.d.ts +50 -1
- package/dist/proof/index.d.ts.map +1 -1
- package/dist/proof/index.js +122 -3
- package/dist/proof/index.js.map +1 -1
- package/dist/proof/merkle.d.ts +195 -0
- package/dist/proof/merkle.d.ts.map +1 -0
- package/dist/proof/merkle.js +412 -0
- package/dist/proof/merkle.js.map +1 -0
- package/dist/proof/zk-proofs.d.ts +218 -0
- package/dist/proof/zk-proofs.d.ts.map +1 -0
- package/dist/proof/zk-proofs.js +531 -0
- package/dist/proof/zk-proofs.js.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/audit.d.ts +98 -0
- package/dist/trust-engine/ceiling-enforcement/audit.d.ts.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/audit.js +160 -0
- package/dist/trust-engine/ceiling-enforcement/audit.js.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/index.d.ts +6 -0
- package/dist/trust-engine/ceiling-enforcement/index.d.ts.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/index.js +6 -0
- package/dist/trust-engine/ceiling-enforcement/index.js.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.d.ts +112 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.d.ts.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.js +158 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.js.map +1 -0
- package/dist/trust-engine/context-policy/enforcement.d.ts +62 -0
- package/dist/trust-engine/context-policy/enforcement.d.ts.map +1 -0
- package/dist/trust-engine/context-policy/enforcement.js +104 -0
- package/dist/trust-engine/context-policy/enforcement.js.map +1 -0
- package/dist/trust-engine/context-policy/factory.d.ts +75 -0
- package/dist/trust-engine/context-policy/factory.d.ts.map +1 -0
- package/dist/trust-engine/context-policy/factory.js +130 -0
- package/dist/trust-engine/context-policy/factory.js.map +1 -0
- package/dist/trust-engine/context-policy/index.d.ts +6 -0
- package/dist/trust-engine/context-policy/index.d.ts.map +1 -0
- package/dist/trust-engine/context-policy/index.js +6 -0
- package/dist/trust-engine/context-policy/index.js.map +1 -0
- package/dist/trust-engine/creation-modifiers/index.d.ts +5 -0
- package/dist/trust-engine/creation-modifiers/index.d.ts.map +1 -0
- package/dist/trust-engine/creation-modifiers/index.js +5 -0
- package/dist/trust-engine/creation-modifiers/index.js.map +1 -0
- package/dist/trust-engine/creation-modifiers/types.d.ts +112 -0
- package/dist/trust-engine/creation-modifiers/types.d.ts.map +1 -0
- package/dist/trust-engine/creation-modifiers/types.js +166 -0
- package/dist/trust-engine/creation-modifiers/types.js.map +1 -0
- package/dist/trust-engine/decay-profiles.d.ts +159 -0
- package/dist/trust-engine/decay-profiles.d.ts.map +1 -0
- package/dist/trust-engine/decay-profiles.js +210 -0
- package/dist/trust-engine/decay-profiles.js.map +1 -0
- package/dist/trust-engine/index.d.ts +144 -5
- package/dist/trust-engine/index.d.ts.map +1 -1
- package/dist/trust-engine/index.js +320 -15
- package/dist/trust-engine/index.js.map +1 -1
- package/dist/trust-engine/phase6-types.d.ts +123 -0
- package/dist/trust-engine/phase6-types.d.ts.map +1 -0
- package/dist/trust-engine/phase6-types.js +88 -0
- package/dist/trust-engine/phase6-types.js.map +1 -0
- package/package.json +26 -10
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Carbon Metrics
|
|
3
|
+
*
|
|
4
|
+
* Tracks and reports carbon-related metrics including estimated CO2 per request,
|
|
5
|
+
* carbon savings from routing decisions, and regional intensity history.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from 'events';
|
|
10
|
+
import type { CloudRegion, CarbonMetricsSnapshot, IntensityHistoryEntry, RoutingDecision, IntensityFetchedEvent, FallbackUsedEvent } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Carbon Metrics Collector
|
|
13
|
+
*
|
|
14
|
+
* Aggregates and reports carbon-related metrics for the AI Gateway.
|
|
15
|
+
*/
|
|
16
|
+
export declare class CarbonMetrics extends EventEmitter {
|
|
17
|
+
private _totalRequests;
|
|
18
|
+
private _totalEstimatedCO2Grams;
|
|
19
|
+
private _totalSavingsGrams;
|
|
20
|
+
private _totalIntensitySum;
|
|
21
|
+
private _cacheHits;
|
|
22
|
+
private _cacheMisses;
|
|
23
|
+
private _fallbackCount;
|
|
24
|
+
private _totalFetches;
|
|
25
|
+
private _requestsByRegion;
|
|
26
|
+
private _requestsByProvider;
|
|
27
|
+
private _co2ByRegion;
|
|
28
|
+
private _intensityHistory;
|
|
29
|
+
private _historySize;
|
|
30
|
+
private _baselineIntensity;
|
|
31
|
+
private _periodStart;
|
|
32
|
+
constructor(config?: CarbonMetricsConfig);
|
|
33
|
+
/**
|
|
34
|
+
* Get total requests routed
|
|
35
|
+
*/
|
|
36
|
+
get totalRequests(): number;
|
|
37
|
+
/**
|
|
38
|
+
* Get total estimated CO2 (grams)
|
|
39
|
+
*/
|
|
40
|
+
get totalEstimatedCO2Grams(): number;
|
|
41
|
+
/**
|
|
42
|
+
* Get total CO2 savings (grams)
|
|
43
|
+
*/
|
|
44
|
+
get totalSavingsGrams(): number;
|
|
45
|
+
/**
|
|
46
|
+
* Get average carbon intensity
|
|
47
|
+
*/
|
|
48
|
+
get averageIntensity(): number;
|
|
49
|
+
/**
|
|
50
|
+
* Get green routing percentage
|
|
51
|
+
*/
|
|
52
|
+
get greenRoutingPercentage(): number;
|
|
53
|
+
/**
|
|
54
|
+
* Get cache hit rate
|
|
55
|
+
*/
|
|
56
|
+
get cacheHitRate(): number;
|
|
57
|
+
/**
|
|
58
|
+
* Get fallback rate
|
|
59
|
+
*/
|
|
60
|
+
get fallbackRate(): number;
|
|
61
|
+
/**
|
|
62
|
+
* Record a routing decision
|
|
63
|
+
*/
|
|
64
|
+
recordRouting(decision: RoutingDecision, estimatedTokens: number): void;
|
|
65
|
+
/**
|
|
66
|
+
* Record intensity fetch result
|
|
67
|
+
*/
|
|
68
|
+
recordIntensityFetch(event: IntensityFetchedEvent): void;
|
|
69
|
+
/**
|
|
70
|
+
* Record fallback usage
|
|
71
|
+
*/
|
|
72
|
+
recordFallback(event: FallbackUsedEvent): void;
|
|
73
|
+
/**
|
|
74
|
+
* Get a snapshot of all metrics
|
|
75
|
+
*/
|
|
76
|
+
getSnapshot(): CarbonMetricsSnapshot;
|
|
77
|
+
/**
|
|
78
|
+
* Get intensity history for a region
|
|
79
|
+
*/
|
|
80
|
+
getIntensityHistory(region?: CloudRegion): IntensityHistoryEntry[];
|
|
81
|
+
/**
|
|
82
|
+
* Get average intensity for a region over the history period
|
|
83
|
+
*/
|
|
84
|
+
getAverageRegionIntensity(region: CloudRegion): number;
|
|
85
|
+
/**
|
|
86
|
+
* Get regions sorted by average intensity (greenest first)
|
|
87
|
+
*/
|
|
88
|
+
getRegionsByIntensity(): Array<{
|
|
89
|
+
region: CloudRegion;
|
|
90
|
+
averageIntensity: number;
|
|
91
|
+
}>;
|
|
92
|
+
/**
|
|
93
|
+
* Get CO2 savings breakdown by region
|
|
94
|
+
*/
|
|
95
|
+
getSavingsByRegion(): Map<CloudRegion, number>;
|
|
96
|
+
/**
|
|
97
|
+
* Get sustainability report
|
|
98
|
+
*/
|
|
99
|
+
getSustainabilityReport(): SustainabilityReport;
|
|
100
|
+
/**
|
|
101
|
+
* Reset all metrics
|
|
102
|
+
*/
|
|
103
|
+
reset(): void;
|
|
104
|
+
/**
|
|
105
|
+
* Calculate CO2 for a request
|
|
106
|
+
*/
|
|
107
|
+
private calculateCO2;
|
|
108
|
+
/**
|
|
109
|
+
* Add entry to intensity history
|
|
110
|
+
*/
|
|
111
|
+
private addToHistory;
|
|
112
|
+
/**
|
|
113
|
+
* Generate sustainability recommendations
|
|
114
|
+
*/
|
|
115
|
+
private generateRecommendations;
|
|
116
|
+
/**
|
|
117
|
+
* Emit savings calculated event
|
|
118
|
+
*/
|
|
119
|
+
private emitSavingsEvent;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Configuration for carbon metrics
|
|
123
|
+
*/
|
|
124
|
+
export interface CarbonMetricsConfig {
|
|
125
|
+
/** Maximum number of history entries to retain */
|
|
126
|
+
historySize?: number;
|
|
127
|
+
/** Baseline carbon intensity for savings calculation (gCO2eq/kWh) */
|
|
128
|
+
baselineIntensity?: number;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Sustainability report
|
|
132
|
+
*/
|
|
133
|
+
export interface SustainabilityReport extends CarbonMetricsSnapshot {
|
|
134
|
+
/** CO2 savings by region */
|
|
135
|
+
savingsByRegion: Map<CloudRegion, number>;
|
|
136
|
+
/** Equivalent number of trees (annual CO2 absorption) */
|
|
137
|
+
treesEquivalent: number;
|
|
138
|
+
/** Equivalent miles driven in an average car */
|
|
139
|
+
milesDrivenEquivalent: number;
|
|
140
|
+
/** Greenest region used */
|
|
141
|
+
greenestRegion?: CloudRegion;
|
|
142
|
+
/** Highest-carbon region used */
|
|
143
|
+
dirtiestRegion?: CloudRegion;
|
|
144
|
+
/** Recommendations for improving sustainability */
|
|
145
|
+
recommendations: string[];
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Create a carbon metrics collector
|
|
149
|
+
*/
|
|
150
|
+
export declare function createCarbonMetrics(config?: CarbonMetricsConfig): CarbonMetrics;
|
|
151
|
+
//# sourceMappingURL=carbon-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carbon-metrics.d.ts","sourceRoot":"","sources":["../../src/carbon-aware/carbon-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Carbon Metrics
|
|
3
|
+
*
|
|
4
|
+
* Tracks and reports carbon-related metrics including estimated CO2 per request,
|
|
5
|
+
* carbon savings from routing decisions, and regional intensity history.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from 'events';
|
|
10
|
+
import { createLogger } from '../common/logger.js';
|
|
11
|
+
import { ENERGY_PER_1000_TOKENS_KWH } from './types.js';
|
|
12
|
+
const logger = createLogger({ component: 'carbon-metrics' });
|
|
13
|
+
/**
|
|
14
|
+
* Default history retention (24 hours worth at 5-minute intervals)
|
|
15
|
+
*/
|
|
16
|
+
const DEFAULT_HISTORY_SIZE = 288;
|
|
17
|
+
/**
|
|
18
|
+
* Default baseline carbon intensity for savings calculation (gCO2eq/kWh)
|
|
19
|
+
* Based on global average grid intensity
|
|
20
|
+
*/
|
|
21
|
+
const DEFAULT_BASELINE_INTENSITY = 450;
|
|
22
|
+
/**
|
|
23
|
+
* Carbon Metrics Collector
|
|
24
|
+
*
|
|
25
|
+
* Aggregates and reports carbon-related metrics for the AI Gateway.
|
|
26
|
+
*/
|
|
27
|
+
export class CarbonMetrics extends EventEmitter {
|
|
28
|
+
_totalRequests = 0;
|
|
29
|
+
_totalEstimatedCO2Grams = 0;
|
|
30
|
+
_totalSavingsGrams = 0;
|
|
31
|
+
_totalIntensitySum = 0;
|
|
32
|
+
_cacheHits = 0;
|
|
33
|
+
_cacheMisses = 0;
|
|
34
|
+
_fallbackCount = 0;
|
|
35
|
+
_totalFetches = 0;
|
|
36
|
+
_requestsByRegion = new Map();
|
|
37
|
+
_requestsByProvider = new Map();
|
|
38
|
+
_co2ByRegion = new Map();
|
|
39
|
+
_intensityHistory = [];
|
|
40
|
+
_historySize;
|
|
41
|
+
_baselineIntensity;
|
|
42
|
+
_periodStart;
|
|
43
|
+
constructor(config = {}) {
|
|
44
|
+
super();
|
|
45
|
+
this._historySize = config.historySize ?? DEFAULT_HISTORY_SIZE;
|
|
46
|
+
this._baselineIntensity = config.baselineIntensity ?? DEFAULT_BASELINE_INTENSITY;
|
|
47
|
+
this._periodStart = new Date().toISOString();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get total requests routed
|
|
51
|
+
*/
|
|
52
|
+
get totalRequests() {
|
|
53
|
+
return this._totalRequests;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get total estimated CO2 (grams)
|
|
57
|
+
*/
|
|
58
|
+
get totalEstimatedCO2Grams() {
|
|
59
|
+
return this._totalEstimatedCO2Grams;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get total CO2 savings (grams)
|
|
63
|
+
*/
|
|
64
|
+
get totalSavingsGrams() {
|
|
65
|
+
return this._totalSavingsGrams;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get average carbon intensity
|
|
69
|
+
*/
|
|
70
|
+
get averageIntensity() {
|
|
71
|
+
return this._totalRequests > 0 ? this._totalIntensitySum / this._totalRequests : 0;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get green routing percentage
|
|
75
|
+
*/
|
|
76
|
+
get greenRoutingPercentage() {
|
|
77
|
+
if (this._totalRequests === 0)
|
|
78
|
+
return 0;
|
|
79
|
+
let greenCount = 0;
|
|
80
|
+
Array.from(this._requestsByRegion.entries()).forEach(([region, count]) => {
|
|
81
|
+
// Consider regions with intensity <= 150 as "green"
|
|
82
|
+
const avgIntensity = this.getAverageRegionIntensity(region);
|
|
83
|
+
if (avgIntensity <= 150) {
|
|
84
|
+
greenCount += count;
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
return (greenCount / this._totalRequests) * 100;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get cache hit rate
|
|
91
|
+
*/
|
|
92
|
+
get cacheHitRate() {
|
|
93
|
+
const total = this._cacheHits + this._cacheMisses;
|
|
94
|
+
return total > 0 ? this._cacheHits / total : 0;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get fallback rate
|
|
98
|
+
*/
|
|
99
|
+
get fallbackRate() {
|
|
100
|
+
return this._totalFetches > 0 ? this._fallbackCount / this._totalFetches : 0;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Record a routing decision
|
|
104
|
+
*/
|
|
105
|
+
recordRouting(decision, estimatedTokens) {
|
|
106
|
+
this._totalRequests++;
|
|
107
|
+
// Calculate CO2
|
|
108
|
+
const co2Grams = this.calculateCO2(decision.carbonIntensity.intensity, estimatedTokens);
|
|
109
|
+
this._totalEstimatedCO2Grams += co2Grams;
|
|
110
|
+
this._totalIntensitySum += decision.carbonIntensity.intensity;
|
|
111
|
+
// Calculate savings vs baseline
|
|
112
|
+
const baselineCO2 = this.calculateCO2(this._baselineIntensity, estimatedTokens);
|
|
113
|
+
const savings = Math.max(0, baselineCO2 - co2Grams);
|
|
114
|
+
this._totalSavingsGrams += savings;
|
|
115
|
+
// Update region counts
|
|
116
|
+
const regionCount = this._requestsByRegion.get(decision.region) ?? 0;
|
|
117
|
+
this._requestsByRegion.set(decision.region, regionCount + 1);
|
|
118
|
+
// Update provider counts
|
|
119
|
+
const providerCount = this._requestsByProvider.get(decision.provider) ?? 0;
|
|
120
|
+
this._requestsByProvider.set(decision.provider, providerCount + 1);
|
|
121
|
+
// Update CO2 by region
|
|
122
|
+
const regionCO2 = this._co2ByRegion.get(decision.region) ?? 0;
|
|
123
|
+
this._co2ByRegion.set(decision.region, regionCO2 + co2Grams);
|
|
124
|
+
// Track intensity history for green routing percentage calculation
|
|
125
|
+
this.addToHistory({
|
|
126
|
+
region: decision.region,
|
|
127
|
+
intensity: decision.carbonIntensity.intensity,
|
|
128
|
+
timestamp: decision.decidedAt,
|
|
129
|
+
source: 'routing_decision',
|
|
130
|
+
});
|
|
131
|
+
// Emit savings event
|
|
132
|
+
this.emitSavingsEvent(decision.id, co2Grams, baselineCO2, savings);
|
|
133
|
+
logger.debug({
|
|
134
|
+
requestId: decision.id,
|
|
135
|
+
region: decision.region,
|
|
136
|
+
co2Grams,
|
|
137
|
+
savingsGrams: savings,
|
|
138
|
+
totalRequests: this._totalRequests,
|
|
139
|
+
}, 'Routing recorded');
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Record intensity fetch result
|
|
143
|
+
*/
|
|
144
|
+
recordIntensityFetch(event) {
|
|
145
|
+
this._totalFetches++;
|
|
146
|
+
if (event.cacheHit) {
|
|
147
|
+
this._cacheHits++;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
this._cacheMisses++;
|
|
151
|
+
}
|
|
152
|
+
// Add to history
|
|
153
|
+
this.addToHistory({
|
|
154
|
+
region: event.region,
|
|
155
|
+
intensity: event.intensity,
|
|
156
|
+
timestamp: event.timestamp,
|
|
157
|
+
source: event.source,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Record fallback usage
|
|
162
|
+
*/
|
|
163
|
+
recordFallback(event) {
|
|
164
|
+
this._fallbackCount++;
|
|
165
|
+
logger.debug({
|
|
166
|
+
region: event.region,
|
|
167
|
+
primarySource: event.primarySource,
|
|
168
|
+
fallbackSource: event.fallbackSource,
|
|
169
|
+
reason: event.reason,
|
|
170
|
+
}, 'Fallback recorded');
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get a snapshot of all metrics
|
|
174
|
+
*/
|
|
175
|
+
getSnapshot() {
|
|
176
|
+
return {
|
|
177
|
+
totalRequests: this._totalRequests,
|
|
178
|
+
totalEstimatedCO2Grams: this._totalEstimatedCO2Grams,
|
|
179
|
+
totalSavingsGrams: this._totalSavingsGrams,
|
|
180
|
+
averageIntensity: this.averageIntensity,
|
|
181
|
+
requestsByRegion: new Map(this._requestsByRegion),
|
|
182
|
+
requestsByProvider: new Map(this._requestsByProvider),
|
|
183
|
+
co2ByRegion: new Map(this._co2ByRegion),
|
|
184
|
+
greenRoutingPercentage: this.greenRoutingPercentage,
|
|
185
|
+
cacheHitRate: this.cacheHitRate,
|
|
186
|
+
fallbackRate: this.fallbackRate,
|
|
187
|
+
periodStart: this._periodStart,
|
|
188
|
+
periodEnd: new Date().toISOString(),
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get intensity history for a region
|
|
193
|
+
*/
|
|
194
|
+
getIntensityHistory(region) {
|
|
195
|
+
if (region) {
|
|
196
|
+
return this._intensityHistory.filter(e => e.region === region);
|
|
197
|
+
}
|
|
198
|
+
return [...this._intensityHistory];
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get average intensity for a region over the history period
|
|
202
|
+
*/
|
|
203
|
+
getAverageRegionIntensity(region) {
|
|
204
|
+
const regionHistory = this.getIntensityHistory(region);
|
|
205
|
+
if (regionHistory.length === 0)
|
|
206
|
+
return this._baselineIntensity;
|
|
207
|
+
const sum = regionHistory.reduce((acc, e) => acc + e.intensity, 0);
|
|
208
|
+
return sum / regionHistory.length;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Get regions sorted by average intensity (greenest first)
|
|
212
|
+
*/
|
|
213
|
+
getRegionsByIntensity() {
|
|
214
|
+
const regions = new Set(this._intensityHistory.map(e => e.region));
|
|
215
|
+
const result = [];
|
|
216
|
+
Array.from(regions).forEach((region) => {
|
|
217
|
+
result.push({
|
|
218
|
+
region,
|
|
219
|
+
averageIntensity: this.getAverageRegionIntensity(region),
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
return result.sort((a, b) => a.averageIntensity - b.averageIntensity);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Get CO2 savings breakdown by region
|
|
226
|
+
*/
|
|
227
|
+
getSavingsByRegion() {
|
|
228
|
+
const savings = new Map();
|
|
229
|
+
Array.from(this._co2ByRegion.entries()).forEach(([region, totalCO2]) => {
|
|
230
|
+
const requests = this._requestsByRegion.get(region) ?? 0;
|
|
231
|
+
if (requests > 0) {
|
|
232
|
+
// Estimate what the CO2 would have been at baseline
|
|
233
|
+
const avgCO2PerRequest = totalCO2 / requests;
|
|
234
|
+
const baselineCO2PerRequest = avgCO2PerRequest * (this._baselineIntensity / this.getAverageRegionIntensity(region));
|
|
235
|
+
const regionSavings = (baselineCO2PerRequest - avgCO2PerRequest) * requests;
|
|
236
|
+
savings.set(region, Math.max(0, regionSavings));
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
return savings;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get sustainability report
|
|
243
|
+
*/
|
|
244
|
+
getSustainabilityReport() {
|
|
245
|
+
const snapshot = this.getSnapshot();
|
|
246
|
+
const savingsByRegion = this.getSavingsByRegion();
|
|
247
|
+
const regionsByIntensity = this.getRegionsByIntensity();
|
|
248
|
+
// Calculate equivalent metrics
|
|
249
|
+
const treesEquivalent = this._totalSavingsGrams / 21000; // ~21kg CO2 per tree per year
|
|
250
|
+
const milesDrivenEquivalent = this._totalSavingsGrams / 404; // ~404g CO2 per mile
|
|
251
|
+
// Find greenest and dirtiest routes used
|
|
252
|
+
let greenestRegion;
|
|
253
|
+
let dirtiestRegion;
|
|
254
|
+
let minIntensity = Infinity;
|
|
255
|
+
let maxIntensity = 0;
|
|
256
|
+
for (const { region, averageIntensity } of regionsByIntensity) {
|
|
257
|
+
if (this._requestsByRegion.get(region)) {
|
|
258
|
+
if (averageIntensity < minIntensity) {
|
|
259
|
+
minIntensity = averageIntensity;
|
|
260
|
+
greenestRegion = region;
|
|
261
|
+
}
|
|
262
|
+
if (averageIntensity > maxIntensity) {
|
|
263
|
+
maxIntensity = averageIntensity;
|
|
264
|
+
dirtiestRegion = region;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
...snapshot,
|
|
270
|
+
savingsByRegion,
|
|
271
|
+
treesEquivalent,
|
|
272
|
+
milesDrivenEquivalent,
|
|
273
|
+
greenestRegion,
|
|
274
|
+
dirtiestRegion,
|
|
275
|
+
recommendations: this.generateRecommendations(snapshot, regionsByIntensity),
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Reset all metrics
|
|
280
|
+
*/
|
|
281
|
+
reset() {
|
|
282
|
+
this._totalRequests = 0;
|
|
283
|
+
this._totalEstimatedCO2Grams = 0;
|
|
284
|
+
this._totalSavingsGrams = 0;
|
|
285
|
+
this._totalIntensitySum = 0;
|
|
286
|
+
this._cacheHits = 0;
|
|
287
|
+
this._cacheMisses = 0;
|
|
288
|
+
this._fallbackCount = 0;
|
|
289
|
+
this._totalFetches = 0;
|
|
290
|
+
this._requestsByRegion.clear();
|
|
291
|
+
this._requestsByProvider.clear();
|
|
292
|
+
this._co2ByRegion.clear();
|
|
293
|
+
this._intensityHistory = [];
|
|
294
|
+
this._periodStart = new Date().toISOString();
|
|
295
|
+
logger.info('Carbon metrics reset');
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Calculate CO2 for a request
|
|
299
|
+
*/
|
|
300
|
+
calculateCO2(intensityGCO2, tokens) {
|
|
301
|
+
const energyKWh = (tokens / 1000) * ENERGY_PER_1000_TOKENS_KWH;
|
|
302
|
+
return energyKWh * intensityGCO2;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Add entry to intensity history
|
|
306
|
+
*/
|
|
307
|
+
addToHistory(entry) {
|
|
308
|
+
this._intensityHistory.push(entry);
|
|
309
|
+
// Trim if over size limit
|
|
310
|
+
if (this._intensityHistory.length > this._historySize) {
|
|
311
|
+
this._intensityHistory = this._intensityHistory.slice(-this._historySize);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Generate sustainability recommendations
|
|
316
|
+
*/
|
|
317
|
+
generateRecommendations(snapshot, regionsByIntensity) {
|
|
318
|
+
const recommendations = [];
|
|
319
|
+
// Check green routing percentage
|
|
320
|
+
if (snapshot.greenRoutingPercentage < 50) {
|
|
321
|
+
recommendations.push('Consider relaxing latency constraints to allow more routing to low-carbon regions.');
|
|
322
|
+
}
|
|
323
|
+
// Check if high-carbon regions are being used frequently
|
|
324
|
+
const highCarbonRegions = regionsByIntensity.filter(r => r.averageIntensity > 300);
|
|
325
|
+
for (const { region } of highCarbonRegions) {
|
|
326
|
+
const requests = snapshot.requestsByRegion.get(region) ?? 0;
|
|
327
|
+
if (requests > snapshot.totalRequests * 0.1) {
|
|
328
|
+
recommendations.push(`Region ${region} has high carbon intensity. Consider alternative regions if latency permits.`);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
// Check cache hit rate
|
|
332
|
+
if (snapshot.cacheHitRate < 0.5) {
|
|
333
|
+
recommendations.push('Low cache hit rate detected. Consider increasing cache TTL for carbon intensity data.');
|
|
334
|
+
}
|
|
335
|
+
// Check fallback rate
|
|
336
|
+
if (snapshot.fallbackRate > 0.1) {
|
|
337
|
+
recommendations.push('High fallback rate detected. Check primary carbon data source connectivity.');
|
|
338
|
+
}
|
|
339
|
+
// Recommend greenest regions
|
|
340
|
+
const greenestRegions = regionsByIntensity.slice(0, 3);
|
|
341
|
+
if (greenestRegions.length > 0) {
|
|
342
|
+
const regionNames = greenestRegions.map(r => r.region).join(', ');
|
|
343
|
+
recommendations.push(`Greenest available regions: ${regionNames}. Consider prioritizing these when possible.`);
|
|
344
|
+
}
|
|
345
|
+
return recommendations;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Emit savings calculated event
|
|
349
|
+
*/
|
|
350
|
+
emitSavingsEvent(requestId, actualCO2Grams, baselineCO2Grams, savingsGrams) {
|
|
351
|
+
const event = {
|
|
352
|
+
type: 'carbon:savings_calculated',
|
|
353
|
+
timestamp: new Date().toISOString(),
|
|
354
|
+
requestId,
|
|
355
|
+
actualCO2Grams,
|
|
356
|
+
baselineCO2Grams,
|
|
357
|
+
savingsGrams,
|
|
358
|
+
savingsPercentage: baselineCO2Grams > 0 ? (savingsGrams / baselineCO2Grams) * 100 : 0,
|
|
359
|
+
};
|
|
360
|
+
this.emit(event.type, event);
|
|
361
|
+
this.emit('carbon:*', event);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Create a carbon metrics collector
|
|
366
|
+
*/
|
|
367
|
+
export function createCarbonMetrics(config) {
|
|
368
|
+
return new CarbonMetrics(config);
|
|
369
|
+
}
|
|
370
|
+
//# sourceMappingURL=carbon-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carbon-metrics.js","sourceRoot":"","sources":["../../src/carbon-aware/carbon-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Carbon-Aware Router
|
|
3
|
+
*
|
|
4
|
+
* Routes AI requests to lower-carbon regions when possible, considering
|
|
5
|
+
* provider availability, latency requirements, and cost constraints.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from 'events';
|
|
10
|
+
import { CarbonIntensityClient } from './carbon-intensity-client.js';
|
|
11
|
+
import { CarbonMetrics } from './carbon-metrics.js';
|
|
12
|
+
import type { CarbonRouterConfig, RoutingRequest, RoutingDecision, CloudRegion, AIProvider, CarbonIntensity } from './types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Carbon-Aware Router
|
|
15
|
+
*
|
|
16
|
+
* Intelligently routes AI requests to minimize carbon footprint while
|
|
17
|
+
* respecting performance and cost constraints.
|
|
18
|
+
*/
|
|
19
|
+
export declare class CarbonRouter extends EventEmitter {
|
|
20
|
+
private _client;
|
|
21
|
+
private _metrics;
|
|
22
|
+
private _defaultConstraints;
|
|
23
|
+
private _providerAvailability;
|
|
24
|
+
private _regionLatencies;
|
|
25
|
+
private _costMultipliers;
|
|
26
|
+
private _enableMetrics;
|
|
27
|
+
constructor(config?: CarbonRouterConfig);
|
|
28
|
+
/**
|
|
29
|
+
* Get the carbon intensity client
|
|
30
|
+
*/
|
|
31
|
+
get client(): CarbonIntensityClient;
|
|
32
|
+
/**
|
|
33
|
+
* Get the metrics collector
|
|
34
|
+
*/
|
|
35
|
+
get metrics(): CarbonMetrics;
|
|
36
|
+
/**
|
|
37
|
+
* Route a request to the optimal region based on carbon intensity
|
|
38
|
+
*/
|
|
39
|
+
route(request: RoutingRequest): Promise<RoutingDecision>;
|
|
40
|
+
/**
|
|
41
|
+
* Get the best provider for a specific region
|
|
42
|
+
*/
|
|
43
|
+
getProviderForRegion(region: CloudRegion, preferredProviders?: AIProvider[]): Promise<AIProvider | undefined>;
|
|
44
|
+
/**
|
|
45
|
+
* Get carbon intensity for all regions
|
|
46
|
+
*/
|
|
47
|
+
getRegionIntensities(): Promise<Map<CloudRegion, CarbonIntensity>>;
|
|
48
|
+
/**
|
|
49
|
+
* Get the lowest carbon regions
|
|
50
|
+
*/
|
|
51
|
+
getGreenRegions(count?: number): Promise<CarbonIntensity[]>;
|
|
52
|
+
/**
|
|
53
|
+
* Check if a region meets carbon constraints
|
|
54
|
+
*/
|
|
55
|
+
isGreenRegion(region: CloudRegion, maxIntensity?: number): Promise<boolean>;
|
|
56
|
+
/**
|
|
57
|
+
* Update provider availability
|
|
58
|
+
*/
|
|
59
|
+
updateProviderAvailability(region: CloudRegion, provider: AIProvider, available: boolean): void;
|
|
60
|
+
/**
|
|
61
|
+
* Calculate estimated CO2 for a request
|
|
62
|
+
*/
|
|
63
|
+
calculateCO2(intensityGCO2: number, tokens: number): number;
|
|
64
|
+
/**
|
|
65
|
+
* Close the router and release resources
|
|
66
|
+
*/
|
|
67
|
+
close(): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Route to a required region
|
|
70
|
+
*/
|
|
71
|
+
private routeToRequired;
|
|
72
|
+
/**
|
|
73
|
+
* Route using fallback when no eligible routes found
|
|
74
|
+
*/
|
|
75
|
+
private routeFallback;
|
|
76
|
+
/**
|
|
77
|
+
* Get eligible routes based on constraints
|
|
78
|
+
*/
|
|
79
|
+
private getEligibleRoutes;
|
|
80
|
+
/**
|
|
81
|
+
* Determine routing reason
|
|
82
|
+
*/
|
|
83
|
+
private determineReason;
|
|
84
|
+
/**
|
|
85
|
+
* Convert eligible route to alternative route format
|
|
86
|
+
*/
|
|
87
|
+
private toAlternativeRoute;
|
|
88
|
+
/**
|
|
89
|
+
* Create default provider availability map
|
|
90
|
+
*/
|
|
91
|
+
private createDefaultAvailability;
|
|
92
|
+
/**
|
|
93
|
+
* Emit request routed event
|
|
94
|
+
*/
|
|
95
|
+
private emitRoutedEvent;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Create a carbon-aware router
|
|
99
|
+
*/
|
|
100
|
+
export declare function createCarbonRouter(config?: CarbonRouterConfig): CarbonRouter;
|
|
101
|
+
//# sourceMappingURL=carbon-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carbon-router.d.ts","sourceRoot":"","sources":["../../src/carbon-aware/carbon-router.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAA+B,MAAM,8BAA8B,CAAC;AAClG,OAAO,EAAE,aAAa,EAAuB,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,eAAe,EAEf,WAAW,EACX,UAAU,EACV,eAAe,EAKhB,MAAM,YAAY,CAAC;AAmBpB;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,qBAAqB,CAA2C;IACxE,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,cAAc,CAAU;gBAEpB,MAAM,GAAE,kBAAuB;IAsB3C;;OAEG;IACH,IAAI,MAAM,IAAI,qBAAqB,CAElC;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,aAAa,CAE3B;IAED;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAsE9D;;OAEG;IACG,oBAAoB,CACxB,MAAM,EAAE,WAAW,EACnB,kBAAkB,CAAC,EAAE,UAAU,EAAE,GAChC,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IA0BlC;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAIxE;;OAEG;IACG,eAAe,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAIpE;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMjF;;OAEG;IACH,0BAA0B,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAW/F;;OAEG;IACH,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAO3D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;YACW,eAAe;IAiC7B;;OAEG;YACW,aAAa;IAoC3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsEzB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;OAEG;IACH,OAAO,CAAC,eAAe;CAexB;AAcD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAE5E"}
|