Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion src/main/presenter/configPresenter/mcpConfHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { MCP_EVENTS } from '@/events'
import ElectronStore from 'electron-store'
import { app } from 'electron'
import { compare } from 'compare-versions'
import { presenter } from '..'

// MCP设置的接口
interface IMcpSettings {
Expand Down Expand Up @@ -314,7 +315,7 @@ export class McpConfHelper {
}

// 获取MCP服务器配置
getMcpServers(): Promise<Record<string, MCPServerConfig>> {
async getMcpServers(): Promise<Record<string, MCPServerConfig>> {
const storedServers = this.mcpStore.get('mcpServers') || DEFAULT_MCP_SERVERS.mcpServers

// 检查并补充缺少的inmemory服务
Expand Down Expand Up @@ -352,6 +353,13 @@ export class McpConfHelper {
delete updatedServers[serverName]
}

// 移除不兼容的服务
const builtinKnowledgeSupported = await presenter.knowledgePresenter.isSupported()
if (!builtinKnowledgeSupported) {
console.warn('内置知识库服务不支持当前环境,移除相关服务')
delete updatedServers.builtinKnowledge
}

// 如果有变化,更新存储
if (
Object.keys(updatedServers).length !== Object.keys(storedServers).length ||
Expand Down
25 changes: 22 additions & 3 deletions src/main/presenter/knowledgePresenter/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,14 +104,32 @@ export class KnowledgePresenter implements IKnowledgePresenter {
}

/**
* 创建知识库(初始化 RAG 应用)
* Supported operating systems
*/
private static readonly SUPPORTED_OS = [
'win32-x64',
'linux-x64',
'linux-arm64',
'darwin-arm64',
'darwin-x64'
]

isSupported = async (): Promise<boolean> => {
const os = `${process.platform}-${process.arch}`
return KnowledgePresenter.SUPPORTED_OS.includes(os)
}

/**
* Create a knowledge base (initialize RAG application)
* @param config Knowledge base configuration
*/
create = async (config: BuiltinKnowledgeConfig): Promise<void> => {
await this.createStorePresenter(config)
}

/**
* 更新知识库配置
* Update a knowledge base configuration
* @param config Knowledge base configuration
*/
update = async (config: BuiltinKnowledgeConfig): Promise<void> => {
if (config.enabled) {
Expand All @@ -130,7 +148,8 @@ export class KnowledgePresenter implements IKnowledgePresenter {
}

/**
* 删除知识库(移除本地存储)
* Delete a knowledge base (remove local storage)
* @param id Knowledge base ID
*/
delete = async (id: string): Promise<void> => {
if (this.storePresenterCache.has(id)) {
Expand Down
14 changes: 13 additions & 1 deletion src/renderer/src/components/settings/KnowledgeBaseSettings.vue
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,11 @@
<!-- FastGPT知识库 -->
<FastGptKnowledgeSettings ref="fastGptSettingsRef" />
<!-- 内置知识库 -->
<BuiltinKnowledgeSettings ref="builtinSettingsRef" @showDetail="showDetail" />
<BuiltinKnowledgeSettings
v-if="enableBuiltinKnowledge"
ref="builtinSettingsRef"
@showDetail="showDetail"
/>
<!-- 未来可以添加更多知识库类型 -->
<div
class="border rounded-lg p-4 border-dashed flex items-center justify-center text-muted-foreground"
Expand Down Expand Up @@ -137,12 +141,20 @@ import FastGptKnowledgeSettings from './FastGptKnowledgeSettings.vue'
import BuiltinKnowledgeSettings from './BuiltinKnowledgeSettings.vue'
import KnowledgeFile from './KnowledgeFile.vue'
import { BuiltinKnowledgeConfig } from '@shared/presenter'
import { usePresenter } from '@/composables/usePresenter'

const difySettingsRef = ref<InstanceType<typeof DifyKnowledgeSettings> | null>(null)
const ragflowSettingsRef = ref<InstanceType<typeof RagflowKnowledgeSettings> | null>(null)
const fastGptSettingsRef = ref<InstanceType<typeof FastGptKnowledgeSettings> | null>(null)
const builtinSettingsRef = ref<InstanceType<typeof BuiltinKnowledgeSettings> | null>(null)

// 根据系统版本控制是否展示内置知识库
const knowledgePresenter = usePresenter('knowledgePresenter')
const enableBuiltinKnowledge = ref(false)
knowledgePresenter.isSupported().then((res) => {
enableBuiltinKnowledge.value = res
})

const { t } = useI18n()
// 是否展示内置知识库文件详情
const showBuiltinKnowledgeDetail = ref(false)
Expand Down
11 changes: 2 additions & 9 deletions src/shared/presenter.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1398,16 +1398,9 @@ export type KnowledgeFileResult = {
*/
export interface IKnowledgePresenter {
/**
* Create a knowledge base (initialize RAG application)
* @param config Knowledge base configuration
* Check if the knowledge presenter is supported in current environment
*/
create(config: BuiltinKnowledgeConfig): Promise<void>

/**
* Delete a knowledge base (remove local storage)
* @param id Knowledge base ID
*/
delete(id: string): Promise<void>
isSupported(): Promise<boolean>

/**
* Add a file to the knowledge base
Expand Down