@hope666/melu 1.0.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.
- package/LICENSE +15 -0
- package/README.md +57 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +630 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +45 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +135 -0
- package/dist/config.js.map +1 -0
- package/dist/embedder-client.d.ts +24 -0
- package/dist/embedder-client.d.ts.map +1 -0
- package/dist/embedder-client.js +164 -0
- package/dist/embedder-client.js.map +1 -0
- package/dist/embedder-daemon-client.d.ts +10 -0
- package/dist/embedder-daemon-client.d.ts.map +1 -0
- package/dist/embedder-daemon-client.js +185 -0
- package/dist/embedder-daemon-client.js.map +1 -0
- package/dist/embedder-daemon.d.ts +11 -0
- package/dist/embedder-daemon.d.ts.map +1 -0
- package/dist/embedder-daemon.js +284 -0
- package/dist/embedder-daemon.js.map +1 -0
- package/dist/embedder-ipc.d.ts +27 -0
- package/dist/embedder-ipc.d.ts.map +1 -0
- package/dist/embedder-ipc.js +60 -0
- package/dist/embedder-ipc.js.map +1 -0
- package/dist/embedder-main.d.ts +2 -0
- package/dist/embedder-main.d.ts.map +1 -0
- package/dist/embedder-main.js +6 -0
- package/dist/embedder-main.js.map +1 -0
- package/dist/embedder.d.ts +41 -0
- package/dist/embedder.d.ts.map +1 -0
- package/dist/embedder.js +231 -0
- package/dist/embedder.js.map +1 -0
- package/dist/extraction-queue.d.ts +53 -0
- package/dist/extraction-queue.d.ts.map +1 -0
- package/dist/extraction-queue.js +418 -0
- package/dist/extraction-queue.js.map +1 -0
- package/dist/extraction-stats.d.ts +15 -0
- package/dist/extraction-stats.d.ts.map +1 -0
- package/dist/extraction-stats.js +89 -0
- package/dist/extraction-stats.js.map +1 -0
- package/dist/extractor-worker-main.d.ts +2 -0
- package/dist/extractor-worker-main.d.ts.map +1 -0
- package/dist/extractor-worker-main.js +70 -0
- package/dist/extractor-worker-main.js.map +1 -0
- package/dist/extractor-worker.d.ts +17 -0
- package/dist/extractor-worker.d.ts.map +1 -0
- package/dist/extractor-worker.js +164 -0
- package/dist/extractor-worker.js.map +1 -0
- package/dist/extractor.d.ts +36 -0
- package/dist/extractor.d.ts.map +1 -0
- package/dist/extractor.js +244 -0
- package/dist/extractor.js.map +1 -0
- package/dist/i18n.d.ts +995 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +1024 -0
- package/dist/i18n.js.map +1 -0
- package/dist/memory.d.ts +62 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +293 -0
- package/dist/memory.js.map +1 -0
- package/dist/model-bootstrap.d.ts +29 -0
- package/dist/model-bootstrap.d.ts.map +1 -0
- package/dist/model-bootstrap.js +235 -0
- package/dist/model-bootstrap.js.map +1 -0
- package/dist/proxy-main.d.ts +5 -0
- package/dist/proxy-main.d.ts.map +1 -0
- package/dist/proxy-main.js +10 -0
- package/dist/proxy-main.js.map +1 -0
- package/dist/proxy.d.ts +9 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +309 -0
- package/dist/proxy.js.map +1 -0
- package/dist/run-runtime.d.ts +34 -0
- package/dist/run-runtime.d.ts.map +1 -0
- package/dist/run-runtime.js +170 -0
- package/dist/run-runtime.js.map +1 -0
- package/dist/runtime-context.d.ts +12 -0
- package/dist/runtime-context.d.ts.map +1 -0
- package/dist/runtime-context.js +39 -0
- package/dist/runtime-context.js.map +1 -0
- package/dist/text-chunking.d.ts +7 -0
- package/dist/text-chunking.d.ts.map +1 -0
- package/dist/text-chunking.js +50 -0
- package/dist/text-chunking.js.map +1 -0
- package/package.json +46 -0
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Melu 配置管理。
|
|
3
|
+
*
|
|
4
|
+
* 所有配置存储在 ~/.melu/config.json。
|
|
5
|
+
* API key 不在此处管理——直接从拦截到的请求头中获取。
|
|
6
|
+
*/
|
|
7
|
+
export declare const MELU_HOME: string;
|
|
8
|
+
export declare const MODELS_DIR: string;
|
|
9
|
+
export declare const MEMORIES_DIR: string;
|
|
10
|
+
export declare const SOCKETS_DIR: string;
|
|
11
|
+
export declare const STATS_DIR: string;
|
|
12
|
+
export declare const PENDING_EXTRACTIONS_DIR: string;
|
|
13
|
+
export declare const CONFIG_FILE: string;
|
|
14
|
+
export declare const PID_FILE: string;
|
|
15
|
+
export declare const DEFAULT_MEMORY_NAME = "default";
|
|
16
|
+
export declare const DEFAULT_PORT = 9800;
|
|
17
|
+
export type MirrorName = "huggingface" | "modelscope";
|
|
18
|
+
export declare const UI_LANGUAGES: readonly ["en", "zh-CN", "zh-TW", "ja", "ko", "fr", "ru", "de", "es", "pt"];
|
|
19
|
+
export type UiLanguage = (typeof UI_LANGUAGES)[number];
|
|
20
|
+
export declare const DEFAULT_UI_LANGUAGE: UiLanguage;
|
|
21
|
+
export declare const EMBEDDING_MODEL_ID = "Qwen/Qwen3-Embedding-0.6B-GGUF";
|
|
22
|
+
export declare const EMBEDDING_MODEL_FILE = "Qwen3-Embedding-0.6B-Q8_0.gguf";
|
|
23
|
+
export declare const EMBEDDING_MODEL_PATH: string;
|
|
24
|
+
export declare const EMBEDDING_MODEL_SOURCES: Record<MirrorName, {
|
|
25
|
+
label: string;
|
|
26
|
+
pageUrl: string;
|
|
27
|
+
downloadUrl: string;
|
|
28
|
+
}>;
|
|
29
|
+
export declare const UPSTREAM_ANTHROPIC = "https://api.anthropic.com";
|
|
30
|
+
export interface MeluConfig {
|
|
31
|
+
port: number;
|
|
32
|
+
defaultMemory: string;
|
|
33
|
+
embeddingModel: string;
|
|
34
|
+
uiLanguage: UiLanguage | null;
|
|
35
|
+
mirror: MirrorName | null;
|
|
36
|
+
upstreamAnthropic: string;
|
|
37
|
+
}
|
|
38
|
+
export declare function isMirrorName(value: unknown): value is MirrorName;
|
|
39
|
+
export declare function isUiLanguage(value: unknown): value is UiLanguage;
|
|
40
|
+
export declare function loadConfig(): MeluConfig;
|
|
41
|
+
export declare function saveConfig(config: MeluConfig): void;
|
|
42
|
+
export declare function ensureDirs(): void;
|
|
43
|
+
export declare function getMemoryPath(nameOrPath?: string | null): string;
|
|
44
|
+
export declare function hasEmbeddingModel(): boolean;
|
|
45
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,eAAO,MAAM,SAAS,QAA2B,CAAC;AAClD,eAAO,MAAM,UAAU,QAA4B,CAAC;AACpD,eAAO,MAAM,YAAY,QAA8B,CAAC;AACxD,eAAO,MAAM,WAAW,QAA6B,CAAC;AACtD,eAAO,MAAM,SAAS,QAA2B,CAAC;AAClD,eAAO,MAAM,uBAAuB,QACwD,CAAC;AAC7F,eAAO,MAAM,WAAW,QAAiC,CAAC;AAC1D,eAAO,MAAM,QAAQ,QAA+B,CAAC;AAErD,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAC7C,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,YAAY,CAAC;AACtD,eAAO,MAAM,YAAY,6EAA8E,CAAC;AACxG,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AACvD,eAAO,MAAM,mBAAmB,EAAE,UAAiB,CAAC;AAGpD,eAAO,MAAM,kBAAkB,mCAAmC,CAAC;AACnE,eAAO,MAAM,oBAAoB,mCAAmC,CAAC;AACrE,eAAO,MAAM,oBAAoB,QAAyC,CAAC;AAE3E,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAC1C,UAAU,EACV;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAcxD,CAAC;AAEF,eAAO,MAAM,kBAAkB,8BAA8B,CAAC;AAE9D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAeD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEhE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAahE;AA4BD,wBAAgB,UAAU,IAAI,UAAU,CAiBvC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAUnD;AAED,wBAAgB,UAAU,IAAI,IAAI,CAMjC;AAED,wBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAUhE;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Melu 配置管理。
|
|
3
|
+
*
|
|
4
|
+
* 所有配置存储在 ~/.melu/config.json。
|
|
5
|
+
* API key 不在此处管理——直接从拦截到的请求头中获取。
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
8
|
+
import { homedir } from "node:os";
|
|
9
|
+
import { join, isAbsolute, extname } from "node:path";
|
|
10
|
+
export const MELU_HOME = join(homedir(), ".melu");
|
|
11
|
+
export const MODELS_DIR = join(MELU_HOME, "models");
|
|
12
|
+
export const MEMORIES_DIR = join(MELU_HOME, "memories");
|
|
13
|
+
export const SOCKETS_DIR = join(MELU_HOME, "sockets");
|
|
14
|
+
export const STATS_DIR = join(MELU_HOME, "stats");
|
|
15
|
+
export const PENDING_EXTRACTIONS_DIR = process.env.MELU_PENDING_EXTRACTIONS_DIR?.trim() || join(MELU_HOME, "pending-extractions");
|
|
16
|
+
export const CONFIG_FILE = join(MELU_HOME, "config.json");
|
|
17
|
+
export const PID_FILE = join(MELU_HOME, "proxy.pid");
|
|
18
|
+
export const DEFAULT_MEMORY_NAME = "default";
|
|
19
|
+
export const DEFAULT_PORT = 9800;
|
|
20
|
+
export const UI_LANGUAGES = ["en", "zh-CN", "zh-TW", "ja", "ko", "fr", "ru", "de", "es", "pt"];
|
|
21
|
+
export const DEFAULT_UI_LANGUAGE = "en";
|
|
22
|
+
// Embedding 模型
|
|
23
|
+
export const EMBEDDING_MODEL_ID = "Qwen/Qwen3-Embedding-0.6B-GGUF";
|
|
24
|
+
export const EMBEDDING_MODEL_FILE = "Qwen3-Embedding-0.6B-Q8_0.gguf";
|
|
25
|
+
export const EMBEDDING_MODEL_PATH = join(MODELS_DIR, EMBEDDING_MODEL_FILE);
|
|
26
|
+
export const EMBEDDING_MODEL_SOURCES = {
|
|
27
|
+
huggingface: {
|
|
28
|
+
label: "Hugging Face (Global)",
|
|
29
|
+
pageUrl: "https://huggingface.co/Qwen/Qwen3-Embedding-0.6B-GGUF/tree/main",
|
|
30
|
+
downloadUrl: "https://huggingface.co/Qwen/Qwen3-Embedding-0.6B-GGUF/resolve/main/Qwen3-Embedding-0.6B-Q8_0.gguf?download=true",
|
|
31
|
+
},
|
|
32
|
+
modelscope: {
|
|
33
|
+
label: "ModelScope (CN)",
|
|
34
|
+
pageUrl: "https://modelscope.cn/models/Qwen/Qwen3-Embedding-0.6B-GGUF/files",
|
|
35
|
+
downloadUrl: "https://modelscope.cn/models/Qwen/Qwen3-Embedding-0.6B-GGUF/resolve/master/Qwen3-Embedding-0.6B-Q8_0.gguf",
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
export const UPSTREAM_ANTHROPIC = "https://api.anthropic.com";
|
|
39
|
+
const DEFAULT_CONFIG = {
|
|
40
|
+
port: DEFAULT_PORT,
|
|
41
|
+
defaultMemory: DEFAULT_MEMORY_NAME,
|
|
42
|
+
embeddingModel: EMBEDDING_MODEL_ID,
|
|
43
|
+
uiLanguage: null,
|
|
44
|
+
mirror: null,
|
|
45
|
+
upstreamAnthropic: UPSTREAM_ANTHROPIC,
|
|
46
|
+
};
|
|
47
|
+
const LEGACY_EMBEDDING_MODEL_IDS = new Set([
|
|
48
|
+
"onnx-community/Qwen3-Embedding-0.6B-ONNX",
|
|
49
|
+
]);
|
|
50
|
+
export function isMirrorName(value) {
|
|
51
|
+
return value === "huggingface" || value === "modelscope";
|
|
52
|
+
}
|
|
53
|
+
export function isUiLanguage(value) {
|
|
54
|
+
return (value === "en" ||
|
|
55
|
+
value === "zh-CN" ||
|
|
56
|
+
value === "zh-TW" ||
|
|
57
|
+
value === "ja" ||
|
|
58
|
+
value === "ko" ||
|
|
59
|
+
value === "fr" ||
|
|
60
|
+
value === "ru" ||
|
|
61
|
+
value === "de" ||
|
|
62
|
+
value === "es" ||
|
|
63
|
+
value === "pt");
|
|
64
|
+
}
|
|
65
|
+
function normalizeMirror(value) {
|
|
66
|
+
if (isMirrorName(value)) {
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
function normalizeUiLanguage(value) {
|
|
72
|
+
if (isUiLanguage(value)) {
|
|
73
|
+
return value;
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
function normalizeEmbeddingModel(value) {
|
|
78
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
79
|
+
return EMBEDDING_MODEL_ID;
|
|
80
|
+
}
|
|
81
|
+
if (LEGACY_EMBEDDING_MODEL_IDS.has(value)) {
|
|
82
|
+
return EMBEDDING_MODEL_ID;
|
|
83
|
+
}
|
|
84
|
+
return value;
|
|
85
|
+
}
|
|
86
|
+
export function loadConfig() {
|
|
87
|
+
if (existsSync(CONFIG_FILE)) {
|
|
88
|
+
try {
|
|
89
|
+
const raw = readFileSync(CONFIG_FILE, "utf-8");
|
|
90
|
+
const data = JSON.parse(raw);
|
|
91
|
+
return {
|
|
92
|
+
...DEFAULT_CONFIG,
|
|
93
|
+
...data,
|
|
94
|
+
embeddingModel: normalizeEmbeddingModel(data.embeddingModel),
|
|
95
|
+
uiLanguage: normalizeUiLanguage(data.uiLanguage),
|
|
96
|
+
mirror: normalizeMirror(data.mirror),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return { ...DEFAULT_CONFIG };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return { ...DEFAULT_CONFIG };
|
|
104
|
+
}
|
|
105
|
+
export function saveConfig(config) {
|
|
106
|
+
ensureDirs();
|
|
107
|
+
const normalized = {
|
|
108
|
+
...DEFAULT_CONFIG,
|
|
109
|
+
...config,
|
|
110
|
+
embeddingModel: normalizeEmbeddingModel(config.embeddingModel),
|
|
111
|
+
uiLanguage: normalizeUiLanguage(config.uiLanguage),
|
|
112
|
+
mirror: normalizeMirror(config.mirror),
|
|
113
|
+
};
|
|
114
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(normalized, null, 2), "utf-8");
|
|
115
|
+
}
|
|
116
|
+
export function ensureDirs() {
|
|
117
|
+
for (const dir of [MELU_HOME, MODELS_DIR, MEMORIES_DIR, SOCKETS_DIR, STATS_DIR, PENDING_EXTRACTIONS_DIR]) {
|
|
118
|
+
if (!existsSync(dir)) {
|
|
119
|
+
mkdirSync(dir, { recursive: true });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export function getMemoryPath(nameOrPath) {
|
|
124
|
+
const name = nameOrPath ?? DEFAULT_MEMORY_NAME;
|
|
125
|
+
// 绝对路径或带路径分隔符的,直接使用(支持 U 盘等外部路径)
|
|
126
|
+
if (isAbsolute(name) || name.includes("/") || name.includes("\\")) {
|
|
127
|
+
return extname(name) === ".memory" ? name : name + ".memory";
|
|
128
|
+
}
|
|
129
|
+
// 否则视为 ~/.melu/memories/ 下的名称
|
|
130
|
+
return join(MEMORIES_DIR, name + ".memory");
|
|
131
|
+
}
|
|
132
|
+
export function hasEmbeddingModel() {
|
|
133
|
+
return existsSync(EMBEDDING_MODEL_PATH);
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,uBAAuB,GAClC,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;AAC7F,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAC7C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAGjC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAExG,MAAM,CAAC,MAAM,mBAAmB,GAAe,IAAI,CAAC;AAEpD,eAAe;AACf,MAAM,CAAC,MAAM,kBAAkB,GAAG,gCAAgC,CAAC;AACnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,gCAAgC,CAAC;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;AAE3E,MAAM,CAAC,MAAM,uBAAuB,GAGhC;IACF,WAAW,EAAE;QACX,KAAK,EAAE,uBAAuB;QAC9B,OAAO,EAAE,iEAAiE;QAC1E,WAAW,EACT,iHAAiH;KACpH;IACD,UAAU,EAAE;QACV,KAAK,EAAE,iBAAiB;QACxB,OAAO,EAAE,mEAAmE;QAC5E,WAAW,EACT,2GAA2G;KAC9G;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;AAW9D,MAAM,cAAc,GAAe;IACjC,IAAI,EAAE,YAAY;IAClB,aAAa,EAAE,mBAAmB;IAClC,cAAc,EAAE,kBAAkB;IAClC,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;IACZ,iBAAiB,EAAE,kBAAkB;CACtC,CAAC;AAEF,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC;IACzC,0CAA0C;CAC3C,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,YAAY,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,CACL,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,OAAO;QACjB,KAAK,KAAK,OAAO;QACjB,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,IAAI,CACf,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,IAAI,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,OAAO;gBACL,GAAG,cAAc;gBACjB,GAAG,IAAI;gBACP,cAAc,EAAE,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC;gBAC5D,UAAU,EAAE,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;gBAChD,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;aACrC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,UAAU,EAAE,CAAC;IACb,MAAM,UAAU,GAAe;QAC7B,GAAG,cAAc;QACjB,GAAG,MAAM;QACT,cAAc,EAAE,uBAAuB,CAAC,MAAM,CAAC,cAAc,CAAC;QAC9D,UAAU,EAAE,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC;QAClD,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;KACvC,CAAC;IACF,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,uBAAuB,CAAC,EAAE,CAAC;QACzG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAA0B;IACtD,MAAM,IAAI,GAAG,UAAU,IAAI,mBAAmB,CAAC;IAE/C,iCAAiC;IACjC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAClE,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC;IAC/D,CAAC;IAED,8BAA8B;IAC9B,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,SAAS,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,UAAU,CAAC,oBAAoB,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type EmbedderDaemonResponse, type EmbedderRequestType, getEmbedderDaemonSocketPath, isEmbedderDaemonRequest } from "./embedder-ipc.js";
|
|
2
|
+
export interface EmbedderClientRequestOptions {
|
|
3
|
+
runId: string;
|
|
4
|
+
type: Exclude<EmbedderRequestType, "ping">;
|
|
5
|
+
texts: string[];
|
|
6
|
+
socketPath?: string;
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface EmbedderClientPingOptions {
|
|
10
|
+
runId: string;
|
|
11
|
+
socketPath?: string;
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface WaitForEmbedderDaemonOptions extends EmbedderClientPingOptions {
|
|
15
|
+
retryIntervalMs?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function requestEmbedderEmbeddings(options: EmbedderClientRequestOptions): Promise<Float32Array[]>;
|
|
18
|
+
export declare function requestSingleEmbedderEmbedding(options: Omit<EmbedderClientRequestOptions, "texts"> & {
|
|
19
|
+
text: string;
|
|
20
|
+
}): Promise<Float32Array>;
|
|
21
|
+
export declare function pingEmbedderDaemon(options: EmbedderClientPingOptions): Promise<EmbedderDaemonResponse>;
|
|
22
|
+
export declare function waitForEmbedderDaemonReady(options: WaitForEmbedderDaemonOptions): Promise<void>;
|
|
23
|
+
export { getEmbedderDaemonSocketPath, isEmbedderDaemonRequest };
|
|
24
|
+
//# sourceMappingURL=embedder-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedder-client.d.ts","sourceRoot":"","sources":["../src/embedder-client.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,2BAA2B,EAC3B,uBAAuB,EAKxB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAC3C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,4BAA6B,SAAQ,yBAAyB;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA4HD,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,YAAY,EAAE,CAAC,CAuBzB;AAED,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,IAAI,CAAC,4BAA4B,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACtE,OAAO,CAAC,YAAY,CAAC,CAcvB;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,sBAAsB,CAAC,CAiBjC;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { createConnection } from "node:net";
|
|
3
|
+
import { getEmbedderDaemonSocketPath, isEmbedderDaemonRequest, isEmbedderRequestType, normalizeEmbedderTexts, encodeEmbedderMessage, tryParseEmbedderMessage, } from "./embedder-ipc.js";
|
|
4
|
+
function connectSocket(socketPath, timeoutMs) {
|
|
5
|
+
return new Promise((resolve, reject) => {
|
|
6
|
+
const socket = createConnection({ path: socketPath });
|
|
7
|
+
let settled = false;
|
|
8
|
+
const settle = (error, value) => {
|
|
9
|
+
if (settled)
|
|
10
|
+
return;
|
|
11
|
+
settled = true;
|
|
12
|
+
socket.removeAllListeners();
|
|
13
|
+
if (error) {
|
|
14
|
+
socket.destroy();
|
|
15
|
+
reject(error);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
resolve(value);
|
|
19
|
+
};
|
|
20
|
+
socket.setEncoding("utf8");
|
|
21
|
+
socket.setTimeout(timeoutMs, () => {
|
|
22
|
+
settle(new Error(`Timed out connecting to embedder daemon at ${socketPath}`));
|
|
23
|
+
});
|
|
24
|
+
socket.once("error", (error) => {
|
|
25
|
+
settle(error instanceof Error ? error : new Error(String(error)));
|
|
26
|
+
});
|
|
27
|
+
socket.once("connect", () => {
|
|
28
|
+
socket.setTimeout(0);
|
|
29
|
+
settle(null, socket);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async function sendEmbedderRequest(request, timeoutMs, socketPath) {
|
|
34
|
+
const socket = await connectSocket(socketPath, timeoutMs);
|
|
35
|
+
return new Promise((resolve, reject) => {
|
|
36
|
+
let buffer = "";
|
|
37
|
+
let settled = false;
|
|
38
|
+
const settle = (error, response) => {
|
|
39
|
+
if (settled)
|
|
40
|
+
return;
|
|
41
|
+
settled = true;
|
|
42
|
+
socket.removeAllListeners();
|
|
43
|
+
socket.destroy();
|
|
44
|
+
if (error) {
|
|
45
|
+
reject(error);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
resolve(response);
|
|
49
|
+
};
|
|
50
|
+
const onData = (chunk) => {
|
|
51
|
+
buffer += chunk;
|
|
52
|
+
const newlineIndex = buffer.indexOf("\n");
|
|
53
|
+
if (newlineIndex === -1)
|
|
54
|
+
return;
|
|
55
|
+
const frame = buffer.slice(0, newlineIndex);
|
|
56
|
+
const parsed = tryParseEmbedderMessage(frame);
|
|
57
|
+
if (!parsed || typeof parsed !== "object") {
|
|
58
|
+
settle(new Error("Invalid response from embedder daemon"));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const obj = parsed;
|
|
62
|
+
if (typeof obj.id !== "string" ||
|
|
63
|
+
typeof obj.run_id !== "string" ||
|
|
64
|
+
!isEmbedderRequestType(obj.type) ||
|
|
65
|
+
typeof obj.ok !== "boolean" ||
|
|
66
|
+
typeof obj.latency_ms !== "number") {
|
|
67
|
+
settle(new Error("Malformed response from embedder daemon"));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const response = {
|
|
71
|
+
id: obj.id,
|
|
72
|
+
run_id: obj.run_id,
|
|
73
|
+
type: obj.type,
|
|
74
|
+
ok: obj.ok,
|
|
75
|
+
error: typeof obj.error === "string" ? obj.error : null,
|
|
76
|
+
latency_ms: obj.latency_ms,
|
|
77
|
+
embeddings: Array.isArray(obj.embeddings)
|
|
78
|
+
? obj.embeddings
|
|
79
|
+
.filter((item) => Array.isArray(item))
|
|
80
|
+
.map((vector) => vector.filter((value) => typeof value === "number"))
|
|
81
|
+
: undefined,
|
|
82
|
+
};
|
|
83
|
+
settle(null, response);
|
|
84
|
+
};
|
|
85
|
+
socket.on("data", onData);
|
|
86
|
+
socket.once("error", (error) => {
|
|
87
|
+
settle(error instanceof Error ? error : new Error(String(error)));
|
|
88
|
+
});
|
|
89
|
+
socket.once("timeout", () => {
|
|
90
|
+
settle(new Error(`Timed out waiting for embedder daemon response at ${socketPath}`));
|
|
91
|
+
});
|
|
92
|
+
socket.once("close", () => {
|
|
93
|
+
if (!settled) {
|
|
94
|
+
settle(new Error("Embedder daemon closed the connection before responding"));
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
socket.write(encodeEmbedderMessage(request), "utf8", (error) => {
|
|
98
|
+
if (error) {
|
|
99
|
+
settle(error instanceof Error ? error : new Error(String(error)));
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
export async function requestEmbedderEmbeddings(options) {
|
|
105
|
+
const texts = normalizeEmbedderTexts(options.texts);
|
|
106
|
+
if (texts.length === 0) {
|
|
107
|
+
throw new Error("Cannot request embeddings for empty texts");
|
|
108
|
+
}
|
|
109
|
+
const response = await sendEmbedderRequest({
|
|
110
|
+
id: randomUUID(),
|
|
111
|
+
run_id: options.runId,
|
|
112
|
+
type: options.type,
|
|
113
|
+
texts,
|
|
114
|
+
}, options.timeoutMs ?? 60_000, options.socketPath ?? getEmbedderDaemonSocketPath(options.runId));
|
|
115
|
+
if (!response.ok) {
|
|
116
|
+
throw new Error(response.error ?? "Embedder daemon returned an error");
|
|
117
|
+
}
|
|
118
|
+
const embeddings = response.embeddings ?? [];
|
|
119
|
+
return embeddings.map((vector) => new Float32Array(vector));
|
|
120
|
+
}
|
|
121
|
+
export async function requestSingleEmbedderEmbedding(options) {
|
|
122
|
+
const vectors = await requestEmbedderEmbeddings({
|
|
123
|
+
runId: options.runId,
|
|
124
|
+
type: options.type,
|
|
125
|
+
texts: [options.text],
|
|
126
|
+
socketPath: options.socketPath,
|
|
127
|
+
timeoutMs: options.timeoutMs,
|
|
128
|
+
});
|
|
129
|
+
if (vectors.length === 0) {
|
|
130
|
+
throw new Error("Embedder daemon returned no vectors");
|
|
131
|
+
}
|
|
132
|
+
return vectors[0];
|
|
133
|
+
}
|
|
134
|
+
export async function pingEmbedderDaemon(options) {
|
|
135
|
+
const response = await sendEmbedderRequest({
|
|
136
|
+
id: randomUUID(),
|
|
137
|
+
run_id: options.runId,
|
|
138
|
+
type: "ping",
|
|
139
|
+
texts: [],
|
|
140
|
+
}, options.timeoutMs ?? 10_000, options.socketPath ?? getEmbedderDaemonSocketPath(options.runId));
|
|
141
|
+
if (!response.ok) {
|
|
142
|
+
throw new Error(response.error ?? "Embedder daemon ping failed");
|
|
143
|
+
}
|
|
144
|
+
return response;
|
|
145
|
+
}
|
|
146
|
+
export async function waitForEmbedderDaemonReady(options) {
|
|
147
|
+
const retryIntervalMs = options.retryIntervalMs ?? 250;
|
|
148
|
+
const timeoutMs = options.timeoutMs ?? 15_000;
|
|
149
|
+
const startedAt = Date.now();
|
|
150
|
+
while (true) {
|
|
151
|
+
try {
|
|
152
|
+
await pingEmbedderDaemon(options);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
if (Date.now() - startedAt >= timeoutMs) {
|
|
157
|
+
throw error instanceof Error ? error : new Error(String(error));
|
|
158
|
+
}
|
|
159
|
+
await new Promise((resolve) => setTimeout(resolve, retryIntervalMs));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
export { getEmbedderDaemonSocketPath, isEmbedderDaemonRequest };
|
|
164
|
+
//# sourceMappingURL=embedder-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedder-client.js","sourceRoot":"","sources":["../src/embedder-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type EmbedderRequestType = "query" | "memory";
|
|
2
|
+
export interface EmbedderDaemonRequestOptions {
|
|
3
|
+
runId?: string | null;
|
|
4
|
+
socketPath?: string | null;
|
|
5
|
+
timeoutMs?: number;
|
|
6
|
+
type?: EmbedderRequestType;
|
|
7
|
+
}
|
|
8
|
+
export declare function embedLongTextViaDaemon(text: string, modelId: string, options?: EmbedderDaemonRequestOptions): Promise<Float32Array | null>;
|
|
9
|
+
export declare function embedTextsViaDaemon(texts: string[], modelId: string, options?: EmbedderDaemonRequestOptions): Promise<Float32Array[] | null>;
|
|
10
|
+
//# sourceMappingURL=embedder-daemon-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedder-daemon-client.d.ts","sourceRoot":"","sources":["../src/embedder-daemon-client.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,4BAA4B;IAC3C,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,mBAAmB,CAAC;CAC5B;AAqBD,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,4BAA4B,GACrC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAW9B;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,4BAA4B,GACrC,OAAO,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CAchC"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { createConnection } from "node:net";
|
|
2
|
+
import { splitTextIntoOverlappingWindows } from "./text-chunking.js";
|
|
3
|
+
import { buildEmbedderSocketPath, createMeluRuntimeContext, getMeluRuntimeContext, } from "./runtime-context.js";
|
|
4
|
+
const DEFAULT_TIMEOUT_MS = 2500;
|
|
5
|
+
export async function embedLongTextViaDaemon(text, modelId, options) {
|
|
6
|
+
const chunks = splitTextIntoOverlappingWindows(text);
|
|
7
|
+
if (chunks.length === 0)
|
|
8
|
+
return null;
|
|
9
|
+
const embeddings = await embedTextsViaDaemon(chunks, modelId, {
|
|
10
|
+
...options,
|
|
11
|
+
type: options?.type ?? "query",
|
|
12
|
+
});
|
|
13
|
+
if (!embeddings || embeddings.length === 0)
|
|
14
|
+
return null;
|
|
15
|
+
if (embeddings.length === 1)
|
|
16
|
+
return embeddings[0];
|
|
17
|
+
return averageVectors(embeddings);
|
|
18
|
+
}
|
|
19
|
+
export async function embedTextsViaDaemon(texts, modelId, options) {
|
|
20
|
+
const normalizedTexts = texts
|
|
21
|
+
.map((text) => text.trim())
|
|
22
|
+
.filter((text) => text.length > 0);
|
|
23
|
+
if (normalizedTexts.length === 0)
|
|
24
|
+
return null;
|
|
25
|
+
const runtime = resolveRuntimeContext(options);
|
|
26
|
+
if (!runtime.embedderSocketPath)
|
|
27
|
+
return null;
|
|
28
|
+
const payload = await requestEmbeddings(runtime, normalizedTexts, modelId, options?.type ?? "query", options?.timeoutMs ?? DEFAULT_TIMEOUT_MS);
|
|
29
|
+
if (!payload)
|
|
30
|
+
return null;
|
|
31
|
+
return payload;
|
|
32
|
+
}
|
|
33
|
+
function resolveRuntimeContext(options) {
|
|
34
|
+
if (options?.runId) {
|
|
35
|
+
const runtime = createMeluRuntimeContext(options.runId);
|
|
36
|
+
return {
|
|
37
|
+
runId: runtime.runId,
|
|
38
|
+
embedderSocketPath: options.socketPath?.trim() || runtime.embedderSocketPath,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const runtime = getMeluRuntimeContext();
|
|
42
|
+
return {
|
|
43
|
+
runId: runtime.runId,
|
|
44
|
+
embedderSocketPath: options?.socketPath?.trim() || runtime.embedderSocketPath || buildEmbedderSocketPath(runtime.runId),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
async function requestEmbeddings(runtime, texts, modelId, type, timeoutMs) {
|
|
48
|
+
return await new Promise((resolve) => {
|
|
49
|
+
const socket = createConnection({ path: runtime.embedderSocketPath });
|
|
50
|
+
socket.setEncoding("utf8");
|
|
51
|
+
let settled = false;
|
|
52
|
+
let buffer = "";
|
|
53
|
+
const request = {
|
|
54
|
+
id: randomRequestId(),
|
|
55
|
+
type,
|
|
56
|
+
texts,
|
|
57
|
+
model: modelId,
|
|
58
|
+
run_id: runtime.runId,
|
|
59
|
+
};
|
|
60
|
+
const timeout = setTimeout(() => {
|
|
61
|
+
fail(null);
|
|
62
|
+
}, timeoutMs);
|
|
63
|
+
const cleanup = () => {
|
|
64
|
+
clearTimeout(timeout);
|
|
65
|
+
socket.removeAllListeners();
|
|
66
|
+
try {
|
|
67
|
+
socket.destroy();
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Ignore cleanup failures.
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const succeed = (vectors) => {
|
|
74
|
+
if (settled)
|
|
75
|
+
return;
|
|
76
|
+
settled = true;
|
|
77
|
+
cleanup();
|
|
78
|
+
resolve(vectors);
|
|
79
|
+
};
|
|
80
|
+
const fail = (_error) => {
|
|
81
|
+
succeed(null);
|
|
82
|
+
};
|
|
83
|
+
socket.on("connect", () => {
|
|
84
|
+
try {
|
|
85
|
+
socket.write(JSON.stringify(request) + "\n");
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
fail(error);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
socket.on("data", (chunk) => {
|
|
92
|
+
buffer += chunk;
|
|
93
|
+
const newlineIndex = buffer.indexOf("\n");
|
|
94
|
+
if (newlineIndex === -1)
|
|
95
|
+
return;
|
|
96
|
+
const line = buffer.slice(0, newlineIndex).trim();
|
|
97
|
+
if (!line) {
|
|
98
|
+
fail(new Error("empty embedder daemon response"));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const response = JSON.parse(line);
|
|
103
|
+
if (response.error) {
|
|
104
|
+
fail(new Error(response.error));
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const vectors = normalizeDaemonResponse(response);
|
|
108
|
+
if (!vectors || vectors.length === 0) {
|
|
109
|
+
fail(new Error("invalid embedder daemon response"));
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
succeed(vectors);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
fail(error);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
socket.on("error", () => {
|
|
119
|
+
fail(null);
|
|
120
|
+
});
|
|
121
|
+
socket.on("close", () => {
|
|
122
|
+
if (!settled) {
|
|
123
|
+
fail(null);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
function normalizeDaemonResponse(response) {
|
|
129
|
+
if (Array.isArray(response.embeddings)) {
|
|
130
|
+
const vectors = response.embeddings
|
|
131
|
+
.map((entry) => normalizeVectorEntry(entry))
|
|
132
|
+
.filter((vector) => vector !== null);
|
|
133
|
+
return vectors.length > 0 ? vectors : null;
|
|
134
|
+
}
|
|
135
|
+
const singleVector = normalizeVectorEntry(response.embedding);
|
|
136
|
+
return singleVector ? [singleVector] : null;
|
|
137
|
+
}
|
|
138
|
+
function normalizeVectorEntry(value) {
|
|
139
|
+
if (!Array.isArray(value))
|
|
140
|
+
return null;
|
|
141
|
+
const vector = new Float32Array(value.length);
|
|
142
|
+
for (let i = 0; i < value.length; i++) {
|
|
143
|
+
const entry = Number(value[i]);
|
|
144
|
+
if (!Number.isFinite(entry))
|
|
145
|
+
return null;
|
|
146
|
+
vector[i] = entry;
|
|
147
|
+
}
|
|
148
|
+
return normalizeVector(vector);
|
|
149
|
+
}
|
|
150
|
+
function normalizeVector(vector) {
|
|
151
|
+
let norm = 0;
|
|
152
|
+
for (let i = 0; i < vector.length; i++) {
|
|
153
|
+
norm += vector[i] * vector[i];
|
|
154
|
+
}
|
|
155
|
+
if (norm <= 1e-12)
|
|
156
|
+
return vector;
|
|
157
|
+
const scale = 1 / Math.sqrt(norm);
|
|
158
|
+
for (let i = 0; i < vector.length; i++) {
|
|
159
|
+
vector[i] *= scale;
|
|
160
|
+
}
|
|
161
|
+
return vector;
|
|
162
|
+
}
|
|
163
|
+
function averageVectors(vectors) {
|
|
164
|
+
if (vectors.length === 0) {
|
|
165
|
+
throw new Error("Cannot average empty vectors");
|
|
166
|
+
}
|
|
167
|
+
const result = new Float32Array(vectors[0].length);
|
|
168
|
+
for (const vector of vectors) {
|
|
169
|
+
if (vector.length !== result.length) {
|
|
170
|
+
throw new Error("Vectors have different lengths");
|
|
171
|
+
}
|
|
172
|
+
for (let i = 0; i < vector.length; i++) {
|
|
173
|
+
result[i] += vector[i];
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const scale = 1 / vectors.length;
|
|
177
|
+
for (let i = 0; i < result.length; i++) {
|
|
178
|
+
result[i] *= scale;
|
|
179
|
+
}
|
|
180
|
+
return normalizeVector(result);
|
|
181
|
+
}
|
|
182
|
+
function randomRequestId() {
|
|
183
|
+
return `${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=embedder-daemon-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedder-daemon-client.js","sourceRoot":"","sources":["../src/embedder-daemon-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface EmbedderDaemonOptions {
|
|
2
|
+
runId: string;
|
|
3
|
+
ownerPid?: number;
|
|
4
|
+
socketPath?: string;
|
|
5
|
+
modelId?: string;
|
|
6
|
+
idleTimeoutMs?: number;
|
|
7
|
+
idleCheckMs?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function startEmbedderDaemon(options: EmbedderDaemonOptions): Promise<void>;
|
|
10
|
+
export declare function runEmbedderDaemonFromEnv(): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=embedder-daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedder-daemon.d.ts","sourceRoot":"","sources":["../src/embedder-daemon.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAkRD,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6DvF;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkB9D"}
|