From 8a67c292deeacaf228e0a5489b4c26a1fdd83803 Mon Sep 17 00:00:00 2001 From: zhangxiao <898441624@qq.com> Date: 星期四, 29 八月 2024 09:34:17 +0800 Subject: [PATCH] fix: 出题机器开发 --- src/views/sessionManager/components/updataFile.vue | 515 +++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 371 insertions(+), 144 deletions(-) diff --git a/src/views/sessionManager/components/updataFile.vue b/src/views/sessionManager/components/updataFile.vue index 549ec2e..f1e9980 100644 --- a/src/views/sessionManager/components/updataFile.vue +++ b/src/views/sessionManager/components/updataFile.vue @@ -1,19 +1,7 @@ <template> - <a-popover - :popup-visible="visible" - title="" - trigger="click" - position="tl"> - <a-button - :disabled="onFileSelectedLoading" - type="text" - style="border-radius: 24px" - @click="visible = !visible" - > - <icon-attachment - size="28" - style="color: #0960bd" - /> + <a-popover :popup-visible="visible" title="" trigger="click" position="tl"> + <a-button type="text" style="border-radius: 24px" @click="visibleChange"> + <icon-attachment size="28" style="color: #0960bd" /> </a-button> <template #title> <div style="display: flex; justify-content: space-between"> @@ -32,29 +20,55 @@ ref="uploadRef" @change="onChange" multiple + :limit="1" /> - <div style="width: 100%;margin-top: 10px;display: flex; justify-content: space-between;"> + <div + style=" + width: 100%; + margin-top: 10px; + display: flex; + justify-content: space-between; + " + class="upload-wrap" + > <div> <span>瑙f瀽鏂规硶: </span> - <a-radio-group v-model="parser_id"> - <a-radio - v-for="item in parser_ids" - :key="item.value" - :value="item.value" - style="margin-right: 10px" - >{{item.name}}</a-radio> + <a-radio-group + v-model="parser_id" + style="width: 400px" + @change="parserChange" + > + <a-popover v-for="item in filterData" :key="item.value"> + <a-radio :value="item.value" style="margin-right: 10px">{{ + item.name + }}</a-radio> + + <template #content> + <p>{{ item.parser_config_str }}</p> + </template> + </a-popover> </a-radio-group> </div> + <a-select + :style="{ width: '100px', margin: '0 10px' }" + :default-value="['閫氱敤', '澶氭ā鎬�']" + v-model="parser_configs" + multiple + size="small" + > + <a-option v-for="item in parser_ids" :key="item.value">{{ + item.name + }}</a-option> + </a-select> + <p class="config-text">鏇村閰嶇疆</p> <a-button :loading="onFileSelectedLoading" @click="upDataFile" type="primary" size="mini" - style="border-radius: 24px;" + style="border-radius: 24px" > - <span style="font-size: 12px;"> - 涓婁紶 - </span> + <span style="font-size: 12px"> 涓婁紶 </span> </a-button> </div> </template> @@ -62,135 +76,348 @@ </template> <script lang="ts" setup> -import { onMounted, onBeforeMount, reactive, ref, computed, watch } from "vue"; -import axios from "axios"; -import { Message } from "@arco-design/web-vue"; -import { uploadWithoutKb } from "@/api/session"; + import { + onMounted, + onBeforeMount, + reactive, + ref, + computed, + watch, + } from 'vue'; + import axios from 'axios'; + import { Message } from '@arco-design/web-vue'; + import { + addSessionApi, + getParseMethodsListApi, + getSessionDetailsApi, + uploadWithoutKb, + uploadAndParse, + } from '@/api/session'; -const visible = ref(false); -const loading = ref(false); -const chatDis = ref(false); -const directory = ref(false); -const filesBtn = ref(null); -const onFileSelectedLoading = ref(false); -const parser_id = ref(""); -const parser_ids = ref([]); -const uploaditemList = ref([]); -const activeSessionId = ref(''); -let kbtenantInfo = reactive({ - asr_id: 'paraformer-realtime-8k-v1', - embd_id: 'BAAI/bge-large-zh-v1.5', - img2txt_id: 'qwen-vl-max', - llm_id: 'qwen-plus', - name: 'wanghaos Kingdom', - parser_ids: - 'naive:General,qa:Q&A,resume:Resume,manual:Manual,table:Table,paper:Paper,book:Book,laws:Laws,presentation:Presentation,picture:Picture,one:One', - rerank_id: 'BAAI/bge-reranker-v2-m3', - role: 'owner', - tenant_id: '948fc6fa41ab11ef8fb80242ac120004', - parser_idObj: {}, -}); -const uploadList = ref([]); -const parser = reactive({ - naive: { - "chunk_token_num": 676, - "layout_recognize": true, - "raptor": { - "use_raptor": true, - "prompt": "璇锋�荤粨浠ヤ笅娈佃惤銆� 灏忓績鏁板瓧锛屼笉瑕佺紪閫犮�� 娈佃惤濡備笅锛歕n {cluster_content}\n浠ヤ笂灏辨槸浣犻渶瑕佹�荤粨鐨勫唴瀹广��", - "max_token": 600, - "threshold": 0.32, - "max_cluster": 233, - "random_seed": 1500 - } - }, // 鐢ㄦ埛鍚� - -}); -const props = defineProps(["sessionId"]); -const emit = defineEmits(["selectFileCallback"]); -const uploadRef = ref(); -const files = ref([]); -const acceptNameList = computed(() => { - return ".word, .pdf, .ppt, .excel, .txt, .zip, .rar, .7z, .doc, .docx, .xls, .xlsx, .pptx, .ppt, .pdf, .mp4, .avi, .mp3,.wav, .wma, .wmv, .rm,"; -}); - -const init = () => { - parser_ids.value = kbtenantInfo.parser_ids.split(",").map((item) => { - const [value1, value2] = item.split(":"); - return { - name: value2, - value: value1 - }; + const visible = ref(false); + const loading = ref(false); + const chatDis = ref(false); + const directory = ref(false); + const filesBtn = ref(null); + const onFileSelectedLoading = ref(false); + const parser_id = ref(''); + const parseridConfig = ref(false); + const uploaditemList = ref([]); + const activeSessionId = ref(''); + let kbtenantInfo = reactive({ + asr_id: 'paraformer-realtime-8k-v1', + embd_id: 'BAAI/bge-large-zh-v1.5', + img2txt_id: 'qwen-vl-max', + llm_id: 'qwen-plus', + name: 'wanghaos Kingdom', + // parser_ids: 'naive:General,qa:Q&A,resume:Resume,manual:Manual,table:Table,paper:Paper,book:Book,laws:Laws,presentation:Presentation,picture:Picture,one:One', + parser_ids: + 'naive:閫氱敤,qa:Q&A,resume:绠�鍘�,manual:璇存槑涔�,table:琛ㄦ牸,paper:澶氭ā鎬�,book:涔︾睄,laws:娉曞緥鏂囦欢,presentation:PPT,picture:鍥剧墖,one:鏁翠綋', + rerank_id: 'BAAI/bge-reranker-v2-m3', + role: 'owner', + tenant_id: '948fc6fa41ab11ef8fb80242ac120004', + parser_idObj: {}, }); -} + const parser = reactive({ + naive: { + chunk_token_num: 676, + layout_recognize: true, + raptor: { + use_raptor: true, + prompt: + '璇锋�荤粨浠ヤ笅娈佃惤銆� 灏忓績鏁板瓧锛屼笉瑕佺紪閫犮�� 娈佃惤濡備笅锛歕n {cluster_content}\n浠ヤ笂灏辨槸浣犻渶瑕佹�荤粨鐨勫唴瀹广��', + max_token: 600, + threshold: 0.32, + max_cluster: 233, + random_seed: 1500, + }, + }, // 鐢ㄦ埛鍚� + qa: { + entity_types: ['organization', 'person', 'location', 'event', 'time'], + raptor: { + use_raptor: false, + }, + }, + resume: {}, + manual: {}, + table: {}, + paper: {}, + book: {}, + laws: {}, + presentation: {}, + picture: {}, + one: {}, + }); + const parser_configs = ref(['閫氱敤', '澶氭ā鎬�']); + const parser_ids = ref([ + { + name: '閫氱敤', + value: 'naive', + parser_config: parser.naive, + parser_config_str: '鏀寔鐨勬枃浠舵牸寮忎负DOCX銆丒XCEL銆丳PT銆両MAGE銆丳DF銆乀XT', + }, + { + name: 'Q&A', + value: 'qa', + parser_config: parser.qa, + parser_config_str: + '鏀寔 excel 鍜� csv/txt 鏂囦欢鏍煎紡銆� \n' + + '濡傛灉鏂囦欢浠� excel 鏍煎紡锛屽垯搴旂敱涓や釜鍒楃粍鎴� 娌℃湁鏍囬锛氫竴涓彁鍑洪棶棰橈紝鍙︿竴涓敤浜庣瓟妗堬紝 绛旀鍒椾箣鍓嶇殑闂鍒椼�俓n' + + '濡傛灉鏂囦欢浠� csv/txt 鏍煎紡涓� 鐢ㄤ綔鍒嗗紑闂鍜岀瓟妗堢殑瀹氱晫绗︺�俓n', + }, + { + name: '绠�鍘�', + value: 'resume', + parser_config: parser.resume, + parser_config_str: '鏀寔鐨勬枃浠舵牸寮忎负DOCX銆丳DF銆乀XT', + }, + { + name: '璇存槑涔�', + value: 'manual', + parser_config: parser.manual, + parser_config_str: '浠呮敮鎸丳DF', + }, + { + name: '琛ㄦ牸', + value: 'table', + parser_config: parser.table, + parser_config_str: + '鏀寔EXCEL鍜孋SV/TXT鏍煎紡鏂囥�� \n' + + '瀵逛簬 csv 鎴� txt 鏂囦欢锛屽垪涔嬮棿鐨勫垎闅旂涓� TAB锛孿n' + + '绗竴琛屽繀椤绘槸鍒楁爣棰樸�俓n', + }, + { + name: '澶氭ā鎬�', + value: 'paper', + parser_config: parser.paper, + parser_config_str: '浠呮敮鎸丳DF鏂囦欢', + }, + { + name: '涔︾睄', + value: 'book', + parser_config: parser.book, + parser_config_str: '鏀寔鐨勬枃浠舵牸寮忎负DOCX銆丳DF銆乀XT', + }, + { + name: '娉曞緥鏂囦欢', + value: 'laws', + parser_config: parser.laws, + parser_config_str: '鏀寔鐨勬枃浠舵牸寮忎负DOCX銆丳DF銆乀XT', + }, + { + name: 'PPT', + value: 'presentation', + parser_config: parser.presentation, + parser_config_str: '鏀寔鐨勬枃浠舵牸寮忎负PDF銆丳PTX', + }, + { + name: '鍥剧墖', + value: 'picture', + parser_config: parser.picture, + parser_config_str: '鏀寔鍥惧儚鏂囦欢', + }, + { + name: '鏁翠綋', + value: 'one', + parser_config: parser.one, + parser_config_str: '鏀寔鐨勬枃浠舵牸寮忎负DOCX銆丒XCEL銆丳DF銆乀XT', + }, + ]); + const parser_idsArr = ref([]); + const uploadList = ref([]); + const props = defineProps(['sessionId']); + const emit = defineEmits(['selectFileCallback']); + const uploadRef = ref(); + const files = ref([]); + const acceptNameList = computed(() => { + return '.word, .pdf, .ppt, .excel, .txt, .zip, .rar, .7z, .doc, .docx, .xls, .xlsx, .pptx, .ppt, .pdf, .mp4, .avi, .mp3,.wav, .wma, .wmv, .rm,'; + }); -const onChange = (fileList) => { - files.value = fileList; -}; + const filterData = computed(() => { + const result = parser_ids.value + .filter((val) => parser_configs.value.includes(val.name)) + .reverse() + .slice(0, 4) + .reverse(); + result.unshift({ + name: '鏅鸿兘璇嗗埆', + value: '', + parser_config_str: '', + parser_config: '', + }); + return result; + }); + const init = () => { + // parser_ids.value = kbtenantInfo.parser_ids.split(",").map((item) => { + // const [value1, value2] = item.split(":"); + // return { + // name: value2, + // value: value1 + // }; + // }); + getParseMethodsList(); + }; -const upDataFile = () => { - console.log(files.value, "files"); - console.log(parser_ids.value, "瑙f瀽鏂规硶"); - if(files.value.length == 0){ - Message.warning('璇烽�夋嫨鏂囦欢'); - return; - } - uploaditemList.value = files.value.map((item)=>{ - return { - name: item.name, - size: (item.file.size/1024).toFixed(2) + 'K', + const chooseParser = (item) => { + console.log(item); + }; + + const onChange = (fileList) => { + files.value = fileList; + files.value.forEach((item) => {}); + }; + const parserChange = () => { + parseridConfig.value = false; + }; + + const visibleChange = (e) => { + e.stopPropagation(); + visible.value = !visible.value; + }; + + const getIconByExtension = (extension) => { + const fileExtension = ref(''); + fileExtension.value = extension.split('.').pop(); + let type = ''; + parser_idsArr.value.forEach((item) => { + // 鍖呭惈鍏冪礌 + if (item.formats.includes(fileExtension.value)) { + type = item.id; + } + }); + return type; + }; + + const upDataFile = async () => { + if (!activeSessionId.value) { + //鏂板缓浼氳瘽 + const res = await addSessionApi({ + dialog_id: '', + conversation_desc: '', + }); + // console.log(res, "res"); + if (res.code == 200) { + // console.log(res.data.conversation_id); + activeSessionId.value = res.data?.conversation_id; + const { code, data } = await getSessionDetailsApi( + res.data?.conversation_id + ); + if (code === 200) { + console.log(data, '鏂板缓浼氳瘽璇︽儏'); + } + } else { + Message.error('鍒涘缓浼氳瘽澶辫触锛岃閲嶈瘯'); + } } - }) - onFileSelectedLoading.value = true; - const formData = new FormData(); - for (let i = 0; i < files.value.length; i++) { - formData.append('file', files.value[i].file); - formData.append('conversation_id', activeSessionId.value); - formData.append('parser_id', parser_id.value); - formData.append('parser_config', ''); - } - uploadWithoutKb(formData).then((res) => { - if (res.code == 200) { - visible.value = false; + + console.log(files.value, 'files'); + console.log(parser_ids.value, '瑙f瀽鏂规硶'); + if (files.value.length == 0) { + Message.warning('璇烽�夋嫨鏂囦欢'); + return; + } + uploaditemList.value = files.value.map((item, index) => { + return { + index: index, + name: item.name, + size: (item.file.size / 1024).toFixed(2) + 'K', + }; + }); + onFileSelectedLoading.value = true; + const formData = new FormData(); + for (let i = 0; i < files.value.length; i++) { + formData.append('file', files.value[i].file); + formData.append('conversation_id', activeSessionId.value); + formData.append('parser_config', ''); + if (!parser_id.value) { + formData.append('parser_id', getIconByExtension(files.value[i].name)); + } else { + formData.append('parser_id', parser_id.value); + } + } + console.log(formData, 'formData'); + // uploadAndParse(formData).then((res) => { + // debugger; + // onFileSelectedLoading.value = false; + // if (res.code == 200) { + // cancel(); + // // uploaditemList.value = []; + // emit('selectFileCallback', uploaditemList.value); + // Message.success('涓婁紶鎴愬姛'); + // } else { + // Message.error('涓婁紶澶辫触'); + // } + // }); + uploadWithoutKb(formData).then((res) => { onFileSelectedLoading.value = false; - // uploaditemList.value = []; - emit('selectFileCallback', uploaditemList.value); - Message.success('涓婁紶鎴愬姛'); - } else { - Message.error('涓婁紶澶辫触'); + if (res.code == 200) { + cancel(); + // uploaditemList.value = []; + emit('selectFileCallback', uploaditemList.value); + Message.success('涓婁紶鎴愬姛'); + } else { + Message.error('涓婁紶澶辫触'); + } + }); + }; + + const cancel = () => { + if (!onFileSelectedLoading.value) { + visible.value = false; + parser_id.value = ''; } + }; + + defineExpose({ + cancel, }); + const getParseMethodsList = async () => { + let res = await getParseMethodsListApi(); + parser_ids.value = res.data.map((item) => { + console.log(item, item.parser_config_str, 78787); + return { + name: item.name, + value: item.id, + parser_config: '', + parser_config_str: JSON.stringify(item.formats), + }; + }); + parser_idsArr.value = res.data; + }; + onBeforeMount(() => { + init(); + }); + onMounted(() => {}); -}; - - -onBeforeMount(() => { - init(); - - - -}); -onMounted(() => { -}); - -watch( - ()=>props.sessionId, - (value, oldValue)=>{ - activeSessionId.value = value; - } -) - - + watch( + () => props.sessionId, + (value, oldValue) => { + activeSessionId.value = value; + } + ); </script> - +<style> + .upload-wrap .arco-select-view-inner { + display: none; + } +</style> <style scoped lang="less"> -.aUpload { - width: 100%; - max-height: 500px; - overflow: hidden; - overflow-y: auto; -} + .aUpload { + width: 100%; + max-height: 500px; + overflow: hidden; + overflow-y: auto; + } + .upload-wrap { + position: relative; + } + .config-text { + position: absolute; + right: 70px; + bottom: -11px; + font-size: 12px; + } </style> -- Gitblit v1.8.0