Backfill missing swipe_info (#4831) * Backfill missing swipe_info * Add type for SwipeInfo * Init SwipeInfo with empty extra
Signed| @@ -17,6 +17,7 @@ declare global { | ||
| 17 | 17 | type TextCompletionSettings = typeof textgenerationwebui_settings; |
| 18 | 18 | type MessageTimestamp = string | number | Date; |
| 19 | 19 | type Character = import('./scripts/char-data').v1CharData; |
| 20 | + type ChatMessageExtra = BaseMessageExtra & Partial<ReasoningMessageExtra> & Record<string, any>; | |
| 20 | 21 | |
| 21 | 22 | interface Group { |
| 22 | 23 | id: string; |
| @@ -69,12 +70,19 @@ declare global { | ||
| 69 | 70 | force_avatar?: string; |
| 70 | 71 | original_avatar?: string; |
| 71 | 72 | swipes?: string[]; |
| 72 | 73 | swipe_info?: Record<string, any>SwipeInfo[]; |
| 73 | 74 | swipe_id?: number; |
| 74 | - extra?: ChatMessageExtra & Partial<ReasoningMessageExtra> & Record<string, any>; | |
| 75 | + extra?: ChatMessageExtra; | |
| 75 | 76 | }; |
| 76 | 77 | |
| 77 | 78 | interface ChatMessageExtraSwipeInfo { |
| 79 | + send_date?: MessageTimestamp; | |
| 80 | + gen_started?: MessageTimestamp; | |
| 81 | + gen_finished?: MessageTimestamp; | |
| 82 | + extra?: ChatMessageExtra; | |
| 83 | + } | |
| 84 | + | |
| 85 | + interface BaseMessageExtra { | |
| 78 | 86 | gen_id?: number; |
| 79 | 87 | bias?: string; |
| 80 | 88 | uses_system_ui?: boolean; |
| @@ -6404,27 +6404,35 @@ export function ensureSwipes(message) { | ||
| 6404 | 6404 | updated = true; |
| 6405 | 6405 | } |
| 6406 | 6406 | |
| 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 | 6407 | if (typeof message.swipe_id !== 'number') { |
| 6416 | 6408 | message.swipe_id = 0; |
| 6417 | 6409 | updated = true; |
| 6418 | 6410 | } |
| 6419 | 6411 | |
| 6420 | - if (!Array.isArray(message.swipe_info)) { | |
| 6412 | + /** @type {() => SwipeInfo} */ | |
| 6421 | 6413 | message.swipe_info const createSwipeInfo = message.swipes.map(_) => ({ |
| 6422 | 6414 | send_date: message.send_date, |
| 6423 | 6415 | gen_started: message.gen_started, |
| 6424 | 6416 | gen_finished: message.gen_finished, |
| 6425 | 6417 | extra: structuredClone(message.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 | 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 | } |
| 6429 | 6437 | |
| 6430 | 6438 | return updated; |
| @@ -417,6 +417,7 @@ function createSwipe(messageId, prompt) { | ||
| 417 | 417 | |
| 418 | 418 | console.debug('cleanedPrompt: ', cleanedPrompt); |
| 419 | 419 | |
| 420 | + /** @type {SwipeInfo} */ | |
| 420 | 421 | const newSwipeInfo = { |
| 421 | 422 | send_date: msg.send_date, |
| 422 | 423 | gen_started: msg.gen_started, |