feat: add stepfun provider

This commit is contained in:
kangfenmao 2024-08-13 18:02:00 +08:00
parent e1c7a25b87
commit 77c0952635
9 changed files with 68 additions and 9 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -336,6 +336,22 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
enabled: true 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: [ aihubmix: [
{ {
id: 'gpt-4o-mini', id: 'gpt-4o-mini',

View File

@ -11,6 +11,7 @@ import MicrosoftModelLogo from '@renderer/assets/images/models/microsoft.png'
import MixtralModelLogo from '@renderer/assets/images/models/mixtral.jpeg' import MixtralModelLogo from '@renderer/assets/images/models/mixtral.jpeg'
import PalmModelLogo from '@renderer/assets/images/models/palm.svg' import PalmModelLogo from '@renderer/assets/images/models/palm.svg'
import QwenModelLogo from '@renderer/assets/images/models/qwen.png' 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 YiModelLogo from '@renderer/assets/images/models/yi.svg'
import AiHubMixProviderLogo from '@renderer/assets/images/providers/aihubmix.jpg' import AiHubMixProviderLogo from '@renderer/assets/images/providers/aihubmix.jpg'
import AnthropicProviderLogo from '@renderer/assets/images/providers/anthropic.jpeg' 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 OpenAiProviderLogo from '@renderer/assets/images/providers/openai.jpeg'
import OpenRouterProviderLogo from '@renderer/assets/images/providers/openrouter.png' import OpenRouterProviderLogo from '@renderer/assets/images/providers/openrouter.png'
import SiliconFlowProviderLogo from '@renderer/assets/images/providers/silicon.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 YiProviderLogo from '@renderer/assets/images/providers/yi.svg'
import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png' import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png'
@ -58,6 +60,8 @@ export function getProviderLogo(providerId: string) {
return AiHubMixProviderLogo return AiHubMixProviderLogo
case 'gemini': case 'gemini':
return GeminiProviderLogo return GeminiProviderLogo
case 'stepfun':
return StepFunProviderLogo
default: default:
return undefined return undefined
} }
@ -85,7 +89,8 @@ export function getModelLogo(modelId: string) {
gemini: GeminiModelLogo, gemini: GeminiModelLogo,
embedding: EmbeddingModelLogo, embedding: EmbeddingModelLogo,
bison: PalmModelLogo, bison: PalmModelLogo,
palm: PalmModelLogo palm: PalmModelLogo,
step: StepModelLogo
} }
for (const key in logoMap) { for (const key in logoMap) {
@ -264,5 +269,17 @@ export const PROVIDER_CONFIG = {
docs: 'https://ai.google.dev/gemini-api/docs', docs: 'https://ai.google.dev/gemini-api/docs',
models: 'https://ai.google.dev/gemini-api/docs/models/gemini' 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'
}
} }
} }

View File

@ -16,3 +16,7 @@ export function useActiveTopic(assistant: Assistant) {
return { activeTopic, setActiveTopic } return { activeTopic, setActiveTopic }
} }
export function getTopic(assistant: Assistant, topicId: string) {
return assistant?.topics.find((topic) => topic.id === topicId)
}

View File

@ -118,7 +118,8 @@ const resources = {
baichuan: 'Baichuan', baichuan: 'Baichuan',
dashscope: 'DashScope', dashscope: 'DashScope',
anthropic: 'Anthropic', anthropic: 'Anthropic',
aihubmix: 'AiHubMix' aihubmix: 'AiHubMix',
stepfun: 'StepFun'
}, },
settings: { settings: {
title: 'Settings', title: 'Settings',
@ -336,7 +337,8 @@ const resources = {
baichuan: '百川', baichuan: '百川',
dashscope: '阿里云灵积', dashscope: '阿里云灵积',
anthropic: 'Anthropic', anthropic: 'Anthropic',
aihubmix: 'AiHubMix' aihubmix: 'AiHubMix',
stepfun: '阶跃星辰'
}, },
settings: { settings: {
title: '设置', title: '设置',

View File

@ -1,5 +1,6 @@
import { useAssistant } from '@renderer/hooks/useAssistant' import { useAssistant } from '@renderer/hooks/useAssistant'
import { useProviderByAssistant } from '@renderer/hooks/useProvider' import { useProviderByAssistant } from '@renderer/hooks/useProvider'
import { getTopic } from '@renderer/hooks/useTopic'
import { fetchChatCompletion, fetchMessagesSummary } from '@renderer/services/api' import { fetchChatCompletion, fetchMessagesSummary } from '@renderer/services/api'
import { EVENT_NAMES, EventEmitter } from '@renderer/services/event' import { EVENT_NAMES, EventEmitter } from '@renderer/services/event'
import { estimateHistoryTokenCount, filterMessages } from '@renderer/services/messages' import { estimateHistoryTokenCount, filterMessages } from '@renderer/services/messages'
@ -50,9 +51,10 @@ const Messages: FC<Props> = ({ assistant, topic }) => {
) )
const autoRenameTopic = useCallback(async () => { 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 }) const summaryText = await fetchMessagesSummary({ messages, assistant })
summaryText && updateTopic({ ...topic, name: summaryText }) summaryText && updateTopic({ ..._topic, name: summaryText })
} }
}, [assistant, messages, topic, updateTopic]) }, [assistant, messages, topic, updateTopic])

View File

@ -104,11 +104,11 @@ const initialState: LlmState = {
enabled: false enabled: false
}, },
{ {
id: 'anthropic', id: 'stepfun',
name: 'Anthropic', name: 'StepFun',
apiKey: '', apiKey: '',
apiHost: 'https://api.anthropic.com/', apiHost: 'https://api.stepfun.com',
models: SYSTEM_MODELS.anthropic.filter((m) => m.enabled), models: SYSTEM_MODELS.stepfun.filter((m) => m.enabled),
isSystem: true, isSystem: true,
enabled: false enabled: false
}, },
@ -139,6 +139,15 @@ const initialState: LlmState = {
isSystem: true, isSystem: true,
enabled: false 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', id: 'ollama',
name: 'Ollama', name: 'Ollama',

View File

@ -312,6 +312,15 @@ const migrateConfig = {
models: SYSTEM_MODELS.gemini.filter((m) => m.enabled), models: SYSTEM_MODELS.gemini.filter((m) => m.enabled),
isSystem: true, isSystem: true,
enabled: false enabled: false
},
{
id: 'stepfun',
name: 'StepFun',
apiKey: '',
apiHost: 'https://api.stepfun.com',
models: SYSTEM_MODELS.stepfun.filter((m) => m.enabled),
isSystem: true,
enabled: false
} }
] ]
} }