|
@@ -14,6 +14,8 @@
|
|
|
<answerCom
|
|
|
:item="item"
|
|
|
@setText="(val) => setText(val.text, val.send)"
|
|
|
+ @onReBuild="onReBuild"
|
|
|
+ @onFeedback="onFeedback"
|
|
|
/>
|
|
|
</template>
|
|
|
</template>
|
|
@@ -89,6 +91,12 @@ import { isValue } from '@/utils/czr-util'
|
|
|
import { ElMessage } from 'element-plus'
|
|
|
import { chatMessage } from '@/views/chat/chat'
|
|
|
import { appModelConfigDetail } from '@/api/modules/app/make'
|
|
|
+import {
|
|
|
+ appConversationsMessageFeedback,
|
|
|
+ appConversationsMessages,
|
|
|
+ appConversationsStop,
|
|
|
+ appMessagesSuggestedQuestions,
|
|
|
+} from '@/api/modules/app/chat'
|
|
|
|
|
|
const props = defineProps({
|
|
|
ID: { default: '' },
|
|
@@ -116,11 +124,21 @@ const setText = (text: string, send = false) => {
|
|
|
state.text = text
|
|
|
}
|
|
|
}
|
|
|
-const initChat = async () => {
|
|
|
+const onReset = () => {
|
|
|
state.chats = []
|
|
|
+ state.text = ''
|
|
|
+ state.params.query = ''
|
|
|
+ state.params.modelConfig = {}
|
|
|
+ state.params.conversationId = ''
|
|
|
+ state.params.parentMessageId = ''
|
|
|
+ state.isWaiting = false
|
|
|
+ state.isStop = false
|
|
|
+}
|
|
|
+const initChat = async (isPrologue = true) => {
|
|
|
+ onReset()
|
|
|
const { data }: any = await appModelConfigDetail(props.ID, props.test ? 0 : 1)
|
|
|
state.params.modelConfig = data
|
|
|
- if (state.params.modelConfig.openingStatement.trim()) {
|
|
|
+ if (isPrologue && state.params.modelConfig.openingStatement.trim()) {
|
|
|
state.chats.push({
|
|
|
type: 'answer',
|
|
|
prologue: state.params.modelConfig.openingStatement,
|
|
@@ -128,64 +146,32 @@ const initChat = async () => {
|
|
|
prologueQuestions: state.params.modelConfig.suggestedQuestions || [],
|
|
|
})
|
|
|
}
|
|
|
- // state.chats = [
|
|
|
- // {
|
|
|
- // type: 'answer',
|
|
|
- // prologue: '您好,请不要问我问题!',
|
|
|
- // prologueNum: 'three',
|
|
|
- // prologueQuestions: ['马什么每', '马东什么', '什么冬梅'],
|
|
|
- // },
|
|
|
- // {
|
|
|
- // type: 'answer',
|
|
|
- // prologue: '您好,请不要问我问题!',
|
|
|
- // prologueNum: 'all',
|
|
|
- // prologueQuestions: [
|
|
|
- // '马什么每',
|
|
|
- // '马东什么',
|
|
|
- // '什么冬梅',
|
|
|
- // '马什么每',
|
|
|
- // '马东什么',
|
|
|
- // '什么冬梅',
|
|
|
- // '马什么每',
|
|
|
- // '马东什么',
|
|
|
- // '什么冬梅',
|
|
|
- // '马什么每',
|
|
|
- // '马东什么',
|
|
|
- // '什么冬梅',
|
|
|
- // ],
|
|
|
- // },
|
|
|
- // {
|
|
|
- // type: 'ask',
|
|
|
- // text: '现在几点了?',
|
|
|
- // },
|
|
|
- // {
|
|
|
- // type: 'answer',
|
|
|
- // text: '现在是5025年88月99日 77:55:44,星期九。',
|
|
|
- // advise: [],
|
|
|
- // time: 1000 * 2.7,
|
|
|
- // tokens: 22,
|
|
|
- // },
|
|
|
- // {
|
|
|
- // type: 'answer',
|
|
|
- // text: '',
|
|
|
- // advise: [],
|
|
|
- // loading: true,
|
|
|
- // },
|
|
|
- // {
|
|
|
- // type: 'ask',
|
|
|
- // text: '还有别的问题建议吗?还有别的问题建议吗?还有别的问题建议吗?还有别的问题建议吗?还有别的问题建议吗?还有别的问题建议吗?还有别的问题建议吗?还有别的问题建议吗?还有别的问题建议吗?还有别的问题建议吗?还有别的问题建议吗?还有别的问题建议吗?还有别的问题建议吗?还有别的问题建议吗?还有别的问题建议吗?',
|
|
|
- // },
|
|
|
- // {
|
|
|
- // type: 'answer',
|
|
|
- // text: '还有一些问题建议',
|
|
|
- // advise: ['这个时间牛*不', '再问我一个时间吧'],
|
|
|
- // time: 1000 * 457,
|
|
|
- // tokens: 22222222,
|
|
|
- // },
|
|
|
- // ]
|
|
|
- initHistory()
|
|
|
}
|
|
|
-const initHistory = () => {}
|
|
|
+const initHistory = async (conversationId) => {
|
|
|
+ await initChat(false)
|
|
|
+ appConversationsMessages(conversationId, { page: 1, size: 100 }).then(
|
|
|
+ ({ data }: any) => {
|
|
|
+ data.content.reverse().forEach((v, i) => {
|
|
|
+ state.params.conversationId = v.conversationId
|
|
|
+ state.params.parentMessageId = v.id
|
|
|
+ state.chats.push({
|
|
|
+ type: 'ask',
|
|
|
+ text: v.query,
|
|
|
+ })
|
|
|
+ state.chats.push({
|
|
|
+ type: 'answer',
|
|
|
+ ask: v.query,
|
|
|
+ text: v.answer,
|
|
|
+ loading: false,
|
|
|
+ error: false,
|
|
|
+ finished: true,
|
|
|
+ messageId: v.id,
|
|
|
+ feedback: v.feedback,
|
|
|
+ })
|
|
|
+ })
|
|
|
+ },
|
|
|
+ )
|
|
|
+}
|
|
|
const initTextHandle = () => {
|
|
|
const textarea = ref_text.value
|
|
|
const textMax = 150
|
|
@@ -242,13 +228,14 @@ const onSend = (text = '', isSet = false) => {
|
|
|
text: state.params.query + '',
|
|
|
}
|
|
|
state.chats.push(ask)
|
|
|
- const answer = reactive({
|
|
|
+ const answer: AnswerStruct = reactive({
|
|
|
type: 'answer',
|
|
|
+ ask: ask.text + '',
|
|
|
text: '',
|
|
|
loading: true,
|
|
|
- error: false,
|
|
|
- messageId: '',
|
|
|
- taskId: '',
|
|
|
+ finished: false,
|
|
|
+ time: 0,
|
|
|
+ tokens: 0,
|
|
|
})
|
|
|
state.chats.push(answer)
|
|
|
scrollToEnd()
|
|
@@ -262,7 +249,6 @@ const onSend = (text = '', isSet = false) => {
|
|
|
}
|
|
|
chatMessage(p, {
|
|
|
onData: (text, data) => {
|
|
|
- console.log(text, data)
|
|
|
state.isWaiting = false
|
|
|
state.params.conversationId = data.conversation_id
|
|
|
answer.messageId = data.message_id
|
|
@@ -273,22 +259,42 @@ const onSend = (text = '', isSet = false) => {
|
|
|
},
|
|
|
onMessageEnd: (data) => {
|
|
|
state.isStop = false
|
|
|
+ state.params.parentMessageId = data.message_id
|
|
|
+ answer.finished = true
|
|
|
+ if (data.metadata) {
|
|
|
+ answer.time = Number(data.metadata.usage.latency)
|
|
|
+ answer.tokens = Number(data.metadata.usage.prompt_tokens)
|
|
|
+ if (state.params.modelConfig.qsType.some((v) => v == 1)) {
|
|
|
+ answer.adviseLoading = true
|
|
|
+ appMessagesSuggestedQuestions(data.message_id).then(
|
|
|
+ ({ data }: any) => {
|
|
|
+ answer.advise = data
|
|
|
+ answer.adviseLoading = false
|
|
|
+ scrollToEnd()
|
|
|
+ },
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
},
|
|
|
onError: (text, data) => {
|
|
|
- console.error(text, data)
|
|
|
state.isWaiting = false
|
|
|
answer.loading = false
|
|
|
answer.text += text
|
|
|
answer.error = true
|
|
|
scrollToEnd()
|
|
|
state.isStop = false
|
|
|
+ answer.finished = true
|
|
|
},
|
|
|
})
|
|
|
} else {
|
|
|
ElMessage.warning('请输入问题!')
|
|
|
}
|
|
|
}
|
|
|
-const onStop = () => {}
|
|
|
+const onStop = () => {
|
|
|
+ appConversationsStop(state.chats[state.chats.length - 1].taskId, {
|
|
|
+ appId: props.ID,
|
|
|
+ }).then(() => {})
|
|
|
+}
|
|
|
const onAudio = (text) => {
|
|
|
state.text += text
|
|
|
nextTick(() => {
|
|
@@ -300,11 +306,20 @@ const onAudio = (text) => {
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
+const onReBuild = (answer) => {
|
|
|
+ onSend(answer.ask, true)
|
|
|
+}
|
|
|
+const onFeedback = (answer, feedback) => {
|
|
|
+ appConversationsMessageFeedback(answer.messageId, feedback).then(() => {
|
|
|
+ answer.feedback = feedback
|
|
|
+ })
|
|
|
+}
|
|
|
onMounted(() => {
|
|
|
initTextHandle()
|
|
|
})
|
|
|
defineExpose({
|
|
|
init: () => initChat(),
|
|
|
+ history: (conversationId) => initHistory(conversationId),
|
|
|
})
|
|
|
</script>
|
|
|
|