Skip to content

Commit 7e977ea

Browse files
author
StackMemory Bot (CLI)
committed
fix(embeddings): reset initPromise on failure + add vector strategy path
- Reset initPromise to null on pipeline load failure so retries work - Add vector search path for semantic strategy (was falling through to text) - Convert vector similarity distances to scores for consistent ranking
1 parent f6c3764 commit 7e977ea

2 files changed

Lines changed: 19 additions & 2 deletions

File tree

src/core/database/transformers-embedding-provider.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,12 @@ export class TransformersEmbeddingProvider implements EmbeddingProvider {
2626
const { pipeline } = await import('@xenova/transformers');
2727
this.pipeline = await pipeline('feature-extraction', this.modelName);
2828
})();
29-
await this.initPromise;
29+
try {
30+
await this.initPromise;
31+
} catch (err) {
32+
this.initPromise = null;
33+
throw err;
34+
}
3035
}
3136

3237
async embed(text: string): Promise<number[]> {

src/core/retrieval/context-retriever.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,19 @@ export class ContextRetriever {
419419
strategy.weights
420420
);
421421
} else {
422-
// No embedding provider — fall back to text search
422+
rawResults = await this.adapter.search(searchOptions);
423+
}
424+
} else if (strategy.searchType === 'vector') {
425+
const embedding = await this.generateEmbedding(query.text);
426+
if (embedding.length > 0) {
427+
const vecResults = await this.adapter.searchByVector(embedding, {
428+
limit: searchOptions.limit,
429+
});
430+
rawResults = vecResults.map((r) => ({
431+
...r,
432+
score: 1 - (r.similarity || 0),
433+
}));
434+
} else {
423435
rawResults = await this.adapter.search(searchOptions);
424436
}
425437
} else {

0 commit comments

Comments
 (0)