@flaxia/node 0.5.0 → 0.5.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.
Files changed (44) hide show
  1. package/dist/assets/ai-inference.js +241 -85
  2. package/dist/assets/webgpuProbe.js +357 -0
  3. package/dist/client/SignalingClient.d.ts.map +1 -1
  4. package/dist/client/__tests__/mobile-lifecycle.test.d.ts +2 -0
  5. package/dist/client/__tests__/mobile-lifecycle.test.d.ts.map +1 -0
  6. package/dist/client/mobile-lifecycle.d.ts +20 -0
  7. package/dist/client/mobile-lifecycle.d.ts.map +1 -0
  8. package/dist/executor/WorkerPool.d.ts +7 -1
  9. package/dist/executor/WorkerPool.d.ts.map +1 -1
  10. package/dist/executor/__tests__/resourceReporter.test.d.ts +2 -0
  11. package/dist/executor/__tests__/resourceReporter.test.d.ts.map +1 -0
  12. package/dist/executor/memoryProbe.d.ts +5 -0
  13. package/dist/executor/memoryProbe.d.ts.map +1 -1
  14. package/dist/executor/resourceReporter.d.ts +15 -0
  15. package/dist/executor/resourceReporter.d.ts.map +1 -0
  16. package/dist/executor/webgpuProbe.d.ts +16 -5
  17. package/dist/executor/webgpuProbe.d.ts.map +1 -1
  18. package/dist/index.js +943 -291
  19. package/dist/swarm/__tests__/peer-quality.test.d.ts +2 -0
  20. package/dist/swarm/__tests__/peer-quality.test.d.ts.map +1 -0
  21. package/dist/swarm/__tests__/peer-transport.test.d.ts +2 -0
  22. package/dist/swarm/__tests__/peer-transport.test.d.ts.map +1 -0
  23. package/dist/swarm/adapter.d.ts +1 -1
  24. package/dist/swarm/adapter.d.ts.map +1 -1
  25. package/dist/swarm/controller.d.ts +4 -0
  26. package/dist/swarm/controller.d.ts.map +1 -1
  27. package/dist/swarm/messages.d.ts +2 -2
  28. package/dist/swarm/messages.d.ts.map +1 -1
  29. package/dist/swarm/peer-quality.d.ts +14 -0
  30. package/dist/swarm/peer-quality.d.ts.map +1 -0
  31. package/dist/swarm/peer-transport.d.ts +81 -0
  32. package/dist/swarm/peer-transport.d.ts.map +1 -0
  33. package/dist/swarm/runtime.d.ts +5 -1
  34. package/dist/swarm/runtime.d.ts.map +1 -1
  35. package/dist/swarm-engine.js +39 -20
  36. package/dist/worker.js +331 -208
  37. package/dist/workloads/__tests__/model-pipeline-cache.test.d.ts +2 -0
  38. package/dist/workloads/__tests__/model-pipeline-cache.test.d.ts.map +1 -0
  39. package/dist/workloads/ai-inference.d.ts +6 -0
  40. package/dist/workloads/ai-inference.d.ts.map +1 -1
  41. package/dist/workloads/model-pipeline-cache.d.ts +48 -0
  42. package/dist/workloads/model-pipeline-cache.d.ts.map +1 -0
  43. package/package.json +1 -1
  44. package/dist/assets/dist.js +0 -209
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=model-pipeline-cache.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-pipeline-cache.test.d.ts","sourceRoot":"","sources":["../../../src/workloads/__tests__/model-pipeline-cache.test.ts"],"names":[],"mappings":""}
@@ -1,10 +1,16 @@
1
1
  import type { AiInferencePayload, AiInferenceResult } from '@flaxia/sdk';
2
+ import type { NodeModelCacheSnapshot } from '@flaxia/sdk';
2
3
  export { DEFAULT_AI_MODEL_MAX_BYTES, MAX_AI_MODEL_MAX_BYTES, MAX_AI_INPUT_CHARS, MAX_AI_INPUT_ITEMS, ALLOWED_AI_DEVICES, ALLOWED_AI_DTYPES, listAiModels, registerAiModels, unregisterAiModel, type AiModelDefinition, } from './ai-model-registry';
4
+ /** Bound work queued behind TextStreamer's synchronous callback API. */
5
+ export declare const MAX_PENDING_TOKEN_CALLBACKS = 64;
6
+ export declare const MAX_PENDING_TOKEN_CHARS: number;
3
7
  /**
4
8
  * Drops all cached model pipelines so the (potentially hundreds of MB of)
5
9
  * transformers/onnxruntime memory can be garbage-collected. Called by the
6
10
  * worker after an idle period so a node does not pin every model it ever saw.
7
11
  */
8
12
  export declare const releaseCache: () => void;
13
+ /** Current executable pipelines; weight files in the Transformers cache are a separate disk-cache layer. */
14
+ export declare const getModelCacheSnapshot: () => NodeModelCacheSnapshot;
9
15
  export declare const handleAiInference: (payload: AiInferencePayload, onToken?: (token: string) => void | Promise<void>) => Promise<AiInferenceResult>;
10
16
  //# sourceMappingURL=ai-inference.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-inference.d.ts","sourceRoot":"","sources":["../../src/workloads/ai-inference.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAsB,MAAM,aAAa,CAAC;AAa7F,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,iBAAiB,GACvB,MAAM,qBAAqB,CAAC;AAe7B;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAO,IAE/B,CAAC;AA0FF,eAAO,MAAM,iBAAiB,GAC5B,SAAS,kBAAkB,EAC3B,UAAU,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAChD,OAAO,CAAC,iBAAiB,CAqF3B,CAAC"}
1
+ {"version":3,"file":"ai-inference.d.ts","sourceRoot":"","sources":["../../src/workloads/ai-inference.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAsB,MAAM,aAAa,CAAC;AAC7F,OAAO,KAAK,EAAqB,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAc7E,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,iBAAiB,GACvB,MAAM,qBAAqB,CAAC;AAa7B,wEAAwE;AACxE,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C,eAAO,MAAM,uBAAuB,QAAa,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAO,IAE/B,CAAC;AAEF,4GAA4G;AAC5G,eAAO,MAAM,qBAAqB,QAAO,sBAAqD,CAAC;AAkH/F,eAAO,MAAM,iBAAiB,GAC5B,SAAS,kBAAkB,EAC3B,UAAU,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAChD,OAAO,CAAC,iBAAiB,CA8G3B,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { type ModelCacheBackend, type ModelCacheEntryStatus, type NodeModelCacheSnapshot } from '@flaxia/sdk';
2
+ export declare const DEFAULT_MODEL_PIPELINE_TTL_MS: number;
3
+ export declare const DEFAULT_MODEL_PIPELINE_CACHE_CAPACITY = 2;
4
+ export type ModelPipelineDescriptor = Omit<ModelCacheEntryStatus, 'state' | 'referenceCount'>;
5
+ interface LoadedModelPipeline<T> {
6
+ value: T;
7
+ descriptor?: Partial<ModelPipelineDescriptor>;
8
+ }
9
+ export interface ModelPipelineLease<T> {
10
+ readonly value: T;
11
+ updateDescriptor(descriptor: Partial<ModelPipelineDescriptor>): void;
12
+ invalidate(): void;
13
+ release(): Promise<void>;
14
+ }
15
+ /**
16
+ * Bounded executable-model cache with load deduplication and lease-aware LRU.
17
+ * The caller decides what persistent weight cache to use; this class owns only
18
+ * executable pipelines/devices and never evicts one while a lease is active.
19
+ */
20
+ export declare class ModelPipelineCache<T> {
21
+ private readonly options;
22
+ private entries;
23
+ constructor(options?: {
24
+ capacity?: number;
25
+ ttlMs?: number;
26
+ now?: () => number;
27
+ });
28
+ acquire(key: string, descriptor: ModelPipelineDescriptor, load: () => Promise<LoadedModelPipeline<T>>, dispose: (value: T) => void | Promise<void>): Promise<ModelPipelineLease<T>>;
29
+ private acquireEntry;
30
+ getSnapshot(now?: number): NodeModelCacheSnapshot;
31
+ releaseAll(): Promise<void>;
32
+ private createLease;
33
+ private evictExpired;
34
+ private makeRoom;
35
+ private disposeEntry;
36
+ private now;
37
+ private ttlMs;
38
+ }
39
+ export declare function modelPipelineKey(identity: {
40
+ task: string;
41
+ modelId: string;
42
+ revision: string;
43
+ dtype: string;
44
+ backend: ModelCacheBackend;
45
+ layerRange?: [number, number];
46
+ }): string;
47
+ export {};
48
+ //# sourceMappingURL=model-pipeline-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-pipeline-cache.d.ts","sourceRoot":"","sources":["../../src/workloads/model-pipeline-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,6BAA6B,QAAiB,CAAC;AAC5D,eAAO,MAAM,qCAAqC,IAAI,CAAC;AAEvD,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,qBAAqB,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC;AAE9F,UAAU,mBAAmB,CAAC,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC;IACT,UAAU,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAC/C;AAeD,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC;IACrE,UAAU,IAAI,IAAI,CAAC;IACnB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,kBAAkB,CAAC,CAAC;IAI7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAH1B,OAAO,CAAC,OAAO,CAAoC;gBAGhC,OAAO,GAAE;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;KACf;IAGF,OAAO,CACX,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,uBAAuB,EACnC,IAAI,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAC3C,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAC1C,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YA0DnB,YAAY;IAkB1B,WAAW,CAAC,GAAG,SAAa,GAAG,sBAAsB;IAa/C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC,OAAO,CAAC,WAAW;YA6BL,YAAY;YAUZ,QAAQ;YAaR,YAAY;IAa1B,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,KAAK;CAGd;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B,GAAG,MAAM,CAST"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flaxia/node",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -1,209 +0,0 @@
1
- //#region src/executor/memoryProbe.ts
2
- var e = 2 * 1024 ** 3, t = 65536, n = 16 * 1024 * 1024, r = 4096, i = null, a = 0;
3
- function o(e, n) {
4
- let r = Math.ceil(n / t);
5
- try {
6
- e.grow(r);
7
- } catch {
8
- return !1;
9
- }
10
- let i = new Uint8Array(e.buffer);
11
- for (let e = 0; e < r; e++) i[e * t] = 0;
12
- return !0;
13
- }
14
- function s(s = e, c = n) {
15
- if (i) return i.bytes;
16
- a++;
17
- let l;
18
- try {
19
- l = new WebAssembly.Memory({ initial: 0 });
20
- } catch {
21
- return i = { bytes: 0 }, 0;
22
- }
23
- let u = Math.max(0, Math.floor(s)), d = Math.max(t, Math.floor(c)), f = 0, p = 0;
24
- for (; f < u && p < r;) {
25
- let e = Math.min(d, u - f);
26
- if (!o(l, e)) break;
27
- f += e, p++;
28
- }
29
- return l = void 0, i = { bytes: f }, f;
30
- }
31
- function c() {
32
- return i ? i.bytes : s();
33
- }
34
- function l() {
35
- return c() >= e;
36
- }
37
- //#endregion
38
- //#region src/executor/webgpuProbe.ts
39
- async function u() {
40
- let e = navigator.gpu;
41
- if (!e || typeof e.requestAdapter != "function") return { webgpu: !1 };
42
- try {
43
- let t = await e.requestAdapter({ powerPreference: "high-performance" });
44
- if (!t) return { webgpu: !1 };
45
- let n = { webgpu: !0 }, r = t.info;
46
- if (r) {
47
- let e = [r.vendor, r.architecture].filter(Boolean).join(" ").trim();
48
- e && (n.gpuArchitecture = e);
49
- }
50
- let i = t.limits?.maxStorageBufferBindingSize;
51
- return typeof i == "number" && Number.isFinite(i) && (n.maxStorageBufferBindingSize = i), n;
52
- } catch {
53
- return { webgpu: !1 };
54
- }
55
- }
56
- //#endregion
57
- //#region ../sdk/dist/index.js
58
- var d = "flaxia-node-v1", f = "bearer.";
59
- function p(e) {
60
- return [d, `${f}${e}`];
61
- }
62
- function m(e, t, n = {}) {
63
- let r = e.replace(/\/+$/, "").replace(/^http/, "ws"), i = new URL(`${r}${t.startsWith("/") ? t : `/${t}`}`);
64
- for (let [e, t] of Object.entries(n)) t !== void 0 && i.searchParams.set(e, String(t));
65
- return i.toString();
66
- }
67
- var h = new Set([
68
- "ai-inference",
69
- "image-process",
70
- "container",
71
- "vector-embed",
72
- "vector-query",
73
- "nudenet",
74
- "swarm-inference"
75
- ]);
76
- function g(e, t) {
77
- if (t.length === 0) return [];
78
- if (!Number.isInteger(e) || e < 1) throw Error(`layers must be a positive integer, got ${e}`);
79
- let n = Math.min(t.length, e), r = t.slice(0, n).map((e) => Number.isFinite(e) && e > 0 ? e : 0), i = r.reduce((e, t) => e + t, 0) || 1, a = r.map((t) => Math.max(1, Math.floor(e * t / i))), o = a.reduce((e, t) => e + t, 0);
80
- for (; o > e;) {
81
- let e = 0;
82
- for (let t = 1; t < n; t++) a[t] > a[e] && (e = t);
83
- if (a[e] <= 1) break;
84
- a[e]--, o--;
85
- }
86
- let s = r.map((t, n) => ({
87
- i: n,
88
- f: e * t / i - Math.floor(e * t / i)
89
- })).sort((e, t) => t.f - e.f), c = 0;
90
- for (; o < e;) a[s[c % n].i]++, o++, c++;
91
- return a;
92
- }
93
- function _(e) {
94
- let t = g(e.layers, e.nodes.map((e) => e.capacity)), n = [], r = 0;
95
- for (let i = 0; i < t.length; i++) {
96
- let a = r + t[i], o = i === 0 ? "host" : "worker", s = {
97
- start: r,
98
- end: a,
99
- hasEmbed: i === 0,
100
- hasHead: i === 0
101
- };
102
- n.push({
103
- nodeId: e.nodes[i].nodeId,
104
- role: o,
105
- slice: s
106
- }), r = a;
107
- }
108
- return {
109
- sessionId: e.sessionId,
110
- taskId: e.taskId,
111
- model: e.model,
112
- layers: e.layers,
113
- chain: n
114
- };
115
- }
116
- var v = 21335, y = 0, b = 1;
117
- function x(e, t, n) {
118
- let r = new TextEncoder().encode(e), i = n ?? new Uint8Array(), a = 4 + r.length + 1 + i.byteLength, o = new ArrayBuffer(a + t.byteLength), s = new DataView(o);
119
- return s.setUint32(0, r.length, !0), new Uint8Array(o, 4, r.length).set(r), s.setUint8(4 + r.length, i.byteLength), i.byteLength && new Uint8Array(o, 4 + r.length + 1, i.byteLength).set(i), new Uint8Array(o, a).set(new Uint8Array(t)), o;
120
- }
121
- function S(e) {
122
- if (e.byteLength < 5) return null;
123
- let t = new DataView(e), n = t.getUint32(0, !0);
124
- if (!n || n > 256) return null;
125
- let r = 4 + n;
126
- if (e.byteLength < r + 1) return null;
127
- let i = t.getUint8(r);
128
- if (i !== 0 && i !== 16) return null;
129
- let a = r + 1 + i;
130
- return e.byteLength < a + 16 ? null : {
131
- sessionId: new TextDecoder().decode(new Uint8Array(e, 4, n)),
132
- mac: i ? new Uint8Array(e, r + 1, i) : null,
133
- frame: e.slice(a)
134
- };
135
- }
136
- async function C(e, t, n) {
137
- let r = await crypto.subtle.importKey("raw", new TextEncoder().encode(e), {
138
- name: "HMAC",
139
- hash: "SHA-256"
140
- }, !1, ["sign"]), i = await crypto.subtle.sign("HMAC", r, x(t, n));
141
- return new Uint8Array(i).slice(0, 16);
142
- }
143
- async function w(e, t, n) {
144
- return x(t, n, await C(e, t, n));
145
- }
146
- async function T(e, t, n, r) {
147
- if (r.byteLength !== 16) return !1;
148
- let i = await C(e, t, n), a = 0;
149
- for (let e = 0; e < i.byteLength; e++) a |= i[e] ^ r[e];
150
- return a === 0;
151
- }
152
- function E(e, t) {
153
- let n = new ArrayBuffer(16 + t.byteLength), r = new DataView(n);
154
- return r.setUint16(0, v, !0), r.setUint8(2, y), r.setUint8(3, 0), r.setUint32(4, e.requestId >>> 0, !0), r.setUint32(8, e.pos >>> 0, !0), r.setUint16(12, e.tokens, !0), r.setUint16(14, 0, !0), new Uint8Array(n, 16).set(t), n;
155
- }
156
- function D(e = 0) {
157
- let t = /* @__PURE__ */ new ArrayBuffer(16), n = new DataView(t);
158
- return n.setUint16(0, v, !0), n.setUint8(2, b), n.setUint8(3, 0), n.setUint32(4, e >>> 0, !0), t;
159
- }
160
- function O(e) {
161
- if (e.byteLength !== 16) return !1;
162
- let t = new DataView(e);
163
- return t.getUint16(0, !0) === 21335 && t.getUint8(2) === b && t.getUint8(3) === 0 && t.getUint32(8, !0) === 0 && t.getUint16(12, !0) === 0 && t.getUint16(14, !0) === 0;
164
- }
165
- function k(e) {
166
- if (e.byteLength < 16) return null;
167
- let t = new DataView(e);
168
- return t.getUint16(0, !0) !== 21335 || t.getUint8(2) !== y ? null : {
169
- header: {
170
- requestId: t.getUint32(4, !0),
171
- pos: t.getUint32(8, !0),
172
- tokens: t.getUint16(12, !0)
173
- },
174
- payload: new Uint8Array(e, 16)
175
- };
176
- }
177
- function A(e) {
178
- return typeof e == "object" && !!e;
179
- }
180
- function j(e) {
181
- return typeof e == "number" && Number.isInteger(e) && e >= 0;
182
- }
183
- function M(e, t = {}) {
184
- let n = t.maxLayers ?? 1024, r = t.maxSliceLayers ?? 256;
185
- return !(!N(e) || !j(e.start) || !j(e.end) || e.end <= e.start || e.end - e.start > r || e.end > n);
186
- }
187
- function N(e) {
188
- return A(e) ? typeof e.start == "number" && typeof e.end == "number" && typeof e.hasEmbed == "boolean" && typeof e.hasHead == "boolean" : !1;
189
- }
190
- function P(e) {
191
- return A(e) ? typeof e.nodeId == "string" && e.nodeId.length > 0 && typeof e.capacity == "number" : !1;
192
- }
193
- function F(e) {
194
- return e === void 0 || typeof e == "string" && e.length > 0 && e.length <= 128;
195
- }
196
- function I(e) {
197
- return !A(e) || e.type !== "swarm-init" || typeof e.sessionId != "string" || !e.sessionId || typeof e.taskId != "string" || !e.taskId || typeof e.model != "string" || typeof e.timeoutMs != "number" || !Array.isArray(e.members) || e.members.length === 0 || e.members.length > 16 || typeof e.prompt != "string" && !Array.isArray(e.prompt) ? !1 : e.members.every(P);
198
- }
199
- function L(e) {
200
- return !(!A(e) || e.type !== "swarm-slice" || typeof e.sessionId != "string" || !e.sessionId || typeof e.taskId != "string" || !e.taskId || typeof e.model != "string" || !e.model || typeof e.timeoutMs != "number" || !j(e.index) || !j(e.chainLength) || e.chainLength < 1 || e.chainLength > 16 || e.index >= e.chainLength || e.role !== (e.index === 0 ? "host" : "worker") || !M(e.slice) || e.slice.hasEmbed !== (e.index === 0) || e.slice.hasHead !== (e.index === 0) || !F(e.inboundKey) || !F(e.outboundKey));
201
- }
202
- function R(e) {
203
- return !A(e) || e.type !== "swarm-start" ? !1 : typeof e.sessionId == "string" && !!e.sessionId && typeof e.taskId == "string" && !!e.taskId;
204
- }
205
- function z(e) {
206
- return !A(e) || e.type !== "swarm-error" ? !1 : typeof e.sessionId == "string" && !!e.sessionId && typeof e.taskId == "string" && !!e.taskId && typeof e.error == "string";
207
- }
208
- //#endregion
209
- export { O as _, z as a, l as b, E as c, m as d, T as f, R as g, D as h, I as i, k as l, S as m, L as n, M as o, w as p, x as r, h as s, _ as t, p as u, u as v, s as x, e as y };