feat(settings): add Ollama connection status check setting
- Add new setting to enable/disable Ollama connection status check - Update translations for the new setting across all supported languages
This commit is contained in:
parent
ca26e059eb
commit
92013f3bfc
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "Stop Streaming",
|
||||
"knowledge": "Viden"
|
||||
},
|
||||
"sendWhenEnter": "Søg, når Indtast trykkes"
|
||||
"sendWhenEnter": "Søg, når Indtast trykkes",
|
||||
"welcome": "Hej! Hvordan kan jeg hjælpe dig i dag?"
|
||||
}
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Generer titel med AI"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Aktivér eller deaktivér Ollama forbindelsesstatus kontrol"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "Streaming stoppen",
|
||||
"knowledge": "Wissen"
|
||||
},
|
||||
"sendWhenEnter": "Senden bei Drücken der Eingabetaste"
|
||||
"sendWhenEnter": "Senden bei Drücken der Eingabetaste",
|
||||
"welcome": "Hallo! Wie kann ich Ihnen heute helfen?"
|
||||
}
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Titel mit KI generieren"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Ollama-Verbindungsstatus-Überprüfung aktivieren oder deaktivieren"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "Stop Streaming",
|
||||
"knowledge": "Knowledge"
|
||||
},
|
||||
"sendWhenEnter": "Send when Enter pressed"
|
||||
"sendWhenEnter": "Send when Enter pressed",
|
||||
"welcome": "Hello! How can I help you today?"
|
||||
}
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Generate Title using AI"
|
||||
},
|
||||
"ollamaStatus" :{
|
||||
"label":"Enable or disable Ollama connection status check"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "Parar Transmisión",
|
||||
"knowledge": "Conocimiento"
|
||||
},
|
||||
"sendWhenEnter": "Enviar cuando presione Enter"
|
||||
"sendWhenEnter": "Enviar cuando presione Enter",
|
||||
"welcome": "¡Hola! ¿Cómo puedo ayudarte hoy?"
|
||||
}
|
||||
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Generar título usando IA"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Habilitar o deshabilitar la verificación del estado de conexión de Ollama"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "توقف Streaming",
|
||||
"knowledge": "دانش"
|
||||
},
|
||||
"sendWhenEnter": "با فشار دادن Enter ارسال شود"
|
||||
"sendWhenEnter": "با فشار دادن Enter ارسال شود",
|
||||
"welcome": "سلام! امروز چطور میتوانم به شما کمک کنم؟"
|
||||
}
|
||||
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "تولید عنوان با استفاده از هوش مصنوعی"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "فعال یا غیرفعال کردن بررسی وضعیت اتصال Ollama"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "Arrêtez la diffusion",
|
||||
"knowledge": "Connaissance"
|
||||
},
|
||||
"sendWhenEnter": "Envoyer en appuyant sur Entrée"
|
||||
"sendWhenEnter": "Envoyer en appuyant sur Entrée",
|
||||
"welcome": "Bonjour ! Comment puis-je vous aider aujourd'hui ?"
|
||||
}
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Générer le titre en utilisant l'IA"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Activer ou désactiver la vérification de l'état de la connexion Ollama"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "Ferma lo Streaming",
|
||||
"knowledge": "Conoscenza"
|
||||
},
|
||||
"sendWhenEnter": "Invia subito dopo Enter"
|
||||
"sendWhenEnter": "Invia subito dopo Enter",
|
||||
"welcome": "Ciao! Come posso aiutarti oggi?"
|
||||
}
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Genera titolo utilizzando l'IA"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Abilita o disabilita il controllo dello stato della connessione Ollama"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "ストリーミングを停止",
|
||||
"knowledge": "知識"
|
||||
},
|
||||
"sendWhenEnter": "Enterキーを押すと送信"
|
||||
"sendWhenEnter": "Enterキーを押すと送信",
|
||||
"welcome": "こんにちは!本日はどのようなお手伝いができますか?"
|
||||
}
|
@ -35,6 +35,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "AIを使用してタイトルを生成"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Ollamaの接続状態チェックを有効または無効にする"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "스트리밍 중지",
|
||||
"knowledge": "지식"
|
||||
},
|
||||
"sendWhenEnter": "Enter 키를 누르면 전송"
|
||||
"sendWhenEnter": "Enter 키를 누르면 전송",
|
||||
"welcome": "안녕하세요! 오늘 어떻게 도와드릴까요?"
|
||||
}
|
||||
|
@ -35,6 +35,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "AI로 제목 생성"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Ollama 연결 상태 확인 활성화 또는 비활성화"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
@ -342,4 +345,3 @@
|
||||
"title": "Chrome AI 설정"
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "സ്ട്രീമിംഗ് നിർത്തുക",
|
||||
"knowledge": "അറിവ്"
|
||||
},
|
||||
"sendWhenEnter": "എന്റര് അമര്ത്തുമ്പോള് അയയ്ക്കുക"
|
||||
"sendWhenEnter": "എന്റര് അമര്ത്തുമ്പോള് അയയ്ക്കുക",
|
||||
"welcome": "നമസ്കാരം! ഇന്ന് എനിക്ക് നിങ്ങളെ എങ്ങനെ സഹായിക്കാൻ കഴിയും?"
|
||||
}
|
@ -35,6 +35,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "എഐ ഉപയോഗിച്ച് ശീർഷകം സൃഷ്ടിക്കുക"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "ഒല്ലാമ കണക്ഷൻ സ്റ്റാറ്റസ് പരിശോധന പ്രവർത്തനക്ഷമമാക്കുകയോ പ്രവർത്തനരഹിതമാക്കുകയോ ചെയ്യുക"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "Stopp Streaming",
|
||||
"knowledge": "Kunnskap"
|
||||
},
|
||||
"sendWhenEnter": "Søk når Enter trykkes"
|
||||
"sendWhenEnter": "Søk når Enter trykkes",
|
||||
"welcome": "Hei! Hvordan kan jeg hjelpe deg i dag?"
|
||||
}
|
||||
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Generer tittel med AI"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Aktiver eller deaktiver Ollama tilkoblingsstatussjekk"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "Parar Streaming",
|
||||
"knowledge": "Conhecimento"
|
||||
},
|
||||
"sendWhenEnter": "Enviar ao pressionar Enter"
|
||||
"sendWhenEnter": "Enviar ao pressionar Enter",
|
||||
"welcome": "Olá! Como posso ajudar você hoje?"
|
||||
}
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Gerar título usando IA"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Ativar ou desativar verificação de status da conexão Ollama"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "Остановить поток",
|
||||
"knowledge": "Знание"
|
||||
},
|
||||
"sendWhenEnter": "Отправить при нажатии клавиши Enter"
|
||||
"sendWhenEnter": "Отправить при нажатии клавиши Enter",
|
||||
"welcome": "Здравствуйте! Как я могу помочь вам сегодня?"
|
||||
}
|
||||
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Сгенерировать заголовок с помощью ИИ"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Включить или отключить проверку состояния подключения Ollama"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "Stoppa strömning",
|
||||
"knowledge": "Kunskap"
|
||||
},
|
||||
"sendWhenEnter": "Skicka när Enter trycks"
|
||||
"sendWhenEnter": "Skicka när Enter trycks",
|
||||
"welcome": "Hej! Hur kan jag hjälpa dig idag?"
|
||||
}
|
||||
|
@ -32,6 +32,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "Generera titel med AI"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "Aktivera eller inaktivera Ollama anslutningsstatuskontroll"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -25,5 +25,6 @@
|
||||
"stopStreaming": "停止流媒体",
|
||||
"knowledge": "知识"
|
||||
},
|
||||
"sendWhenEnter": "按Enter发送"
|
||||
"sendWhenEnter": "按Enter发送",
|
||||
"welcome": "你好!今天我能帮你什么?"
|
||||
}
|
@ -35,6 +35,9 @@
|
||||
},
|
||||
"generateTitle": {
|
||||
"label": "使用人工智能生成标题"
|
||||
},
|
||||
"ollamaStatus": {
|
||||
"label": "启用或禁用Ollama连接状态检查"
|
||||
}
|
||||
},
|
||||
"sidepanelRag": {
|
||||
|
@ -113,6 +113,7 @@ export const Header: React.FC<Props> = ({
|
||||
<PageAssistSelect
|
||||
className="w-80"
|
||||
placeholder={t("common:selectAModel")}
|
||||
loadingText={t("common:selectAModel")}
|
||||
value={selectedModel}
|
||||
onChange={(e) => {
|
||||
setSelectedModel(e.value)
|
||||
|
@ -1,4 +1,5 @@
|
||||
import { cleanUrl } from "@/libs/clean-url"
|
||||
import { useStorage } from "@plasmohq/storage/hook"
|
||||
import { useQuery } from "@tanstack/react-query"
|
||||
import { RotateCcw } from "lucide-react"
|
||||
import { useEffect, useState } from "react"
|
||||
@ -12,6 +13,9 @@ import {
|
||||
export const PlaygroundEmpty = () => {
|
||||
const [ollamaURL, setOllamaURL] = useState<string>("")
|
||||
const { t } = useTranslation(["playground", "common"])
|
||||
|
||||
const [checkOllamaStatus] = useStorage("checkOllamaStatus", true)
|
||||
|
||||
const {
|
||||
data: ollamaInfo,
|
||||
status: ollamaStatus,
|
||||
@ -23,19 +27,32 @@ export const PlaygroundEmpty = () => {
|
||||
const ollamaURL = await getOllamaURL()
|
||||
const isOk = await isOllamaRunning()
|
||||
|
||||
if (ollamaURL) {
|
||||
saveOllamaURL(ollamaURL)
|
||||
}
|
||||
|
||||
return {
|
||||
isOk,
|
||||
ollamaURL
|
||||
}
|
||||
}
|
||||
},
|
||||
enabled: checkOllamaStatus
|
||||
})
|
||||
|
||||
useEffect(() => {
|
||||
if (ollamaInfo?.ollamaURL) {
|
||||
setOllamaURL(ollamaInfo.ollamaURL)
|
||||
}
|
||||
}, [ollamaInfo])
|
||||
|
||||
if (!checkOllamaStatus) {
|
||||
return (
|
||||
<div className="mx-auto sm:max-w-xl px-4 mt-10">
|
||||
<div className="rounded-lg justify-center items-center flex flex-col border p-8 bg-gray-50 dark:bg-[#262626] dark:border-gray-600">
|
||||
<h1 className="text-sm font-medium text-center text-gray-500 dark:text-gray-400 flex gap-3 items-center justify-center">
|
||||
<span >👋</span>
|
||||
<span className="text-gray-700 dark:text-gray-300">
|
||||
{t("welcome")}
|
||||
</span>
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
return (
|
||||
<div className="mx-auto sm:max-w-xl px-4 mt-10">
|
||||
<div className="rounded-lg justify-center items-center flex flex-col border p-8 bg-gray-50 dark:bg-[#262626] dark:border-gray-600">
|
||||
|
@ -16,13 +16,12 @@ import {
|
||||
import { useStorage } from "@plasmohq/storage/hook"
|
||||
|
||||
export const GeneralSettings = () => {
|
||||
const { clearChat } =
|
||||
useMessageOption()
|
||||
const { clearChat } = useMessageOption()
|
||||
|
||||
const [ speechToTextLanguage, setSpeechToTextLanguage ] = useStorage(
|
||||
"speechToTextLanguage",
|
||||
"en-US"
|
||||
)
|
||||
const [speechToTextLanguage, setSpeechToTextLanguage] = useStorage(
|
||||
"speechToTextLanguage",
|
||||
"en-US"
|
||||
)
|
||||
const [copilotResumeLastChat, setCopilotResumeLastChat] = useStorage(
|
||||
"copilotResumeLastChat",
|
||||
false
|
||||
@ -41,6 +40,11 @@ export const GeneralSettings = () => {
|
||||
const [sendNotificationAfterIndexing, setSendNotificationAfterIndexing] =
|
||||
useStorage("sendNotificationAfterIndexing", false)
|
||||
|
||||
const [checkOllamaStatus, setCheckOllamaStatus] = useStorage(
|
||||
"checkOllamaStatus",
|
||||
true
|
||||
)
|
||||
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
const { mode, toggleDarkMode } = useDarkMode()
|
||||
@ -160,6 +164,19 @@ export const GeneralSettings = () => {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-row justify-between">
|
||||
<div className="inline-flex items-center gap-2">
|
||||
<span className="text-gray-700 dark:text-neutral-50">
|
||||
{t("generalSettings.settings.ollamaStatus.label")}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<Switch
|
||||
checked={checkOllamaStatus}
|
||||
onChange={(checked) => setCheckOllamaStatus(checked)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-row justify-between">
|
||||
<span className="text-gray-700 dark:text-neutral-50 ">
|
||||
{t("generalSettings.settings.darkMode.label")}
|
||||
|
@ -235,14 +235,16 @@ export const PageAssistSelect: React.FC<SelectProps> = ({
|
||||
onClick={() => !disabled && !isLoading && setIsOpen(!isOpen)}
|
||||
onKeyDown={handleKeyDown}
|
||||
className={`${defaultSelectClass} ${className}`}>
|
||||
<span className="!truncate flex items-center gap-2 ">
|
||||
{isLoading && <LoadingIndicator />}
|
||||
<span className="!truncate flex items-center gap-2 select-none">
|
||||
{isLoading && <LoadingIndicator />}
|
||||
{isLoading ? (
|
||||
loadingText
|
||||
) : selectedOption ? (
|
||||
selectedOption.label
|
||||
) : (
|
||||
<span className="dark:text-gray-400 text-sm">{placeholder}</span>
|
||||
<span className="dark:text-gray-500 font-semibold text-[14px]">
|
||||
{placeholder}
|
||||
</span>
|
||||
)}
|
||||
</span>
|
||||
<ChevronDown
|
||||
|
@ -1,4 +1,5 @@
|
||||
import { cleanUrl } from "@/libs/clean-url"
|
||||
import { useStorage } from "@plasmohq/storage/hook"
|
||||
import { useQuery, useQueryClient } from "@tanstack/react-query"
|
||||
import { Select } from "antd"
|
||||
import { RotateCcw } from "lucide-react"
|
||||
@ -17,13 +18,15 @@ export const EmptySidePanel = () => {
|
||||
const [ollamaURL, setOllamaURL] = useState<string>("")
|
||||
const { t } = useTranslation(["playground", "common"])
|
||||
const queryClient = useQueryClient()
|
||||
const [checkOllamaStatus] = useStorage("checkOllamaStatus", true)
|
||||
|
||||
const {
|
||||
data: ollamaInfo,
|
||||
status: ollamaStatus,
|
||||
refetch,
|
||||
isRefetching
|
||||
} = useQuery({
|
||||
queryKey: ["ollamaStatus"],
|
||||
queryKey: ["ollamaStatus", checkOllamaStatus],
|
||||
queryFn: async () => {
|
||||
const ollamaURL = await getOllamaURL()
|
||||
const isOk = await isOllamaRunning()
|
||||
@ -32,7 +35,7 @@ export const EmptySidePanel = () => {
|
||||
queryKey: ["getAllModelsForSelect"]
|
||||
})
|
||||
return {
|
||||
isOk,
|
||||
isOk: checkOllamaStatus ? isOk : true,
|
||||
models,
|
||||
ollamaURL
|
||||
}
|
||||
@ -59,7 +62,7 @@ export const EmptySidePanel = () => {
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
{!isRefetching && ollamaStatus === "success" ? (
|
||||
{!isRefetching && ollamaStatus === "success" && checkOllamaStatus ? (
|
||||
ollamaInfo.isOk ? (
|
||||
<div className="inline-flex items-center space-x-2">
|
||||
<div className="w-3 h-3 bg-green-500 rounded-full"></div>
|
||||
|
@ -102,6 +102,7 @@ export const getAllModels = async ({
|
||||
returnEmpty?: boolean
|
||||
}) => {
|
||||
try {
|
||||
|
||||
const baseUrl = await getOllamaURL()
|
||||
const response = await fetcher(`${cleanUrl(baseUrl)}/api/tags`)
|
||||
if (!response.ok) {
|
||||
@ -178,30 +179,9 @@ export const fetchChatModels = async ({
|
||||
returnEmpty?: boolean
|
||||
}) => {
|
||||
try {
|
||||
const baseUrl = await getOllamaURL()
|
||||
const response = await fetcher(`${cleanUrl(baseUrl)}/api/tags`)
|
||||
if (!response.ok) {
|
||||
if (returnEmpty) {
|
||||
return []
|
||||
}
|
||||
throw new Error(response.statusText)
|
||||
}
|
||||
const json = await response.json()
|
||||
const models = json.models as {
|
||||
name: string
|
||||
model: string
|
||||
modified_at: string
|
||||
size: number
|
||||
digest: string
|
||||
details?: {
|
||||
parent_model?: string
|
||||
format: string
|
||||
family: string
|
||||
families: string[]
|
||||
parameter_size: string
|
||||
quantization_level: string
|
||||
}
|
||||
}[]
|
||||
|
||||
const models = await getAllModels({ returnEmpty })
|
||||
|
||||
const chatModels = models
|
||||
?.filter((model) => {
|
||||
return (
|
||||
@ -408,3 +388,13 @@ export const getPageShareUrl = async () => {
|
||||
export const setPageShareUrl = async (pageShareUrl: string) => {
|
||||
await storage.set("pageShareUrl", pageShareUrl)
|
||||
}
|
||||
|
||||
|
||||
export const isOllamaEnabled = async () => {
|
||||
const ollamaStatus = await storage.get<boolean>("checkOllamaStatus")
|
||||
// if data is empty or null then return true
|
||||
if (typeof ollamaStatus === "undefined" || ollamaStatus === null) {
|
||||
return true
|
||||
}
|
||||
return ollamaStatus
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user