From 62ffe8346e6210ebd9b295ed2c6f494f5b5a40ef Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Sun, 12 May 2024 21:14:27 +0530 Subject: [PATCH] chore: Update logic of runtime url rewrite --- bun.lockb | Bin 408050 -> 408050 bytes docs/connection-issue.md | 1 + .../Common/AdvanceOllamaSettings.tsx | 49 +++++++++++++ src/components/Option/Settings/ollama.tsx | 66 +++++++++++++----- src/libs/runtime.ts | 19 +++-- src/loader/html.ts | 4 +- src/services/app.ts | 27 +++++-- src/services/ollama.ts | 8 +-- src/web/search-engines/duckduckgo.ts | 4 +- src/web/search-engines/google.ts | 4 +- src/web/search-engines/sogou.ts | 4 +- 11 files changed, 148 insertions(+), 38 deletions(-) create mode 100644 docs/connection-issue.md create mode 100644 src/components/Common/AdvanceOllamaSettings.tsx diff --git a/bun.lockb b/bun.lockb index 11bd10c885c60add1bcbc85a7861b8eb65824abf..c6cbef9f5c016fc5a384a6a4834d305e8a188216 100644 GIT binary patch delta 39 tcmezLS>n@YiG~)&7N!>FEiB7**%{-^^$hfk+t=x`05R+Kb-HXWJODY~4XOYD delta 39 qcmezLS>n@YiG~)&7N!>FEiB7**_jx?pnaV#3lOtzU#H9F!UF&zJq%X> diff --git a/docs/connection-issue.md b/docs/connection-issue.md new file mode 100644 index 0000000..d2190d8 --- /dev/null +++ b/docs/connection-issue.md @@ -0,0 +1 @@ +# Ollama Connection Issues diff --git a/src/components/Common/AdvanceOllamaSettings.tsx b/src/components/Common/AdvanceOllamaSettings.tsx new file mode 100644 index 0000000..0291f16 --- /dev/null +++ b/src/components/Common/AdvanceOllamaSettings.tsx @@ -0,0 +1,49 @@ +import { useStorage } from "@plasmohq/storage/hook" +import { Input, Switch } from "antd" +import { useTranslation } from "react-i18next" + +export const AdvanceOllamaSettings = () => { + const [urlRewriteEnabled, setUrlRewriteEnabled] = useStorage( + "urlRewriteEnabled", + true + ) + + const [rewriteUrl, setRewriteUrl] = useStorage( + "rewriteUrl", + "http://127.0.0.1:11434" + ) + const { t } = useTranslation("settings") + + return ( +
+
+ + {t("generalSettings.settings.advanced.urlRewriteEnabled.label")} + +
+ setUrlRewriteEnabled(checked)} + /> +
+
+
+ + {t("generalSettings.settings.advanced.urlRewriteEnabled.label")} + +
+ setRewriteUrl(e.target.value)} + /> +
+
+
+ ) +} diff --git a/src/components/Option/Settings/ollama.tsx b/src/components/Option/Settings/ollama.tsx index e71045b..534b8a0 100644 --- a/src/components/Option/Settings/ollama.tsx +++ b/src/components/Option/Settings/ollama.tsx @@ -1,5 +1,5 @@ import { useMutation, useQuery } from "@tanstack/react-query" -import { Form, InputNumber, Select, Skeleton } from "antd" +import { Collapse, Form, InputNumber, Select, Skeleton } from "antd" import { useState } from "react" import { SaveButton } from "~/components/Common/SaveButton" import { @@ -13,9 +13,12 @@ import { } from "~/services/ollama" import { SettingPrompt } from "./prompt" import { useTranslation } from "react-i18next" +import { useStorage } from "@plasmohq/storage/hook" +import { AdvanceOllamaSettings } from "@/components/Common/AdvanceOllamaSettings" export const SettingsOllama = () => { const [ollamaURL, setOllamaURL] = useState("") + const { t } = useTranslation("settings") const { data: ollamaInfo, status } = useQuery({ @@ -61,7 +64,7 @@ export const SettingsOllama = () => {
-
+
+ + {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()