@zvec/zvec-grep 0.1.5 → 0.1.6
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 +88 -249
- package/README_CN.md +82 -246
- package/dist/authorization/index.d.ts +7 -0
- package/dist/authorization/index.js +7 -0
- package/dist/authorization/index.js.map +1 -0
- package/dist/authorization/manager.d.ts +8 -0
- package/dist/authorization/manager.js +19 -0
- package/dist/authorization/manager.js.map +1 -0
- package/dist/authorization/operation.d.ts +7 -0
- package/dist/authorization/operation.js +50 -0
- package/dist/authorization/operation.js.map +1 -0
- package/dist/authorization/planner.d.ts +21 -0
- package/dist/authorization/planner.js +97 -0
- package/dist/authorization/planner.js.map +1 -0
- package/dist/authorization/prompt.d.ts +11 -0
- package/dist/authorization/prompt.js +62 -0
- package/dist/authorization/prompt.js.map +1 -0
- package/dist/authorization/store.d.ts +20 -0
- package/dist/authorization/store.js +251 -0
- package/dist/authorization/store.js.map +1 -0
- package/dist/authorization/target.d.ts +15 -0
- package/dist/authorization/target.js +49 -0
- package/dist/authorization/target.js.map +1 -0
- package/dist/authorization/types.d.ts +61 -0
- package/dist/authorization/types.js +2 -0
- package/dist/authorization/types.js.map +1 -0
- package/dist/cli/args.d.ts +1 -1
- package/dist/cli/args.js +304 -54
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth.d.ts +21 -0
- package/dist/cli/auth.js +212 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/commands.js +433 -618
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/errors.js +2 -2
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/format/context.d.ts +1 -0
- package/dist/cli/format/context.js +241 -45
- package/dist/cli/format/context.js.map +1 -1
- package/dist/cli/format/debug.js +2 -2
- package/dist/cli/format/debug.js.map +1 -1
- package/dist/cli/format/progress.d.ts +4 -0
- package/dist/cli/format/progress.js +219 -46
- package/dist/cli/format/progress.js.map +1 -1
- package/dist/cli/format/status.d.ts +77 -6
- package/dist/cli/format/status.js +302 -106
- package/dist/cli/format/status.js.map +1 -1
- package/dist/cli/help.js +258 -59
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.js +0 -0
- package/dist/cli/install.d.ts +4 -0
- package/dist/cli/install.js +845 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/managed-rg.d.ts +10 -0
- package/dist/cli/managed-rg.js +329 -0
- package/dist/cli/managed-rg.js.map +1 -0
- package/dist/cli/types.d.ts +20 -6
- package/dist/cli/types.js.map +1 -1
- package/dist/client/daemon-client.d.ts +19 -0
- package/dist/client/daemon-client.js +180 -0
- package/dist/client/daemon-client.js.map +1 -0
- package/dist/client/mode-router.d.ts +9 -0
- package/dist/client/mode-router.js +28 -0
- package/dist/client/mode-router.js.map +1 -0
- package/dist/client/search-policy.d.ts +11 -0
- package/dist/client/search-policy.js +15 -0
- package/dist/client/search-policy.js.map +1 -0
- package/dist/daemon/backend.d.ts +76 -0
- package/dist/daemon/backend.js +1049 -0
- package/dist/daemon/backend.js.map +1 -0
- package/dist/daemon/change-set.d.ts +25 -0
- package/dist/daemon/change-set.js +101 -0
- package/dist/daemon/change-set.js.map +1 -0
- package/dist/daemon/config.d.ts +24 -0
- package/dist/daemon/config.js +88 -0
- package/dist/daemon/config.js.map +1 -0
- package/dist/daemon/errors.d.ts +5 -0
- package/dist/daemon/errors.js +11 -0
- package/dist/daemon/errors.js.map +1 -0
- package/dist/daemon/http-server.d.ts +30 -0
- package/dist/daemon/http-server.js +287 -0
- package/dist/daemon/http-server.js.map +1 -0
- package/dist/daemon/index-coordinator.d.ts +23 -0
- package/dist/daemon/index-coordinator.js +68 -0
- package/dist/daemon/index-coordinator.js.map +1 -0
- package/dist/daemon/job-scheduler.d.ts +70 -0
- package/dist/daemon/job-scheduler.js +366 -0
- package/dist/daemon/job-scheduler.js.map +1 -0
- package/dist/daemon/logger.d.ts +9 -0
- package/dist/daemon/logger.js +53 -0
- package/dist/daemon/logger.js.map +1 -0
- package/dist/daemon/model-pool.d.ts +45 -0
- package/dist/daemon/model-pool.js +187 -0
- package/dist/daemon/model-pool.js.map +1 -0
- package/dist/daemon/root-lease.d.ts +14 -0
- package/dist/daemon/root-lease.js +188 -0
- package/dist/daemon/root-lease.js.map +1 -0
- package/dist/daemon/root-runtime.d.ts +78 -0
- package/dist/daemon/root-runtime.js +333 -0
- package/dist/daemon/root-runtime.js.map +1 -0
- package/dist/daemon/runtime-manager.d.ts +45 -0
- package/dist/daemon/runtime-manager.js +243 -0
- package/dist/daemon/runtime-manager.js.map +1 -0
- package/dist/daemon/runtime.d.ts +12 -0
- package/dist/daemon/runtime.js +102 -0
- package/dist/daemon/runtime.js.map +1 -0
- package/dist/daemon/server-controller.d.ts +39 -0
- package/dist/daemon/server-controller.js +203 -0
- package/dist/daemon/server-controller.js.map +1 -0
- package/dist/daemon/watch-manager.d.ts +50 -0
- package/dist/daemon/watch-manager.js +293 -0
- package/dist/daemon/watch-manager.js.map +1 -0
- package/dist/daemon/workspace-read-session-cache.d.ts +31 -0
- package/dist/daemon/workspace-read-session-cache.js +115 -0
- package/dist/daemon/workspace-read-session-cache.js.map +1 -0
- package/dist/engine/config.d.ts +30 -8
- package/dist/engine/config.js +171 -45
- package/dist/engine/config.js.map +1 -1
- package/dist/engine/{errors/index.d.ts → errors.d.ts} +6 -1
- package/dist/engine/{errors/details.js → errors.js} +17 -4
- package/dist/engine/errors.js.map +1 -0
- package/dist/engine/extraction/code/adapter.d.ts +1 -1
- package/dist/engine/extraction/code/extractor.d.ts +5 -11
- package/dist/engine/extraction/code/extractor.js +105 -44
- package/dist/engine/extraction/code/extractor.js.map +1 -1
- package/dist/engine/extraction/code/families/c-family.js +1 -1
- package/dist/engine/extraction/code/families/c-family.js.map +1 -1
- package/dist/engine/extraction/code/families/js-ts.d.ts +1 -1
- package/dist/engine/extraction/code/families/metadata.d.ts +1 -1
- package/dist/engine/extraction/code/tree-sitter/grammar.js.map +1 -0
- package/dist/engine/extraction/code/tree-sitter/nodes.js.map +1 -0
- package/dist/engine/extraction/code/tree-sitter/parser.js.map +1 -0
- package/dist/engine/extraction/image/extractor.d.ts +5 -0
- package/dist/engine/extraction/image/extractor.js +35 -0
- package/dist/engine/extraction/image/extractor.js.map +1 -0
- package/dist/engine/extraction/index.d.ts +3 -44
- package/dist/engine/extraction/index.js +1 -280
- package/dist/engine/extraction/index.js.map +1 -1
- package/dist/engine/extraction/markdown/extractor.d.ts +5 -11
- package/dist/engine/extraction/markdown/extractor.js +35 -16
- package/dist/engine/extraction/markdown/extractor.js.map +1 -1
- package/dist/engine/extraction/runtime.d.ts +4 -0
- package/dist/engine/extraction/runtime.js +26 -0
- package/dist/engine/extraction/runtime.js.map +1 -0
- package/dist/engine/extraction/source.d.ts +18 -0
- package/dist/engine/extraction/source.js +22 -0
- package/dist/engine/extraction/source.js.map +1 -0
- package/dist/engine/extraction/text/extractor.d.ts +7 -0
- package/dist/engine/extraction/text/extractor.js +168 -0
- package/dist/engine/extraction/text/extractor.js.map +1 -0
- package/dist/engine/extraction/types.d.ts +4 -0
- package/dist/engine/{models → extraction}/types.js.map +1 -1
- package/dist/engine/{files/file-type.d.ts → file-type.d.ts} +1 -1
- package/dist/engine/file-type.js.map +1 -0
- package/dist/engine/index-status.d.ts +9 -0
- package/dist/engine/index-status.js +38 -0
- package/dist/engine/index-status.js.map +1 -0
- package/dist/engine/manifest.d.ts +12 -0
- package/dist/engine/manifest.js +120 -0
- package/dist/engine/manifest.js.map +1 -0
- package/dist/engine/models/{providers/llama-cpp/embedding.d.ts → backends/llama-cpp.d.ts} +25 -20
- package/dist/engine/models/{providers/llama-cpp/embedding.js → backends/llama-cpp.js} +127 -106
- package/dist/engine/models/backends/llama-cpp.js.map +1 -0
- package/dist/engine/models/backends/model2vec.d.ts +57 -0
- package/dist/engine/models/backends/model2vec.js +332 -0
- package/dist/engine/models/backends/model2vec.js.map +1 -0
- package/dist/engine/models/backends/qwen.d.ts +44 -0
- package/dist/engine/models/{providers/qwen/embedding.js → backends/qwen.js} +155 -94
- package/dist/engine/models/backends/qwen.js.map +1 -0
- package/dist/engine/models/backends/transformers-js.d.ts +87 -0
- package/dist/engine/models/backends/transformers-js.js +316 -0
- package/dist/engine/models/backends/transformers-js.js.map +1 -0
- package/dist/engine/models/catalog.d.ts +188 -23
- package/dist/engine/models/catalog.js +172 -25
- package/dist/engine/models/catalog.js.map +1 -1
- package/dist/engine/models/download-progress.d.ts +15 -0
- package/dist/engine/models/download-progress.js +48 -0
- package/dist/engine/models/download-progress.js.map +1 -0
- package/dist/engine/models/embeddings.d.ts +58 -18
- package/dist/engine/models/embeddings.js +52 -28
- package/dist/engine/models/embeddings.js.map +1 -1
- package/dist/engine/models/factory.d.ts +2 -5
- package/dist/engine/models/factory.js +41 -56
- package/dist/engine/models/factory.js.map +1 -1
- package/dist/engine/models/index.d.ts +4 -6
- package/dist/engine/models/index.js +4 -4
- package/dist/engine/models/index.js.map +1 -1
- package/dist/engine/models/ranking.d.ts +7 -3
- package/dist/engine/models/resolution.d.ts +8 -0
- package/dist/engine/models/resolution.js +22 -0
- package/dist/engine/models/resolution.js.map +1 -0
- package/dist/engine/pipeline/indexing/index.d.ts +9 -7
- package/dist/engine/pipeline/indexing/index.js +360 -121
- package/dist/engine/pipeline/indexing/index.js.map +1 -1
- package/dist/engine/pipeline/indexing/root-paths.js +6 -6
- package/dist/engine/pipeline/indexing/root-paths.js.map +1 -1
- package/dist/engine/pipeline/indexing/scanner/index.d.ts +6 -1
- package/dist/engine/pipeline/indexing/scanner/index.js +233 -29
- package/dist/engine/pipeline/indexing/scanner/index.js.map +1 -1
- package/dist/engine/pipeline/search/index.d.ts +6 -6
- package/dist/engine/pipeline/search/index.js +8 -10
- package/dist/engine/pipeline/search/index.js.map +1 -1
- package/dist/engine/service/index.d.ts +3 -2
- package/dist/engine/service/index.js +1 -1
- package/dist/engine/service/index.js.map +1 -1
- package/dist/engine/service/root.d.ts +13 -12
- package/dist/engine/service/root.js +35 -24
- package/dist/engine/service/root.js.map +1 -1
- package/dist/engine/service/structure-enrichment.js +12 -14
- package/dist/engine/service/structure-enrichment.js.map +1 -1
- package/dist/engine/service/types.d.ts +32 -37
- package/dist/engine/service/workspace-index.d.ts +24 -0
- package/dist/engine/service/workspace-index.js +151 -0
- package/dist/engine/service/workspace-index.js.map +1 -0
- package/dist/engine/service/zvec-grep.d.ts +12 -1
- package/dist/engine/service/zvec-grep.js +677 -486
- package/dist/engine/service/zvec-grep.js.map +1 -1
- package/dist/engine/storage/index.d.ts +8 -4
- package/dist/engine/storage/index.js +1 -1
- package/dist/engine/storage/index.js.map +1 -1
- package/dist/engine/storage/zvec.d.ts +10 -33
- package/dist/engine/storage/zvec.js +95 -38
- package/dist/engine/storage/zvec.js.map +1 -1
- package/dist/engine/types.d.ts +15 -23
- package/dist/engine/types.js +1 -1
- package/dist/engine/types.js.map +1 -1
- package/dist/engine/utils/daemon-lease.d.ts +17 -0
- package/dist/engine/utils/daemon-lease.js +175 -0
- package/dist/engine/utils/daemon-lease.js.map +1 -0
- package/dist/engine/utils/file-selection.js +38 -1
- package/dist/engine/utils/file-selection.js.map +1 -1
- package/dist/engine/utils/lock.js +1 -1
- package/dist/engine/utils/lock.js.map +1 -1
- package/dist/index-progress.d.ts +10 -0
- package/dist/index-progress.js +159 -0
- package/dist/index-progress.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/http-transport.d.ts +27 -0
- package/dist/mcp/http-transport.js +182 -0
- package/dist/mcp/http-transport.js.map +1 -0
- package/dist/mcp/input-normalization.d.ts +38 -0
- package/dist/mcp/input-normalization.js +95 -0
- package/dist/mcp/input-normalization.js.map +1 -0
- package/dist/mcp/progress-heartbeat.d.ts +17 -0
- package/dist/mcp/progress-heartbeat.js +46 -0
- package/dist/mcp/progress-heartbeat.js.map +1 -0
- package/dist/mcp/request-metadata.d.ts +2 -0
- package/dist/mcp/request-metadata.js +11 -0
- package/dist/mcp/request-metadata.js.map +1 -0
- package/dist/mcp/request-state.d.ts +40 -0
- package/dist/mcp/request-state.js +210 -0
- package/dist/mcp/request-state.js.map +1 -0
- package/dist/mcp/result-format.d.ts +13 -0
- package/dist/mcp/result-format.js +75 -0
- package/dist/mcp/result-format.js.map +1 -0
- package/dist/mcp/schemas.d.ts +430 -0
- package/dist/mcp/schemas.js +447 -0
- package/dist/mcp/schemas.js.map +1 -0
- package/dist/mcp/tools.d.ts +150 -0
- package/dist/mcp/tools.js +448 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/toolset.d.ts +5 -0
- package/dist/mcp/toolset.js +12 -0
- package/dist/mcp/toolset.js.map +1 -0
- package/dist/observability/trace-context.d.ts +11 -0
- package/dist/observability/trace-context.js +138 -0
- package/dist/observability/trace-context.js.map +1 -0
- package/docs/01-agents.md +111 -0
- package/docs/02-cli.md +229 -0
- package/docs/03-mcp.md +167 -0
- package/docs/04-pipeline.md +218 -0
- package/docs/05-architecture.md +86 -0
- package/docs/06-server.md +210 -0
- package/docs/07-embedding.md +179 -0
- package/docs/08-roadmap.md +85 -0
- package/docs/README.md +53 -0
- package/package.json +17 -8
- package/skills/zvec-grep/SKILL.md +43 -133
- package/skills/zvec-grep/agents/openai.yaml +2 -2
- package/skills/zvec-grep/references/cli-fallback.md +85 -0
- package/dist/cli/mcp.d.ts +0 -2
- package/dist/cli/mcp.js +0 -354
- package/dist/cli/mcp.js.map +0 -1
- package/dist/engine/collection/index.d.ts +0 -55
- package/dist/engine/collection/index.js +0 -710
- package/dist/engine/collection/index.js.map +0 -1
- package/dist/engine/errors/details.d.ts +0 -6
- package/dist/engine/errors/details.js.map +0 -1
- package/dist/engine/errors/index.js +0 -16
- package/dist/engine/errors/index.js.map +0 -1
- package/dist/engine/extraction/tree-sitter/grammar.js.map +0 -1
- package/dist/engine/extraction/tree-sitter/nodes.js.map +0 -1
- package/dist/engine/extraction/tree-sitter/parser.js.map +0 -1
- package/dist/engine/files/file-type.js.map +0 -1
- package/dist/engine/models/providers/index.d.ts +0 -2
- package/dist/engine/models/providers/index.js +0 -3
- package/dist/engine/models/providers/index.js.map +0 -1
- package/dist/engine/models/providers/llama-cpp/embedding.js.map +0 -1
- package/dist/engine/models/providers/llama-cpp/index.d.ts +0 -1
- package/dist/engine/models/providers/llama-cpp/index.js +0 -2
- package/dist/engine/models/providers/llama-cpp/index.js.map +0 -1
- package/dist/engine/models/providers/qwen/embedding.d.ts +0 -42
- package/dist/engine/models/providers/qwen/embedding.js.map +0 -1
- package/dist/engine/models/providers/qwen/index.d.ts +0 -1
- package/dist/engine/models/providers/qwen/index.js +0 -2
- package/dist/engine/models/providers/qwen/index.js.map +0 -1
- package/dist/engine/models/types.d.ts +0 -30
- /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/grammar.d.ts +0 -0
- /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/grammar.js +0 -0
- /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/nodes.d.ts +0 -0
- /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/nodes.js +0 -0
- /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/parser.d.ts +0 -0
- /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/parser.js +0 -0
- /package/dist/engine/{models → extraction}/types.js +0 -0
- /package/dist/engine/{files/file-type.js → file-type.js} +0 -0
|
@@ -1,66 +1,94 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { globalConfigPath } from "../../config.js";
|
|
2
|
+
import { EngineError } from "../../errors.js";
|
|
3
|
+
import { BaseEmbeddingModel, } from "../embeddings.js";
|
|
4
|
+
import { traceHeaders } from "../../../observability/trace-context.js";
|
|
4
5
|
// -----------------------------------------------------------------------------
|
|
5
|
-
//
|
|
6
|
+
// Text embedding models (OpenAI-compatible API)
|
|
6
7
|
// -----------------------------------------------------------------------------
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
8
|
+
const DEFAULT_REMOTE_EMBEDDING_TIMEOUT_MS = 60_000;
|
|
9
|
+
const defaultDependencies = {
|
|
10
|
+
fetch: (...args) => globalThis.fetch(...args),
|
|
11
|
+
};
|
|
12
|
+
const QWEN_TEXT_EMBEDDING_V4_SPEC = {
|
|
13
|
+
displayName: "Qwen text-embedding-v4",
|
|
14
|
+
errorCodePrefix: "QWEN_TEXT_EMBEDDING_V4",
|
|
15
|
+
};
|
|
16
|
+
const QWEN37_TEXT_EMBEDDING_SPEC = {
|
|
17
|
+
displayName: "Qwen3.7 text embedding",
|
|
18
|
+
errorCodePrefix: "QWEN37_TEXT_EMBEDDING",
|
|
19
|
+
};
|
|
20
|
+
class QwenTextEmbeddingModel extends BaseEmbeddingModel {
|
|
21
|
+
info;
|
|
22
|
+
entry;
|
|
22
23
|
apiKey;
|
|
23
24
|
endpoint;
|
|
24
|
-
|
|
25
|
+
displayName;
|
|
26
|
+
errorCodePrefix;
|
|
27
|
+
dependencies;
|
|
28
|
+
constructor(entry, spec, options, dependencies) {
|
|
25
29
|
super();
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
this.entry = entry;
|
|
31
|
+
const endpoint = options.endpoint === undefined
|
|
32
|
+
? entry.defaultEndpoint
|
|
33
|
+
: options.endpoint.trim();
|
|
34
|
+
this.info = {
|
|
35
|
+
reference: entry.reference,
|
|
36
|
+
provider: entry.provider,
|
|
37
|
+
name: entry.model,
|
|
38
|
+
dimension: entry.dimension,
|
|
39
|
+
metric: entry.metric,
|
|
40
|
+
endpoint,
|
|
41
|
+
inputKinds: ["text"],
|
|
42
|
+
limits: {
|
|
43
|
+
maxBatchSize: entry.maxBatchSize,
|
|
44
|
+
maxInputTokens: entry.maxInputTokens,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
this.displayName = spec.displayName;
|
|
48
|
+
this.errorCodePrefix = spec.errorCodePrefix;
|
|
49
|
+
this.dependencies = { ...defaultDependencies, ...dependencies };
|
|
50
|
+
const apiKey = options.apiKey?.trim() ?? "";
|
|
51
|
+
if (apiKey.length === 0) {
|
|
52
|
+
throw new EngineError(`${this.displayName} model requires an API key`, {
|
|
53
|
+
code: this.errorCode("MISSING_API_KEY"),
|
|
54
|
+
context: `model=${this.info.reference}\nhint=Pass --api-key, set ZVEC_GREP_API_KEY, or configure providers.qwen.apiKey in ${globalConfigPath()}.`,
|
|
30
55
|
});
|
|
31
56
|
}
|
|
32
|
-
const endpoint = normalizeEndpoint(options.endpoint ?? DEFAULT_QWEN_TEXT_EMBEDDING_V4_ENDPOINT);
|
|
33
57
|
if (endpoint.length === 0) {
|
|
34
|
-
throw new EngineError(
|
|
35
|
-
code:
|
|
36
|
-
context: `model=${this.
|
|
58
|
+
throw new EngineError(`${this.displayName} model requires an endpoint`, {
|
|
59
|
+
code: this.errorCode("MISSING_ENDPOINT"),
|
|
60
|
+
context: `model=${this.info.reference}`,
|
|
37
61
|
});
|
|
38
62
|
}
|
|
39
|
-
this.apiKey =
|
|
63
|
+
this.apiKey = apiKey;
|
|
40
64
|
this.endpoint = endpoint;
|
|
41
65
|
}
|
|
42
|
-
async doEmbed(contents,
|
|
66
|
+
async doEmbed(contents, options) {
|
|
43
67
|
const texts = contents.map((content) => content.text);
|
|
44
68
|
let response;
|
|
69
|
+
const signal = remoteEmbeddingSignal(options.signal);
|
|
45
70
|
try {
|
|
46
|
-
response = await fetch(this.endpoint, {
|
|
71
|
+
response = await this.dependencies.fetch(this.endpoint, {
|
|
47
72
|
method: "POST",
|
|
48
73
|
headers: {
|
|
74
|
+
...traceHeaders(),
|
|
49
75
|
Authorization: `Bearer ${this.apiKey}`,
|
|
50
76
|
"Content-Type": "application/json",
|
|
51
77
|
},
|
|
52
78
|
body: JSON.stringify({
|
|
53
|
-
model: this.
|
|
79
|
+
model: this.entry.model,
|
|
54
80
|
input: texts,
|
|
55
|
-
dimensions: this.dimension,
|
|
81
|
+
dimensions: this.info.dimension,
|
|
56
82
|
encoding_format: "float",
|
|
57
83
|
}),
|
|
84
|
+
signal,
|
|
58
85
|
});
|
|
59
86
|
}
|
|
60
87
|
catch (cause) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
88
|
+
throwIfEmbeddingCancelled(options.signal);
|
|
89
|
+
throw new EngineError(`${this.displayName} request failed`, {
|
|
90
|
+
code: this.errorCode("REQUEST_FAILED"),
|
|
91
|
+
context: `model=${this.info.reference} endpoint=${this.endpoint} timeoutMs=${DEFAULT_REMOTE_EMBEDDING_TIMEOUT_MS}`,
|
|
64
92
|
cause,
|
|
65
93
|
});
|
|
66
94
|
}
|
|
@@ -69,23 +97,23 @@ export class QwenTextEmbeddingV4Model extends EmbeddingModel {
|
|
|
69
97
|
body = await response.json();
|
|
70
98
|
}
|
|
71
99
|
catch (cause) {
|
|
72
|
-
throw new EngineError(
|
|
73
|
-
code:
|
|
74
|
-
context: `model=${this.
|
|
100
|
+
throw new EngineError(`${this.displayName} response was not valid JSON`, {
|
|
101
|
+
code: this.errorCode("INVALID_JSON"),
|
|
102
|
+
context: `model=${this.info.reference} status=${response.status}`,
|
|
75
103
|
cause,
|
|
76
104
|
});
|
|
77
105
|
}
|
|
78
106
|
if (!response.ok) {
|
|
79
107
|
const error = readProviderError(body);
|
|
80
|
-
throw new EngineError(
|
|
81
|
-
code:
|
|
82
|
-
context: providerErrorContext(this.
|
|
108
|
+
throw new EngineError(`${this.displayName} request returned an error`, {
|
|
109
|
+
code: this.errorCode("API_ERROR"),
|
|
110
|
+
context: providerErrorContext(this.entry.model, response, error),
|
|
83
111
|
});
|
|
84
112
|
}
|
|
85
113
|
if (!isRecord(body) || !Array.isArray(body.data)) {
|
|
86
|
-
throw new EngineError(
|
|
87
|
-
code:
|
|
88
|
-
context: `model=${this.
|
|
114
|
+
throw new EngineError(`${this.displayName} response did not include data`, {
|
|
115
|
+
code: this.errorCode("MISSING_DATA"),
|
|
116
|
+
context: `model=${this.info.reference}`,
|
|
89
117
|
});
|
|
90
118
|
}
|
|
91
119
|
const vectors = new Array(texts.length);
|
|
@@ -93,75 +121,95 @@ export class QwenTextEmbeddingV4Model extends EmbeddingModel {
|
|
|
93
121
|
if (!isRecord(item) ||
|
|
94
122
|
typeof item.index !== "number" ||
|
|
95
123
|
!Number.isInteger(item.index)) {
|
|
96
|
-
throw new EngineError(
|
|
97
|
-
code:
|
|
98
|
-
context: `model=${this.
|
|
124
|
+
throw new EngineError(`${this.displayName} response included an invalid index`, {
|
|
125
|
+
code: this.errorCode("INVALID_INDEX"),
|
|
126
|
+
context: `model=${this.info.reference} index=${isRecord(item) ? String(item.index) : "unknown"}`,
|
|
99
127
|
});
|
|
100
128
|
}
|
|
101
129
|
if (item.index < 0 || item.index >= texts.length) {
|
|
102
|
-
throw new EngineError(
|
|
103
|
-
code:
|
|
104
|
-
context: `model=${this.
|
|
130
|
+
throw new EngineError(`${this.displayName} response index was out of range`, {
|
|
131
|
+
code: this.errorCode("INDEX_OUT_OF_RANGE"),
|
|
132
|
+
context: `model=${this.info.reference} index=${item.index} inputCount=${texts.length}`,
|
|
105
133
|
});
|
|
106
134
|
}
|
|
107
135
|
if (!Array.isArray(item.embedding)) {
|
|
108
|
-
throw new EngineError(
|
|
109
|
-
code:
|
|
110
|
-
context: `model=${this.
|
|
136
|
+
throw new EngineError(`${this.displayName} response included an invalid embedding`, {
|
|
137
|
+
code: this.errorCode("INVALID_VECTOR"),
|
|
138
|
+
context: `model=${this.info.reference} index=${item.index}`,
|
|
111
139
|
});
|
|
112
140
|
}
|
|
113
141
|
vectors[item.index] = item.embedding;
|
|
114
142
|
}
|
|
115
|
-
return vectors;
|
|
143
|
+
return { vectors, truncated: [] };
|
|
144
|
+
}
|
|
145
|
+
errorCode(suffix) {
|
|
146
|
+
return `ZVEC_GREP.ENGINE.MODELS.${this.errorCodePrefix}_${suffix}`;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
export class QwenTextEmbeddingV4Model extends QwenTextEmbeddingModel {
|
|
150
|
+
constructor(entry, options, dependencies = {}) {
|
|
151
|
+
super(entry, QWEN_TEXT_EMBEDDING_V4_SPEC, options, dependencies);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export class Qwen37TextEmbeddingModel extends QwenTextEmbeddingModel {
|
|
155
|
+
constructor(entry, options, dependencies = {}) {
|
|
156
|
+
super(entry, QWEN37_TEXT_EMBEDDING_SPEC, options, dependencies);
|
|
116
157
|
}
|
|
117
158
|
}
|
|
118
159
|
// -----------------------------------------------------------------------------
|
|
119
160
|
// qwen3-vl-embedding
|
|
120
161
|
// -----------------------------------------------------------------------------
|
|
121
|
-
const DEFAULT_QWEN3_VL_EMBEDDING_ENDPOINT = "https://dashscope.aliyuncs.com/api/v1/services/embeddings/multimodal-embedding/multimodal-embedding";
|
|
122
162
|
const QWEN3_VL_EMBEDDING_MAX_IMAGE_COUNT = 10;
|
|
123
163
|
const QWEN3_VL_EMBEDDING_SUPPORTED_IMAGE_FORMATS = [
|
|
124
164
|
"jpeg",
|
|
125
165
|
"png",
|
|
126
166
|
"webp",
|
|
127
167
|
];
|
|
128
|
-
export class Qwen3VlEmbeddingModel extends
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
model: "qwen3-vl-embedding",
|
|
132
|
-
};
|
|
133
|
-
dimension = 2560;
|
|
134
|
-
metric = "cosine";
|
|
135
|
-
supportedContentKinds = ["text", "image"];
|
|
136
|
-
limits = {
|
|
137
|
-
maxBatchSize: 20,
|
|
138
|
-
maxInputTokens: 32000,
|
|
139
|
-
maxImageBytes: 10 * 1024 * 1024,
|
|
140
|
-
};
|
|
141
|
-
recommendedIndexConcurrency = 4;
|
|
142
|
-
maxIndexConcurrency = 8;
|
|
168
|
+
export class Qwen3VlEmbeddingModel extends BaseEmbeddingModel {
|
|
169
|
+
info;
|
|
170
|
+
entry;
|
|
143
171
|
apiKey;
|
|
144
172
|
endpoint;
|
|
145
|
-
|
|
173
|
+
dependencies;
|
|
174
|
+
constructor(entry, options, dependencies = {}) {
|
|
146
175
|
super();
|
|
147
|
-
|
|
176
|
+
this.entry = entry;
|
|
177
|
+
this.dependencies = { ...defaultDependencies, ...dependencies };
|
|
178
|
+
const endpoint = options.endpoint === undefined
|
|
179
|
+
? entry.defaultEndpoint
|
|
180
|
+
: options.endpoint.trim();
|
|
181
|
+
this.info = {
|
|
182
|
+
reference: entry.reference,
|
|
183
|
+
provider: entry.provider,
|
|
184
|
+
name: entry.model,
|
|
185
|
+
dimension: entry.dimension,
|
|
186
|
+
metric: entry.metric,
|
|
187
|
+
endpoint,
|
|
188
|
+
inputKinds: ["text", "image"],
|
|
189
|
+
limits: {
|
|
190
|
+
maxBatchSize: entry.maxBatchSize,
|
|
191
|
+
maxInputTokens: entry.maxInputTokens,
|
|
192
|
+
maxImageBytes: entry.maxImageBytes,
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
const apiKey = options.apiKey?.trim() ?? "";
|
|
196
|
+
if (apiKey.length === 0) {
|
|
148
197
|
throw new EngineError("Qwen3 VL embedding model requires an API key", {
|
|
149
198
|
code: "ZVEC_GREP.ENGINE.MODELS.QWEN3_VL_EMBEDDING_MISSING_API_KEY",
|
|
150
|
-
context: `model=${this.
|
|
199
|
+
context: `model=${this.info.reference}\nhint=Pass --api-key, set ZVEC_GREP_API_KEY, or configure providers.qwen.apiKey in ${globalConfigPath()}.`,
|
|
151
200
|
});
|
|
152
201
|
}
|
|
153
|
-
const endpoint = normalizeEndpoint(options.endpoint ?? DEFAULT_QWEN3_VL_EMBEDDING_ENDPOINT);
|
|
154
202
|
if (endpoint.length === 0) {
|
|
155
203
|
throw new EngineError("Qwen3 VL embedding model requires an endpoint", {
|
|
156
204
|
code: "ZVEC_GREP.ENGINE.MODELS.QWEN3_VL_EMBEDDING_MISSING_ENDPOINT",
|
|
157
|
-
context: `model=${this.
|
|
205
|
+
context: `model=${this.info.reference}`,
|
|
158
206
|
});
|
|
159
207
|
}
|
|
160
|
-
this.apiKey =
|
|
208
|
+
this.apiKey = apiKey;
|
|
161
209
|
this.endpoint = endpoint;
|
|
162
210
|
}
|
|
163
|
-
async doEmbed(contents,
|
|
164
|
-
validateQwen3VlContents(this.
|
|
211
|
+
async doEmbed(contents, options) {
|
|
212
|
+
validateQwen3VlContents(this.entry.model, contents);
|
|
165
213
|
const requestContents = contents.map((content) => {
|
|
166
214
|
if (content.kind === "text") {
|
|
167
215
|
return {
|
|
@@ -173,28 +221,32 @@ export class Qwen3VlEmbeddingModel extends EmbeddingModel {
|
|
|
173
221
|
};
|
|
174
222
|
});
|
|
175
223
|
let response;
|
|
224
|
+
const signal = remoteEmbeddingSignal(options.signal);
|
|
176
225
|
try {
|
|
177
|
-
response = await fetch(this.endpoint, {
|
|
226
|
+
response = await this.dependencies.fetch(this.endpoint, {
|
|
178
227
|
method: "POST",
|
|
179
228
|
headers: {
|
|
229
|
+
...traceHeaders(),
|
|
180
230
|
Authorization: `Bearer ${this.apiKey}`,
|
|
181
231
|
"Content-Type": "application/json",
|
|
182
232
|
},
|
|
183
233
|
body: JSON.stringify({
|
|
184
|
-
model: this.
|
|
234
|
+
model: this.entry.model,
|
|
185
235
|
input: {
|
|
186
236
|
contents: requestContents,
|
|
187
237
|
},
|
|
188
238
|
parameters: {
|
|
189
|
-
dimension: this.dimension,
|
|
239
|
+
dimension: this.info.dimension,
|
|
190
240
|
},
|
|
191
241
|
}),
|
|
242
|
+
signal,
|
|
192
243
|
});
|
|
193
244
|
}
|
|
194
245
|
catch (cause) {
|
|
246
|
+
throwIfEmbeddingCancelled(options.signal);
|
|
195
247
|
throw new EngineError("Qwen3 VL embedding request failed", {
|
|
196
248
|
code: "ZVEC_GREP.ENGINE.MODELS.QWEN3_VL_EMBEDDING_REQUEST_FAILED",
|
|
197
|
-
context: `model=${this.
|
|
249
|
+
context: `model=${this.info.reference} endpoint=${this.endpoint} timeoutMs=${DEFAULT_REMOTE_EMBEDDING_TIMEOUT_MS}`,
|
|
198
250
|
cause,
|
|
199
251
|
});
|
|
200
252
|
}
|
|
@@ -205,7 +257,7 @@ export class Qwen3VlEmbeddingModel extends EmbeddingModel {
|
|
|
205
257
|
catch (cause) {
|
|
206
258
|
throw new EngineError("Qwen3 VL embedding response was not valid JSON", {
|
|
207
259
|
code: "ZVEC_GREP.ENGINE.MODELS.QWEN3_VL_EMBEDDING_INVALID_JSON",
|
|
208
|
-
context: `model=${this.
|
|
260
|
+
context: `model=${this.info.reference} status=${response.status}`,
|
|
209
261
|
cause,
|
|
210
262
|
});
|
|
211
263
|
}
|
|
@@ -213,7 +265,7 @@ export class Qwen3VlEmbeddingModel extends EmbeddingModel {
|
|
|
213
265
|
const error = readProviderError(body);
|
|
214
266
|
throw new EngineError("Qwen3 VL embedding request returned an error", {
|
|
215
267
|
code: "ZVEC_GREP.ENGINE.MODELS.QWEN3_VL_EMBEDDING_API_ERROR",
|
|
216
|
-
context: providerErrorContext(this.
|
|
268
|
+
context: providerErrorContext(this.entry.model, response, error),
|
|
217
269
|
});
|
|
218
270
|
}
|
|
219
271
|
if (!isRecord(body) ||
|
|
@@ -221,7 +273,7 @@ export class Qwen3VlEmbeddingModel extends EmbeddingModel {
|
|
|
221
273
|
!Array.isArray(body.output.embeddings)) {
|
|
222
274
|
throw new EngineError("Qwen3 VL embedding response did not include embeddings", {
|
|
223
275
|
code: "ZVEC_GREP.ENGINE.MODELS.QWEN3_VL_EMBEDDING_MISSING_EMBEDDINGS",
|
|
224
|
-
context: `model=${this.
|
|
276
|
+
context: `model=${this.info.reference}`,
|
|
225
277
|
});
|
|
226
278
|
}
|
|
227
279
|
const vectors = new Array(contents.length);
|
|
@@ -229,34 +281,31 @@ export class Qwen3VlEmbeddingModel extends EmbeddingModel {
|
|
|
229
281
|
if (!isRecord(item)) {
|
|
230
282
|
throw new EngineError("Qwen3 VL embedding response included an invalid embedding item", {
|
|
231
283
|
code: "ZVEC_GREP.ENGINE.MODELS.QWEN3_VL_EMBEDDING_INVALID_ITEM",
|
|
232
|
-
context: `model=${this.
|
|
284
|
+
context: `model=${this.info.reference} index=${fallbackIndex}`,
|
|
233
285
|
});
|
|
234
286
|
}
|
|
235
287
|
const index = readEmbeddingIndex(item, fallbackIndex);
|
|
236
288
|
if (index < 0 || index >= contents.length) {
|
|
237
289
|
throw new EngineError("Qwen3 VL embedding response index was out of range", {
|
|
238
290
|
code: "ZVEC_GREP.ENGINE.MODELS.QWEN3_VL_EMBEDDING_INDEX_OUT_OF_RANGE",
|
|
239
|
-
context: `model=${this.
|
|
291
|
+
context: `model=${this.info.reference} index=${index} inputCount=${contents.length}`,
|
|
240
292
|
});
|
|
241
293
|
}
|
|
242
294
|
if (!Array.isArray(item.embedding)) {
|
|
243
295
|
throw new EngineError("Qwen3 VL embedding response included an invalid embedding", {
|
|
244
296
|
code: "ZVEC_GREP.ENGINE.MODELS.QWEN3_VL_EMBEDDING_INVALID_VECTOR",
|
|
245
|
-
context: `model=${this.
|
|
297
|
+
context: `model=${this.info.reference} index=${index}`,
|
|
246
298
|
});
|
|
247
299
|
}
|
|
248
300
|
vectors[index] = item.embedding;
|
|
249
301
|
}
|
|
250
|
-
return vectors;
|
|
302
|
+
return { vectors, truncated: [] };
|
|
251
303
|
}
|
|
252
304
|
}
|
|
253
305
|
// -----------------------------------------------------------------------------
|
|
254
306
|
// Shared helpers
|
|
255
307
|
// -----------------------------------------------------------------------------
|
|
256
308
|
const BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
257
|
-
function normalizeEndpoint(endpoint) {
|
|
258
|
-
return endpoint.trim();
|
|
259
|
-
}
|
|
260
309
|
function providerErrorContext(model, response, error) {
|
|
261
310
|
const retryAfter = retryAfterHeaderMs(response.headers.get("retry-after"));
|
|
262
311
|
const retryAfterDetail = typeof retryAfter === "number" ? ` retryAfterMs=${retryAfter}` : "";
|
|
@@ -347,4 +396,16 @@ function bytesToBase64(bytes) {
|
|
|
347
396
|
}
|
|
348
397
|
return output;
|
|
349
398
|
}
|
|
350
|
-
|
|
399
|
+
function remoteEmbeddingSignal(signal) {
|
|
400
|
+
const timeout = AbortSignal.timeout(DEFAULT_REMOTE_EMBEDDING_TIMEOUT_MS);
|
|
401
|
+
return signal ? AbortSignal.any([signal, timeout]) : timeout;
|
|
402
|
+
}
|
|
403
|
+
function throwIfEmbeddingCancelled(signal) {
|
|
404
|
+
if (!signal?.aborted) {
|
|
405
|
+
return;
|
|
406
|
+
}
|
|
407
|
+
throw signal.reason instanceof Error
|
|
408
|
+
? signal.reason
|
|
409
|
+
: new Error("Embedding request was cancelled.");
|
|
410
|
+
}
|
|
411
|
+
//# sourceMappingURL=qwen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qwen.js","sourceRoot":"","sources":["../../../../src/engine/models/backends/qwen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { Content } from "../../types.js";
|
|
2
|
+
import { BaseEmbeddingModel, type CreateEmbeddingModelOptions, type EmbeddingModelInfo, type EmbeddingResult, type NormalizedEmbeddingOptions } from "../embeddings.js";
|
|
3
|
+
import type { TransformersJsEmbeddingCatalogEntry } from "../catalog.js";
|
|
4
|
+
type TensorLike = {
|
|
5
|
+
data: ArrayLike<number>;
|
|
6
|
+
dims: readonly number[];
|
|
7
|
+
};
|
|
8
|
+
type TokenizerLike = {
|
|
9
|
+
(text: string | string[], options: {
|
|
10
|
+
truncation: true;
|
|
11
|
+
max_length: number;
|
|
12
|
+
padding: true;
|
|
13
|
+
}): {
|
|
14
|
+
input_ids: {
|
|
15
|
+
data: ArrayLike<number | bigint>;
|
|
16
|
+
dims: readonly number[];
|
|
17
|
+
};
|
|
18
|
+
attention_mask: {
|
|
19
|
+
data: ArrayLike<number | bigint>;
|
|
20
|
+
dims: readonly number[];
|
|
21
|
+
};
|
|
22
|
+
} | Promise<{
|
|
23
|
+
input_ids: {
|
|
24
|
+
data: ArrayLike<number | bigint>;
|
|
25
|
+
dims: readonly number[];
|
|
26
|
+
};
|
|
27
|
+
attention_mask: {
|
|
28
|
+
data: ArrayLike<number | bigint>;
|
|
29
|
+
dims: readonly number[];
|
|
30
|
+
};
|
|
31
|
+
}>;
|
|
32
|
+
model_max_length: number;
|
|
33
|
+
};
|
|
34
|
+
type FeatureExtractionPipeline = {
|
|
35
|
+
(texts: string[], options: {
|
|
36
|
+
pooling: "mean" | "cls";
|
|
37
|
+
normalize: boolean;
|
|
38
|
+
truncation: true;
|
|
39
|
+
max_length: number;
|
|
40
|
+
}): Promise<TensorLike>;
|
|
41
|
+
tokenizer: TokenizerLike;
|
|
42
|
+
dispose(): Promise<void>;
|
|
43
|
+
};
|
|
44
|
+
type TransformersJsModule = {
|
|
45
|
+
pipeline(task: "feature-extraction", repo: string, options: {
|
|
46
|
+
cache_dir: string;
|
|
47
|
+
revision: string;
|
|
48
|
+
dtype: "fp32" | "q8" | "q4";
|
|
49
|
+
progress_callback?: (progress: TransformersJsProgressInfo) => void;
|
|
50
|
+
session_options?: {
|
|
51
|
+
executionProviders: TransformersJsExecutionProvider[];
|
|
52
|
+
};
|
|
53
|
+
}): Promise<FeatureExtractionPipeline>;
|
|
54
|
+
};
|
|
55
|
+
type TransformersJsProgressInfo = {
|
|
56
|
+
status: "initiate" | "download" | "progress" | "done" | "ready";
|
|
57
|
+
file?: string;
|
|
58
|
+
loaded?: number;
|
|
59
|
+
total?: number;
|
|
60
|
+
};
|
|
61
|
+
type TransformersJsLoader = () => Promise<TransformersJsModule>;
|
|
62
|
+
type TransformersJsExecutionProvider = "cpu" | "webgpu" | "cuda" | "dml";
|
|
63
|
+
type TransformersJsDependencies = {
|
|
64
|
+
loadRuntime: TransformersJsLoader;
|
|
65
|
+
};
|
|
66
|
+
export declare class TransformersJsEmbeddingModel extends BaseEmbeddingModel {
|
|
67
|
+
private readonly entry;
|
|
68
|
+
readonly info: EmbeddingModelInfo;
|
|
69
|
+
private readonly modelCacheDir;
|
|
70
|
+
private readonly executionProvider;
|
|
71
|
+
private readonly dependencies;
|
|
72
|
+
private pipeline;
|
|
73
|
+
private pipelineLoadPromise;
|
|
74
|
+
private usingCpuFallback;
|
|
75
|
+
private disposed;
|
|
76
|
+
constructor(entry: TransformersJsEmbeddingCatalogEntry, options: CreateEmbeddingModelOptions, dependencies?: Partial<TransformersJsDependencies>);
|
|
77
|
+
protected doEmbed(contents: readonly Content[], options: NormalizedEmbeddingOptions): Promise<EmbeddingResult>;
|
|
78
|
+
private embedBatch;
|
|
79
|
+
dispose(): Promise<void>;
|
|
80
|
+
private ensurePipeline;
|
|
81
|
+
private loadPipeline;
|
|
82
|
+
private embedTexts;
|
|
83
|
+
private fallbackToCpu;
|
|
84
|
+
private createPipeline;
|
|
85
|
+
private ensureNotDisposed;
|
|
86
|
+
}
|
|
87
|
+
export {};
|