mirror of
https://gh-proxy.org/https://github.com/klinsmaya/SQLBot.git
synced 2026-11-09 09:46:55 +08:00
feat: improve regenerate SQL chat feature
This commit is contained in:
@@ -51,6 +51,7 @@ export class ChatRecord {
|
||||
recommended_question?: string
|
||||
analysis_record_id?: number
|
||||
predict_record_id?: number
|
||||
regenerate_record_id?: number
|
||||
|
||||
constructor()
|
||||
constructor(
|
||||
@@ -75,7 +76,8 @@ export class ChatRecord {
|
||||
first_chat: boolean,
|
||||
recommended_question: string | undefined,
|
||||
analysis_record_id: number | undefined,
|
||||
predict_record_id: number | undefined
|
||||
predict_record_id: number | undefined,
|
||||
regenerate_record_id: number | undefined
|
||||
)
|
||||
constructor(
|
||||
id?: number,
|
||||
@@ -99,7 +101,8 @@ export class ChatRecord {
|
||||
first_chat?: boolean,
|
||||
recommended_question?: string,
|
||||
analysis_record_id?: number,
|
||||
predict_record_id?: number
|
||||
predict_record_id?: number,
|
||||
regenerate_record_id?: number
|
||||
) {
|
||||
this.id = id
|
||||
this.chat_id = chat_id
|
||||
@@ -123,6 +126,7 @@ export class ChatRecord {
|
||||
this.recommended_question = recommended_question
|
||||
this.analysis_record_id = analysis_record_id
|
||||
this.predict_record_id = predict_record_id
|
||||
this.regenerate_record_id = regenerate_record_id
|
||||
}
|
||||
}
|
||||
|
||||
@@ -252,7 +256,8 @@ const toChatRecord = (data?: any): ChatRecord | undefined => {
|
||||
data.first_chat,
|
||||
data.recommended_question,
|
||||
data.analysis_record_id,
|
||||
data.predict_record_id
|
||||
data.predict_record_id,
|
||||
data.regenerate_record_id
|
||||
)
|
||||
}
|
||||
const toChatRecordList = (list: any = []): ChatRecord[] => {
|
||||
|
||||
@@ -235,6 +235,7 @@
|
||||
"continue_to_ask": "Continue asking:",
|
||||
"data_analysis": "Data Analysis",
|
||||
"data_predict": "Data Prediction",
|
||||
"data_regenerated": "Regenerate",
|
||||
"chat_search": "Search",
|
||||
"thinking": "Thinking",
|
||||
"thinking_step": "Thought Process",
|
||||
|
||||
@@ -235,6 +235,7 @@
|
||||
"continue_to_ask": "계속 질문하기:",
|
||||
"data_analysis": "데이터 분석",
|
||||
"data_predict": "데이터 예측",
|
||||
"data_regenerated": "재생성",
|
||||
"chat_search": "검색",
|
||||
"thinking": "생각 중",
|
||||
"thinking_step": "사고 과정",
|
||||
|
||||
@@ -236,6 +236,7 @@
|
||||
"continue_to_ask": "继续提问:",
|
||||
"data_analysis": "数据分析",
|
||||
"data_predict": "数据预测",
|
||||
"data_regenerated": "重新生成",
|
||||
"chat_search": "搜索",
|
||||
"thinking": "思考中",
|
||||
"thinking_step": "思考过程",
|
||||
|
||||
@@ -163,6 +163,15 @@ const sendMessage = async () => {
|
||||
currentRecord.id = data.id
|
||||
_currentChat.value.records[index.value].id = data.id
|
||||
break
|
||||
case 'regenerate_record_id':
|
||||
currentRecord.regenerate_record_id = data.regenerate_record_id
|
||||
_currentChat.value.records[index.value].regenerate_record_id =
|
||||
data.regenerate_record_id
|
||||
break
|
||||
case 'question':
|
||||
currentRecord.question = data.question
|
||||
_currentChat.value.records[index.value].question = data.question
|
||||
break
|
||||
case 'info':
|
||||
console.info(data.msg)
|
||||
break
|
||||
|
||||
@@ -3,9 +3,11 @@ import type { ChatMessage } from '@/api/chat.ts'
|
||||
import icon_copy_outlined from '@/assets/embedded/icon_copy_outlined.svg'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { useClipboard } from '@vueuse/core'
|
||||
import { computed } from 'vue'
|
||||
|
||||
const props = defineProps<{
|
||||
message?: ChatMessage
|
||||
allMessages?: ChatMessage[]
|
||||
}>()
|
||||
const { t } = useI18n()
|
||||
const { copy } = useClipboard({ legacy: true })
|
||||
@@ -16,6 +18,13 @@ function clickAnalysis() {
|
||||
function clickPredict() {
|
||||
console.info('predict_record_id: ' + props.message?.record?.predict_record_id)
|
||||
}
|
||||
function clickRegenerated() {
|
||||
console.info('regenerate_record_id: ' + props.message?.record?.regenerate_record_id)
|
||||
}
|
||||
|
||||
const isRegenerated = computed(() => {
|
||||
return !!props.message?.record?.regenerate_record_id
|
||||
})
|
||||
|
||||
const copyCode = () => {
|
||||
const str = props.message?.content || ''
|
||||
@@ -37,6 +46,9 @@ const copyCode = () => {
|
||||
<span v-else-if="message?.record?.predict_record_id" class="prefix-title" @click="clickPredict">
|
||||
{{ t('qa.data_predict') }}
|
||||
</span>
|
||||
<span v-else-if="isRegenerated" class="prefix-title" @click="clickRegenerated">
|
||||
{{ t('qa.data_regenerated') }}
|
||||
</span>
|
||||
<span style="width: 100%">{{ message?.content }}</span>
|
||||
<div style="position: absolute; right: 12px; bottom: -24px">
|
||||
<el-tooltip :offset="12" effect="dark" :content="t('datasource.copy')" placement="top">
|
||||
|
||||
@@ -211,7 +211,11 @@
|
||||
<!-- @stop="onChatStop"-->
|
||||
<!-- @loading-over="loadingOver"-->
|
||||
<!-- />-->
|
||||
<UserChat v-if="message.role === 'user'" :message="message" />
|
||||
<UserChat
|
||||
v-if="message.role === 'user'"
|
||||
:message="message"
|
||||
:all-messages="computedMessages"
|
||||
/>
|
||||
<template v-if="message.role === 'assistant' && !message.first_chat">
|
||||
<ChartAnswer
|
||||
v-if="
|
||||
@@ -397,7 +401,7 @@
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 1, maxRows: 8.583 }"
|
||||
:placeholder="t('qa.question_placeholder')"
|
||||
@keydown.enter.exact.prevent="($event: any) => sendMessage($event)"
|
||||
@keydown.enter.exact.prevent="($event: any) => sendMessage(undefined, $event)"
|
||||
@keydown.ctrl.enter.exact.prevent="handleCtrlEnter"
|
||||
/>
|
||||
|
||||
@@ -764,7 +768,10 @@ const assistantPrepareSend = async () => {
|
||||
}
|
||||
}
|
||||
}
|
||||
const sendMessage = async ($event: any = {}) => {
|
||||
const sendMessage = async (
|
||||
regenerate_record_id: number | undefined = undefined,
|
||||
$event: any = {}
|
||||
) => {
|
||||
if ($event?.isComposing) {
|
||||
return
|
||||
}
|
||||
@@ -783,6 +790,7 @@ const sendMessage = async ($event: any = {}) => {
|
||||
currentRecord.create_time = new Date()
|
||||
currentRecord.chat_id = currentChatId.value
|
||||
currentRecord.question = inputMessage.value
|
||||
currentRecord.regenerate_record_id = regenerate_record_id
|
||||
currentRecord.sql_answer = ''
|
||||
currentRecord.sql = ''
|
||||
currentRecord.chart_answer = ''
|
||||
@@ -829,9 +837,21 @@ function onAnalysisAnswerError() {
|
||||
}
|
||||
|
||||
function askAgain(message: ChatMessage) {
|
||||
inputMessage.value = message.record?.question ?? ''
|
||||
if (message.record?.question?.trim() === '') {
|
||||
return
|
||||
}
|
||||
// regenerate
|
||||
inputMessage.value = '/regenerate'
|
||||
let regenerate_record_id = message.record?.id
|
||||
if (message.record?.id == undefined && message.record?.regenerate_record_id) {
|
||||
//只有当前对话内,上一次执行失败的重试会进这里
|
||||
regenerate_record_id = message.record?.regenerate_record_id
|
||||
}
|
||||
if (regenerate_record_id) {
|
||||
inputMessage.value = inputMessage.value + ' ' + regenerate_record_id
|
||||
}
|
||||
nextTick(() => {
|
||||
sendMessage()
|
||||
sendMessage(regenerate_record_id)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user