fix(knowledge document): bug fix
This commit is contained in:
parent
d6a301c184
commit
a892f3075f
@ -374,8 +374,8 @@ const postQADocument: (
|
|||||||
* 分段预览(上传文档)
|
* 分段预览(上传文档)
|
||||||
* @param 参数 file:file,limit:number,patterns:array,with_filter:boolean
|
* @param 参数 file:file,limit:number,patterns:array,with_filter:boolean
|
||||||
*/
|
*/
|
||||||
const postSplitDocument: (data: any) => Promise<Result<any>> = (data) => {
|
const postSplitDocument: (data: any, id: string) => Promise<Result<any>> = (data, id) => {
|
||||||
return post(`${prefix.value}/document/split`, data, undefined, undefined, 1000 * 60 * 60)
|
return post(`${prefix.value}/${id}/document/split`, data, undefined, undefined, 1000 * 60 * 60)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -232,11 +232,8 @@ const getKnowledgeEmdeddingModel: (
|
|||||||
* @query { query_text: string, top_number: number, similarity: number }
|
* @query { query_text: string, top_number: number, similarity: number }
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const getKnowledgeModel: (
|
const getKnowledgeModel: (loading?: Ref<boolean>) => Promise<Result<Array<any>>> = (loading) => {
|
||||||
knowledge_id: string,
|
return get(`${prefix.value}/model`, loading)
|
||||||
loading?: Ref<boolean>,
|
|
||||||
) => Promise<Result<Array<any>>> = (knowledge_id, loading) => {
|
|
||||||
return get(`${prefix.value}/${knowledge_id}/model`, loading)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -226,11 +226,8 @@ const getKnowledgeEmdeddingModel: (
|
|||||||
* @query { query_text: string, top_number: number, similarity: number }
|
* @query { query_text: string, top_number: number, similarity: number }
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const getKnowledgeModel: (
|
const getKnowledgeModel: (loading?: Ref<boolean>) => Promise<Result<Array<any>>> = (loading) => {
|
||||||
knowledge_id: string,
|
return get(`${prefix}/knowledge/model`, loading)
|
||||||
loading?: Ref<boolean>,
|
|
||||||
) => Promise<Result<Array<any>>> = (knowledge_id, loading) => {
|
|
||||||
return get(`${prefix}/${knowledge_id}/model`, loading)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -188,7 +188,7 @@ const submitHandle = async (formEl: FormInstance) => {
|
|||||||
function getModel() {
|
function getModel() {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
knowledgeApi
|
knowledgeApi
|
||||||
.getKnowledgeModel(id ? id : knowledgeId.value)
|
.getKnowledgeModel()
|
||||||
.then((res: any) => {
|
.then((res: any) => {
|
||||||
modelOptions.value = groupBy(res?.data, 'provider')
|
modelOptions.value = groupBy(res?.data, 'provider')
|
||||||
loading.value = false
|
loading.value = false
|
||||||
|
|||||||
203
ui/src/components/generate-related-shared-dialog/index.vue
Normal file
203
ui/src/components/generate-related-shared-dialog/index.vue
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
:title="$t('views.document.generateQuestion.title')"
|
||||||
|
v-model="dialogVisible"
|
||||||
|
width="650"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:close-on-press-escape="false"
|
||||||
|
>
|
||||||
|
<div class="content-height">
|
||||||
|
<el-form
|
||||||
|
ref="FormRef"
|
||||||
|
:model="form"
|
||||||
|
:rules="rules"
|
||||||
|
label-position="top"
|
||||||
|
require-asterisk-position="right"
|
||||||
|
>
|
||||||
|
<div class="update-info flex border-r-4 mb-16 p-8-12">
|
||||||
|
<div class="mt-4">
|
||||||
|
<AppIcon iconName="app-warning-colorful" style="font-size: 16px"></AppIcon>
|
||||||
|
</div>
|
||||||
|
<div class="ml-12 lighter">
|
||||||
|
<p>{{ $t('views.document.generateQuestion.tip1', { data: '{data}' }) }}</p>
|
||||||
|
<p>
|
||||||
|
{{ $t('views.document.generateQuestion.tip2')+ '<question></question>' +
|
||||||
|
$t('views.document.generateQuestion.tip3') }}
|
||||||
|
</p>
|
||||||
|
<p>{{ $t('views.document.generateQuestion.tip4') }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('views.application.form.aiModel.label')"
|
||||||
|
prop="model_id"
|
||||||
|
>
|
||||||
|
<ModelSelect
|
||||||
|
v-model="form.model_id"
|
||||||
|
:placeholder="$t('views.application.form.aiModel.placeholder')"
|
||||||
|
:options="modelOptions"
|
||||||
|
showFooter
|
||||||
|
:model-type="'LLM'"
|
||||||
|
></ModelSelect>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('views.application.form.prompt.label')"
|
||||||
|
prop="prompt"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model="form.prompt"
|
||||||
|
:placeholder="$t('views.application.form.prompt.placeholder')"
|
||||||
|
:rows="7"
|
||||||
|
type="textarea"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
v-if="['document', 'knowledge'].includes(apiType)"
|
||||||
|
:label="$t('components.selectParagraph.title')"
|
||||||
|
prop="state"
|
||||||
|
>
|
||||||
|
<el-radio-group v-model="state" class="radio-block">
|
||||||
|
<el-radio value="error" size="large">{{
|
||||||
|
$t('components.selectParagraph.error')
|
||||||
|
}}</el-radio>
|
||||||
|
<el-radio value="all" size="large">{{ $t('components.selectParagraph.all') }}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
|
<span class="dialog-footer">
|
||||||
|
<el-button @click.prevent="dialogVisible = false"> {{ $t('common.cancel') }} </el-button>
|
||||||
|
<el-button type="primary" @click="submitHandle(FormRef)" :disabled="!model || loading">
|
||||||
|
{{ $t('common.confirm') }}
|
||||||
|
</el-button>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { reactive, ref, watch } from 'vue'
|
||||||
|
import { useRoute } from 'vue-router'
|
||||||
|
import documentApi from '@/api/shared/document'
|
||||||
|
import paragraphApi from '@/api/shared/paragraph'
|
||||||
|
import knowledgeApi from '@/api/shared/knowledge'
|
||||||
|
import useStore from '@/stores/modules-shared-system'
|
||||||
|
import { groupBy } from 'lodash'
|
||||||
|
import { MsgSuccess } from '@/utils/message'
|
||||||
|
import { t } from '@/locales'
|
||||||
|
import type { FormInstance } from 'element-plus'
|
||||||
|
|
||||||
|
const route = useRoute()
|
||||||
|
const {
|
||||||
|
params: { id, documentId } // id为knowledgeID
|
||||||
|
} = route as any
|
||||||
|
|
||||||
|
const { model, prompt, user } = useStore()
|
||||||
|
|
||||||
|
const emit = defineEmits(['refresh'])
|
||||||
|
|
||||||
|
const loading = ref<boolean>(false)
|
||||||
|
|
||||||
|
const dialogVisible = ref<boolean>(false)
|
||||||
|
const modelOptions = ref<any>(null)
|
||||||
|
const idList = ref<string[]>([])
|
||||||
|
const apiType = ref('') // 文档document或段落paragraph
|
||||||
|
const state = ref<'all' | 'error'>('error')
|
||||||
|
const stateMap = {
|
||||||
|
all: ['0', '1', '2', '3', '4', '5', 'n'],
|
||||||
|
error: ['0', '1', '3', '4', '5', 'n']
|
||||||
|
}
|
||||||
|
const FormRef = ref()
|
||||||
|
const knowledgeId = ref<string>()
|
||||||
|
const userId = user.userInfo?.id as string
|
||||||
|
const form = ref(prompt.get(userId))
|
||||||
|
const rules = reactive({
|
||||||
|
model_id: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t('views.application.form.aiModel.placeholder'),
|
||||||
|
trigger: 'blur'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
prompt: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t('views.application.form.prompt.placeholder'),
|
||||||
|
trigger: 'blur'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
watch(dialogVisible, (bool) => {
|
||||||
|
if (!bool) {
|
||||||
|
form.value = prompt.get(userId)
|
||||||
|
FormRef.value?.clearValidate()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const open = (ids: string[], type: string, _knowledgeId?: string) => {
|
||||||
|
knowledgeId.value = _knowledgeId
|
||||||
|
getModel()
|
||||||
|
idList.value = ids
|
||||||
|
apiType.value = type
|
||||||
|
dialogVisible.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
const submitHandle = async (formEl: FormInstance) => {
|
||||||
|
if (!formEl) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
await formEl.validate((valid, fields) => {
|
||||||
|
if (valid) {
|
||||||
|
// 保存提示词
|
||||||
|
prompt.save(user.userInfo?.id as string, form.value)
|
||||||
|
if (apiType.value === 'paragraph') {
|
||||||
|
const data = {
|
||||||
|
...form.value,
|
||||||
|
paragraph_id_list: idList.value
|
||||||
|
}
|
||||||
|
paragraphApi.putBatchGenerateRelated(id, documentId, data, loading).then(() => {
|
||||||
|
MsgSuccess(t('views.document.generateQuestion.successMessage'))
|
||||||
|
emit('refresh')
|
||||||
|
dialogVisible.value = false
|
||||||
|
})
|
||||||
|
} else if (apiType.value === 'document') {
|
||||||
|
const data = {
|
||||||
|
...form.value,
|
||||||
|
document_id_list: idList.value,
|
||||||
|
state_list: stateMap[state.value]
|
||||||
|
}
|
||||||
|
documentApi.putBatchGenerateRelated(id, data, loading).then(() => {
|
||||||
|
MsgSuccess(t('views.document.generateQuestion.successMessage'))
|
||||||
|
emit('refresh')
|
||||||
|
dialogVisible.value = false
|
||||||
|
})
|
||||||
|
} else if (apiType.value === 'knowledge') {
|
||||||
|
const data = {
|
||||||
|
...form.value,
|
||||||
|
state_list: stateMap[state.value]
|
||||||
|
}
|
||||||
|
knowledgeApi.putGenerateRelated(id ? id : knowledgeId.value, data, loading).then(() => {
|
||||||
|
MsgSuccess(t('views.document.generateQuestion.successMessage'))
|
||||||
|
dialogVisible.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function getModel() {
|
||||||
|
loading.value = true
|
||||||
|
knowledgeApi
|
||||||
|
.getKnowledgeModel()
|
||||||
|
.then((res: any) => {
|
||||||
|
modelOptions.value = groupBy(res?.data, 'provider')
|
||||||
|
loading.value = false
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
loading.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({ open })
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped></style>
|
||||||
@ -602,7 +602,9 @@ const title = ref('')
|
|||||||
const selectKnowledgeDialogRef = ref()
|
const selectKnowledgeDialogRef = ref()
|
||||||
|
|
||||||
const exportDocument = (document: any) => {
|
const exportDocument = (document: any) => {
|
||||||
documentApi.exportDocument(document.name, document.knowledge_id, document.id, loading).then(() => {
|
documentApi
|
||||||
|
.exportDocument(document.name, document.knowledge_id, document.id, loading)
|
||||||
|
.then(() => {
|
||||||
MsgSuccess(t('common.exportSuccess'))
|
MsgSuccess(t('common.exportSuccess'))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -712,8 +714,7 @@ const closeInterval = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function syncDocument(row: any) {
|
function syncDocument(row: any) {
|
||||||
console.log('row', row)
|
if (+row.type === 1) {
|
||||||
if (row.type === '1') {
|
|
||||||
syncWebDocument(row)
|
syncWebDocument(row)
|
||||||
} else {
|
} else {
|
||||||
syncLarkDocument(row)
|
syncLarkDocument(row)
|
||||||
|
|||||||
@ -121,6 +121,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, computed, onMounted, reactive, watch } from 'vue'
|
import { ref, computed, onMounted, reactive, watch } from 'vue'
|
||||||
import ParagraphPreview from '@/views/knowledge/component/ParagraphPreview.vue'
|
import ParagraphPreview from '@/views/knowledge/component/ParagraphPreview.vue'
|
||||||
|
import { useRoute } from 'vue-router'
|
||||||
import { cutFilename } from '@/utils/utils'
|
import { cutFilename } from '@/utils/utils'
|
||||||
import documentApi from '@/api/knowledge/document'
|
import documentApi from '@/api/knowledge/document'
|
||||||
import useStore from '@/stores'
|
import useStore from '@/stores'
|
||||||
@ -128,7 +129,10 @@ import type { KeyValue } from '@/api/type/common'
|
|||||||
const { knowledge } = useStore()
|
const { knowledge } = useStore()
|
||||||
const documentsFiles = computed(() => knowledge.documentsFiles)
|
const documentsFiles = computed(() => knowledge.documentsFiles)
|
||||||
const splitPatternList = ref<Array<KeyValue<string, string>>>([])
|
const splitPatternList = ref<Array<KeyValue<string, string>>>([])
|
||||||
|
const route = useRoute()
|
||||||
|
const {
|
||||||
|
query: { id }, // id为datasetID
|
||||||
|
} = route as any
|
||||||
const radio = ref('1')
|
const radio = ref('1')
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const paragraphList = ref<any[]>([])
|
const paragraphList = ref<any[]>([])
|
||||||
@ -145,7 +149,7 @@ const form = reactive<{
|
|||||||
}>({
|
}>({
|
||||||
patterns: [],
|
patterns: [],
|
||||||
limit: 500,
|
limit: 500,
|
||||||
with_filter: true
|
with_filter: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
function changeHandle(val: boolean) {
|
function changeHandle(val: boolean) {
|
||||||
@ -157,11 +161,11 @@ function changeHandle(val: boolean) {
|
|||||||
problem_list: v.title.trim()
|
problem_list: v.title.trim()
|
||||||
? [
|
? [
|
||||||
{
|
{
|
||||||
content: v.title.trim()
|
content: v.title.trim(),
|
||||||
}
|
},
|
||||||
]
|
]
|
||||||
: []
|
: [],
|
||||||
}))
|
})),
|
||||||
}))
|
}))
|
||||||
firstChecked.value = false
|
firstChecked.value = false
|
||||||
}
|
}
|
||||||
@ -184,7 +188,7 @@ function splitDocument() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
documentApi
|
documentApi
|
||||||
.postSplitDocument(fd)
|
.postSplitDocument(fd, id)
|
||||||
.then((res: any) => {
|
.then((res: any) => {
|
||||||
const list = res.data
|
const list = res.data
|
||||||
|
|
||||||
@ -197,8 +201,8 @@ function splitDocument() {
|
|||||||
v['problem_list'] = v.title.trim()
|
v['problem_list'] = v.title.trim()
|
||||||
? [
|
? [
|
||||||
{
|
{
|
||||||
content: v.title.trim()
|
content: v.title.trim(),
|
||||||
}
|
},
|
||||||
]
|
]
|
||||||
: []
|
: []
|
||||||
})
|
})
|
||||||
@ -232,7 +236,7 @@ onMounted(() => {
|
|||||||
defineExpose({
|
defineExpose({
|
||||||
paragraphList,
|
paragraphList,
|
||||||
checkedConnect,
|
checkedConnect,
|
||||||
loading
|
loading,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|||||||
@ -548,7 +548,7 @@ import { hitHandlingMethod } from '@/enums/document'
|
|||||||
import { MsgSuccess, MsgConfirm, MsgError } from '@/utils/message'
|
import { MsgSuccess, MsgConfirm, MsgError } from '@/utils/message'
|
||||||
import useStore from '@/stores/modules-shared-system'
|
import useStore from '@/stores/modules-shared-system'
|
||||||
import StatusValue from '@/views/shared/document-shared/component/Status.vue'
|
import StatusValue from '@/views/shared/document-shared/component/Status.vue'
|
||||||
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
|
import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
|
||||||
import EmbeddingContentDialog from '@/views/shared/document-shared/component/EmbeddingContentDialog.vue'
|
import EmbeddingContentDialog from '@/views/shared/document-shared/component/EmbeddingContentDialog.vue'
|
||||||
import { TaskType, State } from '@/utils/status'
|
import { TaskType, State } from '@/utils/status'
|
||||||
import { t } from '@/locales'
|
import { t } from '@/locales'
|
||||||
|
|||||||
@ -135,7 +135,7 @@ import KnowledgeIcon from '@/views/shared/knowledge-shared/component/KnowledgeIc
|
|||||||
import CreateKnowledgeDialog from './create-component/CreateKnowledgeDialog.vue'
|
import CreateKnowledgeDialog from './create-component/CreateKnowledgeDialog.vue'
|
||||||
import CreateWebKnowledgeDialog from './create-component/CreateWebKnowledgeDialog.vue'
|
import CreateWebKnowledgeDialog from './create-component/CreateWebKnowledgeDialog.vue'
|
||||||
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
|
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
|
||||||
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
|
import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
|
||||||
import KnowledgeApi from '@/api/shared/knowledge'
|
import KnowledgeApi from '@/api/shared/knowledge'
|
||||||
import KnowledgeWorkspaceApi from '@/api/shared/workspace'
|
import KnowledgeWorkspaceApi from '@/api/shared/workspace'
|
||||||
import { MsgSuccess, MsgConfirm } from '@/utils/message'
|
import { MsgSuccess, MsgConfirm } from '@/utils/message'
|
||||||
|
|||||||
@ -287,7 +287,7 @@ import CreateKnowledgeDialog from './create-component/CreateKnowledgeDialog.vue'
|
|||||||
import CreateWebKnowledgeDialog from './create-component/CreateWebKnowledgeDialog.vue'
|
import CreateWebKnowledgeDialog from './create-component/CreateWebKnowledgeDialog.vue'
|
||||||
import CreateLarkKnowledgeDialog from './create-component/CreateLarkKnowledgeDialog.vue'
|
import CreateLarkKnowledgeDialog from './create-component/CreateLarkKnowledgeDialog.vue'
|
||||||
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
|
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
|
||||||
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
|
import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
|
||||||
import KnowledgeApi from '@/api/shared/knowledge'
|
import KnowledgeApi from '@/api/shared/knowledge'
|
||||||
import { MsgSuccess, MsgConfirm } from '@/utils/message'
|
import { MsgSuccess, MsgConfirm } from '@/utils/message'
|
||||||
import useStore from '@/stores/modules-shared-system'
|
import useStore from '@/stores/modules-shared-system'
|
||||||
|
|||||||
@ -72,7 +72,7 @@ import { ref, useSlots } from 'vue'
|
|||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { t } from '@/locales'
|
import { t } from '@/locales'
|
||||||
import useStore from '@/stores'
|
import useStore from '@/stores'
|
||||||
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
|
import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
|
||||||
import ParagraphDialog from '@/views/paragraph/component/ParagraphDialog.vue'
|
import ParagraphDialog from '@/views/paragraph/component/ParagraphDialog.vue'
|
||||||
import SelectDocumentDialog from '@/views/paragraph/component/SelectDocumentDialog.vue'
|
import SelectDocumentDialog from '@/views/paragraph/component/SelectDocumentDialog.vue'
|
||||||
import { MsgSuccess, MsgConfirm } from '@/utils/message'
|
import { MsgSuccess, MsgConfirm } from '@/utils/message'
|
||||||
|
|||||||
@ -145,7 +145,7 @@ import paragraphApi from '@/api/shared/paragraph'
|
|||||||
import ParagraphDialog from './component/ParagraphDialog.vue'
|
import ParagraphDialog from './component/ParagraphDialog.vue'
|
||||||
import ParagraphCard from './component/ParagraphCard.vue'
|
import ParagraphCard from './component/ParagraphCard.vue'
|
||||||
import SelectDocumentDialog from './component/SelectDocumentDialog.vue'
|
import SelectDocumentDialog from './component/SelectDocumentDialog.vue'
|
||||||
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
|
import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
|
||||||
import { VueDraggable } from 'vue-draggable-plus'
|
import { VueDraggable } from 'vue-draggable-plus'
|
||||||
import { MsgSuccess, MsgConfirm } from '@/utils/message'
|
import { MsgSuccess, MsgConfirm } from '@/utils/message'
|
||||||
import useStore from '@/stores'
|
import useStore from '@/stores'
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user