@xfabric/memory 0.2.20 → 0.2.22
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/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/memory-manager.d.ts +4 -23
- package/dist/memory-manager.d.ts.map +1 -1
- package/dist/memory-manager.js +10 -192
- package/dist/memory-manager.js.map +1 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +34 -50
- package/dist/plugin/index.js.map +1 -1
- package/dist/providers/index.d.ts +3 -8
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +11 -71
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +10 -7
- package/dist/providers/openai.js.map +1 -1
- package/dist/query-memory.js +28 -1
- package/dist/query-memory.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { DEFAULT_CONFIG, BATCH_FAILURE_LIMIT, SESSION_DIRTY_DEBOUNCE_MS, EMBEDDI
|
|
|
3
3
|
export { MemoryManager } from "./memory-manager.js";
|
|
4
4
|
export { memorySearch, memoryGet, createMemorySearchToolDef, createMemoryGetToolDef, } from "./tools/index.js";
|
|
5
5
|
export type { EmbeddingProvider, EmbeddingProviderResult, ProviderConfig } from "./providers/index.js";
|
|
6
|
-
export { createEmbeddingProvider, createOpenAIProvider,
|
|
6
|
+
export { createEmbeddingProvider, createOpenAIProvider, computeProviderKey, runOpenAiEmbeddingBatches, runGeminiEmbeddingBatches, runWithConcurrency, BatchFailureTracker, } from "./providers/index.js";
|
|
7
7
|
export { MemoryStorage, createDatabase, type StorageOptions, type CreateDatabaseResult, } from "./storage/index.js";
|
|
8
8
|
export { ensureMemoryIndexSchema, migrateSchema, ensureColumn, SCHEMA_VERSION, type SchemaStatus, } from "./storage/index.js";
|
|
9
9
|
export { cosineSimilarity, loadSqliteVec, isSqliteVecAvailable } from "./storage/index.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,qBAAqB,EAErB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,oBAAoB,EAEpB,mBAAmB,EAEnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EAErB,qBAAqB,EACrB,qBAAqB,EAErB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,OAAO,EAEP,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,cAAc,EAEd,mBAAmB,EACnB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,8BAA8B,EAE9B,mCAAmC,EACnC,kCAAkC,EAClC,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EACL,YAAY,EACZ,SAAS,EACT,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACvG,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ DEFAULT_FLUSH_SOFT_THRESHOLD_TOKENS, DEFAULT_FLUSH_RESERVE_TOKENS_FLOOR, SILENT_
|
|
|
8
8
|
export { MemoryManager } from "./memory-manager.js";
|
|
9
9
|
// Tools
|
|
10
10
|
export { memorySearch, memoryGet, createMemorySearchToolDef, createMemoryGetToolDef, } from "./tools/index.js";
|
|
11
|
-
export { createEmbeddingProvider, createOpenAIProvider,
|
|
11
|
+
export { createEmbeddingProvider, createOpenAIProvider, computeProviderKey,
|
|
12
12
|
// Batch API exports
|
|
13
13
|
runOpenAiEmbeddingBatches, runGeminiEmbeddingBatches, runWithConcurrency, BatchFailureTracker, } from "./providers/index.js";
|
|
14
14
|
// Storage
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AA8DtC,OAAO,EACL,cAAc;AACd,YAAY;AACZ,mBAAmB,EACnB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,8BAA8B;AAC9B,kBAAkB;AAClB,mCAAmC,EACnC,kCAAkC,EAClC,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,QAAQ;AACR,OAAO,EACL,YAAY,EACZ,SAAS,EACT,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/memory-manager.d.ts
CHANGED
|
@@ -20,8 +20,6 @@ export declare class MemoryManager {
|
|
|
20
20
|
private batchDisabled;
|
|
21
21
|
private batchDisableReason?;
|
|
22
22
|
private batchFailureTracker;
|
|
23
|
-
private openAiClient?;
|
|
24
|
-
private geminiClient?;
|
|
25
23
|
private sqliteVecLoaded;
|
|
26
24
|
private sqliteVecError?;
|
|
27
25
|
private syncIntervalTimer;
|
|
@@ -69,7 +67,7 @@ export declare class MemoryManager {
|
|
|
69
67
|
*/
|
|
70
68
|
private embedWithFallback;
|
|
71
69
|
/**
|
|
72
|
-
* Activate fallback provider
|
|
70
|
+
* Activate fallback provider (no-op — LiteLLM is the only provider)
|
|
73
71
|
*/
|
|
74
72
|
private activateFallbackProvider;
|
|
75
73
|
/**
|
|
@@ -165,33 +163,16 @@ export declare class MemoryManager {
|
|
|
165
163
|
*/
|
|
166
164
|
private buildEmbeddingBatches;
|
|
167
165
|
/**
|
|
168
|
-
*
|
|
169
|
-
*/
|
|
170
|
-
private runBatchWithTimeoutRetry;
|
|
171
|
-
/**
|
|
172
|
-
* Run batch with fallback to inline embedding on failure
|
|
173
|
-
*/
|
|
174
|
-
private runBatchWithFallback;
|
|
175
|
-
/**
|
|
176
|
-
* Embed chunks using async batch API (OpenAI or Gemini)
|
|
177
|
-
* Exposed for advanced use cases where caller controls chunking
|
|
166
|
+
* Embed chunks with cache check, then inline batch via LiteLLM
|
|
178
167
|
*/
|
|
179
168
|
embedChunksWithAsyncBatch(chunks: Array<{
|
|
180
169
|
text: string;
|
|
181
170
|
hash: string;
|
|
182
171
|
startLine: number;
|
|
183
172
|
endLine: number;
|
|
184
|
-
}>,
|
|
185
|
-
/**
|
|
186
|
-
* Embed chunks using OpenAI async batch API
|
|
187
|
-
*/
|
|
188
|
-
private embedChunksWithOpenAiBatch;
|
|
189
|
-
/**
|
|
190
|
-
* Embed chunks using Gemini async batch API
|
|
191
|
-
*/
|
|
192
|
-
private embedChunksWithGeminiBatch;
|
|
173
|
+
}>, _entry: MemoryFileEntry, _source: MemorySource): Promise<number[][]>;
|
|
193
174
|
/**
|
|
194
|
-
* Embed chunks using inline batch API
|
|
175
|
+
* Embed chunks using inline batch API
|
|
195
176
|
*/
|
|
196
177
|
private embedChunksInline;
|
|
197
178
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-manager.d.ts","sourceRoot":"","sources":["../src/memory-manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"memory-manager.d.ts","sourceRoot":"","sources":["../src/memory-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/memory-manager.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { join, relative, resolve, dirname, basename, sep } from "node:path";
|
|
2
2
|
import { readFile, stat, readdir, copyFile, rename, unlink, open as fsOpen } from "node:fs/promises";
|
|
3
3
|
import { existsSync, mkdirSync, statSync, readdirSync } from "node:fs";
|
|
4
|
-
import { SESSION_DIRTY_DEBOUNCE_MS, EMBEDDING_RETRY_MAX_ATTEMPTS, EMBEDDING_RETRY_BASE_DELAY_MS, EMBEDDING_RETRY_MAX_DELAY_MS,
|
|
4
|
+
import { SESSION_DIRTY_DEBOUNCE_MS, EMBEDDING_RETRY_MAX_ATTEMPTS, EMBEDDING_RETRY_BASE_DELAY_MS, EMBEDDING_RETRY_MAX_DELAY_MS, } from "./types.js";
|
|
5
5
|
import { hashText } from "./utils/hash.js";
|
|
6
6
|
import { retry } from "./utils/retry.js";
|
|
7
7
|
import { Semaphore } from "./utils/concurrency.js";
|
|
8
|
-
import { isRetryableEmbeddingError,
|
|
9
|
-
import { createEmbeddingProvider,
|
|
8
|
+
import { isRetryableEmbeddingError, } from "./utils/error-detection.js";
|
|
9
|
+
import { createEmbeddingProvider, BatchFailureTracker, } from "./providers/index.js";
|
|
10
10
|
import { MemoryStorage } from "./storage/sqlite.js";
|
|
11
11
|
import { loadSqliteVec } from "./storage/sqlite-vec.js";
|
|
12
12
|
import { chunkMarkdown } from "./chunking/markdown.js";
|
|
@@ -57,9 +57,6 @@ export class MemoryManager {
|
|
|
57
57
|
batchDisabled = false;
|
|
58
58
|
batchDisableReason;
|
|
59
59
|
batchFailureTracker = new BatchFailureTracker();
|
|
60
|
-
// OpenAI/Gemini client references for batch API
|
|
61
|
-
openAiClient;
|
|
62
|
-
geminiClient;
|
|
63
60
|
// sqlite-vec availability
|
|
64
61
|
sqliteVecLoaded = false;
|
|
65
62
|
sqliteVecError;
|
|
@@ -180,14 +177,12 @@ export class MemoryManager {
|
|
|
180
177
|
* Initialize the embedding provider
|
|
181
178
|
*/
|
|
182
179
|
async initProvider() {
|
|
183
|
-
const apiKey = this.config.remote?.apiKey ?? process.env.
|
|
180
|
+
const apiKey = this.config.remote?.apiKey ?? process.env.LITELLM_API_KEY;
|
|
184
181
|
this.providerResult = await createEmbeddingProvider(this.config.provider, {
|
|
185
182
|
apiKey,
|
|
186
183
|
baseUrl: this.config.remote?.baseUrl,
|
|
187
184
|
model: this.config.remote?.model,
|
|
188
185
|
modelPath: this.config.local?.modelPath,
|
|
189
|
-
}, {
|
|
190
|
-
geminiApiKey: process.env.GEMINI_API_KEY,
|
|
191
186
|
});
|
|
192
187
|
}
|
|
193
188
|
/**
|
|
@@ -301,35 +296,10 @@ export class MemoryManager {
|
|
|
301
296
|
}
|
|
302
297
|
}
|
|
303
298
|
/**
|
|
304
|
-
* Activate fallback provider
|
|
299
|
+
* Activate fallback provider (no-op — LiteLLM is the only provider)
|
|
305
300
|
*/
|
|
306
|
-
async activateFallbackProvider(
|
|
307
|
-
|
|
308
|
-
return;
|
|
309
|
-
// Determine fallback based on current provider
|
|
310
|
-
const currentId = this.provider.id;
|
|
311
|
-
let fallbackType = null;
|
|
312
|
-
if (currentId === "openai" && process.env.GEMINI_API_KEY) {
|
|
313
|
-
fallbackType = "gemini";
|
|
314
|
-
}
|
|
315
|
-
else if (currentId === "gemini" && (this.config.remote?.apiKey ?? process.env.OPENAI_API_KEY)) {
|
|
316
|
-
fallbackType = "openai";
|
|
317
|
-
}
|
|
318
|
-
if (!fallbackType)
|
|
319
|
-
return;
|
|
320
|
-
try {
|
|
321
|
-
const result = await createEmbeddingProvider(fallbackType, {
|
|
322
|
-
apiKey: fallbackType === "gemini" ? process.env.GEMINI_API_KEY : this.config.remote?.apiKey,
|
|
323
|
-
baseUrl: this.config.remote?.baseUrl,
|
|
324
|
-
}, {});
|
|
325
|
-
this.fallbackProvider = result.provider;
|
|
326
|
-
this.fallbackActivated = true;
|
|
327
|
-
this.providerResult.fallbackFrom = currentId;
|
|
328
|
-
this.providerResult.fallbackReason = reason;
|
|
329
|
-
}
|
|
330
|
-
catch {
|
|
331
|
-
// Fallback failed, continue with original provider errors
|
|
332
|
-
}
|
|
301
|
+
async activateFallbackProvider(_reason) {
|
|
302
|
+
// No fallback providers available — LiteLLM is the only supported provider
|
|
333
303
|
}
|
|
334
304
|
/**
|
|
335
305
|
* Read file content with optional line range
|
|
@@ -1037,59 +1007,9 @@ export class MemoryManager {
|
|
|
1037
1007
|
return batches;
|
|
1038
1008
|
}
|
|
1039
1009
|
/**
|
|
1040
|
-
*
|
|
1041
|
-
*/
|
|
1042
|
-
async runBatchWithTimeoutRetry(params) {
|
|
1043
|
-
try {
|
|
1044
|
-
return await params.run();
|
|
1045
|
-
}
|
|
1046
|
-
catch (err) {
|
|
1047
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
1048
|
-
if (isBatchTimeoutError(message)) {
|
|
1049
|
-
try {
|
|
1050
|
-
return await params.run();
|
|
1051
|
-
}
|
|
1052
|
-
catch (retryErr) {
|
|
1053
|
-
retryErr.batchAttempts = 2;
|
|
1054
|
-
throw retryErr;
|
|
1055
|
-
}
|
|
1056
|
-
}
|
|
1057
|
-
throw err;
|
|
1058
|
-
}
|
|
1059
|
-
}
|
|
1060
|
-
/**
|
|
1061
|
-
* Run batch with fallback to inline embedding on failure
|
|
1062
|
-
*/
|
|
1063
|
-
async runBatchWithFallback(params) {
|
|
1064
|
-
if (this.batchDisabled || this.batchFailureTracker.disabled) {
|
|
1065
|
-
return await params.fallback();
|
|
1066
|
-
}
|
|
1067
|
-
try {
|
|
1068
|
-
const result = await this.runBatchWithTimeoutRetry({
|
|
1069
|
-
provider: params.provider,
|
|
1070
|
-
run: params.run,
|
|
1071
|
-
});
|
|
1072
|
-
await this.batchFailureTracker.reset();
|
|
1073
|
-
return result;
|
|
1074
|
-
}
|
|
1075
|
-
catch (err) {
|
|
1076
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
1077
|
-
const attempts = err.batchAttempts ?? 1;
|
|
1078
|
-
const forceDisable = isBatchUnavailableError(message);
|
|
1079
|
-
await this.batchFailureTracker.recordFailure({
|
|
1080
|
-
provider: params.provider,
|
|
1081
|
-
message,
|
|
1082
|
-
attempts,
|
|
1083
|
-
forceDisable,
|
|
1084
|
-
});
|
|
1085
|
-
return await params.fallback();
|
|
1086
|
-
}
|
|
1087
|
-
}
|
|
1088
|
-
/**
|
|
1089
|
-
* Embed chunks using async batch API (OpenAI or Gemini)
|
|
1090
|
-
* Exposed for advanced use cases where caller controls chunking
|
|
1010
|
+
* Embed chunks with cache check, then inline batch via LiteLLM
|
|
1091
1011
|
*/
|
|
1092
|
-
async embedChunksWithAsyncBatch(chunks,
|
|
1012
|
+
async embedChunksWithAsyncBatch(chunks, _entry, _source) {
|
|
1093
1013
|
const provider = this.provider;
|
|
1094
1014
|
// Check cache for existing embeddings
|
|
1095
1015
|
const embeddings = Array.from({ length: chunks.length }, () => []);
|
|
@@ -1106,112 +1026,10 @@ export class MemoryManager {
|
|
|
1106
1026
|
}
|
|
1107
1027
|
if (missing.length === 0)
|
|
1108
1028
|
return embeddings;
|
|
1109
|
-
// Use async batch API if available
|
|
1110
|
-
if (provider.id === "openai" && this.openAiClient && this.config.batch.enabled) {
|
|
1111
|
-
return this.embedChunksWithOpenAiBatch(missing, embeddings, entry, source);
|
|
1112
|
-
}
|
|
1113
|
-
if (provider.id === "gemini" && this.geminiClient && this.config.batch.enabled) {
|
|
1114
|
-
return this.embedChunksWithGeminiBatch(missing, embeddings, entry, source);
|
|
1115
|
-
}
|
|
1116
|
-
// Fallback to inline batch
|
|
1117
1029
|
return this.embedChunksInline(missing, embeddings);
|
|
1118
1030
|
}
|
|
1119
1031
|
/**
|
|
1120
|
-
* Embed chunks using
|
|
1121
|
-
*/
|
|
1122
|
-
async embedChunksWithOpenAiBatch(missing, embeddings, entry, source) {
|
|
1123
|
-
const openAi = this.openAiClient;
|
|
1124
|
-
if (!openAi)
|
|
1125
|
-
return this.embedChunksInline(missing, embeddings);
|
|
1126
|
-
const requests = [];
|
|
1127
|
-
const mapping = new Map();
|
|
1128
|
-
for (const item of missing) {
|
|
1129
|
-
const chunk = item.chunk;
|
|
1130
|
-
const customId = hashText(`${source}:${entry.path}:${chunk.startLine}:${chunk.endLine}:${chunk.hash}:${item.index}`);
|
|
1131
|
-
mapping.set(customId, { index: item.index, hash: chunk.hash });
|
|
1132
|
-
requests.push({
|
|
1133
|
-
custom_id: customId,
|
|
1134
|
-
method: "POST",
|
|
1135
|
-
url: OPENAI_BATCH_ENDPOINT,
|
|
1136
|
-
body: {
|
|
1137
|
-
model: openAi.model,
|
|
1138
|
-
input: chunk.text,
|
|
1139
|
-
},
|
|
1140
|
-
});
|
|
1141
|
-
}
|
|
1142
|
-
const batchResult = await this.runBatchWithFallback({
|
|
1143
|
-
provider: "openai",
|
|
1144
|
-
run: async () => await runOpenAiEmbeddingBatches({
|
|
1145
|
-
openAi,
|
|
1146
|
-
agentId: this.config.agentId,
|
|
1147
|
-
requests,
|
|
1148
|
-
wait: this.config.batch.wait,
|
|
1149
|
-
concurrency: this.config.batch.concurrency,
|
|
1150
|
-
pollIntervalMs: this.config.batch.pollIntervalMs,
|
|
1151
|
-
timeoutMs: this.config.batch.timeoutMs,
|
|
1152
|
-
}),
|
|
1153
|
-
fallback: async () => await this.embedChunksInline(missing, embeddings),
|
|
1154
|
-
});
|
|
1155
|
-
if (Array.isArray(batchResult))
|
|
1156
|
-
return batchResult;
|
|
1157
|
-
const byCustomId = batchResult;
|
|
1158
|
-
// Map results back and cache
|
|
1159
|
-
for (const [customId, embedding] of byCustomId.entries()) {
|
|
1160
|
-
const mapped = mapping.get(customId);
|
|
1161
|
-
if (!mapped)
|
|
1162
|
-
continue;
|
|
1163
|
-
embeddings[mapped.index] = embedding;
|
|
1164
|
-
this.storage.cacheEmbedding(this.provider.id, this.provider.model, this.providerKey, mapped.hash, embedding);
|
|
1165
|
-
}
|
|
1166
|
-
return embeddings;
|
|
1167
|
-
}
|
|
1168
|
-
/**
|
|
1169
|
-
* Embed chunks using Gemini async batch API
|
|
1170
|
-
*/
|
|
1171
|
-
async embedChunksWithGeminiBatch(missing, embeddings, entry, source) {
|
|
1172
|
-
const gemini = this.geminiClient;
|
|
1173
|
-
if (!gemini)
|
|
1174
|
-
return this.embedChunksInline(missing, embeddings);
|
|
1175
|
-
const requests = [];
|
|
1176
|
-
const mapping = new Map();
|
|
1177
|
-
for (const item of missing) {
|
|
1178
|
-
const chunk = item.chunk;
|
|
1179
|
-
const customId = hashText(`${source}:${entry.path}:${chunk.startLine}:${chunk.endLine}:${chunk.hash}:${item.index}`);
|
|
1180
|
-
mapping.set(customId, { index: item.index, hash: chunk.hash });
|
|
1181
|
-
requests.push({
|
|
1182
|
-
custom_id: customId,
|
|
1183
|
-
content: { parts: [{ text: chunk.text }] },
|
|
1184
|
-
taskType: "RETRIEVAL_DOCUMENT",
|
|
1185
|
-
});
|
|
1186
|
-
}
|
|
1187
|
-
const batchResult = await this.runBatchWithFallback({
|
|
1188
|
-
provider: "gemini",
|
|
1189
|
-
run: async () => await runGeminiEmbeddingBatches({
|
|
1190
|
-
gemini,
|
|
1191
|
-
agentId: this.config.agentId,
|
|
1192
|
-
requests,
|
|
1193
|
-
wait: this.config.batch.wait,
|
|
1194
|
-
concurrency: this.config.batch.concurrency,
|
|
1195
|
-
pollIntervalMs: this.config.batch.pollIntervalMs,
|
|
1196
|
-
timeoutMs: this.config.batch.timeoutMs,
|
|
1197
|
-
}),
|
|
1198
|
-
fallback: async () => await this.embedChunksInline(missing, embeddings),
|
|
1199
|
-
});
|
|
1200
|
-
if (Array.isArray(batchResult))
|
|
1201
|
-
return batchResult;
|
|
1202
|
-
const byCustomId = batchResult;
|
|
1203
|
-
// Map results back and cache
|
|
1204
|
-
for (const [customId, embedding] of byCustomId.entries()) {
|
|
1205
|
-
const mapped = mapping.get(customId);
|
|
1206
|
-
if (!mapped)
|
|
1207
|
-
continue;
|
|
1208
|
-
embeddings[mapped.index] = embedding;
|
|
1209
|
-
this.storage.cacheEmbedding(this.provider.id, this.provider.model, this.providerKey, mapped.hash, embedding);
|
|
1210
|
-
}
|
|
1211
|
-
return embeddings;
|
|
1212
|
-
}
|
|
1213
|
-
/**
|
|
1214
|
-
* Embed chunks using inline batch API (fallback)
|
|
1032
|
+
* Embed chunks using inline batch API
|
|
1215
1033
|
*/
|
|
1216
1034
|
async embedChunksInline(missing, embeddings) {
|
|
1217
1035
|
const texts = missing.map((m) => m.chunk.text);
|