File size: 2,649 Bytes
676fc08 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | import { useSettingStore } from "@/store/setting";
import {
createSearchProvider,
type SearchProviderOptions,
} from "@/utils/deep-research/search";
import { multiApiKeyPolling } from "@/utils/model";
import { generateSignature } from "@/utils/signature";
function useWebSearch() {
async function search(query: string) {
const { mode, searchProvider, searchMaxResult, accessPassword } =
useSettingStore.getState();
const options: SearchProviderOptions = {
provider: searchProvider,
maxResult: searchMaxResult,
query,
};
switch (searchProvider) {
case "tavily":
const { tavilyApiKey, tavilyApiProxy, tavilyScope } =
useSettingStore.getState();
if (mode === "local") {
options.baseURL = tavilyApiProxy;
options.apiKey = multiApiKeyPolling(tavilyApiKey);
} else {
options.baseURL = location.origin + "/api/search/tavily";
}
options.scope = tavilyScope;
break;
case "firecrawl":
const { firecrawlApiKey, firecrawlApiProxy } =
useSettingStore.getState();
if (mode === "local") {
options.baseURL = firecrawlApiProxy;
options.apiKey = multiApiKeyPolling(firecrawlApiKey);
} else {
options.baseURL = location.origin + "/api/search/firecrawl";
}
break;
case "exa":
const { exaApiKey, exaApiProxy, exaScope } = useSettingStore.getState();
if (mode === "local") {
options.baseURL = exaApiProxy;
options.apiKey = multiApiKeyPolling(exaApiKey);
} else {
options.baseURL = location.origin + "/api/search/exa";
}
options.scope = exaScope;
break;
case "bocha":
const { bochaApiKey, bochaApiProxy } = useSettingStore.getState();
if (mode === "local") {
options.baseURL = bochaApiProxy;
options.apiKey = multiApiKeyPolling(bochaApiKey);
} else {
options.baseURL = location.origin + "/api/search/bocha";
}
break;
case "searxng":
const { searxngApiProxy, searxngScope } = useSettingStore.getState();
if (mode === "local") {
options.baseURL = searxngApiProxy;
} else {
options.baseURL = location.origin + "/api/search/searxng";
}
options.scope = searxngScope;
break;
default:
break;
}
if (mode === "proxy") {
options.apiKey = generateSignature(accessPassword, Date.now());
}
return createSearchProvider(options);
}
return { search };
}
export default useWebSearch;
|