refactor: Improve provider settings and menu handling

This commit is contained in:
kangfenmao 2025-02-14 13:35:09 +08:00
parent 5a647b0d61
commit a07c6cdffb
6 changed files with 25 additions and 13 deletions

View File

@ -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'

View File

@ -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 {

View File

@ -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' : ''}

View File

@ -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) {

View File

@ -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
} }

View File

@ -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')