@inbrowser/model 0.1.1 → 0.4.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.
Files changed (90) hide show
  1. package/AGENTS.md +44 -18
  2. package/README.md +129 -20
  3. package/dist/contract.d.ts +104 -0
  4. package/dist/contract.d.ts.map +1 -0
  5. package/dist/contract.js +13 -0
  6. package/dist/contract.js.map +1 -0
  7. package/dist/engine-client.d.ts +44 -0
  8. package/dist/engine-client.d.ts.map +1 -0
  9. package/dist/engine-client.js +136 -0
  10. package/dist/engine-client.js.map +1 -0
  11. package/dist/engine.d.ts.map +1 -1
  12. package/dist/engine.js +20 -10
  13. package/dist/engine.js.map +1 -1
  14. package/dist/index.d.ts +25 -8
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +46 -8
  17. package/dist/index.js.map +1 -1
  18. package/dist/presets.d.ts +10 -0
  19. package/dist/presets.d.ts.map +1 -1
  20. package/dist/presets.js +21 -0
  21. package/dist/presets.js.map +1 -1
  22. package/dist/providers/anthropic.d.ts +45 -0
  23. package/dist/providers/anthropic.d.ts.map +1 -0
  24. package/dist/providers/anthropic.js +217 -0
  25. package/dist/providers/anthropic.js.map +1 -0
  26. package/dist/providers/claude-cli.d.ts +135 -0
  27. package/dist/providers/claude-cli.d.ts.map +1 -0
  28. package/dist/providers/claude-cli.js +270 -0
  29. package/dist/providers/claude-cli.js.map +1 -0
  30. package/dist/providers/claude-code.d.ts +188 -0
  31. package/dist/providers/claude-code.d.ts.map +1 -0
  32. package/dist/providers/claude-code.js +182 -0
  33. package/dist/providers/claude-code.js.map +1 -0
  34. package/dist/providers/gemini.d.ts +32 -0
  35. package/dist/providers/gemini.d.ts.map +1 -0
  36. package/dist/providers/gemini.js +441 -0
  37. package/dist/providers/gemini.js.map +1 -0
  38. package/dist/providers/llama-server.d.ts +15 -0
  39. package/dist/providers/llama-server.d.ts.map +1 -0
  40. package/dist/providers/llama-server.js +51 -0
  41. package/dist/providers/llama-server.js.map +1 -0
  42. package/dist/providers/oai-compat.d.ts +113 -0
  43. package/dist/providers/oai-compat.d.ts.map +1 -0
  44. package/dist/providers/oai-compat.js +257 -0
  45. package/dist/providers/oai-compat.js.map +1 -0
  46. package/dist/providers/ollama.d.ts +15 -0
  47. package/dist/providers/ollama.d.ts.map +1 -0
  48. package/dist/providers/ollama.js +51 -0
  49. package/dist/providers/ollama.js.map +1 -0
  50. package/dist/providers/openrouter-oauth.d.ts +67 -0
  51. package/dist/providers/openrouter-oauth.d.ts.map +1 -0
  52. package/dist/providers/openrouter-oauth.js +84 -0
  53. package/dist/providers/openrouter-oauth.js.map +1 -0
  54. package/dist/providers/openrouter.d.ts +16 -0
  55. package/dist/providers/openrouter.d.ts.map +1 -0
  56. package/dist/providers/openrouter.js +27 -0
  57. package/dist/providers/openrouter.js.map +1 -0
  58. package/dist/providers/requesty.d.ts +16 -0
  59. package/dist/providers/requesty.d.ts.map +1 -0
  60. package/dist/providers/requesty.js +27 -0
  61. package/dist/providers/requesty.js.map +1 -0
  62. package/dist/providers/types.d.ts +50 -0
  63. package/dist/providers/types.d.ts.map +1 -0
  64. package/dist/providers/types.js +2 -0
  65. package/dist/providers/types.js.map +1 -0
  66. package/dist/sse.d.ts +20 -0
  67. package/dist/sse.d.ts.map +1 -0
  68. package/dist/sse.js +47 -0
  69. package/dist/sse.js.map +1 -0
  70. package/dist/types.d.ts +2 -13
  71. package/dist/types.d.ts.map +1 -1
  72. package/dist/usage.d.ts +6 -0
  73. package/dist/usage.d.ts.map +1 -0
  74. package/dist/usage.js +55 -0
  75. package/dist/usage.js.map +1 -0
  76. package/dist/with-retry.d.ts +27 -0
  77. package/dist/with-retry.d.ts.map +1 -0
  78. package/dist/with-retry.js +55 -0
  79. package/dist/with-retry.js.map +1 -0
  80. package/dist/worker.d.ts +1 -1
  81. package/dist/worker.js +1 -1
  82. package/package.json +14 -30
  83. package/dist/adapters/agent.d.ts +0 -19
  84. package/dist/adapters/agent.d.ts.map +0 -1
  85. package/dist/adapters/agent.js +0 -96
  86. package/dist/adapters/agent.js.map +0 -1
  87. package/dist/adapters/relay.d.ts +0 -17
  88. package/dist/adapters/relay.d.ts.map +0 -1
  89. package/dist/adapters/relay.js +0 -90
  90. package/dist/adapters/relay.js.map +0 -1
package/package.json CHANGED
@@ -1,58 +1,39 @@
1
1
  {
2
2
  "name": "@inbrowser/model",
3
- "version": "0.1.1",
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.",
3
+ "version": "0.4.0",
4
+ "description": "The model layer for the inbrowser stack: it OWNS the shared ModelClient contract that @inbrowser/relay (transport) and @inbrowser/agent (runtime) both consume, the cloud provider factories (Gemini, OpenRouter, Requesty, Anthropic, Ollama, Claude-CLI, Claude-Code) that each return a ModelClient, a withRetry decorator, and the on-device LLM engine (lazy-loads @huggingface/transformers + ONNX Runtime Web behind a narrow EngineEvent-streaming Engine surface; Gemma 4 + Qwen + SmolLM2 presets; in-worker host/connect helpers). The engine is also a ModelClient via createEngineModelClient. Everything is exported from the package root.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
+ "sideEffects": false,
8
9
  "exports": {
9
10
  ".": {
10
11
  "types": "./dist/index.d.ts",
11
12
  "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
13
  }
29
14
  },
30
15
  "files": ["dist", "README.md", "AGENTS.md"],
31
16
  "scripts": {
32
17
  "build": "tsc",
18
+ "prepublishOnly": "bun run build",
33
19
  "test": "bun test",
34
20
  "typecheck": "tsc -p tsconfig.json --noEmit"
35
21
  },
36
22
  "peerDependencies": {
37
- "@huggingface/transformers": "^3.0.0 || ^4.0.0",
38
- "@inbrowser/agent": "0.2.0",
39
- "@inbrowser/relay": "0.2.1"
23
+ "@anthropic-ai/claude-agent-sdk": "^0.3.0",
24
+ "@huggingface/transformers": "^3.0.0 || ^4.0.0"
40
25
  },
41
26
  "peerDependenciesMeta": {
42
- "@huggingface/transformers": {
43
- "optional": false
44
- },
45
- "@inbrowser/agent": {
27
+ "@anthropic-ai/claude-agent-sdk": {
46
28
  "optional": true
47
29
  },
48
- "@inbrowser/relay": {
49
- "optional": true
30
+ "@huggingface/transformers": {
31
+ "optional": false
50
32
  }
51
33
  },
52
34
  "devDependencies": {
35
+ "@anthropic-ai/claude-agent-sdk": "^0.3.0",
53
36
  "@huggingface/transformers": "^4.2.0",
54
- "@inbrowser/agent": "0.2.0",
55
- "@inbrowser/relay": "0.2.1",
56
37
  "@types/bun": "latest",
57
38
  "typescript": "^5.7.0"
58
39
  },
@@ -61,5 +42,8 @@
61
42
  "url": "git+https://github.com/davideast/inbrowser-agent.git",
62
43
  "directory": "packages/model"
63
44
  },
64
- "license": "MIT"
45
+ "license": "MIT",
46
+ "publishConfig": {
47
+ "access": "public"
48
+ }
65
49
  }
@@ -1,19 +0,0 @@
1
- /**
2
- * Adapt an on-device `Engine` to `@inbrowser/agent`'s `LlmClient`.
3
- * The agent runtime then drives a local model identically to a
4
- * cloud provider — same `chat(req, signal) → AsyncIterable<ChatEvent>`
5
- * surface.
6
- *
7
- * Tool calling: when `req.toolUseEnabled` is true and the engine
8
- * doesn't natively support tools, the adapter declines (yields a
9
- * single `error` event). The runtime can layer a tool-use polyfill
10
- * (`withToolUsePolyfill`) over this client to lift it into a
11
- * tool-capable one via prompt-engineered tool calling.
12
- *
13
- * `@inbrowser/agent` is a peer dep; this subpath is the only point
14
- * in `@inbrowser/model` that imports from it.
15
- */
16
- import type { LlmClient } from '@inbrowser/agent';
17
- import type { Engine } from '../types.js';
18
- export declare function createLocalLlmClient(engine: Engine, id: string): LlmClient;
19
- //# sourceMappingURL=agent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/adapters/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAA0B,SAAS,EAAqB,MAAM,kBAAkB,CAAC;AAC7F,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAC;AAEzD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,CAQ1E"}
@@ -1,96 +0,0 @@
1
- /**
2
- * Adapt an on-device `Engine` to `@inbrowser/agent`'s `LlmClient`.
3
- * The agent runtime then drives a local model identically to a
4
- * cloud provider — same `chat(req, signal) → AsyncIterable<ChatEvent>`
5
- * surface.
6
- *
7
- * Tool calling: when `req.toolUseEnabled` is true and the engine
8
- * doesn't natively support tools, the adapter declines (yields a
9
- * single `error` event). The runtime can layer a tool-use polyfill
10
- * (`withToolUsePolyfill`) over this client to lift it into a
11
- * tool-capable one via prompt-engineered tool calling.
12
- *
13
- * `@inbrowser/agent` is a peer dep; this subpath is the only point
14
- * in `@inbrowser/model` that imports from it.
15
- */
16
- export function createLocalLlmClient(engine, id) {
17
- return {
18
- id,
19
- supportsTools: engine.capabilities.supportsTools,
20
- chat(req, signal) {
21
- return drive(engine, req, signal);
22
- },
23
- };
24
- }
25
- async function* drive(engine, req, signal) {
26
- if (req.toolUseEnabled && !engine.capabilities.supportsTools) {
27
- yield {
28
- kind: 'error',
29
- message: 'engine does not natively support tools — pick a tools-capable preset (see capabilities.supportsTools)',
30
- };
31
- return;
32
- }
33
- const messages = toEngineMessages(req.messages);
34
- let promptTokens = 0;
35
- let completionTokens = 0;
36
- // Forward `req.tools` only when the request opts into tool use.
37
- // The engine itself gates on `capabilities.supportsTools`; passing
38
- // tools to a non-tools-capable engine is a no-op.
39
- const tools = req.toolUseEnabled && req.tools.length > 0
40
- ? req.tools.map((t) => ({
41
- type: 'function',
42
- function: { name: t.name, description: t.description, parameters: t.parameters },
43
- }))
44
- : undefined;
45
- for await (const evt of engine.generate(messages, { signal, ...(tools ? { tools } : {}) })) {
46
- if (evt.kind === 'token') {
47
- yield { kind: 'text', chunk: evt.text };
48
- continue;
49
- }
50
- if (evt.kind === 'thinking') {
51
- // ChatEvent has its own 'thinking' kind — pass through. The
52
- // engine only emits this when the caller wrapped with
53
- // splitThinking() upstream.
54
- yield { kind: 'thinking', chunk: evt.text };
55
- continue;
56
- }
57
- if (evt.kind === 'tool_call') {
58
- yield {
59
- kind: 'tool_call',
60
- id: evt.id,
61
- name: evt.name,
62
- args: evt.args,
63
- };
64
- continue;
65
- }
66
- if (evt.kind === 'usage') {
67
- promptTokens = evt.promptTokens;
68
- completionTokens = evt.outputTokens;
69
- continue;
70
- }
71
- yield { kind: 'error', message: evt.message };
72
- return;
73
- }
74
- yield {
75
- kind: 'turn_complete',
76
- usage: { promptTokens, completionTokens },
77
- details: { requestedModel: engine.model.modelId },
78
- };
79
- }
80
- function toEngineMessages(messages) {
81
- const out = [];
82
- for (const m of messages) {
83
- if (m.role === 'tool') {
84
- out.push({
85
- role: 'user',
86
- text: `[tool ${m.name ?? ''} result]\n${m.resultJson ?? ''}`,
87
- });
88
- continue;
89
- }
90
- if (m.role === 'system' || m.role === 'user' || m.role === 'assistant') {
91
- out.push({ role: m.role, text: m.text });
92
- }
93
- }
94
- return out;
95
- }
96
- //# sourceMappingURL=agent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/adapters/agent.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * Adapt an on-device `Engine` to `@inbrowser/relay`'s
3
- * `InferenceProvider`. Lets the relay's existing handlers, durable
4
- * storage, and SSE wire format treat a local Gemma model
5
- * indistinguishably from Gemini-over-HTTP.
6
- *
7
- * `NormalizedRequest` fields with no on-device analogue (`apiKey`,
8
- * `provider`, `model` routing) are ignored — the engine is already
9
- * bound to a single model at construction time.
10
- *
11
- * `@inbrowser/relay` is a peer dep; this subpath is the only point
12
- * in `@inbrowser/model` that imports from it.
13
- */
14
- import type { InferenceProvider } from '@inbrowser/relay';
15
- import type { Engine } from '../types.js';
16
- export declare function createLocalInferenceProvider(engine: Engine): InferenceProvider;
17
- //# sourceMappingURL=relay.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../src/adapters/relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAEV,iBAAiB,EAGlB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAC;AAEzD,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CA2D9E"}
@@ -1,90 +0,0 @@
1
- /**
2
- * Adapt an on-device `Engine` to `@inbrowser/relay`'s
3
- * `InferenceProvider`. Lets the relay's existing handlers, durable
4
- * storage, and SSE wire format treat a local Gemma model
5
- * indistinguishably from Gemini-over-HTTP.
6
- *
7
- * `NormalizedRequest` fields with no on-device analogue (`apiKey`,
8
- * `provider`, `model` routing) are ignored — the engine is already
9
- * bound to a single model at construction time.
10
- *
11
- * `@inbrowser/relay` is a peer dep; this subpath is the only point
12
- * in `@inbrowser/model` that imports from it.
13
- */
14
- export function createLocalInferenceProvider(engine) {
15
- return async function* (req) {
16
- const messages = toEngineMessages(req.messages);
17
- const startedAt = performance.now();
18
- // Forward declared tools to the engine when the request brings
19
- // any. The engine itself gates emission on the preset's
20
- // capabilities.supportsTools — passing tools to a non-tools
21
- // preset is a no-op rather than an error so callers can be
22
- // backend-agnostic about which preset they bound to.
23
- const tools = req.tools.length > 0
24
- ? req.tools.map((t) => ({
25
- type: 'function',
26
- function: { name: t.name, description: t.description, parameters: t.parameters },
27
- }))
28
- : undefined;
29
- for await (const evt of engine.generate(messages, {
30
- temperature: req.temperature,
31
- topP: req.topP,
32
- topK: req.topK,
33
- ...(tools ? { tools } : {}),
34
- ...(req.signal ? { signal: req.signal } : {}),
35
- })) {
36
- if (evt.kind === 'token') {
37
- yield { kind: 'text', chunk: evt.text };
38
- continue;
39
- }
40
- if (evt.kind === 'thinking') {
41
- // InferenceEvent has its own 'thinking' kind — pass through.
42
- // The engine only emits this when the caller wrapped with
43
- // splitThinking() upstream.
44
- yield { kind: 'thinking', chunk: evt.text };
45
- continue;
46
- }
47
- if (evt.kind === 'tool_call') {
48
- yield {
49
- kind: 'tool_call',
50
- callId: evt.id,
51
- name: evt.name,
52
- args: evt.args,
53
- };
54
- continue;
55
- }
56
- if (evt.kind === 'usage') {
57
- yield {
58
- kind: 'usage',
59
- promptTokens: evt.promptTokens,
60
- outputTokens: evt.outputTokens,
61
- };
62
- continue;
63
- }
64
- yield { kind: 'error', message: evt.message };
65
- return;
66
- }
67
- void startedAt;
68
- };
69
- }
70
- function toEngineMessages(messages) {
71
- const out = [];
72
- for (const m of messages) {
73
- // The engine vocabulary has no `tool` role — Gemma 4 is toolless.
74
- // Tool turns are flattened into the prior assistant message so the
75
- // model has the context, but the tool-call/result structure is
76
- // dropped. Tool support arrives via the polyfill in @inbrowser/agent.
77
- if (m.role === 'tool') {
78
- out.push({
79
- role: 'user',
80
- text: `[tool ${m.name ?? ''} result]\n${m.resultJson ?? ''}`,
81
- });
82
- continue;
83
- }
84
- if (m.role === 'system' || m.role === 'user' || m.role === 'assistant') {
85
- out.push({ role: m.role, text: m.text ?? '' });
86
- }
87
- }
88
- return out;
89
- }
90
- //# sourceMappingURL=relay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relay.js","sourceRoot":"","sources":["../../src/adapters/relay.ts"],"names":[],"mappings":"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"}