inference-server 1.0.0-beta.19

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 (227) hide show
  1. package/README.md +216 -0
  2. package/dist/api/openai/enums.d.ts +4 -0
  3. package/dist/api/openai/enums.js +17 -0
  4. package/dist/api/openai/enums.js.map +1 -0
  5. package/dist/api/openai/handlers/chat.d.ts +3 -0
  6. package/dist/api/openai/handlers/chat.js +358 -0
  7. package/dist/api/openai/handlers/chat.js.map +1 -0
  8. package/dist/api/openai/handlers/completions.d.ts +3 -0
  9. package/dist/api/openai/handlers/completions.js +169 -0
  10. package/dist/api/openai/handlers/completions.js.map +1 -0
  11. package/dist/api/openai/handlers/embeddings.d.ts +3 -0
  12. package/dist/api/openai/handlers/embeddings.js +74 -0
  13. package/dist/api/openai/handlers/embeddings.js.map +1 -0
  14. package/dist/api/openai/handlers/images.d.ts +0 -0
  15. package/dist/api/openai/handlers/images.js +4 -0
  16. package/dist/api/openai/handlers/images.js.map +1 -0
  17. package/dist/api/openai/handlers/models.d.ts +3 -0
  18. package/dist/api/openai/handlers/models.js +23 -0
  19. package/dist/api/openai/handlers/models.js.map +1 -0
  20. package/dist/api/openai/handlers/transcription.d.ts +0 -0
  21. package/dist/api/openai/handlers/transcription.js +4 -0
  22. package/dist/api/openai/handlers/transcription.js.map +1 -0
  23. package/dist/api/openai/index.d.ts +7 -0
  24. package/dist/api/openai/index.js +14 -0
  25. package/dist/api/openai/index.js.map +1 -0
  26. package/dist/api/parseJSONRequestBody.d.ts +2 -0
  27. package/dist/api/parseJSONRequestBody.js +24 -0
  28. package/dist/api/parseJSONRequestBody.js.map +1 -0
  29. package/dist/api/v1/index.d.ts +2 -0
  30. package/dist/api/v1/index.js +29 -0
  31. package/dist/api/v1/index.js.map +1 -0
  32. package/dist/cli.d.ts +1 -0
  33. package/dist/cli.js +10 -0
  34. package/dist/cli.js.map +1 -0
  35. package/dist/engines/gpt4all/engine.d.ts +34 -0
  36. package/dist/engines/gpt4all/engine.js +357 -0
  37. package/dist/engines/gpt4all/engine.js.map +1 -0
  38. package/dist/engines/gpt4all/util.d.ts +3 -0
  39. package/dist/engines/gpt4all/util.js +29 -0
  40. package/dist/engines/gpt4all/util.js.map +1 -0
  41. package/dist/engines/index.d.ts +19 -0
  42. package/dist/engines/index.js +21 -0
  43. package/dist/engines/index.js.map +1 -0
  44. package/dist/engines/node-llama-cpp/engine.d.ts +49 -0
  45. package/dist/engines/node-llama-cpp/engine.js +666 -0
  46. package/dist/engines/node-llama-cpp/engine.js.map +1 -0
  47. package/dist/engines/node-llama-cpp/types.d.ts +13 -0
  48. package/dist/engines/node-llama-cpp/types.js +2 -0
  49. package/dist/engines/node-llama-cpp/types.js.map +1 -0
  50. package/dist/engines/node-llama-cpp/util.d.ts +15 -0
  51. package/dist/engines/node-llama-cpp/util.js +84 -0
  52. package/dist/engines/node-llama-cpp/util.js.map +1 -0
  53. package/dist/engines/node-llama-cpp/validateModelFile.d.ts +8 -0
  54. package/dist/engines/node-llama-cpp/validateModelFile.js +36 -0
  55. package/dist/engines/node-llama-cpp/validateModelFile.js.map +1 -0
  56. package/dist/engines/stable-diffusion-cpp/engine.d.ts +90 -0
  57. package/dist/engines/stable-diffusion-cpp/engine.js +294 -0
  58. package/dist/engines/stable-diffusion-cpp/engine.js.map +1 -0
  59. package/dist/engines/stable-diffusion-cpp/types.d.ts +3 -0
  60. package/dist/engines/stable-diffusion-cpp/types.js +2 -0
  61. package/dist/engines/stable-diffusion-cpp/types.js.map +1 -0
  62. package/dist/engines/stable-diffusion-cpp/util.d.ts +4 -0
  63. package/dist/engines/stable-diffusion-cpp/util.js +55 -0
  64. package/dist/engines/stable-diffusion-cpp/util.js.map +1 -0
  65. package/dist/engines/stable-diffusion-cpp/validateModelFiles.d.ts +19 -0
  66. package/dist/engines/stable-diffusion-cpp/validateModelFiles.js +91 -0
  67. package/dist/engines/stable-diffusion-cpp/validateModelFiles.js.map +1 -0
  68. package/dist/engines/transformers-js/engine.d.ts +37 -0
  69. package/dist/engines/transformers-js/engine.js +538 -0
  70. package/dist/engines/transformers-js/engine.js.map +1 -0
  71. package/dist/engines/transformers-js/types.d.ts +7 -0
  72. package/dist/engines/transformers-js/types.js +2 -0
  73. package/dist/engines/transformers-js/types.js.map +1 -0
  74. package/dist/engines/transformers-js/util.d.ts +7 -0
  75. package/dist/engines/transformers-js/util.js +36 -0
  76. package/dist/engines/transformers-js/util.js.map +1 -0
  77. package/dist/engines/transformers-js/validateModelFiles.d.ts +17 -0
  78. package/dist/engines/transformers-js/validateModelFiles.js +133 -0
  79. package/dist/engines/transformers-js/validateModelFiles.js.map +1 -0
  80. package/dist/experiments/ChatWithVision.d.ts +11 -0
  81. package/dist/experiments/ChatWithVision.js +91 -0
  82. package/dist/experiments/ChatWithVision.js.map +1 -0
  83. package/dist/experiments/StableDiffPromptGenerator.d.ts +0 -0
  84. package/dist/experiments/StableDiffPromptGenerator.js +4 -0
  85. package/dist/experiments/StableDiffPromptGenerator.js.map +1 -0
  86. package/dist/experiments/VoiceFunctionCall.d.ts +18 -0
  87. package/dist/experiments/VoiceFunctionCall.js +51 -0
  88. package/dist/experiments/VoiceFunctionCall.js.map +1 -0
  89. package/dist/http.d.ts +19 -0
  90. package/dist/http.js +54 -0
  91. package/dist/http.js.map +1 -0
  92. package/dist/index.d.ts +7 -0
  93. package/dist/index.js +8 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/instance.d.ts +88 -0
  96. package/dist/instance.js +594 -0
  97. package/dist/instance.js.map +1 -0
  98. package/dist/lib/acquireFileLock.d.ts +7 -0
  99. package/dist/lib/acquireFileLock.js +38 -0
  100. package/dist/lib/acquireFileLock.js.map +1 -0
  101. package/dist/lib/calculateContextIdentity.d.ts +7 -0
  102. package/dist/lib/calculateContextIdentity.js +39 -0
  103. package/dist/lib/calculateContextIdentity.js.map +1 -0
  104. package/dist/lib/calculateFileChecksum.d.ts +1 -0
  105. package/dist/lib/calculateFileChecksum.js +16 -0
  106. package/dist/lib/calculateFileChecksum.js.map +1 -0
  107. package/dist/lib/copyDirectory.d.ts +6 -0
  108. package/dist/lib/copyDirectory.js +27 -0
  109. package/dist/lib/copyDirectory.js.map +1 -0
  110. package/dist/lib/decodeAudio.d.ts +1 -0
  111. package/dist/lib/decodeAudio.js +26 -0
  112. package/dist/lib/decodeAudio.js.map +1 -0
  113. package/dist/lib/downloadModelFile.d.ts +10 -0
  114. package/dist/lib/downloadModelFile.js +58 -0
  115. package/dist/lib/downloadModelFile.js.map +1 -0
  116. package/dist/lib/flattenMessageTextContent.d.ts +2 -0
  117. package/dist/lib/flattenMessageTextContent.js +11 -0
  118. package/dist/lib/flattenMessageTextContent.js.map +1 -0
  119. package/dist/lib/getCacheDirPath.d.ts +12 -0
  120. package/dist/lib/getCacheDirPath.js +31 -0
  121. package/dist/lib/getCacheDirPath.js.map +1 -0
  122. package/dist/lib/loadImage.d.ts +12 -0
  123. package/dist/lib/loadImage.js +30 -0
  124. package/dist/lib/loadImage.js.map +1 -0
  125. package/dist/lib/logger.d.ts +12 -0
  126. package/dist/lib/logger.js +98 -0
  127. package/dist/lib/logger.js.map +1 -0
  128. package/dist/lib/math.d.ts +7 -0
  129. package/dist/lib/math.js +30 -0
  130. package/dist/lib/math.js.map +1 -0
  131. package/dist/lib/resolveModelFileLocation.d.ts +15 -0
  132. package/dist/lib/resolveModelFileLocation.js +41 -0
  133. package/dist/lib/resolveModelFileLocation.js.map +1 -0
  134. package/dist/lib/util.d.ts +7 -0
  135. package/dist/lib/util.js +61 -0
  136. package/dist/lib/util.js.map +1 -0
  137. package/dist/lib/validateModelFile.d.ts +9 -0
  138. package/dist/lib/validateModelFile.js +62 -0
  139. package/dist/lib/validateModelFile.js.map +1 -0
  140. package/dist/lib/validateModelOptions.d.ts +3 -0
  141. package/dist/lib/validateModelOptions.js +23 -0
  142. package/dist/lib/validateModelOptions.js.map +1 -0
  143. package/dist/pool.d.ts +61 -0
  144. package/dist/pool.js +512 -0
  145. package/dist/pool.js.map +1 -0
  146. package/dist/server.d.ts +59 -0
  147. package/dist/server.js +221 -0
  148. package/dist/server.js.map +1 -0
  149. package/dist/standalone.d.ts +1 -0
  150. package/dist/standalone.js +306 -0
  151. package/dist/standalone.js.map +1 -0
  152. package/dist/store.d.ts +60 -0
  153. package/dist/store.js +203 -0
  154. package/dist/store.js.map +1 -0
  155. package/dist/types/completions.d.ts +57 -0
  156. package/dist/types/completions.js +2 -0
  157. package/dist/types/completions.js.map +1 -0
  158. package/dist/types/index.d.ts +326 -0
  159. package/dist/types/index.js +2 -0
  160. package/dist/types/index.js.map +1 -0
  161. package/docs/engines.md +28 -0
  162. package/docs/gpu.md +72 -0
  163. package/docs/http-api.md +147 -0
  164. package/examples/all-options.js +108 -0
  165. package/examples/chat-cli.js +56 -0
  166. package/examples/chat-server.js +65 -0
  167. package/examples/concurrency.js +70 -0
  168. package/examples/express.js +70 -0
  169. package/examples/pool.js +91 -0
  170. package/package.json +113 -0
  171. package/src/api/openai/enums.ts +20 -0
  172. package/src/api/openai/handlers/chat.ts +408 -0
  173. package/src/api/openai/handlers/completions.ts +196 -0
  174. package/src/api/openai/handlers/embeddings.ts +92 -0
  175. package/src/api/openai/handlers/images.ts +3 -0
  176. package/src/api/openai/handlers/models.ts +33 -0
  177. package/src/api/openai/handlers/transcription.ts +2 -0
  178. package/src/api/openai/index.ts +16 -0
  179. package/src/api/parseJSONRequestBody.ts +26 -0
  180. package/src/api/v1/DRAFT.md +16 -0
  181. package/src/api/v1/index.ts +37 -0
  182. package/src/cli.ts +9 -0
  183. package/src/engines/gpt4all/engine.ts +441 -0
  184. package/src/engines/gpt4all/util.ts +31 -0
  185. package/src/engines/index.ts +28 -0
  186. package/src/engines/node-llama-cpp/engine.ts +811 -0
  187. package/src/engines/node-llama-cpp/types.ts +17 -0
  188. package/src/engines/node-llama-cpp/util.ts +126 -0
  189. package/src/engines/node-llama-cpp/validateModelFile.ts +46 -0
  190. package/src/engines/stable-diffusion-cpp/engine.ts +369 -0
  191. package/src/engines/stable-diffusion-cpp/types.ts +54 -0
  192. package/src/engines/stable-diffusion-cpp/util.ts +58 -0
  193. package/src/engines/stable-diffusion-cpp/validateModelFiles.ts +119 -0
  194. package/src/engines/transformers-js/engine.ts +659 -0
  195. package/src/engines/transformers-js/types.ts +25 -0
  196. package/src/engines/transformers-js/util.ts +40 -0
  197. package/src/engines/transformers-js/validateModelFiles.ts +168 -0
  198. package/src/experiments/ChatWithVision.ts +103 -0
  199. package/src/experiments/StableDiffPromptGenerator.ts +2 -0
  200. package/src/experiments/VoiceFunctionCall.ts +71 -0
  201. package/src/http.ts +72 -0
  202. package/src/index.ts +7 -0
  203. package/src/instance.ts +723 -0
  204. package/src/lib/acquireFileLock.ts +38 -0
  205. package/src/lib/calculateContextIdentity.ts +53 -0
  206. package/src/lib/calculateFileChecksum.ts +18 -0
  207. package/src/lib/copyDirectory.ts +29 -0
  208. package/src/lib/decodeAudio.ts +39 -0
  209. package/src/lib/downloadModelFile.ts +70 -0
  210. package/src/lib/flattenMessageTextContent.ts +19 -0
  211. package/src/lib/getCacheDirPath.ts +34 -0
  212. package/src/lib/loadImage.ts +46 -0
  213. package/src/lib/logger.ts +112 -0
  214. package/src/lib/math.ts +31 -0
  215. package/src/lib/resolveModelFileLocation.ts +49 -0
  216. package/src/lib/util.ts +75 -0
  217. package/src/lib/validateModelFile.ts +71 -0
  218. package/src/lib/validateModelOptions.ts +31 -0
  219. package/src/pool.ts +651 -0
  220. package/src/server.ts +270 -0
  221. package/src/standalone.ts +320 -0
  222. package/src/store.ts +278 -0
  223. package/src/types/completions.ts +86 -0
  224. package/src/types/index.ts +488 -0
  225. package/tsconfig.json +29 -0
  226. package/tsconfig.release.json +11 -0
  227. package/vitest.config.ts +18 -0
package/dist/server.js ADDED
@@ -0,0 +1,221 @@
1
+ import path from 'node:path';
2
+ import { builtInEngineNames } from './engines/index.js';
3
+ import { ModelPool } from './pool.js';
4
+ import { ModelStore } from './store.js';
5
+ import { createSublogger, LogLevels } from './lib/logger.js';
6
+ import { resolveModelFileLocation } from './lib/resolveModelFileLocation.js';
7
+ import { validateModelOptions } from './lib/validateModelOptions.js';
8
+ import { getCacheDirPath } from './lib/getCacheDirPath.js';
9
+ export function startModelServer(options) {
10
+ const server = new ModelServer(options);
11
+ server.start();
12
+ return server;
13
+ }
14
+ export class ModelServer {
15
+ pool;
16
+ store;
17
+ engines = {};
18
+ log;
19
+ constructor(options) {
20
+ this.log = createSublogger(options.log);
21
+ let modelsCachePath = getCacheDirPath('models');
22
+ if (options.cachePath) {
23
+ modelsCachePath = path.join(options.cachePath, 'models');
24
+ }
25
+ const modelsWithDefaults = {};
26
+ const usedEngines = [];
27
+ for (const modelId in options.models) {
28
+ const modelOptions = options.models[modelId];
29
+ const isBuiltIn = builtInEngineNames.includes(modelOptions.engine);
30
+ if (isBuiltIn) {
31
+ const builtInModelOptions = modelOptions;
32
+ // can validate and resolve location of model files if a built-in engine is used
33
+ validateModelOptions(modelId, builtInModelOptions);
34
+ modelsWithDefaults[modelId] = {
35
+ id: modelId,
36
+ minInstances: 0,
37
+ maxInstances: 1,
38
+ modelsCachePath,
39
+ location: resolveModelFileLocation({
40
+ url: builtInModelOptions.url,
41
+ filePath: builtInModelOptions.location,
42
+ modelsCachePath,
43
+ }),
44
+ ...builtInModelOptions,
45
+ };
46
+ }
47
+ else {
48
+ const customEngineOptions = modelOptions;
49
+ modelsWithDefaults[modelId] = {
50
+ id: modelId,
51
+ minInstances: 0,
52
+ maxInstances: 1,
53
+ modelsCachePath,
54
+ ...customEngineOptions,
55
+ };
56
+ }
57
+ usedEngines.push({
58
+ model: modelId,
59
+ engine: modelOptions.engine,
60
+ });
61
+ }
62
+ const customEngines = Object.keys(options.engines ?? {});
63
+ for (const ref of usedEngines) {
64
+ const isBuiltIn = builtInEngineNames.includes(ref.engine);
65
+ const isCustom = customEngines.includes(ref.engine);
66
+ if (!isBuiltIn && !isCustom) {
67
+ throw new Error(`Engine "${ref.engine}" used by model "${ref.model}" does not exist`);
68
+ }
69
+ if (isCustom) {
70
+ this.engines[ref.engine] = options.engines[ref.engine];
71
+ }
72
+ }
73
+ this.store = new ModelStore({
74
+ log: this.log,
75
+ // TODO expose this? or remove it?
76
+ // prepareConcurrency: 2,
77
+ models: modelsWithDefaults,
78
+ modelsCachePath,
79
+ });
80
+ this.pool = new ModelPool({
81
+ log: this.log,
82
+ concurrency: options.concurrency ?? 1,
83
+ models: modelsWithDefaults,
84
+ }, this.prepareInstance.bind(this));
85
+ }
86
+ modelExists(modelId) {
87
+ return !!this.pool.config.models[modelId];
88
+ }
89
+ async start() {
90
+ const engineStartPromises = [];
91
+ // call startEngine on custom engines
92
+ for (const [key, methods] of Object.entries(this.engines)) {
93
+ if (methods.start) {
94
+ engineStartPromises.push(methods.start(this));
95
+ }
96
+ }
97
+ // import built-in engines
98
+ for (const key of builtInEngineNames) {
99
+ // skip unused engines
100
+ const modelUsingEngine = Object.keys(this.store.models).find((modelId) => this.store.models[modelId].engine === key);
101
+ if (!modelUsingEngine) {
102
+ continue;
103
+ }
104
+ engineStartPromises.push(new Promise(async (resolve, reject) => {
105
+ try {
106
+ const engine = await import(`./engines/${key}/engine.js`);
107
+ this.engines[key] = engine;
108
+ resolve({
109
+ key,
110
+ engine,
111
+ });
112
+ }
113
+ catch (err) {
114
+ reject(err);
115
+ }
116
+ }));
117
+ }
118
+ await Promise.all(engineStartPromises);
119
+ await Promise.all([this.store.init(this.engines), this.pool.init(this.engines)]);
120
+ }
121
+ async stop() {
122
+ this.log(LogLevels.info, 'Stopping model server');
123
+ this.pool.queue.clear();
124
+ this.store.dispose();
125
+ // need to make sure all tasks are canceled, waiting for idle can make stop hang
126
+ // await this.pool.queue.onIdle() // would wait until all completions are done
127
+ try {
128
+ await this.pool.dispose(); // might cause abort errors when there are still running tasks
129
+ }
130
+ catch (err) {
131
+ this.log(LogLevels.error, 'Error while stopping model server', err);
132
+ }
133
+ this.log(LogLevels.debug, 'Model server stopped');
134
+ }
135
+ async requestInstance(request, signal) {
136
+ return this.pool.requestInstance(request, signal);
137
+ }
138
+ // gets called by the pool right before a new instance is created
139
+ async prepareInstance(instance, signal) {
140
+ const model = instance.config;
141
+ const modelStoreStatus = this.store.models[model.id].status;
142
+ if (modelStoreStatus === 'unloaded') {
143
+ await this.store.prepareModel(model.id, signal);
144
+ }
145
+ if (modelStoreStatus === 'preparing') {
146
+ const modelReady = new Promise((resolve, reject) => {
147
+ const onCompleted = async (storeModel) => {
148
+ if (storeModel.id === model.id) {
149
+ this.store.prepareQueue.off('completed', onCompleted);
150
+ if (storeModel.status === 'ready') {
151
+ resolve();
152
+ }
153
+ else {
154
+ reject();
155
+ }
156
+ }
157
+ };
158
+ this.store.prepareQueue.on('completed', onCompleted);
159
+ });
160
+ await modelReady;
161
+ }
162
+ }
163
+ async processChatCompletionTask(args, options) {
164
+ const lock = await this.requestInstance(args);
165
+ const task = lock.instance.processChatCompletionTask(args, options);
166
+ const result = await task.result;
167
+ await lock.release();
168
+ return result;
169
+ }
170
+ async processTextCompletionTask(args, options) {
171
+ const lock = await this.requestInstance(args);
172
+ const task = lock.instance.processTextCompletionTask(args, options);
173
+ const result = await task.result;
174
+ await lock.release();
175
+ return result;
176
+ }
177
+ async processEmbeddingTask(args, options) {
178
+ const lock = await this.requestInstance(args);
179
+ const task = lock.instance.processEmbeddingTask(args, options);
180
+ const result = await task.result;
181
+ await lock.release();
182
+ return result;
183
+ }
184
+ async processImageToTextTask(args, options) {
185
+ const lock = await this.requestInstance(args);
186
+ const task = lock.instance.processImageToTextTask(args, options);
187
+ const result = await task.result;
188
+ await lock.release();
189
+ return result;
190
+ }
191
+ async processSpeechToTextTask(args, options) {
192
+ const lock = await this.requestInstance(args);
193
+ const task = lock.instance.processSpeechToTextTask(args, options);
194
+ const result = await task.result;
195
+ await lock.release();
196
+ return result;
197
+ }
198
+ async processTextToImageTask(args, options) {
199
+ const lock = await this.requestInstance(args);
200
+ const task = lock.instance.processTextToImageTask(args, options);
201
+ const result = await task.result;
202
+ await lock.release();
203
+ return result;
204
+ }
205
+ async processImageToImageTask(args, options) {
206
+ const lock = await this.requestInstance(args);
207
+ const task = lock.instance.processImageToImageTask(args, options);
208
+ const result = await task.result;
209
+ await lock.release();
210
+ return result;
211
+ }
212
+ getStatus() {
213
+ const poolStatus = this.pool.getStatus();
214
+ const storeStatus = this.store.getStatus();
215
+ return {
216
+ pool: poolStatus,
217
+ store: storeStatus,
218
+ };
219
+ }
220
+ }
221
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,306 @@
1
+ import { format as formatURL } from 'node:url';
2
+ import { ModelHTTPServer } from './http.js';
3
+ // Currently only used for debugging. Do not use.
4
+ const serverOptions = {
5
+ listen: {
6
+ port: 3000,
7
+ },
8
+ log: 'debug',
9
+ concurrency: 2,
10
+ engines: {
11
+ // 'chat-with-vision': new ChatWithVisionEngine({
12
+ // imageToTextModel: 'florence2',
13
+ // chatModel: 'llama3-8b',
14
+ // }),
15
+ // 'voice-function-calling': new VoiceFunctionCallEngine({
16
+ // speechToTextModel: 'whisper-base',
17
+ // chatModel: 'functionary',
18
+ // }),
19
+ },
20
+ models: {
21
+ // 'sciphi-triplex': {
22
+ // url: 'https://huggingface.co/SciPhi/Triplex/blob/main/quantized_model-Q4_K_M.gguf',
23
+ // sha256: '6f8f6f1fca005640a1282dd0bd12512dedf22957d0c2135ba5e71583d33754fc',
24
+ // engine: 'node-llama-cpp',
25
+ // task: 'text-completion',
26
+ // },
27
+ // 'lite-mistral': {
28
+ // url: 'https://huggingface.co/bartowski/Lite-Mistral-150M-v2-Instruct-GGUF/resolve/main/Lite-Mistral-150M-v2-Instruct-Q8_0.gguf',
29
+ // sha256: 'b369c9b1ac20b66b2f94117d5cdc71d029a47a33948cefef9fe104615dcddfbd',
30
+ // engine: 'node-llama-cpp',
31
+ // task: 'text-completion',
32
+ // prepare: 'async',
33
+ // },
34
+ // 'gemma-9b': {
35
+ // url: 'https://huggingface.co/bartowski/gemma-2-9b-it-GGUF/blob/main/gemma-2-9b-it-Q4_K_M.gguf',
36
+ // sha256:
37
+ // '13b2a7b4115bbd0900162edcebe476da1ba1fc24e718e8b40d32f6e300f56dfe',
38
+ // engine: 'node-llama-cpp',
39
+ // task: 'text-completion',
40
+ // prepare: 'async',
41
+ // },
42
+ // 'llama3.1-8b': {
43
+ // url: 'https://huggingface.co/lmstudio-community/Meta-Llama-3.1-8B-Instruct-GGUF/blob/main/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf',
44
+ // sha256:
45
+ // '2a4ca64e02e7126436cfdb066dd7311f2486eb487191910d3d000fde13826a4d',
46
+ // engine: 'node-llama-cpp',
47
+ // task: 'text-completion',
48
+ // prepare: 'async',
49
+ // },
50
+ // 'dolphin-nemo-12b': {
51
+ // url: 'https://huggingface.co/cognitivecomputations/dolphin-2.9.3-mistral-nemo-12b-gguf/blob/main/dolphin-2.9.3-mistral-nemo-Q4_K_M.gguf',
52
+ // sha256: '09f9114e06d88b791e322586cf28a844d2d0a3876d04d6deffe2dfb26616dd83',
53
+ // engine: 'node-llama-cpp',
54
+ // task: 'text-completion',
55
+ // prepare: 'async',
56
+ // },
57
+ // 'phi3-mini-4k': {
58
+ // task: 'text-completion',
59
+ // url: 'https://gpt4all.io/models/gguf/Phi-3-mini-4k-instruct.Q4_0.gguf',
60
+ // engine: 'gpt4all',
61
+ // maxInstances: 2,
62
+ // prepare: 'async',
63
+ // },
64
+ // 'mxbai-embed-large-v1': {
65
+ // url: 'https://huggingface.co/mixedbread-ai/mxbai-embed-large-v1',
66
+ // engine: 'transformers-js',
67
+ // task: 'embedding',
68
+ // prepare: 'blocking',
69
+ // device: {
70
+ // gpu: false,
71
+ // },
72
+ // },
73
+ // 'jina-clip-v1': {
74
+ // url: 'https://huggingface.co/jinaai/jina-clip-v1',
75
+ // engine: 'transformers-js',
76
+ // task: 'embedding',
77
+ // textModel: {
78
+ // modelClass: CLIPTextModelWithProjection,
79
+ // },
80
+ // visionModel: {
81
+ // processor: {
82
+ // url: 'https://huggingface.co/Xenova/clip-vit-base-patch32',
83
+ // // url: 'https://huggingface.co/Xenova/vit-base-patch16-224-in21k',
84
+ // },
85
+ // modelClass: CLIPVisionModelWithProjection,
86
+ // },
87
+ // prepare: 'blocking',
88
+ // device: {
89
+ // gpu: false,
90
+ // },
91
+ // },
92
+ // 'florence2-large': {
93
+ // url: 'https://huggingface.co/onnx-community/Florence-2-large-ft',
94
+ // engine: 'transformers-js',
95
+ // task: 'image-to-text',
96
+ // prepare: 'blocking',
97
+ // visionModel: {
98
+ // modelClass: Florence2ForConditionalGeneration,
99
+ // dtype: {
100
+ // embed_tokens: 'fp16',
101
+ // vision_encoder: 'fp32',
102
+ // encoder_model: 'fp16',
103
+ // decoder_model_merged: 'q4',
104
+ // },
105
+ // },
106
+ // device: {
107
+ // gpu: false,
108
+ // },
109
+ // },
110
+ // 'whisper-base': {
111
+ // url: 'https://huggingface.co/onnx-community/whisper-base',
112
+ // engine: 'transformers-js',
113
+ // task: 'speech-to-text',
114
+ // prepare: 'async',
115
+ // minInstances: 1,
116
+ // speechModel: {
117
+ // modelClass: WhisperForConditionalGeneration,
118
+ // dtype: {
119
+ // encoder_model: 'fp32', // 'fp16' works too
120
+ // decoder_model_merged: 'q4', // or 'fp32' ('fp16' is broken)
121
+ // },
122
+ // },
123
+ // device: {
124
+ // gpu: false,
125
+ // },
126
+ // },
127
+ // 'mistral-nemo-12b': {
128
+ // 'url': 'https://huggingface.co/mradermacher/Mistral-Nemo-Instruct-2407-GGUF/blob/main/Mistral-Nemo-Instruct-2407.Q4_K_M.gguf',
129
+ // 'sha256': '1ac4b6cdf0eeb1e2145f0097c6fd0a75df541e143f226a8ff25c8ae0e8dfff6f',
130
+ // 'engine': 'node-llama-cpp',
131
+ // 'task': 'text-completion',
132
+ // 'prepare': 'async',
133
+ // },
134
+ // 'phi-3.5-mini': {
135
+ // url: 'https://huggingface.co/bartowski/Phi-3.5-mini-instruct-GGUF/blob/main/Phi-3.5-mini-instruct-Q4_K_M.gguf',
136
+ // sha256:
137
+ // 'e4165e3a71af97f1b4820da61079826d8752a2088e313af0c7d346796c38eff5',
138
+ // engine: 'node-llama-cpp',
139
+ // task: 'text-completion',
140
+ // prepare: 'async',
141
+ // minInstances: 1,
142
+ // device: {
143
+ // gpu: 'vulkan',
144
+ // },
145
+ // },
146
+ // 'falcon-mamba-7b': {
147
+ // url: 'https://huggingface.co/mradermacher/falcon-mamba-7b-instruct-GGUF/blob/main/falcon-mamba-7b-instruct.Q4_K_M.gguf',
148
+ // sha256: 'f3357486034d89dd91fcefdb91bb1dfadfe0fd2969349a8a404e59d2bd3ad1b8',
149
+ // engine: 'node-llama-cpp',
150
+ // task: 'text-completion',
151
+ // prepare: 'async',
152
+ // },
153
+ // 'florence2-large': {
154
+ // url: 'https://huggingface.co/onnx-community/Florence-2-large-ft',
155
+ // engine: 'transformers-js',
156
+ // task: 'image-to-text',
157
+ // minInstances: 1,
158
+ // visionModel: {
159
+ // modelClass: Florence2ForConditionalGeneration,
160
+ // dtype: {
161
+ // embed_tokens: 'fp16',
162
+ // vision_encoder: 'fp32',
163
+ // encoder_model: 'fp16',
164
+ // decoder_model_merged: 'q4',
165
+ // },
166
+ // },
167
+ // device: {
168
+ // gpu: false,
169
+ // },
170
+ // },
171
+ // 'mxbai-embed-large-v1': {
172
+ // url: 'https://huggingface.co/mixedbread-ai/mxbai-embed-large-v1',
173
+ // engine: 'transformers-js',
174
+ // task: 'embedding',
175
+ // prepare: 'blocking',
176
+ // device: {
177
+ // gpu: false,
178
+ // },
179
+ // },
180
+ // 'functionary-3.2-small': {
181
+ // url: 'https://huggingface.co/meetkai/functionary-small-v3.2-GGUF/blob/main/functionary-small-v3.2.Q4_0.gguf',
182
+ // sha256: 'c0afdbbffa498a8490dea3401e34034ac0f2c6e337646513a7dbc04fcef1c3a4',
183
+ // engine: 'node-llama-cpp',
184
+ // task: 'text-completion',
185
+ // prepare: 'blocking',
186
+ // },
187
+ // 'flux-schnell': {
188
+ // url: 'https://huggingface.co/leejet/FLUX.1-schnell-gguf/resolve/main/flux1-schnell-q4_0.gguf',
189
+ // task: 'text-to-image',
190
+ // sha256: '4f30741d2bfc786c92934ce925fcb0a43df3441e76504b797c3d5d5f0878fa6f',
191
+ // engine: 'stable-diffusion-cpp',
192
+ // prepare: 'blocking',
193
+ // diffusionModel: true,
194
+ // samplingMethod: 'euler_a',
195
+ // vae: {
196
+ // url: 'https://huggingface.co/second-state/FLUX.1-schnell-GGUF/blob/main/ae.safetensors',
197
+ // },
198
+ // clipL: {
199
+ // url: 'https://huggingface.co/second-state/FLUX.1-schnell-GGUF/blob/main/clip_l.safetensors',
200
+ // },
201
+ // t5xxl: {
202
+ // // url: 'https://huggingface.co/second-state/FLUX.1-schnell-GGUF/blob/main/t5xxl_fp16.safetensors',
203
+ // url: 'https://huggingface.co/second-state/FLUX.1-schnell-GGUF/blob/main/t5xxl-Q8_0.gguf',
204
+ // },
205
+ // },
206
+ // 'sd-3.5-turbo': {
207
+ // url: 'https://huggingface.co/stduhpf/SD3.5-Large-Turbo-GGUF-mixed-sdcpp/blob/main/legacy/sd3.5_large_turbo-q4_0.gguf',
208
+ // sha256: '52495d9c4356065a1378a93c9556a9eb465e10014ba9ce364512674267405bb2',
209
+ // engine: 'stable-diffusion-cpp',
210
+ // task: 'text-to-image',
211
+ // prepare: 'blocking',
212
+ // samplingMethod: 'euler',
213
+ // clipG: {
214
+ // url: 'https://huggingface.co/Comfy-Org/stable-diffusion-3.5-fp8/blob/main/text_encoders/clip_g.safetensors',
215
+ // sha256: 'ec310df2af79c318e24d20511b601a591ca8cd4f1fce1d8dff822a356bcdb1f4',
216
+ // },
217
+ // clipL: {
218
+ // url: 'https://huggingface.co/Comfy-Org/stable-diffusion-3.5-fp8/blob/main/text_encoders/clip_l.safetensors',
219
+ // sha256: '660c6f5b1abae9dc498ac2d21e1347d2abdb0cf6c0c0c8576cd796491d9a6cdd',
220
+ // },
221
+ // t5xxl: {
222
+ // url: 'https://huggingface.co/Comfy-Org/stable-diffusion-3.5-fp8/blob/main/text_encoders/t5xxl_fp8_e4m3fn.safetensors',
223
+ // sha256: '7d330da4816157540d6bb7838bf63a0f02f573fc48ca4d8de34bb0cbfd514f09',
224
+ // },
225
+ // },
226
+ // 'trocr-printed': {
227
+ // url: 'https://huggingface.co/Xenova/trocr-small-printed',
228
+ // engine: 'transformers-js',
229
+ // task: 'image-to-text',
230
+ // prepare: 'blocking',
231
+ // minInstances: 1,
232
+ // // textModel: {
233
+ // // modelClass: TrOCRPreTrainedModel,
234
+ // // processorClass: DeiTFeatureExtractor,
235
+ // // },
236
+ // device: {
237
+ // gpu: false,
238
+ // },
239
+ // },
240
+ // 'sdxl-turbo': {
241
+ // url: 'https://huggingface.co/stabilityai/sdxl-turbo/blob/main/sd_xl_turbo_1.0_fp16.safetensors',
242
+ // sha256:
243
+ // 'e869ac7d6942cb327d68d5ed83a40447aadf20e0c3358d98b2cc9e270db0da26',
244
+ // engine: 'stable-diffusion-cpp',
245
+ // task: 'image-to-image',
246
+ // prepare: 'blocking',
247
+ // samplingMethod: 'euler',
248
+ // vae: {
249
+ // url: 'https://huggingface.co/madebyollin/sdxl-vae-fp16-fix/blob/main/sdxl.vae.safetensors',
250
+ // sha256:
251
+ // '235745af8d86bf4a4c1b5b4f529868b37019a10f7c0b2e79ad0abca3a22bc6e1',
252
+ // },
253
+ // },
254
+ // 'flux-light': {
255
+ // url: 'https://huggingface.co/city96/flux.1-lite-8B-alpha-gguf/blob/main/flux.1-lite-8B-alpha-Q8_0.gguf',
256
+ // sha256:
257
+ // 'efc598d62123f2fdfd682948f533fee081f7fb1295b14d002ac1e66cae5f01a5',
258
+ // engine: 'stable-diffusion-cpp',
259
+ // task: 'image-to-image',
260
+ // prepare: 'blocking',
261
+ // },
262
+ // 'sd-3-medium': {
263
+ // url: 'https://huggingface.co/second-state/stable-diffusion-3-medium-GGUF/blob/main/sd3-medium-Q8_0.gguf',
264
+ // sha256: '7e34dfeb71f8cdbc8338677b63a444897cf4c5692ab4c1d98f04cbba6751885a',
265
+ // engine: 'stable-diffusion-cpp',
266
+ // task: 'text-to-image',
267
+ // prepare: 'async',
268
+ // },
269
+ // 'sd-1.5': {
270
+ // url: 'https://huggingface.co/second-state/stable-diffusion-v1-5-GGUF/blob/main/stable-diffusion-v1-5-pruned-emaonly-f32.gguf',
271
+ // sha256: '52c7ca39d8d48d6f44fa4ff2c44569f3c924d92311108cb38492958350d48ff8',
272
+ // engine: 'stable-diffusion-cpp',
273
+ // task: 'text-to-image',
274
+ // prepare: 'async',
275
+ // },
276
+ // 'llama-3.2-3b': {
277
+ // url: 'https://huggingface.co/bartowski/Llama-3.2-3B-Instruct-GGUF/blob/main/Llama-3.2-3B-Instruct-Q6_K_L.gguf',
278
+ // sha256:
279
+ // 'c542b14ec07b8b3cb8d777e1a68ee5aabb964167719466d4c685c29fcfd04900',
280
+ // engine: 'node-llama-cpp',
281
+ // task: 'text-completion',
282
+ // prepare: 'blocking',
283
+ // },
284
+ },
285
+ };
286
+ async function main() {
287
+ const server = new ModelHTTPServer(serverOptions);
288
+ await server.start();
289
+ const { address, port } = server.httpServer.address();
290
+ const hostname = address === '' || address === '::' ? 'localhost' : address;
291
+ const url = formatURL({
292
+ protocol: 'http',
293
+ hostname,
294
+ port,
295
+ pathname: '/',
296
+ });
297
+ console.log(`Server listening at ${url}`);
298
+ }
299
+ main().catch((err) => {
300
+ console.error(err);
301
+ process.exit(1);
302
+ });
303
+ process.on('unhandledRejection', (err) => {
304
+ console.error('Unhandled rejection:', err);
305
+ });
306
+ //# sourceMappingURL=standalone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standalone.js","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import PQueue from 'p-queue';
2
+ import { FileDownloadProgress, ModelConfig, ModelEngine } from './types/index.js';
3
+ import { Logger, LogLevel } from './lib/logger.js';
4
+ export interface StoredModel extends ModelConfig {
5
+ meta?: unknown;
6
+ downloads?: Map<string, DownloadTracker>;
7
+ status: 'unloaded' | 'preparing' | 'ready' | 'error';
8
+ }
9
+ export interface ModelStoreOptions {
10
+ modelsCachePath: string;
11
+ models: Record<string, ModelConfig>;
12
+ prepareConcurrency?: number;
13
+ log?: Logger | LogLevel;
14
+ }
15
+ export declare class ModelStore {
16
+ prepareQueue: PQueue;
17
+ models: Record<string, StoredModel>;
18
+ engines?: Record<string, ModelEngine>;
19
+ private prepareController;
20
+ private modelsCachePath;
21
+ private log;
22
+ constructor(options: ModelStoreOptions);
23
+ init(engines: Record<string, ModelEngine>): Promise<void>;
24
+ dispose(): void;
25
+ private onDownloadProgress;
26
+ prepareModel(modelId: string, signal?: AbortSignal): Promise<void>;
27
+ getStatus(): {
28
+ [k: string]: {
29
+ engine: (string & {}) | import("./engines").BuiltInEngineName;
30
+ device: {
31
+ gpu?: boolean | "auto" | (string & {});
32
+ } | undefined;
33
+ minInstances: number;
34
+ maxInstances: number;
35
+ status: "error" | "unloaded" | "preparing" | "ready";
36
+ downloads: any;
37
+ };
38
+ };
39
+ }
40
+ type ProgressState = {
41
+ loadedBytes: number;
42
+ totalBytes: number;
43
+ timestamp: number;
44
+ };
45
+ type DownloadStatus = {
46
+ percent: number;
47
+ speed: number;
48
+ etaSeconds: number;
49
+ loadedBytes: number;
50
+ totalBytes: number;
51
+ };
52
+ declare class DownloadTracker {
53
+ progressBuffer: ProgressState[];
54
+ private timeWindow;
55
+ constructor(timeWindow?: number);
56
+ pushProgress({ loadedBytes, totalBytes }: FileDownloadProgress): void;
57
+ private cleanup;
58
+ getStatus(): DownloadStatus | null;
59
+ }
60
+ export {};