import { config } from "../config/index.js"; import { embedTexts } from "./ollamaClient.js"; import { qdrant } from "./qdrantClient.js"; export async function searchDocs({ query, topK, embedRole = "query", minScore, collectionName = config.qdrant.collection, embeddingsModel }) { const [vector] = await embedTexts([query], { role: embedRole, model: embeddingsModel }); let result; try { result = await qdrant.search(collectionName, { vector, limit: topK ?? config.rag.topK, score_threshold: minScore ?? config.rag.minScore, with_payload: true, with_vector: false }); } catch (err) { const status = err?.status ?? err?.statusCode ?? err?.response?.status ?? null; if (Number(status) === 404) return []; throw err; } return (result ?? []) .map((r) => ({ score: r.score, id: r.id, text: r.payload?.text ?? "", source: r.payload?.source ?? null, chunkIndex: r.payload?.chunkIndex ?? null, metadata: r.payload?.metadata ?? null })); }