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.
- package/README.md +216 -0
- package/dist/api/openai/enums.d.ts +4 -0
- package/dist/api/openai/enums.js +17 -0
- package/dist/api/openai/enums.js.map +1 -0
- package/dist/api/openai/handlers/chat.d.ts +3 -0
- package/dist/api/openai/handlers/chat.js +358 -0
- package/dist/api/openai/handlers/chat.js.map +1 -0
- package/dist/api/openai/handlers/completions.d.ts +3 -0
- package/dist/api/openai/handlers/completions.js +169 -0
- package/dist/api/openai/handlers/completions.js.map +1 -0
- package/dist/api/openai/handlers/embeddings.d.ts +3 -0
- package/dist/api/openai/handlers/embeddings.js +74 -0
- package/dist/api/openai/handlers/embeddings.js.map +1 -0
- package/dist/api/openai/handlers/images.d.ts +0 -0
- package/dist/api/openai/handlers/images.js +4 -0
- package/dist/api/openai/handlers/images.js.map +1 -0
- package/dist/api/openai/handlers/models.d.ts +3 -0
- package/dist/api/openai/handlers/models.js +23 -0
- package/dist/api/openai/handlers/models.js.map +1 -0
- package/dist/api/openai/handlers/transcription.d.ts +0 -0
- package/dist/api/openai/handlers/transcription.js +4 -0
- package/dist/api/openai/handlers/transcription.js.map +1 -0
- package/dist/api/openai/index.d.ts +7 -0
- package/dist/api/openai/index.js +14 -0
- package/dist/api/openai/index.js.map +1 -0
- package/dist/api/parseJSONRequestBody.d.ts +2 -0
- package/dist/api/parseJSONRequestBody.js +24 -0
- package/dist/api/parseJSONRequestBody.js.map +1 -0
- package/dist/api/v1/index.d.ts +2 -0
- package/dist/api/v1/index.js +29 -0
- package/dist/api/v1/index.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -0
- package/dist/engines/gpt4all/engine.d.ts +34 -0
- package/dist/engines/gpt4all/engine.js +357 -0
- package/dist/engines/gpt4all/engine.js.map +1 -0
- package/dist/engines/gpt4all/util.d.ts +3 -0
- package/dist/engines/gpt4all/util.js +29 -0
- package/dist/engines/gpt4all/util.js.map +1 -0
- package/dist/engines/index.d.ts +19 -0
- package/dist/engines/index.js +21 -0
- package/dist/engines/index.js.map +1 -0
- package/dist/engines/node-llama-cpp/engine.d.ts +49 -0
- package/dist/engines/node-llama-cpp/engine.js +666 -0
- package/dist/engines/node-llama-cpp/engine.js.map +1 -0
- package/dist/engines/node-llama-cpp/types.d.ts +13 -0
- package/dist/engines/node-llama-cpp/types.js +2 -0
- package/dist/engines/node-llama-cpp/types.js.map +1 -0
- package/dist/engines/node-llama-cpp/util.d.ts +15 -0
- package/dist/engines/node-llama-cpp/util.js +84 -0
- package/dist/engines/node-llama-cpp/util.js.map +1 -0
- package/dist/engines/node-llama-cpp/validateModelFile.d.ts +8 -0
- package/dist/engines/node-llama-cpp/validateModelFile.js +36 -0
- package/dist/engines/node-llama-cpp/validateModelFile.js.map +1 -0
- package/dist/engines/stable-diffusion-cpp/engine.d.ts +90 -0
- package/dist/engines/stable-diffusion-cpp/engine.js +294 -0
- package/dist/engines/stable-diffusion-cpp/engine.js.map +1 -0
- package/dist/engines/stable-diffusion-cpp/types.d.ts +3 -0
- package/dist/engines/stable-diffusion-cpp/types.js +2 -0
- package/dist/engines/stable-diffusion-cpp/types.js.map +1 -0
- package/dist/engines/stable-diffusion-cpp/util.d.ts +4 -0
- package/dist/engines/stable-diffusion-cpp/util.js +55 -0
- package/dist/engines/stable-diffusion-cpp/util.js.map +1 -0
- package/dist/engines/stable-diffusion-cpp/validateModelFiles.d.ts +19 -0
- package/dist/engines/stable-diffusion-cpp/validateModelFiles.js +91 -0
- package/dist/engines/stable-diffusion-cpp/validateModelFiles.js.map +1 -0
- package/dist/engines/transformers-js/engine.d.ts +37 -0
- package/dist/engines/transformers-js/engine.js +538 -0
- package/dist/engines/transformers-js/engine.js.map +1 -0
- package/dist/engines/transformers-js/types.d.ts +7 -0
- package/dist/engines/transformers-js/types.js +2 -0
- package/dist/engines/transformers-js/types.js.map +1 -0
- package/dist/engines/transformers-js/util.d.ts +7 -0
- package/dist/engines/transformers-js/util.js +36 -0
- package/dist/engines/transformers-js/util.js.map +1 -0
- package/dist/engines/transformers-js/validateModelFiles.d.ts +17 -0
- package/dist/engines/transformers-js/validateModelFiles.js +133 -0
- package/dist/engines/transformers-js/validateModelFiles.js.map +1 -0
- package/dist/experiments/ChatWithVision.d.ts +11 -0
- package/dist/experiments/ChatWithVision.js +91 -0
- package/dist/experiments/ChatWithVision.js.map +1 -0
- package/dist/experiments/StableDiffPromptGenerator.d.ts +0 -0
- package/dist/experiments/StableDiffPromptGenerator.js +4 -0
- package/dist/experiments/StableDiffPromptGenerator.js.map +1 -0
- package/dist/experiments/VoiceFunctionCall.d.ts +18 -0
- package/dist/experiments/VoiceFunctionCall.js +51 -0
- package/dist/experiments/VoiceFunctionCall.js.map +1 -0
- package/dist/http.d.ts +19 -0
- package/dist/http.js +54 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/instance.d.ts +88 -0
- package/dist/instance.js +594 -0
- package/dist/instance.js.map +1 -0
- package/dist/lib/acquireFileLock.d.ts +7 -0
- package/dist/lib/acquireFileLock.js +38 -0
- package/dist/lib/acquireFileLock.js.map +1 -0
- package/dist/lib/calculateContextIdentity.d.ts +7 -0
- package/dist/lib/calculateContextIdentity.js +39 -0
- package/dist/lib/calculateContextIdentity.js.map +1 -0
- package/dist/lib/calculateFileChecksum.d.ts +1 -0
- package/dist/lib/calculateFileChecksum.js +16 -0
- package/dist/lib/calculateFileChecksum.js.map +1 -0
- package/dist/lib/copyDirectory.d.ts +6 -0
- package/dist/lib/copyDirectory.js +27 -0
- package/dist/lib/copyDirectory.js.map +1 -0
- package/dist/lib/decodeAudio.d.ts +1 -0
- package/dist/lib/decodeAudio.js +26 -0
- package/dist/lib/decodeAudio.js.map +1 -0
- package/dist/lib/downloadModelFile.d.ts +10 -0
- package/dist/lib/downloadModelFile.js +58 -0
- package/dist/lib/downloadModelFile.js.map +1 -0
- package/dist/lib/flattenMessageTextContent.d.ts +2 -0
- package/dist/lib/flattenMessageTextContent.js +11 -0
- package/dist/lib/flattenMessageTextContent.js.map +1 -0
- package/dist/lib/getCacheDirPath.d.ts +12 -0
- package/dist/lib/getCacheDirPath.js +31 -0
- package/dist/lib/getCacheDirPath.js.map +1 -0
- package/dist/lib/loadImage.d.ts +12 -0
- package/dist/lib/loadImage.js +30 -0
- package/dist/lib/loadImage.js.map +1 -0
- package/dist/lib/logger.d.ts +12 -0
- package/dist/lib/logger.js +98 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/math.d.ts +7 -0
- package/dist/lib/math.js +30 -0
- package/dist/lib/math.js.map +1 -0
- package/dist/lib/resolveModelFileLocation.d.ts +15 -0
- package/dist/lib/resolveModelFileLocation.js +41 -0
- package/dist/lib/resolveModelFileLocation.js.map +1 -0
- package/dist/lib/util.d.ts +7 -0
- package/dist/lib/util.js +61 -0
- package/dist/lib/util.js.map +1 -0
- package/dist/lib/validateModelFile.d.ts +9 -0
- package/dist/lib/validateModelFile.js +62 -0
- package/dist/lib/validateModelFile.js.map +1 -0
- package/dist/lib/validateModelOptions.d.ts +3 -0
- package/dist/lib/validateModelOptions.js +23 -0
- package/dist/lib/validateModelOptions.js.map +1 -0
- package/dist/pool.d.ts +61 -0
- package/dist/pool.js +512 -0
- package/dist/pool.js.map +1 -0
- package/dist/server.d.ts +59 -0
- package/dist/server.js +221 -0
- package/dist/server.js.map +1 -0
- package/dist/standalone.d.ts +1 -0
- package/dist/standalone.js +306 -0
- package/dist/standalone.js.map +1 -0
- package/dist/store.d.ts +60 -0
- package/dist/store.js +203 -0
- package/dist/store.js.map +1 -0
- package/dist/types/completions.d.ts +57 -0
- package/dist/types/completions.js +2 -0
- package/dist/types/completions.js.map +1 -0
- package/dist/types/index.d.ts +326 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/docs/engines.md +28 -0
- package/docs/gpu.md +72 -0
- package/docs/http-api.md +147 -0
- package/examples/all-options.js +108 -0
- package/examples/chat-cli.js +56 -0
- package/examples/chat-server.js +65 -0
- package/examples/concurrency.js +70 -0
- package/examples/express.js +70 -0
- package/examples/pool.js +91 -0
- package/package.json +113 -0
- package/src/api/openai/enums.ts +20 -0
- package/src/api/openai/handlers/chat.ts +408 -0
- package/src/api/openai/handlers/completions.ts +196 -0
- package/src/api/openai/handlers/embeddings.ts +92 -0
- package/src/api/openai/handlers/images.ts +3 -0
- package/src/api/openai/handlers/models.ts +33 -0
- package/src/api/openai/handlers/transcription.ts +2 -0
- package/src/api/openai/index.ts +16 -0
- package/src/api/parseJSONRequestBody.ts +26 -0
- package/src/api/v1/DRAFT.md +16 -0
- package/src/api/v1/index.ts +37 -0
- package/src/cli.ts +9 -0
- package/src/engines/gpt4all/engine.ts +441 -0
- package/src/engines/gpt4all/util.ts +31 -0
- package/src/engines/index.ts +28 -0
- package/src/engines/node-llama-cpp/engine.ts +811 -0
- package/src/engines/node-llama-cpp/types.ts +17 -0
- package/src/engines/node-llama-cpp/util.ts +126 -0
- package/src/engines/node-llama-cpp/validateModelFile.ts +46 -0
- package/src/engines/stable-diffusion-cpp/engine.ts +369 -0
- package/src/engines/stable-diffusion-cpp/types.ts +54 -0
- package/src/engines/stable-diffusion-cpp/util.ts +58 -0
- package/src/engines/stable-diffusion-cpp/validateModelFiles.ts +119 -0
- package/src/engines/transformers-js/engine.ts +659 -0
- package/src/engines/transformers-js/types.ts +25 -0
- package/src/engines/transformers-js/util.ts +40 -0
- package/src/engines/transformers-js/validateModelFiles.ts +168 -0
- package/src/experiments/ChatWithVision.ts +103 -0
- package/src/experiments/StableDiffPromptGenerator.ts +2 -0
- package/src/experiments/VoiceFunctionCall.ts +71 -0
- package/src/http.ts +72 -0
- package/src/index.ts +7 -0
- package/src/instance.ts +723 -0
- package/src/lib/acquireFileLock.ts +38 -0
- package/src/lib/calculateContextIdentity.ts +53 -0
- package/src/lib/calculateFileChecksum.ts +18 -0
- package/src/lib/copyDirectory.ts +29 -0
- package/src/lib/decodeAudio.ts +39 -0
- package/src/lib/downloadModelFile.ts +70 -0
- package/src/lib/flattenMessageTextContent.ts +19 -0
- package/src/lib/getCacheDirPath.ts +34 -0
- package/src/lib/loadImage.ts +46 -0
- package/src/lib/logger.ts +112 -0
- package/src/lib/math.ts +31 -0
- package/src/lib/resolveModelFileLocation.ts +49 -0
- package/src/lib/util.ts +75 -0
- package/src/lib/validateModelFile.ts +71 -0
- package/src/lib/validateModelOptions.ts +31 -0
- package/src/pool.ts +651 -0
- package/src/server.ts +270 -0
- package/src/standalone.ts +320 -0
- package/src/store.ts +278 -0
- package/src/types/completions.ts +86 -0
- package/src/types/index.ts +488 -0
- package/tsconfig.json +29 -0
- package/tsconfig.release.json +11 -0
- package/vitest.config.ts +18 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ChatMessage } from '../types/index.js';
|
|
2
|
+
export interface CalculateContextIdentityOptions {
|
|
3
|
+
messages?: ChatMessage[];
|
|
4
|
+
text?: string;
|
|
5
|
+
dropLastMessage?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function calculateContextIdentity({ messages, text, dropLastMessage, }: CalculateContextIdentityOptions): string;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import { flattenMessageTextContent } from './flattenMessageTextContent.js';
|
|
3
|
+
export function calculateContextIdentity({ messages, text, dropLastMessage = false, }) {
|
|
4
|
+
if (text) {
|
|
5
|
+
return text;
|
|
6
|
+
}
|
|
7
|
+
if (messages?.length) {
|
|
8
|
+
const filteredMessages = messages.filter((message, i) => {
|
|
9
|
+
// remove all but the leading system message
|
|
10
|
+
if (message.role === 'system' && i !== 0) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
if (message.role === 'tool') {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
const textContent = flattenMessageTextContent(message.content);
|
|
17
|
+
return !!textContent;
|
|
18
|
+
});
|
|
19
|
+
if (dropLastMessage && filteredMessages.length > 1) {
|
|
20
|
+
if (filteredMessages[filteredMessages.length - 1].role !== 'user') {
|
|
21
|
+
console.warn('Dropping last message that is not a user message. This should not happen.');
|
|
22
|
+
}
|
|
23
|
+
filteredMessages.pop();
|
|
24
|
+
}
|
|
25
|
+
// we dont wanna json stringify because this would make message key order significant
|
|
26
|
+
const serializedMessages = filteredMessages
|
|
27
|
+
.map((message) => {
|
|
28
|
+
return message.role + ': ' + flattenMessageTextContent(message.content);
|
|
29
|
+
})
|
|
30
|
+
.join('\n');
|
|
31
|
+
const contextIdentity = crypto
|
|
32
|
+
.createHash('sha1')
|
|
33
|
+
.update(serializedMessages)
|
|
34
|
+
.digest('hex');
|
|
35
|
+
return contextIdentity;
|
|
36
|
+
}
|
|
37
|
+
return '';
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=calculateContextIdentity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculateContextIdentity.js","sourceRoot":"","sources":["../../src/lib/calculateContextIdentity.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAQ1E,MAAM,UAAU,wBAAwB,CAAC,EACxC,QAAQ,EACR,IAAI,EACJ,eAAe,GAAG,KAAK,GACU;IAEjC,IAAI,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;QACtB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YACvD,4CAA4C;YAC5C,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,OAAO,KAAK,CAAA;YACb,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAA;YACb,CAAC;YACD,MAAM,WAAW,GAAG,yBAAyB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAC9D,OAAO,CAAC,CAAC,WAAW,CAAA;QACrB,CAAC,CAAC,CAAA;QACF,IAAI,eAAe,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAA;YAC1F,CAAC;YACD,gBAAgB,CAAC,GAAG,EAAE,CAAA;QACvB,CAAC;QACD,qFAAqF;QACrF,MAAM,kBAAkB,GAAG,gBAAgB;aACzC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAChB,OAAO,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,yBAAyB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACxE,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAA;QACX,MAAM,eAAe,GAAG,MAAM;aAC7B,UAAU,CAAC,MAAM,CAAC;aAClB,MAAM,CAAC,kBAAkB,CAAC;aAC1B,MAAM,CAAC,KAAK,CAAC,CAAA;QACf,OAAO,eAAe,CAAA;IACvB,CAAC;IAED,OAAO,EAAE,CAAA;AACV,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function calculateFileChecksum(filePath: string, hashType?: string): Promise<string>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import crypto from 'node:crypto';
|
|
3
|
+
export function calculateFileChecksum(filePath, hashType = 'sha256') {
|
|
4
|
+
return new Promise((resolve, reject) => {
|
|
5
|
+
const fileStream = fs.createReadStream(filePath);
|
|
6
|
+
const result = crypto.createHash(hashType);
|
|
7
|
+
fileStream.on('error', reject);
|
|
8
|
+
fileStream.on('data', (chunk) => {
|
|
9
|
+
result.update(chunk);
|
|
10
|
+
});
|
|
11
|
+
fileStream.on('end', () => {
|
|
12
|
+
resolve(result.digest('hex'));
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=calculateFileChecksum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculateFileChecksum.js","sourceRoot":"","sources":["../../src/lib/calculateFileChecksum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,MAAM,UAAU,qBAAqB,CAAC,QAAgB,EAAE,QAAQ,GAAG,QAAQ;IAC1E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;QAC1C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC9B,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;QACF,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACzB,OAAO,CACN,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CACpB,CAAA;QACF,CAAC,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Recursively copy a directory and its contents
|
|
5
|
+
* @param src - Source directory
|
|
6
|
+
* @param dest - Destination directory
|
|
7
|
+
*/
|
|
8
|
+
export async function copyDirectory(src, dest) {
|
|
9
|
+
// Ensure the destination directory exists, create it if it doesn't
|
|
10
|
+
await fs.mkdir(dest, { recursive: true });
|
|
11
|
+
// Read the contents of the source directory
|
|
12
|
+
const entries = await fs.readdir(src, { withFileTypes: true });
|
|
13
|
+
// Iterate through all the entries (files and directories)
|
|
14
|
+
for (const entry of entries) {
|
|
15
|
+
const srcPath = path.join(src, entry.name);
|
|
16
|
+
const destPath = path.join(dest, entry.name);
|
|
17
|
+
if (entry.isDirectory()) {
|
|
18
|
+
// Recursively copy directories
|
|
19
|
+
await copyDirectory(srcPath, destPath);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
// Copy files
|
|
23
|
+
await fs.copyFile(srcPath, destPath);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=copyDirectory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copyDirectory.js","sourceRoot":"","sources":["../../src/lib/copyDirectory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,IAAY;IAC5D,mEAAmE;IACnE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEzC,4CAA4C;IAC5C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IAE9D,0DAA0D;IAC1D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,+BAA+B;YAC/B,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QACvC,CAAC;aAAM,CAAC;YACP,aAAa;YACb,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QACrC,CAAC;IACF,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function decodeAudio(fileBuffer: ArrayBuffer | Uint8Array, sampleRate?: number): Promise<any>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import decode from 'audio-decode';
|
|
2
|
+
import libSampleRate from '@alexanderolsen/libsamplerate-js';
|
|
3
|
+
async function resampleAudioBuffer(input, opts) {
|
|
4
|
+
const nChannels = opts.nChannels ?? 2;
|
|
5
|
+
const inputSampleRate = opts.inputSampleRate ?? 44100;
|
|
6
|
+
const resampler = await libSampleRate.create(nChannels, inputSampleRate, opts.outputSampleRate, {
|
|
7
|
+
// http://www.mega-nerd.com/SRC/api_full.html http://www.mega-nerd.com/SRC/api_simple.html
|
|
8
|
+
converterType: libSampleRate.ConverterType.SRC_SINC_BEST_QUALITY, // default SRC_SINC_FASTEST. see API for more
|
|
9
|
+
});
|
|
10
|
+
const resampledData = resampler.simple(input);
|
|
11
|
+
resampler.destroy();
|
|
12
|
+
return resampledData;
|
|
13
|
+
}
|
|
14
|
+
export async function decodeAudio(fileBuffer, sampleRate = 44100) {
|
|
15
|
+
const decodedAudio = await decode(fileBuffer);
|
|
16
|
+
let audio = decodedAudio.getChannelData(0);
|
|
17
|
+
if (decodedAudio.sampleRate !== sampleRate) {
|
|
18
|
+
audio = await resampleAudioBuffer(audio, {
|
|
19
|
+
inputSampleRate: decodedAudio.sampleRate,
|
|
20
|
+
outputSampleRate: sampleRate,
|
|
21
|
+
nChannels: 1,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return audio;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=decodeAudio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decodeAudio.js","sourceRoot":"","sources":["../../src/lib/decodeAudio.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,cAAc,CAAA;AACjC,OAAO,aAAa,MAAM,kCAAkC,CAAA;AAQ5D,KAAK,UAAU,mBAAmB,CAAC,KAAmB,EAAE,IAAqB;IAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,CAAA;IACrC,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,KAAK,CAAA;IAErD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE;QAC/F,0FAA0F;QAC1F,aAAa,EAAE,aAAa,CAAC,aAAa,CAAC,qBAAqB,EAAE,6CAA6C;KAC/G,CAAC,CAAA;IACF,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC7C,SAAS,CAAC,OAAO,EAAE,CAAA;IACnB,OAAO,aAAa,CAAA;AACrB,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAoC,EAAE,aAAqB,KAAK;IACjG,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAA;IAE7C,IAAI,KAAK,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;IAE1C,IAAI,YAAY,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC5C,KAAK,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE;YACxC,eAAe,EAAE,YAAY,CAAC,UAAU;YACxC,gBAAgB,EAAE,UAAU;YAC5B,SAAS,EAAE,CAAC;SACZ,CAAC,CAAA;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AAEb,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FileDownloadProgress } from '../types/index.js';
|
|
2
|
+
interface DownloadArgs {
|
|
3
|
+
url: string;
|
|
4
|
+
filePath?: string;
|
|
5
|
+
modelsCachePath: string;
|
|
6
|
+
onProgress?: (progress: FileDownloadProgress) => void;
|
|
7
|
+
signal?: AbortSignal;
|
|
8
|
+
}
|
|
9
|
+
export declare function downloadModelFile({ url, filePath, modelsCachePath, onProgress, signal }: DownloadArgs): Promise<void>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { downloadFile as createFileDownload } from 'ipull';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { resolveModelFileLocation } from '../lib/resolveModelFileLocation.js';
|
|
5
|
+
export async function downloadModelFile({ url, filePath, modelsCachePath, onProgress, signal }) {
|
|
6
|
+
let downloadUrl = url;
|
|
7
|
+
const parsedUrl = new URL(url);
|
|
8
|
+
if (parsedUrl.hostname === 'huggingface.co') {
|
|
9
|
+
// TODO support auth headers
|
|
10
|
+
// https://ido-pluto.github.io/ipull/#md:custom-headers
|
|
11
|
+
const pathnameParts = parsedUrl.pathname.split('/');
|
|
12
|
+
if (pathnameParts.length > 3 && pathnameParts[3] === 'blob') {
|
|
13
|
+
const newUrl = new URL(url);
|
|
14
|
+
pathnameParts[3] = 'resolve';
|
|
15
|
+
newUrl.pathname = pathnameParts.join('/');
|
|
16
|
+
if (newUrl.searchParams.get('download') !== 'true') {
|
|
17
|
+
newUrl.searchParams.set('download', 'true');
|
|
18
|
+
}
|
|
19
|
+
downloadUrl = newUrl.href;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const destinationFile = resolveModelFileLocation({
|
|
23
|
+
url: downloadUrl,
|
|
24
|
+
filePath,
|
|
25
|
+
modelsCachePath,
|
|
26
|
+
});
|
|
27
|
+
fs.mkdirSync(path.dirname(destinationFile), { recursive: true });
|
|
28
|
+
// TODO split gguf file support, could regex filename and download the rest
|
|
29
|
+
// see https://ido-pluto.github.io/ipull/#md:download-file-from-parts
|
|
30
|
+
const controller = await createFileDownload({
|
|
31
|
+
url: downloadUrl,
|
|
32
|
+
savePath: destinationFile,
|
|
33
|
+
skipExisting: true,
|
|
34
|
+
});
|
|
35
|
+
let partialBytes = 0;
|
|
36
|
+
if (fs.existsSync(destinationFile)) {
|
|
37
|
+
partialBytes = fs.statSync(destinationFile).size;
|
|
38
|
+
}
|
|
39
|
+
const progressInterval = setInterval(() => {
|
|
40
|
+
if (onProgress) {
|
|
41
|
+
onProgress({
|
|
42
|
+
file: destinationFile,
|
|
43
|
+
loadedBytes: controller.status.transferredBytes + partialBytes,
|
|
44
|
+
totalBytes: controller.status.totalBytes,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}, 3000);
|
|
48
|
+
if (signal) {
|
|
49
|
+
signal.addEventListener('abort', () => {
|
|
50
|
+
controller.close();
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
await controller.download();
|
|
54
|
+
if (progressInterval) {
|
|
55
|
+
clearInterval(progressInterval);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=downloadModelFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloadModelFile.js","sourceRoot":"","sources":["../../src/lib/downloadModelFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAA;AAUnF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAgB;IAC3G,IAAI,WAAW,GAAG,GAAG,CAAA;IACrB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;IAC9B,IAAI,SAAS,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;QAC7C,4BAA4B;QAC5B,uDAAuD;QACvD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACnD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YAC7D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;YAC3B,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;YAC5B,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACzC,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM,EAAE,CAAC;gBACpD,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YAC5C,CAAC;YACD,WAAW,GAAG,MAAM,CAAC,IAAI,CAAA;QAC1B,CAAC;IACF,CAAC;IAED,MAAM,eAAe,GAAG,wBAAwB,CAAC;QAChD,GAAG,EAAE,WAAW;QAChB,QAAQ;QACR,eAAe;KACf,CAAC,CAAA;IAEF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAChE,2EAA2E;IAC3E,qEAAqE;IACrE,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC;QAC3C,GAAG,EAAE,WAAW;QAChB,QAAQ,EAAE,eAAe;QACzB,YAAY,EAAE,IAAI;KAClB,CAAC,CAAA;IAEF,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,YAAY,GAAG,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAA;IACjD,CAAC;IACD,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,IAAI,UAAU,EAAE,CAAC;YAChB,UAAU,CAAC;gBACV,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,gBAAgB,GAAG,YAAY;gBAC9D,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU;aACxC,CAAC,CAAA;QACH,CAAC;IACF,CAAC,EAAE,IAAI,CAAC,CAAA;IACR,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACrC,UAAU,CAAC,KAAK,EAAE,CAAA;QACnB,CAAC,CAAC,CAAA;IACH,CAAC;IACD,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAA;IAC3B,IAAI,gBAAgB,EAAE,CAAC;QACtB,aAAa,CAAC,gBAAgB,CAAC,CAAA;IAChC,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
function isTextContentPart(part) {
|
|
2
|
+
return part.type === 'text';
|
|
3
|
+
}
|
|
4
|
+
export function flattenMessageTextContent(content) {
|
|
5
|
+
if (typeof content === 'string') {
|
|
6
|
+
return content;
|
|
7
|
+
}
|
|
8
|
+
const parts = content.filter(isTextContentPart);
|
|
9
|
+
return parts.map((part) => part.text).join('\n');
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=flattenMessageTextContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flattenMessageTextContent.js","sourceRoot":"","sources":["../../src/lib/flattenMessageTextContent.ts"],"names":[],"mappings":"AAMA,SAAS,iBAAiB,CACzB,IAAwB;IAExB,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAA+B;IACxE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,OAAO,CAAA;IACf,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;IAC/C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACjD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determines the appropriate cache directory for the current platform.
|
|
3
|
+
*
|
|
4
|
+
* Follows platform-specific conventions:
|
|
5
|
+
* - Windows: %LOCALAPPDATA%\Cache\inference-server
|
|
6
|
+
* - macOS: ~/Library/Caches/inference-server
|
|
7
|
+
* - Linux: $XDG_CACHE_HOME/inference-server or ~/.cache/inference-server
|
|
8
|
+
*
|
|
9
|
+
* @param {string} subDir - The name of the cache subdirectory
|
|
10
|
+
* @returns {string} The absolute path to the cache directory
|
|
11
|
+
*/
|
|
12
|
+
export declare function getCacheDirPath(subDir?: string): string;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Determines the appropriate cache directory for the current platform.
|
|
5
|
+
*
|
|
6
|
+
* Follows platform-specific conventions:
|
|
7
|
+
* - Windows: %LOCALAPPDATA%\Cache\inference-server
|
|
8
|
+
* - macOS: ~/Library/Caches/inference-server
|
|
9
|
+
* - Linux: $XDG_CACHE_HOME/inference-server or ~/.cache/inference-server
|
|
10
|
+
*
|
|
11
|
+
* @param {string} subDir - The name of the cache subdirectory
|
|
12
|
+
* @returns {string} The absolute path to the cache directory
|
|
13
|
+
*/
|
|
14
|
+
export function getCacheDirPath(subDir = '') {
|
|
15
|
+
const platform = process.platform;
|
|
16
|
+
let basePath;
|
|
17
|
+
switch (platform) {
|
|
18
|
+
case 'win32':
|
|
19
|
+
// Windows: Use %LOCALAPPDATA%\Cache
|
|
20
|
+
basePath = process.env.LOCALAPPDATA || path.join(os.homedir(), 'AppData', 'Local');
|
|
21
|
+
return path.join(basePath, 'Cache', 'inference-server', subDir);
|
|
22
|
+
case 'darwin':
|
|
23
|
+
// macOS: Use ~/Library/Caches
|
|
24
|
+
return path.join(os.homedir(), 'Library', 'Caches', 'inference-server', subDir);
|
|
25
|
+
default:
|
|
26
|
+
// Linux/Unix: Use $XDG_CACHE_HOME or ~/.cache
|
|
27
|
+
basePath = process.env.XDG_CACHE_HOME || path.join(os.homedir(), '.cache');
|
|
28
|
+
return path.join(basePath, 'inference-server', subDir);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=getCacheDirPath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCacheDirPath.js","sourceRoot":"","sources":["../../src/lib/getCacheDirPath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IACjC,IAAI,QAAgB,CAAA;IAEpB,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,OAAO;YACX,oCAAoC;YACpC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;YAClF,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAA;QAEhE,KAAK,QAAQ;YACZ,8BAA8B;YAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAA;QAEhF;YACC,8CAA8C;YAC9C,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAA;YAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAA;IACxD,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Image } from '../types/index.js';
|
|
2
|
+
import { ResizeOptions } from 'sharp';
|
|
3
|
+
interface ImageTransformationOptions {
|
|
4
|
+
resize?: {
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
fit?: ResizeOptions['fit'];
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export declare function loadImageFromUrl(url: string, opts?: ImageTransformationOptions): Promise<Image>;
|
|
11
|
+
export declare function loadImageFromFile(filePath: string, opts?: ImageTransformationOptions): Promise<Image>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import sharp from 'sharp';
|
|
2
|
+
export async function loadImageFromUrl(url, opts = {}) {
|
|
3
|
+
const imageBuffer = await fetch(url).then((res) => res.arrayBuffer());
|
|
4
|
+
const buffer = await Buffer.from(imageBuffer);
|
|
5
|
+
const sharpHandle = sharp(buffer).rotate();
|
|
6
|
+
if (opts.resize) {
|
|
7
|
+
sharpHandle.resize(opts.resize);
|
|
8
|
+
}
|
|
9
|
+
const { info } = await sharpHandle.toBuffer({ resolveWithObject: true });
|
|
10
|
+
return {
|
|
11
|
+
handle: sharpHandle,
|
|
12
|
+
height: opts.resize?.height ?? info.height,
|
|
13
|
+
width: opts.resize?.width ?? info.width,
|
|
14
|
+
channels: info.channels,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export async function loadImageFromFile(filePath, opts = {}) {
|
|
18
|
+
let sharpHandle = sharp(filePath).rotate();
|
|
19
|
+
if (opts.resize) {
|
|
20
|
+
sharpHandle.resize(opts.resize);
|
|
21
|
+
}
|
|
22
|
+
const { info } = await sharpHandle.toBuffer({ resolveWithObject: true });
|
|
23
|
+
return {
|
|
24
|
+
handle: sharpHandle,
|
|
25
|
+
height: info.height,
|
|
26
|
+
width: info.width,
|
|
27
|
+
channels: info.channels,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=loadImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadImage.js","sourceRoot":"","sources":["../../src/lib/loadImage.ts"],"names":[],"mappings":"AACA,OAAO,KAAwB,MAAM,OAAO,CAAA;AAU5C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,GAAW,EACX,OAAmC,EAAE;IAErC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;IACrE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAC7C,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAA;IAC1C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAChC,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAA;IACxE,OAAO;QACN,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM;QAC1C,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK;QACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACvB,CAAA;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,QAAgB,EAChB,OAAmC,EAAE;IAErC,IAAI,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;IAC1C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAChC,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAA;IACxE,OAAO;QACN,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACvB,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const LogLevels: {
|
|
2
|
+
readonly error: "error";
|
|
3
|
+
readonly warn: "warn";
|
|
4
|
+
readonly info: "info";
|
|
5
|
+
readonly debug: "debug";
|
|
6
|
+
readonly verbose: "verbose";
|
|
7
|
+
};
|
|
8
|
+
export type LogLevel = keyof typeof LogLevels;
|
|
9
|
+
export type Logger = (level: LogLevel, message: string, meta?: any) => void;
|
|
10
|
+
export declare function withLogMeta(logger: Logger, meta: object): (level: LogLevel, message: string, extraMeta?: object) => void;
|
|
11
|
+
export declare function createSublogger(minLevelOrLogger?: LogLevel | Logger): Logger;
|
|
12
|
+
export declare function createLogger(minLevel: LogLevel): (level: LogLevel, message: string, meta?: any) => void;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export const LogLevels = {
|
|
3
|
+
error: 'error',
|
|
4
|
+
warn: 'warn',
|
|
5
|
+
info: 'info',
|
|
6
|
+
debug: 'debug',
|
|
7
|
+
verbose: 'verbose',
|
|
8
|
+
};
|
|
9
|
+
export function withLogMeta(logger, meta) {
|
|
10
|
+
return (level, message, extraMeta = {}) => {
|
|
11
|
+
logger(level, message, { ...meta, ...extraMeta });
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function createSublogger(minLevelOrLogger = LogLevels.warn) {
|
|
15
|
+
if (minLevelOrLogger) {
|
|
16
|
+
return typeof minLevelOrLogger === 'string'
|
|
17
|
+
? createLogger(minLevelOrLogger)
|
|
18
|
+
: minLevelOrLogger;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return createLogger(LogLevels.warn);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function createLogger(minLevel) {
|
|
25
|
+
const levels = Object.keys(LogLevels).reverse();
|
|
26
|
+
const minLevelIndex = levels.indexOf(minLevel);
|
|
27
|
+
return function log(level, message, meta) {
|
|
28
|
+
const levelIndex = levels.indexOf(level);
|
|
29
|
+
if (levelIndex >= minLevelIndex) {
|
|
30
|
+
const formattedMessage = formatMessage(level, message, meta);
|
|
31
|
+
switch (level) {
|
|
32
|
+
case LogLevels.error:
|
|
33
|
+
console.error(formattedMessage, meta?.error);
|
|
34
|
+
break;
|
|
35
|
+
case LogLevels.warn:
|
|
36
|
+
console.warn(formattedMessage);
|
|
37
|
+
break;
|
|
38
|
+
case LogLevels.info:
|
|
39
|
+
console.info(formattedMessage);
|
|
40
|
+
break;
|
|
41
|
+
case LogLevels.debug:
|
|
42
|
+
case LogLevels.verbose:
|
|
43
|
+
console.debug(formattedMessage);
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function formatMessage(level, message, meta = {}) {
|
|
50
|
+
const timestamp = new Date().toISOString().replace('T', ' ').substring(0, 22);
|
|
51
|
+
let messageStr = `[${timestamp}]`;
|
|
52
|
+
switch (level) {
|
|
53
|
+
case LogLevels.error:
|
|
54
|
+
messageStr += chalk.red(`[erro]`);
|
|
55
|
+
break;
|
|
56
|
+
case LogLevels.warn:
|
|
57
|
+
messageStr += chalk.yellow(`[warn]`);
|
|
58
|
+
break;
|
|
59
|
+
case LogLevels.info:
|
|
60
|
+
messageStr += chalk.white(`[info]`);
|
|
61
|
+
break;
|
|
62
|
+
case LogLevels.debug:
|
|
63
|
+
messageStr += chalk.gray(`[debg]`);
|
|
64
|
+
break;
|
|
65
|
+
case LogLevels.verbose:
|
|
66
|
+
messageStr += chalk.gray(`[verb]`);
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
if (meta?.sequence) {
|
|
70
|
+
messageStr += ' ' + chalk.cyan(meta.sequence);
|
|
71
|
+
}
|
|
72
|
+
if (meta?.instance) {
|
|
73
|
+
messageStr += ' ' + chalk.magenta(meta.instance);
|
|
74
|
+
}
|
|
75
|
+
else if (meta?.model) {
|
|
76
|
+
messageStr += ' ' + chalk.magenta(meta.model);
|
|
77
|
+
}
|
|
78
|
+
if (meta?.task) {
|
|
79
|
+
messageStr += ' ' + chalk.green(meta.task);
|
|
80
|
+
}
|
|
81
|
+
messageStr += ' ' + message;
|
|
82
|
+
if (meta) {
|
|
83
|
+
const { instance, sequence, model, task, elapsed, error, ...otherData } = meta;
|
|
84
|
+
if (elapsed) {
|
|
85
|
+
if (elapsed < 1000) {
|
|
86
|
+
messageStr += ' ' + chalk.magenta(`+${elapsed.toFixed(2)}ms`);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
messageStr += ' ' + chalk.magenta(`+${(elapsed / 1000).toFixed(2)}s`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (Object.keys(otherData).length > 0) {
|
|
93
|
+
messageStr += ' ' + JSON.stringify(otherData, null, 2);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return messageStr;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculates the cosine similarity between two vectors.
|
|
3
|
+
* @param vecA - The first vector.
|
|
4
|
+
* @param vecB - The second vector.
|
|
5
|
+
* @returns The cosine similarity between vecA and vecB.
|
|
6
|
+
*/
|
|
7
|
+
export declare function cosineSimilarity(vecA: number[], vecB: number[]): number;
|
package/dist/lib/math.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculates the dot product of two vectors.
|
|
3
|
+
* @param vecA - The first vector.
|
|
4
|
+
* @param vecB - The second vector.
|
|
5
|
+
* @returns The dot product of vecA and vecB.
|
|
6
|
+
*/
|
|
7
|
+
function dotProduct(vecA, vecB) {
|
|
8
|
+
return vecA.reduce((sum, value, index) => sum + value * vecB[index], 0);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Calculates the magnitude of a vector.
|
|
12
|
+
* @param vec - The vector.
|
|
13
|
+
* @returns The magnitude of the vector.
|
|
14
|
+
*/
|
|
15
|
+
function magnitude(vec) {
|
|
16
|
+
return Math.sqrt(vec.reduce((sum, value) => sum + value * value, 0));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Calculates the cosine similarity between two vectors.
|
|
20
|
+
* @param vecA - The first vector.
|
|
21
|
+
* @param vecB - The second vector.
|
|
22
|
+
* @returns The cosine similarity between vecA and vecB.
|
|
23
|
+
*/
|
|
24
|
+
export function cosineSimilarity(vecA, vecB) {
|
|
25
|
+
const dotProd = dotProduct(vecA, vecB);
|
|
26
|
+
const magnitudeA = magnitude(vecA);
|
|
27
|
+
const magnitudeB = magnitude(vecB);
|
|
28
|
+
return dotProd / (magnitudeA * magnitudeB);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=math.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/lib/math.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,SAAS,UAAU,CAAC,IAAc,EAAE,IAAc;IACjD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;AACxE,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAAC,GAAa;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;AACrE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAc,EAAE,IAAc;IAC9D,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACtC,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAClC,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAClC,OAAO,OAAO,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,CAAA;AAC3C,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface ResolveModelFileLocationArgs {
|
|
2
|
+
url?: string;
|
|
3
|
+
filePath?: string;
|
|
4
|
+
modelsCachePath: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Resolve a model file/url to an absolute path to either a file or directory.
|
|
8
|
+
* @param url - Optional URL to the model file. Location will be derived from it.
|
|
9
|
+
* @param filePath - Optional relative (to modelsCachePath) or absolute file path that short-circuits resolution.
|
|
10
|
+
* @param modelsCachePath - The path to the models cache directory.
|
|
11
|
+
* @returns The abs file path on the local filesystem.
|
|
12
|
+
* @throws If the model location could not be resolved.
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveModelFileLocation({ url, filePath, modelsCachePath }: ResolveModelFileLocationArgs): string;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve a model file/url to an absolute path to either a file or directory.
|
|
4
|
+
* @param url - Optional URL to the model file. Location will be derived from it.
|
|
5
|
+
* @param filePath - Optional relative (to modelsCachePath) or absolute file path that short-circuits resolution.
|
|
6
|
+
* @param modelsCachePath - The path to the models cache directory.
|
|
7
|
+
* @returns The abs file path on the local filesystem.
|
|
8
|
+
* @throws If the model location could not be resolved.
|
|
9
|
+
*/
|
|
10
|
+
export function resolveModelFileLocation({ url, filePath, modelsCachePath }) {
|
|
11
|
+
if (filePath) {
|
|
12
|
+
// immediately return if an absolute path is provided
|
|
13
|
+
if (path.isAbsolute(filePath)) {
|
|
14
|
+
return filePath;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
return path.join(modelsCachePath, filePath);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (url) {
|
|
21
|
+
const parsedUrl = new URL(url);
|
|
22
|
+
let destinationPath = filePath;
|
|
23
|
+
// support branches for huggingface URLs
|
|
24
|
+
if (parsedUrl.hostname === 'huggingface.co' && !destinationPath) {
|
|
25
|
+
const pathnameSegments = parsedUrl.pathname.split('/');
|
|
26
|
+
const repoOrg = pathnameSegments[1];
|
|
27
|
+
const repoName = pathnameSegments[2];
|
|
28
|
+
const branch = pathnameSegments[4] || 'main';
|
|
29
|
+
const trailingPath = pathnameSegments.slice(5).join('/');
|
|
30
|
+
destinationPath = path.join(modelsCachePath, parsedUrl.hostname, repoOrg, `${repoName}-${branch}`, trailingPath);
|
|
31
|
+
}
|
|
32
|
+
// otherwise, use the hostname and last path segment
|
|
33
|
+
if (!destinationPath) {
|
|
34
|
+
const fileName = parsedUrl.pathname.split('/').pop();
|
|
35
|
+
destinationPath = path.join(modelsCachePath, parsedUrl.hostname, fileName || '');
|
|
36
|
+
}
|
|
37
|
+
return destinationPath;
|
|
38
|
+
}
|
|
39
|
+
throw new Error('Failed to resolve model location');
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=resolveModelFileLocation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveModelFileLocation.js","sourceRoot":"","sources":["../../src/lib/resolveModelFileLocation.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAQ5B;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAgC;IAExG,IAAI,QAAQ,EAAE,CAAC;QACd,qDAAqD;QACrD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,OAAO,QAAQ,CAAA;QAChB,CAAC;aAAM,CAAC;YACP,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;QAC5C,CAAC;IACF,CAAC;IAED,IAAI,GAAG,EAAE,CAAC;QACT,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,eAAe,GAAG,QAAQ,CAAA;QAC9B,wCAAwC;QACxC,IAAI,SAAS,CAAC,QAAQ,KAAK,gBAAgB,IAAI,CAAC,eAAe,EAAE,CAAC;YACjE,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACtD,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;YACnC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;YACpC,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,MAAM,CAAA;YAC5C,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACxD,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,QAAQ,IAAI,MAAM,EAAE,EAAE,YAAY,CAAC,CAAA;QACjH,CAAC;QACD,oDAAoD;QACpD,IAAI,CAAC,eAAe,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;YACpD,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAA;QACjF,CAAC;QACD,OAAO,eAAe,CAAA;IACvB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;AACpD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function elapsedMillis(since: bigint): number;
|
|
2
|
+
export declare function omitEmptyValues<T extends Record<string, any>>(dict: T): T;
|
|
3
|
+
export declare function touchFileSync(filePath: string): void;
|
|
4
|
+
export declare function mergeAbortSignals(signals: Array<AbortSignal | undefined>): AbortSignal;
|
|
5
|
+
export declare function getRandomNumber(min: number, max: number): number;
|
|
6
|
+
export declare function printActiveHandles(): void;
|
|
7
|
+
export declare function formatBytesPerSecond(speed: number): string;
|