diff --git a/electron-builder.yml b/electron-builder.yml index bf19894126..bf96b6e960 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -56,6 +56,4 @@ electronDownload: afterSign: scripts/notarize.js releaseInfo: releaseNotes: | - 增加 Gemini、豆包、阶跃星辰等服务商支持 - 修复 Anthropic 回复问题 - 新的 Windows, Linux 侧边栏样式 + 添加 MiniMax 服务商 diff --git a/src/renderer/src/assets/images/models/hailuo.png b/src/renderer/src/assets/images/models/hailuo.png new file mode 100644 index 0000000000..43579d24d5 Binary files /dev/null and b/src/renderer/src/assets/images/models/hailuo.png differ diff --git a/src/renderer/src/assets/images/providers/minimax.png b/src/renderer/src/assets/images/providers/minimax.png new file mode 100644 index 0000000000..434b2794f1 Binary files /dev/null and b/src/renderer/src/assets/images/providers/minimax.png differ diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index 34ba19cf3e..605446c4e4 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -353,6 +353,36 @@ export const SYSTEM_MODELS: Record = { } ], doubao: [], + minimax: [ + { + id: 'abab6.5s-chat', + provider: 'minimax', + name: 'abab6.5s', + group: 'abab6', + enabled: true + }, + { + id: 'abab6.5g-chat', + provider: 'minimax', + name: 'abab6.5g', + group: 'abab6', + enabled: true + }, + { + id: 'abab6.5t-chat', + provider: 'minimax', + name: 'abab6.5t', + group: 'abab6', + enabled: true + }, + { + id: 'abab5.5s-chat', + provider: 'minimax', + name: 'abab5.5s', + group: 'abab5', + enabled: true + } + ], aihubmix: [ { id: 'gpt-4o-mini', diff --git a/src/renderer/src/config/provider.ts b/src/renderer/src/config/provider.ts index 79d8b5714d..43ce17da75 100644 --- a/src/renderer/src/config/provider.ts +++ b/src/renderer/src/config/provider.ts @@ -7,6 +7,7 @@ import DoubaoModelLogo from '@renderer/assets/images/models/doubao.png' import EmbeddingModelLogo from '@renderer/assets/images/models/embedding.png' import GeminiModelLogo from '@renderer/assets/images/models/gemini.png' import GemmaModelLogo from '@renderer/assets/images/models/gemma.jpeg' +import HailuoModelLogo from '@renderer/assets/images/models/hailuo.png' import LlamaModelLogo from '@renderer/assets/images/models/llama.jpeg' import MicrosoftModelLogo from '@renderer/assets/images/models/microsoft.png' import MixtralModelLogo from '@renderer/assets/images/models/mixtral.jpeg' @@ -23,6 +24,7 @@ import DoubaoProviderLogo from '@renderer/assets/images/providers/doubao.png' import GeminiProviderLogo from '@renderer/assets/images/providers/gemini.png' import GraphRagProviderLogo from '@renderer/assets/images/providers/graph-rag.png' import GroqProviderLogo from '@renderer/assets/images/providers/groq.png' +import MinimaxProviderLogo from '@renderer/assets/images/providers/minimax.png' import MoonshotProviderLogo from '@renderer/assets/images/providers/moonshot.jpeg' import MoonshotModelLogo from '@renderer/assets/images/providers/moonshot.jpeg' import OllamaProviderLogo from '@renderer/assets/images/providers/ollama.png' @@ -69,6 +71,8 @@ export function getProviderLogo(providerId: string) { return DoubaoProviderLogo case 'graphrag-kylin-mountain': return GraphRagProviderLogo + case 'minimax': + return MinimaxProviderLogo default: return undefined } @@ -98,6 +102,7 @@ export function getModelLogo(modelId: string) { bison: PalmModelLogo, palm: PalmModelLogo, step: StepModelLogo, + abab: HailuoModelLogo, 'ep-202': DoubaoModelLogo } @@ -243,6 +248,18 @@ export const PROVIDER_CONFIG = { models: 'https://console.volcengine.com/ark/region:ark+cn-beijing/endpoint' } }, + minimax: { + api: { + url: 'https://api.minimax.chat/v1/', + editable: true + }, + websites: { + official: 'https://platform.minimaxi.com/', + apiKey: 'https://platform.minimaxi.com/user-center/basic-information/interface-key', + docs: 'https://platform.minimaxi.com/document/Announcement', + models: 'https://platform.minimaxi.com/document/Models' + } + }, 'graphrag-kylin-mountain': { api: { url: '', diff --git a/src/renderer/src/i18n/index.ts b/src/renderer/src/i18n/index.ts index 243f5d7614..afd3abfb72 100644 --- a/src/renderer/src/i18n/index.ts +++ b/src/renderer/src/i18n/index.ts @@ -121,6 +121,7 @@ const resources = { aihubmix: 'AiHubMix', stepfun: 'StepFun', doubao: 'Doubao', + minimax: 'MiniMax', 'graphrag-kylin-mountain': 'GraphRAG' }, settings: { @@ -346,6 +347,7 @@ const resources = { aihubmix: 'AiHubMix', stepfun: '阶跃星辰', doubao: '豆包', + minimax: 'MiniMax', 'graphrag-kylin-mountain': 'GraphRAG' }, settings: { diff --git a/src/renderer/src/pages/home/components/SelectModelDropdown.tsx b/src/renderer/src/pages/home/components/SelectModelDropdown.tsx index f8de1629c7..93b68bcc8e 100644 --- a/src/renderer/src/pages/home/components/SelectModelDropdown.tsx +++ b/src/renderer/src/pages/home/components/SelectModelDropdown.tsx @@ -2,7 +2,7 @@ import { getModelLogo } from '@renderer/config/provider' import { useProviders } from '@renderer/hooks/useProvider' import { Model } from '@renderer/types' import { Avatar, Dropdown, DropdownProps, MenuProps } from 'antd' -import { first, sortBy, upperFirst } from 'lodash' +import { first, reverse, sortBy, upperFirst } from 'lodash' import { FC, PropsWithChildren } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' @@ -22,7 +22,7 @@ const SelectModelDropdown: FC = ({ children, model, o key: p.id, label: p.isSystem ? t(`provider.${p.id}`) : p.name, type: 'group', - children: sortBy(p.models, 'name').map((m) => ({ + children: reverse(sortBy(p.models, 'name')).map((m) => ({ key: m?.id, label: upperFirst(m?.name), defaultSelectedKeys: [model?.id], diff --git a/src/renderer/src/pages/settings/ProviderSettings/OllamaSettings.tsx b/src/renderer/src/pages/settings/ProviderSettings/OllamaSettings.tsx index 63a1288199..67b42f04e8 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/OllamaSettings.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/OllamaSettings.tsx @@ -4,8 +4,7 @@ import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' -import { SettingSubtitle } from '..' -import { HelpText, HelpTextRow } from '../ProviderSettings/ProviderSetting' +import { SettingHelpText, SettingHelpTextRow, SettingSubtitle } from '..' const OllamSettings: FC = () => { const { keepAliveTime, setKeepAliveTime } = useOllamaSettings() @@ -23,9 +22,9 @@ const OllamSettings: FC = () => { suffix={t('ollama.keep_alive_time.placeholder')} step={5} /> - - {t('ollama.keep_alive_time.description')} - + + {t('ollama.keep_alive_time.description')} + ) } diff --git a/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx b/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx index e9df80bde4..c4ea8bd991 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx @@ -19,7 +19,14 @@ import { FC, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' -import { SettingContainer, SettingSubtitle, SettingTitle } from '..' +import { + SettingContainer, + SettingHelpLink, + SettingHelpText, + SettingHelpTextRow, + SettingSubtitle, + SettingTitle +} from '..' import AddModelPopup from './AddModelPopup' import EditModelsPopup from './EditModelsPopup' import GraphRAGSettings from './GraphRAGSettings' @@ -111,11 +118,11 @@ const ProviderSetting: FC = ({ provider: _provider }) => { {apiKeyWebsite && ( - - + + {t('settings.provider.get_api_key')} - - + + )} {t('settings.provider.api_host')} @@ -149,18 +156,18 @@ const ProviderSetting: FC = ({ provider: _provider }) => { ))} {docsWebsite && ( - - {t('settings.provider.docs_check')} - + + {t('settings.provider.docs_check')} + {t(`provider.${provider.id}`) + ' '} {t('common.docs')} - - {t('common.and')} - + + {t('common.and')} + {t('common.models')} - - {t('settings.provider.docs_more_details')} - + + {t('settings.provider.docs_more_details')} + )}