wechat_rob_mini/pages/prompt/import.js

96 lines
3.3 KiB
JavaScript

const { request, buildResultView, normalizeResponse } = require('../../utils/request');
const RESULT_PREVIEW_LIMIT = 240;
function buildResultState(text) {
const content = text || '';
return { resultHasMore: content.length > RESULT_PREVIEW_LIMIT, resultExpanded: false };
}
function buildImportCards(payload) {
const cards = [];
if (!payload || typeof payload !== 'object') return cards;
if (payload.task_id) {
cards.push({ label: '关联任务', value: `#${payload.task_id}` });
}
if (payload.existing_task) {
const name = payload.existing_task.title || payload.existing_task.id || '已存在任务';
cards.push({ label: '已存在任务', value: String(name) });
if (payload.existing_task.conversation_count !== undefined) {
cards.push({ label: '对话数量', value: String(payload.existing_task.conversation_count) });
}
}
if (Array.isArray(payload.conversations)) {
cards.push({ label: '解析对话', value: String(payload.conversations.length) });
}
if (payload.summary) {
const summary = payload.summary;
if (summary.total_rounds !== undefined) {
cards.push({ label: '总轮数', value: String(summary.total_rounds) });
}
if (summary.user_messages !== undefined) {
cards.push({ label: '用户消息', value: String(summary.user_messages) });
}
if (summary.bot_messages !== undefined) {
cards.push({ label: '机器人消息', value: String(summary.bot_messages) });
}
if (Array.isArray(summary.keywords) && summary.keywords.length) {
cards.push({ label: '关键词', value: summary.keywords.join('、') });
}
if (Array.isArray(summary.main_topics) && summary.main_topics.length) {
cards.push({ label: '主要话题', value: summary.main_topics.join('、') });
}
}
return cards;
}
Page({
data: {
content: '',
check_only: 'false',
overwrite: 'false',
task_id: '',
task_name: '',
robot_id: '',
result: '',
resultCards: [],
resultExpanded: false,
resultHasMore: false,
importCards: []
},
onInput(e) {
const key = e.currentTarget.dataset.key;
this.setData({ [key]: e.detail.value });
},
toggleResult() {
this.setData({ resultExpanded: !this.data.resultExpanded });
},
setResult(result) {
const view = buildResultView(result);
const payload = normalizeResponse(result).payload;
const importCards = buildImportCards(payload);
const state = buildResultState(view.text);
this.setData({ result: view.text, resultCards: view.cards, importCards, ...state });
},
async parse() {
const result = await request({
url: '/api/prompt/import',
method: 'POST',
data: { content: this.data.content, check_only: true }
});
this.setResult(result);
},
async confirm() {
const payload = {
content: this.data.content,
check_only: String(this.data.check_only).toLowerCase() === 'true',
overwrite: String(this.data.overwrite).toLowerCase() === 'true',
task_id: this.data.task_id ? Number(this.data.task_id) : undefined,
task_name: this.data.task_name,
robot_id: this.data.robot_id ? Number(this.data.robot_id) : undefined
};
const result = await request({ url: '/api/prompt/import', method: 'POST', data: payload });
this.setResult(result);
}
});