searchChat.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. import { config } from "../src/config/index.js";
  2. import { embedTexts } from "../src/services/ollamaClient.js";
  3. import { qdrant } from "../src/services/qdrantClient.js";
  4. function isRefusalText(text) {
  5. const t = String(text ?? "").toLowerCase();
  6. return (
  7. t.includes("desculpe") &&
  8. (t.includes("não posso") || t.includes("nao posso") || t.includes("não posso fornecer") || t.includes("nao posso fornecer"))
  9. );
  10. }
  11. export async function searchDocs({ query, topK }) {
  12. const collectionName = config.qdrant.collection;
  13. const [vector] = await embedTexts([query]);
  14. const result = await qdrant.search(collectionName, {
  15. vector,
  16. limit: topK ?? config.rag.topK,
  17. with_payload: true,
  18. with_vector: false
  19. });
  20. return (result ?? [])
  21. .map((r) => ({
  22. score: r.score,
  23. id: r.id,
  24. text: r.payload?.text ?? "",
  25. source: r.payload?.source ?? null,
  26. chunkIndex: r.payload?.chunkIndex ?? null,
  27. metadata: r.payload?.metadata ?? null
  28. }))
  29. .filter((h) => !isRefusalText(h.text));
  30. }