import { getWebSearchPrompt } from "~/services/ollama" import { webGoogleSearch } from "./search-engines/google" import { webDuckDuckGoSearch } from "./search-engines/duckduckgo" import { getIsVisitSpecificWebsite, getSearchProvider } from "@/services/search" import { webSogouSearch } from "./search-engines/sogou" import { webBraveSearch } from "./search-engines/brave" import { getWebsiteFromQuery, processSingleWebsite } from "./website" import { searxngSearch } from "./search-engines/searxng" import { braveAPISearch } from "./search-engines/brave-api" import { webBaiduSearch } from "./search-engines/baidu" import { searchIod } from "./iod" import type { IodRegistryEntry } from "~/types/iod" const getHostName = (url: string) => { try { const hostname = new URL(url).hostname return hostname } catch (e) { return "" } } const searchWeb = (provider: string, query: string) => { switch (provider) { case "duckduckgo": return webDuckDuckGoSearch(query) case "sogou": return webSogouSearch(query) case "brave": return webBraveSearch(query) case "searxng": return searxngSearch(query) case "brave-api": return braveAPISearch(query) case "baidu": return webBaiduSearch(query) default: return webGoogleSearch(query) } } export const getSystemPromptForWeb = async ( query: string, keywords: string[] = [], webSearch = true, iodSearch = false ) => { try { const websiteVisit = getWebsiteFromQuery(query) let webSearchResults: { url: any content: string }[] = [] // let search_results_web = "" if (webSearch) { const isVisitSpecificWebsite = await getIsVisitSpecificWebsite() if (isVisitSpecificWebsite && websiteVisit.hasUrl) { const url = websiteVisit.url const queryWithoutUrl = websiteVisit.queryWithouUrls webSearchResults = await processSingleWebsite(url, queryWithoutUrl) } else { const searchProvider = await getSearchProvider() webSearchResults = await searchWeb(searchProvider, query) } // search_results_web = webSearchResults // .map( // (result, idx) => // `${result.content}` // ) // .join("\n") } let iodSearchResults: IodRegistryEntry[] = [] // let search_results_iod = "" if (iodSearch) { iodSearchResults = await searchIod(query, keywords) // search_results_iod = iodSearchResults // .map( // (result, idx) => // `${result.content}` // ) // .join("\n") } const iod_search_results = iodSearchResults .map((res) => ({ url: `${res.url}`, content: res.content || res.description })) .map( (result, idx) => `${result.content}` ) .join("\n") console.log("iod_search_result:" + iod_search_results) const web_search_results = webSearchResults .map( (result, idx) => `${result.content}` ) .join("\n") const search_results = (iodSearch ? "<数联网搜索结果>" + iod_search_results + "" : "") + (webSearch ? "<万维网搜索结果>" + web_search_results + "" : "") const current_date_time = new Date().toLocaleString() const system = await getWebSearchPrompt() const prompt = system .replace("{current_date_time}", current_date_time) .replace("{search_results}", search_results) return { prompt, webSources: webSearchResults.map((result) => { return { url: result.url, name: getHostName(result.url), type: "url" } }), iodSources: iodSearchResults } } catch (e) { console.error(e) return { prompt: "", source: [] } } }