+ {t("ollamaSettings.settings.advanced.label")}
+
+ ),
+ children:
+ }
+ ]}
+ />
+
{
@@ -130,7 +148,9 @@ export const SettingsOllama = () => {
0
}
showSearch
- placeholder={t("ollamaSettings.settings.ragSettings.model.placeholder")}
+ placeholder={t(
+ "ollamaSettings.settings.ragSettings.model.placeholder"
+ )}
style={{ width: "100%" }}
className="mt-4"
options={ollamaInfo.models?.map((model) => ({
@@ -143,27 +163,39 @@ export const SettingsOllama = () => {
-
-
-
+
+
+
diff --git a/src/libs/runtime.ts b/src/libs/runtime.ts
index ce447f6..cf4aa96 100644
--- a/src/libs/runtime.ts
+++ b/src/libs/runtime.ts
@@ -1,8 +1,15 @@
-export const chromeRunTime = async function (domain: string) {
+import { getAdvancedOllamaSettings } from "@/services/app"
+
+export const urlRewriteRuntime = async function (domain: string) {
if (browser.runtime && browser.runtime.id) {
+ const { isEnableRewriteUrl, rewriteUrl } = await getAdvancedOllamaSettings()
if (import.meta.env.BROWSER === "chrome") {
const url = new URL(domain)
const domains = [url.hostname]
+ let origin = `${url.protocol}//${url.hostname}`
+ if (!isEnableRewriteUrl && rewriteUrl) {
+ origin = rewriteUrl
+ }
const rules = [
{
id: 1,
@@ -16,13 +23,12 @@ export const chromeRunTime = async function (domain: string) {
{
header: "Origin",
operation: "set",
- value: `${url.protocol}//${url.hostname}`
+ value: origin
}
]
}
}
]
-
await browser.declarativeNetRequest.updateDynamicRules({
removeRuleIds: rules.map((r) => r.id),
// @ts-ignore
@@ -35,10 +41,13 @@ export const chromeRunTime = async function (domain: string) {
const domains = [`*://${url.hostname}/*`]
browser.webRequest.onBeforeSendHeaders.addListener(
(details) => {
+ let origin = `${url.protocol}//${url.hostname}`
+ if (!isEnableRewriteUrl && rewriteUrl) {
+ origin = rewriteUrl
+ }
for (let i = 0; i < details.requestHeaders.length; i++) {
if (details.requestHeaders[i].name === "Origin") {
- details.requestHeaders[i].value =
- `${url.protocol}//${url.hostname}`
+ details.requestHeaders[i].value = origin
}
}
return { requestHeaders: details.requestHeaders }
diff --git a/src/loader/html.ts b/src/loader/html.ts
index 94eaed0..37a07f1 100644
--- a/src/loader/html.ts
+++ b/src/loader/html.ts
@@ -1,7 +1,7 @@
import { BaseDocumentLoader } from "langchain/document_loaders/base"
import { Document } from "@langchain/core/documents"
import { compile } from "html-to-text"
-import { chromeRunTime } from "~/libs/runtime"
+import { urlRewriteRuntime } from "~/libs/runtime"
import { YtTranscript } from "yt-transcript"
import { isWikipedia, parseWikipedia } from "@/parser/wiki"
@@ -102,7 +102,7 @@ export class PageAssistHtmlLoader
}
]
}
- await chromeRunTime(this.url)
+ await urlRewriteRuntime(this.url)
const fetchHTML = await fetch(this.url)
let html = await fetchHTML.text()
diff --git a/src/services/app.ts b/src/services/app.ts
index e9d0cbb..3b0f671 100644
--- a/src/services/app.ts
+++ b/src/services/app.ts
@@ -1,20 +1,39 @@
import { Storage } from "@plasmohq/storage"
const storage = new Storage()
-export const isUrlRewriteEnabled = async () => {
- const enabled = await storage.get("urlRewriteEnabled")
- return enabled === "true"
-}
+const DEFAULT_URL_REWRITE_URL = "http://127.0.0.1:11434"
+export const isUrlRewriteEnabled = async () => {
+ const enabled = await storage.get("urlRewriteEnabled")
+ if (typeof enabled === "undefined") {
+ return true
+ }
+ return enabled
+}
export const setUrlRewriteEnabled = async (enabled: boolean) => {
await storage.set("urlRewriteEnabled", enabled ? "true" : "false")
}
export const getRewriteUrl = async () => {
const rewriteUrl = await storage.get("rewriteUrl")
+ if (!rewriteUrl || rewriteUrl.trim() === "") {
+ return DEFAULT_URL_REWRITE_URL
+ }
return rewriteUrl
}
export const setRewriteUrl = async (url: string) => {
await storage.set("rewriteUrl", url)
}
+
+export const getAdvancedOllamaSettings = async () => {
+ const [isEnableRewriteUrl, rewriteUrl] = await Promise.all([
+ isUrlRewriteEnabled(),
+ getRewriteUrl()
+ ])
+
+ return {
+ isEnableRewriteUrl,
+ rewriteUrl
+ }
+}
diff --git a/src/services/ollama.ts b/src/services/ollama.ts
index ccca697..e1ce53b 100644
--- a/src/services/ollama.ts
+++ b/src/services/ollama.ts
@@ -1,6 +1,6 @@
import { Storage } from "@plasmohq/storage"
import { cleanUrl } from "../libs/clean-url"
-import { chromeRunTime } from "../libs/runtime"
+import { urlRewriteRuntime } from "../libs/runtime"
const storage = new Storage()
@@ -22,10 +22,10 @@ Search results:
export const getOllamaURL = async () => {
const ollamaURL = await storage.get("ollamaURL")
if (!ollamaURL || ollamaURL.length === 0) {
- await chromeRunTime(DEFAULT_OLLAMA_URL)
+ await urlRewriteRuntime(DEFAULT_OLLAMA_URL)
return DEFAULT_OLLAMA_URL
}
- await chromeRunTime(cleanUrl(ollamaURL))
+ await urlRewriteRuntime(cleanUrl(ollamaURL))
return ollamaURL
}
@@ -163,7 +163,7 @@ export const setOllamaURL = async (ollamaURL: string) => {
"http://127.0.0.1:"
)
}
- await chromeRunTime(cleanUrl(formattedUrl))
+ await urlRewriteRuntime(cleanUrl(formattedUrl))
await storage.set("ollamaURL", cleanUrl(formattedUrl))
}
diff --git a/src/web/search-engines/duckduckgo.ts b/src/web/search-engines/duckduckgo.ts
index 089e571..f9258f5 100644
--- a/src/web/search-engines/duckduckgo.ts
+++ b/src/web/search-engines/duckduckgo.ts
@@ -1,5 +1,5 @@
import { cleanUrl } from "@/libs/clean-url"
-import { chromeRunTime } from "@/libs/runtime"
+import { urlRewriteRuntime } from "@/libs/runtime"
import { PageAssistHtmlLoader } from "@/loader/html"
import {
defaultEmbeddingChunkOverlap,
@@ -18,7 +18,7 @@ import { RecursiveCharacterTextSplitter } from "langchain/text_splitter"
import { MemoryVectorStore } from "langchain/vectorstores/memory"
export const localDuckDuckGoSearch = async (query: string) => {
- await chromeRunTime(cleanUrl("https://html.duckduckgo.com/html/?q=" + query))
+ await urlRewriteRuntime(cleanUrl("https://html.duckduckgo.com/html/?q=" + query))
const abortController = new AbortController()
setTimeout(() => abortController.abort(), 10000)
diff --git a/src/web/search-engines/google.ts b/src/web/search-engines/google.ts
index 98fa2a8..7828546 100644
--- a/src/web/search-engines/google.ts
+++ b/src/web/search-engines/google.ts
@@ -7,7 +7,7 @@ import type { Document } from "@langchain/core/documents"
import { RecursiveCharacterTextSplitter } from "langchain/text_splitter"
import { MemoryVectorStore } from "langchain/vectorstores/memory"
import { cleanUrl } from "~/libs/clean-url"
-import { chromeRunTime } from "~/libs/runtime"
+import { urlRewriteRuntime } from "~/libs/runtime"
import { PageAssistHtmlLoader } from "~/loader/html"
import {
defaultEmbeddingChunkOverlap,
@@ -18,7 +18,7 @@ import {
export const localGoogleSearch = async (query: string) => {
- await chromeRunTime(
+ await urlRewriteRuntime(
cleanUrl("https://www.google.com/search?hl=en&q=" + query)
)
const abortController = new AbortController()
diff --git a/src/web/search-engines/sogou.ts b/src/web/search-engines/sogou.ts
index ffa7e6f..14fcf86 100644
--- a/src/web/search-engines/sogou.ts
+++ b/src/web/search-engines/sogou.ts
@@ -1,5 +1,5 @@
import { cleanUrl } from "@/libs/clean-url"
-import { chromeRunTime } from "@/libs/runtime"
+import { urlRewriteRuntime } from "@/libs/runtime"
import { PageAssistHtmlLoader } from "@/loader/html"
import {
defaultEmbeddingChunkOverlap,
@@ -25,7 +25,7 @@ const getCorrectTargeUrl = async (url: string) => {
return matches?.[1] || ""
}
export const localSogouSearch = async (query: string) => {
- await chromeRunTime(cleanUrl("https://www.sogou.com/web?query=" + query))
+ await urlRewriteRuntime(cleanUrl("https://www.sogou.com/web?query=" + query))
const abortController = new AbortController()