feat: add openrouter provider
This commit is contained in:
parent
990affedd0
commit
7c322b7536
BIN
src/renderer/src/assets/images/models/microsoft.png
Normal file
BIN
src/renderer/src/assets/images/models/microsoft.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
BIN
src/renderer/src/assets/images/providers/openrouter.png
Normal file
BIN
src/renderer/src/assets/images/providers/openrouter.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.6 KiB |
@ -311,6 +311,48 @@ export const SYSTEM_MODELS: Record<string, SystemModel[]> = {
|
|||||||
defaultEnabled: true
|
defaultEnabled: true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
openrouter: [
|
||||||
|
{
|
||||||
|
id: 'google/gemma-2-9b-it:free',
|
||||||
|
provider: 'openrouter',
|
||||||
|
name: 'Google: Gemma 2 9B',
|
||||||
|
group: 'Gemma',
|
||||||
|
temperature: 0.7,
|
||||||
|
defaultEnabled: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'microsoft/phi-3-mini-128k-instruct:free',
|
||||||
|
provider: 'openrouter',
|
||||||
|
name: 'Phi-3 Mini 128K Instruct',
|
||||||
|
group: 'Phi',
|
||||||
|
temperature: 0.7,
|
||||||
|
defaultEnabled: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'microsoft/phi-3-medium-128k-instruct:free',
|
||||||
|
provider: 'openrouter',
|
||||||
|
name: 'Phi-3 Medium 128K Instruct',
|
||||||
|
group: 'Phi',
|
||||||
|
temperature: 0.7,
|
||||||
|
defaultEnabled: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'meta-llama/llama-3-8b-instruct:free',
|
||||||
|
provider: 'openrouter',
|
||||||
|
name: 'Meta: Llama 3 8B Instruct',
|
||||||
|
group: 'Llama3',
|
||||||
|
temperature: 0.7,
|
||||||
|
defaultEnabled: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'mistralai/mistral-7b-instruct:free',
|
||||||
|
provider: 'openrouter',
|
||||||
|
name: 'Mistral: Mistral 7B Instruct',
|
||||||
|
group: 'Mistral',
|
||||||
|
temperature: 0.7,
|
||||||
|
defaultEnabled: true
|
||||||
|
}
|
||||||
|
],
|
||||||
groq: [
|
groq: [
|
||||||
{
|
{
|
||||||
id: 'llama3-8b-8192',
|
id: 'llama3-8b-8192',
|
||||||
|
|||||||
@ -32,7 +32,7 @@ const Navigation: FC<Props> = ({ activeAssistant }) => {
|
|||||||
return (
|
return (
|
||||||
<NavbarCenter style={{ border: 'none' }}>
|
<NavbarCenter style={{ border: 'none' }}>
|
||||||
{activeAssistant?.name}
|
{activeAssistant?.name}
|
||||||
<DropdownMenu menu={{ items }} trigger={['click']}>
|
<DropdownMenu menu={{ items, style: { maxHeight: '80vh', overflow: 'auto' } }} trigger={['click']}>
|
||||||
<Button size="small" type="primary" ghost style={{ fontSize: '11px' }}>
|
<Button size="small" type="primary" ghost style={{ fontSize: '11px' }}>
|
||||||
{model ? model.name : 'Select Model'}
|
{model ? model.name : 'Select Model'}
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@ -67,7 +67,9 @@ const PopupContainer: React.FC<Props> = ({ provider: _provider, resolve }) => {
|
|||||||
return (
|
return (
|
||||||
<ListItem key={model.id}>
|
<ListItem key={model.id}>
|
||||||
<ListItemHeader>
|
<ListItemHeader>
|
||||||
<Avatar src={getModelLogo(model.id)} size={24} />
|
<Avatar src={getModelLogo(model.id)} size={24}>
|
||||||
|
{model.name[0].toUpperCase()}
|
||||||
|
</Avatar>
|
||||||
<ListItemName>{model.name}</ListItemName>
|
<ListItemName>{model.name}</ListItemName>
|
||||||
</ListItemHeader>
|
</ListItemHeader>
|
||||||
{hasModel ? (
|
{hasModel ? (
|
||||||
|
|||||||
@ -49,7 +49,7 @@ const ProviderSetting: FC<Props> = ({ provider }) => {
|
|||||||
<Switch
|
<Switch
|
||||||
defaultValue={provider.enabled}
|
defaultValue={provider.enabled}
|
||||||
key={provider.id}
|
key={provider.id}
|
||||||
onChange={(enabled) => updateProvider({ ...provider, enabled })}
|
onChange={(enabled) => updateProvider({ ...provider, apiKey, apiHost, enabled })}
|
||||||
/>
|
/>
|
||||||
</SettingTitle>
|
</SettingTitle>
|
||||||
<Divider style={{ width: '100%', margin: '10px 0' }} />
|
<Divider style={{ width: '100%', margin: '10px 0' }} />
|
||||||
@ -74,7 +74,7 @@ const ProviderSetting: 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.name[0]}
|
{model.name[0].toUpperCase()}
|
||||||
</Avatar>
|
</Avatar>
|
||||||
{model.name}
|
{model.name}
|
||||||
</ModelListItem>
|
</ModelListItem>
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import GroqProviderLogo from '@renderer/assets/images/providers/groq.png'
|
|||||||
import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png'
|
import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png'
|
||||||
import OllamaProviderLogo from '@renderer/assets/images/providers/ollama.png'
|
import OllamaProviderLogo from '@renderer/assets/images/providers/ollama.png'
|
||||||
import MoonshotProviderLogo from '@renderer/assets/images/providers/moonshot.jpeg'
|
import MoonshotProviderLogo from '@renderer/assets/images/providers/moonshot.jpeg'
|
||||||
|
import OpenRouterProviderLogo from '@renderer/assets/images/providers/openrouter.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'
|
||||||
@ -15,6 +16,7 @@ import YiModelLogo from '@renderer/assets/images/models/yi.svg'
|
|||||||
import LlamaModelLogo from '@renderer/assets/images/models/llama.jpeg'
|
import LlamaModelLogo from '@renderer/assets/images/models/llama.jpeg'
|
||||||
import MixtralModelLogo from '@renderer/assets/images/models/mixtral.jpeg'
|
import MixtralModelLogo from '@renderer/assets/images/models/mixtral.jpeg'
|
||||||
import MoonshotModelLogo from '@renderer/assets/images/providers/moonshot.jpeg'
|
import MoonshotModelLogo from '@renderer/assets/images/providers/moonshot.jpeg'
|
||||||
|
import MicrosoftModelLogo from '@renderer/assets/images/models/microsoft.png'
|
||||||
|
|
||||||
export function getProviderLogo(providerId: string) {
|
export function getProviderLogo(providerId: string) {
|
||||||
switch (providerId) {
|
switch (providerId) {
|
||||||
@ -34,6 +36,8 @@ export function getProviderLogo(providerId: string) {
|
|||||||
return OllamaProviderLogo
|
return OllamaProviderLogo
|
||||||
case 'moonshot':
|
case 'moonshot':
|
||||||
return MoonshotProviderLogo
|
return MoonshotProviderLogo
|
||||||
|
case 'openrouter':
|
||||||
|
return OpenRouterProviderLogo
|
||||||
default:
|
default:
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
@ -49,7 +53,9 @@ export function getModelLogo(modelId: string) {
|
|||||||
'yi-': YiModelLogo,
|
'yi-': YiModelLogo,
|
||||||
llama: LlamaModelLogo,
|
llama: LlamaModelLogo,
|
||||||
mixtral: MixtralModelLogo,
|
mixtral: MixtralModelLogo,
|
||||||
moonshot: MoonshotModelLogo
|
mistral: MixtralModelLogo,
|
||||||
|
moonshot: MoonshotModelLogo,
|
||||||
|
phi: MicrosoftModelLogo
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const key in logoMap) {
|
for (const key in logoMap) {
|
||||||
|
|||||||
@ -19,7 +19,7 @@ const persistedReducer = persistReducer(
|
|||||||
{
|
{
|
||||||
key: 'cherry-studio',
|
key: 'cherry-studio',
|
||||||
storage,
|
storage,
|
||||||
version: 5,
|
version: 6,
|
||||||
blacklist: ['runtime'],
|
blacklist: ['runtime'],
|
||||||
migrate
|
migrate
|
||||||
},
|
},
|
||||||
|
|||||||
@ -67,6 +67,15 @@ const initialState: LlmState = {
|
|||||||
isSystem: true,
|
isSystem: true,
|
||||||
enabled: false
|
enabled: false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'openrouter',
|
||||||
|
name: 'OpenRouter',
|
||||||
|
apiKey: '',
|
||||||
|
apiHost: 'https://openrouter.ai/api/v1/',
|
||||||
|
models: SYSTEM_MODELS.openrouter.filter((m) => m.defaultEnabled),
|
||||||
|
isSystem: true,
|
||||||
|
enabled: false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'groq',
|
id: 'groq',
|
||||||
name: 'Groq',
|
name: 'Groq',
|
||||||
|
|||||||
@ -82,6 +82,26 @@ const migrate = createMigrate({
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
// @ts-ignore store type is unknown
|
||||||
|
'6': (state: RootState) => {
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
llm: {
|
||||||
|
...state.llm,
|
||||||
|
providers: [
|
||||||
|
...state.llm.providers,
|
||||||
|
{
|
||||||
|
id: 'openrouter',
|
||||||
|
name: 'OpenRouter',
|
||||||
|
apiKey: '',
|
||||||
|
apiHost: 'https://openrouter.ai/api/v1/',
|
||||||
|
models: SYSTEM_MODELS.openrouter.filter((m) => m.defaultEnabled),
|
||||||
|
isSystem: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user