diff --git a/src/components/Option/Settings/general-settings.tsx b/src/components/Option/Settings/general-settings.tsx
index f615236..c471fd4 100644
--- a/src/components/Option/Settings/general-settings.tsx
+++ b/src/components/Option/Settings/general-settings.tsx
@@ -27,6 +27,11 @@ export const GeneralSettings = () => {
false
)
+ const [webUIResumeLastChat, setWebUIResumeLastChat] = useStorage(
+ "webUIResumeLastChat",
+ false
+ )
+
const [restoreLastChatModel, setRestoreLastChatModel] = useStorage(
"restoreLastChatModel",
false
@@ -113,6 +118,17 @@ export const GeneralSettings = () => {
onChange={(checked) => setCopilotResumeLastChat(checked)}
/>
diff --git a/src/db/index.ts b/src/db/index.ts
index da837b2..6cab3ef 100644
--- a/src/db/index.ts
+++ b/src/db/index.ts
@@ -356,11 +356,11 @@ export const updateMessageByIndex = async (
message: string
) => {
try {
- const db = new PageAssitDatabase()
- const chatHistory = (await db.getChatHistory(history_id)).reverse()
- chatHistory[index].content = message
- await db.db.set({ [history_id]: chatHistory.reverse() })
- } catch(e) {
+ const db = new PageAssitDatabase()
+ const chatHistory = (await db.getChatHistory(history_id)).reverse()
+ chatHistory[index].content = message
+ await db.db.set({ [history_id]: chatHistory.reverse() })
+ } catch (e) {
// temp chat will break
}
}
@@ -515,6 +515,20 @@ export const getRecentChatFromCopilot = async () => {
return { history, messages }
}
+export const getRecentChatFromWebUI = async () => {
+ const db = new PageAssitDatabase()
+ const chatHistories = await db.getChatHistories()
+ if (chatHistories.length === 0) return null
+ const history = chatHistories.find(
+ (history) => history.message_source === "web-ui"
+ )
+ if (!history) return null
+
+ const messages = await db.getChatHistory(history.id)
+
+ return { history, messages }
+}
+
export const getTitleById = async (id: string) => {
const db = new PageAssitDatabase()
const title = await db.getChatHistoryTitleById(id)
diff --git a/src/services/app.ts b/src/services/app.ts
index bbae388..647abab 100644
--- a/src/services/app.ts
+++ b/src/services/app.ts
@@ -39,6 +39,10 @@ export const copilotResumeLastChat = async () => {
return await storage.get("copilotResumeLastChat")
}
+export const webUIResumeLastChat = async () => {
+ return await storage.get("webUIResumeLastChat")
+}
+
export const defaultSidebarOpen = async () => {
const sidebarOpen = await storage.get("sidebarOpen")
if (!sidebarOpen || sidebarOpen === "") {
From 6d80798da9ecc5384bc2377c0769fd2ee676af92 Mon Sep 17 00:00:00 2001
From: n4ze3m
Date: Sat, 30 Nov 2024 20:17:03 +0530
Subject: [PATCH 04/11] feat: Add useMMap option to model settings
---
src/assets/locale/en/common.json | 3 ++
.../Settings/CurrentChatModelSettings.tsx | 15 +++++++---
.../Option/Settings/model-settings.tsx | 25 +++++++++-------
src/hooks/useMessage.tsx | 30 ++++++++++++++-----
src/hooks/useMessageOption.tsx | 22 ++++++++++----
src/models/index.ts | 5 +++-
6 files changed, 72 insertions(+), 28 deletions(-)
diff --git a/src/assets/locale/en/common.json b/src/assets/locale/en/common.json
index d033144..88c1be5 100644
--- a/src/assets/locale/en/common.json
+++ b/src/assets/locale/en/common.json
@@ -87,6 +87,9 @@
"label": "Top P",
"placeholder": "Enter Top P value (e.g. 0.9, 0.95)"
},
+ "useMMap": {
+ "label": "useMmap"
+ },
"numGpu": {
"label": "Num GPU",
"placeholder": "Enter number of layers to send to GPU(s)"
diff --git a/src/components/Common/Settings/CurrentChatModelSettings.tsx b/src/components/Common/Settings/CurrentChatModelSettings.tsx
index e950bd9..2914266 100644
--- a/src/components/Common/Settings/CurrentChatModelSettings.tsx
+++ b/src/components/Common/Settings/CurrentChatModelSettings.tsx
@@ -10,7 +10,8 @@ import {
Input,
InputNumber,
Modal,
- Skeleton
+ Skeleton,
+ Switch
} from "antd"
import React from "react"
import { useTranslation } from "react-i18next"
@@ -35,7 +36,7 @@ export const CurrentChatModelSettings = ({
queryFn: async () => {
const data = await getAllModelSettings()
- let tempSystemPrompt = "";
+ let tempSystemPrompt = ""
// i hate this method but i need this feature so badly that i need to do this
if (selectedSystemPrompt) {
@@ -52,7 +53,8 @@ export const CurrentChatModelSettings = ({
seed: cUserSettings.seed,
numGpu: cUserSettings.numGpu ?? data.numGpu,
numPredict: cUserSettings.numPredict ?? data.numPredict,
- systemPrompt: cUserSettings.systemPrompt ?? tempSystemPrompt
+ systemPrompt: cUserSettings.systemPrompt ?? tempSystemPrompt,
+ useMMap: cUserSettings.useMMap ?? data.useMMap
})
return data
},
@@ -61,7 +63,6 @@ export const CurrentChatModelSettings = ({
refetchOnWindowFocus: false
})
-
const renderBody = () => {
return (
<>
@@ -176,6 +177,12 @@ export const CurrentChatModelSettings = ({
)}
/>
+
+
+
+
)
}
diff --git a/src/components/Option/Settings/model-settings.tsx b/src/components/Option/Settings/model-settings.tsx
index 40523f7..18015ba 100644
--- a/src/components/Option/Settings/model-settings.tsx
+++ b/src/components/Option/Settings/model-settings.tsx
@@ -2,7 +2,7 @@ import { BetaTag } from "@/components/Common/Beta"
import { SaveButton } from "@/components/Common/SaveButton"
import { getAllModelSettings, setModelSetting } from "@/services/model-settings"
import { useQuery, useQueryClient } from "@tanstack/react-query"
-import { Form, Skeleton, Input, InputNumber, Collapse } from "antd"
+import { Form, Skeleton, Input, InputNumber, Collapse, Switch } from "antd"
import React from "react"
import { useTranslation } from "react-i18next"
@@ -78,13 +78,13 @@ export const ModelSettings = () => {
/>
-
-
+ name="numPredict"
+ label={t("modelSettings.form.numPredict.label")}>
+
+
{
+
+
+
)
}
diff --git a/src/hooks/useMessage.tsx b/src/hooks/useMessage.tsx
index eb17f3e..806aa94 100644
--- a/src/hooks/useMessage.tsx
+++ b/src/hooks/useMessage.tsx
@@ -139,7 +139,9 @@ export const useMessage = () => {
currentChatModelSettings?.numGpu ?? userDefaultModelSettings?.numGpu,
numPredict:
currentChatModelSettings?.numPredict ??
- userDefaultModelSettings?.numPredict
+ userDefaultModelSettings?.numPredict,
+ useMMap:
+ currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap
})
let newMessage: Message[] = []
@@ -271,7 +273,10 @@ export const useMessage = () => {
userDefaultModelSettings?.numGpu,
numPredict:
currentChatModelSettings?.numPredict ??
- userDefaultModelSettings?.numPredict
+ userDefaultModelSettings?.numPredict,
+ useMMap:
+ currentChatModelSettings?.useMMap ??
+ userDefaultModelSettings?.useMMap
})
const response = await questionOllama.invoke(promptForQuestion)
query = response.content.toString()
@@ -482,7 +487,9 @@ export const useMessage = () => {
currentChatModelSettings?.numGpu ?? userDefaultModelSettings?.numGpu,
numPredict:
currentChatModelSettings?.numPredict ??
- userDefaultModelSettings?.numPredict
+ userDefaultModelSettings?.numPredict,
+ useMMap:
+ currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap
})
let newMessage: Message[] = []
@@ -716,7 +723,9 @@ export const useMessage = () => {
currentChatModelSettings?.numGpu ?? userDefaultModelSettings?.numGpu,
numPredict:
currentChatModelSettings?.numPredict ??
- userDefaultModelSettings?.numPredict
+ userDefaultModelSettings?.numPredict,
+ useMMap:
+ currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap
})
let newMessage: Message[] = []
@@ -944,7 +953,9 @@ export const useMessage = () => {
currentChatModelSettings?.numGpu ?? userDefaultModelSettings?.numGpu,
numPredict:
currentChatModelSettings?.numPredict ??
- userDefaultModelSettings?.numPredict
+ userDefaultModelSettings?.numPredict,
+ useMMap:
+ currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap
})
let newMessage: Message[] = []
@@ -1023,7 +1034,10 @@ export const useMessage = () => {
userDefaultModelSettings?.numGpu,
numPredict:
currentChatModelSettings?.numPredict ??
- userDefaultModelSettings?.numPredict
+ userDefaultModelSettings?.numPredict,
+ useMMap:
+ currentChatModelSettings?.useMMap ??
+ userDefaultModelSettings?.useMMap
})
const response = await questionOllama.invoke(promptForQuestion)
query = response.content.toString()
@@ -1211,7 +1225,9 @@ export const useMessage = () => {
currentChatModelSettings?.numGpu ?? userDefaultModelSettings?.numGpu,
numPredict:
currentChatModelSettings?.numPredict ??
- userDefaultModelSettings?.numPredict
+ userDefaultModelSettings?.numPredict,
+ useMMap:
+ currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap
})
let newMessage: Message[] = []
diff --git a/src/hooks/useMessageOption.tsx b/src/hooks/useMessageOption.tsx
index 322287c..d687344 100644
--- a/src/hooks/useMessageOption.tsx
+++ b/src/hooks/useMessageOption.tsx
@@ -130,7 +130,9 @@ export const useMessageOption = () => {
currentChatModelSettings?.numGpu ?? userDefaultModelSettings?.numGpu,
numPredict:
currentChatModelSettings?.numPredict ??
- userDefaultModelSettings?.numPredict
+ userDefaultModelSettings?.numPredict,
+ useMMap:
+ currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap
})
let newMessage: Message[] = []
@@ -209,7 +211,10 @@ export const useMessageOption = () => {
userDefaultModelSettings?.numGpu,
numPredict:
currentChatModelSettings?.numPredict ??
- userDefaultModelSettings?.numPredict
+ userDefaultModelSettings?.numPredict,
+ useMMap:
+ currentChatModelSettings?.useMMap ??
+ userDefaultModelSettings?.useMMap
})
const response = await questionOllama.invoke(promptForQuestion)
query = response.content.toString()
@@ -429,7 +434,9 @@ export const useMessageOption = () => {
currentChatModelSettings?.numGpu ?? userDefaultModelSettings?.numGpu,
numPredict:
currentChatModelSettings?.numPredict ??
- userDefaultModelSettings?.numPredict
+ userDefaultModelSettings?.numPredict,
+ useMMap:
+ currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap
})
let newMessage: Message[] = []
@@ -667,7 +674,9 @@ export const useMessageOption = () => {
currentChatModelSettings?.numGpu ?? userDefaultModelSettings?.numGpu,
numPredict:
currentChatModelSettings?.numPredict ??
- userDefaultModelSettings?.numPredict
+ userDefaultModelSettings?.numPredict,
+ useMMap:
+ currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap
})
let newMessage: Message[] = []
@@ -762,7 +771,10 @@ export const useMessageOption = () => {
userDefaultModelSettings?.numGpu,
numPredict:
currentChatModelSettings?.numPredict ??
- userDefaultModelSettings?.numPredict
+ userDefaultModelSettings?.numPredict,
+ useMMap:
+ currentChatModelSettings?.useMMap ??
+ userDefaultModelSettings?.useMMap
})
const response = await questionOllama.invoke(promptForQuestion)
query = response.content.toString()
diff --git a/src/models/index.ts b/src/models/index.ts
index 135025f..3481d52 100644
--- a/src/models/index.ts
+++ b/src/models/index.ts
@@ -16,6 +16,7 @@ export const pageAssistModel = async ({
seed,
numGpu,
numPredict,
+ useMMap
}: {
model: string
baseUrl: string
@@ -27,6 +28,7 @@ export const pageAssistModel = async ({
seed?: number
numGpu?: number
numPredict?: number
+ useMMap?: boolean
}) => {
if (model === "chrome::gemini-nano::page-assist") {
@@ -73,7 +75,8 @@ export const pageAssistModel = async ({
seed,
model,
numGpu,
- numPredict
+ numPredict,
+ useMMap,
})
From 138e41e1222bd3cb18217522318dd9a22f939039 Mon Sep 17 00:00:00 2001
From: n4ze3m
Date: Sat, 30 Nov 2024 20:17:31 +0530
Subject: [PATCH 05/11] chore: bump manifest version to 1.3.6
---
wxt.config.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/wxt.config.ts b/wxt.config.ts
index 18b2a44..abf8cda 100644
--- a/wxt.config.ts
+++ b/wxt.config.ts
@@ -50,7 +50,7 @@ export default defineConfig({
outDir: "build",
manifest: {
- version: "1.3.5",
+ version: "1.3.6",
name:
process.env.TARGET === "firefox"
? "Page Assist - A Web UI for Local AI Models"
From c8c71f69cc5ed46aef95ba84d488d7a82698703c Mon Sep 17 00:00:00 2001
From: n4ze3m
Date: Sun, 1 Dec 2024 00:23:17 +0530
Subject: [PATCH 06/11] feat: Add SearXNG search provider and settings
---
src/assets/locale/da/settings.json | 5 +
src/assets/locale/de/settings.json | 5 +
src/assets/locale/en/settings.json | 9 +-
src/assets/locale/es/settings.json | 5 +
src/assets/locale/fa/settings.json | 5 +
src/assets/locale/fr/settings.json | 5 +
src/assets/locale/it/settings.json | 5 +
src/assets/locale/ja-JP/settings.json | 5 +
src/assets/locale/ko/settings.json | 5 +
src/assets/locale/ml/settings.json | 5 +
src/assets/locale/no/settings.json | 5 +
src/assets/locale/pt-BR/settings.json | 5 +
src/assets/locale/ru/settings.json | 5 +
src/assets/locale/sv/settings.json | 5 +
src/assets/locale/uk/settings.json | 5 +
src/assets/locale/zh/settings.json | 5 +
.../Option/Settings/search-mode.tsx | 23 ++-
src/services/search.ts | 41 ++++-
src/utils/search-provider.ts | 4 +
src/web/search-engines/searxng.ts | 145 ++++++++++++++++++
src/web/web.ts | 5 +-
21 files changed, 292 insertions(+), 10 deletions(-)
create mode 100644 src/web/search-engines/searxng.ts
diff --git a/src/assets/locale/da/settings.json b/src/assets/locale/da/settings.json
index 9c16997..37168c4 100644
--- a/src/assets/locale/da/settings.json
+++ b/src/assets/locale/da/settings.json
@@ -65,6 +65,11 @@
},
"visitSpecificWebsite": {
"label": "Besøg websitet nævnt i samtalen"
+ },
+ "searxng": {
+ "url": {
+ "label": "SearXNG URL"
+ }
}
},
"system": {
diff --git a/src/assets/locale/de/settings.json b/src/assets/locale/de/settings.json
index b310307..6315f85 100644
--- a/src/assets/locale/de/settings.json
+++ b/src/assets/locale/de/settings.json
@@ -65,6 +65,11 @@
},
"visitSpecificWebsite": {
"label": "Die in der Nachricht erwähnte Website besuchen"
+ },
+ "searxng": {
+ "url": {
+ "label": "SearXNG-URL"
+ }
}
},
"system": {
diff --git a/src/assets/locale/en/settings.json b/src/assets/locale/en/settings.json
index 7a97966..f0498df 100644
--- a/src/assets/locale/en/settings.json
+++ b/src/assets/locale/en/settings.json
@@ -36,8 +36,8 @@
"generateTitle": {
"label": "Generate Title using AI"
},
- "ollamaStatus" :{
- "label":"Enable or disable Ollama connection status check"
+ "ollamaStatus": {
+ "label": "Enable or disable Ollama connection status check"
}
},
"sidepanelRag": {
@@ -65,6 +65,11 @@
},
"visitSpecificWebsite": {
"label": "Visit the website mentioned in the message"
+ },
+ "searxng": {
+ "url": {
+ "label": "SearXNG URL"
+ }
}
},
"system": {
diff --git a/src/assets/locale/es/settings.json b/src/assets/locale/es/settings.json
index 17db408..eb98d80 100644
--- a/src/assets/locale/es/settings.json
+++ b/src/assets/locale/es/settings.json
@@ -65,6 +65,11 @@
},
"visitSpecificWebsite": {
"label": "Visita el sitio web mencionado en el mensaje"
+ },
+ "searxng": {
+ "url": {
+ "label": "URL de SearXNG"
+ }
}
},
"system": {
diff --git a/src/assets/locale/fa/settings.json b/src/assets/locale/fa/settings.json
index 0a0cde8..985639a 100644
--- a/src/assets/locale/fa/settings.json
+++ b/src/assets/locale/fa/settings.json
@@ -62,6 +62,11 @@
},
"visitSpecificWebsite": {
"label": "مراجعه به وب سایت ذکر شده در پیام"
+ },
+ "searxng": {
+ "url": {
+ "label": "آدرس SearXNG"
+ }
}
},
"system": {
diff --git a/src/assets/locale/fr/settings.json b/src/assets/locale/fr/settings.json
index 18211df..3ef9b49 100644
--- a/src/assets/locale/fr/settings.json
+++ b/src/assets/locale/fr/settings.json
@@ -65,6 +65,11 @@
},
"visitSpecificWebsite": {
"label": "Visitez le site web mentionné dans le message"
+ },
+ "searxng": {
+ "url": {
+ "label": "URL SearXNG"
+ }
}
},
"system": {
diff --git a/src/assets/locale/it/settings.json b/src/assets/locale/it/settings.json
index a88f90a..4e07754 100644
--- a/src/assets/locale/it/settings.json
+++ b/src/assets/locale/it/settings.json
@@ -65,6 +65,11 @@
},
"visitSpecificWebsite": {
"label": "Visita il sito web menzionato nel messaggio"
+ },
+ "searxng": {
+ "url": {
+ "label": "URL SearXNG"
+ }
}
},
"system": {
diff --git a/src/assets/locale/ja-JP/settings.json b/src/assets/locale/ja-JP/settings.json
index bd5266e..d34b63b 100644
--- a/src/assets/locale/ja-JP/settings.json
+++ b/src/assets/locale/ja-JP/settings.json
@@ -68,6 +68,11 @@
},
"visitSpecificWebsite": {
"label": "メッセージに記載されたウェブサイトを訪問してください"
+ },
+ "searxng": {
+ "url": {
+ "label": "SearXNG URL"
+ }
}
},
"system": {
diff --git a/src/assets/locale/ko/settings.json b/src/assets/locale/ko/settings.json
index 4779bdc..73ac857 100644
--- a/src/assets/locale/ko/settings.json
+++ b/src/assets/locale/ko/settings.json
@@ -68,6 +68,11 @@
},
"visitSpecificWebsite": {
"label": "메시지에 언급된 웹사이트 방문"
+ },
+ "searxng": {
+ "url": {
+ "label": "SearXNG URL"
+ }
}
},
"system": {
diff --git a/src/assets/locale/ml/settings.json b/src/assets/locale/ml/settings.json
index 63f5dc8..b9ccb0d 100644
--- a/src/assets/locale/ml/settings.json
+++ b/src/assets/locale/ml/settings.json
@@ -68,6 +68,11 @@
},
"visitSpecificWebsite": {
"label": "സന്ദേശത്തിൽ പറയുന്ന വെബ്സൈറ്റ് സന്ദർശിക്കുക."
+ },
+ "searxng": {
+ "url": {
+ "label": "SearXNG URL"
+ }
}
},
"system": {
diff --git a/src/assets/locale/no/settings.json b/src/assets/locale/no/settings.json
index 10e4495..c73cbec 100644
--- a/src/assets/locale/no/settings.json
+++ b/src/assets/locale/no/settings.json
@@ -65,6 +65,11 @@
},
"visitSpecificWebsite": {
"label": "Besøk nettstedet nevnt i samtalen"
+ },
+ "searxng": {
+ "url": {
+ "label": "SearXNG URL"
+ }
}
},
"system": {
diff --git a/src/assets/locale/pt-BR/settings.json b/src/assets/locale/pt-BR/settings.json
index 8c812b8..019ad68 100644
--- a/src/assets/locale/pt-BR/settings.json
+++ b/src/assets/locale/pt-BR/settings.json
@@ -65,6 +65,11 @@
},
"visitSpecificWebsite": {
"label": "Visitar o site mencionado na mensagem"
+ },
+ "searxng": {
+ "url": {
+ "label": "URL do SearXNG"
+ }
}
},
"system": {
diff --git a/src/assets/locale/ru/settings.json b/src/assets/locale/ru/settings.json
index fe509c7..7e6b75b 100644
--- a/src/assets/locale/ru/settings.json
+++ b/src/assets/locale/ru/settings.json
@@ -66,6 +66,11 @@
},
"visitSpecificWebsite": {
"label": "Посетите веб-сайт, указанный в сообщении."
+ },
+ "searxng": {
+ "url": {
+ "label": "URL-адрес SearXNG"
+ }
}
},
"system": {
diff --git a/src/assets/locale/sv/settings.json b/src/assets/locale/sv/settings.json
index 7d782de..3edaa52 100644
--- a/src/assets/locale/sv/settings.json
+++ b/src/assets/locale/sv/settings.json
@@ -65,6 +65,11 @@
},
"visitSpecificWebsite": {
"label": "Besök webbplatsen som nämns i meddelandet"
+ },
+ "searxng": {
+ "url": {
+ "label": "SearXNG URL"
+ }
}
},
"system": {
diff --git a/src/assets/locale/uk/settings.json b/src/assets/locale/uk/settings.json
index bdcaa0b..91fe5de 100644
--- a/src/assets/locale/uk/settings.json
+++ b/src/assets/locale/uk/settings.json
@@ -65,6 +65,11 @@
},
"visitSpecificWebsite": {
"label": "Відвідати веб-сайт, згаданий у повідомленні"
+ },
+ "searxng": {
+ "url": {
+ "label": "SearXNG URL-адреса"
+ }
}
},
"system": {
diff --git a/src/assets/locale/zh/settings.json b/src/assets/locale/zh/settings.json
index 0ec0554..83c576d 100644
--- a/src/assets/locale/zh/settings.json
+++ b/src/assets/locale/zh/settings.json
@@ -68,6 +68,11 @@
},
"visitSpecificWebsite": {
"label": "访问消息中提到的网站。"
+ },
+ "searxng": {
+ "url": {
+ "label": "SearXNG 网址"
+ }
}
},
"system": {
diff --git a/src/components/Option/Settings/search-mode.tsx b/src/components/Option/Settings/search-mode.tsx
index 53f391b..69ae112 100644
--- a/src/components/Option/Settings/search-mode.tsx
+++ b/src/components/Option/Settings/search-mode.tsx
@@ -3,7 +3,7 @@ import { getSearchSettings, setSearchSettings } from "@/services/search"
import { SUPPORTED_SERACH_PROVIDERS } from "@/utils/search-provider"
import { useForm } from "@mantine/form"
import { useQuery, useQueryClient } from "@tanstack/react-query"
-import { Select, Skeleton, Switch, InputNumber } from "antd"
+import { Select, Skeleton, Switch, InputNumber, Input } from "antd"
import { useTranslation } from "react-i18next"
export const SearchModeSettings = () => {
@@ -14,7 +14,9 @@ export const SearchModeSettings = () => {
isSimpleInternetSearch: false,
searchProvider: "",
totalSearchResults: 0,
- visitSpecificWebsite: false
+ visitSpecificWebsite: false,
+ searxngURL: "",
+ searxngJSONMode: false
}
})
@@ -62,6 +64,23 @@ export const SearchModeSettings = () => {
/>
+ {form.values.searchProvider === "searxng" && (
+ <>
+