From cb3db57d2f1f1ea0d63e38756286fe797913260e Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Sat, 8 Feb 2025 23:53:28 +0800 Subject: [PATCH] feat: Add support for SiliconFlow provider charge and knowledge base improvements --- src/main/services/WindowService.ts | 1 + src/renderer/src/config/constant.ts | 1 + .../components/KnowledgeSettingsPopup.tsx | 4 +++- .../ProviderSettings/ProviderSetting.tsx | 8 ++++--- src/renderer/src/services/KnowledgeService.ts | 5 +++-- src/renderer/src/services/ProviderService.ts | 2 +- src/renderer/src/utils/oauth.ts | 22 +++++++++++++++---- 7 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/main/services/WindowService.ts b/src/main/services/WindowService.ts index bf06eb1b..83c32863 100644 --- a/src/main/services/WindowService.ts +++ b/src/main/services/WindowService.ts @@ -165,6 +165,7 @@ export class WindowService { const oauthProviderUrls = [ 'https://account.siliconflow.cn/oauth', + 'https://cloud.siliconflow.cn/expensebill', 'https://aihubmix.com/oauth', 'https://aihubmix.com/topup' ] diff --git a/src/renderer/src/config/constant.ts b/src/renderer/src/config/constant.ts index d73055d4..6c169f23 100644 --- a/src/renderer/src/config/constant.ts +++ b/src/renderer/src/config/constant.ts @@ -1,6 +1,7 @@ export const DEFAULT_TEMPERATURE = 1.0 export const DEFAULT_CONTEXTCOUNT = 5 export const DEFAULT_MAX_TOKENS = 4096 +export const DEFAULT_KNOWLEDGE_DOCUMENT_COUNT = 6 export const FONT_FAMILY = "Ubuntu, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif" diff --git a/src/renderer/src/pages/knowledge/components/KnowledgeSettingsPopup.tsx b/src/renderer/src/pages/knowledge/components/KnowledgeSettingsPopup.tsx index 0049cfc2..68ba85e5 100644 --- a/src/renderer/src/pages/knowledge/components/KnowledgeSettingsPopup.tsx +++ b/src/renderer/src/pages/knowledge/components/KnowledgeSettingsPopup.tsx @@ -1,5 +1,6 @@ import { WarningOutlined } from '@ant-design/icons' import { TopView } from '@renderer/components/TopView' +import { DEFAULT_KNOWLEDGE_DOCUMENT_COUNT } from '@renderer/config/constant' import { getEmbeddingMaxContext } from '@renderer/config/embedings' import { isEmbeddingModel } from '@renderer/config/models' import { useKnowledge } from '@renderer/hooks/useKnowledge' @@ -59,7 +60,7 @@ const PopupContainer: React.FC = ({ base: _base, resolve }) => { const newBase = { ...base, name: values.name, - documentCount: values.documentCount, + documentCount: values.documentCount || DEFAULT_KNOWLEDGE_DOCUMENT_COUNT, chunkSize: values.chunkSize, chunkOverlap: values.chunkOverlap } @@ -89,6 +90,7 @@ const PopupContainer: React.FC = ({ base: _base, resolve }) => { onCancel={onCancel} afterClose={onClose} destroyOnClose + maskClosable={false} centered>
= ({ provider: _provider }) => { {apiKeyWebsite && ( - + {t('settings.provider.get_api_key')} {isProviderSupportCharge(provider) && ( - {t('settings.provider.charge')} + providerCharge(provider.id)}> + {t('settings.provider.charge')} + )} {t('settings.provider.api_key.tip')} diff --git a/src/renderer/src/services/KnowledgeService.ts b/src/renderer/src/services/KnowledgeService.ts index 2858c0cf..19a80dcd 100644 --- a/src/renderer/src/services/KnowledgeService.ts +++ b/src/renderer/src/services/KnowledgeService.ts @@ -1,4 +1,5 @@ import type { ExtractChunkData } from '@llm-tools/embedjs-interfaces' +import { DEFAULT_KNOWLEDGE_DOCUMENT_COUNT } from '@renderer/config/constant' import { getEmbeddingMaxContext } from '@renderer/config/embedings' import AiProvider from '@renderer/providers/AiProvider' import { FileType, KnowledgeBase, KnowledgeBaseParams, Message } from '@renderer/types' @@ -90,13 +91,13 @@ export const getKnowledgeReferences = async (base: KnowledgeBase, message: Messa }) ) - const documentCount = base.documentCount || 6 + const documentCount = base.documentCount || DEFAULT_KNOWLEDGE_DOCUMENT_COUNT const references = await Promise.all( take(_searchResults, documentCount).map(async (item, index) => { const baseItem = base.items.find((i) => i.uniqueId === item.metadata.uniqueLoaderId) return { - id: index, + id: index + 1, content: item.pageContent, sourceUrl: await getKnowledgeSourceUrl(item), type: baseItem?.type diff --git a/src/renderer/src/services/ProviderService.ts b/src/renderer/src/services/ProviderService.ts index 3f0385cb..11fe640a 100644 --- a/src/renderer/src/services/ProviderService.ts +++ b/src/renderer/src/services/ProviderService.ts @@ -21,6 +21,6 @@ export function isProviderSupportAuth(provider: Provider) { } export function isProviderSupportCharge(provider: Provider) { - const supportProviders = ['aihubmix'] + const supportProviders = ['silicon', 'aihubmix'] return supportProviders.includes(provider.id) } diff --git a/src/renderer/src/utils/oauth.ts b/src/renderer/src/utils/oauth.ts index 88bbc227..224098b2 100644 --- a/src/renderer/src/utils/oauth.ts +++ b/src/renderer/src/utils/oauth.ts @@ -58,11 +58,25 @@ export const oauthWithAihubmix = async (setKey) => { window.addEventListener('message', messageHandler) } -export const aihubmixCharge = async () => { - const chargeUrl = `https://aihubmix.com/topup?client_id=cherry_studio_oauth&lang=${getLanguageCode()}&aff=SJyh` +export const providerCharge = async (provider: string) => { + const chargeUrlMap = { + silicon: { + url: 'https://cloud.siliconflow.cn/expensebill', + width: 900, + height: 700 + }, + aihubmix: { + url: `https://aihubmix.com/topup?client_id=cherry_studio_oauth&lang=${getLanguageCode()}&aff=SJyh`, + width: 720, + height: 900 + } + } + + const { url, width, height } = chargeUrlMap[provider] + window.open( - chargeUrl, + url, 'oauth', - 'width=720,height=900,toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,alwaysOnTop=yes,alwaysRaised=yes' + `width=${width},height=${height},toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,alwaysOnTop=yes,alwaysRaised=yes` ) }