Skip to content

Commit a892f30

Browse files
dataeaseShuwxg0103
authored andcommitted
fix(knowledge document): bug fix
1 parent d6a301c commit a892f30

File tree

12 files changed

+235
-33
lines changed

12 files changed

+235
-33
lines changed

ui/src/api/knowledge/document.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,8 +374,8 @@ const postQADocument: (
374374
* 分段预览(上传文档)
375375
* @param 参数 file:file,limit:number,patterns:array,with_filter:boolean
376376
*/
377-
const postSplitDocument: (data: any) => Promise<Result<any>> = (data) => {
378-
return post(`${prefix.value}/document/split`, data, undefined, undefined, 1000 * 60 * 60)
377+
const postSplitDocument: (data: any, id: string) => Promise<Result<any>> = (data, id) => {
378+
return post(`${prefix.value}/${id}/document/split`, data, undefined, undefined, 1000 * 60 * 60)
379379
}
380380

381381
/**

ui/src/api/knowledge/knowledge.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -232,11 +232,8 @@ const getKnowledgeEmdeddingModel: (
232232
* @query { query_text: string, top_number: number, similarity: number }
233233
* @returns
234234
*/
235-
const getKnowledgeModel: (
236-
knowledge_id: string,
237-
loading?: Ref<boolean>,
238-
) => Promise<Result<Array<any>>> = (knowledge_id, loading) => {
239-
return get(`${prefix.value}/${knowledge_id}/model`, loading)
235+
const getKnowledgeModel: (loading?: Ref<boolean>) => Promise<Result<Array<any>>> = (loading) => {
236+
return get(`${prefix.value}/model`, loading)
240237
}
241238

242239
/**

ui/src/api/shared/knowledge.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -226,11 +226,8 @@ const getKnowledgeEmdeddingModel: (
226226
* @query { query_text: string, top_number: number, similarity: number }
227227
* @returns
228228
*/
229-
const getKnowledgeModel: (
230-
knowledge_id: string,
231-
loading?: Ref<boolean>,
232-
) => Promise<Result<Array<any>>> = (knowledge_id, loading) => {
233-
return get(`${prefix}/${knowledge_id}/model`, loading)
229+
const getKnowledgeModel: (loading?: Ref<boolean>) => Promise<Result<Array<any>>> = (loading) => {
230+
return get(`${prefix}/knowledge/model`, loading)
234231
}
235232

236233
/**

ui/src/components/generate-related-dialog/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ const submitHandle = async (formEl: FormInstance) => {
188188
function getModel() {
189189
loading.value = true
190190
knowledgeApi
191-
.getKnowledgeModel(id ? id : knowledgeId.value)
191+
.getKnowledgeModel()
192192
.then((res: any) => {
193193
modelOptions.value = groupBy(res?.data, 'provider')
194194
loading.value = false
Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
<template>
2+
<el-dialog
3+
:title="$t('views.document.generateQuestion.title')"
4+
v-model="dialogVisible"
5+
width="650"
6+
:close-on-click-modal="false"
7+
:close-on-press-escape="false"
8+
>
9+
<div class="content-height">
10+
<el-form
11+
ref="FormRef"
12+
:model="form"
13+
:rules="rules"
14+
label-position="top"
15+
require-asterisk-position="right"
16+
>
17+
<div class="update-info flex border-r-4 mb-16 p-8-12">
18+
<div class="mt-4">
19+
<AppIcon iconName="app-warning-colorful" style="font-size: 16px"></AppIcon>
20+
</div>
21+
<div class="ml-12 lighter">
22+
<p>{{ $t('views.document.generateQuestion.tip1', { data: '{data}' }) }}</p>
23+
<p>
24+
{{ $t('views.document.generateQuestion.tip2')+ '<question></question>' +
25+
$t('views.document.generateQuestion.tip3') }}
26+
</p>
27+
<p>{{ $t('views.document.generateQuestion.tip4') }}</p>
28+
</div>
29+
</div>
30+
<el-form-item
31+
:label="$t('views.application.form.aiModel.label')"
32+
prop="model_id"
33+
>
34+
<ModelSelect
35+
v-model="form.model_id"
36+
:placeholder="$t('views.application.form.aiModel.placeholder')"
37+
:options="modelOptions"
38+
showFooter
39+
:model-type="'LLM'"
40+
></ModelSelect>
41+
</el-form-item>
42+
<el-form-item
43+
:label="$t('views.application.form.prompt.label')"
44+
prop="prompt"
45+
>
46+
<el-input
47+
v-model="form.prompt"
48+
:placeholder="$t('views.application.form.prompt.placeholder')"
49+
:rows="7"
50+
type="textarea"
51+
/>
52+
</el-form-item>
53+
<el-form-item
54+
v-if="['document', 'knowledge'].includes(apiType)"
55+
:label="$t('components.selectParagraph.title')"
56+
prop="state"
57+
>
58+
<el-radio-group v-model="state" class="radio-block">
59+
<el-radio value="error" size="large">{{
60+
$t('components.selectParagraph.error')
61+
}}</el-radio>
62+
<el-radio value="all" size="large">{{ $t('components.selectParagraph.all') }}</el-radio>
63+
</el-radio-group>
64+
</el-form-item>
65+
</el-form>
66+
</div>
67+
<template #footer>
68+
<span class="dialog-footer">
69+
<el-button @click.prevent="dialogVisible = false"> {{ $t('common.cancel') }} </el-button>
70+
<el-button type="primary" @click="submitHandle(FormRef)" :disabled="!model || loading">
71+
{{ $t('common.confirm') }}
72+
</el-button>
73+
</span>
74+
</template>
75+
</el-dialog>
76+
</template>
77+
<script setup lang="ts">
78+
import { reactive, ref, watch } from 'vue'
79+
import { useRoute } from 'vue-router'
80+
import documentApi from '@/api/shared/document'
81+
import paragraphApi from '@/api/shared/paragraph'
82+
import knowledgeApi from '@/api/shared/knowledge'
83+
import useStore from '@/stores/modules-shared-system'
84+
import { groupBy } from 'lodash'
85+
import { MsgSuccess } from '@/utils/message'
86+
import { t } from '@/locales'
87+
import type { FormInstance } from 'element-plus'
88+
89+
const route = useRoute()
90+
const {
91+
params: { id, documentId } // id为knowledgeID
92+
} = route as any
93+
94+
const { model, prompt, user } = useStore()
95+
96+
const emit = defineEmits(['refresh'])
97+
98+
const loading = ref<boolean>(false)
99+
100+
const dialogVisible = ref<boolean>(false)
101+
const modelOptions = ref<any>(null)
102+
const idList = ref<string[]>([])
103+
const apiType = ref('') // 文档document或段落paragraph
104+
const state = ref<'all' | 'error'>('error')
105+
const stateMap = {
106+
all: ['0', '1', '2', '3', '4', '5', 'n'],
107+
error: ['0', '1', '3', '4', '5', 'n']
108+
}
109+
const FormRef = ref()
110+
const knowledgeId = ref<string>()
111+
const userId = user.userInfo?.id as string
112+
const form = ref(prompt.get(userId))
113+
const rules = reactive({
114+
model_id: [
115+
{
116+
required: true,
117+
message: t('views.application.form.aiModel.placeholder'),
118+
trigger: 'blur'
119+
}
120+
],
121+
prompt: [
122+
{
123+
required: true,
124+
message: t('views.application.form.prompt.placeholder'),
125+
trigger: 'blur'
126+
}
127+
]
128+
})
129+
130+
watch(dialogVisible, (bool) => {
131+
if (!bool) {
132+
form.value = prompt.get(userId)
133+
FormRef.value?.clearValidate()
134+
}
135+
})
136+
137+
const open = (ids: string[], type: string, _knowledgeId?: string) => {
138+
knowledgeId.value = _knowledgeId
139+
getModel()
140+
idList.value = ids
141+
apiType.value = type
142+
dialogVisible.value = true
143+
}
144+
145+
const submitHandle = async (formEl: FormInstance) => {
146+
if (!formEl) {
147+
return
148+
}
149+
await formEl.validate((valid, fields) => {
150+
if (valid) {
151+
// 保存提示词
152+
prompt.save(user.userInfo?.id as string, form.value)
153+
if (apiType.value === 'paragraph') {
154+
const data = {
155+
...form.value,
156+
paragraph_id_list: idList.value
157+
}
158+
paragraphApi.putBatchGenerateRelated(id, documentId, data, loading).then(() => {
159+
MsgSuccess(t('views.document.generateQuestion.successMessage'))
160+
emit('refresh')
161+
dialogVisible.value = false
162+
})
163+
} else if (apiType.value === 'document') {
164+
const data = {
165+
...form.value,
166+
document_id_list: idList.value,
167+
state_list: stateMap[state.value]
168+
}
169+
documentApi.putBatchGenerateRelated(id, data, loading).then(() => {
170+
MsgSuccess(t('views.document.generateQuestion.successMessage'))
171+
emit('refresh')
172+
dialogVisible.value = false
173+
})
174+
} else if (apiType.value === 'knowledge') {
175+
const data = {
176+
...form.value,
177+
state_list: stateMap[state.value]
178+
}
179+
knowledgeApi.putGenerateRelated(id ? id : knowledgeId.value, data, loading).then(() => {
180+
MsgSuccess(t('views.document.generateQuestion.successMessage'))
181+
dialogVisible.value = false
182+
})
183+
}
184+
}
185+
})
186+
}
187+
188+
function getModel() {
189+
loading.value = true
190+
knowledgeApi
191+
.getKnowledgeModel()
192+
.then((res: any) => {
193+
modelOptions.value = groupBy(res?.data, 'provider')
194+
loading.value = false
195+
})
196+
.catch(() => {
197+
loading.value = false
198+
})
199+
}
200+
201+
defineExpose({ open })
202+
</script>
203+
<style lang="scss" scoped></style>

ui/src/views/document/index.vue

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -602,9 +602,11 @@ const title = ref('')
602602
const selectKnowledgeDialogRef = ref()
603603
604604
const exportDocument = (document: any) => {
605-
documentApi.exportDocument(document.name, document.knowledge_id, document.id, loading).then(() => {
606-
MsgSuccess(t('common.exportSuccess'))
607-
})
605+
documentApi
606+
.exportDocument(document.name, document.knowledge_id, document.id, loading)
607+
.then(() => {
608+
MsgSuccess(t('common.exportSuccess'))
609+
})
608610
}
609611
const exportDocumentZip = (document: any) => {
610612
documentApi
@@ -712,8 +714,7 @@ const closeInterval = () => {
712714
}
713715
714716
function syncDocument(row: any) {
715-
console.log('row', row)
716-
if (row.type === '1') {
717+
if (+row.type === 1) {
717718
syncWebDocument(row)
718719
} else {
719720
syncLarkDocument(row)

ui/src/views/document/upload/SetRules.vue

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,18 @@
121121
<script setup lang="ts">
122122
import { ref, computed, onMounted, reactive, watch } from 'vue'
123123
import ParagraphPreview from '@/views/knowledge/component/ParagraphPreview.vue'
124+
import { useRoute } from 'vue-router'
124125
import { cutFilename } from '@/utils/utils'
125126
import documentApi from '@/api/knowledge/document'
126127
import useStore from '@/stores'
127128
import type { KeyValue } from '@/api/type/common'
128129
const { knowledge } = useStore()
129130
const documentsFiles = computed(() => knowledge.documentsFiles)
130131
const splitPatternList = ref<Array<KeyValue<string, string>>>([])
131-
132+
const route = useRoute()
133+
const {
134+
query: { id }, // id为datasetID
135+
} = route as any
132136
const radio = ref('1')
133137
const loading = ref(false)
134138
const paragraphList = ref<any[]>([])
@@ -145,7 +149,7 @@ const form = reactive<{
145149
}>({
146150
patterns: [],
147151
limit: 500,
148-
with_filter: true
152+
with_filter: true,
149153
})
150154
151155
function changeHandle(val: boolean) {
@@ -157,11 +161,11 @@ function changeHandle(val: boolean) {
157161
problem_list: v.title.trim()
158162
? [
159163
{
160-
content: v.title.trim()
161-
}
164+
content: v.title.trim(),
165+
},
162166
]
163-
: []
164-
}))
167+
: [],
168+
})),
165169
}))
166170
firstChecked.value = false
167171
}
@@ -184,7 +188,7 @@ function splitDocument() {
184188
})
185189
}
186190
documentApi
187-
.postSplitDocument(fd)
191+
.postSplitDocument(fd, id)
188192
.then((res: any) => {
189193
const list = res.data
190194
@@ -197,8 +201,8 @@ function splitDocument() {
197201
v['problem_list'] = v.title.trim()
198202
? [
199203
{
200-
content: v.title.trim()
201-
}
204+
content: v.title.trim(),
205+
},
202206
]
203207
: []
204208
})
@@ -232,7 +236,7 @@ onMounted(() => {
232236
defineExpose({
233237
paragraphList,
234238
checkedConnect,
235-
loading
239+
loading,
236240
})
237241
</script>
238242
<style scoped lang="scss">

ui/src/views/shared/document-shared/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,7 @@ import { hitHandlingMethod } from '@/enums/document'
548548
import { MsgSuccess, MsgConfirm, MsgError } from '@/utils/message'
549549
import useStore from '@/stores/modules-shared-system'
550550
import StatusValue from '@/views/shared/document-shared/component/Status.vue'
551-
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
551+
import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
552552
import EmbeddingContentDialog from '@/views/shared/document-shared/component/EmbeddingContentDialog.vue'
553553
import { TaskType, State } from '@/utils/status'
554554
import { t } from '@/locales'

ui/src/views/shared/knowledge-shared/SharedWorkspace.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ import KnowledgeIcon from '@/views/shared/knowledge-shared/component/KnowledgeIc
135135
import CreateKnowledgeDialog from './create-component/CreateKnowledgeDialog.vue'
136136
import CreateWebKnowledgeDialog from './create-component/CreateWebKnowledgeDialog.vue'
137137
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
138-
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
138+
import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
139139
import KnowledgeApi from '@/api/shared/knowledge'
140140
import KnowledgeWorkspaceApi from '@/api/shared/workspace'
141141
import { MsgSuccess, MsgConfirm } from '@/utils/message'

ui/src/views/shared/knowledge-shared/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ import CreateKnowledgeDialog from './create-component/CreateKnowledgeDialog.vue'
287287
import CreateWebKnowledgeDialog from './create-component/CreateWebKnowledgeDialog.vue'
288288
import CreateLarkKnowledgeDialog from './create-component/CreateLarkKnowledgeDialog.vue'
289289
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
290-
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
290+
import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
291291
import KnowledgeApi from '@/api/shared/knowledge'
292292
import { MsgSuccess, MsgConfirm } from '@/utils/message'
293293
import useStore from '@/stores/modules-shared-system'

0 commit comments

Comments
 (0)