mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-02 02:09:03 +08:00
* feat(类型): 添加WebSearchProviderIds常量并更新WebSearchProvider类型 * refactor(web-search): 重构网络搜索提供商配置和logo获取逻辑 将webSearchProviders.ts中的提供商logo获取函数移动到使用组件中 并优化提供商配置的类型定义 * feat(WebSearchButton): 添加不同搜索引擎的图标支持 为WebSearchButton组件添加多个搜索引擎的图标支持,包括Baidu、Google、Bing等 * feat(types): 添加预处理和网页搜索提供者的类型校验函数 添加 PreprocessProviderId 和 WebSearchProviderId 的类型校验函数 isPreprocessProviderId 和 isWebSearchProviderId,用于验证字符串是否为有效的提供者 ID * refactor(types): 重命名ApiProviderUnion并添加更新函数类型 添加用于更新不同类型API提供者的函数类型,提高类型安全性 * refactor(websearch): 将搜索提供商配置提取到单独文件 将websearch store中的搜索提供商配置提取到单独的配置文件,提高代码可维护性 * refactor(PreprocessSettings): 移除未使用的 system 选项禁用逻辑 由于 system 字段实际未使用,移除相关代码以简化逻辑 * refactor(api-key-popup): 移除providerKind参数,改用providerId判断类型 * refactor(preprocessProviders): 使用类型定义优化预处理提供者配置 将 providerId 参数类型从 string 改为 PreprocessProviderId 为 PREPROCESS_PROVIDER_CONFIG 添加类型定义 * refactor(hooks): 使用PreprocessProviderId类型替换字符串类型参数 * refactor(hooks): 使用 WebSearchProviderId 类型替换字符串类型参数 将 useWebSearchProvider 钩子的 id 参数类型从 string 改为 WebSearchProviderId,提高类型安全性 * refactor(knowledge): 将providerId类型改为PreprocessProviderId * refactor(PreprocessSettings): 移除未使用的options相关代码 清理PreprocessSettings组件中已被注释掉的options状态和相关逻辑,简化代码结构 * refactor(WebSearchProviderSetting): 将providerId类型从string改为WebSearchProviderId * refactor(websearch): 移除WebSearchProvider类型中不必要的id字段约束 * style(WebSearchButton): 调整图标大小和样式以保持视觉一致性 * fix(ApiKeyListPopup): 修正LLM提供者判断逻辑 使用'models'属性检查替代原有逻辑,更准确地判断是否为LLM provider * fix(ApiKeyListPopup): 修复预处理provider判断逻辑 处理mistral同时提供预处理和llm服务的情况,避免误判
59 lines
2.3 KiB
TypeScript
59 lines
2.3 KiB
TypeScript
import { useTheme } from '@renderer/context/ThemeProvider'
|
||
import { useDefaultPreprocessProvider, usePreprocessProviders } from '@renderer/hooks/usePreprocess'
|
||
import { PreprocessProvider } from '@renderer/types'
|
||
import { Select } from 'antd'
|
||
import { FC, useState } from 'react'
|
||
import { useTranslation } from 'react-i18next'
|
||
|
||
import { SettingContainer, SettingDivider, SettingGroup, SettingRow, SettingRowTitle, SettingTitle } from '..'
|
||
import PreprocessProviderSettings from './PreprocessSettings'
|
||
|
||
const PreprocessSettings: FC = () => {
|
||
const { preprocessProviders } = usePreprocessProviders()
|
||
const { provider: defaultProvider, setDefaultPreprocessProvider } = useDefaultPreprocessProvider()
|
||
const { t } = useTranslation()
|
||
const [selectedProvider, setSelectedProvider] = useState<PreprocessProvider | undefined>(defaultProvider)
|
||
const { theme: themeMode } = useTheme()
|
||
|
||
function updateSelectedPreprocessProvider(providerId: string) {
|
||
const provider = preprocessProviders.find((p) => p.id === providerId)
|
||
if (!provider) {
|
||
return
|
||
}
|
||
setDefaultPreprocessProvider(provider)
|
||
setSelectedProvider(provider)
|
||
}
|
||
|
||
return (
|
||
<SettingContainer theme={themeMode}>
|
||
<SettingGroup theme={themeMode}>
|
||
<SettingTitle>{t('settings.tool.preprocess.title')}</SettingTitle>
|
||
<SettingDivider />
|
||
<SettingRow>
|
||
<SettingRowTitle>{t('settings.tool.preprocess.provider')}</SettingRowTitle>
|
||
<div style={{ display: 'flex', gap: '8px' }}>
|
||
<Select
|
||
value={selectedProvider?.id}
|
||
style={{ width: '200px' }}
|
||
onChange={(value: string) => updateSelectedPreprocessProvider(value)}
|
||
placeholder={t('settings.tool.preprocess.provider_placeholder')}
|
||
options={preprocessProviders.map((p) => ({
|
||
value: p.id,
|
||
label: p.name
|
||
// 由于system字段实际未使用,先注释掉
|
||
// disabled: !isMac && p.id === 'system' // 在非 Mac 系统下禁用 system 选项
|
||
}))}
|
||
/>
|
||
</div>
|
||
</SettingRow>
|
||
</SettingGroup>
|
||
{selectedProvider && (
|
||
<SettingGroup theme={themeMode}>
|
||
<PreprocessProviderSettings provider={selectedProvider} />
|
||
</SettingGroup>
|
||
)}
|
||
</SettingContainer>
|
||
)
|
||
}
|
||
export default PreprocessSettings
|