@@ -28,6 +28,13 @@ export class Message {
2828 this . files = processFiles ( this . files ) ;
2929 }
3030 }
31+
32+ static processFiles ( m ) {
33+ m = structuredClone ( m ) ; // avoid mutating original
34+ let message = new Message ( m ) ;
35+ message . processAndCacheFiles ( ) ;
36+ return message ;
37+ }
3138}
3239
3340export class MessagePair {
@@ -91,8 +98,8 @@ export const pairs_to_messages = (pairs, query = null) => {
9198 if ( ! messagePair . first . content && ! messagePair . files ) continue ;
9299
93100 // Process and cache files in the original MessagePair if needed
94- if ( messagePair . files && messagePair . processAndCacheFiles ) {
95- messagePair . processAndCacheFiles ( ) ;
101+ if ( messagePair . files ) {
102+ messagePair = Message . processFiles ( messagePair ) ;
96103 }
97104
98105 chat . push (
@@ -173,18 +180,7 @@ export const messages_to_json = (chat, { readFiles = true, provider = null } = {
173180 console . assert ( msg . role === "user" , "Only user messages can have files" ) ;
174181
175182 // Process and cache files in the original chat object for memoization
176- if ( chat [ i ] . processAndCacheFiles ) {
177- chat [ i ] . processAndCacheFiles ( ) ;
178- // Update our copy with the processed files
179- msg . files = chat [ i ] . files ;
180- } else {
181- // Fallback for plain objects that aren't Message instances
182- // Process files and update both the original object and our copy for memoization
183- console . log ( `Processing files for plain object (no processAndCacheFiles method)` ) ;
184- const processedFiles = processFiles ( msg . files ) ;
185- chat [ i ] . files = processedFiles ; // Update original for memoization
186- msg . files = processedFiles ; // Update copy for current use
187- }
183+ msg . files = Message . processFiles ( msg . files ) ;
188184
189185 for ( const file of msg . files ) {
190186 const content = file . content || file ; // backward compatibility
0 commit comments