diff --git a/src/renderer/src/components/app/Sidebar.tsx b/src/renderer/src/components/app/Sidebar.tsx index 37007636..ce57da52 100644 --- a/src/renderer/src/components/app/Sidebar.tsx +++ b/src/renderer/src/components/app/Sidebar.tsx @@ -12,7 +12,7 @@ const Sidebar: FC = () => { return ( - + @@ -30,7 +30,7 @@ const Sidebar: FC = () => { - + diff --git a/src/renderer/src/hooks/useProvider.ts b/src/renderer/src/hooks/useProvider.ts index 50bb9587..38c33d28 100644 --- a/src/renderer/src/hooks/useProvider.ts +++ b/src/renderer/src/hooks/useProvider.ts @@ -8,7 +8,11 @@ import { Assistant, Model, Provider } from '@renderer/types' import { useDefaultModel } from './useAssistant' export function useProviders() { - return useAppSelector((state) => state.llm.providers) + return useAppSelector((state) => state.llm.providers.filter((p) => p.enabled)) +} + +export function useSystemProviders() { + return useAppSelector((state) => state.llm.providers.filter((p) => p.isSystem)) } export function useProvider(id: string) { @@ -30,7 +34,3 @@ export function useProviderByAssistant(assistant: Assistant) { const { provider } = useProvider(model.provider) return provider } - -export function useSystemProviders() { - return useAppSelector((state) => state.llm.providers.filter((p) => p.isSystem)) -} diff --git a/src/renderer/src/pages/settings/ProviderSettings.tsx b/src/renderer/src/pages/settings/ProviderSettings.tsx index 5a84a48e..52b7618d 100644 --- a/src/renderer/src/pages/settings/ProviderSettings.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings.tsx @@ -2,9 +2,9 @@ import { useSystemProviders } from '@renderer/hooks/useProvider' import { Provider } from '@renderer/types' import { FC, useState } from 'react' import styled from 'styled-components' -import { Avatar } from 'antd' +import { Avatar, Tag } from 'antd' import { getProviderLogo } from '@renderer/services/provider' -import ProviderModels from './components/ProviderModels' +import ProviderSetting from './components/ProviderSetting' const ProviderSettings: FC = () => { const providers = useSystemProviders() @@ -20,10 +20,15 @@ const ProviderSettings: FC = () => { onClick={() => setSelectedProvider(provider)}> {provider.name} + {provider.enabled && ( + + ON + + )} ))} - + ) } diff --git a/src/renderer/src/pages/settings/SettingsPage.tsx b/src/renderer/src/pages/settings/SettingsPage.tsx index cb5c0308..0d0c0ca9 100644 --- a/src/renderer/src/pages/settings/SettingsPage.tsx +++ b/src/renderer/src/pages/settings/SettingsPage.tsx @@ -22,9 +22,6 @@ const SettingsPage: FC = () => { - - {t('settings.general')} - {t('settings.provider')} @@ -34,16 +31,19 @@ const SettingsPage: FC = () => { {t('settings.assistant')} + + {t('settings.general')} + {t('settings.about')} - } /> } /> } /> } /> + } /> } /> diff --git a/src/renderer/src/pages/settings/components/ProviderModels.tsx b/src/renderer/src/pages/settings/components/ProviderSetting.tsx similarity index 86% rename from src/renderer/src/pages/settings/components/ProviderModels.tsx rename to src/renderer/src/pages/settings/components/ProviderSetting.tsx index fef0541b..b094f54b 100644 --- a/src/renderer/src/pages/settings/components/ProviderModels.tsx +++ b/src/renderer/src/pages/settings/components/ProviderSetting.tsx @@ -1,7 +1,7 @@ import { Provider } from '@renderer/types' import { FC, useEffect, useState } from 'react' import styled from 'styled-components' -import { Avatar, Button, Card, Divider, Flex, Input } from 'antd' +import { Avatar, Button, Card, Divider, Flex, Input, Switch } from 'antd' import { useProvider } from '@renderer/hooks/useProvider' import { groupBy } from 'lodash' import { SettingContainer, SettingSubtitle, SettingTitle } from './SettingComponent' @@ -14,7 +14,7 @@ interface Props { provider: Provider } -const ProviderModels: FC = ({ provider }) => { +const ProviderSetting: FC = ({ provider }) => { const [apiKey, setApiKey] = useState(provider.apiKey) const [apiHost, setApiHost] = useState(provider.apiHost) const { updateProvider, models } = useProvider(provider.id) @@ -44,7 +44,14 @@ const ProviderModels: FC = ({ provider }) => { return ( - {provider.name} + + {provider.name} + updateProvider({ ...provider, enabled })} + /> + API Key m.defaultEnabled), isSystem: true, - models: SYSTEM_MODELS.openai.filter((m) => m.defaultEnabled) + enabled: true }, { id: 'silicon', name: 'Silicon', apiKey: '', apiHost: 'https://api.siliconflow.cn', + models: SYSTEM_MODELS.silicon.filter((m) => m.defaultEnabled), isSystem: true, - models: SYSTEM_MODELS.silicon.filter((m) => m.defaultEnabled) + enabled: false }, { id: 'deepseek', name: 'deepseek', apiKey: '', apiHost: 'https://api.deepseek.com', + models: SYSTEM_MODELS.deepseek.filter((m) => m.defaultEnabled), isSystem: true, - models: SYSTEM_MODELS.deepseek.filter((m) => m.defaultEnabled) + enabled: false }, { id: 'yi', name: 'Yi', apiKey: '', apiHost: 'https://api.lingyiwanwu.com', + models: SYSTEM_MODELS.yi.filter((m) => m.defaultEnabled), isSystem: true, - models: SYSTEM_MODELS.yi.filter((m) => m.defaultEnabled) + enabled: false }, { id: 'zhipu', name: 'ZhiPu', apiKey: '', apiHost: 'https://open.bigmodel.cn/api/paas/v4/', + models: SYSTEM_MODELS.groq.filter((m) => m.defaultEnabled), isSystem: true, - models: SYSTEM_MODELS.groq.filter((m) => m.defaultEnabled) + enabled: false }, { id: 'groq', name: 'Groq', apiKey: '', apiHost: 'https://api.groq.com/openai', + models: SYSTEM_MODELS.groq.filter((m) => m.defaultEnabled), isSystem: true, - models: SYSTEM_MODELS.groq.filter((m) => m.defaultEnabled) + enabled: false }, { id: 'ollama', name: 'Ollama', apiKey: '', apiHost: 'http://localhost:11434/v1/', + models: [], isSystem: true, - models: [] + enabled: false } ] } diff --git a/src/renderer/src/types/index.ts b/src/renderer/src/types/index.ts index c2788106..42ee5fbf 100644 --- a/src/renderer/src/types/index.ts +++ b/src/renderer/src/types/index.ts @@ -37,6 +37,7 @@ export type Provider = { apiKey: string apiHost: string models: Model[] + enabled: boolean isSystem?: boolean }