diff --git a/src/renderer/src/assets/images/models/step.jpg b/src/renderer/src/assets/images/models/step.jpg new file mode 100644 index 00000000..404ff226 Binary files /dev/null and b/src/renderer/src/assets/images/models/step.jpg differ diff --git a/src/renderer/src/assets/images/providers/stepfun.png b/src/renderer/src/assets/images/providers/stepfun.png new file mode 100644 index 00000000..ae77e540 Binary files /dev/null and b/src/renderer/src/assets/images/providers/stepfun.png differ diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index c8569bf8..023632c7 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -336,6 +336,22 @@ export const SYSTEM_MODELS: Record = { enabled: true } ], + stepfun: [ + { + id: 'step-1-8k', + provider: 'stepfun', + name: 'Step 1 8K', + group: 'Step 1', + enabled: true + }, + { + id: 'step-1-flash', + provider: 'stepfun', + name: 'Step 1 Flash', + group: 'Step 1', + enabled: true + } + ], aihubmix: [ { id: 'gpt-4o-mini', diff --git a/src/renderer/src/config/provider.ts b/src/renderer/src/config/provider.ts index 6d912179..ac33db57 100644 --- a/src/renderer/src/config/provider.ts +++ b/src/renderer/src/config/provider.ts @@ -11,6 +11,7 @@ import MicrosoftModelLogo from '@renderer/assets/images/models/microsoft.png' import MixtralModelLogo from '@renderer/assets/images/models/mixtral.jpeg' import PalmModelLogo from '@renderer/assets/images/models/palm.svg' import QwenModelLogo from '@renderer/assets/images/models/qwen.png' +import StepModelLogo from '@renderer/assets/images/models/step.jpg' import YiModelLogo from '@renderer/assets/images/models/yi.svg' import AiHubMixProviderLogo from '@renderer/assets/images/providers/aihubmix.jpg' import AnthropicProviderLogo from '@renderer/assets/images/providers/anthropic.jpeg' @@ -25,6 +26,7 @@ import OllamaProviderLogo from '@renderer/assets/images/providers/ollama.png' import OpenAiProviderLogo from '@renderer/assets/images/providers/openai.jpeg' import OpenRouterProviderLogo from '@renderer/assets/images/providers/openrouter.png' import SiliconFlowProviderLogo from '@renderer/assets/images/providers/silicon.png' +import StepFunProviderLogo from '@renderer/assets/images/providers/stepfun.png' import YiProviderLogo from '@renderer/assets/images/providers/yi.svg' import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png' @@ -58,6 +60,8 @@ export function getProviderLogo(providerId: string) { return AiHubMixProviderLogo case 'gemini': return GeminiProviderLogo + case 'stepfun': + return StepFunProviderLogo default: return undefined } @@ -85,7 +89,8 @@ export function getModelLogo(modelId: string) { gemini: GeminiModelLogo, embedding: EmbeddingModelLogo, bison: PalmModelLogo, - palm: PalmModelLogo + palm: PalmModelLogo, + step: StepModelLogo } for (const key in logoMap) { @@ -264,5 +269,17 @@ export const PROVIDER_CONFIG = { docs: 'https://ai.google.dev/gemini-api/docs', models: 'https://ai.google.dev/gemini-api/docs/models/gemini' } + }, + stepfun: { + api: { + url: 'https://api.stepfun.com', + editable: false + }, + websites: { + official: 'https://platform.stepfun.com/', + apiKey: 'https://platform.stepfun.com/interface-key', + docs: 'https://platform.stepfun.com/docs/overview/concept', + models: 'https://platform.stepfun.com/docs/llm/text' + } } } diff --git a/src/renderer/src/hooks/useTopic.ts b/src/renderer/src/hooks/useTopic.ts index 3bf2fa24..7704aa56 100644 --- a/src/renderer/src/hooks/useTopic.ts +++ b/src/renderer/src/hooks/useTopic.ts @@ -16,3 +16,7 @@ export function useActiveTopic(assistant: Assistant) { return { activeTopic, setActiveTopic } } + +export function getTopic(assistant: Assistant, topicId: string) { + return assistant?.topics.find((topic) => topic.id === topicId) +} diff --git a/src/renderer/src/i18n/index.ts b/src/renderer/src/i18n/index.ts index fe22c8c0..899ef148 100644 --- a/src/renderer/src/i18n/index.ts +++ b/src/renderer/src/i18n/index.ts @@ -118,7 +118,8 @@ const resources = { baichuan: 'Baichuan', dashscope: 'DashScope', anthropic: 'Anthropic', - aihubmix: 'AiHubMix' + aihubmix: 'AiHubMix', + stepfun: 'StepFun' }, settings: { title: 'Settings', @@ -336,7 +337,8 @@ const resources = { baichuan: '百川', dashscope: '阿里云灵积', anthropic: 'Anthropic', - aihubmix: 'AiHubMix' + aihubmix: 'AiHubMix', + stepfun: '阶跃星辰' }, settings: { title: '设置', diff --git a/src/renderer/src/pages/home/Messages.tsx b/src/renderer/src/pages/home/Messages.tsx index b7018b52..9a6720f2 100644 --- a/src/renderer/src/pages/home/Messages.tsx +++ b/src/renderer/src/pages/home/Messages.tsx @@ -1,5 +1,6 @@ import { useAssistant } from '@renderer/hooks/useAssistant' import { useProviderByAssistant } from '@renderer/hooks/useProvider' +import { getTopic } from '@renderer/hooks/useTopic' import { fetchChatCompletion, fetchMessagesSummary } from '@renderer/services/api' import { EVENT_NAMES, EventEmitter } from '@renderer/services/event' import { estimateHistoryTokenCount, filterMessages } from '@renderer/services/messages' @@ -50,9 +51,10 @@ const Messages: FC = ({ assistant, topic }) => { ) const autoRenameTopic = useCallback(async () => { - if (topic.name === t('chat.default.topic.name') && messages.length >= 2) { + const _topic = getTopic(assistant, topic.id) + if (_topic && _topic.name === t('chat.default.topic.name') && messages.length >= 2) { const summaryText = await fetchMessagesSummary({ messages, assistant }) - summaryText && updateTopic({ ...topic, name: summaryText }) + summaryText && updateTopic({ ..._topic, name: summaryText }) } }, [assistant, messages, topic, updateTopic]) diff --git a/src/renderer/src/store/llm.ts b/src/renderer/src/store/llm.ts index a8ad36cc..86bc5b24 100644 --- a/src/renderer/src/store/llm.ts +++ b/src/renderer/src/store/llm.ts @@ -104,11 +104,11 @@ const initialState: LlmState = { enabled: false }, { - id: 'anthropic', - name: 'Anthropic', + id: 'stepfun', + name: 'StepFun', apiKey: '', - apiHost: 'https://api.anthropic.com/', - models: SYSTEM_MODELS.anthropic.filter((m) => m.enabled), + apiHost: 'https://api.stepfun.com', + models: SYSTEM_MODELS.stepfun.filter((m) => m.enabled), isSystem: true, enabled: false }, @@ -139,6 +139,15 @@ const initialState: LlmState = { isSystem: true, enabled: false }, + { + id: 'anthropic', + name: 'Anthropic', + apiKey: '', + apiHost: 'https://api.anthropic.com/', + models: SYSTEM_MODELS.anthropic.filter((m) => m.enabled), + isSystem: true, + enabled: false + }, { id: 'ollama', name: 'Ollama', diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index b678ab6a..a6bb4b6c 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -312,6 +312,15 @@ const migrateConfig = { models: SYSTEM_MODELS.gemini.filter((m) => m.enabled), isSystem: true, enabled: false + }, + { + id: 'stepfun', + name: 'StepFun', + apiKey: '', + apiHost: 'https://api.stepfun.com', + models: SYSTEM_MODELS.stepfun.filter((m) => m.enabled), + isSystem: true, + enabled: false } ] }