diff --git a/frontend/src/api/chat.ts b/frontend/src/api/chat.ts
index 4180ff82..42a7199c 100644
--- a/frontend/src/api/chat.ts
+++ b/frontend/src/api/chat.ts
@@ -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[] => {
diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json
index f3fe10f4..dca1f835 100644
--- a/frontend/src/i18n/en.json
+++ b/frontend/src/i18n/en.json
@@ -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",
diff --git a/frontend/src/i18n/ko-KR.json b/frontend/src/i18n/ko-KR.json
index 92b2d63d..e77a7fe0 100644
--- a/frontend/src/i18n/ko-KR.json
+++ b/frontend/src/i18n/ko-KR.json
@@ -235,6 +235,7 @@
"continue_to_ask": "계속 질문하기:",
"data_analysis": "데이터 분석",
"data_predict": "데이터 예측",
+ "data_regenerated": "재생성",
"chat_search": "검색",
"thinking": "생각 중",
"thinking_step": "사고 과정",
diff --git a/frontend/src/i18n/zh-CN.json b/frontend/src/i18n/zh-CN.json
index 02a803dc..2ec825a7 100644
--- a/frontend/src/i18n/zh-CN.json
+++ b/frontend/src/i18n/zh-CN.json
@@ -236,6 +236,7 @@
"continue_to_ask": "继续提问:",
"data_analysis": "数据分析",
"data_predict": "数据预测",
+ "data_regenerated": "重新生成",
"chat_search": "搜索",
"thinking": "思考中",
"thinking_step": "思考过程",
diff --git a/frontend/src/views/chat/answer/ChartAnswer.vue b/frontend/src/views/chat/answer/ChartAnswer.vue
index 1f1f4504..68c74059 100644
--- a/frontend/src/views/chat/answer/ChartAnswer.vue
+++ b/frontend/src/views/chat/answer/ChartAnswer.vue
@@ -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
diff --git a/frontend/src/views/chat/chat-block/UserChat.vue b/frontend/src/views/chat/chat-block/UserChat.vue
index 6be1c3f2..2bf8e226 100644
--- a/frontend/src/views/chat/chat-block/UserChat.vue
+++ b/frontend/src/views/chat/chat-block/UserChat.vue
@@ -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 = () => {
{{ t('qa.data_predict') }}
+
+ {{ t('qa.data_regenerated') }}
+
{{ message?.content }}
diff --git a/frontend/src/views/chat/index.vue b/frontend/src/views/chat/index.vue
index f351727f..da20796b 100644
--- a/frontend/src/views/chat/index.vue
+++ b/frontend/src/views/chat/index.vue
@@ -211,7 +211,11 @@
-
+
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)
})
}