feat: Related Knowledge
This commit is contained in:
parent
f7349d2b3d
commit
4948051f67
@ -21,6 +21,23 @@ const getKnowledgeByFolder: (data?: any, loading?: Ref<boolean>) => Promise<Resu
|
|||||||
return get(`${prefix}/knowledge`, data, loading)
|
return get(`${prefix}/knowledge`, data, loading)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 知识库列表(无分页)
|
||||||
|
* @param 参数
|
||||||
|
* param {
|
||||||
|
folder_id: "string",
|
||||||
|
name: "string",
|
||||||
|
tool_type: "string",
|
||||||
|
desc: string,
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
const getKnowledgeList: (param?: any, loading?: Ref<boolean>) => Promise<Result<any>> = (
|
||||||
|
param,
|
||||||
|
loading,
|
||||||
|
) => {
|
||||||
|
return get(`${prefix}/knowledge`, param, loading)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 知识库分页列表
|
* 知识库分页列表
|
||||||
* @param 参数
|
* @param 参数
|
||||||
@ -31,7 +48,7 @@ const getKnowledgeByFolder: (data?: any, loading?: Ref<boolean>) => Promise<Resu
|
|||||||
desc: string,
|
desc: string,
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
const getKnowledgeList: (
|
const getKnowledgeListPage: (
|
||||||
page: pageRequest,
|
page: pageRequest,
|
||||||
param?: any,
|
param?: any,
|
||||||
loading?: Ref<boolean>,
|
loading?: Ref<boolean>,
|
||||||
@ -234,14 +251,6 @@ const postWebKnowledge: (data: any, loading?: Ref<boolean>) => Promise<Result<an
|
|||||||
return post(`${prefix}/knowledge/web`, data, undefined, loading)
|
return post(`${prefix}/knowledge/web`, data, undefined, loading)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取全部知识库
|
|
||||||
* @param 参数
|
|
||||||
*/
|
|
||||||
const getAllKnowledge: (loading?: Ref<boolean>) => Promise<Result<any[]>> = (loading) => {
|
|
||||||
return get(`${prefix}`, undefined, loading)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取飞书文档列表
|
* 获取飞书文档列表
|
||||||
* @param knowledge_id
|
* @param knowledge_id
|
||||||
@ -269,6 +278,7 @@ const importLarkDocument: (
|
|||||||
export default {
|
export default {
|
||||||
getKnowledgeByFolder,
|
getKnowledgeByFolder,
|
||||||
getKnowledgeList,
|
getKnowledgeList,
|
||||||
|
getKnowledgeListPage,
|
||||||
getKnowledgeDetail,
|
getKnowledgeDetail,
|
||||||
putKnowledge,
|
putKnowledge,
|
||||||
delKnowledge,
|
delKnowledge,
|
||||||
@ -284,5 +294,4 @@ export default {
|
|||||||
|
|
||||||
getLarkDocumentList,
|
getLarkDocumentList,
|
||||||
importLarkDocument,
|
importLarkDocument,
|
||||||
getAllKnowledge,
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -79,6 +79,23 @@ const getKnowledgeByFolder: (data?: any, loading?: Ref<boolean>) => Promise<Resu
|
|||||||
return get(`${prefix}/knowledge`, data, loading)
|
return get(`${prefix}/knowledge`, data, loading)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 知识库列表(无分页)
|
||||||
|
* @param 参数
|
||||||
|
* param {
|
||||||
|
"folder_id": "string",
|
||||||
|
"name": "string",
|
||||||
|
"tool_type": "string",
|
||||||
|
desc: string,
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
const getKnowledgeList: (param?: any, loading?: Ref<boolean>) => Promise<Result<any>> = (
|
||||||
|
param,
|
||||||
|
loading,
|
||||||
|
) => {
|
||||||
|
return get(`${prefix}/knowledge`, param, loading)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 知识库分页列表
|
* 知识库分页列表
|
||||||
* @param 参数
|
* @param 参数
|
||||||
@ -89,7 +106,7 @@ const getKnowledgeByFolder: (data?: any, loading?: Ref<boolean>) => Promise<Resu
|
|||||||
desc: string,
|
desc: string,
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
const getKnowledgeList: (
|
const getKnowledgeListPage: (
|
||||||
page: pageRequest,
|
page: pageRequest,
|
||||||
param?: any,
|
param?: any,
|
||||||
loading?: Ref<boolean>,
|
loading?: Ref<boolean>,
|
||||||
@ -292,14 +309,6 @@ const postWebKnowledge: (data: any, loading?: Ref<boolean>) => Promise<Result<an
|
|||||||
return post(`${prefix}/knowledge/web`, data, undefined, loading)
|
return post(`${prefix}/knowledge/web`, data, undefined, loading)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取全部知识库
|
|
||||||
* @param 参数
|
|
||||||
*/
|
|
||||||
const getAllKnowledge: (loading?: Ref<boolean>) => Promise<Result<any[]>> = (loading) => {
|
|
||||||
return get(`${prefix}/knowledge`, undefined, loading)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取飞书文档列表
|
* 获取飞书文档列表
|
||||||
* @param knowledge_id
|
* @param knowledge_id
|
||||||
@ -327,6 +336,7 @@ const importLarkDocument: (
|
|||||||
export default {
|
export default {
|
||||||
getKnowledgeByFolder,
|
getKnowledgeByFolder,
|
||||||
getKnowledgeList,
|
getKnowledgeList,
|
||||||
|
getKnowledgeListPage,
|
||||||
getKnowledgeDetail,
|
getKnowledgeDetail,
|
||||||
putKnowledge,
|
putKnowledge,
|
||||||
delKnowledge,
|
delKnowledge,
|
||||||
@ -342,7 +352,6 @@ export default {
|
|||||||
|
|
||||||
getLarkDocumentList,
|
getLarkDocumentList,
|
||||||
importLarkDocument,
|
importLarkDocument,
|
||||||
getAllKnowledge,
|
|
||||||
getSharedWorkspaceKnowledge,
|
getSharedWorkspaceKnowledge,
|
||||||
getSharedWorkspaceKnowledgePage,
|
getSharedWorkspaceKnowledgePage,
|
||||||
getSharedAuthorizationKnowledgeGet,
|
getSharedAuthorizationKnowledgeGet,
|
||||||
|
|||||||
@ -169,7 +169,7 @@ function changeMenu(id: string) {
|
|||||||
function getDataset() {
|
function getDataset() {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
knowledge
|
knowledge
|
||||||
.asyncGetAllKnowledge()
|
.asyncGetRootKnowledge()
|
||||||
.then((res: any) => {
|
.then((res: any) => {
|
||||||
list.value = res.data
|
list.value = res.data
|
||||||
common.saveBreadcrumb(list.value)
|
common.saveBreadcrumb(list.value)
|
||||||
|
|||||||
@ -131,7 +131,6 @@ export default {
|
|||||||
addKnowledge: 'Add Related Knowledge',
|
addKnowledge: 'Add Related Knowledge',
|
||||||
addKnowledgePlaceholder: 'The selected knowledge must use the same embedding model',
|
addKnowledgePlaceholder: 'The selected knowledge must use the same embedding model',
|
||||||
selected: 'Selected',
|
selected: 'Selected',
|
||||||
countDataset: 'Knowledge',
|
|
||||||
|
|
||||||
selectSearchMode: 'Retrieval Mode',
|
selectSearchMode: 'Retrieval Mode',
|
||||||
vectorSearch: 'Vector Search',
|
vectorSearch: 'Vector Search',
|
||||||
|
|||||||
@ -122,7 +122,6 @@ export default {
|
|||||||
addKnowledge: '添加关联知识库',
|
addKnowledge: '添加关联知识库',
|
||||||
addKnowledgePlaceholder: '所选知识库必须使用相同的 Embedding 模型',
|
addKnowledgePlaceholder: '所选知识库必须使用相同的 Embedding 模型',
|
||||||
selected: '已选',
|
selected: '已选',
|
||||||
countDataset: '个知识库',
|
|
||||||
|
|
||||||
selectSearchMode: '检索模式',
|
selectSearchMode: '检索模式',
|
||||||
vectorSearch: '向量检索',
|
vectorSearch: '向量检索',
|
||||||
|
|||||||
@ -122,7 +122,6 @@ export default {
|
|||||||
addKnowledge: '新增關聯知識庫',
|
addKnowledge: '新增關聯知識庫',
|
||||||
addKnowledgePlaceholder: '所選知識庫必須使用相同的 Embedding 模型',
|
addKnowledgePlaceholder: '所選知識庫必須使用相同的 Embedding 模型',
|
||||||
selected: '已選',
|
selected: '已選',
|
||||||
countDataset: '個知識庫',
|
|
||||||
|
|
||||||
selectSearchMode: '檢索模式',
|
selectSearchMode: '檢索模式',
|
||||||
vectorSearch: '向量檢索',
|
vectorSearch: '向量檢索',
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import {defineStore} from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
import type {knowledgeData} from '@/api/type/knowledge'
|
import type { knowledgeData } from '@/api/type/knowledge'
|
||||||
import type {UploadUserFile} from 'element-plus'
|
import type { UploadUserFile } from 'element-plus'
|
||||||
import knowledgeApi from '@/api/shared/knowledge'
|
import knowledgeApi from '@/api/shared/knowledge'
|
||||||
import {type Ref} from 'vue'
|
import { type Ref } from 'vue'
|
||||||
|
|
||||||
export interface knowledgeStateTypes {
|
export interface knowledgeStateTypes {
|
||||||
baseInfo: knowledgeData | null
|
baseInfo: knowledgeData | null
|
||||||
@ -31,10 +31,13 @@ const useKnowledgeStore = defineStore('knowledg', {
|
|||||||
saveDocumentsFile(file: UploadUserFile[]) {
|
saveDocumentsFile(file: UploadUserFile[]) {
|
||||||
this.documentsFiles = file
|
this.documentsFiles = file
|
||||||
},
|
},
|
||||||
async asyncGetAllKnowledge(loading?: Ref<boolean>) {
|
async asyncGetRootKnowledge(loading?: Ref<boolean>) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
const params = {
|
||||||
|
folder_id: localStorage.getItem('workspace_id'),
|
||||||
|
}
|
||||||
knowledgeApi
|
knowledgeApi
|
||||||
.getAllKnowledge(loading)
|
.getKnowledgeList(params, loading)
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
resolve(data)
|
resolve(data)
|
||||||
})
|
})
|
||||||
@ -43,10 +46,7 @@ const useKnowledgeStore = defineStore('knowledg', {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
async asyncGetKnowledgeDetail(
|
async asyncGetKnowledgeDetail(knowledge_id: string, loading?: Ref<boolean>) {
|
||||||
knowledge_id: string,
|
|
||||||
loading?: Ref<boolean>,
|
|
||||||
) {
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
knowledgeApi
|
knowledgeApi
|
||||||
.getKnowledgeDetail(knowledge_id, loading)
|
.getKnowledgeDetail(knowledge_id, loading)
|
||||||
@ -58,11 +58,7 @@ const useKnowledgeStore = defineStore('knowledg', {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
async asyncSyncKnowledge(
|
async asyncSyncKnowledge(id: string, sync_type: string, loading?: Ref<boolean>) {
|
||||||
id: string,
|
|
||||||
sync_type: string,
|
|
||||||
loading?: Ref<boolean>,
|
|
||||||
) {
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
knowledgeApi
|
knowledgeApi
|
||||||
.putSyncWebKnowledge(id, sync_type, loading)
|
.putSyncWebKnowledge(id, sync_type, loading)
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
import applicationApi from '@/api/application/application'
|
import applicationApi from '@/api/application/application'
|
||||||
import knowledgeAPI from '@/api/knowledge/knowledge.ts'
|
|
||||||
import applicationXpackApi from '@/api/application/application-xpack'
|
import applicationXpackApi from '@/api/application/application-xpack'
|
||||||
import { type Ref } from 'vue'
|
import { type Ref } from 'vue'
|
||||||
import { getBrowserLang } from '@/locales/index'
|
import { getBrowserLang } from '@/locales/index'
|
||||||
@ -36,19 +35,6 @@ const useApplicationStore = defineStore('application', {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
async asyncGetApplicationKnowledge(id: string, loading?: Ref<boolean>) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
knowledgeAPI
|
|
||||||
.getAllKnowledge(loading)
|
|
||||||
.then((data) => {
|
|
||||||
resolve(data)
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
reject(error)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
async asyncGetAccessToken(id: string, loading?: Ref<boolean>) {
|
async asyncGetAccessToken(id: string, loading?: Ref<boolean>) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const user = useUserStore()
|
const user = useUserStore()
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import {defineStore} from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
import type {knowledgeData} from '@/api/type/knowledge'
|
import type { knowledgeData } from '@/api/type/knowledge'
|
||||||
import type {UploadUserFile} from 'element-plus'
|
import type { UploadUserFile } from 'element-plus'
|
||||||
import knowledgeApi from '@/api/knowledge/knowledge'
|
import knowledgeApi from '@/api/knowledge/knowledge'
|
||||||
import {type Ref} from 'vue'
|
import { type Ref } from 'vue'
|
||||||
|
|
||||||
export interface knowledgeStateTypes {
|
export interface knowledgeStateTypes {
|
||||||
baseInfo: knowledgeData | null
|
baseInfo: knowledgeData | null
|
||||||
@ -31,10 +31,13 @@ const useKnowledgeStore = defineStore('knowledge', {
|
|||||||
saveDocumentsFile(file: UploadUserFile[]) {
|
saveDocumentsFile(file: UploadUserFile[]) {
|
||||||
this.documentsFiles = file
|
this.documentsFiles = file
|
||||||
},
|
},
|
||||||
async asyncGetAllKnowledge(loading?: Ref<boolean>) {
|
async asyncGetRootKnowledge(loading?: Ref<boolean>) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
const params = {
|
||||||
|
folder_id: localStorage.getItem('workspace_id'),
|
||||||
|
}
|
||||||
knowledgeApi
|
knowledgeApi
|
||||||
.getAllKnowledge(loading)
|
.getKnowledgeList(params, loading)
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
resolve(data)
|
resolve(data)
|
||||||
})
|
})
|
||||||
@ -43,10 +46,7 @@ const useKnowledgeStore = defineStore('knowledge', {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
async asyncGetKnowledgeDetail(
|
async asyncGetKnowledgeDetail(knowledge_id: string, loading?: Ref<boolean>) {
|
||||||
knowledge_id: string,
|
|
||||||
loading?: Ref<boolean>,
|
|
||||||
) {
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
knowledgeApi
|
knowledgeApi
|
||||||
.getKnowledgeDetail(knowledge_id, loading)
|
.getKnowledgeDetail(knowledge_id, loading)
|
||||||
@ -58,11 +58,7 @@ const useKnowledgeStore = defineStore('knowledge', {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
async asyncSyncKnowledge(
|
async asyncSyncKnowledge(id: string, sync_type: string, loading?: Ref<boolean>) {
|
||||||
id: string,
|
|
||||||
sync_type: string,
|
|
||||||
loading?: Ref<boolean>,
|
|
||||||
) {
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
knowledgeApi
|
knowledgeApi
|
||||||
.putSyncWebKnowledge(id, sync_type, loading)
|
.putSyncWebKnowledge(id, sync_type, loading)
|
||||||
|
|||||||
@ -185,6 +185,7 @@
|
|||||||
<div class="flex align-center" style="width: 80%">
|
<div class="flex align-center" style="width: 80%">
|
||||||
<KnowledgeIcon
|
<KnowledgeIcon
|
||||||
:type="relatedObject(knowledgeList, item, 'id')?.type"
|
:type="relatedObject(knowledgeList, item, 'id')?.type"
|
||||||
|
class="mr-12"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<span
|
<span
|
||||||
@ -439,7 +440,7 @@ import { t } from '@/locales'
|
|||||||
import TTSModeParamSettingDialog from './component/TTSModeParamSettingDialog.vue'
|
import TTSModeParamSettingDialog from './component/TTSModeParamSettingDialog.vue'
|
||||||
import ReasoningParamSettingDialog from './component/ReasoningParamSettingDialog.vue'
|
import ReasoningParamSettingDialog from './component/ReasoningParamSettingDialog.vue'
|
||||||
|
|
||||||
const { model, application } = useStore()
|
const { knowledge, model, application } = useStore()
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const {
|
const {
|
||||||
@ -628,7 +629,7 @@ function getDetail() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getKnowledge() {
|
function getKnowledge() {
|
||||||
application.asyncGetApplicationKnowledge(id, knowledgeLoading).then((res: any) => {
|
knowledge.asyncGetRootKnowledge(knowledgeLoading).then((res: any) => {
|
||||||
knowledgeList.value = res.data
|
knowledgeList.value = res.data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -706,8 +707,7 @@ function refresh() {
|
|||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getModel()
|
getModel()
|
||||||
// todo
|
getKnowledge()
|
||||||
// getKnowledge()
|
|
||||||
getDetail()
|
getDetail()
|
||||||
getSTTModel()
|
getSTTModel()
|
||||||
getTTSModel()
|
getTTSModel()
|
||||||
|
|||||||
@ -35,23 +35,39 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<el-scrollbar>
|
<LayoutContainer class="application-manage">
|
||||||
<div class="max-height">
|
<template #left>
|
||||||
<el-row :gutter="12" v-loading="loading">
|
<folder-tree
|
||||||
<el-col :span="12" v-for="(item, index) in filterData" :key="index" class="mb-16">
|
:data="folderList"
|
||||||
<CardCheckbox value-field="id" :data="item" v-model="checkList" @change="changeHandle">
|
:currentNodeKey="currentFolder?.id"
|
||||||
<span class="ellipsis cursor" :title="item.name"> {{ item.name }}</span>
|
@handleNodeClick="folderClickHandel"
|
||||||
</CardCheckbox>
|
class="p-8"
|
||||||
</el-col>
|
v-loading="folderLoading"
|
||||||
</el-row>
|
/>
|
||||||
</div>
|
</template>
|
||||||
</el-scrollbar>
|
<el-scrollbar>
|
||||||
|
<div class="max-height layout-bg p-16-24">
|
||||||
|
<el-row :gutter="12" v-loading="loading">
|
||||||
|
<el-col :span="12" v-for="(item, index) in filterData" :key="index" class="mb-16">
|
||||||
|
<CardCheckbox
|
||||||
|
value-field="id"
|
||||||
|
:data="item"
|
||||||
|
v-model="checkList"
|
||||||
|
@change="changeHandle"
|
||||||
|
>
|
||||||
|
<span class="ellipsis cursor ml-12" :title="item.name"> {{ item.name }}</span>
|
||||||
|
</CardCheckbox>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</el-scrollbar>
|
||||||
|
</LayoutContainer>
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="flex-between">
|
<div class="flex-between">
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<el-text type="info" class="color-secondary mr-8" v-if="checkList.length > 0">
|
<el-text type="info" class="color-secondary mr-8" v-if="checkList.length > 0">
|
||||||
{{ $t('views.application.dialog.selected') }} {{ checkList.length }}
|
{{ $t('views.application.dialog.selected') }} {{ checkList.length }}
|
||||||
{{ $t('views.application.dialog.countDataset') }}
|
|
||||||
</el-text>
|
</el-text>
|
||||||
<el-button link type="primary" v-if="checkList.length > 0" @click="clearCheck">
|
<el-button link type="primary" v-if="checkList.length > 0" @click="clearCheck">
|
||||||
{{ $t('common.clear') }}
|
{{ $t('common.clear') }}
|
||||||
@ -62,7 +78,7 @@
|
|||||||
{{ $t('common.cancel') }}
|
{{ $t('common.cancel') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button type="primary" @click="submitHandle">
|
<el-button type="primary" @click="submitHandle">
|
||||||
{{ $t('common.confirm') }}
|
{{ $t('common.add') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@ -71,6 +87,8 @@
|
|||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, ref, watch } from 'vue'
|
import { computed, ref, watch } from 'vue'
|
||||||
|
import KnowledgeApi from '@/api/knowledge/knowledge'
|
||||||
|
import useStore from '@/stores'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
data: {
|
data: {
|
||||||
type: Array<any>,
|
type: Array<any>,
|
||||||
@ -80,12 +98,14 @@ const props = defineProps({
|
|||||||
})
|
})
|
||||||
|
|
||||||
const emit = defineEmits(['addData', 'refresh'])
|
const emit = defineEmits(['addData', 'refresh'])
|
||||||
|
const { folder } = useStore()
|
||||||
|
|
||||||
const dialogVisible = ref<boolean>(false)
|
const dialogVisible = ref<boolean>(false)
|
||||||
const checkList = ref([])
|
const checkList = ref([])
|
||||||
const currentEmbedding = ref('')
|
const currentEmbedding = ref('')
|
||||||
const searchValue = ref('')
|
const searchValue = ref('')
|
||||||
const searchDate = ref<any[]>([])
|
const searchDate = ref<any[]>([])
|
||||||
|
const loading = ref(false)
|
||||||
|
|
||||||
const filterData = computed(() => {
|
const filterData = computed(() => {
|
||||||
return currentEmbedding.value
|
return currentEmbedding.value
|
||||||
@ -124,8 +144,8 @@ function clearCheck() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const open = (checked: any) => {
|
const open = (checked: any) => {
|
||||||
searchDate.value = props.data
|
|
||||||
checkList.value = checked
|
checkList.value = checked
|
||||||
|
getFolder()
|
||||||
if (checkList.value.length > 0) {
|
if (checkList.value.length > 0) {
|
||||||
currentEmbedding.value = props.data.filter(
|
currentEmbedding.value = props.data.filter(
|
||||||
(v) => v.id === checkList.value[0],
|
(v) => v.id === checkList.value[0],
|
||||||
@ -134,6 +154,7 @@ const open = (checked: any) => {
|
|||||||
|
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
const submitHandle = () => {
|
const submitHandle = () => {
|
||||||
emit('addData', checkList.value)
|
emit('addData', checkList.value)
|
||||||
dialogVisible.value = false
|
dialogVisible.value = false
|
||||||
@ -143,6 +164,36 @@ const refresh = () => {
|
|||||||
emit('refresh')
|
emit('refresh')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const folderList = ref<any[]>([])
|
||||||
|
const knowledgeList = ref<any[]>([])
|
||||||
|
const currentFolder = ref<any>({})
|
||||||
|
const folderLoading = ref(false)
|
||||||
|
// 文件
|
||||||
|
function folderClickHandel(row: any) {
|
||||||
|
currentFolder.value = row
|
||||||
|
knowledgeList.value = []
|
||||||
|
if (currentFolder.value.id === 'share') return
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
function getFolder() {
|
||||||
|
const params = {}
|
||||||
|
folder.asyncGetFolder('KNOWLEDGE', params, folderLoading).then((res: any) => {
|
||||||
|
folderList.value = res.data
|
||||||
|
currentFolder.value = res.data?.[0] || {}
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function getList() {
|
||||||
|
const params = {
|
||||||
|
folder_id: currentFolder.value?.id || localStorage.getItem('workspace_id'),
|
||||||
|
}
|
||||||
|
KnowledgeApi.getKnowledgeList(params, loading).then((res) => {
|
||||||
|
searchDate.value = res.data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
defineExpose({ open })
|
defineExpose({ open })
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
@ -152,11 +203,9 @@ defineExpose({ open })
|
|||||||
padding: 12px 20px 4px 24px;
|
padding: 12px 20px 4px 24px;
|
||||||
border-bottom: 1px solid var(--el-border-color-light);
|
border-bottom: 1px solid var(--el-border-color-light);
|
||||||
}
|
}
|
||||||
.el-dialog__body {
|
|
||||||
padding: 8px !important;
|
|
||||||
}
|
|
||||||
.el-dialog__footer {
|
.el-dialog__footer {
|
||||||
padding: 0 24px 16px 24px;
|
padding: 12px 24px 12px 24px;
|
||||||
|
border-top: 1px solid var(--el-border-color-light);
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-dialog__headerbtn {
|
.el-dialog__headerbtn {
|
||||||
@ -165,7 +214,7 @@ defineExpose({ open })
|
|||||||
}
|
}
|
||||||
.max-height {
|
.max-height {
|
||||||
max-height: calc(100vh - 260px);
|
max-height: calc(100vh - 260px);
|
||||||
padding: 0 16px;
|
min-height: 300px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -10,182 +10,174 @@
|
|||||||
:close-on-press-escape="false"
|
:close-on-press-escape="false"
|
||||||
>
|
>
|
||||||
<el-scrollbar max-height="550">
|
<el-scrollbar max-height="550">
|
||||||
<div class="p-16">
|
<el-form label-position="top" ref="paramFormRef" :model="form" v-loading="loading">
|
||||||
<el-form label-position="top" ref="paramFormRef" :model="form" v-loading="loading">
|
<el-form-item :label="$t('views.application.dialog.selectSearchMode')">
|
||||||
<el-form-item :label="$t('views.application.dialog.selectSearchMode')">
|
<el-radio-group
|
||||||
<el-radio-group
|
v-model="form.knowledge_setting.search_mode"
|
||||||
v-model="form.knowledge_setting.search_mode"
|
class="card__radio"
|
||||||
class="card__radio"
|
@change="changeHandle"
|
||||||
@change="changeHandle"
|
|
||||||
>
|
|
||||||
<el-card
|
|
||||||
shadow="never"
|
|
||||||
class="mb-16"
|
|
||||||
:class="form.search_mode === 'embedding' ? 'active' : ''"
|
|
||||||
>
|
|
||||||
<el-radio value="embedding" size="large">
|
|
||||||
<p class="mb-4">
|
|
||||||
{{ $t('views.application.dialog.vectorSearch') }}
|
|
||||||
</p>
|
|
||||||
<el-text type="info">{{
|
|
||||||
$t('views.application.dialog.vectorSearchTooltip')
|
|
||||||
}}</el-text>
|
|
||||||
</el-radio>
|
|
||||||
</el-card>
|
|
||||||
<el-card
|
|
||||||
shadow="never"
|
|
||||||
class="mb-16"
|
|
||||||
:class="form.knowledge_setting.search_mode === 'keywords' ? 'active' : ''"
|
|
||||||
>
|
|
||||||
<el-radio value="keywords" size="large">
|
|
||||||
<p class="mb-4">
|
|
||||||
{{ $t('views.application.dialog.fullTextSearch') }}
|
|
||||||
</p>
|
|
||||||
<el-text type="info">{{
|
|
||||||
$t('views.application.dialog.fullTextSearchTooltip')
|
|
||||||
}}</el-text>
|
|
||||||
</el-radio>
|
|
||||||
</el-card>
|
|
||||||
<el-card
|
|
||||||
shadow="never"
|
|
||||||
:class="form.knowledge_setting.search_mode === 'blend' ? 'active' : ''"
|
|
||||||
>
|
|
||||||
<el-radio value="blend" size="large">
|
|
||||||
<p class="mb-4">
|
|
||||||
{{ $t('views.application.dialog.hybridSearch') }}
|
|
||||||
</p>
|
|
||||||
<el-text type="info">{{
|
|
||||||
$t('views.application.dialog.hybridSearchTooltip')
|
|
||||||
}}</el-text>
|
|
||||||
</el-radio>
|
|
||||||
</el-card>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-row :gutter="20">
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item>
|
|
||||||
<template #label>
|
|
||||||
<div class="flex align-center">
|
|
||||||
<span class="mr-4">{{
|
|
||||||
$t('views.application.dialog.similarityThreshold')
|
|
||||||
}}</span>
|
|
||||||
<el-tooltip
|
|
||||||
effect="dark"
|
|
||||||
:content="$t('views.application.dialog.similarityTooltip')"
|
|
||||||
placement="right"
|
|
||||||
>
|
|
||||||
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
|
|
||||||
</el-tooltip>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<el-input-number
|
|
||||||
v-model="form.knowledge_setting.similarity"
|
|
||||||
:min="0"
|
|
||||||
:max="form.knowledge_setting.search_mode === 'blend' ? 2 : 1"
|
|
||||||
:precision="3"
|
|
||||||
:step="0.1"
|
|
||||||
:value-on-clear="0"
|
|
||||||
controls-position="right"
|
|
||||||
class="w-full"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item :label="$t('views.application.dialog.topReferences')">
|
|
||||||
<el-input-number
|
|
||||||
v-model="form.knowledge_setting.top_n"
|
|
||||||
:min="1"
|
|
||||||
:max="10000"
|
|
||||||
:value-on-clear="1"
|
|
||||||
controls-position="right"
|
|
||||||
class="w-full"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-form-item :label="$t('views.application.dialog.maxCharacters')">
|
|
||||||
<el-slider
|
|
||||||
v-model="form.knowledge_setting.max_paragraph_char_number"
|
|
||||||
show-input
|
|
||||||
:show-input-controls="false"
|
|
||||||
:min="500"
|
|
||||||
:max="100000"
|
|
||||||
class="custom-slider"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item
|
|
||||||
v-if="!isWorkflowType"
|
|
||||||
:label="$t('views.application.dialog.noReferencesAction')"
|
|
||||||
>
|
>
|
||||||
<el-form
|
<el-card
|
||||||
label-position="top"
|
shadow="never"
|
||||||
ref="noReferencesformRef"
|
class="mb-16"
|
||||||
:model="noReferencesform"
|
:class="form.search_mode === 'embedding' ? 'active' : ''"
|
||||||
:rules="noReferencesRules"
|
|
||||||
:hide-required-asterisk="true"
|
|
||||||
class="w-full"
|
|
||||||
>
|
>
|
||||||
<el-radio-group
|
<el-radio value="embedding" size="large">
|
||||||
v-model="form.knowledge_setting.no_references_setting.status"
|
<p class="mb-4">
|
||||||
class="radio-block-avatar"
|
{{ $t('views.application.dialog.vectorSearch') }}
|
||||||
>
|
</p>
|
||||||
<el-radio value="ai_questioning">
|
<el-text type="info">{{
|
||||||
<p>
|
$t('views.application.dialog.vectorSearchTooltip')
|
||||||
{{ $t('views.application.dialog.continueQuestioning') }}
|
}}</el-text>
|
||||||
</p>
|
</el-radio>
|
||||||
</el-radio>
|
</el-card>
|
||||||
|
<el-card
|
||||||
<el-radio value="designated_answer">
|
shadow="never"
|
||||||
<p>{{ $t('views.application.dialog.provideAnswer') }}</p>
|
class="mb-16"
|
||||||
<el-form-item
|
:class="form.knowledge_setting.search_mode === 'keywords' ? 'active' : ''"
|
||||||
v-if="
|
>
|
||||||
form.knowledge_setting.no_references_setting.status === 'designated_answer'
|
<el-radio value="keywords" size="large">
|
||||||
"
|
<p class="mb-4">
|
||||||
prop="designated_answer"
|
{{ $t('views.application.dialog.fullTextSearch') }}
|
||||||
|
</p>
|
||||||
|
<el-text type="info">{{
|
||||||
|
$t('views.application.dialog.fullTextSearchTooltip')
|
||||||
|
}}</el-text>
|
||||||
|
</el-radio>
|
||||||
|
</el-card>
|
||||||
|
<el-card
|
||||||
|
shadow="never"
|
||||||
|
:class="form.knowledge_setting.search_mode === 'blend' ? 'active' : ''"
|
||||||
|
>
|
||||||
|
<el-radio value="blend" size="large">
|
||||||
|
<p class="mb-4">
|
||||||
|
{{ $t('views.application.dialog.hybridSearch') }}
|
||||||
|
</p>
|
||||||
|
<el-text type="info">{{
|
||||||
|
$t('views.application.dialog.hybridSearchTooltip')
|
||||||
|
}}</el-text>
|
||||||
|
</el-radio>
|
||||||
|
</el-card>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item>
|
||||||
|
<template #label>
|
||||||
|
<div class="flex align-center">
|
||||||
|
<span class="mr-4">{{ $t('views.application.dialog.similarityThreshold') }}</span>
|
||||||
|
<el-tooltip
|
||||||
|
effect="dark"
|
||||||
|
:content="$t('views.application.dialog.similarityTooltip')"
|
||||||
|
placement="right"
|
||||||
>
|
>
|
||||||
<el-input
|
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
|
||||||
v-model="noReferencesform.designated_answer"
|
</el-tooltip>
|
||||||
:rows="2"
|
</div>
|
||||||
type="textarea"
|
</template>
|
||||||
maxlength="2048"
|
<el-input-number
|
||||||
:placeholder="defaultValue['designated_answer']"
|
v-model="form.knowledge_setting.similarity"
|
||||||
/>
|
:min="0"
|
||||||
</el-form-item>
|
:max="form.knowledge_setting.search_mode === 'blend' ? 2 : 1"
|
||||||
</el-radio>
|
:precision="3"
|
||||||
</el-radio-group>
|
:step="0.1"
|
||||||
</el-form>
|
:value-on-clear="0"
|
||||||
</el-form-item>
|
controls-position="right"
|
||||||
|
class="w-full"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item :label="$t('views.application.dialog.topReferences')">
|
||||||
|
<el-input-number
|
||||||
|
v-model="form.knowledge_setting.top_n"
|
||||||
|
:min="1"
|
||||||
|
:max="10000"
|
||||||
|
:value-on-clear="1"
|
||||||
|
controls-position="right"
|
||||||
|
class="w-full"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
<el-form-item @click.prevent v-if="!isWorkflowType">
|
<el-form-item :label="$t('views.application.dialog.maxCharacters')">
|
||||||
<template #label>
|
<el-slider
|
||||||
<div class="flex align-center">
|
v-model="form.knowledge_setting.max_paragraph_char_number"
|
||||||
<span class="mr-4">{{
|
show-input
|
||||||
$t('views.application.form.problemOptimization.label')
|
:show-input-controls="false"
|
||||||
}}</span>
|
:min="500"
|
||||||
</div>
|
:max="100000"
|
||||||
</template>
|
class="custom-slider"
|
||||||
<el-switch size="small" v-model="form.problem_optimization"></el-switch>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
|
||||||
v-if="form.problem_optimization"
|
<el-form-item
|
||||||
:label="$t('views.application.form.prompt.label')"
|
v-if="!isWorkflowType"
|
||||||
|
:label="$t('views.application.dialog.noReferencesAction')"
|
||||||
|
>
|
||||||
|
<el-form
|
||||||
|
label-position="top"
|
||||||
|
ref="noReferencesformRef"
|
||||||
|
:model="noReferencesform"
|
||||||
|
:rules="noReferencesRules"
|
||||||
|
:hide-required-asterisk="true"
|
||||||
|
class="w-full"
|
||||||
>
|
>
|
||||||
<el-input
|
<el-radio-group
|
||||||
v-model="form.problem_optimization_prompt"
|
v-model="form.knowledge_setting.no_references_setting.status"
|
||||||
:rows="6"
|
class="radio-block-avatar"
|
||||||
type="textarea"
|
>
|
||||||
maxlength="2048"
|
<el-radio value="ai_questioning">
|
||||||
:placeholder="defaultPrompt"
|
<p>
|
||||||
/>
|
{{ $t('views.application.dialog.continueQuestioning') }}
|
||||||
</el-form-item>
|
</p>
|
||||||
</el-form>
|
</el-radio>
|
||||||
</div>
|
|
||||||
|
<el-radio value="designated_answer">
|
||||||
|
<p>{{ $t('views.application.dialog.provideAnswer') }}</p>
|
||||||
|
<el-form-item
|
||||||
|
v-if="form.knowledge_setting.no_references_setting.status === 'designated_answer'"
|
||||||
|
prop="designated_answer"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model="noReferencesform.designated_answer"
|
||||||
|
:rows="2"
|
||||||
|
type="textarea"
|
||||||
|
maxlength="2048"
|
||||||
|
:placeholder="defaultValue['designated_answer']"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item @click.prevent v-if="!isWorkflowType">
|
||||||
|
<template #label>
|
||||||
|
<div class="flex align-center">
|
||||||
|
<span class="mr-4">{{ $t('views.application.form.problemOptimization.label') }}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<el-switch size="small" v-model="form.problem_optimization"></el-switch>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
v-if="form.problem_optimization"
|
||||||
|
:label="$t('views.application.form.prompt.label')"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model="form.problem_optimization_prompt"
|
||||||
|
:rows="6"
|
||||||
|
type="textarea"
|
||||||
|
maxlength="2048"
|
||||||
|
:placeholder="defaultPrompt"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span class="dialog-footer p-16">
|
<span class="dialog-footer">
|
||||||
<el-button @click.prevent="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
|
<el-button @click.prevent="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
|
||||||
<el-button type="primary" @click="submit(noReferencesformRef)" :loading="loading">
|
<el-button type="primary" @click="submit(noReferencesformRef)" :loading="loading">
|
||||||
{{ $t('common.save') }}
|
{{ $t('common.save') }}
|
||||||
|
|||||||
@ -115,7 +115,7 @@ const submitHandle = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getDataset() {
|
function getDataset() {
|
||||||
knowledge.asyncGetAllKnowledge(loading).then((res: any) => {
|
knowledge.asyncGetRootKnowledge(loading).then((res: any) => {
|
||||||
datasetList.value = res.data?.filter((v: any) => v.id !== id)
|
datasetList.value = res.data?.filter((v: any) => v.id !== id)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -92,7 +92,7 @@ const submitHandle = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getDataset() {
|
function getDataset() {
|
||||||
knowledge.asyncGetAllKnowledge(loading).then((res: any) => {
|
knowledge.asyncGetRootKnowledge(loading).then((res: any) => {
|
||||||
datasetList.value = res.data?.filter((v: any) => v.id !== id)
|
datasetList.value = res.data?.filter((v: any) => v.id !== id)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -368,7 +368,7 @@ function getList() {
|
|||||||
[search_type.value]: search_form.value[search_type.value],
|
[search_type.value]: search_form.value[search_type.value],
|
||||||
}
|
}
|
||||||
|
|
||||||
KnowledgeApi.getKnowledgeList(paginationConfig, params, loading).then((res) => {
|
KnowledgeApi.getKnowledgeListPage(paginationConfig, params, loading).then((res) => {
|
||||||
paginationConfig.total = res.data.total
|
paginationConfig.total = res.data.total
|
||||||
knowledgeList.value = [...knowledgeList.value, ...res.data.records]
|
knowledgeList.value = [...knowledgeList.value, ...res.data.records]
|
||||||
})
|
})
|
||||||
|
|||||||
@ -363,7 +363,7 @@ function getList() {
|
|||||||
[search_type.value]: search_form.value[search_type.value],
|
[search_type.value]: search_form.value[search_type.value],
|
||||||
}
|
}
|
||||||
|
|
||||||
KnowledgeApi.getKnowledgeList(paginationConfig, params, loading).then((res) => {
|
KnowledgeApi.getKnowledgeListPage(paginationConfig, params, loading).then((res) => {
|
||||||
paginationConfig.total = res.data.total
|
paginationConfig.total = res.data.total
|
||||||
knowledgeList.value = [...knowledgeList.value, ...res.data.records]
|
knowledgeList.value = [...knowledgeList.value, ...res.data.records]
|
||||||
})
|
})
|
||||||
|
|||||||
@ -144,7 +144,7 @@ function getDocument(id: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getDataset() {
|
function getDataset() {
|
||||||
knowledge.asyncGetAllKnowledge(loading).then((res: any) => {
|
knowledge.asyncGetRootKnowledge(loading).then((res: any) => {
|
||||||
datasetList.value = res.data
|
datasetList.value = res.data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -121,7 +121,7 @@ function getDocument(id: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getDataset() {
|
function getDataset() {
|
||||||
knowledge.asyncGetAllKnowledge(loading).then((res: any) => {
|
knowledge.asyncGetRootKnowledge(loading).then((res: any) => {
|
||||||
datasetList.value = res.data
|
datasetList.value = res.data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,67 +11,65 @@
|
|||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<el-scrollbar always>
|
<el-scrollbar always>
|
||||||
<div class="p-16">
|
<el-form label-position="top" ref="paramFormRef" :model="form">
|
||||||
<el-form label-position="top" ref="paramFormRef" :model="form">
|
<el-row :gutter="20">
|
||||||
<el-row :gutter="20">
|
<el-col :span="12">
|
||||||
<el-col :span="12">
|
<el-form-item>
|
||||||
<el-form-item>
|
<template #label>
|
||||||
<template #label>
|
<div class="flex align-center">
|
||||||
<div class="flex align-center">
|
<span class="mr-4"
|
||||||
<span class="mr-4"
|
>Score {{ $t('views.applicationWorkflow.nodes.rerankerNode.higher') }}</span
|
||||||
>Score {{ $t('views.applicationWorkflow.nodes.rerankerNode.higher') }}</span
|
>
|
||||||
>
|
<el-tooltip
|
||||||
<el-tooltip
|
effect="dark"
|
||||||
effect="dark"
|
:content="$t('views.applicationWorkflow.nodes.rerankerNode.ScoreTooltip')"
|
||||||
:content="$t('views.applicationWorkflow.nodes.rerankerNode.ScoreTooltip')"
|
placement="right"
|
||||||
placement="right"
|
>
|
||||||
>
|
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
|
||||||
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
|
</el-tooltip>
|
||||||
</el-tooltip>
|
</div>
|
||||||
</div>
|
</template>
|
||||||
</template>
|
<el-input-number
|
||||||
<el-input-number
|
v-model="form.similarity"
|
||||||
v-model="form.similarity"
|
:min="0"
|
||||||
:min="0"
|
:max="form.search_mode === 'blend' ? 2 : 1"
|
||||||
:max="form.search_mode === 'blend' ? 2 : 1"
|
:precision="3"
|
||||||
:precision="3"
|
:step="0.1"
|
||||||
:step="0.1"
|
:value-on-clear="0"
|
||||||
:value-on-clear="0"
|
controls-position="right"
|
||||||
controls-position="right"
|
class="w-full"
|
||||||
class="w-full"
|
/>
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
</el-col>
|
<el-col :span="12">
|
||||||
<el-col :span="12">
|
<el-form-item :label="$t('views.application.dialog.topReferences')">
|
||||||
<el-form-item :label="$t('views.application.dialog.topReferences')">
|
<el-input-number
|
||||||
<el-input-number
|
v-model="form.top_n"
|
||||||
v-model="form.top_n"
|
:min="1"
|
||||||
:min="1"
|
:max="10000"
|
||||||
:max="10000"
|
:value-on-clear="1"
|
||||||
:value-on-clear="1"
|
controls-position="right"
|
||||||
controls-position="right"
|
class="w-full"
|
||||||
class="w-full"
|
/>
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
</el-col>
|
</el-row>
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-form-item :label="$t('views.application.dialog.maxCharacters')">
|
<el-form-item :label="$t('views.application.dialog.maxCharacters')">
|
||||||
<el-slider
|
<el-slider
|
||||||
v-model="form.max_paragraph_char_number"
|
v-model="form.max_paragraph_char_number"
|
||||||
show-input
|
show-input
|
||||||
:show-input-controls="false"
|
:show-input-controls="false"
|
||||||
:min="500"
|
:min="500"
|
||||||
:max="100000"
|
:max="100000"
|
||||||
class="custom-slider"
|
class="custom-slider"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span class="dialog-footer p-16">
|
<span class="dialog-footer">
|
||||||
<el-button @click.prevent="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
|
<el-button @click.prevent="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
|
||||||
<el-button type="primary" @click="submit()" :loading="loading">
|
<el-button type="primary" @click="submit()" :loading="loading">
|
||||||
{{ $t('common.save') }}
|
{{ $t('common.save') }}
|
||||||
@ -91,7 +89,7 @@ const paramFormRef = ref<FormInstance>()
|
|||||||
const form = ref<any>({
|
const form = ref<any>({
|
||||||
top_n: 3,
|
top_n: 3,
|
||||||
similarity: 0,
|
similarity: 0,
|
||||||
max_paragraph_char_number: 5000
|
max_paragraph_char_number: 5000,
|
||||||
})
|
})
|
||||||
|
|
||||||
const dialogVisible = ref<boolean>(false)
|
const dialogVisible = ref<boolean>(false)
|
||||||
@ -102,7 +100,7 @@ watch(dialogVisible, (bool) => {
|
|||||||
form.value = {
|
form.value = {
|
||||||
top_n: 3,
|
top_n: 3,
|
||||||
similarity: 0,
|
similarity: 0,
|
||||||
max_paragraph_char_number: 5000
|
max_paragraph_char_number: 5000,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -1,12 +0,0 @@
|
|||||||
import SearchDatasetVue from './index.vue'
|
|
||||||
import { AppNode, AppNodeModel } from '@/workflow/common/app-node'
|
|
||||||
class SearchDatasetNode extends AppNode {
|
|
||||||
constructor(props: any) {
|
|
||||||
super(props, SearchDatasetVue)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
export default {
|
|
||||||
type: 'search-dataset-node',
|
|
||||||
model: AppNodeModel,
|
|
||||||
view: SearchDatasetNode
|
|
||||||
}
|
|
||||||
12
ui/src/workflow/nodes/search-knowledge-node/index.ts
Normal file
12
ui/src/workflow/nodes/search-knowledge-node/index.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import SearchKnowledgeVue from './index.vue'
|
||||||
|
import { AppNode, AppNodeModel } from '@/workflow/common/app-node'
|
||||||
|
class SearchKnowledgeNode extends AppNode {
|
||||||
|
constructor(props: any) {
|
||||||
|
super(props, SearchKnowledgeVue)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export default {
|
||||||
|
type: 'search-knowledge-node',
|
||||||
|
model: AppNodeModel,
|
||||||
|
view: SearchKnowledgeNode
|
||||||
|
}
|
||||||
@ -184,15 +184,15 @@ function openDatasetDialog() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getDataset() {
|
function getDataset() {
|
||||||
if (id) {
|
// if (id) {
|
||||||
application.asyncGetApplicationKnowledge(id, datasetLoading).then((res: any) => {
|
// application.asyncGetApplicationKnowledge(id, datasetLoading).then((res: any) => {
|
||||||
datasetList.value = res.data
|
// datasetList.value = res.data
|
||||||
})
|
// })
|
||||||
} else {
|
// } else {
|
||||||
knowledge.asyncGetAllKnowledge(datasetLoading).then((res: any) => {
|
knowledge.asyncGetRootKnowledge(datasetLoading).then((res: any) => {
|
||||||
datasetList.value = res.data?.filter((v: any) => v.user_id === user.userInfo?.id)
|
datasetList.value = res.data?.filter((v: any) => v.user_id === user.userInfo?.id)
|
||||||
})
|
})
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
function refresh() {
|
function refresh() {
|
||||||
getDataset()
|
getDataset()
|
||||||
Loading…
Reference in New Issue
Block a user