Skip to content

Commit 4b662ec

Browse files
committed
use backend search
1 parent 25be589 commit 4b662ec

File tree

1 file changed

+3
-63
lines changed
  • client/knowledge-retrieval/compliai

1 file changed

+3
-63
lines changed

client/knowledge-retrieval/compliai/utils.js

+3-63
Original file line numberDiff line numberDiff line change
@@ -2,69 +2,9 @@ import mammoth from "mammoth";
22
import * as unpdf from "unpdf";
33

44
export async function search({ keywords, maxResults = 10 }) {
5-
const results = [];
6-
let formData = new URLSearchParams();
7-
formData.append("q", keywords);
8-
9-
while (results.length < maxResults) {
10-
const response = await fetch(`/api/proxy?url=https://html.duckduckgo.com/html/?q=${keywords}`);
11-
const html = await response.text();
12-
const parser = new DOMParser();
13-
const document = parser.parseFromString(html, "text/html");
14-
15-
// Get results
16-
const elements = document.querySelectorAll("#links .web-result");
17-
const pageResults = [];
18-
19-
for (const el of elements) {
20-
if (results.length >= maxResults) break;
21-
22-
const titleEl = el.querySelector(".result__title");
23-
const snippetEl = el.querySelector(".result__snippet");
24-
const linkEl = el.querySelector(".result__url");
25-
26-
if (titleEl && linkEl) {
27-
const ddgUrl = new URL(linkEl.href, "https://duckduckgo.com");
28-
const realUrl = ddgUrl.pathname === "/l/" ? new URLSearchParams(ddgUrl.search).get("uddg") : linkEl.href;
29-
30-
pageResults.push({
31-
title: titleEl?.textContent?.trim(),
32-
url: decodeURIComponent(realUrl),
33-
snippet: snippetEl?.textContent?.trim(),
34-
// headers: Object.fromEntries(response.headers),
35-
});
36-
}
37-
}
38-
39-
// Fetch all page contents in parallel
40-
const processedResults = await Promise.all(
41-
pageResults.map(async (result) => ({
42-
...result,
43-
body: await getWebsiteText({ url: result.url }),
44-
}))
45-
);
46-
47-
results.push(...processedResults);
48-
49-
// Get next page data
50-
const form = document.querySelector("#links form");
51-
if (!form) break;
52-
53-
formData = new URLSearchParams();
54-
form.querySelectorAll("input").forEach((input) => {
55-
formData.append(input.name, input.value);
56-
});
57-
58-
if (!form || elements.length === 0) break;
59-
}
60-
61-
// retry in case of proxy error
62-
if (!results.length || (results.length === 1 && !results[0].title.trim().length)) {
63-
await new Promise((resolve) => setTimeout(resolve, 2000));
64-
return await search({ keywords, maxResults });
65-
}
66-
67-
return results;
5+
const queryParams = new URLSearchParams({ q: keywords, limit: maxResults });
6+
const response = await fetch('/api/search?' + queryParams);
7+
return await response.json();
688
}
699

7010
export async function getWebsiteText({ url, expandUrls = false }) {

0 commit comments

Comments
 (0)