@inbrowser/model 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.
- package/AGENTS.md +50 -0
- package/LICENSE +21 -0
- package/README.md +63 -0
- package/dist/adapters/agent.d.ts +19 -0
- package/dist/adapters/agent.d.ts.map +1 -0
- package/dist/adapters/agent.js +96 -0
- package/dist/adapters/agent.js.map +1 -0
- package/dist/adapters/relay.d.ts +17 -0
- package/dist/adapters/relay.d.ts.map +1 -0
- package/dist/adapters/relay.js +90 -0
- package/dist/adapters/relay.js.map +1 -0
- package/dist/engine.d.ts +35 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +353 -0
- package/dist/engine.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/parse-tool-calls.d.ts +49 -0
- package/dist/parse-tool-calls.d.ts.map +1 -0
- package/dist/parse-tool-calls.js +115 -0
- package/dist/parse-tool-calls.js.map +1 -0
- package/dist/presets.d.ts +93 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +191 -0
- package/dist/presets.js.map +1 -0
- package/dist/think.d.ts +57 -0
- package/dist/think.d.ts.map +1 -0
- package/dist/think.js +138 -0
- package/dist/think.js.map +1 -0
- package/dist/types.d.ts +291 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +17 -0
- package/dist/types.js.map +1 -0
- package/dist/worker.d.ts +62 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +493 -0
- package/dist/worker.js.map +1 -0
- package/package.json +65 -0
package/dist/worker.js
ADDED
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker transport — host an `Engine` inside a Web Worker; expose
|
|
3
|
+
* the same `Engine` shape on the main thread via a postMessage RPC.
|
|
4
|
+
*
|
|
5
|
+
* The key invariant: `connectWorkerEngine` returns a value that
|
|
6
|
+
* satisfies the same `Engine` interface as `createEngine`. Anything
|
|
7
|
+
* downstream — adapters, agent runtime, UI — cannot tell whether it
|
|
8
|
+
* holds a direct engine or a remote stub.
|
|
9
|
+
*
|
|
10
|
+
* RPC framing is sequence-numbered; `generate` opens a per-call
|
|
11
|
+
* stream id and the worker side fans `EngineEvent`s back tagged
|
|
12
|
+
* with that id. Backpressure today is implicit (postMessage queue);
|
|
13
|
+
* a future revision may add explicit acks.
|
|
14
|
+
*
|
|
15
|
+
* Wire shape:
|
|
16
|
+
*
|
|
17
|
+
* main → worker (ClientFrame)
|
|
18
|
+
* init — once, on connect; carries CreateEngineOpts
|
|
19
|
+
* ensure-ready — request the engine to load (seq-tracked ack/reject)
|
|
20
|
+
* generate-start — open a stream; events flow back tagged with seq
|
|
21
|
+
* generate-abort — request a stream to terminate (best effort)
|
|
22
|
+
* dispose — tear down engine + transport
|
|
23
|
+
*
|
|
24
|
+
* worker → main (HostFrame)
|
|
25
|
+
* init-ack — handshake reply (model + capabilities echoed)
|
|
26
|
+
* state — engine state transitions
|
|
27
|
+
* load — LoadProgress events
|
|
28
|
+
* ack | reject — per-seq reply for ensure-ready / dispose
|
|
29
|
+
* event — a single EngineEvent for a generate stream
|
|
30
|
+
* event-end — terminal marker for a generate stream
|
|
31
|
+
*/
|
|
32
|
+
import { createEngine as defaultCreateEngine } from './engine.js';
|
|
33
|
+
/**
|
|
34
|
+
* Install the worker-side RPC. Call from inside your worker entry:
|
|
35
|
+
*
|
|
36
|
+
* import { hostEngineInWorker } from '@inbrowser/model/worker';
|
|
37
|
+
* hostEngineInWorker(self);
|
|
38
|
+
*/
|
|
39
|
+
export function hostEngineInWorker(workerScope, opts) {
|
|
40
|
+
const factory = opts?.factory ?? defaultCreateEngine;
|
|
41
|
+
const port = workerScope;
|
|
42
|
+
let engine = null;
|
|
43
|
+
let stateOff = null;
|
|
44
|
+
let loadOff = null;
|
|
45
|
+
const abortControllers = new Map();
|
|
46
|
+
let disposed = false;
|
|
47
|
+
function post(frame) {
|
|
48
|
+
if (disposed)
|
|
49
|
+
return;
|
|
50
|
+
port.postMessage(frame);
|
|
51
|
+
}
|
|
52
|
+
function attachSubscribers(eng) {
|
|
53
|
+
stateOff = eng.on('state', (value) => post({ kind: 'state', value }));
|
|
54
|
+
loadOff = eng.on('load', (value) => post({ kind: 'load', value }));
|
|
55
|
+
}
|
|
56
|
+
function onInit(frame) {
|
|
57
|
+
if (engine) {
|
|
58
|
+
// Double-init: just re-ack with current model. The client likely
|
|
59
|
+
// crossed wires; never destroy a live engine on a duplicate init.
|
|
60
|
+
post({ kind: 'init-ack', model: engine.model, capabilities: engine.capabilities });
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
engine = factory(frame.opts);
|
|
65
|
+
attachSubscribers(engine);
|
|
66
|
+
post({ kind: 'init-ack', model: engine.model, capabilities: engine.capabilities });
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
// Surface as a state=error so the client side learns the engine
|
|
70
|
+
// is unusable. Subsequent ensure-ready calls will reject too.
|
|
71
|
+
post({ kind: 'state', value: 'error' });
|
|
72
|
+
// No seq to reject against; the client's ensure-ready will fail
|
|
73
|
+
// when it runs because engine is null.
|
|
74
|
+
post({
|
|
75
|
+
kind: 'load',
|
|
76
|
+
value: { phase: 'ready' }, // best-effort terminal; not load-bearing
|
|
77
|
+
});
|
|
78
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
79
|
+
post({ kind: 'reject', seq: -1, message: msg });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function onEnsureReady(seq) {
|
|
83
|
+
if (!engine) {
|
|
84
|
+
post({ kind: 'reject', seq, message: 'engine not initialized' });
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
await engine.ensureReady();
|
|
89
|
+
post({ kind: 'ack', seq });
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
post({ kind: 'reject', seq, message: e instanceof Error ? e.message : String(e) });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async function onGenerateStart(frame) {
|
|
96
|
+
const { seq, messages, opts: genOpts } = frame;
|
|
97
|
+
if (!engine) {
|
|
98
|
+
post({
|
|
99
|
+
kind: 'event',
|
|
100
|
+
seq,
|
|
101
|
+
event: { kind: 'error', message: 'engine not initialized', recoverable: false },
|
|
102
|
+
});
|
|
103
|
+
post({ kind: 'event-end', seq });
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const controller = new AbortController();
|
|
107
|
+
abortControllers.set(seq, controller);
|
|
108
|
+
// GenerateOpts may contain a caller-side AbortSignal, but signals
|
|
109
|
+
// don't cross postMessage boundaries. We synthesize one on the
|
|
110
|
+
// host from generate-abort frames.
|
|
111
|
+
const forwardedOpts = { ...(genOpts ?? {}), signal: controller.signal };
|
|
112
|
+
try {
|
|
113
|
+
for await (const event of engine.generate(messages, forwardedOpts)) {
|
|
114
|
+
if (disposed)
|
|
115
|
+
break;
|
|
116
|
+
post({ kind: 'event', seq, event });
|
|
117
|
+
if (controller.signal.aborted)
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (e) {
|
|
122
|
+
post({
|
|
123
|
+
kind: 'event',
|
|
124
|
+
seq,
|
|
125
|
+
event: {
|
|
126
|
+
kind: 'error',
|
|
127
|
+
message: e instanceof Error ? e.message : String(e),
|
|
128
|
+
recoverable: false,
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
abortControllers.delete(seq);
|
|
134
|
+
post({ kind: 'event-end', seq });
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function onGenerateAbort(seq) {
|
|
138
|
+
const ctrl = abortControllers.get(seq);
|
|
139
|
+
if (ctrl)
|
|
140
|
+
ctrl.abort();
|
|
141
|
+
}
|
|
142
|
+
async function onDispose(seq) {
|
|
143
|
+
try {
|
|
144
|
+
// Abort every in-flight generate before tearing down the engine.
|
|
145
|
+
for (const ctrl of abortControllers.values())
|
|
146
|
+
ctrl.abort();
|
|
147
|
+
abortControllers.clear();
|
|
148
|
+
if (engine)
|
|
149
|
+
await engine.dispose();
|
|
150
|
+
post({ kind: 'ack', seq });
|
|
151
|
+
}
|
|
152
|
+
catch (e) {
|
|
153
|
+
post({ kind: 'reject', seq, message: e instanceof Error ? e.message : String(e) });
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
stateOff?.();
|
|
157
|
+
loadOff?.();
|
|
158
|
+
stateOff = null;
|
|
159
|
+
loadOff = null;
|
|
160
|
+
engine = null;
|
|
161
|
+
disposed = true;
|
|
162
|
+
port.removeEventListener('message', onMessage);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function onMessage(ev) {
|
|
166
|
+
const frame = ev.data;
|
|
167
|
+
if (!frame || typeof frame !== 'object')
|
|
168
|
+
return;
|
|
169
|
+
switch (frame.kind) {
|
|
170
|
+
case 'init':
|
|
171
|
+
onInit(frame);
|
|
172
|
+
return;
|
|
173
|
+
case 'ensure-ready':
|
|
174
|
+
void onEnsureReady(frame.seq);
|
|
175
|
+
return;
|
|
176
|
+
case 'generate-start':
|
|
177
|
+
void onGenerateStart(frame);
|
|
178
|
+
return;
|
|
179
|
+
case 'generate-abort':
|
|
180
|
+
onGenerateAbort(frame.seq);
|
|
181
|
+
return;
|
|
182
|
+
case 'dispose':
|
|
183
|
+
void onDispose(frame.seq);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
port.addEventListener('message', onMessage);
|
|
188
|
+
return {
|
|
189
|
+
async dispose() {
|
|
190
|
+
if (disposed)
|
|
191
|
+
return;
|
|
192
|
+
for (const ctrl of abortControllers.values())
|
|
193
|
+
ctrl.abort();
|
|
194
|
+
abortControllers.clear();
|
|
195
|
+
if (engine) {
|
|
196
|
+
try {
|
|
197
|
+
await engine.dispose();
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
// best effort during teardown
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
stateOff?.();
|
|
204
|
+
loadOff?.();
|
|
205
|
+
stateOff = null;
|
|
206
|
+
loadOff = null;
|
|
207
|
+
engine = null;
|
|
208
|
+
disposed = true;
|
|
209
|
+
port.removeEventListener('message', onMessage);
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Connect to a worker that has called `hostEngineInWorker(self)`.
|
|
215
|
+
* Returns an `Engine` whose calls are RPC'd over postMessage.
|
|
216
|
+
*/
|
|
217
|
+
export function connectWorkerEngine(opts) {
|
|
218
|
+
const model = opts.engine.model;
|
|
219
|
+
const capabilities = opts.engine.capabilities;
|
|
220
|
+
const handshakeTimeoutMs = opts.handshakeTimeoutMs ?? 10_000;
|
|
221
|
+
const port = opts.worker;
|
|
222
|
+
let state = 'idle';
|
|
223
|
+
const stateSubs = new Set();
|
|
224
|
+
const loadSubs = new Set();
|
|
225
|
+
// Caller-supplied onLoadProgress mirrors what createEngine does: keep
|
|
226
|
+
// the worker transport feature-compatible with the in-thread engine.
|
|
227
|
+
if (opts.engine.onLoadProgress)
|
|
228
|
+
loadSubs.add(opts.engine.onLoadProgress);
|
|
229
|
+
const pending = new Map();
|
|
230
|
+
const streams = new Map();
|
|
231
|
+
// Handshake state. The init frame is sent eagerly so the worker can
|
|
232
|
+
// start fetching weights as soon as ensureReady fires.
|
|
233
|
+
let handshakeResolve = null;
|
|
234
|
+
let handshakeReject = null;
|
|
235
|
+
const handshake = new Promise((resolve, reject) => {
|
|
236
|
+
handshakeResolve = resolve;
|
|
237
|
+
handshakeReject = reject;
|
|
238
|
+
});
|
|
239
|
+
// Avoid an unhandled-rejection warning if the consumer disposes
|
|
240
|
+
// before ever calling ensureReady/generate.
|
|
241
|
+
handshake.catch(() => { });
|
|
242
|
+
const handshakeTimer = setTimeout(() => {
|
|
243
|
+
handshakeReject?.(new Error('connectWorkerEngine: handshake timeout'));
|
|
244
|
+
}, handshakeTimeoutMs);
|
|
245
|
+
let seqCounter = 0;
|
|
246
|
+
function nextSeq() {
|
|
247
|
+
seqCounter = (seqCounter + 1) | 0;
|
|
248
|
+
if (seqCounter <= 0)
|
|
249
|
+
seqCounter = 1;
|
|
250
|
+
return seqCounter;
|
|
251
|
+
}
|
|
252
|
+
let disposed = false;
|
|
253
|
+
function send(frame) {
|
|
254
|
+
if (disposed)
|
|
255
|
+
return;
|
|
256
|
+
port.postMessage(frame);
|
|
257
|
+
}
|
|
258
|
+
function setState(next) {
|
|
259
|
+
if (state === next)
|
|
260
|
+
return;
|
|
261
|
+
state = next;
|
|
262
|
+
for (const sub of stateSubs)
|
|
263
|
+
sub(next);
|
|
264
|
+
}
|
|
265
|
+
function emitLoad(p) {
|
|
266
|
+
for (const sub of loadSubs)
|
|
267
|
+
sub(p);
|
|
268
|
+
}
|
|
269
|
+
function onMessage(ev) {
|
|
270
|
+
const frame = ev.data;
|
|
271
|
+
if (!frame || typeof frame !== 'object')
|
|
272
|
+
return;
|
|
273
|
+
switch (frame.kind) {
|
|
274
|
+
case 'init-ack': {
|
|
275
|
+
clearTimeout(handshakeTimer);
|
|
276
|
+
handshakeResolve?.();
|
|
277
|
+
handshakeResolve = null;
|
|
278
|
+
handshakeReject = null;
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
case 'state': {
|
|
282
|
+
setState(frame.value);
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
case 'load': {
|
|
286
|
+
emitLoad(frame.value);
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
case 'ack': {
|
|
290
|
+
const p = pending.get(frame.seq);
|
|
291
|
+
if (p) {
|
|
292
|
+
pending.delete(frame.seq);
|
|
293
|
+
p.resolve();
|
|
294
|
+
}
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
case 'reject': {
|
|
298
|
+
const p = pending.get(frame.seq);
|
|
299
|
+
if (p) {
|
|
300
|
+
pending.delete(frame.seq);
|
|
301
|
+
p.reject(new Error(frame.message));
|
|
302
|
+
}
|
|
303
|
+
// If the host emits an unsolicited reject (seq=-1 on init
|
|
304
|
+
// failure), fail the handshake so consumers find out.
|
|
305
|
+
if (frame.seq === -1 && handshakeReject) {
|
|
306
|
+
clearTimeout(handshakeTimer);
|
|
307
|
+
handshakeReject(new Error(frame.message));
|
|
308
|
+
handshakeResolve = null;
|
|
309
|
+
handshakeReject = null;
|
|
310
|
+
}
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
case 'event': {
|
|
314
|
+
const slot = streams.get(frame.seq);
|
|
315
|
+
if (!slot || slot.done)
|
|
316
|
+
return;
|
|
317
|
+
slot.queue.push(frame.event);
|
|
318
|
+
const r = slot.resolver;
|
|
319
|
+
slot.resolver = null;
|
|
320
|
+
if (r)
|
|
321
|
+
r();
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
case 'event-end': {
|
|
325
|
+
const slot = streams.get(frame.seq);
|
|
326
|
+
if (!slot)
|
|
327
|
+
return;
|
|
328
|
+
slot.done = true;
|
|
329
|
+
const r = slot.resolver;
|
|
330
|
+
slot.resolver = null;
|
|
331
|
+
if (r)
|
|
332
|
+
r();
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
port.addEventListener('message', onMessage);
|
|
338
|
+
// Kick the handshake.
|
|
339
|
+
send({ kind: 'init', opts: opts.engine });
|
|
340
|
+
function on(event, handler) {
|
|
341
|
+
if (event === 'state') {
|
|
342
|
+
const h = handler;
|
|
343
|
+
stateSubs.add(h);
|
|
344
|
+
return () => stateSubs.delete(h);
|
|
345
|
+
}
|
|
346
|
+
const h = handler;
|
|
347
|
+
loadSubs.add(h);
|
|
348
|
+
return () => loadSubs.delete(h);
|
|
349
|
+
}
|
|
350
|
+
async function ensureReady() {
|
|
351
|
+
if (state === 'disposed')
|
|
352
|
+
throw new Error('engine disposed');
|
|
353
|
+
await handshake;
|
|
354
|
+
if (state === 'ready')
|
|
355
|
+
return;
|
|
356
|
+
const seq = nextSeq();
|
|
357
|
+
const p = new Promise((resolve, reject) => {
|
|
358
|
+
pending.set(seq, { resolve, reject });
|
|
359
|
+
});
|
|
360
|
+
send({ kind: 'ensure-ready', seq });
|
|
361
|
+
await p;
|
|
362
|
+
}
|
|
363
|
+
async function* generate(messages, genOpts) {
|
|
364
|
+
if (disposed || state === 'disposed') {
|
|
365
|
+
yield { kind: 'error', message: 'engine disposed', recoverable: false };
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
try {
|
|
369
|
+
await handshake;
|
|
370
|
+
}
|
|
371
|
+
catch (e) {
|
|
372
|
+
yield {
|
|
373
|
+
kind: 'error',
|
|
374
|
+
message: e instanceof Error ? e.message : String(e),
|
|
375
|
+
recoverable: false,
|
|
376
|
+
};
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
const seq = nextSeq();
|
|
380
|
+
const slot = { queue: [], done: false, resolver: null };
|
|
381
|
+
streams.set(seq, slot);
|
|
382
|
+
// GenerateOpts.signal can't cross the wire; observe locally and
|
|
383
|
+
// forward as a generate-abort frame.
|
|
384
|
+
const localSignal = genOpts?.signal;
|
|
385
|
+
const abortHandler = () => send({ kind: 'generate-abort', seq });
|
|
386
|
+
if (localSignal) {
|
|
387
|
+
if (localSignal.aborted) {
|
|
388
|
+
send({ kind: 'generate-abort', seq });
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
localSignal.addEventListener('abort', abortHandler, { once: true });
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
// Strip non-serializable fields from the wire payload. AbortSignal
|
|
395
|
+
// (and any future host-only fields) shouldn't be cloned.
|
|
396
|
+
const wireOpts = genOpts ? stripNonSerializable(genOpts) : undefined;
|
|
397
|
+
send({
|
|
398
|
+
kind: 'generate-start',
|
|
399
|
+
seq,
|
|
400
|
+
messages: messages,
|
|
401
|
+
...(wireOpts ? { opts: wireOpts } : {}),
|
|
402
|
+
});
|
|
403
|
+
try {
|
|
404
|
+
while (true) {
|
|
405
|
+
if (slot.queue.length === 0) {
|
|
406
|
+
if (slot.done)
|
|
407
|
+
break;
|
|
408
|
+
await new Promise((r) => {
|
|
409
|
+
slot.resolver = r;
|
|
410
|
+
});
|
|
411
|
+
continue;
|
|
412
|
+
}
|
|
413
|
+
const next = slot.queue.shift();
|
|
414
|
+
if (next)
|
|
415
|
+
yield next;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
finally {
|
|
419
|
+
streams.delete(seq);
|
|
420
|
+
if (localSignal)
|
|
421
|
+
localSignal.removeEventListener('abort', abortHandler);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
async function dispose() {
|
|
425
|
+
if (disposed) {
|
|
426
|
+
state = 'disposed';
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
disposed = true;
|
|
430
|
+
// Fail any in-flight handshake so callers awaiting ensureReady
|
|
431
|
+
// through it unblock immediately.
|
|
432
|
+
clearTimeout(handshakeTimer);
|
|
433
|
+
handshakeReject?.(new Error('engine disposed'));
|
|
434
|
+
handshakeResolve = null;
|
|
435
|
+
handshakeReject = null;
|
|
436
|
+
const seq = nextSeq();
|
|
437
|
+
const p = new Promise((resolve, reject) => {
|
|
438
|
+
pending.set(seq, { resolve, reject });
|
|
439
|
+
});
|
|
440
|
+
port.postMessage({ kind: 'dispose', seq });
|
|
441
|
+
// Race the ack against a short grace period — a dead host (worker
|
|
442
|
+
// already terminated, channel closed) must not hang dispose forever.
|
|
443
|
+
const grace = new Promise((resolve) => setTimeout(resolve, 250));
|
|
444
|
+
try {
|
|
445
|
+
await Promise.race([p, grace]);
|
|
446
|
+
}
|
|
447
|
+
catch {
|
|
448
|
+
// Best-effort: even if the host rejects, the client is gone.
|
|
449
|
+
}
|
|
450
|
+
// Drain pending RPCs and streams so awaiters don't hang forever.
|
|
451
|
+
for (const [, pend] of pending)
|
|
452
|
+
pend.reject(new Error('engine disposed'));
|
|
453
|
+
pending.clear();
|
|
454
|
+
for (const [, slot] of streams) {
|
|
455
|
+
slot.done = true;
|
|
456
|
+
slot.queue.push({ kind: 'error', message: 'engine disposed', recoverable: false });
|
|
457
|
+
const r = slot.resolver;
|
|
458
|
+
slot.resolver = null;
|
|
459
|
+
if (r)
|
|
460
|
+
r();
|
|
461
|
+
}
|
|
462
|
+
setState('disposed');
|
|
463
|
+
stateSubs.clear();
|
|
464
|
+
loadSubs.clear();
|
|
465
|
+
port.removeEventListener('message', onMessage);
|
|
466
|
+
}
|
|
467
|
+
return {
|
|
468
|
+
get model() {
|
|
469
|
+
return model;
|
|
470
|
+
},
|
|
471
|
+
get state() {
|
|
472
|
+
return state;
|
|
473
|
+
},
|
|
474
|
+
get capabilities() {
|
|
475
|
+
return capabilities;
|
|
476
|
+
},
|
|
477
|
+
ensureReady,
|
|
478
|
+
on,
|
|
479
|
+
generate,
|
|
480
|
+
dispose,
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
484
|
+
/**
|
|
485
|
+
* Drop fields that can't survive structured clone (AbortSignal,
|
|
486
|
+
* functions). Today only `signal` qualifies; we forward everything
|
|
487
|
+
* else verbatim so future options pass through automatically.
|
|
488
|
+
*/
|
|
489
|
+
function stripNonSerializable(o) {
|
|
490
|
+
const { signal: _signal, ...rest } = o;
|
|
491
|
+
return rest;
|
|
492
|
+
}
|
|
493
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@inbrowser/model",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "On-device LLM engine. Wraps @huggingface/transformers + ONNX Runtime Web behind a narrow Engine surface. Presets ship Gemma 4 (E2B/E4B) configurations. Adapters in subpaths satisfy @inbrowser/relay's InferenceProvider and @inbrowser/agent's LlmClient so a local model is a drop-in replacement for a cloud provider. Worker subpath hosts the engine in a Worker with an identical interface on the main thread.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./presets": {
|
|
14
|
+
"types": "./dist/presets.d.ts",
|
|
15
|
+
"import": "./dist/presets.js"
|
|
16
|
+
},
|
|
17
|
+
"./relay": {
|
|
18
|
+
"types": "./dist/adapters/relay.d.ts",
|
|
19
|
+
"import": "./dist/adapters/relay.js"
|
|
20
|
+
},
|
|
21
|
+
"./agent": {
|
|
22
|
+
"types": "./dist/adapters/agent.d.ts",
|
|
23
|
+
"import": "./dist/adapters/agent.js"
|
|
24
|
+
},
|
|
25
|
+
"./worker": {
|
|
26
|
+
"types": "./dist/worker.d.ts",
|
|
27
|
+
"import": "./dist/worker.js"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"files": ["dist", "README.md", "AGENTS.md"],
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsc",
|
|
33
|
+
"test": "bun test",
|
|
34
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"@huggingface/transformers": "^3.0.0 || ^4.0.0",
|
|
38
|
+
"@inbrowser/agent": "workspace:*",
|
|
39
|
+
"@inbrowser/relay": "workspace:*"
|
|
40
|
+
},
|
|
41
|
+
"peerDependenciesMeta": {
|
|
42
|
+
"@huggingface/transformers": {
|
|
43
|
+
"optional": false
|
|
44
|
+
},
|
|
45
|
+
"@inbrowser/agent": {
|
|
46
|
+
"optional": true
|
|
47
|
+
},
|
|
48
|
+
"@inbrowser/relay": {
|
|
49
|
+
"optional": true
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@huggingface/transformers": "^4.2.0",
|
|
54
|
+
"@inbrowser/agent": "workspace:*",
|
|
55
|
+
"@inbrowser/relay": "workspace:*",
|
|
56
|
+
"@types/bun": "latest",
|
|
57
|
+
"typescript": "^5.7.0"
|
|
58
|
+
},
|
|
59
|
+
"repository": {
|
|
60
|
+
"type": "git",
|
|
61
|
+
"url": "git+https://github.com/davideast/inbrowser-agent.git",
|
|
62
|
+
"directory": "packages/model"
|
|
63
|
+
},
|
|
64
|
+
"license": "MIT"
|
|
65
|
+
}
|