feat: add zhipu provider

This commit is contained in:
kangfenmao 2024-07-10 13:13:44 +08:00
parent 62520fad90
commit 8009e05c80
10 changed files with 109 additions and 25 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -67,7 +67,7 @@ const PopupContainer: React.FC<Props> = ({ provider: _provider, resolve }) => {
<ListItem key={model.id}> <ListItem key={model.id}>
<ListItemHeader> <ListItemHeader>
<Avatar src={getModelLogo(model.id)} size={24} /> <Avatar src={getModelLogo(model.id)} size={24} />
<ListItemName>{model.id}</ListItemName> <ListItemName>{model.name}</ListItemName>
</ListItemHeader> </ListItemHeader>
{hasModel ? ( {hasModel ? (
<Button type="default" onClick={() => onRemoveModel(model)} icon={<MinusOutlined />} /> <Button type="default" onClick={() => onRemoveModel(model)} icon={<MinusOutlined />} />

View File

@ -121,7 +121,7 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
{ {
id: 'deepseek-ai/deepseek-llm-67b-chat', id: 'deepseek-ai/deepseek-llm-67b-chat',
provider: 'silicon', provider: 'silicon',
name: 'deepseek-llm-67b-chat', name: 'Deepseek-LLM-67B-Chat',
group: 'DeepSeek', group: 'DeepSeek',
temperature: 0.7, temperature: 0.7,
defaultEnabled: false defaultEnabled: false
@ -129,7 +129,7 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
{ {
id: 'THUDM/glm-4-9b-chat', id: 'THUDM/glm-4-9b-chat',
provider: 'silicon', provider: 'silicon',
name: 'glm-4-9b-chat', name: 'GLM-4-9B-Chat',
group: 'GLM', group: 'GLM',
temperature: 0.7, temperature: 0.7,
defaultEnabled: true defaultEnabled: true
@ -137,7 +137,7 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
{ {
id: 'THUDM/chatglm3-6b', id: 'THUDM/chatglm3-6b',
provider: 'silicon', provider: 'silicon',
name: 'chatglm3-6b', name: 'GhatGLM3-6B',
group: 'GLM', group: 'GLM',
temperature: 0.7, temperature: 0.7,
defaultEnabled: false defaultEnabled: false
@ -171,16 +171,16 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
{ {
id: 'deepseek-chat', id: 'deepseek-chat',
provider: 'deepseek', provider: 'deepseek',
name: 'deepseek-chat', name: 'DeepSeek Chat',
group: 'Deepseek Chat', group: 'DeepSeek Chat',
temperature: 0.7, temperature: 0.7,
defaultEnabled: true defaultEnabled: true
}, },
{ {
id: 'deepseek-coder', id: 'deepseek-coder',
provider: 'deepseek', provider: 'deepseek',
name: 'deepseek-coder', name: 'DeepSeek Coder',
group: 'Deepseek Coder', group: 'DeepSeek Coder',
temperature: 1.0, temperature: 1.0,
defaultEnabled: true defaultEnabled: true
} }
@ -189,7 +189,7 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
{ {
id: 'yi-large', id: 'yi-large',
provider: 'yi', provider: 'yi',
name: 'yi-large', name: 'Yi-Large',
group: 'Yi', group: 'Yi',
temperature: 0.7, temperature: 0.7,
defaultEnabled: false defaultEnabled: false
@ -197,7 +197,7 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
{ {
id: 'yi-large-turbo', id: 'yi-large-turbo',
provider: 'yi', provider: 'yi',
name: 'yi-large-turbo', name: 'Yi-Large-Turbo',
group: 'Yi', group: 'Yi',
temperature: 0.7, temperature: 0.7,
defaultEnabled: true defaultEnabled: true
@ -205,7 +205,7 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
{ {
id: 'yi-large-rag', id: 'yi-large-rag',
provider: 'yi', provider: 'yi',
name: 'yi-large-rag', name: 'Yi-Large-Rag',
group: 'Yi', group: 'Yi',
temperature: 0.7, temperature: 0.7,
defaultEnabled: false defaultEnabled: false
@ -213,7 +213,7 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
{ {
id: 'yi-medium', id: 'yi-medium',
provider: 'yi', provider: 'yi',
name: 'yi-medium', name: 'Yi-Medium',
group: 'Yi', group: 'Yi',
temperature: 0.7, temperature: 0.7,
defaultEnabled: true defaultEnabled: true
@ -221,7 +221,7 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
{ {
id: 'yi-medium-200k', id: 'yi-medium-200k',
provider: 'yi', provider: 'yi',
name: 'yi-medium-200k', name: 'Yi-Medium-200k',
group: 'Yi', group: 'Yi',
temperature: 0.7, temperature: 0.7,
defaultEnabled: false defaultEnabled: false
@ -229,17 +229,67 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
{ {
id: 'yi-spark', id: 'yi-spark',
provider: 'yi', provider: 'yi',
name: 'yi-spark', name: 'Yi-Spark',
group: 'Yi', group: 'Yi',
temperature: 0.7, temperature: 0.7,
defaultEnabled: false defaultEnabled: false
} }
], ],
zhipu: [
{
id: 'glm-4-0520',
provider: 'zhipu',
name: 'GLM-4-0520',
group: 'GLM',
temperature: 0.7,
defaultEnabled: true
},
{
id: 'glm-4',
provider: 'zhipu',
name: 'GLM-4',
group: 'GLM',
temperature: 0.7,
defaultEnabled: false
},
{
id: 'glm-4-airx',
provider: 'zhipu',
name: 'GLM-4-AirX',
group: 'GLM',
temperature: 0.7,
defaultEnabled: false
},
{
id: 'glm-4-air',
provider: 'zhipu',
name: 'GLM-4-Air',
group: 'GLM',
temperature: 0.7,
defaultEnabled: true
},
{
id: 'glm-4v',
provider: 'zhipu',
name: 'GLM-4V',
group: 'GLM',
temperature: 0.7,
defaultEnabled: false
},
{
id: 'glm-4-alltools',
provider: 'zhipu',
name: 'GLM-4-AllTools',
group: 'GLM',
temperature: 0.7,
defaultEnabled: false
}
],
groq: [ groq: [
{ {
id: 'llama3-8b-8192', id: 'llama3-8b-8192',
provider: 'groq', provider: 'groq',
name: 'LLaMA3 8b', name: 'LLaMA3 8B',
group: 'Llama3', group: 'Llama3',
temperature: 0.7, temperature: 0.7,
defaultEnabled: false defaultEnabled: false
@ -247,7 +297,7 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
{ {
id: 'llama3-70b-8192', id: 'llama3-70b-8192',
provider: 'groq', provider: 'groq',
name: 'LLaMA3 70b', name: 'LLaMA3 70B',
group: 'Llama3', group: 'Llama3',
temperature: 0.7, temperature: 0.7,
defaultEnabled: true defaultEnabled: true
@ -255,7 +305,7 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
{ {
id: 'mixtral-8x7b-32768', id: 'mixtral-8x7b-32768',
provider: 'groq', provider: 'groq',
name: 'Mixtral 8x7b', name: 'Mixtral 8x7B',
group: 'Mixtral', group: 'Mixtral',
temperature: 0.7, temperature: 0.7,
defaultEnabled: false defaultEnabled: false
@ -263,7 +313,7 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
{ {
id: 'gemma-7b-it', id: 'gemma-7b-it',
provider: 'groq', provider: 'groq',
name: 'Gemma 7b', name: 'Gemma 7B',
group: 'Gemma', group: 'Gemma',
temperature: 0.7, temperature: 0.7,
defaultEnabled: false defaultEnabled: false

View File

@ -2,7 +2,7 @@ import { useSystemProviders } from '@renderer/hooks/useProvider'
import { Provider } from '@renderer/types' import { Provider } from '@renderer/types'
import { FC, useState } from 'react' import { FC, useState } from 'react'
import styled from 'styled-components' import styled from 'styled-components'
import ModalProviderSetting from './components/ModalProviderSetting' import ProviderModals from './components/ProviderModals'
import { Avatar } from 'antd' import { Avatar } from 'antd'
import { getProviderLogo } from '@renderer/services/provider' import { getProviderLogo } from '@renderer/services/provider'
@ -23,7 +23,7 @@ const ProviderSettings: FC = () => {
</ProviderListItem> </ProviderListItem>
))} ))}
</ProviderListContainer> </ProviderListContainer>
<ModalProviderSetting provider={selectedProvider} /> <ProviderModals provider={selectedProvider} />
</Container> </Container>
) )
} }

View File

@ -12,7 +12,7 @@ interface Props {
provider: Provider provider: Provider
} }
const ModalProviderSetting: FC<Props> = ({ provider }) => { const ProviderModals: FC<Props> = ({ provider }) => {
const [apiKey, setApiKey] = useState(provider.apiKey) const [apiKey, setApiKey] = useState(provider.apiKey)
const [apiHost, setApiHost] = useState(provider.apiHost) const [apiHost, setApiHost] = useState(provider.apiHost)
const { updateProvider, models } = useProvider(provider.id) const { updateProvider, models } = useProvider(provider.id)
@ -61,7 +61,7 @@ const ModalProviderSetting: FC<Props> = ({ provider }) => {
{modelGroups[group].map((model) => ( {modelGroups[group].map((model) => (
<ModelListItem key={model.id}> <ModelListItem key={model.id}>
<Avatar src={getModelLogo(model.id)} size={22} style={{ marginRight: '8px' }} /> <Avatar src={getModelLogo(model.id)} size={22} style={{ marginRight: '8px' }} />
{model.id} {model.name}
</ModelListItem> </ModelListItem>
))} ))}
</Card> </Card>
@ -81,4 +81,4 @@ const ModelListItem = styled.div`
padding: 5px 0; padding: 5px 0;
` `
export default ModalProviderSetting export default ProviderModals

View File

@ -15,10 +15,11 @@ interface FetchChatCompletionParams {
} }
const getOpenAiProvider = (provider: Provider) => { const getOpenAiProvider = (provider: Provider) => {
const host = provider.apiHost
return new OpenAI({ return new OpenAI({
dangerouslyAllowBrowser: true, dangerouslyAllowBrowser: true,
apiKey: provider.apiKey, apiKey: provider.apiKey,
baseURL: `${provider.apiHost}/v1/` baseURL: host.endsWith('/') ? host : `${provider.apiHost}/v1/`
}) })
} }

View File

@ -3,6 +3,7 @@ import SiliconFlowProviderLogo from '@renderer/assets/images/providers/silicon.p
import DeepSeekProviderLogo from '@renderer/assets/images/providers/deepseek.png' import DeepSeekProviderLogo from '@renderer/assets/images/providers/deepseek.png'
import YiProviderLogo from '@renderer/assets/images/providers/yi.svg' import YiProviderLogo from '@renderer/assets/images/providers/yi.svg'
import GroqProviderLogo from '@renderer/assets/images/providers/groq.png' import GroqProviderLogo from '@renderer/assets/images/providers/groq.png'
import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png'
import ChatGPTModelLogo from '@renderer/assets/images/models/chatgpt.jpeg' import ChatGPTModelLogo from '@renderer/assets/images/models/chatgpt.jpeg'
import ChatGLMModelLogo from '@renderer/assets/images/models/chatglm.jpeg' import ChatGLMModelLogo from '@renderer/assets/images/models/chatglm.jpeg'
import DeepSeekModelLogo from '@renderer/assets/images/models/deepseek.png' import DeepSeekModelLogo from '@renderer/assets/images/models/deepseek.png'
@ -33,6 +34,10 @@ export function getProviderLogo(providerId: string) {
return GroqProviderLogo return GroqProviderLogo
} }
if (providerId === 'zhipu') {
return ZhipuProviderLogo
}
return '' return ''
} }

View File

@ -19,7 +19,7 @@ const persistedReducer = persistReducer(
{ {
key: 'cherry-studio', key: 'cherry-studio',
storage, storage,
version: 2, version: 3,
blacklist: ['runtime'], blacklist: ['runtime'],
migrate migrate
}, },

View File

@ -45,6 +45,14 @@ const initialState: LlmState = {
isSystem: true, isSystem: true,
models: SYSTEM_MODELS.yi.filter((m) => m.defaultEnabled) models: SYSTEM_MODELS.yi.filter((m) => m.defaultEnabled)
}, },
{
id: 'zhipu',
name: 'ZhiPu',
apiKey: '',
apiHost: 'https://open.bigmodel.cn/api/paas/v4/',
isSystem: true,
models: SYSTEM_MODELS.groq.filter((m) => m.defaultEnabled)
},
{ {
id: 'groq', id: 'groq',
name: 'Groq', name: 'Groq',

View File

@ -22,6 +22,26 @@ const migrate = createMigrate({
] ]
} }
} }
},
// @ts-ignore store type is unknown
'3': (state: RootState) => {
return {
...state,
llm: {
...state.llm,
providers: [
...state.llm.providers,
{
id: 'zhipu',
name: 'ZhiPu',
apiKey: '',
apiHost: 'https://open.bigmodel.cn/api/paas/v4/',
isSystem: true,
models: SYSTEM_MODELS.zhipu.filter((m) => m.defaultEnabled)
}
]
}
}
} }
}) })