Backfill missing swipe_info (#4831) * Backfill missing swipe_info * Add type for SwipeInfo * Init SwipeInfo with empty extra

1af87ea165e8febb2fdbe2a5e827f692ebe5b61c

Cohee <18619528+Cohee1207@users.noreply.github.com>

Signed
3 files changed, +32 -15Showing whitespace changes
public/global.d.ts+11 -3
@@ -17,6 +17,7 @@ declare global {
17 type TextCompletionSettings = typeof textgenerationwebui_settings;17 type TextCompletionSettings = typeof textgenerationwebui_settings;
18 type MessageTimestamp = string | number | Date;18 type MessageTimestamp = string | number | Date;
19 type Character = import('./scripts/char-data').v1CharData;19 type Character = import('./scripts/char-data').v1CharData;
20 type ChatMessageExtra = BaseMessageExtra & Partial<ReasoningMessageExtra> & Record<string, any>;
2021
21 interface Group {22 interface Group {
22 id: string;23 id: string;
@@ -69,12 +70,19 @@ declare global {
69 force_avatar?: string;70 force_avatar?: string;
70 original_avatar?: string;71 original_avatar?: string;
71 swipes?: string[];72 swipes?: string[];
72 swipe_info?: Record<string, any>;73 swipe_info?: SwipeInfo[];
73 swipe_id?: number;74 swipe_id?: number;
74 extra?: ChatMessageExtra & Partial<ReasoningMessageExtra> & Record<string, any>;75 extra?: ChatMessageExtra;
75 };76 };
7677
77 interface ChatMessageExtra {78 interface SwipeInfo {
79 send_date?: MessageTimestamp;
80 gen_started?: MessageTimestamp;
81 gen_finished?: MessageTimestamp;
82 extra?: ChatMessageExtra;
83 }
84
85 interface BaseMessageExtra {
78 gen_id?: number;86 gen_id?: number;
79 bias?: string;87 bias?: string;
80 uses_system_ui?: boolean;88 uses_system_ui?: boolean;
public/script.js+20 -12
@@ -6404,27 +6404,35 @@ export function ensureSwipes(message) {
6404 updated = true;6404 updated = true;
6405 }6405 }
64066406
6407 for (let i = 0; i < message.swipes.length; i++) {
6408 if (typeof message.swipes[i] !== 'string') {
6409 updated = true;
6410 console.warn('The message had a swipe that is not a string. It has has been set to \'\'.', message);
6411 message.swipes[i] = '';
6412 }
6413 }
6414
6415 if (typeof message.swipe_id !== 'number') {6407 if (typeof message.swipe_id !== 'number') {
6416 message.swipe_id = 0;6408 message.swipe_id = 0;
6417 updated = true;6409 updated = true;
6418 }6410 }
64196411
6420 if (!Array.isArray(message.swipe_info)) {6412 /** @type {() => SwipeInfo} */
6421 message.swipe_info = message.swipes.map(_ => ({6413 const createSwipeInfo = () => ({
6422 send_date: message.send_date,6414 send_date: message.send_date,
6423 gen_started: message.gen_started,6415 gen_started: message.gen_started,
6424 gen_finished: message.gen_finished,6416 gen_finished: message.gen_finished,
6425 extra: structuredClone(message.extra) ?? {},6417 extra: {},
6426 }));6418 });
6419
6420 if (!Array.isArray(message.swipe_info)) {
6421 message.swipe_info = message.swipes.map(_ => createSwipeInfo());
6422 updated = true;
6423 }
6424
6425 for (let i = 0; i < message.swipes.length; i++) {
6426 if (typeof message.swipes[i] !== 'string') {
6427 updated = true;
6428 console.warn('The message had a swipe that is not a string. It has has been set to \'\'.', message);
6429 message.swipes[i] = '';
6430 }
6431 if (!message.swipe_info[i] || typeof message.swipe_info[i] !== 'object') {
6427 updated = true;6432 updated = true;
6433 console.warn('The message had missing or invalid swipe_info for a swipe. It has been backfilled.', message);
6434 message.swipe_info[i] = createSwipeInfo();
6435 }
6428 }6436 }
64296437
6430 return updated;6438 return updated;
public/scripts/logprobs.js+1 -0
@@ -417,6 +417,7 @@ function createSwipe(messageId, prompt) {
417417
418 console.debug('cleanedPrompt: ', cleanedPrompt);418 console.debug('cleanedPrompt: ', cleanedPrompt);
419419
420 /** @type {SwipeInfo} */
420 const newSwipeInfo = {421 const newSwipeInfo = {
421 send_date: msg.send_date,422 send_date: msg.send_date,
422 gen_started: msg.gen_started,423 gen_started: msg.gen_started,