@zvec/zvec-grep 0.1.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 +201 -0
- package/README.md +222 -0
- package/README_CN.md +222 -0
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.js +611 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/commands.d.ts +2 -0
- package/dist/cli/commands.js +270 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/errors.d.ts +6 -0
- package/dist/cli/errors.js +97 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/format/context.d.ts +5 -0
- package/dist/cli/format/context.js +490 -0
- package/dist/cli/format/context.js.map +1 -0
- package/dist/cli/format/debug.d.ts +4 -0
- package/dist/cli/format/debug.js +42 -0
- package/dist/cli/format/debug.js.map +1 -0
- package/dist/cli/format/highlight.d.ts +3 -0
- package/dist/cli/format/highlight.js +106 -0
- package/dist/cli/format/highlight.js.map +1 -0
- package/dist/cli/format/progress.d.ts +9 -0
- package/dist/cli/format/progress.js +92 -0
- package/dist/cli/format/progress.js.map +1 -0
- package/dist/cli/format/range.d.ts +3 -0
- package/dist/cli/format/range.js +24 -0
- package/dist/cli/format/range.js.map +1 -0
- package/dist/cli/format/status.d.ts +7 -0
- package/dist/cli/format/status.js +200 -0
- package/dist/cli/format/status.js.map +1 -0
- package/dist/cli/help.d.ts +1 -0
- package/dist/cli/help.js +88 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +32 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/types.d.ts +56 -0
- package/dist/cli/types.js +10 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/version.d.ts +1 -0
- package/dist/cli/version.js +11 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/engine/collection/index.d.ts +50 -0
- package/dist/engine/collection/index.js +388 -0
- package/dist/engine/collection/index.js.map +1 -0
- package/dist/engine/errors/details.d.ts +6 -0
- package/dist/engine/errors/details.js +27 -0
- package/dist/engine/errors/details.js.map +1 -0
- package/dist/engine/errors/index.d.ts +14 -0
- package/dist/engine/errors/index.js +16 -0
- package/dist/engine/errors/index.js.map +1 -0
- package/dist/engine/models/catalog.d.ts +47 -0
- package/dist/engine/models/catalog.js +68 -0
- package/dist/engine/models/catalog.js.map +1 -0
- package/dist/engine/models/embeddings.d.ts +25 -0
- package/dist/engine/models/embeddings.js +100 -0
- package/dist/engine/models/embeddings.js.map +1 -0
- package/dist/engine/models/factory.d.ts +5 -0
- package/dist/engine/models/factory.js +66 -0
- package/dist/engine/models/factory.js.map +1 -0
- package/dist/engine/models/index.d.ts +6 -0
- package/dist/engine/models/index.js +5 -0
- package/dist/engine/models/index.js.map +1 -0
- package/dist/engine/models/providers/index.d.ts +2 -0
- package/dist/engine/models/providers/index.js +3 -0
- package/dist/engine/models/providers/index.js.map +1 -0
- package/dist/engine/models/providers/llama-cpp/embedding.d.ts +94 -0
- package/dist/engine/models/providers/llama-cpp/embedding.js +459 -0
- package/dist/engine/models/providers/llama-cpp/embedding.js.map +1 -0
- package/dist/engine/models/providers/llama-cpp/index.d.ts +1 -0
- package/dist/engine/models/providers/llama-cpp/index.js +2 -0
- package/dist/engine/models/providers/llama-cpp/index.js.map +1 -0
- package/dist/engine/models/providers/qwen/embedding.d.ts +38 -0
- package/dist/engine/models/providers/qwen/embedding.js +322 -0
- package/dist/engine/models/providers/qwen/embedding.js.map +1 -0
- package/dist/engine/models/providers/qwen/index.d.ts +1 -0
- package/dist/engine/models/providers/qwen/index.js +2 -0
- package/dist/engine/models/providers/qwen/index.js.map +1 -0
- package/dist/engine/models/ranking.d.ts +15 -0
- package/dist/engine/models/ranking.js +2 -0
- package/dist/engine/models/ranking.js.map +1 -0
- package/dist/engine/models/types.d.ts +30 -0
- package/dist/engine/models/types.js +2 -0
- package/dist/engine/models/types.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/adapter.d.ts +19 -0
- package/dist/engine/pipeline/indexing/extractor/code/adapter.js +24 -0
- package/dist/engine/pipeline/indexing/extractor/code/adapter.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/extractor.d.ts +14 -0
- package/dist/engine/pipeline/indexing/extractor/code/extractor.js +594 -0
- package/dist/engine/pipeline/indexing/extractor/code/extractor.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/families/c-family.d.ts +2 -0
- package/dist/engine/pipeline/indexing/extractor/code/families/c-family.js +116 -0
- package/dist/engine/pipeline/indexing/extractor/code/families/c-family.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/families/js-ts.d.ts +12 -0
- package/dist/engine/pipeline/indexing/extractor/code/families/js-ts.js +112 -0
- package/dist/engine/pipeline/indexing/extractor/code/families/js-ts.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/families/metadata.d.ts +8 -0
- package/dist/engine/pipeline/indexing/extractor/code/families/metadata.js +83 -0
- package/dist/engine/pipeline/indexing/extractor/code/families/metadata.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/families/name-field.d.ts +3 -0
- package/dist/engine/pipeline/indexing/extractor/code/families/name-field.js +22 -0
- package/dist/engine/pipeline/indexing/extractor/code/families/name-field.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/c.d.ts +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/c.js +15 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/c.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/cpp.d.ts +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/cpp.js +18 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/cpp.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/go.d.ts +2 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/go.js +72 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/go.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/java.d.ts +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/java.js +17 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/java.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/javascript.d.ts +2 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/javascript.js +25 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/javascript.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/python.d.ts +2 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/python.js +53 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/python.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/rust.d.ts +2 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/rust.js +29 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/rust.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/typescript.d.ts +2 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/typescript.js +37 -0
- package/dist/engine/pipeline/indexing/extractor/code/languages/typescript.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/index.d.ts +44 -0
- package/dist/engine/pipeline/indexing/extractor/index.js +281 -0
- package/dist/engine/pipeline/indexing/extractor/index.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/markdown/extractor.d.ts +13 -0
- package/dist/engine/pipeline/indexing/extractor/markdown/extractor.js +339 -0
- package/dist/engine/pipeline/indexing/extractor/markdown/extractor.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/tree-sitter/grammar.d.ts +4 -0
- package/dist/engine/pipeline/indexing/extractor/tree-sitter/grammar.js +49 -0
- package/dist/engine/pipeline/indexing/extractor/tree-sitter/grammar.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/tree-sitter/nodes.d.ts +3 -0
- package/dist/engine/pipeline/indexing/extractor/tree-sitter/nodes.js +26 -0
- package/dist/engine/pipeline/indexing/extractor/tree-sitter/nodes.js.map +1 -0
- package/dist/engine/pipeline/indexing/extractor/tree-sitter/parser.d.ts +2 -0
- package/dist/engine/pipeline/indexing/extractor/tree-sitter/parser.js +31 -0
- package/dist/engine/pipeline/indexing/extractor/tree-sitter/parser.js.map +1 -0
- package/dist/engine/pipeline/indexing/ids.d.ts +1 -0
- package/dist/engine/pipeline/indexing/ids.js +5 -0
- package/dist/engine/pipeline/indexing/ids.js.map +1 -0
- package/dist/engine/pipeline/indexing/index.d.ts +12 -0
- package/dist/engine/pipeline/indexing/index.js +538 -0
- package/dist/engine/pipeline/indexing/index.js.map +1 -0
- package/dist/engine/pipeline/indexing/root-paths.d.ts +7 -0
- package/dist/engine/pipeline/indexing/root-paths.js +151 -0
- package/dist/engine/pipeline/indexing/root-paths.js.map +1 -0
- package/dist/engine/pipeline/indexing/scanner/index.d.ts +5 -0
- package/dist/engine/pipeline/indexing/scanner/index.js +504 -0
- package/dist/engine/pipeline/indexing/scanner/index.js.map +1 -0
- package/dist/engine/pipeline/search/index.d.ts +12 -0
- package/dist/engine/pipeline/search/index.js +761 -0
- package/dist/engine/pipeline/search/index.js.map +1 -0
- package/dist/engine/service/index.d.ts +2 -0
- package/dist/engine/service/index.js +2 -0
- package/dist/engine/service/index.js.map +1 -0
- package/dist/engine/service/lexical.d.ts +29 -0
- package/dist/engine/service/lexical.js +482 -0
- package/dist/engine/service/lexical.js.map +1 -0
- package/dist/engine/service/root.d.ts +15 -0
- package/dist/engine/service/root.js +44 -0
- package/dist/engine/service/root.js.map +1 -0
- package/dist/engine/service/types.d.ts +157 -0
- package/dist/engine/service/types.js +2 -0
- package/dist/engine/service/types.js.map +1 -0
- package/dist/engine/service/zvec-grep.d.ts +2 -0
- package/dist/engine/service/zvec-grep.js +935 -0
- package/dist/engine/service/zvec-grep.js.map +1 -0
- package/dist/engine/storage/index.d.ts +42 -0
- package/dist/engine/storage/index.js +2 -0
- package/dist/engine/storage/index.js.map +1 -0
- package/dist/engine/storage/zvec.d.ts +51 -0
- package/dist/engine/storage/zvec.js +706 -0
- package/dist/engine/storage/zvec.js.map +1 -0
- package/dist/engine/types.d.ts +266 -0
- package/dist/engine/types.js +14 -0
- package/dist/engine/types.js.map +1 -0
- package/dist/engine/utils/glob.d.ts +6 -0
- package/dist/engine/utils/glob.js +110 -0
- package/dist/engine/utils/glob.js.map +1 -0
- package/dist/engine/utils/hash.d.ts +2 -0
- package/dist/engine/utils/hash.js +8 -0
- package/dist/engine/utils/hash.js.map +1 -0
- package/dist/engine/utils/json.d.ts +4 -0
- package/dist/engine/utils/json.js +45 -0
- package/dist/engine/utils/json.js.map +1 -0
- package/dist/engine/utils/lock.d.ts +19 -0
- package/dist/engine/utils/lock.js +254 -0
- package/dist/engine/utils/lock.js.map +1 -0
- package/dist/engine/utils/path.d.ts +4 -0
- package/dist/engine/utils/path.js +18 -0
- package/dist/engine/utils/path.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
- package/skills/zvec-grep/SKILL.md +141 -0
- package/skills/zvec-grep/agents/openai.yaml +4 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { EmbeddingCatalogEntry, ModelRef } from "./types.js";
|
|
2
|
+
export declare const MODEL_CATALOG: {
|
|
3
|
+
readonly openai: {
|
|
4
|
+
readonly embedding: readonly ["text-embedding-3-small", "text-embedding-3-large"];
|
|
5
|
+
readonly ranking: readonly [];
|
|
6
|
+
};
|
|
7
|
+
readonly qwen: {
|
|
8
|
+
readonly embedding: readonly ["text-embedding-v4", "qwen3-vl-embedding"];
|
|
9
|
+
readonly ranking: readonly ["gte-rerank-v2"];
|
|
10
|
+
};
|
|
11
|
+
readonly jina: {
|
|
12
|
+
readonly embedding: readonly ["jina-embeddings-v3"];
|
|
13
|
+
readonly ranking: readonly ["jina-reranker-v2-base-multilingual"];
|
|
14
|
+
};
|
|
15
|
+
readonly local: {
|
|
16
|
+
readonly embedding: readonly ["embeddinggemma-300m", "qwen3-embedding-0.6b"];
|
|
17
|
+
readonly ranking: readonly [];
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export declare const EMBEDDING_MODEL_CATALOG: {
|
|
21
|
+
readonly "local/embeddinggemma-300m": {
|
|
22
|
+
readonly id: "local/embeddinggemma-300m";
|
|
23
|
+
readonly provider: "local";
|
|
24
|
+
readonly model: "embeddinggemma-300m";
|
|
25
|
+
readonly uri: "hf:ggml-org/embeddinggemma-300M-GGUF/embeddinggemma-300M-Q8_0.gguf";
|
|
26
|
+
readonly dimension: 768;
|
|
27
|
+
readonly metric: "cosine";
|
|
28
|
+
readonly format: "embeddinggemma";
|
|
29
|
+
readonly contextSize: 2048;
|
|
30
|
+
readonly maxBatchSize: 16;
|
|
31
|
+
};
|
|
32
|
+
readonly "local/qwen3-embedding-0.6b": {
|
|
33
|
+
readonly id: "local/qwen3-embedding-0.6b";
|
|
34
|
+
readonly provider: "local";
|
|
35
|
+
readonly model: "qwen3-embedding-0.6b";
|
|
36
|
+
readonly uri: "hf:Qwen/Qwen3-Embedding-0.6B-GGUF/Qwen3-Embedding-0.6B-Q8_0.gguf";
|
|
37
|
+
readonly dimension: 1024;
|
|
38
|
+
readonly metric: "cosine";
|
|
39
|
+
readonly format: "qwen3";
|
|
40
|
+
readonly contextSize: 8192;
|
|
41
|
+
readonly maxBatchSize: 8;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export type EmbeddingModelCatalogId = keyof typeof EMBEDDING_MODEL_CATALOG;
|
|
45
|
+
export declare function listEmbeddingModels(): EmbeddingCatalogEntry[];
|
|
46
|
+
export declare function getEmbeddingModelCatalogEntry(id: string): EmbeddingCatalogEntry | undefined;
|
|
47
|
+
export declare function getEmbeddingModelCatalogEntryByRef(ref: ModelRef): EmbeddingCatalogEntry | undefined;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export const MODEL_CATALOG = {
|
|
2
|
+
openai: {
|
|
3
|
+
embedding: [
|
|
4
|
+
"text-embedding-3-small",
|
|
5
|
+
"text-embedding-3-large",
|
|
6
|
+
],
|
|
7
|
+
ranking: [],
|
|
8
|
+
},
|
|
9
|
+
qwen: {
|
|
10
|
+
embedding: [
|
|
11
|
+
"text-embedding-v4",
|
|
12
|
+
"qwen3-vl-embedding",
|
|
13
|
+
],
|
|
14
|
+
ranking: [
|
|
15
|
+
"gte-rerank-v2",
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
jina: {
|
|
19
|
+
embedding: [
|
|
20
|
+
"jina-embeddings-v3",
|
|
21
|
+
],
|
|
22
|
+
ranking: [
|
|
23
|
+
"jina-reranker-v2-base-multilingual",
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
local: {
|
|
27
|
+
embedding: [
|
|
28
|
+
"embeddinggemma-300m",
|
|
29
|
+
"qwen3-embedding-0.6b",
|
|
30
|
+
],
|
|
31
|
+
ranking: [],
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
export const EMBEDDING_MODEL_CATALOG = {
|
|
35
|
+
"local/embeddinggemma-300m": {
|
|
36
|
+
id: "local/embeddinggemma-300m",
|
|
37
|
+
provider: "local",
|
|
38
|
+
model: "embeddinggemma-300m",
|
|
39
|
+
uri: "hf:ggml-org/embeddinggemma-300M-GGUF/embeddinggemma-300M-Q8_0.gguf",
|
|
40
|
+
dimension: 768,
|
|
41
|
+
metric: "cosine",
|
|
42
|
+
format: "embeddinggemma",
|
|
43
|
+
contextSize: 2048,
|
|
44
|
+
maxBatchSize: 16,
|
|
45
|
+
},
|
|
46
|
+
"local/qwen3-embedding-0.6b": {
|
|
47
|
+
id: "local/qwen3-embedding-0.6b",
|
|
48
|
+
provider: "local",
|
|
49
|
+
model: "qwen3-embedding-0.6b",
|
|
50
|
+
uri: "hf:Qwen/Qwen3-Embedding-0.6B-GGUF/Qwen3-Embedding-0.6B-Q8_0.gguf",
|
|
51
|
+
dimension: 1024,
|
|
52
|
+
metric: "cosine",
|
|
53
|
+
format: "qwen3",
|
|
54
|
+
contextSize: 8192,
|
|
55
|
+
maxBatchSize: 8,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
export function listEmbeddingModels() {
|
|
59
|
+
return Object.values(EMBEDDING_MODEL_CATALOG);
|
|
60
|
+
}
|
|
61
|
+
export function getEmbeddingModelCatalogEntry(id) {
|
|
62
|
+
return EMBEDDING_MODEL_CATALOG[id];
|
|
63
|
+
}
|
|
64
|
+
export function getEmbeddingModelCatalogEntryByRef(ref) {
|
|
65
|
+
return listEmbeddingModels().find((entry) => entry.provider === ref.provider
|
|
66
|
+
&& entry.model === ref.model);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/engine/models/catalog.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE;QACN,SAAS,EAAE;YACT,wBAAwB;YACxB,wBAAwB;SACzB;QACD,OAAO,EAAE,EAAE;KACZ;IAED,IAAI,EAAE;QACJ,SAAS,EAAE;YACT,mBAAmB;YACnB,oBAAoB;SACrB;QACD,OAAO,EAAE;YACP,eAAe;SAChB;KACF;IAED,IAAI,EAAE;QACJ,SAAS,EAAE;YACT,oBAAoB;SACrB;QACD,OAAO,EAAE;YACP,oCAAoC;SACrC;KACF;IAED,KAAK,EAAE;QACL,SAAS,EAAE;YACT,qBAAqB;YACrB,sBAAsB;SACvB;QACD,OAAO,EAAE,EAAE;KACZ;CAC8B,CAAC;AAGlC,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,2BAA2B,EAAE;QAC3B,EAAE,EAAE,2BAA2B;QAC/B,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,qBAAqB;QAC5B,GAAG,EAAE,oEAAoE;QACzE,SAAS,EAAE,GAAG;QACd,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,gBAAgB;QACxB,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,EAAE;KACjB;IAED,4BAA4B,EAAE;QAC5B,EAAE,EAAE,4BAA4B;QAChC,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,sBAAsB;QAC7B,GAAG,EAAE,kEAAkE;QACvE,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,CAAC;KAChB;CACuD,CAAC;AAM3D,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAChD,CAAC;AAGD,MAAM,UAAU,6BAA6B,CAC3C,EAAU;IAEV,OAAO,uBAAuB,CAAC,EAA6B,CAAC,CAAC;AAChE,CAAC;AAGD,MAAM,UAAU,kCAAkC,CAChD,GAAa;IAEb,OAAO,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1C,KAAK,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ;WAC5B,KAAK,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAC7B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Content, ContentKind } from "../types.js";
|
|
2
|
+
import type { ModelRef, VectorMetric } from "./types.js";
|
|
3
|
+
export type EmbeddingVector = number[];
|
|
4
|
+
export type EmbeddingPurpose = "document" | "query";
|
|
5
|
+
export type EmbeddingOptions = {
|
|
6
|
+
purpose?: EmbeddingPurpose;
|
|
7
|
+
};
|
|
8
|
+
export type EmbeddingLimits = {
|
|
9
|
+
maxBatchSize: number;
|
|
10
|
+
maxInputTokens?: number;
|
|
11
|
+
maxImageBytes?: number;
|
|
12
|
+
};
|
|
13
|
+
export declare abstract class EmbeddingModel {
|
|
14
|
+
abstract readonly ref: ModelRef;
|
|
15
|
+
abstract readonly dimension: number;
|
|
16
|
+
abstract readonly metric: VectorMetric;
|
|
17
|
+
abstract readonly supportedContentKinds: readonly ContentKind[];
|
|
18
|
+
abstract readonly limits: EmbeddingLimits;
|
|
19
|
+
readonly recommendedIndexConcurrency?: number;
|
|
20
|
+
embed(contents: readonly Content[], options?: EmbeddingOptions): Promise<EmbeddingVector[]>;
|
|
21
|
+
dispose(): Promise<void>;
|
|
22
|
+
protected abstract doEmbed(contents: readonly Content[], options: Required<EmbeddingOptions>): Promise<EmbeddingVector[]>;
|
|
23
|
+
private validateContents;
|
|
24
|
+
private validateVectors;
|
|
25
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { EngineError } from "../errors/index.js";
|
|
2
|
+
export class EmbeddingModel {
|
|
3
|
+
recommendedIndexConcurrency;
|
|
4
|
+
async embed(contents, options = {}) {
|
|
5
|
+
this.validateContents(contents);
|
|
6
|
+
const vectors = await this.doEmbed(contents, {
|
|
7
|
+
purpose: options.purpose ?? "document",
|
|
8
|
+
});
|
|
9
|
+
this.validateVectors(contents, vectors);
|
|
10
|
+
return vectors;
|
|
11
|
+
}
|
|
12
|
+
async dispose() {
|
|
13
|
+
// Most embedding providers do not hold local resources.
|
|
14
|
+
}
|
|
15
|
+
validateContents(contents) {
|
|
16
|
+
if (contents.length === 0) {
|
|
17
|
+
throw new EngineError("Embedding requires at least one content item", {
|
|
18
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_EMPTY_INPUT"
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
if (contents.length > this.limits.maxBatchSize) {
|
|
22
|
+
throw new EngineError("Embedding batch size exceeds model limit", {
|
|
23
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_BATCH_TOO_LARGE",
|
|
24
|
+
context: `model=${this.ref.model} batchSize=${contents.length} maxBatchSize=${this.limits.maxBatchSize}`,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
for (const [index, content] of contents.entries()) {
|
|
28
|
+
if (!this.supportedContentKinds.includes(content.kind)) {
|
|
29
|
+
throw new EngineError("Embedding model does not support content kind", {
|
|
30
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_UNSUPPORTED_CONTENT",
|
|
31
|
+
context: `model=${this.ref.model} index=${index} kind=${content.kind}`,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
if (content.kind === "text" && content.text.trim().length === 0) {
|
|
35
|
+
throw new EngineError("Embedding text content must not be empty", {
|
|
36
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_EMPTY_TEXT",
|
|
37
|
+
context: `model=${this.ref.model} index=${index}`,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
if (content.kind === "image") {
|
|
41
|
+
if (content.data.byteLength === 0) {
|
|
42
|
+
throw new EngineError("Embedding image content must not be empty", {
|
|
43
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_EMPTY_IMAGE",
|
|
44
|
+
context: `model=${this.ref.model} index=${index}`,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
if (content.format.trim().length === 0) {
|
|
48
|
+
throw new EngineError("Embedding image content must include a format", {
|
|
49
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_MISSING_IMAGE_FORMAT",
|
|
50
|
+
context: `model=${this.ref.model} index=${index}`,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (this.limits.maxImageBytes !== undefined
|
|
54
|
+
&& content.data.byteLength > this.limits.maxImageBytes) {
|
|
55
|
+
throw new EngineError("Embedding image content exceeds model limit", {
|
|
56
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_IMAGE_TOO_LARGE",
|
|
57
|
+
context: `model=${this.ref.model} index=${index} imageBytes=${content.data.byteLength} maxImageBytes=${this.limits.maxImageBytes}`,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
validateVectors(contents, vectors) {
|
|
64
|
+
if (!Array.isArray(vectors)) {
|
|
65
|
+
throw new EngineError("Embedding model returned a non-array response", {
|
|
66
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_INVALID_RESPONSE",
|
|
67
|
+
context: `model=${this.ref.model}`,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
if (vectors.length !== contents.length) {
|
|
71
|
+
throw new EngineError("Embedding model returned the wrong number of vectors", {
|
|
72
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_VECTOR_COUNT_MISMATCH",
|
|
73
|
+
context: `model=${this.ref.model} contentCount=${contents.length} vectorCount=${vectors.length}`,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
for (const [vectorIndex, vector] of vectors.entries()) {
|
|
77
|
+
if (!Array.isArray(vector)) {
|
|
78
|
+
throw new EngineError("Embedding model returned a non-array vector", {
|
|
79
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_INVALID_VECTOR",
|
|
80
|
+
context: `model=${this.ref.model} vectorIndex=${vectorIndex}`,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
if (vector.length !== this.dimension) {
|
|
84
|
+
throw new EngineError("Embedding model returned a vector with the wrong dimension", {
|
|
85
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_DIMENSION_MISMATCH",
|
|
86
|
+
context: `model=${this.ref.model} vectorIndex=${vectorIndex} expectedDimension=${this.dimension} actualDimension=${vector.length}`,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
for (const [valueIndex, value] of vector.entries()) {
|
|
90
|
+
if (!Number.isFinite(value)) {
|
|
91
|
+
throw new EngineError("Embedding model returned a non-finite vector value", {
|
|
92
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_NON_FINITE_VECTOR_VALUE",
|
|
93
|
+
context: `model=${this.ref.model} vectorIndex=${vectorIndex} valueIndex=${valueIndex}`,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=embeddings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../../src/engine/models/embeddings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { EmbeddingModel } from "./embeddings.js";
|
|
2
|
+
import type { ModelProviderOptions, ModelRef } from "./types.js";
|
|
3
|
+
export declare function createEmbeddingModel(ref: ModelRef, options: ModelProviderOptions): EmbeddingModel;
|
|
4
|
+
export declare function createEmbeddingModelFromCatalog(id: string, options: ModelProviderOptions): EmbeddingModel;
|
|
5
|
+
export declare function createEmbeddingModelFromReference(reference: string, options: ModelProviderOptions): EmbeddingModel;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { EngineError } from "../errors/index.js";
|
|
2
|
+
import { getEmbeddingModelCatalogEntry, getEmbeddingModelCatalogEntryByRef, } from "./catalog.js";
|
|
3
|
+
import { LlamaCppEmbeddingModel, Qwen3VlEmbeddingModel, QwenTextEmbeddingV4Model, } from "./providers/index.js";
|
|
4
|
+
export function createEmbeddingModel(ref, options) {
|
|
5
|
+
if (ref.provider === "local") {
|
|
6
|
+
const entry = getEmbeddingModelCatalogEntryByRef(ref);
|
|
7
|
+
if (!entry || entry.provider !== "local") {
|
|
8
|
+
throw new EngineError("Local embedding model is not in the zvec-grep catalog", {
|
|
9
|
+
code: "ZVEC_GREP.ENGINE.MODELS.LOCAL_MODEL_NOT_IN_CATALOG",
|
|
10
|
+
context: `provider=${ref.provider} model=${ref.model}`,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
return new LlamaCppEmbeddingModel(entry, options);
|
|
14
|
+
}
|
|
15
|
+
if (ref.provider === "qwen" && ref.model === "text-embedding-v4") {
|
|
16
|
+
return new QwenTextEmbeddingV4Model(options);
|
|
17
|
+
}
|
|
18
|
+
if (ref.provider === "qwen" && ref.model === "qwen3-vl-embedding") {
|
|
19
|
+
return new Qwen3VlEmbeddingModel(options);
|
|
20
|
+
}
|
|
21
|
+
throw new EngineError("Embedding model is not implemented", {
|
|
22
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_MODEL_NOT_IMPLEMENTED",
|
|
23
|
+
context: `provider=${ref.provider} model=${ref.model}`,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
export function createEmbeddingModelFromCatalog(id, options) {
|
|
27
|
+
const entry = getEmbeddingModelCatalogEntry(id);
|
|
28
|
+
if (!entry) {
|
|
29
|
+
throw new EngineError("Embedding model is not in the zvec-grep catalog", {
|
|
30
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_CATALOG_MODEL_NOT_FOUND",
|
|
31
|
+
context: `embedding=${id}`,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return createEmbeddingModel({
|
|
35
|
+
provider: entry.provider,
|
|
36
|
+
model: entry.model,
|
|
37
|
+
}, options);
|
|
38
|
+
}
|
|
39
|
+
export function createEmbeddingModelFromReference(reference, options) {
|
|
40
|
+
const catalogEntry = getEmbeddingModelCatalogEntry(reference);
|
|
41
|
+
if (catalogEntry) {
|
|
42
|
+
return createEmbeddingModel({
|
|
43
|
+
provider: catalogEntry.provider,
|
|
44
|
+
model: catalogEntry.model,
|
|
45
|
+
}, options);
|
|
46
|
+
}
|
|
47
|
+
const ref = parseModelReference(reference);
|
|
48
|
+
if (!ref) {
|
|
49
|
+
throw new EngineError("Embedding model is not in the zvec-grep catalog", {
|
|
50
|
+
code: "ZVEC_GREP.ENGINE.MODELS.EMBEDDING_CATALOG_MODEL_NOT_FOUND",
|
|
51
|
+
context: `embedding=${reference}`,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return createEmbeddingModel(ref, options);
|
|
55
|
+
}
|
|
56
|
+
function parseModelReference(reference) {
|
|
57
|
+
const separator = reference.indexOf("/");
|
|
58
|
+
if (separator <= 0 || separator === reference.length - 1) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
provider: reference.slice(0, separator),
|
|
63
|
+
model: reference.slice(separator + 1),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/engine/models/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAI9B,MAAM,UAAU,oBAAoB,CAClC,GAAa,EACb,OAA6B;IAE7B,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,kCAAkC,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzC,MAAM,IAAI,WAAW,CAAC,uDAAuD,EAAE;gBAC7E,IAAI,EAAE,oDAAoD;gBAC1D,OAAO,EAAE,YAAY,GAAG,CAAC,QAAQ,UAAU,GAAG,CAAC,KAAK,EAAE;aACvD,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,mBAAmB,EAAE,CAAC;QACjE,OAAO,IAAI,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,oBAAoB,EAAE,CAAC;QAClE,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,IAAI,WAAW,CAAC,oCAAoC,EAAE;QAC1D,IAAI,EAAE,yDAAyD;QAC/D,OAAO,EAAE,YAAY,GAAG,CAAC,QAAQ,UAAU,GAAG,CAAC,KAAK,EAAE;KACvD,CAAC,CAAC;AACL,CAAC;AAGD,MAAM,UAAU,+BAA+B,CAC7C,EAAU,EACV,OAA6B;IAE7B,MAAM,KAAK,GAAG,6BAA6B,CAAC,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,WAAW,CAAC,iDAAiD,EAAE;YACvE,IAAI,EAAE,2DAA2D;YACjE,OAAO,EAAE,aAAa,EAAE,EAAE;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,oBAAoB,CAAC;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,EAAE,OAAO,CAAC,CAAC;AACd,CAAC;AAGD,MAAM,UAAU,iCAAiC,CAC/C,SAAiB,EACjB,OAA6B;IAE7B,MAAM,YAAY,GAAG,6BAA6B,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,oBAAoB,CAAC;YAC1B,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,KAAK,EAAE,YAAY,CAAC,KAAK;SAC1B,EAAE,OAAO,CAAC,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,WAAW,CAAC,iDAAiD,EAAE;YACvE,IAAI,EAAE,2DAA2D;YACjE,OAAO,EAAE,aAAa,SAAS,EAAE;SAClC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAGD,SAAS,mBAAmB,CAAC,SAAiB;IAC5C,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;QACvC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;KACtC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { EMBEDDING_MODEL_CATALOG, MODEL_CATALOG, getEmbeddingModelCatalogEntry, getEmbeddingModelCatalogEntryByRef, listEmbeddingModels, } from "./catalog.js";
|
|
2
|
+
export { EmbeddingModel } from "./embeddings.js";
|
|
3
|
+
export { LlamaCppEmbeddingModel, Qwen3VlEmbeddingModel, QwenTextEmbeddingV4Model, setLlamaCppRuntimeForTesting, } from "./providers/index.js";
|
|
4
|
+
export type { RankingCandidate, RankingModel, RankingScore } from "./ranking.js";
|
|
5
|
+
export { createEmbeddingModel, createEmbeddingModelFromCatalog, createEmbeddingModelFromReference, } from "./factory.js";
|
|
6
|
+
export type { EmbeddingCatalogEntry, LlamaCppEmbeddingCatalogEntry, LlamaGpuMode, LocalEmbeddingFormat, ModelProviderOptions, } from "./types.js";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { EMBEDDING_MODEL_CATALOG, MODEL_CATALOG, getEmbeddingModelCatalogEntry, getEmbeddingModelCatalogEntryByRef, listEmbeddingModels, } from "./catalog.js";
|
|
2
|
+
export { EmbeddingModel } from "./embeddings.js";
|
|
3
|
+
export { LlamaCppEmbeddingModel, Qwen3VlEmbeddingModel, QwenTextEmbeddingV4Model, setLlamaCppRuntimeForTesting, } from "./providers/index.js";
|
|
4
|
+
export { createEmbeddingModel, createEmbeddingModelFromCatalog, createEmbeddingModelFromReference, } from "./factory.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,6BAA6B,EAC7B,kCAAkC,EAClC,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,sBAAsB,CAAC;AAU9B,OAAO,EACL,oBAAoB,EACpB,+BAA+B,EAC/B,iCAAiC,GAClC,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/engine/models/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { Content } from "../../../types.js";
|
|
2
|
+
import { EmbeddingModel, type EmbeddingOptions, type EmbeddingVector } from "../../embeddings.js";
|
|
3
|
+
import type { LlamaCppEmbeddingCatalogEntry, ModelProviderOptions } from "../../types.js";
|
|
4
|
+
type LlamaEmbedding = {
|
|
5
|
+
vector: ArrayLike<number>;
|
|
6
|
+
};
|
|
7
|
+
type LlamaEmbeddingContext = {
|
|
8
|
+
getEmbeddingFor(text: string): Promise<LlamaEmbedding>;
|
|
9
|
+
dispose?(): Promise<void> | void;
|
|
10
|
+
};
|
|
11
|
+
type LlamaModel = {
|
|
12
|
+
trainContextSize?: number;
|
|
13
|
+
tokenize?(text: string): readonly unknown[];
|
|
14
|
+
detokenize?(tokens: readonly unknown[]): string;
|
|
15
|
+
createEmbeddingContext(options: Record<string, unknown>): Promise<LlamaEmbeddingContext>;
|
|
16
|
+
dispose?(): Promise<void> | void;
|
|
17
|
+
};
|
|
18
|
+
type Llama = {
|
|
19
|
+
gpu: string | false;
|
|
20
|
+
cpuMathCores?: number;
|
|
21
|
+
supportsGpuOffloading?: boolean;
|
|
22
|
+
getVramState?(): Promise<{
|
|
23
|
+
total: number;
|
|
24
|
+
used: number;
|
|
25
|
+
free: number;
|
|
26
|
+
}>;
|
|
27
|
+
loadModel(options: {
|
|
28
|
+
modelPath: string;
|
|
29
|
+
gpuLayers?: number;
|
|
30
|
+
}): Promise<LlamaModel>;
|
|
31
|
+
dispose?(): Promise<void> | void;
|
|
32
|
+
};
|
|
33
|
+
type NodeLlamaCppModule = {
|
|
34
|
+
getLlama(options: Record<string, unknown>): Promise<Llama>;
|
|
35
|
+
resolveModelFile(model: string, options: {
|
|
36
|
+
directory: string;
|
|
37
|
+
cli?: boolean;
|
|
38
|
+
}): Promise<string>;
|
|
39
|
+
LlamaLogLevel?: {
|
|
40
|
+
error?: unknown;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
type NodeLlamaCppLoader = () => Promise<NodeLlamaCppModule>;
|
|
44
|
+
export declare function setLlamaCppRuntimeForTesting(loader: NodeLlamaCppLoader | null): void;
|
|
45
|
+
export declare class LlamaCppEmbeddingModel extends EmbeddingModel {
|
|
46
|
+
private readonly entry;
|
|
47
|
+
readonly ref: {
|
|
48
|
+
readonly provider: "local";
|
|
49
|
+
readonly model: string;
|
|
50
|
+
};
|
|
51
|
+
readonly dimension: number;
|
|
52
|
+
readonly metric: import("../../types.js").VectorMetric;
|
|
53
|
+
readonly supportedContentKinds: readonly ["text"];
|
|
54
|
+
readonly limits: {
|
|
55
|
+
readonly maxBatchSize: number;
|
|
56
|
+
readonly maxInputTokens: number;
|
|
57
|
+
};
|
|
58
|
+
readonly recommendedIndexConcurrency = 1;
|
|
59
|
+
private readonly modelCacheDir;
|
|
60
|
+
private readonly gpu;
|
|
61
|
+
private readonly embeddingParallelism?;
|
|
62
|
+
private llama;
|
|
63
|
+
private model;
|
|
64
|
+
private contexts;
|
|
65
|
+
private llamaLoadPromise;
|
|
66
|
+
private modelLoadPromise;
|
|
67
|
+
private contextsCreatePromise;
|
|
68
|
+
private usingCpuFallback;
|
|
69
|
+
private disposed;
|
|
70
|
+
constructor(entry: LlamaCppEmbeddingCatalogEntry, options: ModelProviderOptions);
|
|
71
|
+
protected doEmbed(contents: readonly Content[], options: Required<EmbeddingOptions>): Promise<EmbeddingVector[]>;
|
|
72
|
+
dispose(): Promise<void>;
|
|
73
|
+
private embedTexts;
|
|
74
|
+
private ensureLlama;
|
|
75
|
+
private loadLlamaWithFallback;
|
|
76
|
+
private loadCpuCompatibleLlama;
|
|
77
|
+
private ensureModel;
|
|
78
|
+
private loadModelWithFallback;
|
|
79
|
+
private loadModel;
|
|
80
|
+
private modelLoadOptions;
|
|
81
|
+
private ensureEmbeddingContexts;
|
|
82
|
+
private createEmbeddingContextsWithFallback;
|
|
83
|
+
private createEmbeddingContexts;
|
|
84
|
+
private canRetryGpuOperationOnCpu;
|
|
85
|
+
private shouldDisableModelGpuOffload;
|
|
86
|
+
private disposeLoadedRuntime;
|
|
87
|
+
private resolveModelPath;
|
|
88
|
+
private resolveParallelism;
|
|
89
|
+
private resolveEffectiveParallelism;
|
|
90
|
+
private resolveThreadsPerContext;
|
|
91
|
+
private truncateToContextSize;
|
|
92
|
+
private ensureNotDisposed;
|
|
93
|
+
}
|
|
94
|
+
export {};
|