Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2

This commit is contained in:
fullex 2026-01-01 16:42:35 +08:00
commit 7145a1ded3
4 changed files with 16 additions and 24 deletions

View File

@ -1089,7 +1089,7 @@ export const PROVIDER_URLS: Record<SystemProviderId, ProviderUrls> = {
websites: { websites: {
official: 'https://platform.minimaxi.com/', official: 'https://platform.minimaxi.com/',
apiKey: 'https://platform.minimaxi.com/user-center/basic-information/interface-key', apiKey: 'https://platform.minimaxi.com/user-center/basic-information/interface-key',
docs: 'https://platform.minimaxi.com/document/Announcement', docs: 'https://platform.minimaxi.com/docs/api-reference/text-openai-api',
models: 'https://platform.minimaxi.com/document/Models' models: 'https://platform.minimaxi.com/document/Models'
} }
}, },

View File

@ -13,7 +13,6 @@ import { useAppDispatch } from '@renderer/store'
import { useAppSelector } from '@renderer/store' import { useAppSelector } from '@renderer/store'
import { handleSaveData } from '@renderer/store' import { handleSaveData } from '@renderer/store'
import { selectMemoryConfig } from '@renderer/store/memory' import { selectMemoryConfig } from '@renderer/store/memory'
import { setIsOvmsSupported } from '@renderer/store/runtime'
import { import {
type ToolPermissionRequestPayload, type ToolPermissionRequestPayload,
type ToolPermissionResultPayload, type ToolPermissionResultPayload,
@ -275,17 +274,4 @@ export function useAppInit() {
useEffect(() => { useEffect(() => {
checkDataLimit() checkDataLimit()
}, []) }, [])
useEffect(() => {
// Check once when initing
window.api.ovms
.isSupported()
.then((result) => {
dispatch(setIsOvmsSupported(result))
})
.catch((e) => {
logger.error('Failed to check isOvmsSupported. Fallback to false.', e as Error)
dispatch(setIsOvmsSupported(false))
})
}, [dispatch])
} }

View File

@ -9,7 +9,6 @@ import {
import { DeleteIcon, EditIcon } from '@renderer/components/Icons' import { DeleteIcon, EditIcon } from '@renderer/components/Icons'
import { ProviderAvatar } from '@renderer/components/ProviderAvatar' import { ProviderAvatar } from '@renderer/components/ProviderAvatar'
import { useAllProviders, useProviders } from '@renderer/hooks/useProvider' import { useAllProviders, useProviders } from '@renderer/hooks/useProvider'
import { useRuntime } from '@renderer/hooks/useRuntime'
import { useTimer } from '@renderer/hooks/useTimer' import { useTimer } from '@renderer/hooks/useTimer'
import ImageStorage from '@renderer/services/ImageStorage' import ImageStorage from '@renderer/services/ImageStorage'
import type { Provider, ProviderType } from '@renderer/types' import type { Provider, ProviderType } from '@renderer/types'
@ -23,6 +22,7 @@ import { startTransition, useCallback, useEffect, useRef, useState } from 'react
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { useSearchParams } from 'react-router-dom' import { useSearchParams } from 'react-router-dom'
import styled from 'styled-components' import styled from 'styled-components'
import useSWRImmutable from 'swr/immutable'
import AddProviderPopup from './AddProviderPopup' import AddProviderPopup from './AddProviderPopup'
import ModelNotesPopup from './ModelNotesPopup' import ModelNotesPopup from './ModelNotesPopup'
@ -33,6 +33,16 @@ const logger = loggerService.withContext('ProviderList')
const BUTTON_WRAPPER_HEIGHT = 50 const BUTTON_WRAPPER_HEIGHT = 50
const getIsOvmsSupported = async (): Promise<boolean> => {
try {
const result = await window.api.ovms.isSupported()
return result
} catch (e) {
logger.warn('Fetching isOvmsSupported failed. Fallback to false.', e as Error)
return false
}
}
const ProviderList: FC = () => { const ProviderList: FC = () => {
const [searchParams, setSearchParams] = useSearchParams() const [searchParams, setSearchParams] = useSearchParams()
const providers = useAllProviders() const providers = useAllProviders()
@ -44,7 +54,8 @@ const ProviderList: FC = () => {
const [dragging, setDragging] = useState(false) const [dragging, setDragging] = useState(false)
const [providerLogos, setProviderLogos] = useState<Record<string, string>>({}) const [providerLogos, setProviderLogos] = useState<Record<string, string>>({})
const listRef = useRef<DraggableVirtualListRef>(null) const listRef = useRef<DraggableVirtualListRef>(null)
const { isOvmsSupported } = useRuntime()
const { data: isOvmsSupported } = useSWRImmutable('ovms/isSupported', getIsOvmsSupported)
const setSelectedProvider = useCallback((provider: Provider) => { const setSelectedProvider = useCallback((provider: Provider) => {
startTransition(() => _setSelectedProvider(provider)) startTransition(() => _setSelectedProvider(provider))
@ -279,6 +290,7 @@ const ProviderList: FC = () => {
} }
const filteredProviders = providers.filter((provider) => { const filteredProviders = providers.filter((provider) => {
// don't show it when isOvmsSupported is loading
if (provider.id === 'ovms' && !isOvmsSupported) { if (provider.id === 'ovms' && !isOvmsSupported) {
return false return false
} }

View File

@ -72,7 +72,6 @@ export interface RuntimeState {
// chat: ChatState // chat: ChatState
// websearch: WebSearchState // websearch: WebSearchState
placeHolder: string placeHolder: string
isOvmsSupported: boolean | undefined
} }
// export interface ExportState { // export interface ExportState {
@ -116,8 +115,7 @@ const initialState: RuntimeState = {
// websearch: { // websearch: {
// activeSearches: {} // activeSearches: {}
// }, // },
placeHolder: '', placeHolder: ''
isOvmsSupported: undefined
} }
const runtimeSlice = createSlice({ const runtimeSlice = createSlice({
@ -163,9 +161,6 @@ const runtimeSlice = createSlice({
// setExportState: (state, action: PayloadAction<Partial<ExportState>>) => { // setExportState: (state, action: PayloadAction<Partial<ExportState>>) => {
// state.export = { ...state.export, ...action.payload } // state.export = { ...state.export, ...action.payload }
// }, // },
setIsOvmsSupported: (state, action: PayloadAction<boolean>) => {
state.isOvmsSupported = action.payload
},
// // Chat related actions // // Chat related actions
// toggleMultiSelectMode: (state, action: PayloadAction<boolean>) => { // toggleMultiSelectMode: (state, action: PayloadAction<boolean>) => {
// state.chat.isMultiSelectMode = action.payload // state.chat.isMultiSelectMode = action.payload
@ -232,7 +227,6 @@ export const {
// setResourcesPath, // setResourcesPath,
// setUpdateState, // setUpdateState,
// setExportState, // setExportState,
setIsOvmsSupported,
// // Chat related actions // // Chat related actions
// toggleMultiSelectMode, // toggleMultiSelectMode,
// setSelectedMessageIds, // setSelectedMessageIds,