kiri-mcp-server 0.16.0 → 0.17.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/README.md +101 -27
- package/dist/package.json +1 -1
- package/dist/src/client/model-cli.d.ts +12 -0
- package/dist/src/client/model-cli.d.ts.map +1 -0
- package/dist/src/client/model-cli.js +247 -0
- package/dist/src/client/model-cli.js.map +1 -0
- package/dist/src/client/proxy.js +0 -0
- package/dist/src/daemon/daemon.js +0 -0
- package/dist/src/indexer/graph-metrics.d.ts.map +1 -1
- package/dist/src/indexer/graph-metrics.js +16 -4
- package/dist/src/indexer/graph-metrics.js.map +1 -1
- package/dist/src/server/boost-profiles.d.ts +1 -1
- package/dist/src/server/boost-profiles.d.ts.map +1 -1
- package/dist/src/server/boost-profiles.js +22 -0
- package/dist/src/server/boost-profiles.js.map +1 -1
- package/dist/src/server/context.d.ts +2 -0
- package/dist/src/server/context.d.ts.map +1 -1
- package/dist/src/server/context.js.map +1 -1
- package/dist/src/server/handlers.d.ts.map +1 -1
- package/dist/src/server/handlers.js +25 -4
- package/dist/src/server/handlers.js.map +1 -1
- package/dist/src/server/main.js +0 -0
- package/dist/src/server/rpc.js +4 -4
- package/dist/src/server/rpc.js.map +1 -1
- package/dist/src/shared/utils/global-dirs.d.ts +64 -0
- package/dist/src/shared/utils/global-dirs.d.ts.map +1 -0
- package/dist/src/shared/utils/global-dirs.js +134 -0
- package/dist/src/shared/utils/global-dirs.js.map +1 -0
- package/dist/src/vss/config.d.ts +66 -0
- package/dist/src/vss/config.d.ts.map +1 -0
- package/dist/src/vss/config.js +233 -0
- package/dist/src/vss/config.js.map +1 -0
- package/dist/src/vss/index.d.ts +9 -0
- package/dist/src/vss/index.d.ts.map +1 -0
- package/dist/src/vss/index.js +9 -0
- package/dist/src/vss/index.js.map +1 -0
- package/dist/src/vss/model-downloader.d.ts +101 -0
- package/dist/src/vss/model-downloader.d.ts.map +1 -0
- package/dist/src/vss/model-downloader.js +320 -0
- package/dist/src/vss/model-downloader.js.map +1 -0
- package/dist/src/vss/provider.d.ts +132 -0
- package/dist/src/vss/provider.d.ts.map +1 -0
- package/dist/src/vss/provider.js +254 -0
- package/dist/src/vss/provider.js.map +1 -0
- package/package.json +1 -1
- package/dist/client/cli.js +0 -68
- package/dist/client/cli.js.map +0 -1
- package/dist/client/index.js +0 -5
- package/dist/client/index.js.map +0 -1
- package/dist/eval/metrics.js +0 -47
- package/dist/eval/metrics.js.map +0 -1
- package/dist/indexer/cli.js +0 -362
- package/dist/indexer/cli.js.map +0 -1
- package/dist/indexer/codeintel.js +0 -182
- package/dist/indexer/codeintel.js.map +0 -1
- package/dist/indexer/git.js +0 -30
- package/dist/indexer/git.js.map +0 -1
- package/dist/indexer/language.js +0 -34
- package/dist/indexer/language.js.map +0 -1
- package/dist/indexer/pipeline/filters/denylist.js +0 -71
- package/dist/indexer/pipeline/filters/denylist.js.map +0 -1
- package/dist/indexer/schema.js +0 -101
- package/dist/indexer/schema.js.map +0 -1
- package/dist/server/bootstrap.js +0 -19
- package/dist/server/bootstrap.js.map +0 -1
- package/dist/server/context.js +0 -1
- package/dist/server/context.js.map +0 -1
- package/dist/server/fallbacks/degradeController.js +0 -69
- package/dist/server/fallbacks/degradeController.js.map +0 -1
- package/dist/server/handlers.js +0 -1268
- package/dist/server/handlers.js.map +0 -1
- package/dist/server/main.js +0 -151
- package/dist/server/main.js.map +0 -1
- package/dist/server/observability/metrics.js +0 -56
- package/dist/server/observability/metrics.js.map +0 -1
- package/dist/server/observability/tracing.js +0 -58
- package/dist/server/observability/tracing.js.map +0 -1
- package/dist/server/rpc.js +0 -477
- package/dist/server/rpc.js.map +0 -1
- package/dist/server/runtime.js +0 -47
- package/dist/server/runtime.js.map +0 -1
- package/dist/server/scoring.js +0 -116
- package/dist/server/scoring.js.map +0 -1
- package/dist/server/stdio.js +0 -76
- package/dist/server/stdio.js.map +0 -1
- package/dist/shared/duckdb.js +0 -119
- package/dist/shared/duckdb.js.map +0 -1
- package/dist/shared/embedding.js +0 -98
- package/dist/shared/embedding.js.map +0 -1
- package/dist/shared/index.js +0 -9
- package/dist/shared/index.js.map +0 -1
- package/dist/shared/security/config.js +0 -64
- package/dist/shared/security/config.js.map +0 -1
- package/dist/shared/security/masker.js +0 -56
- package/dist/shared/security/masker.js.map +0 -1
- package/dist/shared/tokenizer.js +0 -4
- package/dist/shared/tokenizer.js.map +0 -1
- package/dist/shared/utils/simpleYaml.js +0 -89
- package/dist/shared/utils/simpleYaml.js.map +0 -1
- package/dist/src/server/rrf.d.ts +0 -86
- package/dist/src/server/rrf.d.ts.map +0 -1
- package/dist/src/server/rrf.js +0 -108
- package/dist/src/server/rrf.js.map +0 -1
- package/dist/src/shared/embedding/engine.d.ts +0 -38
- package/dist/src/shared/embedding/engine.d.ts.map +0 -1
- package/dist/src/shared/embedding/engine.js +0 -6
- package/dist/src/shared/embedding/engine.js.map +0 -1
- package/dist/src/shared/embedding/lsh-engine.d.ts +0 -11
- package/dist/src/shared/embedding/lsh-engine.d.ts.map +0 -1
- package/dist/src/shared/embedding/lsh-engine.js +0 -14
- package/dist/src/shared/embedding/lsh-engine.js.map +0 -1
- package/dist/src/shared/embedding/registry.d.ts +0 -25
- package/dist/src/shared/embedding/registry.d.ts.map +0 -1
- package/dist/src/shared/embedding/registry.js +0 -50
- package/dist/src/shared/embedding/registry.js.map +0 -1
- package/dist/src/shared/embedding/semantic-engine.d.ts +0 -14
- package/dist/src/shared/embedding/semantic-engine.d.ts.map +0 -1
- package/dist/src/shared/embedding/semantic-engine.js +0 -50
- package/dist/src/shared/embedding/semantic-engine.js.map +0 -1
- package/dist/src/shared/models/model-manager.d.ts +0 -38
- package/dist/src/shared/models/model-manager.d.ts.map +0 -1
- package/dist/src/shared/models/model-manager.js +0 -116
- package/dist/src/shared/models/model-manager.js.map +0 -1
- package/dist/src/shared/models/model-manifest.d.ts +0 -22
- package/dist/src/shared/models/model-manifest.d.ts.map +0 -1
- package/dist/src/shared/models/model-manifest.js +0 -24
- package/dist/src/shared/models/model-manifest.js.map +0 -1
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VSS Embedding Provider Interface
|
|
3
|
+
*
|
|
4
|
+
* Defines the interface for generating semantic embeddings.
|
|
5
|
+
* Implementations can use different backends (LSH, Transformers.js, external API).
|
|
6
|
+
*/
|
|
7
|
+
import { generateEmbedding as generateLSHEmbedding } from "../shared/embedding.js";
|
|
8
|
+
import { getModelPath, isModelInstalled } from "../shared/utils/global-dirs.js";
|
|
9
|
+
import { loadVSSConfig, MODEL_METADATA } from "./config.js";
|
|
10
|
+
/**
|
|
11
|
+
* LSH-based embedding provider (current implementation)
|
|
12
|
+
* Uses locality-sensitive hashing for structural similarity
|
|
13
|
+
*/
|
|
14
|
+
export class LSHEmbeddingProvider {
|
|
15
|
+
name = "lsh";
|
|
16
|
+
dims = 64;
|
|
17
|
+
ready = true;
|
|
18
|
+
async generateEmbedding(text) {
|
|
19
|
+
const result = generateLSHEmbedding(text);
|
|
20
|
+
if (!result)
|
|
21
|
+
return null;
|
|
22
|
+
return { dims: result.dims, values: result.values };
|
|
23
|
+
}
|
|
24
|
+
async generateBatch(items) {
|
|
25
|
+
return items.map((item) => {
|
|
26
|
+
const result = generateLSHEmbedding(item.content);
|
|
27
|
+
return {
|
|
28
|
+
path: item.path,
|
|
29
|
+
embedding: result ? { dims: 64, values: result.values } : null,
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async initialize() {
|
|
34
|
+
// No initialization needed for LSH
|
|
35
|
+
}
|
|
36
|
+
async dispose() {
|
|
37
|
+
// No cleanup needed for LSH
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Neural embedding provider (legacy, for non-ONNX models)
|
|
42
|
+
* Uses CodeBERT/UniXcoder for semantic embeddings
|
|
43
|
+
*
|
|
44
|
+
* @deprecated Use TransformersEmbeddingProvider for ONNX-ready models
|
|
45
|
+
*/
|
|
46
|
+
export class NeuralEmbeddingProvider {
|
|
47
|
+
name;
|
|
48
|
+
dims = 768; // CodeBERT/UniXcoder dimension
|
|
49
|
+
_ready = false;
|
|
50
|
+
modelPath;
|
|
51
|
+
model;
|
|
52
|
+
constructor(model) {
|
|
53
|
+
this.name = `neural:${model}`;
|
|
54
|
+
this.model = model;
|
|
55
|
+
this.modelPath = getModelPath(model);
|
|
56
|
+
}
|
|
57
|
+
get ready() {
|
|
58
|
+
return this._ready;
|
|
59
|
+
}
|
|
60
|
+
async generateEmbedding(text) {
|
|
61
|
+
if (!this._ready) {
|
|
62
|
+
throw new Error(`Neural provider not initialized. Call initialize() first.`);
|
|
63
|
+
}
|
|
64
|
+
// Legacy models require manual ONNX conversion, fall back to LSH
|
|
65
|
+
console.warn(`[VSS] Legacy model "${this.model}" has no ONNX, using LSH fallback`);
|
|
66
|
+
const lsh = new LSHEmbeddingProvider();
|
|
67
|
+
return lsh.generateEmbedding(text);
|
|
68
|
+
}
|
|
69
|
+
async generateBatch(items) {
|
|
70
|
+
if (!this._ready) {
|
|
71
|
+
throw new Error(`Neural provider not initialized. Call initialize() first.`);
|
|
72
|
+
}
|
|
73
|
+
const results = [];
|
|
74
|
+
for (const item of items) {
|
|
75
|
+
const embedding = await this.generateEmbedding(item.content);
|
|
76
|
+
results.push({ path: item.path, embedding });
|
|
77
|
+
}
|
|
78
|
+
return results;
|
|
79
|
+
}
|
|
80
|
+
async initialize() {
|
|
81
|
+
if (!isModelInstalled(this.model)) {
|
|
82
|
+
throw new Error(`Model "${this.model}" is not installed. Run "kiri model download ${this.model}" first.`);
|
|
83
|
+
}
|
|
84
|
+
console.info(`[VSS] Neural embedding provider initialized (model: ${this.model})`);
|
|
85
|
+
console.warn(`[VSS] Legacy model has no ONNX, will use LSH fallback`);
|
|
86
|
+
this._ready = true;
|
|
87
|
+
}
|
|
88
|
+
async dispose() {
|
|
89
|
+
this._ready = false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Lazy-loaded transformers pipeline to avoid startup cost
|
|
93
|
+
let transformersPipeline = null;
|
|
94
|
+
/**
|
|
95
|
+
* Transformers.js embedding provider
|
|
96
|
+
* Uses @huggingface/transformers for ONNX-based inference
|
|
97
|
+
*/
|
|
98
|
+
export class TransformersEmbeddingProvider {
|
|
99
|
+
name;
|
|
100
|
+
dims;
|
|
101
|
+
_ready = false;
|
|
102
|
+
model;
|
|
103
|
+
hfModelId;
|
|
104
|
+
extractor = null;
|
|
105
|
+
constructor(model) {
|
|
106
|
+
const metadata = MODEL_METADATA[model];
|
|
107
|
+
if (!metadata.hasOnnx) {
|
|
108
|
+
throw new Error(`Model "${model}" does not have ONNX support. Use NeuralEmbeddingProvider or choose an ONNX-ready model.`);
|
|
109
|
+
}
|
|
110
|
+
this.name = `transformers:${model}`;
|
|
111
|
+
this.model = model;
|
|
112
|
+
this.hfModelId = metadata.hfModelId;
|
|
113
|
+
this.dims = metadata.dims;
|
|
114
|
+
}
|
|
115
|
+
get ready() {
|
|
116
|
+
return this._ready;
|
|
117
|
+
}
|
|
118
|
+
async generateEmbedding(text) {
|
|
119
|
+
if (!this._ready || !this.extractor) {
|
|
120
|
+
throw new Error(`Transformers provider not initialized. Call initialize() first.`);
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
const output = await this.extractor(text, { pooling: "mean", normalize: true });
|
|
124
|
+
// Feature extraction returns a Tensor with data property
|
|
125
|
+
const tensor = output;
|
|
126
|
+
const values = Array.from(tensor.data);
|
|
127
|
+
return { dims: this.dims, values };
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.error(`[VSS] Embedding generation failed:`, error);
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async generateBatch(items) {
|
|
135
|
+
if (!this._ready || !this.extractor) {
|
|
136
|
+
throw new Error(`Transformers provider not initialized. Call initialize() first.`);
|
|
137
|
+
}
|
|
138
|
+
const results = [];
|
|
139
|
+
// Process in batches to avoid memory issues
|
|
140
|
+
const batchSize = 8;
|
|
141
|
+
for (let i = 0; i < items.length; i += batchSize) {
|
|
142
|
+
const batch = items.slice(i, i + batchSize);
|
|
143
|
+
const texts = batch.map((item) => item.content);
|
|
144
|
+
try {
|
|
145
|
+
const subBatchStart = Date.now();
|
|
146
|
+
const output = await this.extractor(texts, { pooling: "mean", normalize: true });
|
|
147
|
+
const elapsed = ((Date.now() - subBatchStart) / 1000).toFixed(1);
|
|
148
|
+
console.info(`[VSS] Sub-batch ${Math.floor(i / batchSize) + 1}/${Math.ceil(items.length / batchSize)}: ${batch.length} texts in ${elapsed}s`);
|
|
149
|
+
// Feature extraction returns a Tensor with data property
|
|
150
|
+
const tensor = output;
|
|
151
|
+
// Output shape: [batch_size, dims]
|
|
152
|
+
for (let j = 0; j < batch.length; j++) {
|
|
153
|
+
const start = j * this.dims;
|
|
154
|
+
const end = start + this.dims;
|
|
155
|
+
const values = Array.from(tensor.data.slice(start, end));
|
|
156
|
+
results.push({
|
|
157
|
+
path: batch[j].path,
|
|
158
|
+
embedding: { dims: this.dims, values },
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
console.error(`[VSS] Batch embedding failed:`, error);
|
|
164
|
+
// Add null results for failed batch
|
|
165
|
+
for (const item of batch) {
|
|
166
|
+
results.push({ path: item.path, embedding: null });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return results;
|
|
171
|
+
}
|
|
172
|
+
async initialize() {
|
|
173
|
+
console.info(`[VSS] Loading model: ${this.hfModelId}`);
|
|
174
|
+
// Lazy load transformers to reduce startup time
|
|
175
|
+
if (!transformersPipeline) {
|
|
176
|
+
const transformers = await import("@huggingface/transformers");
|
|
177
|
+
transformersPipeline = transformers.pipeline;
|
|
178
|
+
}
|
|
179
|
+
// Create feature extraction pipeline
|
|
180
|
+
this.extractor = await transformersPipeline("feature-extraction", this.hfModelId, {
|
|
181
|
+
dtype: "fp32", // Use fp32 for better compatibility
|
|
182
|
+
});
|
|
183
|
+
console.info(`[VSS] Transformers embedding provider ready (model: ${this.model})`);
|
|
184
|
+
this._ready = true;
|
|
185
|
+
}
|
|
186
|
+
async dispose() {
|
|
187
|
+
this.extractor = null;
|
|
188
|
+
this._ready = false;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Create an embedding provider based on configuration
|
|
193
|
+
*/
|
|
194
|
+
export async function createEmbeddingProvider(options) {
|
|
195
|
+
const config = loadVSSConfig(options?.config);
|
|
196
|
+
// Force LSH provider if specified
|
|
197
|
+
if (options?.forceProvider === "lsh") {
|
|
198
|
+
return new LSHEmbeddingProvider();
|
|
199
|
+
}
|
|
200
|
+
// If VSS is disabled, use LSH
|
|
201
|
+
if (!config.enabled) {
|
|
202
|
+
return new LSHEmbeddingProvider();
|
|
203
|
+
}
|
|
204
|
+
const metadata = MODEL_METADATA[config.model];
|
|
205
|
+
// Force transformers provider if specified
|
|
206
|
+
if (options?.forceProvider === "transformers") {
|
|
207
|
+
if (!metadata.hasOnnx) {
|
|
208
|
+
throw new Error(`Model "${config.model}" does not have ONNX support. Choose an ONNX-ready model.`);
|
|
209
|
+
}
|
|
210
|
+
const provider = new TransformersEmbeddingProvider(config.model);
|
|
211
|
+
await provider.initialize();
|
|
212
|
+
return provider;
|
|
213
|
+
}
|
|
214
|
+
// Force neural provider if specified (legacy)
|
|
215
|
+
if (options?.forceProvider === "neural") {
|
|
216
|
+
const provider = new NeuralEmbeddingProvider(config.model);
|
|
217
|
+
await provider.initialize();
|
|
218
|
+
return provider;
|
|
219
|
+
}
|
|
220
|
+
// Auto-select provider based on model capabilities
|
|
221
|
+
if (metadata.hasOnnx) {
|
|
222
|
+
// Use TransformersEmbeddingProvider for ONNX-ready models
|
|
223
|
+
// Models are auto-downloaded by @huggingface/transformers
|
|
224
|
+
const provider = new TransformersEmbeddingProvider(config.model);
|
|
225
|
+
await provider.initialize();
|
|
226
|
+
return provider;
|
|
227
|
+
}
|
|
228
|
+
// Legacy models: check if manually installed
|
|
229
|
+
if (!isModelInstalled(config.model)) {
|
|
230
|
+
switch (config.onMissing) {
|
|
231
|
+
case "error":
|
|
232
|
+
throw new Error(`VSS model "${config.model}" not installed. Run "kiri model download ${config.model}" first.`);
|
|
233
|
+
case "skip":
|
|
234
|
+
console.info(`[VSS] Model not installed, using LSH fallback`);
|
|
235
|
+
return new LSHEmbeddingProvider();
|
|
236
|
+
case "prompt":
|
|
237
|
+
case "download":
|
|
238
|
+
// These should be handled by the CLI before reaching here
|
|
239
|
+
console.warn(`[VSS] Model not installed, using LSH fallback`);
|
|
240
|
+
return new LSHEmbeddingProvider();
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// Use legacy neural provider for non-ONNX models
|
|
244
|
+
const provider = new NeuralEmbeddingProvider(config.model);
|
|
245
|
+
await provider.initialize();
|
|
246
|
+
return provider;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Get provider info string for logging
|
|
250
|
+
*/
|
|
251
|
+
export function getProviderInfo(provider) {
|
|
252
|
+
return `${provider.name} (dims=${provider.dims}, ready=${provider.ready})`;
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/vss/provider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/dist/client/cli.js
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import process from "node:process";
|
|
3
|
-
import { bootstrapServer } from "../server/bootstrap.js";
|
|
4
|
-
import { evaluateSecurityStatus, updateSecurityLock } from "../shared/security/config.js";
|
|
5
|
-
function printUsage() {
|
|
6
|
-
console.info(`Usage: pnpm exec tsx src/client/cli.ts <command> [options]\n`);
|
|
7
|
-
console.info(`Commands:`);
|
|
8
|
-
console.info(` security verify [--write-lock] Verify security baseline matches lock file`);
|
|
9
|
-
}
|
|
10
|
-
function formatStatus() {
|
|
11
|
-
const status = evaluateSecurityStatus();
|
|
12
|
-
const lockInfo = status.lockHash ? `hash=${status.lockHash}` : "missing";
|
|
13
|
-
const matchState = status.matches ? "MATCH" : "MISMATCH";
|
|
14
|
-
return [
|
|
15
|
-
`config: ${status.configPath}`,
|
|
16
|
-
`lock: ${status.lockPath} (${lockInfo})`,
|
|
17
|
-
`state: ${matchState}`,
|
|
18
|
-
].join("\n");
|
|
19
|
-
}
|
|
20
|
-
function handleSecurityVerify(argv) {
|
|
21
|
-
const writeLock = argv.includes("--write-lock");
|
|
22
|
-
const status = evaluateSecurityStatus();
|
|
23
|
-
if (!status.lockHash && writeLock) {
|
|
24
|
-
updateSecurityLock(status.hash);
|
|
25
|
-
console.info("Security lock created.");
|
|
26
|
-
const refreshed = evaluateSecurityStatus();
|
|
27
|
-
console.info([
|
|
28
|
-
`config: ${refreshed.configPath}`,
|
|
29
|
-
`lock: ${refreshed.lockPath} (hash=${refreshed.lockHash})`,
|
|
30
|
-
"state: MATCH",
|
|
31
|
-
].join("\n"));
|
|
32
|
-
return 0;
|
|
33
|
-
}
|
|
34
|
-
try {
|
|
35
|
-
bootstrapServer({ allowWriteLock: writeLock });
|
|
36
|
-
console.info("Security baseline verified.");
|
|
37
|
-
console.info(formatStatus());
|
|
38
|
-
return 0;
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
console.error(error instanceof Error ? error.message : String(error));
|
|
42
|
-
console.info(formatStatus());
|
|
43
|
-
return 1;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
export function main(argv = process.argv.slice(2)) {
|
|
47
|
-
const [command, ...rest] = argv;
|
|
48
|
-
switch (command) {
|
|
49
|
-
case "security": {
|
|
50
|
-
const [subcommand, ...subArgs] = rest;
|
|
51
|
-
if (subcommand === "verify") {
|
|
52
|
-
return handleSecurityVerify(subArgs);
|
|
53
|
-
}
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
56
|
-
case undefined:
|
|
57
|
-
printUsage();
|
|
58
|
-
return 1;
|
|
59
|
-
default:
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
62
|
-
printUsage();
|
|
63
|
-
return 1;
|
|
64
|
-
}
|
|
65
|
-
if (process.argv[1] && new URL(import.meta.url).pathname === process.argv[1]) {
|
|
66
|
-
process.exitCode = main();
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/client/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/client/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/client/index.js
DELETED
package/dist/client/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,yBAAyB,CACvC,QAAkD;IAElD,qCAAqC;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
package/dist/eval/metrics.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
export function precisionAtK(retrievedIds, relevantIds, k) {
|
|
2
|
-
if (k <= 0 || retrievedIds.length === 0) {
|
|
3
|
-
return 0;
|
|
4
|
-
}
|
|
5
|
-
const relevantSet = new Set(relevantIds);
|
|
6
|
-
if (relevantSet.size === 0) {
|
|
7
|
-
return 0;
|
|
8
|
-
}
|
|
9
|
-
const limit = Math.min(k, retrievedIds.length);
|
|
10
|
-
let hits = 0;
|
|
11
|
-
for (let index = 0; index < limit; index += 1) {
|
|
12
|
-
const id = retrievedIds[index];
|
|
13
|
-
if (id !== undefined && relevantSet.has(id)) {
|
|
14
|
-
hits += 1;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
return hits / limit;
|
|
18
|
-
}
|
|
19
|
-
export function timeToFirstUseful(events, options = {}) {
|
|
20
|
-
if (events.length === 0) {
|
|
21
|
-
return Number.POSITIVE_INFINITY;
|
|
22
|
-
}
|
|
23
|
-
const sorted = [...events].sort((a, b) => a.timestampMs - b.timestampMs);
|
|
24
|
-
const baseline = typeof options.startTimestampMs === "number"
|
|
25
|
-
? options.startTimestampMs
|
|
26
|
-
: (sorted[0]?.timestampMs ?? 0);
|
|
27
|
-
for (const event of sorted) {
|
|
28
|
-
if (event.relevant) {
|
|
29
|
-
const deltaMs = event.timestampMs - baseline;
|
|
30
|
-
return Math.max(0, deltaMs) / 1000;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return Number.POSITIVE_INFINITY;
|
|
34
|
-
}
|
|
35
|
-
export function evaluateRetrieval(options) {
|
|
36
|
-
const { items, relevant, k } = options;
|
|
37
|
-
const ids = items.map((item) => item.id);
|
|
38
|
-
const precision = precisionAtK(ids, relevant, k);
|
|
39
|
-
const relevantSet = new Set(relevant);
|
|
40
|
-
const latencyEvents = items.map((item) => ({
|
|
41
|
-
timestampMs: item.timestampMs,
|
|
42
|
-
relevant: relevantSet.has(item.id),
|
|
43
|
-
}));
|
|
44
|
-
const ttff = timeToFirstUseful(latencyEvents);
|
|
45
|
-
return { precisionAtK: precision, timeToFirstUseful: ttff };
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=metrics.js.map
|
package/dist/eval/metrics.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/eval/metrics.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,YAAY,CAC1B,YAAsB,EACtB,WAA6B,EAC7B,CAAS;IAET,IAAI,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,EAAE,KAAK,SAAS,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,GAAG,KAAK,CAAC;AACtB,CAAC;AAOD,MAAM,UAAU,iBAAiB,CAC/B,MAAsB,EACtB,UAAyC,EAAE;IAE3C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,iBAAiB,CAAC;IAClC,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;IACzE,MAAM,QAAQ,GACZ,OAAO,OAAO,CAAC,gBAAgB,KAAK,QAAQ;QAC1C,CAAC,CAAC,OAAO,CAAC,gBAAgB;QAC1B,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;YAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,iBAAiB,CAAC;AAClC,CAAC;AAaD,MAAM,UAAU,iBAAiB,CAAC,OAAiC;IACjE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,aAAa,GAAmB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzD,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;KACnC,CAAC,CAAC,CAAC;IACJ,MAAM,IAAI,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC9C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;AAC9D,CAAC"}
|