@ank1015/llm 0.0.2 → 0.0.3
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.
- package/README.md +5 -3
- package/dist/cli.js +128 -19
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
- package/vendor/web/manifest.json +1 -1
package/README.md
CHANGED
|
@@ -8,11 +8,13 @@ npx @ank1015/llm
|
|
|
8
8
|
|
|
9
9
|
The launcher starts:
|
|
10
10
|
|
|
11
|
-
- the
|
|
12
|
-
- the
|
|
11
|
+
- the app on `http://127.0.0.1:3210`
|
|
12
|
+
- the API under the same origin at `http://127.0.0.1:3210/api`
|
|
13
|
+
|
|
14
|
+
The Hono API server and Next.js web client run on private random ports behind the launcher.
|
|
13
15
|
|
|
14
16
|
## Options
|
|
15
17
|
|
|
16
18
|
```bash
|
|
17
|
-
llm --host 127.0.0.1 --
|
|
19
|
+
llm --host 127.0.0.1 --port 3210 --no-open
|
|
18
20
|
```
|
package/dist/cli.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { spawn } from 'node:child_process';
|
|
3
|
+
import { createServer, request as httpRequest } from 'node:http';
|
|
3
4
|
import { createRequire } from 'node:module';
|
|
5
|
+
import { Socket } from 'node:net';
|
|
4
6
|
import { existsSync } from 'node:fs';
|
|
5
7
|
import { dirname, join, resolve } from 'node:path';
|
|
6
8
|
import { fileURLToPath } from 'node:url';
|
|
7
9
|
const DEFAULT_OPTIONS = {
|
|
8
|
-
apiPort: '
|
|
10
|
+
apiPort: '0',
|
|
9
11
|
host: '127.0.0.1',
|
|
10
12
|
openBrowser: true,
|
|
11
|
-
|
|
13
|
+
port: '3210',
|
|
14
|
+
webPort: '0',
|
|
12
15
|
};
|
|
13
16
|
const currentDirectory = dirname(fileURLToPath(import.meta.url));
|
|
14
17
|
const packageRoot = resolve(currentDirectory, '..');
|
|
@@ -35,7 +38,12 @@ function parseOptions(arguments_) {
|
|
|
35
38
|
index += 1;
|
|
36
39
|
continue;
|
|
37
40
|
}
|
|
38
|
-
if (argument === '--
|
|
41
|
+
if (argument === '--port') {
|
|
42
|
+
options.port = readValue(arguments_, index, argument);
|
|
43
|
+
index += 1;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (argument === '--web-port') {
|
|
39
47
|
options.webPort = readValue(arguments_, index, argument);
|
|
40
48
|
index += 1;
|
|
41
49
|
continue;
|
|
@@ -55,10 +63,10 @@ function printHelp() {
|
|
|
55
63
|
console.log(`Usage: llm [options]
|
|
56
64
|
|
|
57
65
|
Options:
|
|
58
|
-
--host <host> Host for
|
|
59
|
-
--
|
|
60
|
-
--
|
|
61
|
-
--port <port>
|
|
66
|
+
--host <host> Host for the public app URL. Defaults to 127.0.0.1.
|
|
67
|
+
--port <port> Public app port for web and API. Defaults to 3210.
|
|
68
|
+
--api-port <port> Internal Hono API port. Defaults to a free random port.
|
|
69
|
+
--web-port <port> Internal Next.js web port. Defaults to a free random port.
|
|
62
70
|
--no-open Do not open the browser automatically.
|
|
63
71
|
-h, --help Show this help message.
|
|
64
72
|
`);
|
|
@@ -76,6 +84,72 @@ function spawnNode(entry, env, cwd) {
|
|
|
76
84
|
stdio: 'inherit',
|
|
77
85
|
});
|
|
78
86
|
}
|
|
87
|
+
function getForwardedHeaders(request, targetHost, targetPort) {
|
|
88
|
+
return {
|
|
89
|
+
...request.headers,
|
|
90
|
+
host: `${targetHost}:${targetPort}`,
|
|
91
|
+
'x-forwarded-host': request.headers.host,
|
|
92
|
+
'x-forwarded-proto': 'http',
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function proxyHttpRequest(targetPort, targetHost, clientRequest, clientResponse) {
|
|
96
|
+
const proxyRequest = httpRequest({
|
|
97
|
+
headers: getForwardedHeaders(clientRequest, targetHost, targetPort),
|
|
98
|
+
hostname: targetHost,
|
|
99
|
+
method: clientRequest.method,
|
|
100
|
+
path: clientRequest.url,
|
|
101
|
+
port: Number(targetPort),
|
|
102
|
+
}, (proxyResponse) => {
|
|
103
|
+
clientResponse.writeHead(proxyResponse.statusCode ?? 500, proxyResponse.headers);
|
|
104
|
+
proxyResponse.pipe(clientResponse);
|
|
105
|
+
});
|
|
106
|
+
proxyRequest.on('error', () => {
|
|
107
|
+
if (!clientResponse.headersSent) {
|
|
108
|
+
clientResponse.writeHead(502, { 'content-type': 'text/plain; charset=utf-8' });
|
|
109
|
+
}
|
|
110
|
+
clientResponse.end('Upstream service is not ready yet.');
|
|
111
|
+
});
|
|
112
|
+
clientRequest.pipe(proxyRequest);
|
|
113
|
+
}
|
|
114
|
+
function proxyUpgrade(targetPort, targetHost, clientRequest, clientSocket, head) {
|
|
115
|
+
const upstreamSocket = new Socket();
|
|
116
|
+
upstreamSocket.connect(Number(targetPort), targetHost, () => {
|
|
117
|
+
const headers = Object.entries(getForwardedHeaders(clientRequest, targetHost, targetPort))
|
|
118
|
+
.flatMap(([key, value]) => {
|
|
119
|
+
if (value === undefined) {
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
if (Array.isArray(value)) {
|
|
123
|
+
return [`${key}: ${value.join(', ')}`];
|
|
124
|
+
}
|
|
125
|
+
return [`${key}: ${value}`];
|
|
126
|
+
})
|
|
127
|
+
.join('\r\n');
|
|
128
|
+
upstreamSocket.write(`${clientRequest.method ?? 'GET'} ${clientRequest.url ?? '/'} HTTP/${clientRequest.httpVersion}\r\n${headers}\r\n\r\n`);
|
|
129
|
+
if (head.length > 0) {
|
|
130
|
+
upstreamSocket.write(head);
|
|
131
|
+
}
|
|
132
|
+
upstreamSocket.pipe(clientSocket);
|
|
133
|
+
clientSocket.pipe(upstreamSocket);
|
|
134
|
+
});
|
|
135
|
+
upstreamSocket.on('error', () => {
|
|
136
|
+
clientSocket.end('HTTP/1.1 502 Bad Gateway\r\nConnection: close\r\n\r\n');
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
function isApiRequest(url) {
|
|
140
|
+
return url === '/api' || url === '/health' || url?.startsWith('/api/') === true;
|
|
141
|
+
}
|
|
142
|
+
function createGatewayServer(apiPort, webPort, internalHost) {
|
|
143
|
+
const server = createServer((request, response) => {
|
|
144
|
+
const targetPort = isApiRequest(request.url) ? apiPort : webPort;
|
|
145
|
+
proxyHttpRequest(targetPort, internalHost, request, response);
|
|
146
|
+
});
|
|
147
|
+
server.on('upgrade', (request, socket, head) => {
|
|
148
|
+
const targetPort = isApiRequest(request.url) ? apiPort : webPort;
|
|
149
|
+
proxyUpgrade(targetPort, internalHost, request, socket, head);
|
|
150
|
+
});
|
|
151
|
+
return server;
|
|
152
|
+
}
|
|
79
153
|
function openUrl(url) {
|
|
80
154
|
const opener = process.platform === 'darwin'
|
|
81
155
|
? 'open'
|
|
@@ -96,41 +170,76 @@ function shutdown(children) {
|
|
|
96
170
|
}
|
|
97
171
|
}
|
|
98
172
|
}
|
|
99
|
-
|
|
173
|
+
function listen(server, port, host) {
|
|
174
|
+
return new Promise((resolveListen, reject) => {
|
|
175
|
+
server.once('error', reject);
|
|
176
|
+
server.listen(Number(port), host, () => {
|
|
177
|
+
server.off('error', reject);
|
|
178
|
+
const address = server.address();
|
|
179
|
+
if (!address || typeof address === 'string') {
|
|
180
|
+
reject(new Error('Unable to read listening port'));
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
resolveListen(String(address.port));
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
async function findAvailablePort(host) {
|
|
188
|
+
const server = createServer();
|
|
189
|
+
const port = await listen(server, '0', host);
|
|
190
|
+
await new Promise((resolveClose, reject) => {
|
|
191
|
+
server.close((error) => {
|
|
192
|
+
if (error) {
|
|
193
|
+
reject(error);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
resolveClose();
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
return port;
|
|
200
|
+
}
|
|
201
|
+
async function main() {
|
|
100
202
|
const options = parseOptions(process.argv.slice(2));
|
|
101
203
|
const webEntry = resolveWebEntry();
|
|
102
204
|
const serverEntry = resolveServerEntry();
|
|
103
205
|
if (!existsSync(webEntry)) {
|
|
104
206
|
throw new Error(`Missing assembled web server at ${webEntry}. Run pnpm release:app:build first.`);
|
|
105
207
|
}
|
|
106
|
-
const
|
|
107
|
-
const webBaseUrl = `http://${options.host}:${options.webPort}`;
|
|
208
|
+
const internalHost = '127.0.0.1';
|
|
108
209
|
const webCwd = dirname(webEntry);
|
|
109
210
|
const children = [];
|
|
211
|
+
const apiPort = options.apiPort === '0' ? await findAvailablePort(internalHost) : options.apiPort;
|
|
212
|
+
const webPort = options.webPort === '0' ? await findAvailablePort(internalHost) : options.webPort;
|
|
213
|
+
const publicServer = createGatewayServer(apiPort, webPort, internalHost);
|
|
214
|
+
const gatewayPort = await listen(publicServer, options.port, options.host);
|
|
215
|
+
const gatewayBaseUrl = `http://${options.host}:${gatewayPort}`;
|
|
216
|
+
const apiBaseUrl = gatewayBaseUrl;
|
|
110
217
|
children.push(spawnNode(serverEntry, {
|
|
111
218
|
...process.env,
|
|
112
|
-
HOST:
|
|
113
|
-
PORT:
|
|
219
|
+
HOST: internalHost,
|
|
220
|
+
PORT: apiPort,
|
|
114
221
|
}));
|
|
115
222
|
children.push(spawnNode(webEntry, {
|
|
116
223
|
...process.env,
|
|
117
|
-
HOSTNAME:
|
|
224
|
+
HOSTNAME: internalHost,
|
|
118
225
|
NEXT_PUBLIC_LLM_SERVER_BASE_URL: apiBaseUrl,
|
|
119
|
-
PORT:
|
|
226
|
+
PORT: webPort,
|
|
120
227
|
}, webCwd));
|
|
121
|
-
console.log(`LLM
|
|
122
|
-
console.log(`LLM
|
|
228
|
+
console.log(`LLM app: ${gatewayBaseUrl}`);
|
|
229
|
+
console.log(`LLM API: ${gatewayBaseUrl}/api`);
|
|
123
230
|
if (options.openBrowser) {
|
|
124
|
-
setTimeout(() => openUrl(
|
|
231
|
+
setTimeout(() => openUrl(gatewayBaseUrl), 1500);
|
|
125
232
|
}
|
|
126
233
|
for (const signal of ['SIGINT', 'SIGTERM']) {
|
|
127
234
|
process.on(signal, () => {
|
|
235
|
+
publicServer.close();
|
|
128
236
|
shutdown(children);
|
|
129
237
|
process.exit(0);
|
|
130
238
|
});
|
|
131
239
|
}
|
|
132
240
|
for (const child of children) {
|
|
133
241
|
child.on('exit', (code, signal) => {
|
|
242
|
+
publicServer.close();
|
|
134
243
|
shutdown(children);
|
|
135
244
|
if (signal) {
|
|
136
245
|
process.kill(process.pid, signal);
|
|
@@ -140,8 +249,8 @@ try {
|
|
|
140
249
|
});
|
|
141
250
|
}
|
|
142
251
|
}
|
|
143
|
-
catch
|
|
252
|
+
main().catch((error) => {
|
|
144
253
|
console.error(error instanceof Error ? error.message : error);
|
|
145
254
|
process.exit(1);
|
|
146
|
-
}
|
|
255
|
+
});
|
|
147
256
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/vendor/web/manifest.json
CHANGED