Sprint 0-2: TS plugin scaffolding, LanceDB utils, tooling updates
- Add index-tool.ts command implementation - Wire lancedb.ts vector search into plugin - Update src/tools/index.ts exports - Bump package deps (ts-jest, jest, typescript, lancedb) - Add .claude/settings.local.json Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -52,9 +52,6 @@ export async function searchVectorDb(
|
||||
}
|
||||
const table = await db.openTable("obsidian_chunks");
|
||||
|
||||
// Embed the query text
|
||||
const queryVector = await embedQuery(query, config);
|
||||
|
||||
// Build WHERE clause from filters
|
||||
const conditions: string[] = [];
|
||||
if (options.directory_filter && options.directory_filter.length > 0) {
|
||||
@@ -79,12 +76,24 @@ export async function searchVectorDb(
|
||||
|
||||
const limit = options.max_results ?? 5;
|
||||
|
||||
// LanceDB JS SDK: table.vectorSearch(vector).filter(...).limit(...).toArray()
|
||||
let queryBuilder = table.vectorSearch(queryVector);
|
||||
if (whereClause) {
|
||||
queryBuilder = queryBuilder.filter(whereClause);
|
||||
// Try vector search first; if Ollama is down embedQuery throws → fallback to FTS
|
||||
let rows: Record<string, unknown>[];
|
||||
try {
|
||||
const queryVector = await embedQuery(query, config);
|
||||
|
||||
let queryBuilder = table.vectorSearch(queryVector);
|
||||
if (whereClause) {
|
||||
queryBuilder = queryBuilder.filter(whereClause);
|
||||
}
|
||||
rows = await queryBuilder.limit(limit).toArray();
|
||||
} catch {
|
||||
// Ollama unavailable — fallback to full-text search on chunk_text (BM25 scoring)
|
||||
let ftsBuilder = table.query().fullTextSearch(query);
|
||||
if (whereClause) {
|
||||
ftsBuilder = ftsBuilder.filter(whereClause);
|
||||
}
|
||||
rows = await ftsBuilder.limit(limit).toArray();
|
||||
}
|
||||
const rows = await queryBuilder.limit(limit).toArray();
|
||||
|
||||
return rows.map((r: Record<string, unknown>) => ({
|
||||
chunk_id: r["chunk_id"] as string,
|
||||
@@ -95,6 +104,6 @@ export async function searchVectorDb(
|
||||
date: (r["date"] as string) ?? null,
|
||||
tags: (r["tags"] as string[]) ?? [],
|
||||
chunk_index: (r["chunk_index"] as number) ?? 0,
|
||||
score: (r["_distance"] as number) ?? 0.0,
|
||||
score: (r["_score"] as number) ?? (r["_distance"] as number) ?? 0.0,
|
||||
}));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user