@atomic-chat/core 0.18.5 → 0.19.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 (187) hide show
  1. package/dist/app-daemon.js +5 -0
  2. package/dist/app-daemon.js.map +1 -1
  3. package/dist/cli/main.d.ts +1 -1
  4. package/dist/cli/main.js +5 -0
  5. package/dist/cli/main.js.map +1 -1
  6. package/dist/client/control-client.d.ts +18 -1
  7. package/dist/client/control-client.js +27 -0
  8. package/dist/client/control-client.js.map +1 -1
  9. package/dist/cloud/registry.js +1 -0
  10. package/dist/cloud/registry.js.map +1 -1
  11. package/dist/config/paths.d.ts +4 -0
  12. package/dist/config/paths.js +13 -0
  13. package/dist/config/paths.js.map +1 -1
  14. package/dist/contracts/control-api.d.ts +9 -0
  15. package/dist/contracts/diffusion.d.ts +17 -7
  16. package/dist/contracts/diffusion.js.map +1 -1
  17. package/dist/contracts/engine-builds.d.ts +1 -1
  18. package/dist/contracts/engine-builds.js +1 -1
  19. package/dist/contracts/engine-builds.js.map +1 -1
  20. package/dist/contracts/engines.d.ts +1 -1
  21. package/dist/contracts/engines.js +2 -0
  22. package/dist/contracts/engines.js.map +1 -1
  23. package/dist/contracts/errors.d.ts +9 -1
  24. package/dist/contracts/errors.js.map +1 -1
  25. package/dist/contracts/events.d.ts +6 -1
  26. package/dist/contracts/index.d.ts +1 -0
  27. package/dist/contracts/index.js +1 -0
  28. package/dist/contracts/index.js.map +1 -1
  29. package/dist/contracts/litert-lm.d.ts +97 -0
  30. package/dist/contracts/litert-lm.js +17 -0
  31. package/dist/contracts/litert-lm.js.map +1 -0
  32. package/dist/contracts/model-yml.d.ts +31 -0
  33. package/dist/contracts/model-yml.js +5 -0
  34. package/dist/contracts/model-yml.js.map +1 -1
  35. package/dist/contracts/session.d.ts +5 -1
  36. package/dist/contracts/session.js.map +1 -1
  37. package/dist/contracts/settings.d.ts +10 -1
  38. package/dist/contracts/settings.js.map +1 -1
  39. package/dist/core/app-lease.d.ts +56 -0
  40. package/dist/core/app-lease.js +50 -0
  41. package/dist/core/app-lease.js.map +1 -0
  42. package/dist/core/atomic-core.d.ts +6 -1
  43. package/dist/core/atomic-core.js +6 -0
  44. package/dist/core/atomic-core.js.map +1 -1
  45. package/dist/core/create.js +175 -24
  46. package/dist/core/create.js.map +1 -1
  47. package/dist/diffusion/args.d.ts +8 -0
  48. package/dist/diffusion/args.js +10 -0
  49. package/dist/diffusion/args.js.map +1 -1
  50. package/dist/diffusion/compat.d.ts +3 -3
  51. package/dist/diffusion/compat.js +15 -10
  52. package/dist/diffusion/compat.js.map +1 -1
  53. package/dist/diffusion/recipe.d.ts +19 -2
  54. package/dist/diffusion/recipe.js +43 -20
  55. package/dist/diffusion/recipe.js.map +1 -1
  56. package/dist/diffusion/remote-job.js +6 -7
  57. package/dist/diffusion/remote-job.js.map +1 -1
  58. package/dist/diffusion/service.d.ts +1 -0
  59. package/dist/diffusion/service.js +4 -2
  60. package/dist/diffusion/service.js.map +1 -1
  61. package/dist/diffusion/video-history.js +3 -2
  62. package/dist/diffusion/video-history.js.map +1 -1
  63. package/dist/diffusion/video-recipe.d.ts +4 -1
  64. package/dist/diffusion/video-recipe.js +15 -11
  65. package/dist/diffusion/video-recipe.js.map +1 -1
  66. package/dist/diffusion/workflow.d.ts +2 -1
  67. package/dist/diffusion/workflow.js +3 -1
  68. package/dist/diffusion/workflow.js.map +1 -1
  69. package/dist/downloads/archive.d.ts +2 -1
  70. package/dist/downloads/archive.js +3 -2
  71. package/dist/downloads/archive.js.map +1 -1
  72. package/dist/engine-builds/engines.d.ts +22 -5
  73. package/dist/engine-builds/engines.js +44 -7
  74. package/dist/engine-builds/engines.js.map +1 -1
  75. package/dist/engine-builds/litert-lm.d.ts +29 -0
  76. package/dist/engine-builds/litert-lm.js +119 -0
  77. package/dist/engine-builds/litert-lm.js.map +1 -0
  78. package/dist/engine-builds/manifest.d.ts +55 -1
  79. package/dist/engine-builds/manifest.js +114 -1
  80. package/dist/engine-builds/manifest.js.map +1 -1
  81. package/dist/engine-builds/order.d.ts +2 -1
  82. package/dist/engine-builds/order.js +3 -1
  83. package/dist/engine-builds/order.js.map +1 -1
  84. package/dist/engine-builds/select.d.ts +19 -1
  85. package/dist/engine-builds/select.js +45 -0
  86. package/dist/engine-builds/select.js.map +1 -1
  87. package/dist/engine-builds/service.d.ts +8 -5
  88. package/dist/engine-builds/service.js +11 -4
  89. package/dist/engine-builds/service.js.map +1 -1
  90. package/dist/engines/service.d.ts +3 -1
  91. package/dist/engines/service.js +4 -1
  92. package/dist/engines/service.js.map +1 -1
  93. package/dist/router/resolve.d.ts +25 -4
  94. package/dist/router/resolve.js +34 -3
  95. package/dist/router/resolve.js.map +1 -1
  96. package/dist/runtime/litert-lm/accelerators.d.ts +54 -0
  97. package/dist/runtime/litert-lm/accelerators.js +176 -0
  98. package/dist/runtime/litert-lm/accelerators.js.map +1 -0
  99. package/dist/runtime/litert-lm/check.d.ts +44 -0
  100. package/dist/runtime/litert-lm/check.js +113 -0
  101. package/dist/runtime/litert-lm/check.js.map +1 -0
  102. package/dist/runtime/litert-lm/host/args.d.ts +47 -0
  103. package/dist/runtime/litert-lm/host/args.js +108 -0
  104. package/dist/runtime/litert-lm/host/args.js.map +1 -0
  105. package/dist/runtime/litert-lm/host/ffi-bun.d.ts +16 -0
  106. package/dist/runtime/litert-lm/host/ffi-bun.js +535 -0
  107. package/dist/runtime/litert-lm/host/ffi-bun.js.map +1 -0
  108. package/dist/runtime/litert-lm/host/library.d.ts +113 -0
  109. package/dist/runtime/litert-lm/host/library.js +38 -0
  110. package/dist/runtime/litert-lm/host/library.js.map +1 -0
  111. package/dist/runtime/litert-lm/host/openai.d.ts +97 -0
  112. package/dist/runtime/litert-lm/host/openai.js +355 -0
  113. package/dist/runtime/litert-lm/host/openai.js.map +1 -0
  114. package/dist/runtime/litert-lm/host/pool.d.ts +51 -0
  115. package/dist/runtime/litert-lm/host/pool.js +114 -0
  116. package/dist/runtime/litert-lm/host/pool.js.map +1 -0
  117. package/dist/runtime/litert-lm/host/run.d.ts +48 -0
  118. package/dist/runtime/litert-lm/host/run.js +169 -0
  119. package/dist/runtime/litert-lm/host/run.js.map +1 -0
  120. package/dist/runtime/litert-lm/host/server.d.ts +28 -0
  121. package/dist/runtime/litert-lm/host/server.js +242 -0
  122. package/dist/runtime/litert-lm/host/server.js.map +1 -0
  123. package/dist/runtime/litert-lm/host-process.d.ts +44 -0
  124. package/dist/runtime/litert-lm/host-process.js +99 -0
  125. package/dist/runtime/litert-lm/host-process.js.map +1 -0
  126. package/dist/runtime/litert-lm/index.d.ts +10 -0
  127. package/dist/runtime/litert-lm/index.js +11 -0
  128. package/dist/runtime/litert-lm/index.js.map +1 -0
  129. package/dist/runtime/litert-lm/litert-host.d.ts +17 -0
  130. package/dist/runtime/litert-lm/litert-host.js +22 -0
  131. package/dist/runtime/litert-lm/litert-host.js.map +1 -0
  132. package/dist/runtime/litert-lm/model-yml.d.ts +8 -0
  133. package/dist/runtime/litert-lm/model-yml.js +67 -0
  134. package/dist/runtime/litert-lm/model-yml.js.map +1 -0
  135. package/dist/runtime/litert-lm/npu.d.ts +11 -0
  136. package/dist/runtime/litert-lm/npu.js +24 -0
  137. package/dist/runtime/litert-lm/npu.js.map +1 -0
  138. package/dist/runtime/litert-lm/runtime.d.ts +99 -0
  139. package/dist/runtime/litert-lm/runtime.js +354 -0
  140. package/dist/runtime/litert-lm/runtime.js.map +1 -0
  141. package/dist/runtime/llamacpp/runtime.d.ts +4 -1
  142. package/dist/runtime/llamacpp/runtime.js +4 -1
  143. package/dist/runtime/llamacpp/runtime.js.map +1 -1
  144. package/dist/runtime/shared/external-sessions.js +1 -0
  145. package/dist/runtime/shared/external-sessions.js.map +1 -1
  146. package/dist/server/clients.d.ts +6 -0
  147. package/dist/server/clients.js +11 -0
  148. package/dist/server/clients.js.map +1 -1
  149. package/dist/server/control/router.js +2 -0
  150. package/dist/server/control/router.js.map +1 -1
  151. package/dist/server/control/routes/litert-lm.d.ts +11 -0
  152. package/dist/server/control/routes/litert-lm.js +33 -0
  153. package/dist/server/control/routes/litert-lm.js.map +1 -0
  154. package/dist/server/control/routes/public-server.js +22 -0
  155. package/dist/server/control/routes/public-server.js.map +1 -1
  156. package/dist/server/control/types.d.ts +16 -1
  157. package/dist/server/control/types.js.map +1 -1
  158. package/dist/server/http.js +3 -0
  159. package/dist/server/http.js.map +1 -1
  160. package/dist/server/public/errors.d.ts +17 -0
  161. package/dist/server/public/errors.js +28 -0
  162. package/dist/server/public/errors.js.map +1 -1
  163. package/dist/server/public/forward.d.ts +20 -1
  164. package/dist/server/public/forward.js +72 -19
  165. package/dist/server/public/forward.js.map +1 -1
  166. package/dist/server/public/listing.d.ts +6 -0
  167. package/dist/server/public/listing.js +25 -3
  168. package/dist/server/public/listing.js.map +1 -1
  169. package/dist/server/public/responses.js +21 -10
  170. package/dist/server/public/responses.js.map +1 -1
  171. package/dist/server/public/subscription.js +2 -2
  172. package/dist/server/public/subscription.js.map +1 -1
  173. package/dist/server/public/telemetry.d.ts +7 -1
  174. package/dist/server/public/telemetry.js +11 -3
  175. package/dist/server/public/telemetry.js.map +1 -1
  176. package/dist/server/public/trace.d.ts +8 -4
  177. package/dist/server/public/trace.js +15 -7
  178. package/dist/server/public/trace.js.map +1 -1
  179. package/dist/server/public/types.d.ts +5 -0
  180. package/dist/server/public/videos-params.js +6 -1
  181. package/dist/server/public/videos-params.js.map +1 -1
  182. package/dist/settings/schema/litert-lm.json +37 -0
  183. package/dist/settings/schema.js +9 -0
  184. package/dist/settings/schema.js.map +1 -1
  185. package/dist/version.d.ts +1 -1
  186. package/dist/version.js +1 -1
  187. package/package.json +6 -1
@@ -0,0 +1,113 @@
1
+ /**
2
+ * `POST /models/litert-lm/check` (openspec change `add-litert-lm-runtime`, task 6.5): whether a
3
+ * variant would run here. Before a download, from what core already knows — the platform, this
4
+ * machine's Intel NPU generation, the active build, whether OpenVINO is prepared — never the network.
5
+ * For a file on disk, also from the file itself (`litert-host inspect`), whose facts come back in the
6
+ * answer for the client to write into `model.yml`.
7
+ */
8
+ import { realpath } from 'node:fs/promises';
9
+ import { isAbsolute, relative, resolve } from 'node:path';
10
+ import { AtomicCoreError, LITERT_LM_BACKENDS, LITERT_LM_NPUS } from '../../contracts/index.js';
11
+ import { compareVersions } from '../../backend/index.js';
12
+ import { readLiteRtLmBlock } from './model-yml.js';
13
+ import { backendRunsOn } from './runtime.js';
14
+ const verdict = (v, reason, metadata) => ({ verdict: v, reason, ...(metadata ? { metadata } : {}) });
15
+ /** The verdict for a variant (`backend`, `npu`, `min_runtime_version`), and for a file its facts. */
16
+ export function liteRtLmVerdict(facts, request, file) {
17
+ const backend = request.backend ?? '';
18
+ if (!LITERT_LM_BACKENDS.some((known) => known === backend))
19
+ return verdict('platform-unsupported', `This core runs no LiteRT-LM variant on the "${backend}" backend.`, file);
20
+ if (!backendRunsOn(facts.platform, backend))
21
+ return verdict('platform-unsupported', `LiteRT-LM runs ${backend.toUpperCase()} variants on Windows x64 only.`, file);
22
+ if (backend === 'npu') {
23
+ if (!LITERT_LM_NPUS.some((known) => known === request.npu))
24
+ return verdict('platform-unsupported', `This core runs no LiteRT-LM variant for the "${request.npu ?? ''}" NPU.`, file);
25
+ if (facts.npu === null)
26
+ return verdict('accelerator-unavailable', 'This computer has no Intel NPU LiteRT-LM has models for.', file);
27
+ if (facts.npu !== request.npu)
28
+ return verdict('accelerator-unavailable', `This variant is built for the ${request.npu} NPU; this computer has ${facts.npu}.`, file);
29
+ }
30
+ if (!facts.build)
31
+ return verdict('engine-not-installed', 'LiteRT-LM is not installed on this computer.', file);
32
+ if (file && !file.backends.includes(backend))
33
+ return verdict('platform-unsupported', `This file runs on ${file.backends.join(', ') || 'no backend'}, not ${backend}.`, file);
34
+ const needs = file?.min_runtime_version ?? request.min_runtime_version ?? null;
35
+ if (needs && compareVersions(needs, facts.build.version) > 0)
36
+ return verdict('requires-newer-engine', `This model needs LiteRT-LM ${needs}; the installed one is ${facts.build.version}.`, file);
37
+ if (backend === 'npu' && !facts.openVinoPrepared)
38
+ return verdict('accelerator-not-prepared', 'OpenVINO is not prepared yet; prepare it on the LiteRT-LM page.', file);
39
+ return verdict('ok', null, file);
40
+ }
41
+ const VERSION_RE = /^\d+\.\d+(\.\d+)?$/;
42
+ const FIELDS = ['backend', 'npu', 'min_runtime_version', 'path', 'model_id'];
43
+ /** The request body, strictly: a variant, a path with its backend, or a model id. */
44
+ export function parseLiteRtLmCheckRequest(body) {
45
+ const invalid = (why) => {
46
+ throw new AtomicCoreError('INVALID_ARGUMENT', why);
47
+ };
48
+ if (typeof body !== 'object' || body === null || Array.isArray(body))
49
+ return invalid('The request body must be a JSON object.');
50
+ const record = body;
51
+ const extra = Object.keys(record).filter((key) => !FIELDS.some((field) => field === key));
52
+ if (extra.length > 0)
53
+ invalid(`The request has fields this core does not know: ${extra.sort().join(', ')}.`);
54
+ const out = {};
55
+ for (const key of FIELDS) {
56
+ const value = record[key];
57
+ if (value === undefined)
58
+ continue;
59
+ if (typeof value !== 'string' || value === '')
60
+ invalid(`${key} must be text.`);
61
+ out[key] = value;
62
+ }
63
+ if (out.min_runtime_version !== undefined && !VERSION_RE.test(out.min_runtime_version))
64
+ invalid('min_runtime_version must be X.Y or X.Y.Z.');
65
+ if (out.model_id !== undefined) {
66
+ if (Object.keys(out).length > 1)
67
+ invalid('model_id is checked alone: its variant comes from model.yml.');
68
+ return out;
69
+ }
70
+ if (out.backend === undefined)
71
+ invalid('backend is required for a variant or a file.');
72
+ return out;
73
+ }
74
+ export class LiteRtLmCheckService {
75
+ deps;
76
+ constructor(deps) {
77
+ this.deps = deps;
78
+ }
79
+ /** A path inside the models root, links resolved, or `INVALID_ARGUMENT`. */
80
+ async inRoot(path) {
81
+ const refuse = () => new AtomicCoreError('INVALID_ARGUMENT', 'path must be a file inside the LiteRT-LM models folder.');
82
+ if (!isAbsolute(path))
83
+ throw new AtomicCoreError('INVALID_ARGUMENT', 'path must be absolute.');
84
+ const root = await realpath(this.deps.modelsDir).catch(() => resolve(this.deps.modelsDir));
85
+ // A file that is not there yet is judged by its spelling; one that is, by where its links lead.
86
+ const full = await realpath(path).catch(() => resolve(path));
87
+ const rel = relative(root, full);
88
+ if (rel === '' || rel.startsWith('..') || isAbsolute(rel))
89
+ throw refuse();
90
+ return resolve(path);
91
+ }
92
+ async check(request) {
93
+ let variant = request;
94
+ let file = request.path !== undefined ? await this.inRoot(request.path) : null;
95
+ if (request.model_id !== undefined) {
96
+ const yml = await this.deps.registry.read(request.model_id);
97
+ const block = readLiteRtLmBlock(yml);
98
+ variant = { backend: block.backend, ...(block.npu ? { npu: block.npu } : {}) };
99
+ // The registry's own path: an installed model may be a link, which the runtime loads as it is.
100
+ file = this.deps.registry.resolvePaths(yml).modelPath;
101
+ }
102
+ const build = (await this.deps.resolveBuild()) ?? null;
103
+ const facts = {
104
+ platform: this.deps.platform,
105
+ build,
106
+ npu: await this.deps.npuGeneration(),
107
+ openVinoPrepared: (await this.deps.openVinoLibs()) !== undefined,
108
+ };
109
+ const metadata = file && build ? await this.deps.inspect(build.dir, file) : null;
110
+ return liteRtLmVerdict(facts, variant, metadata);
111
+ }
112
+ }
113
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/runtime/litert-lm/check.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAS9F,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAS5C,MAAM,OAAO,GAAG,CACd,CAAiC,EACjC,MAAqB,EACrB,QAAqC,EAChB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;AAErF,qGAAqG;AACrG,MAAM,UAAU,eAAe,CAC7B,KAAyB,EACzB,OAA8E,EAC9E,IAAiC;IAEjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAA;IACrC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC;QACxD,OAAO,OAAO,CACZ,sBAAsB,EACtB,+CAA+C,OAAO,YAAY,EAClE,IAAI,CACL,CAAA;IACH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,OAA8C,CAAC;QAChF,OAAO,OAAO,CACZ,sBAAsB,EACtB,kBAAkB,OAAO,CAAC,WAAW,EAAE,gCAAgC,EACvE,IAAI,CACL,CAAA;IACH,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC;YACxD,OAAO,OAAO,CACZ,sBAAsB,EACtB,gDAAgD,OAAO,CAAC,GAAG,IAAI,EAAE,QAAQ,EACzE,IAAI,CACL,CAAA;QACH,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI;YACpB,OAAO,OAAO,CACZ,yBAAyB,EACzB,0DAA0D,EAC1D,IAAI,CACL,CAAA;QACH,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG;YAC3B,OAAO,OAAO,CACZ,yBAAyB,EACzB,iCAAiC,OAAO,CAAC,GAAG,2BAA2B,KAAK,CAAC,GAAG,GAAG,EACnF,IAAI,CACL,CAAA;IACL,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,KAAK;QACd,OAAO,OAAO,CAAC,sBAAsB,EAAE,8CAA8C,EAAE,IAAI,CAAC,CAAA;IAC9F,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAA8C,CAAC;QACjF,OAAO,OAAO,CACZ,sBAAsB,EACtB,qBAAqB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,YAAY,SAAS,OAAO,GAAG,EAChF,IAAI,CACL,CAAA;IACH,MAAM,KAAK,GAAG,IAAI,EAAE,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,IAAI,IAAI,CAAA;IAC9E,IAAI,KAAK,IAAI,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1D,OAAO,OAAO,CACZ,uBAAuB,EACvB,8BAA8B,KAAK,0BAA0B,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,EACnF,IAAI,CACL,CAAA;IACH,IAAI,OAAO,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,gBAAgB;QAC9C,OAAO,OAAO,CACZ,0BAA0B,EAC1B,iEAAiE,EACjE,IAAI,CACL,CAAA;IACH,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,GAAG,oBAAoB,CAAA;AACvC,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,UAAU,CAAU,CAAA;AAErF,qFAAqF;AACrF,MAAM,UAAU,yBAAyB,CAAC,IAAa;IACrD,MAAM,OAAO,GAAG,CAAC,GAAW,EAAS,EAAE;QACrC,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;IACpD,CAAC,CAAA;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAClE,OAAO,OAAO,CAAC,yCAAyC,CAAC,CAAA;IAC3D,MAAM,MAAM,GAAG,IAA+B,CAAA;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAA;IACzF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,mDAAmD,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5G,MAAM,GAAG,GAAyB,EAAE,CAAA;IACpC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,IAAI,KAAK,KAAK,SAAS;YAAE,SAAQ;QACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE;YAAE,OAAO,CAAC,GAAG,GAAG,gBAAgB,CAAC,CAAA;QAC9E,GAAG,CAAC,GAAG,CAAC,GAAG,KAAe,CAAA;IAC5B,CAAC;IACD,IAAI,GAAG,CAAC,mBAAmB,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACpF,OAAO,CAAC,2CAA2C,CAAC,CAAA;IACtD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,8DAA8D,CAAC,CAAA;QACxG,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,8CAA8C,CAAC,CAAA;IACtF,OAAO,GAAG,CAAA;AACZ,CAAC;AAcD,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,IAAuB;QAAvB,SAAI,GAAJ,IAAI,CAAmB;IAAG,CAAC;IAExD,4EAA4E;IACpE,KAAK,CAAC,MAAM,CAAC,IAAY;QAC/B,MAAM,MAAM,GAAG,GAAG,EAAE,CAClB,IAAI,eAAe,CAAC,kBAAkB,EAAE,yDAAyD,CAAC,CAAA;QACpG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAA;QAC9F,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;QAC1F,gGAAgG;QAChG,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAChC,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM,MAAM,EAAE,CAAA;QACzE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAA6B;QACvC,IAAI,OAAO,GAA0E,OAAO,CAAA;QAC5F,IAAI,IAAI,GAAkB,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC7F,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAC3D,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;YACpC,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;YAC9E,+FAA+F;YAC/F,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,SAAS,CAAA;QACvD,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,IAAI,CAAA;QACtD,MAAM,KAAK,GAAuB;YAChC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAC5B,KAAK;YACL,GAAG,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACpC,gBAAgB,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,SAAS;SACjE,CAAA;QACD,MAAM,QAAQ,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAChF,OAAO,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAClD,CAAC;CACF"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * The arguments of the hidden `litert-host` mode (openspec change `add-litert-lm-runtime`, task 5.1).
3
+ * Core is the only caller, so the parse is strict: anything unknown is a bug on core's side.
4
+ *
5
+ * litert-host probe --lib <build>
6
+ * litert-host inspect --lib <build> <file>
7
+ * litert-host serve --lib <build> --engine-version <v> --model <file> --backend cpu|gpu|npu
8
+ * --max-tokens <n> --port <p, 0 for any> --cache <dir> --id <model id>
9
+ * [--dispatch <dir> --ov-libs <dir>] [--speculative] [--reasoning]
10
+ */
11
+ export declare const LITERT_LM_BACKENDS: readonly ["cpu", "gpu", "npu"];
12
+ export type LiteRtLmBackend = (typeof LITERT_LM_BACKENDS)[number];
13
+ export type LiteRtHostArgs = {
14
+ mode: 'probe';
15
+ lib: string;
16
+ } | {
17
+ mode: 'inspect';
18
+ lib: string;
19
+ file: string;
20
+ } | {
21
+ mode: 'serve';
22
+ /** The build directory, holding `lib/`. */
23
+ lib: string;
24
+ /** The build's LiteRT-LM version, checked against the file's `min_runtime_version`. */
25
+ engineVersion: string;
26
+ model: string;
27
+ backend: LiteRtLmBackend;
28
+ /** The engine's `max_num_tokens`, already cut to what the file allows. */
29
+ maxTokens: number;
30
+ port: number;
31
+ /** The library's `cache_dir`; created when missing. */
32
+ cache: string;
33
+ /** The id `/v1/models` lists: core's session id. */
34
+ id: string;
35
+ /** NPU only: the build's `vendors/intel_openvino/dispatch`. */
36
+ dispatch?: string;
37
+ /** NPU only: the prepared OpenVINO libraries. */
38
+ ovLibs?: string;
39
+ /** Use the file's draft model when it has one. */
40
+ speculative: boolean;
41
+ /** Think by default (`model.yml` `reasoning`); a request may still turn it off. */
42
+ reasoning: boolean;
43
+ };
44
+ export declare class LiteRtHostUsageError extends Error {
45
+ constructor(message: string);
46
+ }
47
+ export declare function parseLiteRtHostArgs(argv: readonly string[]): LiteRtHostArgs;
@@ -0,0 +1,108 @@
1
+ /**
2
+ * The arguments of the hidden `litert-host` mode (openspec change `add-litert-lm-runtime`, task 5.1).
3
+ * Core is the only caller, so the parse is strict: anything unknown is a bug on core's side.
4
+ *
5
+ * litert-host probe --lib <build>
6
+ * litert-host inspect --lib <build> <file>
7
+ * litert-host serve --lib <build> --engine-version <v> --model <file> --backend cpu|gpu|npu
8
+ * --max-tokens <n> --port <p, 0 for any> --cache <dir> --id <model id>
9
+ * [--dispatch <dir> --ov-libs <dir>] [--speculative] [--reasoning]
10
+ */
11
+ import { parseArgs } from 'node:util';
12
+ export const LITERT_LM_BACKENDS = ['cpu', 'gpu', 'npu'];
13
+ export class LiteRtHostUsageError extends Error {
14
+ constructor(message) {
15
+ super(message);
16
+ this.name = 'LiteRtHostUsageError';
17
+ }
18
+ }
19
+ const required = (values, key) => {
20
+ const value = values[key];
21
+ if (typeof value !== 'string' || value === '')
22
+ throw new LiteRtHostUsageError(`--${key} is required`);
23
+ return value;
24
+ };
25
+ const VERSION_RE = /^\d+\.\d+\.\d+$/;
26
+ function wholeNumber(values, key, min, max) {
27
+ const raw = required(values, key);
28
+ const value = Number(raw);
29
+ if (!Number.isSafeInteger(value) || value < min || value > max)
30
+ throw new LiteRtHostUsageError(`--${key} ${raw} is not a whole number from ${min} to ${max}`);
31
+ return value;
32
+ }
33
+ export function parseLiteRtHostArgs(argv) {
34
+ const [mode, ...rest] = argv;
35
+ try {
36
+ if (mode === 'probe') {
37
+ const { values } = parseArgs({ args: rest, options: { lib: { type: 'string' } }, strict: true });
38
+ return { mode, lib: required(values, 'lib') };
39
+ }
40
+ if (mode === 'inspect') {
41
+ const { values, positionals } = parseArgs({
42
+ args: rest,
43
+ options: { lib: { type: 'string' } },
44
+ strict: true,
45
+ allowPositionals: true,
46
+ });
47
+ const lib = required(values, 'lib');
48
+ if (positionals.length !== 1 || !positionals[0])
49
+ throw new LiteRtHostUsageError('inspect takes one model file');
50
+ return { mode, lib, file: positionals[0] };
51
+ }
52
+ if (mode === 'serve') {
53
+ const { values } = parseArgs({
54
+ args: rest,
55
+ options: {
56
+ 'lib': { type: 'string' },
57
+ 'engine-version': { type: 'string' },
58
+ 'model': { type: 'string' },
59
+ 'backend': { type: 'string' },
60
+ 'max-tokens': { type: 'string' },
61
+ 'port': { type: 'string' },
62
+ 'cache': { type: 'string' },
63
+ 'id': { type: 'string' },
64
+ 'dispatch': { type: 'string' },
65
+ 'ov-libs': { type: 'string' },
66
+ 'speculative': { type: 'boolean' },
67
+ 'reasoning': { type: 'boolean' },
68
+ },
69
+ strict: true,
70
+ });
71
+ const lib = required(values, 'lib');
72
+ const engineVersion = required(values, 'engine-version');
73
+ if (!VERSION_RE.test(engineVersion))
74
+ throw new LiteRtHostUsageError(`--engine-version ${engineVersion} is not X.Y.Z`);
75
+ const backend = required(values, 'backend');
76
+ if (!LITERT_LM_BACKENDS.some((known) => known === backend))
77
+ throw new LiteRtHostUsageError(`--backend ${backend} is not cpu, gpu or npu`);
78
+ const dispatch = values['dispatch'];
79
+ const ovLibs = values['ov-libs'];
80
+ if (backend === 'npu' && (!dispatch || !ovLibs))
81
+ throw new LiteRtHostUsageError('--backend npu needs --dispatch and --ov-libs');
82
+ if (backend !== 'npu' && (dispatch !== undefined || ovLibs !== undefined))
83
+ throw new LiteRtHostUsageError('--dispatch and --ov-libs are only for --backend npu');
84
+ return {
85
+ mode,
86
+ lib,
87
+ engineVersion,
88
+ model: required(values, 'model'),
89
+ backend: backend,
90
+ maxTokens: wholeNumber(values, 'max-tokens', 1, 16_777_216),
91
+ port: wholeNumber(values, 'port', 0, 65535),
92
+ cache: required(values, 'cache'),
93
+ id: required(values, 'id'),
94
+ ...(dispatch ? { dispatch } : {}),
95
+ ...(ovLibs ? { ovLibs } : {}),
96
+ speculative: values['speculative'] === true,
97
+ reasoning: values['reasoning'] === true,
98
+ };
99
+ }
100
+ }
101
+ catch (error) {
102
+ if (error instanceof LiteRtHostUsageError)
103
+ throw error;
104
+ throw new LiteRtHostUsageError(error instanceof Error ? error.message : String(error));
105
+ }
106
+ throw new LiteRtHostUsageError(`litert-host: unknown mode ${JSON.stringify(mode ?? '')} (probe, inspect, serve)`);
107
+ }
108
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../../../src/runtime/litert-lm/host/args.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `LiteRtLibrary` over `bun:ffi` — the second and last file in `src/` that may import `bun:*` (change
3
+ * `add-litert-lm-runtime`, design D1 and decision 3.6; allow-listed in both runtime-agnostic gates). It
4
+ * is imported dynamically by the `litert-host` mode alone, so the npm package still loads under Node.
5
+ *
6
+ * Streaming is the hard part (spike S2). The library calls a stream callback on a C++ thread of its
7
+ * own and frees the chunk as soon as the callback returns. A plain `JSCallback` cannot run there; a
8
+ * `threadsafe` one only queues the call, so the JS thread would read freed memory, and even with the
9
+ * chunk copied first Bun's threadsafe callbacks crashed about one run in five under a fast stream.
10
+ * So the callback is C: a shim compiled at start by the TinyCC built into Bun (`cc`) copies each chunk
11
+ * on the library's thread into a FIFO under a mutex, and JS drains the FIFO on a 2 ms timer that runs
12
+ * only while a generation is under way. The shim links nothing (`-nostdlib`: TinyCC finds no libc
13
+ * without development packages on Linux); `malloc` and the mutex come in as pointers from `dlsym`.
14
+ */
15
+ import type { LoadLiteRtLibrary } from './library.js';
16
+ export declare const loadBunLiteRtLibrary: LoadLiteRtLibrary;