@atomic-chat/core 0.19.0 → 0.20.5

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 (219) hide show
  1. package/dist/app-daemon.js +5 -0
  2. package/dist/app-daemon.js.map +1 -1
  3. package/dist/cli/bin.js +0 -0
  4. package/dist/cli/launch.js +2 -0
  5. package/dist/cli/launch.js.map +1 -1
  6. package/dist/cli/main.d.ts +1 -1
  7. package/dist/cli/main.js +5 -0
  8. package/dist/cli/main.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 +1 -1
  12. package/dist/config/paths.js +12 -0
  13. package/dist/config/paths.js.map +1 -1
  14. package/dist/contracts/engine-builds.d.ts +6 -1
  15. package/dist/contracts/engine-builds.js +1 -1
  16. package/dist/contracts/engine-builds.js.map +1 -1
  17. package/dist/contracts/engines.d.ts +1 -1
  18. package/dist/contracts/engines.js +2 -0
  19. package/dist/contracts/engines.js.map +1 -1
  20. package/dist/contracts/errors.d.ts +7 -1
  21. package/dist/contracts/errors.js.map +1 -1
  22. package/dist/contracts/events.d.ts +3 -1
  23. package/dist/contracts/geniex.d.ts +98 -0
  24. package/dist/contracts/geniex.js +15 -0
  25. package/dist/contracts/geniex.js.map +1 -0
  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/model-yml.d.ts +40 -0
  30. package/dist/contracts/model-yml.js +7 -0
  31. package/dist/contracts/model-yml.js.map +1 -1
  32. package/dist/contracts/session.d.ts +6 -1
  33. package/dist/contracts/session.js.map +1 -1
  34. package/dist/contracts/settings.d.ts +12 -1
  35. package/dist/contracts/settings.js.map +1 -1
  36. package/dist/core/app-lease.d.ts +56 -0
  37. package/dist/core/app-lease.js +50 -0
  38. package/dist/core/app-lease.js.map +1 -0
  39. package/dist/core/atomic-core.d.ts +1 -1
  40. package/dist/core/create.js +109 -5
  41. package/dist/core/create.js.map +1 -1
  42. package/dist/engine-builds/engines.d.ts +28 -7
  43. package/dist/engine-builds/engines.js +49 -5
  44. package/dist/engine-builds/engines.js.map +1 -1
  45. package/dist/engine-builds/geniex.d.ts +35 -0
  46. package/dist/engine-builds/geniex.js +111 -0
  47. package/dist/engine-builds/geniex.js.map +1 -0
  48. package/dist/engine-builds/manifest.d.ts +43 -0
  49. package/dist/engine-builds/manifest.js +92 -0
  50. package/dist/engine-builds/manifest.js.map +1 -1
  51. package/dist/engine-builds/order.d.ts +2 -1
  52. package/dist/engine-builds/order.js +2 -0
  53. package/dist/engine-builds/order.js.map +1 -1
  54. package/dist/engine-builds/select.d.ts +15 -0
  55. package/dist/engine-builds/select.js +14 -0
  56. package/dist/engine-builds/select.js.map +1 -1
  57. package/dist/engine-builds/service.d.ts +5 -3
  58. package/dist/engine-builds/service.js +21 -2
  59. package/dist/engine-builds/service.js.map +1 -1
  60. package/dist/engines/service.d.ts +2 -1
  61. package/dist/engines/service.js +3 -1
  62. package/dist/engines/service.js.map +1 -1
  63. package/dist/engines/versions.js +3 -0
  64. package/dist/engines/versions.js.map +1 -1
  65. package/dist/integrations/catalog.d.ts +3 -1
  66. package/dist/integrations/catalog.js +8 -2
  67. package/dist/integrations/catalog.js.map +1 -1
  68. package/dist/integrations/config-io.d.ts +45 -4
  69. package/dist/integrations/config-io.js +91 -6
  70. package/dist/integrations/config-io.js.map +1 -1
  71. package/dist/integrations/configure/codex-repair.d.ts +75 -0
  72. package/dist/integrations/configure/codex-repair.js +254 -0
  73. package/dist/integrations/configure/codex-repair.js.map +1 -0
  74. package/dist/integrations/configure/codex.d.ts +48 -10
  75. package/dist/integrations/configure/codex.js +126 -32
  76. package/dist/integrations/configure/codex.js.map +1 -1
  77. package/dist/integrations/configure/registry.d.ts +4 -1
  78. package/dist/integrations/configure/registry.js +1 -0
  79. package/dist/integrations/configure/registry.js.map +1 -1
  80. package/dist/models/gguf/kv-cache.d.ts +5 -0
  81. package/dist/models/gguf/kv-cache.js +35 -2
  82. package/dist/models/gguf/kv-cache.js.map +1 -1
  83. package/dist/models/gguf/reader.d.ts +5 -0
  84. package/dist/models/gguf/reader.js +15 -3
  85. package/dist/models/gguf/reader.js.map +1 -1
  86. package/dist/router/resolve.d.ts +3 -2
  87. package/dist/router/resolve.js +3 -1
  88. package/dist/router/resolve.js.map +1 -1
  89. package/dist/runtime/geniex/accelerators.d.ts +20 -0
  90. package/dist/runtime/geniex/accelerators.js +53 -0
  91. package/dist/runtime/geniex/accelerators.js.map +1 -0
  92. package/dist/runtime/geniex/check.d.ts +34 -0
  93. package/dist/runtime/geniex/check.js +117 -0
  94. package/dist/runtime/geniex/check.js.map +1 -0
  95. package/dist/runtime/geniex/chip.d.ts +29 -0
  96. package/dist/runtime/geniex/chip.js +35 -0
  97. package/dist/runtime/geniex/chip.js.map +1 -0
  98. package/dist/runtime/geniex/devices.d.ts +13 -0
  99. package/dist/runtime/geniex/devices.js +32 -0
  100. package/dist/runtime/geniex/devices.js.map +1 -0
  101. package/dist/runtime/geniex/geniex-host.d.ts +17 -0
  102. package/dist/runtime/geniex/geniex-host.js +26 -0
  103. package/dist/runtime/geniex/geniex-host.js.map +1 -0
  104. package/dist/runtime/geniex/host/args.d.ts +56 -0
  105. package/dist/runtime/geniex/host/args.js +115 -0
  106. package/dist/runtime/geniex/host/args.js.map +1 -0
  107. package/dist/runtime/geniex/host/engine.d.ts +76 -0
  108. package/dist/runtime/geniex/host/engine.js +122 -0
  109. package/dist/runtime/geniex/host/engine.js.map +1 -0
  110. package/dist/runtime/geniex/host/ffi-bun.d.ts +15 -0
  111. package/dist/runtime/geniex/host/ffi-bun.js +415 -0
  112. package/dist/runtime/geniex/host/ffi-bun.js.map +1 -0
  113. package/dist/runtime/geniex/host/grammar.d.ts +11 -0
  114. package/dist/runtime/geniex/host/grammar.js +223 -0
  115. package/dist/runtime/geniex/host/grammar.js.map +1 -0
  116. package/dist/runtime/geniex/host/inspect.d.ts +25 -0
  117. package/dist/runtime/geniex/host/inspect.js +177 -0
  118. package/dist/runtime/geniex/host/inspect.js.map +1 -0
  119. package/dist/runtime/geniex/host/library.d.ts +117 -0
  120. package/dist/runtime/geniex/host/library.js +38 -0
  121. package/dist/runtime/geniex/host/library.js.map +1 -0
  122. package/dist/runtime/geniex/host/openai.d.ts +62 -0
  123. package/dist/runtime/geniex/host/openai.js +458 -0
  124. package/dist/runtime/geniex/host/openai.js.map +1 -0
  125. package/dist/runtime/geniex/host/run.d.ts +48 -0
  126. package/dist/runtime/geniex/host/run.js +208 -0
  127. package/dist/runtime/geniex/host/run.js.map +1 -0
  128. package/dist/runtime/geniex/host/server.d.ts +39 -0
  129. package/dist/runtime/geniex/host/server.js +232 -0
  130. package/dist/runtime/geniex/host/server.js.map +1 -0
  131. package/dist/runtime/geniex/host/worker-protocol.d.ts +76 -0
  132. package/dist/runtime/geniex/host/worker-protocol.js +116 -0
  133. package/dist/runtime/geniex/host/worker-protocol.js.map +1 -0
  134. package/dist/runtime/geniex/host/worker-source.generated.d.ts +1 -0
  135. package/dist/runtime/geniex/host/worker-source.generated.js +4 -0
  136. package/dist/runtime/geniex/host/worker-source.generated.js.map +1 -0
  137. package/dist/runtime/geniex/host/worker.d.ts +7 -0
  138. package/dist/runtime/geniex/host/worker.js +19 -0
  139. package/dist/runtime/geniex/host/worker.js.map +1 -0
  140. package/dist/runtime/geniex/host-process.d.ts +48 -0
  141. package/dist/runtime/geniex/host-process.js +104 -0
  142. package/dist/runtime/geniex/host-process.js.map +1 -0
  143. package/dist/runtime/geniex/index.d.ts +11 -0
  144. package/dist/runtime/geniex/index.js +12 -0
  145. package/dist/runtime/geniex/index.js.map +1 -0
  146. package/dist/runtime/geniex/model-yml.d.ts +8 -0
  147. package/dist/runtime/geniex/model-yml.js +98 -0
  148. package/dist/runtime/geniex/model-yml.js.map +1 -0
  149. package/dist/runtime/geniex/runtime.d.ts +94 -0
  150. package/dist/runtime/geniex/runtime.js +366 -0
  151. package/dist/runtime/geniex/runtime.js.map +1 -0
  152. package/dist/runtime/litert-lm/host/openai.d.ts +4 -37
  153. package/dist/runtime/litert-lm/host/openai.js +11 -96
  154. package/dist/runtime/litert-lm/host/openai.js.map +1 -1
  155. package/dist/runtime/litert-lm/host/pool.d.ts +1 -7
  156. package/dist/runtime/litert-lm/host/pool.js +1 -17
  157. package/dist/runtime/litert-lm/host/pool.js.map +1 -1
  158. package/dist/runtime/litert-lm/host/server.js +11 -53
  159. package/dist/runtime/litert-lm/host/server.js.map +1 -1
  160. package/dist/runtime/llamacpp/args.d.ts +5 -0
  161. package/dist/runtime/llamacpp/args.js +2 -0
  162. package/dist/runtime/llamacpp/args.js.map +1 -1
  163. package/dist/runtime/llamacpp/fit-margin.d.ts +44 -0
  164. package/dist/runtime/llamacpp/fit-margin.js +50 -0
  165. package/dist/runtime/llamacpp/fit-margin.js.map +1 -1
  166. package/dist/runtime/llamacpp/load-plan.d.ts +5 -0
  167. package/dist/runtime/llamacpp/load-plan.js +57 -22
  168. package/dist/runtime/llamacpp/load-plan.js.map +1 -1
  169. package/dist/runtime/llamacpp/runtime.d.ts +5 -1
  170. package/dist/runtime/llamacpp/runtime.js +6 -1
  171. package/dist/runtime/llamacpp/runtime.js.map +1 -1
  172. package/dist/runtime/shared/external-sessions.js +1 -0
  173. package/dist/runtime/shared/external-sessions.js.map +1 -1
  174. package/dist/runtime/shared/fifo-lock.d.ts +10 -0
  175. package/dist/runtime/shared/fifo-lock.js +21 -0
  176. package/dist/runtime/shared/fifo-lock.js.map +1 -0
  177. package/dist/runtime/shared/index.d.ts +2 -0
  178. package/dist/runtime/shared/index.js +2 -0
  179. package/dist/runtime/shared/index.js.map +1 -1
  180. package/dist/runtime/shared/openai-sse.d.ts +112 -0
  181. package/dist/runtime/shared/openai-sse.js +178 -0
  182. package/dist/runtime/shared/openai-sse.js.map +1 -0
  183. package/dist/server/clients.d.ts +6 -0
  184. package/dist/server/clients.js +11 -0
  185. package/dist/server/clients.js.map +1 -1
  186. package/dist/server/control/router.js +2 -0
  187. package/dist/server/control/router.js.map +1 -1
  188. package/dist/server/control/routes/geniex.d.ts +7 -0
  189. package/dist/server/control/routes/geniex.js +22 -0
  190. package/dist/server/control/routes/geniex.js.map +1 -0
  191. package/dist/server/control/types.d.ts +11 -1
  192. package/dist/server/control/types.js.map +1 -1
  193. package/dist/server/http.js +2 -0
  194. package/dist/server/http.js.map +1 -1
  195. package/dist/server/public/embedding.d.ts +8 -7
  196. package/dist/server/public/embedding.js +15 -7
  197. package/dist/server/public/embedding.js.map +1 -1
  198. package/dist/server/public/forward.js +23 -6
  199. package/dist/server/public/forward.js.map +1 -1
  200. package/dist/server/public/listing.js +1 -0
  201. package/dist/server/public/listing.js.map +1 -1
  202. package/dist/server/public/responses.js +9 -0
  203. package/dist/server/public/responses.js.map +1 -1
  204. package/dist/server/public/telemetry.d.ts +7 -1
  205. package/dist/server/public/telemetry.js +11 -3
  206. package/dist/server/public/telemetry.js.map +1 -1
  207. package/dist/server/public/trace.d.ts +8 -4
  208. package/dist/server/public/trace.js +15 -7
  209. package/dist/server/public/trace.js.map +1 -1
  210. package/dist/server/public/validate.d.ts +32 -0
  211. package/dist/server/public/validate.js +146 -0
  212. package/dist/server/public/validate.js.map +1 -0
  213. package/dist/settings/schema/geniex.json +63 -0
  214. package/dist/settings/schema/mlx.json +1 -1
  215. package/dist/settings/schema.js +11 -0
  216. package/dist/settings/schema.js.map +1 -1
  217. package/dist/version.d.ts +1 -1
  218. package/dist/version.js +1 -1
  219. package/package.json +7 -2
@@ -0,0 +1,178 @@
1
+ /**
2
+ * What the hosts' own OpenAI servers share (openspec change `add-geniex-runtime`, task 5.4; lifted
3
+ * from `litert-lm/host/openai.ts` and `server.ts` without a change of behaviour): the OpenAI error
4
+ * shape, the fields of a chat completions request that mean the same for every engine — sampling,
5
+ * limits, stop strings, usage, the response format, thinking, the tool choice — the SSE frames of a
6
+ * streamed answer, the non-stream reply and the body plumbing of `node:http`. Each host keeps to
7
+ * itself what its library makes of the messages.
8
+ */
9
+ /** A request this server answers with an OpenAI-shaped error instead of a completion. */
10
+ export class OpenAiRequestError extends Error {
11
+ status;
12
+ body;
13
+ constructor(status, message, param = null, type = status >= 500 ? 'server_error' : 'invalid_request_error', code = null) {
14
+ super(message);
15
+ this.status = status;
16
+ this.name = 'OpenAiRequestError';
17
+ this.body = { error: { message, type, param, code } };
18
+ }
19
+ }
20
+ export const invalidRequest = (message, param = null) => new OpenAiRequestError(400, message, param);
21
+ export const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
22
+ export const DATA_URL_RE = /^data:image\/[a-z0-9.+-]+;base64,([A-Za-z0-9+/=]+)$/i;
23
+ /** The text of a `content` that may be a string or text parts; anything else is a 400. */
24
+ export function textOf(content, param) {
25
+ if (content == null)
26
+ return '';
27
+ if (typeof content === 'string')
28
+ return content;
29
+ if (!Array.isArray(content))
30
+ throw invalidRequest(`${param} must be a string or an array of parts`, param);
31
+ return content
32
+ .map((part) => {
33
+ if (isRecord(part) && part['type'] === 'text' && typeof part['text'] === 'string')
34
+ return part['text'];
35
+ throw invalidRequest(`${param} may hold text parts only`, param);
36
+ })
37
+ .join('');
38
+ }
39
+ function optionalNumber(body, key) {
40
+ const value = body[key];
41
+ if (value === undefined || value === null)
42
+ return undefined;
43
+ if (typeof value !== 'number' || !Number.isFinite(value))
44
+ throw invalidRequest(`${key} must be a number`, key);
45
+ return value;
46
+ }
47
+ export function parseResponseFormat(raw) {
48
+ if (raw === undefined || raw === null)
49
+ return null;
50
+ if (!isRecord(raw))
51
+ throw invalidRequest('response_format must be an object', 'response_format');
52
+ if (raw['type'] === 'text')
53
+ return null;
54
+ if (raw['type'] === 'json_object')
55
+ return { kind: 'json_schema', value: '{"type":"object"}' };
56
+ if (raw['type'] === 'json_schema') {
57
+ const schema = isRecord(raw['json_schema']) ? raw['json_schema']['schema'] : undefined;
58
+ if (!isRecord(schema))
59
+ throw invalidRequest('response_format.json_schema.schema must be a JSON schema', 'response_format');
60
+ return { kind: 'json_schema', value: JSON.stringify(schema) };
61
+ }
62
+ throw invalidRequest(`response_format type ${JSON.stringify(raw['type'])} is not supported`, 'response_format');
63
+ }
64
+ export function parseThinking(body, caps) {
65
+ const kwargs = body['chat_template_kwargs'];
66
+ if (isRecord(kwargs) && typeof kwargs['enable_thinking'] === 'boolean')
67
+ return kwargs['enable_thinking'];
68
+ const effort = body['reasoning_effort'];
69
+ if (typeof effort === 'string')
70
+ return effort !== 'none';
71
+ return caps.reasoning;
72
+ }
73
+ /**
74
+ * The common fields of a chat completions body, or `OpenAiRequestError` (400) naming the field it
75
+ * cannot serve: `n` other than 1, a named or `required` tool choice, a response format no engine
76
+ * speaks, a sampling value that is not a number. `messages` is only checked to be a non-empty
77
+ * array: what they mean is each host's.
78
+ */
79
+ export function parseCommonChatRequest(raw, caps) {
80
+ const n = raw['n'];
81
+ if (n !== undefined && n !== null && n !== 1)
82
+ throw invalidRequest('Only n: 1 is supported.', 'n');
83
+ if (!Array.isArray(raw['messages']) || raw['messages'].length === 0)
84
+ throw invalidRequest('messages must be a non-empty array', 'messages');
85
+ const toolChoice = raw['tool_choice'];
86
+ if (toolChoice !== undefined && toolChoice !== null && toolChoice !== 'auto' && toolChoice !== 'none')
87
+ throw invalidRequest('Only tool_choice "auto" and "none" are supported.', 'tool_choice');
88
+ const tools = Array.isArray(raw['tools']) && raw['tools'].length > 0 && toolChoice !== 'none' ? raw['tools'] : null;
89
+ const streamOptions = raw['stream_options'];
90
+ const stop = raw['stop'];
91
+ const maxTokens = optionalNumber(raw, 'max_completion_tokens') ?? optionalNumber(raw, 'max_tokens');
92
+ const temperature = optionalNumber(raw, 'temperature');
93
+ const topP = optionalNumber(raw, 'top_p');
94
+ const topK = optionalNumber(raw, 'top_k');
95
+ const seed = optionalNumber(raw, 'seed');
96
+ return {
97
+ stream: raw['stream'] === true,
98
+ includeUsage: isRecord(streamOptions) && streamOptions['include_usage'] === true,
99
+ sampler: {
100
+ ...(temperature !== undefined ? { temperature } : {}),
101
+ ...(topP !== undefined ? { topP } : {}),
102
+ ...(topK !== undefined ? { topK: Math.round(topK) } : {}),
103
+ ...(seed !== undefined ? { seed: Math.round(seed) } : {}),
104
+ },
105
+ ...(maxTokens !== undefined ? { maxTokens: Math.max(1, Math.round(maxTokens)) } : {}),
106
+ stop: typeof stop === 'string'
107
+ ? [stop]
108
+ : Array.isArray(stop)
109
+ ? stop.filter((s) => typeof s === 'string' && s)
110
+ : [],
111
+ responseFormat: parseResponseFormat(raw['response_format']),
112
+ thinking: parseThinking(raw, caps),
113
+ tools,
114
+ };
115
+ }
116
+ export function sseFramer(id, created, model) {
117
+ const frame = (body) => `data: ${JSON.stringify({ id, object: 'chat.completion.chunk', created, model, ...body })}\n\n`;
118
+ return {
119
+ id,
120
+ created,
121
+ frame,
122
+ delta: (delta, finish = null) => frame({ choices: [{ index: 0, delta, finish_reason: finish }] }),
123
+ };
124
+ }
125
+ /** The `[DONE]` sentinel. */
126
+ export const SSE_DONE = 'data: [DONE]\n\n';
127
+ /** A non-stream `chat.completion` body. */
128
+ export function completionBody(framer, model, message, finish, usage) {
129
+ return {
130
+ id: framer.id,
131
+ object: 'chat.completion',
132
+ created: framer.created,
133
+ model,
134
+ choices: [{ index: 0, message, finish_reason: finish }],
135
+ usage,
136
+ };
137
+ }
138
+ /** Images arrive inline as base64. */
139
+ export const BODY_LIMIT = 64 * 1024 * 1024;
140
+ export class BodyTooLarge extends Error {
141
+ }
142
+ export function readBody(req, limit = BODY_LIMIT) {
143
+ return new Promise((resolve, reject) => {
144
+ const chunks = [];
145
+ let size = 0;
146
+ req.on('data', (chunk) => {
147
+ size += chunk.length;
148
+ if (size > limit) {
149
+ reject(new BodyTooLarge());
150
+ req.destroy();
151
+ return;
152
+ }
153
+ chunks.push(chunk);
154
+ });
155
+ req.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
156
+ req.on('error', reject);
157
+ });
158
+ }
159
+ export function sendJson(res, status, body) {
160
+ const text = JSON.stringify(body);
161
+ res.writeHead(status, { 'content-type': 'application/json', 'content-length': Buffer.byteLength(text) });
162
+ res.end(text);
163
+ }
164
+ export const sendOpenAiError = (res, error) => sendJson(res, error.status, error.body);
165
+ /** The JSON body of a chat request, or the 400 / 413 it earns. */
166
+ export async function readJsonBody(req) {
167
+ try {
168
+ return JSON.parse(await readBody(req));
169
+ }
170
+ catch (error) {
171
+ throw error instanceof BodyTooLarge
172
+ ? new OpenAiRequestError(413, 'The request body is too large.')
173
+ : new OpenAiRequestError(400, 'The request body is not valid JSON.');
174
+ }
175
+ }
176
+ /** A `404` for a route the host does not serve. */
177
+ export const notServed = (method, path, engine) => new OpenAiRequestError(404, `${method} ${path} is not served by ${engine}.`, null, 'invalid_request_error', 'not_found');
178
+ //# sourceMappingURL=openai-sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-sse.js","sourceRoot":"","sources":["../../../src/runtime/shared/openai-sse.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,12 @@ export declare class ClientRegistry {
34
34
  count(): number;
35
35
  /** Everyone but the caller — what `shutdown` checks before stopping a core someone else is using. */
36
36
  others(exceptId: string | undefined): ClientRecord[];
37
+ /**
38
+ * Give every lease `ms` back: time this process was not running (swapping, asleep), in which no
39
+ * heartbeat could have been heard. Without it the first check after a stall finds every client
40
+ * expired, though their heartbeats are waiting in the socket.
41
+ */
42
+ extendLeases(ms: number): void;
37
43
  /** Check leases and close admission in one synchronous step. */
38
44
  acceptShutdown(exceptId: string | undefined, force: boolean): ClientRecord[];
39
45
  private sweep;
@@ -57,6 +57,17 @@ export class ClientRegistry {
57
57
  others(exceptId) {
58
58
  return this.list().filter((c) => c.id !== exceptId);
59
59
  }
60
+ /**
61
+ * Give every lease `ms` back: time this process was not running (swapping, asleep), in which no
62
+ * heartbeat could have been heard. Without it the first check after a stall finds every client
63
+ * expired, though their heartbeats are waiting in the socket.
64
+ */
65
+ extendLeases(ms) {
66
+ if (!(ms > 0))
67
+ return;
68
+ for (const record of this.clients.values())
69
+ record.last_seen += ms;
70
+ }
60
71
  /** Check leases and close admission in one synchronous step. */
61
72
  acceptShutdown(exceptId, force) {
62
73
  const others = this.others(exceptId);
@@ -1 +1 @@
1
- {"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/server/clients.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/server/clients.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAA;AAClD,uFAAuF;AACvF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAG,4BAA4B,CAAA;AAehE,MAAM,OAAO,cAAc;IAKN;IACA;IALF,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAA;IAClD,QAAQ,GAAG,KAAK,CAAA;IAExB,YACmB,MAAoB,IAAI,CAAC,GAAG,EAC5B,WAAmB,gBAAgB;QADnC,QAAG,GAAH,GAAG,CAAyB;QAC5B,aAAQ,GAAR,QAAQ,CAA2B;IACnD,CAAC;IAEJ,QAAQ,CAAC,QAA6B,EAAE;QACtC,IAAI,IAAI,CAAC,QAAQ;YACf,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,mDAAmD,CAAC,CAAA;QACpG,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACrB,MAAM,MAAM,GAAiB;YAC3B,EAAE,EAAE,UAAU,EAAE;YAChB,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC7C,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;YACrD,aAAa,EAAE,EAAE;YACjB,SAAS,EAAE,EAAE;SACd,CAAA;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QACnC,OAAO,EAAE,GAAG,MAAM,EAAE,CAAA;IACtB,CAAC;IAED,yFAAyF;IACzF,SAAS,CAAC,EAAU;QAClB,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACnC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;QACzB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC7B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAChC,CAAC;IAED,IAAI;QACF,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAA;IAC3B,CAAC;IAED,qGAAqG;IACrG,MAAM,CAAC,QAA4B;QACjC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAA;IACrD,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,EAAU;QACrB,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAAE,OAAM;QACrB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAAE,MAAM,CAAC,SAAS,IAAI,EAAE,CAAA;IACpE,CAAC;IAED,gEAAgE;IAChE,cAAc,CAAC,QAA4B,EAAE,KAAc;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACtD,OAAO,MAAM,CAAA;IACf,CAAC;IAEO,KAAK;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAA;QACzC,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,MAAM,CAAC,SAAS,GAAG,MAAM;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACjG,CAAC;CACF"}
@@ -17,6 +17,7 @@ import { registerDiskRoutes } from './routes/disk.js';
17
17
  import { registerEngineBuildRoutes } from './routes/engine-builds.js';
18
18
  import { registerFoundryLocalRoutes } from './routes/foundry-local.js';
19
19
  import { registerLiteRtLmRoutes } from './routes/litert-lm.js';
20
+ import { registerGeniexRoutes } from './routes/geniex.js';
20
21
  import { registerEngineRoutes } from './routes/engines.js';
21
22
  import { registerEnvironmentRoutes } from './routes/environments.js';
22
23
  import { registerExternalSessionRoutes } from './routes/external-sessions.js';
@@ -60,6 +61,7 @@ export function buildRouter(deps, self) {
60
61
  registerEngineBuildRoutes(router, deps, ctx);
61
62
  registerFoundryLocalRoutes(router, deps, ctx);
62
63
  registerLiteRtLmRoutes(router, deps, ctx);
64
+ registerGeniexRoutes(router, deps, ctx);
63
65
  registerEngineRoutes(router, deps, ctx);
64
66
  registerHardwareRoutes(router, deps, ctx);
65
67
  registerDiskRoutes(router, deps, ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/server/control/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/server/control/router.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAA;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,gCAAgC,EAAE,MAAM,iCAAiC,CAAA;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAI/D,MAAM,UAAU,WAAW,CAAC,IAAuB,EAAE,IAAqC;IACxF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAA;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,GAAG,EAAE,CAAA;IACzC,MAAM,CAAC,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,GAAG,kBAAkB,GAAG,MAAM,EAAE,CAAA;IAC9D,MAAM,QAAQ,GAAG,GAAoB,EAAE,CAAC,CAAC;QACvC,WAAW,EAAE,IAAI,CAAC,UAAU;QAC5B,WAAW,EAAE,IAAI,CAAC,UAAU;QAC5B,QAAQ,EAAE,wBAAwB;QAClC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,WAAW,EAAE,IAAI,CAAC,UAAU;QAC5B,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,GAAG,EAAE,GAAG,SAAS;QAC5B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;QACzB,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QAClC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAC5B,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE;QACnC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;QACjD,YAAY,EAAE,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE;QACjD,sBAAsB,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE;KAC7D,CAAC,CAAA;IACF,MAAM,GAAG,GAAwB,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAEtE,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAA;IAE3B,uBAAuB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1C,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACvC,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACtC,gCAAgC,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACnD,qBAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACxC,yBAAyB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAC5C,0BAA0B,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAC7C,sBAAsB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACzC,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACvC,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACvC,sBAAsB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACzC,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACrC,yBAAyB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAC5C,sBAAsB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACzC,6BAA6B,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAChD,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACtC,0BAA0B,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAC7C,0BAA0B,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAC7C,uBAAuB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1C,4BAA4B,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/C,sBAAsB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACzC,uBAAuB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1C,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACtC,uBAAuB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1C,qBAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAExC,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * GenieX's devices (openspec change `add-geniex-runtime`, task 6.4, design D3): what the active
3
+ * build's library found, in LiteRT-LM's shape, and a `prepare` that has nothing to do and says so.
4
+ */
5
+ import type { Router } from '../../http.js';
6
+ import type { ControlRouteContext, ControlServerDeps } from '../types.js';
7
+ export declare function registerGeniexRoutes(router: Router, deps: ControlServerDeps, ctx: ControlRouteContext): void;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * GenieX's devices (openspec change `add-geniex-runtime`, task 6.4, design D3): what the active
3
+ * build's library found, in LiteRT-LM's shape, and a `prepare` that has nothing to do and says so.
4
+ */
5
+ import { AtomicCoreError } from '../../../contracts/index.js';
6
+ import { readJsonBody, sendError, sendJson } from '../../http.js';
7
+ import { parsePrepareBody } from './foundry-local.js';
8
+ export function registerGeniexRoutes(router, deps, ctx) {
9
+ const { p } = ctx;
10
+ const absent = () => new AtomicCoreError('PROVIDER_NOT_FOUND', 'GenieX does not run on this computer.', 'geniex');
11
+ router.get(p('/runtimes/geniex/accelerators'), async (_req, res) => {
12
+ if (!deps.geniex)
13
+ return sendError(res, absent());
14
+ sendJson(res, 200, await deps.geniex.accelerators());
15
+ });
16
+ router.post(p('/runtimes/geniex/accelerators/prepare'), async (req, res) => {
17
+ if (!deps.geniex)
18
+ return sendError(res, absent());
19
+ sendJson(res, 200, await deps.geniex.prepare(parsePrepareBody(await readJsonBody(req))));
20
+ });
21
+ }
22
+ //# sourceMappingURL=geniex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geniex.js","sourceRoot":"","sources":["../../../../src/server/control/routes/geniex.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,IAAuB,EACvB,GAAwB;IAExB,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,CAAA;IACjB,MAAM,MAAM,GAAG,GAAG,EAAE,CAClB,IAAI,eAAe,CAAC,oBAAoB,EAAE,uCAAuC,EAAE,QAAQ,CAAC,CAAA;IAE9F,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,+BAA+B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QACjE,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAA;QACjD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,uCAAuC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACzE,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAA;QACjD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1F,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { CloudProviderInput, CloudProviderView, SubscriptionModel } from '../../cloud/index.js';
6
6
  import type { ChatGptStatus } from '../../credentials/index.js';
7
- import type { FoundryLocalAccelerators, FoundryLocalPrepareRequest, FoundryLocalPrepareResult, LiteRtLmAccelerators, LiteRtLmPrepareRequest, LiteRtLmPrepareResult, EngineBuildCatalog, EngineBuildCatalogRequest, EngineBuildId, EngineBuildInstallRequest, EngineBuildInstallResult, EngineBuildRemoveResult, EngineBuildUpdateCheck, EngineBuildUpdateCheckRequest, EngineActivateResult, EngineBuildDeleteResult, EngineOperationStarted, EngineUpdateRequest, EngineUpdateResult, EngineVersionsRequest, EngineVersionsResponse, MediaCatalogView, MediaKind, MediaProviderModels, ServedModelSelection } from '../../contracts/index.js';
7
+ import type { FoundryLocalAccelerators, FoundryLocalPrepareRequest, FoundryLocalPrepareResult, GeniexAccelerators, GeniexPrepareRequest, GeniexPrepareResult, LiteRtLmAccelerators, LiteRtLmPrepareRequest, LiteRtLmPrepareResult, EngineBuildCatalog, EngineBuildCatalogRequest, EngineBuildId, EngineBuildInstallRequest, EngineBuildInstallResult, EngineBuildRemoveResult, EngineBuildUpdateCheck, EngineBuildUpdateCheckRequest, EngineActivateResult, EngineBuildDeleteResult, EngineOperationStarted, EngineUpdateRequest, EngineUpdateResult, EngineVersionsRequest, EngineVersionsResponse, MediaCatalogView, MediaKind, MediaProviderModels, ServedModelSelection } from '../../contracts/index.js';
8
8
  import type { BeginOperation, DecisionDecideRequest, DecisionOutcome, DecisionScoreRequest, DecisionSettings, DecisionStatus, EmbeddingEmbedResponse, EmbeddingSettings, EmbeddingStatus, RouterScoreResponse, SystemoneResponse, DeviceInfo, DiffusionCancelResult, DownloadProgress, DiffusionConfig, DiffusionModelFile, DiffusionStatus, EnvironmentDiagnostics, EnvironmentOperation, EnvironmentResetResult, EnvironmentSnapshot, ModelCompatibilityRequest, ModelCompatibilityResponse, PrismFamiliesResponse, GalleryFlags, GalleryImageItem, GalleryListOptions, GalleryPage, ImageCapabilities, ImageGenerateRequest, ImageJob, LoadDiffusionModelRequest, LoadedDiffusionModel, VideoCapabilities, VideoEstimate, VideoGalleryPage, VideoGenerateRequest, VideoJob, GalleryVideoItem, HardwareInfoResponse, HardwareOverride, HardwareOverrideInput, LocalApiServerState, LocalProviderId, ManagedHostReceipt, ModelCompatibility, ManagedModelDeletion, ManagedModelLocation, ProbeEnvironmentInput, RemoteAccessStatus, RequirementPlan, ResumeOperation, RuntimeDescriptorSummary, SessionInfo, UnloadResult } from '../../contracts/index.js';
9
9
  import type { CoreEmitter } from '../../events/index.js';
10
10
  import type { CtxIncreaseResult } from '../../runtime/llamacpp/runtime.js';
@@ -395,6 +395,11 @@ export interface ControlServerDeps {
395
395
  * not registered.
396
396
  */
397
397
  liteRtLm?: LiteRtLmControl;
398
+ /**
399
+ * GenieX's devices (change `add-geniex-runtime`, task 6.4); absent where the provider is not
400
+ * registered (off a Snapdragon X), and its routes then answer `PROVIDER_NOT_FOUND`.
401
+ */
402
+ geniex?: GeniexControl;
398
403
  cloud: CloudControl;
399
404
  chatgpt: ChatGptControl;
400
405
  externalSessions: ExternalSessionControl;
@@ -450,6 +455,11 @@ export interface LiteRtLmControl {
450
455
  /** Downloads and unpacks the accelerators named (none: all offered); one at a time. */
451
456
  prepare(request: LiteRtLmPrepareRequest): Promise<LiteRtLmPrepareResult>;
452
457
  }
458
+ /** GenieX's devices and its no-op prepare (change `add-geniex-runtime`, task 6.4). */
459
+ export interface GeniexControl {
460
+ accelerators(): Promise<GeniexAccelerators>;
461
+ prepare(request: GeniexPrepareRequest): Promise<GeniexPrepareResult>;
462
+ }
453
463
  export interface FoundryLocalControl {
454
464
  /** The last probe of the active build; `force` probes again. */
455
465
  accelerators(force: boolean): Promise<FoundryLocalAccelerators>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server/control/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsHH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server/control/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyHH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAA"}
@@ -157,6 +157,7 @@ export function statusForCode(code) {
157
157
  case 'FOUNDRY_LOCAL_ACCELERATOR_NOT_PREPARED':
158
158
  case 'LITERT_LM_ACCELERATOR_NOT_PREPARED':
159
159
  case 'LITERT_LM_MODEL_REQUIRES_NEWER_ENGINE':
160
+ case 'GENIEX_MODEL_REQUIRES_NEWER_ENGINE':
160
161
  case 'REMOTE_ACCESS_STOP_FAILED':
161
162
  case 'JOB_BUSY':
162
163
  case 'BACKEND_IN_USE':
@@ -203,6 +204,7 @@ export function statusForCode(code) {
203
204
  case 'REMOTE_UNSUPPORTED':
204
205
  case 'FOUNDRY_LOCAL_VARIANT_UNSUPPORTED':
205
206
  case 'LITERT_LM_VARIANT_UNSUPPORTED':
207
+ case 'GENIEX_VARIANT_UNSUPPORTED':
206
208
  return 422;
207
209
  case 'REMOTE_NOT_CONFIGURED':
208
210
  return 409;
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAGvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAmBlD,MAAM,OAAO,MAAM;IACA,MAAM,GAAoB,EAAE,CAAA;IAE7C,GAAG,CAAC,MAAc,EAAE,OAAe,EAAE,OAAgB;QACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC5E,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAC,OAAe,EAAE,OAAgB;QACnC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAgB;QACpC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC3C,CAAC;IAED,GAAG,CAAC,OAAe,EAAE,OAAgB;QACnC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAgB;QACrC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,OAAgB;QACtC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC7C,CAAC;IAED,uFAAuF;IACvF,IAAI,CACF,MAAc,EACd,IAAY;QAEZ,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,cAAc,GAAG,KAAK,CAAA;QAC1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YACnD,IAAI,CAAC,GAAG;gBAAE,SAAQ;YAClB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC5B,cAAc,GAAG,IAAI,CAAA;gBACrB,SAAQ;YACV,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAA;QACxD,CAAC;QACD,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9D,CAAC;CACF;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AACpD,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,OAAiB,EAAE,MAAgB;IACxD,MAAM,MAAM,GAA6B,EAAE,CAAA;IAC3C,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAW,CAAA;QAChC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,6EAA6E;YAC7E,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAA;YAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,cAAc,CAAA;YAC/C,IAAI,IAAI,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAA;YAC9B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;YAChD,CAAC,IAAI,IAAI,CAAA;YACT,CAAC,EAAE,CAAA;YACH,SAAQ;QACV,CAAC;QACD,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO,SAAS,CAAA;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAW,CAAA;QACjC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;aAClD,IAAI,GAAG,KAAK,KAAK;YAAE,OAAO,SAAS,CAAA;QACxC,CAAC,EAAE,CAAA;QACH,CAAC,EAAE,CAAA;IACL,CAAC;IACD,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;AACjD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,GAA6B;IACjD,MAAM,MAAM,GAA2B,EAAE,CAAA;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClF,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,OAAe;IAClD,IAAI,OAAe,CAAA;IACnB,IAAI,CAAC;QACH,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,QAAQ,CAAC;YAAE,MAAM,KAAK,CAAA;QAC7C,MAAM,IAAI,eAAe,CACvB,kBAAkB,EAClB,sBAAsB,IAAI,iCAAiC,EAC3D,OAAO,CACR,CAAA;IACH,CAAC;IACD,IACE,OAAO,KAAK,OAAO;QACnB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,IAAI,CAAC;QAEvF,MAAM,IAAI,eAAe,CACvB,kBAAkB,EAClB,sBAAsB,IAAI,uDAAuD,EACjF,OAAO,CACR,CAAA;IACH,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAmB,EAAE,MAAc,EAAE,IAAa;IACzE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IACpC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;QACpB,cAAc,EAAE,iCAAiC;QACjD,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;QAC5C,eAAe,EAAE,UAAU;KAC5B,CAAC,CAAA;IACF,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,IAAe;IAC3C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,cAAc,CAAC;QACpB,KAAK,eAAe;YAClB,OAAO,GAAG,CAAA;QACZ,KAAK,gBAAgB;YACnB,OAAO,GAAG,CAAA;QACZ,KAAK,iBAAiB,CAAC;QACvB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,oBAAoB,CAAC;QAC1B,KAAK,kBAAkB,CAAC;QACxB,KAAK,iBAAiB,CAAC;QACvB,KAAK,eAAe,CAAC;QACrB,KAAK,gBAAgB,CAAC;QACtB,KAAK,eAAe,CAAC;QACrB,KAAK,mBAAmB,CAAC;QACzB,KAAK,6BAA6B;YAChC,OAAO,GAAG,CAAA;QACZ,KAAK,sBAAsB,CAAC;QAC5B,KAAK,gBAAgB,CAAC;QACtB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,8BAA8B,CAAC;QACpC,KAAK,qCAAqC,CAAC;QAC3C,KAAK,4BAA4B,CAAC;QAClC,KAAK,wCAAwC,CAAC;QAC9C,KAAK,oCAAoC,CAAC;QAC1C,KAAK,uCAAuC,CAAC;QAC7C,KAAK,oCAAoC,CAAC;QAC1C,KAAK,2BAA2B,CAAC;QACjC,KAAK,UAAU,CAAC;QAChB,KAAK,gBAAgB,CAAC;QACtB,KAAK,gBAAgB,CAAC;QACtB,KAAK,WAAW,CAAC;QACjB,KAAK,wBAAwB,CAAC;QAC9B,KAAK,4BAA4B,CAAC;QAClC,KAAK,2BAA2B,CAAC;QACjC,KAAK,0BAA0B,CAAC;QAChC,KAAK,sBAAsB,CAAC;QAC5B,KAAK,0BAA0B,CAAC;QAChC,KAAK,yBAAyB,CAAC;QAC/B,KAAK,2BAA2B,CAAC;QACjC,KAAK,0BAA0B,CAAC;QAChC,KAAK,4BAA4B,CAAC;QAClC,KAAK,8BAA8B,CAAC;QACpC,KAAK,0BAA0B,CAAC;QAChC,KAAK,yBAAyB,CAAC;QAC/B,KAAK,UAAU,CAAC;QAChB,KAAK,0BAA0B,CAAC;QAChC,KAAK,yBAAyB,CAAC;QAC/B,KAAK,6BAA6B,CAAC;QACnC,KAAK,gCAAgC,CAAC;QACtC,KAAK,yBAAyB,CAAC;QAC/B,KAAK,0BAA0B,CAAC;QAChC,KAAK,8BAA8B,CAAC;QACpC,KAAK,+BAA+B;YAClC,OAAO,GAAG,CAAA;QACZ,KAAK,YAAY,CAAC;QAClB,KAAK,qBAAqB;YACxB,OAAO,GAAG,CAAA;QACZ,KAAK,WAAW;YACd,OAAO,GAAG,CAAA;QACZ,uGAAuG;QACvG,KAAK,oBAAoB,CAAC;QAC1B,KAAK,oBAAoB;YACvB,OAAO,GAAG,CAAA;QACZ,KAAK,gBAAgB;YACnB,OAAO,GAAG,CAAA;QACZ,KAAK,cAAc;YACjB,OAAO,GAAG,CAAA;QACZ,KAAK,iBAAiB,CAAC;QACvB,KAAK,wBAAwB,CAAC;QAC9B,KAAK,oBAAoB,CAAC;QAC1B,KAAK,mCAAmC,CAAC;QACzC,KAAK,+BAA+B,CAAC;QACrC,KAAK,4BAA4B;YAC/B,OAAO,GAAG,CAAA;QACZ,KAAK,uBAAuB;YAC1B,OAAO,GAAG,CAAA;QACZ,KAAK,aAAa,CAAC;QACnB,KAAK,gBAAgB;YACnB,OAAO,GAAG,CAAA;QACZ,4FAA4F;QAC5F,yDAAyD;QACzD,8FAA8F;QAC9F,sFAAsF;QACtF,8FAA8F;QAC9F,8FAA8F;QAC9F,oCAAoC;QACpC,KAAK,kBAAkB,CAAC;QACxB,KAAK,iBAAiB,CAAC;QACvB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,qBAAqB,CAAC;QAC3B,KAAK,oBAAoB,CAAC;QAC1B,KAAK,2BAA2B,CAAC;QACjC,KAAK,0BAA0B;YAC7B,OAAO,GAAG,CAAA;QACZ,4FAA4F;QAC5F,kGAAkG;QAClG,uDAAuD;QACvD,KAAK,6BAA6B,CAAC;QACnC,KAAK,2BAA2B,CAAC;QACjC,KAAK,qBAAqB,CAAC;QAC3B,KAAK,2BAA2B;YAC9B,OAAO,GAAG,CAAA;QACZ,KAAK,kBAAkB,CAAC;QACxB,KAAK,+BAA+B,CAAC;QACrC,KAAK,sBAAsB,CAAC;QAC5B,KAAK,uBAAuB;YAC1B,OAAO,GAAG,CAAA;QACZ,KAAK,sBAAsB,CAAC;QAC5B,KAAK,wBAAwB;YAC3B,OAAO,GAAG,CAAA;QACZ;YACE,OAAO,GAAG,CAAA;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,eAAe;QAAE,OAAO,KAAK,CAAA;IAClD,MAAM,CAAC,GAAG,KAA8C,CAAA;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,IAAkB,CAAC,CAAC,CAAC,gBAAgB,CAAA;IACnF,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AAC9F,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAmB,EAAE,KAAc,EAAE,MAAe;IAC5E,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,IAAI,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACvF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAA;AAEtC,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAoB,EACpB,KAAK,GAAG,mBAAmB;IAE3B,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,KAAe,CAAA;QAC3B,IAAI,IAAI,GAAG,CAAC,MAAM,CAAA;QAClB,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;YACjB,IAAI,IAAI,GAAG,KAAK,GAAG,qBAAqB,EAAE,CAAC;gBACzC,GAAG,CAAC,OAAO,EAAE,CAAA;gBACb,MAAK;YACP,CAAC;YACD,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;YACjB,SAAQ;QACV,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;IACD,IAAI,IAAI,GAAG,KAAK;QACd,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,4BAA4B,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAA;IACjG,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,EAAO,CAAA;IAC9B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAM,CAAA;IAChE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,iCAAiC,EAAG,CAAW,CAAC,OAAO,CAAC,CAAA;IACxG,CAAC;AACH,CAAC;AAED,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAA;AAExF,0FAA0F;AAC1F,MAAM,UAAU,iBAAiB,CAAC,OAAkC;IAClE,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IACvF,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,iBAAiB,CAAA;AAC5G,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAA+B;IAClE,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IACvB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACzG,OAAO,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;AACzC,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,OAAO,CAAC,GAAoB;IAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAA;IAC1B,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1B,OAAO,IAAI,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAoB;IACzC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAA;IAC1B,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AACvC,CAAC"}
@@ -6,13 +6,14 @@
6
6
  * module's own process; any other goes on to `serveForward` (cloud providers, then the loaded
7
7
  * sessions) exactly as before, with the body already read handed over in `ex.body`.
8
8
  *
9
- * A request served here is started for (an enabled module that is idle starts and is waited on), then
10
- * checked (`checkEmbeddingRequest`: no media links, no inline media the engine would fail to parse, no
11
- * media the model cannot read, no `dimensions` it does not produce) and passed through byte for byte
12
- * with the process's own key. The engine's answer, its error envelope included, comes back unchanged,
13
- * except its 500 for media it could not decode: that is the client's input, so it becomes a 400 naming
14
- * the field (`undecodableMediaVerdict`). The answers the core writes itself use the OpenAI error shape,
15
- * with `param` when a field is at fault, like the rest of `/v1`.
9
+ * A request served here has its `input` checked for a form `/v1/embeddings` takes
10
+ * (`embeddingInputRefusal`, before an idle module is started), is started for (an enabled module that
11
+ * is idle starts and is waited on), then checked (`checkEmbeddingRequest`: no media links, no inline
12
+ * media the engine would fail to parse, no media the model cannot read, no `dimensions` it does not
13
+ * produce) and passed through byte for byte with the process's own key. The engine's answer, its error
14
+ * envelope included, comes back unchanged, except its 500 for media it could not decode: that is the
15
+ * client's input, so it becomes a 400 naming the field (`undecodableMediaVerdict`). The answers the core
16
+ * writes itself use the OpenAI error shape, with `param` when a field is at fault, like the rest of `/v1`.
16
17
  */
17
18
  import type { EmbeddingBackend } from './types.js';
18
19
  import type { Exchange } from './exchange.js';
@@ -6,19 +6,21 @@
6
6
  * module's own process; any other goes on to `serveForward` (cloud providers, then the loaded
7
7
  * sessions) exactly as before, with the body already read handed over in `ex.body`.
8
8
  *
9
- * A request served here is started for (an enabled module that is idle starts and is waited on), then
10
- * checked (`checkEmbeddingRequest`: no media links, no inline media the engine would fail to parse, no
11
- * media the model cannot read, no `dimensions` it does not produce) and passed through byte for byte
12
- * with the process's own key. The engine's answer, its error envelope included, comes back unchanged,
13
- * except its 500 for media it could not decode: that is the client's input, so it becomes a 400 naming
14
- * the field (`undecodableMediaVerdict`). The answers the core writes itself use the OpenAI error shape,
15
- * with `param` when a field is at fault, like the rest of `/v1`.
9
+ * A request served here has its `input` checked for a form `/v1/embeddings` takes
10
+ * (`embeddingInputRefusal`, before an idle module is started), is started for (an enabled module that
11
+ * is idle starts and is waited on), then checked (`checkEmbeddingRequest`: no media links, no inline
12
+ * media the engine would fail to parse, no media the model cannot read, no `dimensions` it does not
13
+ * produce) and passed through byte for byte with the process's own key. The engine's answer, its error
14
+ * envelope included, comes back unchanged, except its 500 for media it could not decode: that is the
15
+ * client's input, so it becomes a 400 naming the field (`undecodableMediaVerdict`). The answers the core
16
+ * writes itself use the OpenAI error shape, with `param` when a field is at fault, like the rest of `/v1`.
16
17
  */
17
18
  import { checkEmbeddingRequest, undecodableMediaVerdict } from '../../embedding/index.js';
18
19
  import { readCapped } from './decision.js';
19
20
  import { structuredErrorJson } from './errors.js';
20
21
  import { answer, clientGone, connectTimeoutMs, header } from './exchange.js';
21
22
  import { endpointFromPath } from './trace.js';
23
+ import { embeddingInputRefusal } from './validate.js';
22
24
  import { readUpstreamText, relay, relayedHeaders, sendUpstream, sendWhole, UpstreamUnreachable, } from './wire.js';
23
25
  /** Inline images and audio are base64: a few of them make a body far larger than a text one. */
24
26
  export const MAX_EMBEDDING_BODY_BYTES = 64 * 1024 * 1024;
@@ -65,6 +67,12 @@ export async function serveEmbeddingIfOwned(ex, backend, waitMs = EMBEDDING_STAR
65
67
  trace.endpoint = endpointFromPath(ex.path);
66
68
  trace.backend = EMBEDDING_BACKEND_LABEL;
67
69
  trace.modelId = modelId;
70
+ const malformed = embeddingInputRefusal(parsed.json);
71
+ if (malformed !== undefined) {
72
+ trace.errorKind = 'bad_request';
73
+ answer(ex, 400, malformed, JSON_HEADERS);
74
+ return true;
75
+ }
68
76
  const gone = clientGone(ex);
69
77
  const target = await backend.acquire(waitMs, gone);
70
78
  if (!target.ok) {
@@ -1 +1 @@
1
- {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/server/public/embedding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAEzF,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAE5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EACL,gBAAgB,EAChB,KAAK,EACL,cAAc,EACd,YAAY,EACZ,SAAS,EACT,mBAAmB,GACpB,MAAM,WAAW,CAAA;AAElB,gGAAgG;AAChG,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA;AACxD,sFAAsF;AACtF,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAA;AAC7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,kBAAkB,CAAA;AACzD,wDAAwD;AACxD,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAA;AAEpD,MAAM,YAAY,GAA4B,CAAC,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,CAAA;AAEpF,0GAA0G;AAC1G,SAAS,OAAO,CAAC,IAAY;IAC3B,IAAI,CAAC;QACH,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;QACvD,MAAM,KAAK,GACT,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAC/D,CAAC,CAAE,IAAgC,CAAC,OAAO,CAAC;YAC5C,CAAC,CAAC,SAAS,CAAA;QACf,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,EAAY,EACZ,OAAyB,EACzB,MAAM,GAAG,uBAAuB;IAEhC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;IACjC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAClC,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,UAAU,CAAC,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAA;IACxE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;QAC7C,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,aAAa,CAAA;QAClC,MAAM,CACJ,EAAE,EACF,GAAG,EACH,mBAAmB,CACjB,4BAA4B,wBAAwB,SAAS,EAC7D,uBAAuB,EACvB,mBAAmB,CACpB,EACD,YAAY,CACb,CAAA;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,EAAE,CAAC,IAAI,GAAG,IAAI,CAAA;IACd,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,MAAM,EAAE,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAA;IAE3C,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAA;IACtB,KAAK,CAAC,QAAQ,GAAG,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IAC1C,KAAK,CAAC,OAAO,GAAG,uBAAuB,CAAA;IACvC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAA;IAC3B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAClD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,KAAK,CAAC,SAAS,GAAG,yBAAyB,CAAA;QAC3C,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,qBAAqB,CAAC,EAAE,YAAY,CAAC,CAAA;QACzG,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAClF,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,KAAK,CAAC,SAAS,GAAG,aAAa,CAAA;YAC/B,MAAM,CACJ,EAAE,EACF,GAAG,EACH,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,EAC7F,YAAY,CACb,CAAA;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,QAAQ,CAAA;QACZ,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,YAAY,CAAC,oBAAoB,MAAM,CAAC,IAAI,gBAAgB,EAAE;gBAC7E,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,kBAAkB,CAAC;oBACtE,CAAC,QAAQ,EAAE,kBAAkB,CAAC;oBAC9B,CAAC,eAAe,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC;iBAC7C;gBACD,IAAI;gBACJ,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,CAAC;gBACtC,MAAM,EAAE,IAAI;aACb,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,mBAAmB,CAAC;gBAAE,MAAM,KAAK,CAAA;YACxD,KAAK,CAAC,SAAS,GAAG,yBAAyB,CAAA;YAC3C,MAAM,CACJ,EAAE,EACF,GAAG,EACH,mBAAmB,CACjB,uCAAuC,KAAK,CAAC,OAAO,EAAE,EACtD,cAAc,EACd,qBAAqB,CACtB,EACD,YAAY,CACb,CAAA;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAA;QACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,oGAAoG;YACpG,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAA;YAC7C,MAAM,WAAW,GAAG,uBAAuB,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;YAClG,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC9B,KAAK,CAAC,SAAS,GAAG,aAAa,CAAA;gBAC/B,MAAM,CACJ,EAAE,EACF,GAAG,EACH,mBAAmB,CACjB,WAAW,CAAC,OAAO,EACnB,uBAAuB,EACvB,eAAe,EACf,WAAW,CAAC,KAAK,CAClB,EACD,YAAY,CACb,CAAA;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;YACD,KAAK,CAAC,SAAS,GAAG,mBAAmB,CAAA;YACrC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;YAC3E,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG;YAAE,KAAK,CAAC,SAAS,GAAG,mBAAmB,CAAA;QACjE,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;QACtC,OAAO,IAAI,CAAA;IACb,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAA;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/server/public/embedding.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,7 @@ import { endpointFromPath } from './trace.js';
30
30
  import { bodyIndicatesOom, computeErrorEnvelope, emptyMessagesRefusal, isComputeBackendError, isContextLimitError, isContextOverflowFinishLength, modelNotFoundJson, selectedProviderUnavailableJson, structureBackendErrorBody, structuredErrorJson, } from './errors.js';
31
31
  import { answer, clientGone, connectTimeoutMs, invalidJsonMessage } from './exchange.js';
32
32
  import { policyRefusal } from './policy.js';
33
+ import { embeddingInputRefusal, messageRolesRefusal } from './validate.js';
33
34
  import { forwardableHeaders, pipeBody, readBody, readUpstreamText, relay, relayedHeaders, sendUpstream, } from './wire.js';
34
35
  const NO_SELECTION = new Map();
35
36
  /**
@@ -167,7 +168,8 @@ export async function serveForward(ex) {
167
168
  else {
168
169
  // "Nothing is loaded" (503) and "that model is not loaded" (404) are told apart so a client can
169
170
  // tell a cold server from a typo. `/messages` has always answered 404 for both.
170
- if (!isMessages && ex.deps.listLocal().length === 0) {
171
+ const hasEmbeddingModel = ex.path === '/embeddings' && ex.deps.embedding?.modelId() != null;
172
+ if (!isMessages && !hasEmbeddingModel && ex.deps.listLocal().length === 0) {
171
173
  trace.errorKind = 'not_found';
172
174
  answer(ex, 503, 'No models are available');
173
175
  return;
@@ -195,6 +197,18 @@ export async function serveForward(ex) {
195
197
  answer(ex, 400, empty, [['Content-Type', 'application/json']]);
196
198
  return;
197
199
  }
200
+ // A chat template drops a message whose role it does not know and answers the rest; llama.cpp
201
+ // reads a mixed embeddings `input` (`["a", 7]`) as one prompt. Neither reaches an engine.
202
+ const malformed = ex.path === '/chat/completions'
203
+ ? messageRolesRefusal(json)
204
+ : ex.path === '/embeddings'
205
+ ? embeddingInputRefusal(json)
206
+ : undefined;
207
+ if (malformed !== undefined) {
208
+ trace.errorKind = 'bad_request';
209
+ answer(ex, 400, malformed, [['Content-Type', 'application/json']]);
210
+ return;
211
+ }
198
212
  key = session.apiKey;
199
213
  url = `http://127.0.0.1:${session.port}/v1${ex.path}`;
200
214
  }
@@ -250,9 +264,11 @@ export async function serveForward(ex) {
250
264
  /** The largest non-SSE body kept for telemetry: a chat completion envelope, not an arbitrary file. */
251
265
  const NON_SSE_CAPTURE_LIMIT = 256 * 1024;
252
266
  /**
253
- * Relay the upstream answer; while the inspector watches, fold what streams past into telemetry and
254
- * drop the usage-only trailer this proxy asked for itself — the client never opted into an extra chunk
255
- * with empty `choices`, and some clients throw on one. The bytes otherwise pass unchanged.
267
+ * Relay the upstream answer, folding what streams past into telemetry whenever the request is
268
+ * reported (time to first token, token counts from `usage` or llama.cpp's final `timings`; the reply
269
+ * text only while the inspector watches), and drop the usage-only trailer this proxy asked for
270
+ * itself — the client never opted into an extra chunk with empty `choices`, and some clients throw on
271
+ * one. The bytes otherwise pass unchanged.
256
272
  */
257
273
  async function relayObserved(ex, upstream, stripUsageTrailer) {
258
274
  const telemetry = ex.trace.startTelemetry();
@@ -445,8 +461,9 @@ async function inspectFinish(ex, session, modelId, raw, response) {
445
461
  catch {
446
462
  parsed = undefined;
447
463
  }
448
- if (parsed !== undefined && ex.trace.inspecting) {
449
- const telemetry = new StreamTelemetry();
464
+ if (parsed !== undefined) {
465
+ // Already parsed for the cut-off check: its usage and timings cost nothing more to report.
466
+ const telemetry = new StreamTelemetry({ previews: ex.trace.inspecting });
450
467
  telemetry.onJson(parsed, performance.now());
451
468
  ex.trace.stash(telemetry.finishFields(0));
452
469
  }