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