webml-kit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Pipeline registry — maps task names to their default configurations.
3
+ */
4
+ import type { PipelineTask } from '../types.js';
5
+ export interface PipelineDefaults {
6
+ /** Default model for this task */
7
+ defaultModel: string;
8
+ /** Default quantization */
9
+ defaultDtype: string;
10
+ /** Whether this task supports token streaming */
11
+ supportsStreaming: boolean;
12
+ /** Whether this task uses KV cache */
13
+ usesKVCache: boolean;
14
+ }
15
+ /**
16
+ * Registry of pipeline tasks with sensible defaults.
17
+ * Users can override any of these when calling `client.load()`.
18
+ */
19
+ export declare const PIPELINE_REGISTRY: Record<PipelineTask, PipelineDefaults>;
20
+ /**
21
+ * Get the pipeline defaults for a task.
22
+ */
23
+ export declare function getPipelineDefaults(task: PipelineTask): PipelineDefaults;
24
+ /**
25
+ * Check if a task supports real-time token streaming.
26
+ */
27
+ export declare function supportsStreaming(task: PipelineTask): boolean;
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pipelines/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sCAAsC;IACtC,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAiGpE,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,gBAAgB,CAMxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAE7D"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Pipeline registry — maps task names to their default configurations.
3
+ */
4
+ /**
5
+ * Registry of pipeline tasks with sensible defaults.
6
+ * Users can override any of these when calling `client.load()`.
7
+ */
8
+ export const PIPELINE_REGISTRY = {
9
+ 'text-generation': {
10
+ defaultModel: 'onnx-community/Llama-3.2-1B-Instruct-ONNX',
11
+ defaultDtype: 'q4',
12
+ supportsStreaming: true,
13
+ usesKVCache: true,
14
+ },
15
+ 'text-classification': {
16
+ defaultModel: 'Xenova/distilbert-base-uncased-finetuned-sst-2-english',
17
+ defaultDtype: 'q8',
18
+ supportsStreaming: false,
19
+ usesKVCache: false,
20
+ },
21
+ 'image-classification': {
22
+ defaultModel: 'Xenova/vit-base-patch16-224',
23
+ defaultDtype: 'fp32',
24
+ supportsStreaming: false,
25
+ usesKVCache: false,
26
+ },
27
+ 'object-detection': {
28
+ defaultModel: 'Xenova/detr-resnet-50',
29
+ defaultDtype: 'fp32',
30
+ supportsStreaming: false,
31
+ usesKVCache: false,
32
+ },
33
+ 'automatic-speech-recognition': {
34
+ defaultModel: 'onnx-community/whisper-tiny.en',
35
+ defaultDtype: 'q8',
36
+ supportsStreaming: false,
37
+ usesKVCache: false,
38
+ },
39
+ 'text-to-speech': {
40
+ defaultModel: 'Xenova/speecht5_tts',
41
+ defaultDtype: 'fp32',
42
+ supportsStreaming: false,
43
+ usesKVCache: false,
44
+ },
45
+ 'translation': {
46
+ defaultModel: 'Xenova/nllb-200-distilled-600M',
47
+ defaultDtype: 'q8',
48
+ supportsStreaming: false,
49
+ usesKVCache: false,
50
+ },
51
+ 'summarization': {
52
+ defaultModel: 'Xenova/distilbart-cnn-6-6',
53
+ defaultDtype: 'q8',
54
+ supportsStreaming: false,
55
+ usesKVCache: false,
56
+ },
57
+ 'feature-extraction': {
58
+ defaultModel: 'Xenova/all-MiniLM-L6-v2',
59
+ defaultDtype: 'fp32',
60
+ supportsStreaming: false,
61
+ usesKVCache: false,
62
+ },
63
+ 'image-to-text': {
64
+ defaultModel: 'Xenova/vit-gpt2-image-captioning',
65
+ defaultDtype: 'q8',
66
+ supportsStreaming: false,
67
+ usesKVCache: false,
68
+ },
69
+ 'zero-shot-classification': {
70
+ defaultModel: 'Xenova/mobilebert-uncased-mnli',
71
+ defaultDtype: 'q8',
72
+ supportsStreaming: false,
73
+ usesKVCache: false,
74
+ },
75
+ 'fill-mask': {
76
+ defaultModel: 'Xenova/bert-base-uncased',
77
+ defaultDtype: 'q8',
78
+ supportsStreaming: false,
79
+ usesKVCache: false,
80
+ },
81
+ 'question-answering': {
82
+ defaultModel: 'Xenova/distilbert-base-uncased-distilled-squad',
83
+ defaultDtype: 'q8',
84
+ supportsStreaming: false,
85
+ usesKVCache: false,
86
+ },
87
+ 'token-classification': {
88
+ defaultModel: 'Xenova/bert-base-NER',
89
+ defaultDtype: 'q8',
90
+ supportsStreaming: false,
91
+ usesKVCache: false,
92
+ },
93
+ 'depth-estimation': {
94
+ defaultModel: 'Xenova/depth-anything-small-hf',
95
+ defaultDtype: 'fp32',
96
+ supportsStreaming: false,
97
+ usesKVCache: false,
98
+ },
99
+ 'image-segmentation': {
100
+ defaultModel: 'Xenova/detr-resnet-50-panoptic',
101
+ defaultDtype: 'fp32',
102
+ supportsStreaming: false,
103
+ usesKVCache: false,
104
+ },
105
+ };
106
+ /**
107
+ * Get the pipeline defaults for a task.
108
+ */
109
+ export function getPipelineDefaults(task) {
110
+ const defaults = PIPELINE_REGISTRY[task];
111
+ if (!defaults) {
112
+ throw new Error(`Unknown pipeline task: ${task}`);
113
+ }
114
+ return defaults;
115
+ }
116
+ /**
117
+ * Check if a task supports real-time token streaming.
118
+ */
119
+ export function supportsStreaming(task) {
120
+ return PIPELINE_REGISTRY[task]?.supportsStreaming ?? false;
121
+ }
122
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipelines/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Token streaming utilities for text generation.
3
+ *
4
+ * Converts the Web Worker's `postMessage`-based token stream into a proper
5
+ * `AsyncIterable` with TPS measurement, time-to-first-token tracking,
6
+ * and AbortSignal support.
7
+ */
8
+ import type { TokenEvent } from './types.js';
9
+ /**
10
+ * A readable token stream that implements `AsyncIterable`.
11
+ *
12
+ * ```ts
13
+ * const stream = new TokenStream();
14
+ *
15
+ * // In your worker message handler:
16
+ * stream.push({ token: 'Hello', tps: 42, numTokens: 1, timeToFirstToken: 120 });
17
+ *
18
+ * // In your app:
19
+ * for await (const event of stream) {
20
+ * process.stdout.write(event.token);
21
+ * }
22
+ * ```
23
+ */
24
+ export declare class TokenStream implements AsyncIterable<TokenEvent> {
25
+ private queue;
26
+ private resolve;
27
+ private done;
28
+ private error;
29
+ private abortHandler;
30
+ constructor(signal?: AbortSignal);
31
+ /** Push a new token event into the stream. */
32
+ push(event: TokenEvent): void;
33
+ /** Signal that generation is complete. */
34
+ end(): void;
35
+ /** Signal an error. */
36
+ abort(error: Error): void;
37
+ /** Get the accumulated error, if any. */
38
+ getError(): Error | null;
39
+ private cleanup;
40
+ [Symbol.asyncIterator](): AsyncIterator<TokenEvent>;
41
+ }
42
+ /**
43
+ * Collect a token stream into a single string result.
44
+ *
45
+ * ```ts
46
+ * const { text, tps, numTokens } = await collectStream(stream);
47
+ * ```
48
+ */
49
+ export declare function collectStream(stream: TokenStream): Promise<{
50
+ text: string;
51
+ tps: number;
52
+ numTokens: number;
53
+ timeToFirstToken: number;
54
+ }>;
55
+ //# sourceMappingURL=streaming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAY,YAAW,aAAa,CAAC,UAAU,CAAC;IAC3D,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,OAAO,CAA8D;IAC7E,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,YAAY,CAA6B;gBAErC,MAAM,CAAC,EAAE,WAAW;IAShC,8CAA8C;IAC9C,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAc7B,0CAA0C;IAC1C,GAAG,IAAI,IAAI;IAUX,uBAAuB;IACvB,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAWzB,yCAAyC;IACzC,QAAQ,IAAI,KAAK,GAAG,IAAI;IAIxB,OAAO,CAAC,OAAO;IASf,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC;CAmCpD;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC,CAmBD"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Token streaming utilities for text generation.
3
+ *
4
+ * Converts the Web Worker's `postMessage`-based token stream into a proper
5
+ * `AsyncIterable` with TPS measurement, time-to-first-token tracking,
6
+ * and AbortSignal support.
7
+ */
8
+ /**
9
+ * A readable token stream that implements `AsyncIterable`.
10
+ *
11
+ * ```ts
12
+ * const stream = new TokenStream();
13
+ *
14
+ * // In your worker message handler:
15
+ * stream.push({ token: 'Hello', tps: 42, numTokens: 1, timeToFirstToken: 120 });
16
+ *
17
+ * // In your app:
18
+ * for await (const event of stream) {
19
+ * process.stdout.write(event.token);
20
+ * }
21
+ * ```
22
+ */
23
+ export class TokenStream {
24
+ queue = [];
25
+ resolve = null;
26
+ done = false;
27
+ error = null;
28
+ abortHandler = null;
29
+ constructor(signal) {
30
+ if (signal) {
31
+ this.abortHandler = () => {
32
+ this.abort(new Error('Stream aborted'));
33
+ };
34
+ signal.addEventListener('abort', this.abortHandler, { once: true });
35
+ }
36
+ }
37
+ /** Push a new token event into the stream. */
38
+ push(event) {
39
+ if (this.done)
40
+ return;
41
+ if (this.resolve) {
42
+ // A consumer is waiting — deliver immediately
43
+ const r = this.resolve;
44
+ this.resolve = null;
45
+ r({ value: event, done: false });
46
+ }
47
+ else {
48
+ // Buffer until consumed
49
+ this.queue.push(event);
50
+ }
51
+ }
52
+ /** Signal that generation is complete. */
53
+ end() {
54
+ this.done = true;
55
+ this.cleanup();
56
+ if (this.resolve) {
57
+ const r = this.resolve;
58
+ this.resolve = null;
59
+ r({ value: undefined, done: true });
60
+ }
61
+ }
62
+ /** Signal an error. */
63
+ abort(error) {
64
+ this.error = error;
65
+ this.done = true;
66
+ this.cleanup();
67
+ if (this.resolve) {
68
+ const r = this.resolve;
69
+ this.resolve = null;
70
+ r({ value: undefined, done: true });
71
+ }
72
+ }
73
+ /** Get the accumulated error, if any. */
74
+ getError() {
75
+ return this.error;
76
+ }
77
+ cleanup() {
78
+ // Remove abort listener to prevent leaks
79
+ if (this.abortHandler) {
80
+ this.abortHandler = null;
81
+ }
82
+ }
83
+ // ─── AsyncIterable implementation ───
84
+ [Symbol.asyncIterator]() {
85
+ return {
86
+ next: () => {
87
+ // If there's a buffered event, return it immediately
88
+ if (this.queue.length > 0) {
89
+ return Promise.resolve({
90
+ value: this.queue.shift(),
91
+ done: false,
92
+ });
93
+ }
94
+ // If the stream is done, signal completion
95
+ if (this.done) {
96
+ return Promise.resolve({
97
+ value: undefined,
98
+ done: true,
99
+ });
100
+ }
101
+ // Otherwise, wait for the next push
102
+ return new Promise((resolve) => {
103
+ this.resolve = resolve;
104
+ });
105
+ },
106
+ return: () => {
107
+ this.done = true;
108
+ this.cleanup();
109
+ return Promise.resolve({
110
+ value: undefined,
111
+ done: true,
112
+ });
113
+ },
114
+ };
115
+ }
116
+ }
117
+ /**
118
+ * Collect a token stream into a single string result.
119
+ *
120
+ * ```ts
121
+ * const { text, tps, numTokens } = await collectStream(stream);
122
+ * ```
123
+ */
124
+ export async function collectStream(stream) {
125
+ let text = '';
126
+ let tps = 0;
127
+ let numTokens = 0;
128
+ let timeToFirstToken = 0;
129
+ for await (const event of stream) {
130
+ text += event.token;
131
+ tps = event.tps;
132
+ numTokens = event.numTokens;
133
+ if (timeToFirstToken === 0) {
134
+ timeToFirstToken = event.timeToFirstToken;
135
+ }
136
+ }
137
+ const error = stream.getError();
138
+ if (error)
139
+ throw error;
140
+ return { text, tps, numTokens, timeToFirstToken };
141
+ }
142
+ //# sourceMappingURL=streaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,186 @@
1
+ export type DeviceBackend = 'webgpu' | 'wasm' | 'cpu';
2
+ export interface GPUInfo {
3
+ vendor: string;
4
+ architecture: string;
5
+ description: string;
6
+ /** Estimated VRAM in bytes (0 if unknown) */
7
+ vram: number;
8
+ /** Human-readable VRAM (e.g. '8.0 GB') */
9
+ vramFormatted: string;
10
+ }
11
+ export interface DeviceInfo {
12
+ backend: DeviceBackend;
13
+ gpu: GPUInfo | null;
14
+ /** Recommended dtype based on available VRAM */
15
+ recommendedDtype: QuantizationType;
16
+ }
17
+ export type QuantizationType = 'fp32' | 'fp16' | 'q8' | 'q4' | 'q4f16' | 'q1' | 'int8' | 'uint8';
18
+ export type PipelineTask = 'text-generation' | 'text-classification' | 'image-classification' | 'object-detection' | 'automatic-speech-recognition' | 'text-to-speech' | 'translation' | 'summarization' | 'feature-extraction' | 'image-to-text' | 'zero-shot-classification' | 'fill-mask' | 'question-answering' | 'token-classification' | 'depth-estimation' | 'image-segmentation';
19
+ export interface ModelConfig {
20
+ task: PipelineTask;
21
+ modelId: string;
22
+ /** Quantization level. Auto-selected if omitted. */
23
+ dtype?: QuantizationType;
24
+ /** Device preference. Falls back automatically. */
25
+ device?: DeviceBackend;
26
+ /** Revision / branch on HuggingFace Hub */
27
+ revision?: string;
28
+ }
29
+ export interface ProgressEvent {
30
+ status: 'downloading' | 'loading' | 'compiling' | 'warming';
31
+ /** File being downloaded */
32
+ file?: string;
33
+ /** Bytes loaded so far */
34
+ loaded: number;
35
+ /** Total bytes */
36
+ total: number;
37
+ /** 0-100 */
38
+ percent: number;
39
+ }
40
+ export type ProgressCallback = (event: ProgressEvent) => void;
41
+ export interface TokenEvent {
42
+ /** The decoded text token */
43
+ token: string;
44
+ /** Tokens per second (0 until second token) */
45
+ tps: number;
46
+ /** Total tokens generated so far */
47
+ numTokens: number;
48
+ /** Milliseconds from request to first token */
49
+ timeToFirstToken: number;
50
+ }
51
+ export interface ChatMessage {
52
+ role: 'system' | 'user' | 'assistant';
53
+ content: string;
54
+ }
55
+ export interface TextGenerationOptions {
56
+ maxNewTokens?: number;
57
+ temperature?: number;
58
+ topP?: number;
59
+ topK?: number;
60
+ doSample?: boolean;
61
+ repetitionPenalty?: number;
62
+ /** Abort signal for cancellation */
63
+ signal?: AbortSignal;
64
+ }
65
+ export interface TextGenerationResult {
66
+ text: string;
67
+ numTokens: number;
68
+ tps: number;
69
+ timeToFirstToken: number;
70
+ totalTime: number;
71
+ }
72
+ export interface ClassificationResult {
73
+ label: string;
74
+ score: number;
75
+ }
76
+ export interface DetectionResult {
77
+ label: string;
78
+ score: number;
79
+ box: {
80
+ xmin: number;
81
+ ymin: number;
82
+ xmax: number;
83
+ ymax: number;
84
+ };
85
+ }
86
+ export interface TranscriptionResult {
87
+ text: string;
88
+ chunks?: Array<{
89
+ text: string;
90
+ timestamp: [number, number];
91
+ }>;
92
+ language?: string;
93
+ }
94
+ export interface EmbeddingResult {
95
+ embedding: Float32Array;
96
+ dimensions: number;
97
+ }
98
+ export interface CaptionResult {
99
+ text: string;
100
+ }
101
+ export interface TextResult {
102
+ text: string;
103
+ }
104
+ export type CacheBackend = 'cache-api' | 'opfs' | 'indexeddb';
105
+ export interface CachedModel {
106
+ modelId: string;
107
+ /** Raw byte count */
108
+ sizeBytes: number;
109
+ /** Human-readable size (e.g. '412.0 MB') */
110
+ size: string;
111
+ lastAccessed: Date;
112
+ }
113
+ export type WorkerCommand = {
114
+ type: 'check';
115
+ } | {
116
+ type: 'load';
117
+ config: ModelConfig;
118
+ } | {
119
+ type: 'run';
120
+ id: string;
121
+ task: PipelineTask;
122
+ input: unknown;
123
+ options?: unknown;
124
+ } | {
125
+ type: 'interrupt';
126
+ } | {
127
+ type: 'reset';
128
+ } | {
129
+ type: 'dispose';
130
+ modelKey?: string;
131
+ } | {
132
+ type: 'cache-status';
133
+ modelId: string;
134
+ } | {
135
+ type: 'cache-clear';
136
+ modelId?: string;
137
+ };
138
+ export type WorkerResponse = {
139
+ type: 'device-info';
140
+ data: DeviceInfo;
141
+ } | {
142
+ type: 'progress';
143
+ data: ProgressEvent;
144
+ } | {
145
+ type: 'ready';
146
+ modelKey: string;
147
+ } | {
148
+ type: 'token';
149
+ id: string;
150
+ data: TokenEvent;
151
+ } | {
152
+ type: 'result';
153
+ id: string;
154
+ data: unknown;
155
+ } | {
156
+ type: 'error';
157
+ id: string;
158
+ data: string;
159
+ } | {
160
+ type: 'device-lost';
161
+ reason: string;
162
+ } | {
163
+ type: 'device-recovered';
164
+ } | {
165
+ type: 'cache-info';
166
+ data: {
167
+ cached: boolean;
168
+ size?: number;
169
+ };
170
+ };
171
+ export interface ModelClientEvents {
172
+ progress: ProgressEvent;
173
+ ready: {
174
+ modelKey: string;
175
+ };
176
+ token: TokenEvent;
177
+ error: {
178
+ message: string;
179
+ id?: string;
180
+ };
181
+ 'device-lost': {
182
+ reason: string;
183
+ };
184
+ 'device-recovered': void;
185
+ }
186
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // ─── Device ───
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,iBAAiB"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "webml-kit",
3
+ "version": "0.1.0",
4
+ "description": "Framework-agnostic utilities for loading and running ML models in the browser via WebGPU/WASM",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "./worker": {
14
+ "import": "./dist/model-worker.js",
15
+ "types": "./dist/model-worker.d.ts"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "README.md"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsc",
24
+ "dev": "tsc --watch",
25
+ "test": "vitest run",
26
+ "test:watch": "vitest",
27
+ "clean": "rm -rf dist",
28
+ "prepublishOnly": "npm run clean && npm run build"
29
+ },
30
+ "keywords": [
31
+ "webml",
32
+ "webgpu",
33
+ "transformers",
34
+ "browser-ml",
35
+ "onnx",
36
+ "machine-learning",
37
+ "web-worker",
38
+ "huggingface",
39
+ "inference"
40
+ ],
41
+ "author": "Hemanth HM",
42
+ "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "https://github.com/hemanth/webml-kit.git"
46
+ },
47
+ "peerDependencies": {
48
+ "@huggingface/transformers": ">=4.0.0"
49
+ },
50
+ "devDependencies": {
51
+ "@huggingface/transformers": "^4.1.0",
52
+ "@webgpu/types": "^0.1.69",
53
+ "typescript": "^5.7.0",
54
+ "vitest": "^4.1.4"
55
+ }
56
+ }