| | |
| | | import { nextTick, onDeactivated, onMounted, ref } from 'vue'; |
| | | import { SignJWT } from 'jose'; |
| | | import { nextTick, onDeactivated, onMounted, ref } from 'vue'; |
| | | |
| | | import { markdownToTxt } from 'markdown-to-txt'; |
| | | import './libs/duix.js'; |
| | | import { questionStreamByPost } from '/@/api/ai/chat'; |
| | | import { activeGroupType, activeRoomId } from '/@/stores/chatRoom'; |
| | | import { markdownToTxt } from 'markdown-to-txt'; |
| | | import axios from 'axios'; |
| | | import { ElMessage } from 'element-plus'; |
| | | |
| | | export type UseDigitalHumanProps = { |
| | | container: string; |
| | |
| | | const closeDigitalHuman = () => { |
| | | digitalHumanIsShow.value = false; |
| | | resetDuixStatus(); |
| | | }; |
| | | /** |
| | | * 检查数字人是否可用 |
| | | */ |
| | | const checkIsUseable = async () => { |
| | | const config = { |
| | | method: 'get', |
| | | url: `https://duix.guiji.ai/duix-openapi-v2/v1/getconcurrentNumber?appId=${duixConfig.appId}`, |
| | | headers: { |
| | | priority: 'u=1, i', |
| | | sig: duixConfig.sign, |
| | | }, |
| | | }; |
| | | |
| | | const response = await axios(config); |
| | | const data = response.data.data; |
| | | const total = data.totalConcurrentNumber; |
| | | const user = data.userConcurrentNumber; |
| | | if (total === null || total === 0) { |
| | | return false; |
| | | } |
| | | if (total !== null && total === user) { |
| | | return false; |
| | | } |
| | | |
| | | return true; |
| | | }; |
| | | |
| | | const resetDuixStatus = () => { |
| | |
| | | }); |
| | | }; |
| | | |
| | | const startDuix = () =>{ |
| | | const startDuix = () => { |
| | | const conversationId = duixConfig.conversationId; // duix平台会话id |
| | | |
| | | duix.start({ conversationId, openAsr: true,wipeGreen:true }).then((res) => { |
| | | console.info('start', res); |
| | | }).catch((err)=>{ |
| | | console.error('start error', err); |
| | | }); |
| | | } |
| | | duix |
| | | .start({ conversationId, openAsr: true, wipeGreen: true }) |
| | | .then((res) => { |
| | | console.info('start', res); |
| | | }) |
| | | .catch((err) => { |
| | | console.error('start error', err); |
| | | }); |
| | | }; |
| | | |
| | | const initDuix = () => { |
| | | const sign = duixConfig.sign; // sign由服务端生成 |
| | |
| | | duix.on('speakEnd', (data) => { |
| | | if (!isWaitingSpeak) { |
| | | isReceiveRes.value = false; |
| | | duix.openAsr().then((...a) => { |
| | | }); |
| | | duix.openAsr().then((...a) => {}); |
| | | } |
| | | }); |
| | | duix.on('speakSection', (data) => { |
| | |
| | | if (isReceiveRes.value) { |
| | | return; |
| | | } |
| | | duix.closeAsr().then((...a) => { |
| | | }); |
| | | duix.closeAsr().then((...a) => {}); |
| | | |
| | | let hasResult = false; |
| | | isReceiveRes.value = true; |
| | |
| | | |
| | | let hasInitDuix = false; |
| | | let duix: any; |
| | | const openDigitalHuman = () => { |
| | | const openDigitalHuman = async () => { |
| | | duixConfig.sign = await createSig(duixConfig.appId, duixConfig.appKey, 60 * 60 * duixConfig.expired); |
| | | const isUsable = await checkIsUseable(); |
| | | if (!isUsable) { |
| | | ElMessage.warning('"资源占用中,请检查后再试~"'); |
| | | return; |
| | | } |
| | | digitalHumanIsShow.value = true; |
| | | |
| | | nextTick(async () => { |
| | | duixConfig.sign = await createSig(duixConfig.appId, duixConfig.appKey, 60 * 60 * duixConfig.expired); |
| | | nextTick(() => { |
| | | if (!hasInitDuix) { |
| | | hasInitDuix = true; |
| | | |