2024-03-23 14:44:05 +05:30
|
|
|
import { getWebSearchPrompt } from "~/services/ollama"
|
2024-04-28 00:36:33 +05:30
|
|
|
import { webGoogleSearch } from "./search-engines/google"
|
|
|
|
|
import { webDuckDuckGoSearch } from "./search-engines/duckduckgo"
|
feat: Add localization support for visitSpecificWebsite label
This commit adds localization support for the "visitSpecificWebsite" label in the settings.json file for multiple languages. Now, the label can be translated into different languages, including Japanese, Chinese, English, Malayalam, Italian, Portuguese, Russian, French, and Spanish.
2024-06-22 16:55:02 +05:30
|
|
|
import { getIsVisitSpecificWebsite, getSearchProvider } from "@/services/search"
|
2024-04-28 00:36:33 +05:30
|
|
|
import { webSogouSearch } from "./search-engines/sogou"
|
2024-05-24 00:22:24 +05:30
|
|
|
import { webBraveSearch } from "./search-engines/brave"
|
2024-06-22 00:25:12 +05:30
|
|
|
import { getWebsiteFromQuery, processSingleWebsite } from "./website"
|
2024-12-01 00:23:17 +05:30
|
|
|
import { searxngSearch } from "./search-engines/searxng"
|
2024-12-13 20:03:52 +05:30
|
|
|
import { braveAPISearch } from "./search-engines/brave-api"
|
2025-02-01 11:22:12 +05:30
|
|
|
import { webBaiduSearch } from "./search-engines/baidu"
|
2025-02-14 18:17:12 +08:00
|
|
|
import { searchIod } from "./iod"
|
2025-02-14 23:24:27 +08:00
|
|
|
import type { IodRegistryEntry } from "~/types/iod"
|
2024-02-25 18:44:47 +05:30
|
|
|
|
2024-03-16 14:28:32 +05:30
|
|
|
const getHostName = (url: string) => {
|
2024-03-31 15:57:56 +05:30
|
|
|
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)
|
2024-04-28 00:36:33 +05:30
|
|
|
case "sogou":
|
|
|
|
|
return webSogouSearch(query)
|
2024-05-24 00:22:24 +05:30
|
|
|
case "brave":
|
|
|
|
|
return webBraveSearch(query)
|
2024-12-01 00:23:17 +05:30
|
|
|
case "searxng":
|
|
|
|
|
return searxngSearch(query)
|
2024-12-13 20:03:52 +05:30
|
|
|
case "brave-api":
|
|
|
|
|
return braveAPISearch(query)
|
2025-02-01 11:22:12 +05:30
|
|
|
case "baidu":
|
|
|
|
|
return webBaiduSearch(query)
|
2024-03-31 15:57:56 +05:30
|
|
|
default:
|
|
|
|
|
return webGoogleSearch(query)
|
|
|
|
|
}
|
2024-03-16 14:28:32 +05:30
|
|
|
}
|
|
|
|
|
|
2025-02-14 18:17:12 +08:00
|
|
|
export const getSystemPromptForWeb = async (
|
|
|
|
|
query: string,
|
|
|
|
|
keywords: string[] = [],
|
|
|
|
|
webSearch = true,
|
|
|
|
|
iodSearch = false
|
|
|
|
|
) => {
|
2024-03-31 15:57:56 +05:30
|
|
|
try {
|
2024-06-22 00:25:12 +05:30
|
|
|
const websiteVisit = getWebsiteFromQuery(query)
|
2025-02-14 18:17:12 +08:00
|
|
|
let webSearchResults: {
|
|
|
|
|
url: any
|
|
|
|
|
content: string
|
2024-06-22 00:25:12 +05:30
|
|
|
}[] = []
|
2025-02-14 18:17:12 +08:00
|
|
|
// let search_results_web = ""
|
2024-06-22 00:25:12 +05:30
|
|
|
|
2025-02-14 18:17:12 +08:00
|
|
|
if (webSearch) {
|
|
|
|
|
const isVisitSpecificWebsite = await getIsVisitSpecificWebsite()
|
2024-06-22 00:25:12 +05:30
|
|
|
|
2025-02-14 18:17:12 +08:00
|
|
|
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)
|
|
|
|
|
}
|
2024-06-22 00:25:12 +05:30
|
|
|
|
2025-02-14 18:17:12 +08:00
|
|
|
// search_results_web = webSearchResults
|
|
|
|
|
// .map(
|
|
|
|
|
// (result, idx) =>
|
|
|
|
|
// `<result source="${result.url}" id="${idx}">${result.content}</result>`
|
|
|
|
|
// )
|
|
|
|
|
// .join("\n")
|
2024-06-22 00:25:12 +05:30
|
|
|
}
|
|
|
|
|
|
2025-02-14 23:24:27 +08:00
|
|
|
let iodSearchResults: IodRegistryEntry[] = []
|
2025-02-14 18:17:12 +08:00
|
|
|
// let search_results_iod = ""
|
|
|
|
|
|
|
|
|
|
if (iodSearch) {
|
|
|
|
|
iodSearchResults = await searchIod(query, keywords)
|
|
|
|
|
// search_results_iod = iodSearchResults
|
|
|
|
|
// .map(
|
|
|
|
|
// (result, idx) =>
|
|
|
|
|
// `<result source="${result.url}" id="${idx}">${result.content}</result>`
|
|
|
|
|
// )
|
|
|
|
|
// .join("\n")
|
|
|
|
|
}
|
2025-02-15 13:02:24 +08:00
|
|
|
const iod_search_results = iodSearchResults.map((res) => ({
|
2025-02-14 18:17:12 +08:00
|
|
|
url: `${res.doId}: ${res.name}`,
|
|
|
|
|
content: res.description
|
2025-02-15 13:02:24 +08:00
|
|
|
})).map(
|
|
|
|
|
(result, idx) =>
|
|
|
|
|
`<result source="${result.url}" id="${idx}">${result.content}</result>`
|
|
|
|
|
)
|
|
|
|
|
.join("\n");
|
|
|
|
|
console.log("iod_search_result:"+iod_search_results);
|
|
|
|
|
const web_search_results = webSearchResults.map(
|
|
|
|
|
(result, idx) =>
|
|
|
|
|
`<result source="${result.url}" id="${idx}">${result.content}</result>`
|
|
|
|
|
)
|
|
|
|
|
.join("\n");
|
|
|
|
|
const search_results = (iodSearch?"<数联网搜索结果>"+iod_search_results+"</数联网搜索结果>":"")
|
|
|
|
|
+ (webSearch?"<万维网搜索结果>"+web_search_results+"</万维网搜索结果>":"");
|
2024-02-25 18:44:47 +05:30
|
|
|
|
2024-03-31 15:57:56 +05:30
|
|
|
const current_date_time = new Date().toLocaleString()
|
2024-02-25 18:44:47 +05:30
|
|
|
|
2024-03-31 15:57:56 +05:30
|
|
|
const system = await getWebSearchPrompt()
|
2024-02-25 18:44:47 +05:30
|
|
|
|
2024-03-31 15:57:56 +05:30
|
|
|
const prompt = system
|
|
|
|
|
.replace("{current_date_time}", current_date_time)
|
|
|
|
|
.replace("{search_results}", search_results)
|
2024-02-25 18:44:47 +05:30
|
|
|
|
2024-03-31 15:57:56 +05:30
|
|
|
return {
|
|
|
|
|
prompt,
|
2025-02-14 18:17:12 +08:00
|
|
|
webSources: webSearchResults.map((result) => {
|
2024-02-25 21:17:27 +05:30
|
|
|
return {
|
2024-03-31 15:57:56 +05:30
|
|
|
url: result.url,
|
|
|
|
|
name: getHostName(result.url),
|
|
|
|
|
type: "url"
|
2024-02-25 21:17:27 +05:30
|
|
|
}
|
2025-02-14 18:17:12 +08:00
|
|
|
}),
|
|
|
|
|
iodSources: iodSearchResults,
|
2024-03-31 15:57:56 +05:30
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.error(e)
|
|
|
|
|
return {
|
|
|
|
|
prompt: "",
|
|
|
|
|
source: []
|
2024-02-25 18:44:47 +05:30
|
|
|
}
|
2024-03-31 15:57:56 +05:30
|
|
|
}
|
|
|
|
|
}
|