@appkit/llamacpp-cli 1.8.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +249 -40
  3. package/dist/cli.js +154 -10
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/completion.d.ts +9 -0
  6. package/dist/commands/completion.d.ts.map +1 -0
  7. package/dist/commands/completion.js +83 -0
  8. package/dist/commands/completion.js.map +1 -0
  9. package/dist/commands/monitor.js +1 -1
  10. package/dist/commands/monitor.js.map +1 -1
  11. package/dist/commands/ps.d.ts +1 -3
  12. package/dist/commands/ps.d.ts.map +1 -1
  13. package/dist/commands/ps.js +36 -115
  14. package/dist/commands/ps.js.map +1 -1
  15. package/dist/commands/router/config.d.ts +11 -0
  16. package/dist/commands/router/config.d.ts.map +1 -0
  17. package/dist/commands/router/config.js +100 -0
  18. package/dist/commands/router/config.js.map +1 -0
  19. package/dist/commands/router/logs.d.ts +12 -0
  20. package/dist/commands/router/logs.d.ts.map +1 -0
  21. package/dist/commands/router/logs.js +238 -0
  22. package/dist/commands/router/logs.js.map +1 -0
  23. package/dist/commands/router/restart.d.ts +2 -0
  24. package/dist/commands/router/restart.d.ts.map +1 -0
  25. package/dist/commands/router/restart.js +39 -0
  26. package/dist/commands/router/restart.js.map +1 -0
  27. package/dist/commands/router/start.d.ts +2 -0
  28. package/dist/commands/router/start.d.ts.map +1 -0
  29. package/dist/commands/router/start.js +60 -0
  30. package/dist/commands/router/start.js.map +1 -0
  31. package/dist/commands/router/status.d.ts +2 -0
  32. package/dist/commands/router/status.d.ts.map +1 -0
  33. package/dist/commands/router/status.js +116 -0
  34. package/dist/commands/router/status.js.map +1 -0
  35. package/dist/commands/router/stop.d.ts +2 -0
  36. package/dist/commands/router/stop.d.ts.map +1 -0
  37. package/dist/commands/router/stop.js +36 -0
  38. package/dist/commands/router/stop.js.map +1 -0
  39. package/dist/commands/tui.d.ts +2 -0
  40. package/dist/commands/tui.d.ts.map +1 -0
  41. package/dist/commands/tui.js +27 -0
  42. package/dist/commands/tui.js.map +1 -0
  43. package/dist/lib/completion.d.ts +5 -0
  44. package/dist/lib/completion.d.ts.map +1 -0
  45. package/dist/lib/completion.js +195 -0
  46. package/dist/lib/completion.js.map +1 -0
  47. package/dist/lib/model-downloader.d.ts +5 -1
  48. package/dist/lib/model-downloader.d.ts.map +1 -1
  49. package/dist/lib/model-downloader.js +53 -20
  50. package/dist/lib/model-downloader.js.map +1 -1
  51. package/dist/lib/router-logger.d.ts +61 -0
  52. package/dist/lib/router-logger.d.ts.map +1 -0
  53. package/dist/lib/router-logger.js +200 -0
  54. package/dist/lib/router-logger.js.map +1 -0
  55. package/dist/lib/router-manager.d.ts +103 -0
  56. package/dist/lib/router-manager.d.ts.map +1 -0
  57. package/dist/lib/router-manager.js +394 -0
  58. package/dist/lib/router-manager.js.map +1 -0
  59. package/dist/lib/router-server.d.ts +61 -0
  60. package/dist/lib/router-server.d.ts.map +1 -0
  61. package/dist/lib/router-server.js +485 -0
  62. package/dist/lib/router-server.js.map +1 -0
  63. package/dist/tui/ConfigApp.d.ts +7 -0
  64. package/dist/tui/ConfigApp.d.ts.map +1 -0
  65. package/dist/tui/ConfigApp.js +1002 -0
  66. package/dist/tui/ConfigApp.js.map +1 -0
  67. package/dist/tui/HistoricalMonitorApp.d.ts.map +1 -1
  68. package/dist/tui/HistoricalMonitorApp.js +85 -49
  69. package/dist/tui/HistoricalMonitorApp.js.map +1 -1
  70. package/dist/tui/ModelsApp.d.ts +7 -0
  71. package/dist/tui/ModelsApp.d.ts.map +1 -0
  72. package/dist/tui/ModelsApp.js +362 -0
  73. package/dist/tui/ModelsApp.js.map +1 -0
  74. package/dist/tui/MultiServerMonitorApp.d.ts +6 -1
  75. package/dist/tui/MultiServerMonitorApp.d.ts.map +1 -1
  76. package/dist/tui/MultiServerMonitorApp.js +1038 -122
  77. package/dist/tui/MultiServerMonitorApp.js.map +1 -1
  78. package/dist/tui/RootNavigator.d.ts +7 -0
  79. package/dist/tui/RootNavigator.d.ts.map +1 -0
  80. package/dist/tui/RootNavigator.js +55 -0
  81. package/dist/tui/RootNavigator.js.map +1 -0
  82. package/dist/tui/SearchApp.d.ts +6 -0
  83. package/dist/tui/SearchApp.d.ts.map +1 -0
  84. package/dist/tui/SearchApp.js +451 -0
  85. package/dist/tui/SearchApp.js.map +1 -0
  86. package/dist/tui/SplashScreen.d.ts +16 -0
  87. package/dist/tui/SplashScreen.d.ts.map +1 -0
  88. package/dist/tui/SplashScreen.js +129 -0
  89. package/dist/tui/SplashScreen.js.map +1 -0
  90. package/dist/types/router-config.d.ts +19 -0
  91. package/dist/types/router-config.d.ts.map +1 -0
  92. package/dist/types/router-config.js +3 -0
  93. package/dist/types/router-config.js.map +1 -0
  94. package/package.json +1 -1
  95. package/src/cli.ts +121 -10
  96. package/src/commands/monitor.ts +1 -1
  97. package/src/commands/ps.ts +44 -133
  98. package/src/commands/router/config.ts +116 -0
  99. package/src/commands/router/logs.ts +256 -0
  100. package/src/commands/router/restart.ts +36 -0
  101. package/src/commands/router/start.ts +60 -0
  102. package/src/commands/router/status.ts +119 -0
  103. package/src/commands/router/stop.ts +33 -0
  104. package/src/commands/tui.ts +25 -0
  105. package/src/lib/model-downloader.ts +57 -20
  106. package/src/lib/router-logger.ts +201 -0
  107. package/src/lib/router-manager.ts +414 -0
  108. package/src/lib/router-server.ts +538 -0
  109. package/src/tui/ConfigApp.ts +1085 -0
  110. package/src/tui/HistoricalMonitorApp.ts +88 -49
  111. package/src/tui/ModelsApp.ts +368 -0
  112. package/src/tui/MultiServerMonitorApp.ts +1163 -122
  113. package/src/tui/RootNavigator.ts +74 -0
  114. package/src/tui/SearchApp.ts +511 -0
  115. package/src/tui/SplashScreen.ts +149 -0
  116. package/src/types/router-config.ts +25 -0
@@ -0,0 +1,394 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.routerManager = exports.RouterManager = void 0;
37
+ const path = __importStar(require("path"));
38
+ const fs = __importStar(require("fs/promises"));
39
+ const process_utils_1 = require("../utils/process-utils");
40
+ const file_utils_1 = require("../utils/file-utils");
41
+ class RouterManager {
42
+ constructor() {
43
+ this.configDir = (0, file_utils_1.getConfigDir)();
44
+ this.logsDir = (0, file_utils_1.getLogsDir)();
45
+ this.configPath = path.join(this.configDir, 'router.json');
46
+ this.launchAgentsDir = (0, file_utils_1.getLaunchAgentsDir)();
47
+ }
48
+ /**
49
+ * Initialize router directories
50
+ */
51
+ async initialize() {
52
+ await (0, file_utils_1.ensureDir)(this.configDir);
53
+ await (0, file_utils_1.ensureDir)(this.logsDir);
54
+ await (0, file_utils_1.ensureDir)(this.launchAgentsDir);
55
+ }
56
+ /**
57
+ * Get default router configuration
58
+ */
59
+ getDefaultConfig() {
60
+ return {
61
+ id: 'router',
62
+ port: 9100,
63
+ host: '127.0.0.1',
64
+ label: 'com.llama.router',
65
+ plistPath: path.join(this.launchAgentsDir, 'com.llama.router.plist'),
66
+ stdoutPath: path.join(this.logsDir, 'router.stdout'),
67
+ stderrPath: path.join(this.logsDir, 'router.stderr'),
68
+ healthCheckInterval: 5000,
69
+ requestTimeout: 120000,
70
+ verbose: false,
71
+ status: 'stopped',
72
+ createdAt: new Date().toISOString(),
73
+ };
74
+ }
75
+ /**
76
+ * Load router configuration
77
+ */
78
+ async loadConfig() {
79
+ if (!(await (0, file_utils_1.fileExists)(this.configPath))) {
80
+ return null;
81
+ }
82
+ return await (0, file_utils_1.readJson)(this.configPath);
83
+ }
84
+ /**
85
+ * Save router configuration
86
+ */
87
+ async saveConfig(config) {
88
+ await (0, file_utils_1.writeJsonAtomic)(this.configPath, config);
89
+ }
90
+ /**
91
+ * Update router configuration with partial changes
92
+ */
93
+ async updateConfig(updates) {
94
+ const existingConfig = await this.loadConfig();
95
+ if (!existingConfig) {
96
+ throw new Error('Router configuration not found');
97
+ }
98
+ const updatedConfig = { ...existingConfig, ...updates };
99
+ await this.saveConfig(updatedConfig);
100
+ }
101
+ /**
102
+ * Delete router configuration
103
+ */
104
+ async deleteConfig() {
105
+ if (await (0, file_utils_1.fileExists)(this.configPath)) {
106
+ await fs.unlink(this.configPath);
107
+ }
108
+ }
109
+ /**
110
+ * Generate plist XML content for the router
111
+ */
112
+ generatePlist(config) {
113
+ // Find the compiled router-server.js file
114
+ // In dev mode (tsx), __dirname is src/lib/
115
+ // In production, __dirname is dist/lib/
116
+ // Always use the compiled dist version for launchctl
117
+ let routerServerPath;
118
+ if (__dirname.includes('/src/')) {
119
+ // Dev mode - point to dist/lib/router-server.js
120
+ const projectRoot = path.resolve(__dirname, '../..');
121
+ routerServerPath = path.join(projectRoot, 'dist/lib/router-server.js');
122
+ }
123
+ else {
124
+ // Production mode - already in dist/lib/
125
+ routerServerPath = path.join(__dirname, 'router-server.js');
126
+ }
127
+ // Use the current Node.js executable path (resolves symlinks)
128
+ const nodePath = process.execPath;
129
+ const args = [
130
+ nodePath,
131
+ routerServerPath,
132
+ '--config', this.configPath,
133
+ ];
134
+ const argsXml = args.map(arg => ` <string>${arg}</string>`).join('\n');
135
+ return `<?xml version="1.0" encoding="UTF-8"?>
136
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
137
+ "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
138
+ <plist version="1.0">
139
+ <dict>
140
+ <key>Label</key>
141
+ <string>${config.label}</string>
142
+
143
+ <key>ProgramArguments</key>
144
+ <array>
145
+ ${argsXml}
146
+ </array>
147
+
148
+ <key>RunAtLoad</key>
149
+ <false/>
150
+
151
+ <key>KeepAlive</key>
152
+ <dict>
153
+ <key>Crashed</key>
154
+ <true/>
155
+ <key>SuccessfulExit</key>
156
+ <false/>
157
+ </dict>
158
+
159
+ <key>StandardOutPath</key>
160
+ <string>${config.stdoutPath}</string>
161
+
162
+ <key>StandardErrorPath</key>
163
+ <string>${config.stderrPath}</string>
164
+
165
+ <key>WorkingDirectory</key>
166
+ <string>/tmp</string>
167
+
168
+ <key>ThrottleInterval</key>
169
+ <integer>10</integer>
170
+ </dict>
171
+ </plist>
172
+ `;
173
+ }
174
+ /**
175
+ * Create and write plist file
176
+ */
177
+ async createPlist(config) {
178
+ const plistContent = this.generatePlist(config);
179
+ await (0, file_utils_1.writeFileAtomic)(config.plistPath, plistContent);
180
+ }
181
+ /**
182
+ * Delete plist file
183
+ */
184
+ async deletePlist(config) {
185
+ if (await (0, file_utils_1.fileExists)(config.plistPath)) {
186
+ await fs.unlink(config.plistPath);
187
+ }
188
+ }
189
+ /**
190
+ * Load service (register with launchctl)
191
+ */
192
+ async loadService(plistPath) {
193
+ await (0, process_utils_1.execCommand)(`launchctl load "${plistPath}"`);
194
+ }
195
+ /**
196
+ * Unload service (unregister from launchctl)
197
+ */
198
+ async unloadService(plistPath) {
199
+ try {
200
+ await (0, process_utils_1.execCommand)(`launchctl unload "${plistPath}"`);
201
+ }
202
+ catch (error) {
203
+ // Ignore errors if service is not loaded
204
+ }
205
+ }
206
+ /**
207
+ * Start service
208
+ */
209
+ async startService(label) {
210
+ await (0, process_utils_1.execCommand)(`launchctl start ${label}`);
211
+ }
212
+ /**
213
+ * Stop service
214
+ */
215
+ async stopService(label) {
216
+ await (0, process_utils_1.execCommand)(`launchctl stop ${label}`);
217
+ }
218
+ /**
219
+ * Get service status from launchctl
220
+ */
221
+ async getServiceStatus(label) {
222
+ try {
223
+ const { stdout } = await (0, process_utils_1.execAsync)(`launchctl list | grep ${label}`);
224
+ const lines = stdout.trim().split('\n');
225
+ for (const line of lines) {
226
+ const parts = line.split(/\s+/);
227
+ if (parts.length >= 3) {
228
+ const pidStr = parts[0].trim();
229
+ const exitCodeStr = parts[1].trim();
230
+ const serviceLabel = parts[2].trim();
231
+ if (serviceLabel === label) {
232
+ const pid = pidStr !== '-' ? parseInt(pidStr, 10) : null;
233
+ const exitCode = exitCodeStr !== '-' ? parseInt(exitCodeStr, 10) : null;
234
+ const isRunning = pid !== null;
235
+ return {
236
+ isRunning,
237
+ pid,
238
+ exitCode,
239
+ lastExitReason: this.interpretExitCode(exitCode),
240
+ };
241
+ }
242
+ }
243
+ }
244
+ return {
245
+ isRunning: false,
246
+ pid: null,
247
+ exitCode: null,
248
+ };
249
+ }
250
+ catch (error) {
251
+ return {
252
+ isRunning: false,
253
+ pid: null,
254
+ exitCode: null,
255
+ };
256
+ }
257
+ }
258
+ /**
259
+ * Interpret exit code to human-readable reason
260
+ */
261
+ interpretExitCode(code) {
262
+ if (code === null || code === 0)
263
+ return undefined;
264
+ if (code === -9)
265
+ return 'Force killed (SIGKILL)';
266
+ if (code === -15)
267
+ return 'Terminated (SIGTERM)';
268
+ return `Exit code: ${code}`;
269
+ }
270
+ /**
271
+ * Wait for service to start (with timeout)
272
+ */
273
+ async waitForServiceStart(label, timeoutMs = 5000) {
274
+ const startTime = Date.now();
275
+ while (Date.now() - startTime < timeoutMs) {
276
+ const status = await this.getServiceStatus(label);
277
+ if (status.isRunning) {
278
+ return true;
279
+ }
280
+ await new Promise((resolve) => setTimeout(resolve, 500));
281
+ }
282
+ return false;
283
+ }
284
+ /**
285
+ * Wait for service to stop (with timeout)
286
+ */
287
+ async waitForServiceStop(label, timeoutMs = 5000) {
288
+ const startTime = Date.now();
289
+ while (Date.now() - startTime < timeoutMs) {
290
+ const status = await this.getServiceStatus(label);
291
+ if (!status.isRunning) {
292
+ return true;
293
+ }
294
+ await new Promise((resolve) => setTimeout(resolve, 500));
295
+ }
296
+ return false;
297
+ }
298
+ /**
299
+ * Start router service
300
+ */
301
+ async start() {
302
+ await this.initialize();
303
+ let config = await this.loadConfig();
304
+ if (!config) {
305
+ // Create default config
306
+ config = this.getDefaultConfig();
307
+ await this.saveConfig(config);
308
+ }
309
+ // Check if already running
310
+ if (config.status === 'running') {
311
+ throw new Error('Router is already running');
312
+ }
313
+ // Check for throttled state (exit code 78)
314
+ const currentStatus = await this.getServiceStatus(config.label);
315
+ if (currentStatus.exitCode === 78) {
316
+ // Service is throttled - clean up and start fresh
317
+ await this.unloadService(config.plistPath);
318
+ await this.deletePlist(config);
319
+ // Give launchd a moment to clean up
320
+ await new Promise((resolve) => setTimeout(resolve, 1000));
321
+ }
322
+ // Create plist
323
+ await this.createPlist(config);
324
+ // Load and start service
325
+ try {
326
+ await this.loadService(config.plistPath);
327
+ }
328
+ catch (error) {
329
+ // May already be loaded
330
+ }
331
+ await this.startService(config.label);
332
+ // Wait for startup
333
+ const started = await this.waitForServiceStart(config.label, 5000);
334
+ if (!started) {
335
+ throw new Error('Router failed to start');
336
+ }
337
+ // Update config
338
+ const status = await this.getServiceStatus(config.label);
339
+ await this.updateConfig({
340
+ status: 'running',
341
+ pid: status.pid || undefined,
342
+ lastStarted: new Date().toISOString(),
343
+ });
344
+ }
345
+ /**
346
+ * Stop router service
347
+ */
348
+ async stop() {
349
+ const config = await this.loadConfig();
350
+ if (!config) {
351
+ throw new Error('Router configuration not found');
352
+ }
353
+ if (config.status !== 'running') {
354
+ throw new Error('Router is not running');
355
+ }
356
+ // Unload service
357
+ await this.unloadService(config.plistPath);
358
+ // Wait for shutdown
359
+ await this.waitForServiceStop(config.label, 5000);
360
+ // Update config
361
+ await this.updateConfig({
362
+ status: 'stopped',
363
+ pid: undefined,
364
+ lastStopped: new Date().toISOString(),
365
+ });
366
+ }
367
+ /**
368
+ * Restart router service
369
+ */
370
+ async restart() {
371
+ try {
372
+ await this.stop();
373
+ }
374
+ catch (error) {
375
+ // May not be running
376
+ }
377
+ await this.start();
378
+ }
379
+ /**
380
+ * Get router status
381
+ */
382
+ async getStatus() {
383
+ const config = await this.loadConfig();
384
+ if (!config) {
385
+ return null;
386
+ }
387
+ const status = await this.getServiceStatus(config.label);
388
+ return { config, status };
389
+ }
390
+ }
391
+ exports.RouterManager = RouterManager;
392
+ // Export singleton instance
393
+ exports.routerManager = new RouterManager();
394
+ //# sourceMappingURL=router-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-manager.js","sourceRoot":"","sources":["../../src/lib/router-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAC7B,gDAAkC;AAElC,0DAAgE;AAChE,oDAS6B;AAS7B,MAAa,aAAa;IAMxB;QACE,IAAI,CAAC,SAAS,GAAG,IAAA,yBAAY,GAAE,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,IAAA,uBAAU,GAAE,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,IAAA,+BAAkB,GAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,IAAA,sBAAS,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,IAAA,sBAAS,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,IAAA,sBAAS,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO;YACL,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,kBAAkB;YACzB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,wBAAwB,CAAC;YACpE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;YACpD,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;YACpD,mBAAmB,EAAE,IAAI;YACzB,cAAc,EAAE,MAAM;YACtB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,CAAC,MAAM,IAAA,uBAAU,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,IAAA,qBAAQ,EAAe,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAAoB;QACnC,MAAM,IAAA,4BAAe,EAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAA8B;QAC/C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,aAAa,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,IAAI,MAAM,IAAA,uBAAU,EAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACtC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,MAAoB;QAChC,0CAA0C;QAC1C,2CAA2C;QAC3C,wCAAwC;QACxC,qDAAqD;QACrD,IAAI,gBAAwB,CAAC;QAC7B,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,gDAAgD;YAChD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACrD,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,yCAAyC;YACzC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QAC9D,CAAC;QAED,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAElC,MAAM,IAAI,GAAG;YACX,QAAQ;YACR,gBAAgB;YAChB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,iBAAiB,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5E,OAAO;;;;;;cAMG,MAAM,CAAC,KAAK;;;;EAIxB,OAAO;;;;;;;;;;;;;;;cAeK,MAAM,CAAC,UAAU;;;cAGjB,MAAM,CAAC,UAAU;;;;;;;;;CAS9B,CAAC;IACA,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,MAAoB;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,IAAA,4BAAe,EAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,MAAoB;QACpC,IAAI,MAAM,IAAA,uBAAU,EAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,MAAM,IAAA,2BAAW,EAAC,mBAAmB,SAAS,GAAG,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,IAAI,CAAC;YACH,MAAM,IAAA,2BAAW,EAAC,qBAAqB,SAAS,GAAG,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yCAAyC;QAC3C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,KAAa;QAC9B,MAAM,IAAA,2BAAW,EAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,MAAM,IAAA,2BAAW,EAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAa;QAClC,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,yBAAS,EAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAExC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBACtB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC/B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACpC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAErC,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;wBAC3B,MAAM,GAAG,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBACzD,MAAM,QAAQ,GAAG,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBACxE,MAAM,SAAS,GAAG,GAAG,KAAK,IAAI,CAAC;wBAE/B,OAAO;4BACL,SAAS;4BACT,GAAG;4BACH,QAAQ;4BACR,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;yBACjD,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,GAAG,EAAE,IAAI;gBACT,QAAQ,EAAE,IAAI;aACf,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,GAAG,EAAE,IAAI;gBACT,QAAQ,EAAE,IAAI;aACf,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAAmB;QAC3C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAClD,IAAI,IAAI,KAAK,CAAC,CAAC;YAAE,OAAO,wBAAwB,CAAC;QACjD,IAAI,IAAI,KAAK,CAAC,EAAE;YAAE,OAAO,sBAAsB,CAAC;QAChD,OAAO,cAAc,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,KAAa,EAAE,SAAS,GAAG,IAAI;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,KAAa,EAAE,SAAS,GAAG,IAAI;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,wBAAwB;YACxB,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,2BAA2B;QAC3B,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,2CAA2C;QAC3C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,aAAa,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;YAClC,kDAAkD;YAClD,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC/B,oCAAoC;YACpC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,eAAe;QACf,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE/B,yBAAyB;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wBAAwB;QAC1B,CAAC;QAED,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEtC,mBAAmB;QACnB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,gBAAgB;QAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,YAAY,CAAC;YACtB,MAAM,EAAE,SAAS;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,SAAS;YAC5B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,iBAAiB;QACjB,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE3C,oBAAoB;QACpB,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAElD,gBAAgB;QAChB,MAAM,IAAI,CAAC,YAAY,CAAC;YACtB,MAAM,EAAE,SAAS;YACjB,GAAG,EAAE,SAAS;YACd,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAqB;QACvB,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;CACF;AApYD,sCAoYC;AAED,4BAA4B;AACf,QAAA,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Router HTTP server - proxies requests to backend llama.cpp servers
4
+ */
5
+ declare class RouterServer {
6
+ private config;
7
+ private server;
8
+ private logger;
9
+ initialize(): Promise<void>;
10
+ start(): Promise<void>;
11
+ /**
12
+ * Main request handler
13
+ */
14
+ private handleRequest;
15
+ /**
16
+ * Health check endpoint
17
+ */
18
+ private handleHealth;
19
+ /**
20
+ * List models endpoint - aggregate from all running servers
21
+ */
22
+ private handleModels;
23
+ /**
24
+ * Chat completions endpoint - route to backend server
25
+ */
26
+ private handleChatCompletions;
27
+ /**
28
+ * Embeddings endpoint - route to backend server
29
+ */
30
+ private handleEmbeddings;
31
+ /**
32
+ * Proxy a request to a backend server
33
+ */
34
+ private proxyRequest;
35
+ /**
36
+ * Read request body as string
37
+ */
38
+ private readBody;
39
+ /**
40
+ * Send error response
41
+ */
42
+ private sendError;
43
+ /**
44
+ * Get all server configurations
45
+ */
46
+ private getAllServers;
47
+ /**
48
+ * Helper method to log a request
49
+ */
50
+ private logRequest;
51
+ /**
52
+ * Extract prompt preview from request data (first 50 chars)
53
+ */
54
+ private extractPromptPreview;
55
+ /**
56
+ * Find a server by model name
57
+ */
58
+ private findServerForModel;
59
+ }
60
+ export { RouterServer };
61
+ //# sourceMappingURL=router-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-server.d.ts","sourceRoot":"","sources":["../../src/lib/router-server.ts"],"names":[],"mappings":";AA6BA;;GAEG;AACH,cAAM,YAAY;IAChB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAgB;IAExB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;OAEG;YACW,aAAa;IAgC3B;;OAEG;YACW,YAAY;IAS1B;;OAEG;YACW,YAAY;IAoB1B;;OAEG;YACW,qBAAqB;IAiEnC;;OAEG;YACW,gBAAgB;IA0E9B;;OAEG;YACW,YAAY;IA4D1B;;OAEG;YACW,QAAQ;IAStB;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;YACW,aAAa;IAwB3B;;OAEG;YACW,UAAU;IAyBxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgC5B;;OAEG;YACW,kBAAkB;CAwCjC;AAkBD,OAAO,EAAE,YAAY,EAAE,CAAC"}