mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-09 14:59:27 +08:00
refactor: Improve provider settings and menu handling
This commit is contained in:
parent
5a647b0d61
commit
a07c6cdffb
@ -6,8 +6,6 @@ import AnthropicProviderLogo from '@renderer/assets/images/providers/anthropic.p
|
|||||||
import BaichuanProviderLogo from '@renderer/assets/images/providers/baichuan.png'
|
import BaichuanProviderLogo from '@renderer/assets/images/providers/baichuan.png'
|
||||||
import BaiduCloudProviderLogo from '@renderer/assets/images/providers/baidu-cloud.svg'
|
import BaiduCloudProviderLogo from '@renderer/assets/images/providers/baidu-cloud.svg'
|
||||||
import BailianProviderLogo from '@renderer/assets/images/providers/bailian.png'
|
import BailianProviderLogo from '@renderer/assets/images/providers/bailian.png'
|
||||||
import ModelScopeProviderLogo from '@renderer/assets/images/providers/modelscope.png'
|
|
||||||
import BytedanceProviderLogo from '@renderer/assets/images/providers/bytedance.png'
|
|
||||||
import DeepSeekProviderLogo from '@renderer/assets/images/providers/deepseek.png'
|
import DeepSeekProviderLogo from '@renderer/assets/images/providers/deepseek.png'
|
||||||
import DmxapiProviderLogo from '@renderer/assets/images/providers/DMXAPI.png'
|
import DmxapiProviderLogo from '@renderer/assets/images/providers/DMXAPI.png'
|
||||||
import FireworksProviderLogo from '@renderer/assets/images/providers/fireworks.png'
|
import FireworksProviderLogo from '@renderer/assets/images/providers/fireworks.png'
|
||||||
@ -20,13 +18,14 @@ import GroqProviderLogo from '@renderer/assets/images/providers/groq.png'
|
|||||||
import HyperbolicProviderLogo from '@renderer/assets/images/providers/hyperbolic.png'
|
import HyperbolicProviderLogo from '@renderer/assets/images/providers/hyperbolic.png'
|
||||||
import InfiniProviderLogo from '@renderer/assets/images/providers/infini.png'
|
import InfiniProviderLogo from '@renderer/assets/images/providers/infini.png'
|
||||||
import JinaProviderLogo from '@renderer/assets/images/providers/jina.png'
|
import JinaProviderLogo from '@renderer/assets/images/providers/jina.png'
|
||||||
|
import LMStudioProviderLogo from '@renderer/assets/images/providers/lmstudio.png'
|
||||||
import MinimaxProviderLogo from '@renderer/assets/images/providers/minimax.png'
|
import MinimaxProviderLogo from '@renderer/assets/images/providers/minimax.png'
|
||||||
import MistralProviderLogo from '@renderer/assets/images/providers/mistral.png'
|
import MistralProviderLogo from '@renderer/assets/images/providers/mistral.png'
|
||||||
|
import ModelScopeProviderLogo from '@renderer/assets/images/providers/modelscope.png'
|
||||||
import MoonshotProviderLogo from '@renderer/assets/images/providers/moonshot.png'
|
import MoonshotProviderLogo from '@renderer/assets/images/providers/moonshot.png'
|
||||||
import NvidiaProviderLogo from '@renderer/assets/images/providers/nvidia.png'
|
import NvidiaProviderLogo from '@renderer/assets/images/providers/nvidia.png'
|
||||||
import OcoolAiProviderLogo from '@renderer/assets/images/providers/ocoolai.png'
|
import OcoolAiProviderLogo from '@renderer/assets/images/providers/ocoolai.png'
|
||||||
import OllamaProviderLogo from '@renderer/assets/images/providers/ollama.png'
|
import OllamaProviderLogo from '@renderer/assets/images/providers/ollama.png'
|
||||||
import LMStudioProviderLogo from '@renderer/assets/images/providers/lmstudio.png'
|
|
||||||
import OpenAiProviderLogo from '@renderer/assets/images/providers/openai.png'
|
import OpenAiProviderLogo from '@renderer/assets/images/providers/openai.png'
|
||||||
import OpenRouterProviderLogo from '@renderer/assets/images/providers/openrouter.png'
|
import OpenRouterProviderLogo from '@renderer/assets/images/providers/openrouter.png'
|
||||||
import PerplexityProviderLogo from '@renderer/assets/images/providers/perplexity.png'
|
import PerplexityProviderLogo from '@renderer/assets/images/providers/perplexity.png'
|
||||||
|
|||||||
@ -42,8 +42,8 @@ import AddModelPopup from './AddModelPopup'
|
|||||||
import ApiCheckPopup from './ApiCheckPopup'
|
import ApiCheckPopup from './ApiCheckPopup'
|
||||||
import EditModelsPopup from './EditModelsPopup'
|
import EditModelsPopup from './EditModelsPopup'
|
||||||
import GraphRAGSettings from './GraphRAGSettings'
|
import GraphRAGSettings from './GraphRAGSettings'
|
||||||
import OllamSettings from './OllamaSettings'
|
|
||||||
import LMStudioSettings from './LMStudioSettings'
|
import LMStudioSettings from './LMStudioSettings'
|
||||||
|
import OllamSettings from './OllamaSettings'
|
||||||
import SelectProviderModelPopup from './SelectProviderModelPopup'
|
import SelectProviderModelPopup from './SelectProviderModelPopup'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
|||||||
@ -53,7 +53,7 @@ const ProvidersList: FC = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getDropdownMenus = (provider: Provider): MenuProps['items'] => {
|
const getDropdownMenus = (provider: Provider): MenuProps['items'] => {
|
||||||
return [
|
const menus = [
|
||||||
{
|
{
|
||||||
label: t('common.edit'),
|
label: t('common.edit'),
|
||||||
key: 'edit',
|
key: 'edit',
|
||||||
@ -83,6 +83,16 @@ const ProvidersList: FC = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if (providers.filter((p) => p.id === provider.id).length > 1) {
|
||||||
|
return menus
|
||||||
|
}
|
||||||
|
|
||||||
|
if (provider.isSystem) {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
return menus
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -102,9 +112,7 @@ const ProvidersList: FC = () => {
|
|||||||
{...provided.draggableProps}
|
{...provided.draggableProps}
|
||||||
{...provided.dragHandleProps}
|
{...provided.dragHandleProps}
|
||||||
style={{ ...provided.draggableProps.style, marginBottom: 5 }}>
|
style={{ ...provided.draggableProps.style, marginBottom: 5 }}>
|
||||||
<Dropdown
|
<Dropdown menu={{ items: getDropdownMenus(provider) }} trigger={['contextMenu']}>
|
||||||
menu={{ items: provider.isSystem ? [] : getDropdownMenus(provider) }}
|
|
||||||
trigger={['contextMenu']}>
|
|
||||||
<ProviderListItem
|
<ProviderListItem
|
||||||
key={JSON.stringify(provider)}
|
key={JSON.stringify(provider)}
|
||||||
className={provider.id === selectedProvider?.id ? 'active' : ''}
|
className={provider.id === selectedProvider?.id ? 'active' : ''}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { REFERENCE_PROMPT } from '@renderer/config/prompts'
|
import { REFERENCE_PROMPT } from '@renderer/config/prompts'
|
||||||
import { getOllamaKeepAliveTime } from '@renderer/hooks/useOllama'
|
|
||||||
import { getLMStudioKeepAliveTime } from '@renderer/hooks/useLMStudio'
|
import { getLMStudioKeepAliveTime } from '@renderer/hooks/useLMStudio'
|
||||||
|
import { getOllamaKeepAliveTime } from '@renderer/hooks/useOllama'
|
||||||
import { getKnowledgeReferences } from '@renderer/services/KnowledgeService'
|
import { getKnowledgeReferences } from '@renderer/services/KnowledgeService'
|
||||||
import store from '@renderer/store'
|
import store from '@renderer/store'
|
||||||
import { Assistant, GenerateImageParams, Message, Model, Provider, Suggestion } from '@renderer/types'
|
import { Assistant, GenerateImageParams, Message, Model, Provider, Suggestion } from '@renderer/types'
|
||||||
@ -64,7 +64,11 @@ export default abstract class BaseProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public get keepAliveTime() {
|
public get keepAliveTime() {
|
||||||
return this.provider.id === 'ollama' ? getOllamaKeepAliveTime() : this.provider.id === 'lmstudio' ? getLMStudioKeepAliveTime() : undefined
|
return this.provider.id === 'ollama'
|
||||||
|
? getOllamaKeepAliveTime()
|
||||||
|
: this.provider.id === 'lmstudio'
|
||||||
|
? getLMStudioKeepAliveTime()
|
||||||
|
: undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
public async fakeCompletions({ onChunk }: CompletionsParams) {
|
public async fakeCompletions({ onChunk }: CompletionsParams) {
|
||||||
|
|||||||
@ -288,7 +288,7 @@ export default class OpenAIProvider extends BaseProvider {
|
|||||||
const defaultModel = getDefaultModel()
|
const defaultModel = getDefaultModel()
|
||||||
const model = assistant.model || defaultModel
|
const model = assistant.model || defaultModel
|
||||||
if (!message.content) {
|
if (!message.content) {
|
||||||
message.content = ' '
|
message.content = ' '
|
||||||
}
|
}
|
||||||
const messages = [
|
const messages = [
|
||||||
{ role: 'system', content: assistant.prompt },
|
{ role: 'system', content: assistant.prompt },
|
||||||
@ -418,7 +418,6 @@ export default class OpenAIProvider extends BaseProvider {
|
|||||||
const body = {
|
const body = {
|
||||||
model: model.id,
|
model: model.id,
|
||||||
messages: [{ role: 'user', content: 'hi' }],
|
messages: [{ role: 'user', content: 'hi' }],
|
||||||
max_tokens: 100,
|
|
||||||
stream: false
|
stream: false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -50,6 +50,8 @@ const HomeWindow: FC = () => {
|
|||||||
const onCloseWindow = () => window.api.miniWindow.hide()
|
const onCloseWindow = () => window.api.miniWindow.hide()
|
||||||
|
|
||||||
const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
|
const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
|
||||||
|
const isEnterPressed = e.keyCode == 13
|
||||||
|
|
||||||
if (e.key === 'Escape') {
|
if (e.key === 'Escape') {
|
||||||
setText('')
|
setText('')
|
||||||
setRoute('home')
|
setRoute('home')
|
||||||
@ -57,7 +59,7 @@ const HomeWindow: FC = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.key === 'Enter') {
|
if (isEnterPressed) {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
if (content) {
|
if (content) {
|
||||||
setRoute('chat')
|
setRoute('chat')
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user