@vorionsys/atsf-core 0.4.1 → 0.4.3
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/basis/parser.d.ts +74 -74
- package/dist/basis/parser.js +3 -3
- package/dist/basis/parser.js.map +1 -1
- package/dist/common/config.d.ts +16 -16
- package/dist/enforce/fast-path.d.ts +134 -0
- package/dist/enforce/fast-path.d.ts.map +1 -0
- package/dist/enforce/fast-path.js +257 -0
- package/dist/enforce/fast-path.js.map +1 -0
- package/dist/enforce/pipeline-optimizer.d.ts +111 -0
- package/dist/enforce/pipeline-optimizer.d.ts.map +1 -0
- package/dist/enforce/pipeline-optimizer.js +370 -0
- package/dist/enforce/pipeline-optimizer.js.map +1 -0
- package/dist/enforce/policy-cache.d.ts +92 -0
- package/dist/enforce/policy-cache.d.ts.map +1 -0
- package/dist/enforce/policy-cache.js +186 -0
- package/dist/enforce/policy-cache.js.map +1 -0
- package/dist/enforce/trust-cache.d.ts +118 -0
- package/dist/enforce/trust-cache.d.ts.map +1 -0
- package/dist/enforce/trust-cache.js +218 -0
- package/dist/enforce/trust-cache.js.map +1 -0
- package/dist/paramesphere/gpu-svd.d.ts +102 -0
- package/dist/paramesphere/gpu-svd.d.ts.map +1 -0
- package/dist/paramesphere/gpu-svd.js +668 -0
- package/dist/paramesphere/gpu-svd.js.map +1 -0
- package/dist/paramesphere/index.d.ts +2 -0
- package/dist/paramesphere/index.d.ts.map +1 -1
- package/dist/paramesphere/index.js +1 -0
- package/dist/paramesphere/index.js.map +1 -1
- package/dist/paramesphere/paramesphere-engine.d.ts +40 -3
- package/dist/paramesphere/paramesphere-engine.d.ts.map +1 -1
- package/dist/paramesphere/paramesphere-engine.js +133 -6
- package/dist/paramesphere/paramesphere-engine.js.map +1 -1
- package/dist/paramesphere/scheduled-verifier.d.ts +136 -0
- package/dist/paramesphere/scheduled-verifier.d.ts.map +1 -0
- package/dist/paramesphere/scheduled-verifier.js +338 -0
- package/dist/paramesphere/scheduled-verifier.js.map +1 -0
- package/dist/paramesphere/svd-worker-pool.d.ts +37 -0
- package/dist/paramesphere/svd-worker-pool.d.ts.map +1 -0
- package/dist/paramesphere/svd-worker-pool.js +144 -0
- package/dist/paramesphere/svd-worker-pool.js.map +1 -0
- package/dist/paramesphere/svd-worker.d.ts +2 -0
- package/dist/paramesphere/svd-worker.d.ts.map +1 -0
- package/dist/paramesphere/svd-worker.js +103 -0
- package/dist/paramesphere/svd-worker.js.map +1 -0
- package/dist/paramesphere/types.d.ts +14 -0
- package/dist/paramesphere/types.d.ts.map +1 -1
- package/dist/paramesphere/types.js.map +1 -1
- package/dist/phase6/types.d.ts +257 -257
- package/dist/phase6/types.js +1 -1
- package/dist/phase6/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type { TrustLevel, TrustScore, ID } from '../common/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Cached trust data for a single agent.
|
|
4
|
+
*/
|
|
5
|
+
export interface CachedTrustEntry {
|
|
6
|
+
trustScore: TrustScore;
|
|
7
|
+
trustTier: TrustLevel;
|
|
8
|
+
integrityScore: number;
|
|
9
|
+
observationTier: TrustLevel;
|
|
10
|
+
cachedAt: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Configuration for the trust lookup cache.
|
|
14
|
+
*/
|
|
15
|
+
export interface TrustLookupCacheConfig {
|
|
16
|
+
/** Time-to-live in milliseconds (default: 5000) */
|
|
17
|
+
ttlMs: number;
|
|
18
|
+
/** Maximum number of entries to hold (LRU eviction) */
|
|
19
|
+
maxEntries: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Statistics snapshot for monitoring.
|
|
23
|
+
*/
|
|
24
|
+
export interface TrustCacheStats {
|
|
25
|
+
hits: number;
|
|
26
|
+
misses: number;
|
|
27
|
+
hitRate: number;
|
|
28
|
+
missRate: number;
|
|
29
|
+
avgAgeMs: number;
|
|
30
|
+
invalidations: number;
|
|
31
|
+
size: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Trust signal event shape for invalidation subscription.
|
|
35
|
+
*/
|
|
36
|
+
export interface TrustSignalEvent {
|
|
37
|
+
entityId: ID;
|
|
38
|
+
[key: string]: unknown;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Minimal interface for subscribing to trust signals.
|
|
42
|
+
*/
|
|
43
|
+
export interface TrustSignalBus {
|
|
44
|
+
on(event: string, handler: (signal: TrustSignalEvent) => void): void;
|
|
45
|
+
off(event: string, handler: (signal: TrustSignalEvent) => void): void;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Minimal TrustEngine interface for warm-up lookups.
|
|
49
|
+
*/
|
|
50
|
+
export interface TrustScoreProvider {
|
|
51
|
+
getScore(entityId: ID): Promise<{
|
|
52
|
+
score: TrustScore;
|
|
53
|
+
level: TrustLevel;
|
|
54
|
+
} | null>;
|
|
55
|
+
}
|
|
56
|
+
export declare class TrustLookupCache {
|
|
57
|
+
private readonly config;
|
|
58
|
+
private readonly cache;
|
|
59
|
+
private _hits;
|
|
60
|
+
private _misses;
|
|
61
|
+
private _invalidations;
|
|
62
|
+
private signalBus;
|
|
63
|
+
private boundInvalidateHandler;
|
|
64
|
+
constructor(config?: Partial<TrustLookupCacheConfig>);
|
|
65
|
+
/**
|
|
66
|
+
* Get a cached trust entry for the given agent.
|
|
67
|
+
* Returns `null` on miss or TTL expiry.
|
|
68
|
+
*/
|
|
69
|
+
get(agentId: ID): CachedTrustEntry | null;
|
|
70
|
+
/**
|
|
71
|
+
* Store a trust entry in the cache.
|
|
72
|
+
*/
|
|
73
|
+
set(agentId: ID, entry: Omit<CachedTrustEntry, 'cachedAt'>): void;
|
|
74
|
+
/**
|
|
75
|
+
* Invalidate (evict) a single agent entry.
|
|
76
|
+
* Called on trust signal receipt.
|
|
77
|
+
*/
|
|
78
|
+
invalidate(agentId: ID): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Invalidate all entries.
|
|
81
|
+
*/
|
|
82
|
+
invalidateAll(): void;
|
|
83
|
+
/**
|
|
84
|
+
* Pre-populate the cache for a list of agent IDs.
|
|
85
|
+
* Uses the provided TrustScoreProvider (typically the TrustEngine).
|
|
86
|
+
*/
|
|
87
|
+
warmUp(agentIds: ID[], provider: TrustScoreProvider): Promise<number>;
|
|
88
|
+
/**
|
|
89
|
+
* Subscribe to a trust signal bus for event-driven invalidation.
|
|
90
|
+
* On any trust signal, the cache entry for that agent is evicted.
|
|
91
|
+
*/
|
|
92
|
+
subscribeToSignals(bus: TrustSignalBus): void;
|
|
93
|
+
/**
|
|
94
|
+
* Unsubscribe from the trust signal bus.
|
|
95
|
+
*/
|
|
96
|
+
unsubscribeFromSignals(): void;
|
|
97
|
+
/**
|
|
98
|
+
* Get a snapshot of cache statistics.
|
|
99
|
+
*/
|
|
100
|
+
getStats(): TrustCacheStats;
|
|
101
|
+
/**
|
|
102
|
+
* Reset all statistics counters.
|
|
103
|
+
*/
|
|
104
|
+
resetStats(): void;
|
|
105
|
+
/**
|
|
106
|
+
* Get the current cache size.
|
|
107
|
+
*/
|
|
108
|
+
get size(): number;
|
|
109
|
+
/**
|
|
110
|
+
* Clear all cache entries and statistics.
|
|
111
|
+
*/
|
|
112
|
+
clear(): void;
|
|
113
|
+
/**
|
|
114
|
+
* Dispose: clear cache and unsubscribe from signals.
|
|
115
|
+
*/
|
|
116
|
+
dispose(): void;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=trust-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust-cache.d.ts","sourceRoot":"","sources":["../../src/enforce/trust-cache.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAQrE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,UAAU,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,UAAU,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,EAAE,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI,CAAC;IACrE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI,CAAC;CACvE;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CAClF;AAeD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IAGzD,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,cAAc,CAAK;IAG3B,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,sBAAsB,CAAqD;gBAEvE,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC;IAQpD;;;OAGG;IACH,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,gBAAgB,GAAG,IAAI;IAmBzC;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,IAAI;IAejE;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO;IAQhC;;OAEG;IACH,aAAa,IAAI,IAAI;IAUrB;;;OAGG;IACG,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IA6B3E;;;OAGG;IACH,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAW7C;;OAEG;IACH,sBAAsB,IAAI,IAAI;IAY9B;;OAEG;IACH,QAAQ,IAAI,eAAe;IAwB3B;;OAEG;IACH,UAAU,IAAI,IAAI;IAMlB;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright 2024-2026 Vorion LLC
|
|
3
|
+
/**
|
|
4
|
+
* Trust Lookup Cache
|
|
5
|
+
*
|
|
6
|
+
* Enforcement-level in-memory cache for trust score lookups.
|
|
7
|
+
* Eliminates redundant TrustEngine.getScore() calls during high-throughput
|
|
8
|
+
* enforcement windows. At 10K concurrent agents the trust lookup (~0.5ms)
|
|
9
|
+
* compounds under contention; this cache reduces it to <0.01ms for the
|
|
10
|
+
* common case where trust has not changed since the last lookup.
|
|
11
|
+
*
|
|
12
|
+
* Design choices:
|
|
13
|
+
* - Map-based O(1) lookup keyed by agentId
|
|
14
|
+
* - TTL-based expiry (default 5 seconds) — trust scores are EWA-smoothed
|
|
15
|
+
* and do not change faster than this in practice
|
|
16
|
+
* - Event-driven invalidation via trust signal subscription
|
|
17
|
+
* - Warm-up API for pre-populating top-N active agents
|
|
18
|
+
*
|
|
19
|
+
* @packageDocumentation
|
|
20
|
+
*/
|
|
21
|
+
import { createLogger } from '../common/logger.js';
|
|
22
|
+
const logger = createLogger({ component: 'trust-cache' });
|
|
23
|
+
// =============================================================================
|
|
24
|
+
// DEFAULT CONFIGURATION
|
|
25
|
+
// =============================================================================
|
|
26
|
+
const DEFAULT_CONFIG = {
|
|
27
|
+
ttlMs: 5_000,
|
|
28
|
+
maxEntries: 50_000,
|
|
29
|
+
};
|
|
30
|
+
// =============================================================================
|
|
31
|
+
// TRUST LOOKUP CACHE
|
|
32
|
+
// =============================================================================
|
|
33
|
+
export class TrustLookupCache {
|
|
34
|
+
config;
|
|
35
|
+
cache = new Map();
|
|
36
|
+
// Stats counters
|
|
37
|
+
_hits = 0;
|
|
38
|
+
_misses = 0;
|
|
39
|
+
_invalidations = 0;
|
|
40
|
+
// Signal bus binding (stored for cleanup)
|
|
41
|
+
signalBus = null;
|
|
42
|
+
boundInvalidateHandler = null;
|
|
43
|
+
constructor(config) {
|
|
44
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
45
|
+
}
|
|
46
|
+
// ===========================================================================
|
|
47
|
+
// Core API
|
|
48
|
+
// ===========================================================================
|
|
49
|
+
/**
|
|
50
|
+
* Get a cached trust entry for the given agent.
|
|
51
|
+
* Returns `null` on miss or TTL expiry.
|
|
52
|
+
*/
|
|
53
|
+
get(agentId) {
|
|
54
|
+
const entry = this.cache.get(agentId);
|
|
55
|
+
if (!entry) {
|
|
56
|
+
this._misses++;
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
const age = Date.now() - entry.cachedAt;
|
|
60
|
+
if (age > this.config.ttlMs) {
|
|
61
|
+
// Expired — evict and count as miss
|
|
62
|
+
this.cache.delete(agentId);
|
|
63
|
+
this._misses++;
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
this._hits++;
|
|
67
|
+
return entry;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Store a trust entry in the cache.
|
|
71
|
+
*/
|
|
72
|
+
set(agentId, entry) {
|
|
73
|
+
// Enforce max entries — evict oldest if at capacity
|
|
74
|
+
if (this.cache.size >= this.config.maxEntries && !this.cache.has(agentId)) {
|
|
75
|
+
const oldest = this.cache.keys().next().value;
|
|
76
|
+
if (oldest !== undefined) {
|
|
77
|
+
this.cache.delete(oldest);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
this.cache.set(agentId, {
|
|
81
|
+
...entry,
|
|
82
|
+
cachedAt: Date.now(),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Invalidate (evict) a single agent entry.
|
|
87
|
+
* Called on trust signal receipt.
|
|
88
|
+
*/
|
|
89
|
+
invalidate(agentId) {
|
|
90
|
+
const existed = this.cache.delete(agentId);
|
|
91
|
+
if (existed) {
|
|
92
|
+
this._invalidations++;
|
|
93
|
+
}
|
|
94
|
+
return existed;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Invalidate all entries.
|
|
98
|
+
*/
|
|
99
|
+
invalidateAll() {
|
|
100
|
+
const count = this.cache.size;
|
|
101
|
+
this.cache.clear();
|
|
102
|
+
this._invalidations += count;
|
|
103
|
+
}
|
|
104
|
+
// ===========================================================================
|
|
105
|
+
// Warm-up
|
|
106
|
+
// ===========================================================================
|
|
107
|
+
/**
|
|
108
|
+
* Pre-populate the cache for a list of agent IDs.
|
|
109
|
+
* Uses the provided TrustScoreProvider (typically the TrustEngine).
|
|
110
|
+
*/
|
|
111
|
+
async warmUp(agentIds, provider) {
|
|
112
|
+
let loaded = 0;
|
|
113
|
+
const promises = agentIds.map(async (id) => {
|
|
114
|
+
try {
|
|
115
|
+
const record = await provider.getScore(id);
|
|
116
|
+
if (record) {
|
|
117
|
+
this.set(id, {
|
|
118
|
+
trustScore: record.score,
|
|
119
|
+
trustTier: record.level,
|
|
120
|
+
integrityScore: record.score, // Approximate; real integrity comes from ParameSphere
|
|
121
|
+
observationTier: record.level,
|
|
122
|
+
});
|
|
123
|
+
loaded++;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// Warm-up is best-effort — skip failures
|
|
128
|
+
logger.warn({ agentId: id }, 'Trust cache warm-up failed for agent');
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
await Promise.all(promises);
|
|
132
|
+
logger.info({ requested: agentIds.length, loaded }, 'Trust cache warm-up complete');
|
|
133
|
+
return loaded;
|
|
134
|
+
}
|
|
135
|
+
// ===========================================================================
|
|
136
|
+
// Signal bus integration
|
|
137
|
+
// ===========================================================================
|
|
138
|
+
/**
|
|
139
|
+
* Subscribe to a trust signal bus for event-driven invalidation.
|
|
140
|
+
* On any trust signal, the cache entry for that agent is evicted.
|
|
141
|
+
*/
|
|
142
|
+
subscribeToSignals(bus) {
|
|
143
|
+
if (this.signalBus) {
|
|
144
|
+
this.unsubscribeFromSignals();
|
|
145
|
+
}
|
|
146
|
+
this.signalBus = bus;
|
|
147
|
+
this.boundInvalidateHandler = (signal) => {
|
|
148
|
+
this.invalidate(signal.entityId);
|
|
149
|
+
};
|
|
150
|
+
bus.on('trust-signal', this.boundInvalidateHandler);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Unsubscribe from the trust signal bus.
|
|
154
|
+
*/
|
|
155
|
+
unsubscribeFromSignals() {
|
|
156
|
+
if (this.signalBus && this.boundInvalidateHandler) {
|
|
157
|
+
this.signalBus.off('trust-signal', this.boundInvalidateHandler);
|
|
158
|
+
}
|
|
159
|
+
this.signalBus = null;
|
|
160
|
+
this.boundInvalidateHandler = null;
|
|
161
|
+
}
|
|
162
|
+
// ===========================================================================
|
|
163
|
+
// Stats / monitoring
|
|
164
|
+
// ===========================================================================
|
|
165
|
+
/**
|
|
166
|
+
* Get a snapshot of cache statistics.
|
|
167
|
+
*/
|
|
168
|
+
getStats() {
|
|
169
|
+
const total = this._hits + this._misses;
|
|
170
|
+
const hitRate = total > 0 ? this._hits / total : 0;
|
|
171
|
+
const missRate = total > 0 ? this._misses / total : 0;
|
|
172
|
+
// Compute average age of live entries
|
|
173
|
+
let totalAge = 0;
|
|
174
|
+
const now = Date.now();
|
|
175
|
+
for (const entry of this.cache.values()) {
|
|
176
|
+
totalAge += now - entry.cachedAt;
|
|
177
|
+
}
|
|
178
|
+
const avgAgeMs = this.cache.size > 0 ? totalAge / this.cache.size : 0;
|
|
179
|
+
return {
|
|
180
|
+
hits: this._hits,
|
|
181
|
+
misses: this._misses,
|
|
182
|
+
hitRate,
|
|
183
|
+
missRate,
|
|
184
|
+
avgAgeMs,
|
|
185
|
+
invalidations: this._invalidations,
|
|
186
|
+
size: this.cache.size,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Reset all statistics counters.
|
|
191
|
+
*/
|
|
192
|
+
resetStats() {
|
|
193
|
+
this._hits = 0;
|
|
194
|
+
this._misses = 0;
|
|
195
|
+
this._invalidations = 0;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Get the current cache size.
|
|
199
|
+
*/
|
|
200
|
+
get size() {
|
|
201
|
+
return this.cache.size;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Clear all cache entries and statistics.
|
|
205
|
+
*/
|
|
206
|
+
clear() {
|
|
207
|
+
this.cache.clear();
|
|
208
|
+
this.resetStats();
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Dispose: clear cache and unsubscribe from signals.
|
|
212
|
+
*/
|
|
213
|
+
dispose() {
|
|
214
|
+
this.unsubscribeFromSignals();
|
|
215
|
+
this.clear();
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=trust-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust-cache.js","sourceRoot":"","sources":["../../src/enforce/trust-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider interface for SVD computation.
|
|
3
|
+
*
|
|
4
|
+
* All implementations must produce results within 1e-6 tolerance of
|
|
5
|
+
* the CPU power-iteration baseline for the same input.
|
|
6
|
+
*/
|
|
7
|
+
export interface GpuSvdProvider {
|
|
8
|
+
/** Check whether this provider's backend is available at runtime. */
|
|
9
|
+
available(): Promise<boolean>;
|
|
10
|
+
/**
|
|
11
|
+
* Compute the top-K singular values of a row-major matrix.
|
|
12
|
+
*
|
|
13
|
+
* @param data Row-major flat Float64Array of the matrix.
|
|
14
|
+
* @param rows Number of rows.
|
|
15
|
+
* @param cols Number of columns.
|
|
16
|
+
* @param k Number of singular values to extract.
|
|
17
|
+
* @returns Float64Array of length min(k, min(rows, cols)) with
|
|
18
|
+
* the top singular values in descending order.
|
|
19
|
+
*/
|
|
20
|
+
topKSingularValues(data: Float64Array, rows: number, cols: number, k: number): Promise<Float64Array>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* CPU fallback provider that delegates to the existing power-iteration
|
|
24
|
+
* implementation. This is the baseline — all other providers must match
|
|
25
|
+
* its output within 1e-6 tolerance.
|
|
26
|
+
*/
|
|
27
|
+
export declare class CpuFallbackProvider implements GpuSvdProvider {
|
|
28
|
+
available(): Promise<boolean>;
|
|
29
|
+
topKSingularValues(data: Float64Array, rows: number, cols: number, k: number): Promise<Float64Array>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* WebGPU-based SVD provider.
|
|
33
|
+
*
|
|
34
|
+
* Uses a compute shader for the expensive A^T*A*v products in the power
|
|
35
|
+
* iteration loop. Falls back to CPU if WebGPU is unavailable.
|
|
36
|
+
*
|
|
37
|
+
* Note: This provider is primarily useful in browser or Deno environments
|
|
38
|
+
* that expose the WebGPU API. In Node.js, prefer `OnnxSvdProvider`.
|
|
39
|
+
*/
|
|
40
|
+
export declare class WebGpuSvdProvider implements GpuSvdProvider {
|
|
41
|
+
private device;
|
|
42
|
+
private pipeline;
|
|
43
|
+
private fallback;
|
|
44
|
+
private initPromise;
|
|
45
|
+
/** Power iteration parameters matching the CPU implementation. */
|
|
46
|
+
private static readonly POWER_ITER_MAX;
|
|
47
|
+
private static readonly POWER_ITER_TOL;
|
|
48
|
+
available(): Promise<boolean>;
|
|
49
|
+
topKSingularValues(data: Float64Array, rows: number, cols: number, k: number): Promise<Float64Array>;
|
|
50
|
+
private initGpu;
|
|
51
|
+
private computeOnGpu;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* ONNX Runtime-based SVD provider for Node.js server environments.
|
|
55
|
+
*
|
|
56
|
+
* Uses ONNX Runtime's CUDA execution provider when available, falling
|
|
57
|
+
* back to the CPU execution provider. This is the recommended GPU path
|
|
58
|
+
* for Node.js where WebGPU is not yet available.
|
|
59
|
+
*
|
|
60
|
+
* Implementation strategy: Since ONNX doesn't have a direct SVD op,
|
|
61
|
+
* we implement the same power-iteration algorithm but offload the
|
|
62
|
+
* matrix-vector multiplications (the expensive inner loop) to ONNX
|
|
63
|
+
* Runtime which can run them on GPU via CUDA/cuDNN.
|
|
64
|
+
*/
|
|
65
|
+
export declare class OnnxSvdProvider implements GpuSvdProvider {
|
|
66
|
+
private session;
|
|
67
|
+
private onnxAvailable;
|
|
68
|
+
private executionProvider;
|
|
69
|
+
private fallback;
|
|
70
|
+
private initPromise;
|
|
71
|
+
/** Power iteration parameters matching the CPU implementation. */
|
|
72
|
+
private static readonly POWER_ITER_MAX;
|
|
73
|
+
private static readonly POWER_ITER_TOL;
|
|
74
|
+
available(): Promise<boolean>;
|
|
75
|
+
topKSingularValues(data: Float64Array, rows: number, cols: number, k: number): Promise<Float64Array>;
|
|
76
|
+
/** Returns the active execution provider name ('cuda' or 'cpu'). */
|
|
77
|
+
getExecutionProvider(): string;
|
|
78
|
+
private initOnnx;
|
|
79
|
+
private computeWithOnnx;
|
|
80
|
+
/**
|
|
81
|
+
* GPU-accelerated matrix-vector multiply via ONNX Runtime.
|
|
82
|
+
* Falls back to CPU implementation if ONNX session is unavailable.
|
|
83
|
+
*/
|
|
84
|
+
private onnxMatVecMul;
|
|
85
|
+
/**
|
|
86
|
+
* GPU-accelerated A^T * u via ONNX Runtime.
|
|
87
|
+
*/
|
|
88
|
+
private onnxMatTransVecMul;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Create the best available SVD provider.
|
|
92
|
+
*
|
|
93
|
+
* Auto-detection order:
|
|
94
|
+
* 1. WebGPU (if `preference` is 'gpu' or unset and WebGPU is available)
|
|
95
|
+
* 2. ONNX Runtime with CUDA (if `preference` is 'onnx' or unset and onnxruntime-node is installed)
|
|
96
|
+
* 3. CPU fallback (always available)
|
|
97
|
+
*
|
|
98
|
+
* @param preference - Force a specific provider. Omit to auto-detect.
|
|
99
|
+
* @returns The best available provider.
|
|
100
|
+
*/
|
|
101
|
+
export declare function createSvdProvider(preference?: 'gpu' | 'onnx' | 'cpu'): Promise<GpuSvdProvider>;
|
|
102
|
+
//# sourceMappingURL=gpu-svd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu-svd.d.ts","sourceRoot":"","sources":["../../src/paramesphere/gpu-svd.ts"],"names":[],"mappings":"AA8BA;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9B;;;;;;;;;OASG;IACH,kBAAkB,CAChB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1B;AAMD;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IAClD,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAI7B,kBAAkB,CACtB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,YAAY,CAAC;CAGzB;AAiED;;;;;;;;GAQG;AACH,qBAAa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,WAAW,CAAiC;IAEpD,kEAAkE;IAClE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAO;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAS;IAEzC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAM7B,kBAAkB,CACtB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,YAAY,CAAC;YAkBV,OAAO;YAoCP,YAAY;CAkI3B;AAMD;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,YAAW,cAAc;IACpD,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,iBAAiB,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,WAAW,CAAiC;IAEpD,kEAAkE;IAClE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAO;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAS;IAEzC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAM7B,kBAAkB,CACtB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,YAAY,CAAC;IAcxB,oEAAoE;IACpE,oBAAoB,IAAI,MAAM;YAQhB,QAAQ;YAwCR,eAAe;IAwD7B;;;OAGG;YACW,aAAa;IAkC3B;;OAEG;YACW,kBAAkB;CAmCjC;AAmJD;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAClC,OAAO,CAAC,cAAc,CAAC,CA0BzB"}
|