@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.
Files changed (51) hide show
  1. package/dist/basis/parser.d.ts +74 -74
  2. package/dist/basis/parser.js +3 -3
  3. package/dist/basis/parser.js.map +1 -1
  4. package/dist/common/config.d.ts +16 -16
  5. package/dist/enforce/fast-path.d.ts +134 -0
  6. package/dist/enforce/fast-path.d.ts.map +1 -0
  7. package/dist/enforce/fast-path.js +257 -0
  8. package/dist/enforce/fast-path.js.map +1 -0
  9. package/dist/enforce/pipeline-optimizer.d.ts +111 -0
  10. package/dist/enforce/pipeline-optimizer.d.ts.map +1 -0
  11. package/dist/enforce/pipeline-optimizer.js +370 -0
  12. package/dist/enforce/pipeline-optimizer.js.map +1 -0
  13. package/dist/enforce/policy-cache.d.ts +92 -0
  14. package/dist/enforce/policy-cache.d.ts.map +1 -0
  15. package/dist/enforce/policy-cache.js +186 -0
  16. package/dist/enforce/policy-cache.js.map +1 -0
  17. package/dist/enforce/trust-cache.d.ts +118 -0
  18. package/dist/enforce/trust-cache.d.ts.map +1 -0
  19. package/dist/enforce/trust-cache.js +218 -0
  20. package/dist/enforce/trust-cache.js.map +1 -0
  21. package/dist/paramesphere/gpu-svd.d.ts +102 -0
  22. package/dist/paramesphere/gpu-svd.d.ts.map +1 -0
  23. package/dist/paramesphere/gpu-svd.js +668 -0
  24. package/dist/paramesphere/gpu-svd.js.map +1 -0
  25. package/dist/paramesphere/index.d.ts +2 -0
  26. package/dist/paramesphere/index.d.ts.map +1 -1
  27. package/dist/paramesphere/index.js +1 -0
  28. package/dist/paramesphere/index.js.map +1 -1
  29. package/dist/paramesphere/paramesphere-engine.d.ts +40 -3
  30. package/dist/paramesphere/paramesphere-engine.d.ts.map +1 -1
  31. package/dist/paramesphere/paramesphere-engine.js +133 -6
  32. package/dist/paramesphere/paramesphere-engine.js.map +1 -1
  33. package/dist/paramesphere/scheduled-verifier.d.ts +136 -0
  34. package/dist/paramesphere/scheduled-verifier.d.ts.map +1 -0
  35. package/dist/paramesphere/scheduled-verifier.js +338 -0
  36. package/dist/paramesphere/scheduled-verifier.js.map +1 -0
  37. package/dist/paramesphere/svd-worker-pool.d.ts +37 -0
  38. package/dist/paramesphere/svd-worker-pool.d.ts.map +1 -0
  39. package/dist/paramesphere/svd-worker-pool.js +144 -0
  40. package/dist/paramesphere/svd-worker-pool.js.map +1 -0
  41. package/dist/paramesphere/svd-worker.d.ts +2 -0
  42. package/dist/paramesphere/svd-worker.d.ts.map +1 -0
  43. package/dist/paramesphere/svd-worker.js +103 -0
  44. package/dist/paramesphere/svd-worker.js.map +1 -0
  45. package/dist/paramesphere/types.d.ts +14 -0
  46. package/dist/paramesphere/types.d.ts.map +1 -1
  47. package/dist/paramesphere/types.js.map +1 -1
  48. package/dist/phase6/types.d.ts +257 -257
  49. package/dist/phase6/types.js +1 -1
  50. package/dist/phase6/types.js.map +1 -1
  51. 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"}