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