@@ -142,6 +142,38 @@ def get_costs(self) -> Costs:
142142 return Costs (0 , 0 , 0 , 0 )
143143 return self .cost_manager .get_costs ()
144144
145+ def mask_base64_data (self , msg : dict ) -> dict :
146+ """Process the base64 image data in the message, replacing it with placeholders for easier logging
147+
148+ Args:
149+ msg (dict): A dictionary of messages in OpenAI format
150+
151+ Returns:
152+ dict: This is the processed message dictionary with the image data replaced with placeholders
153+ """
154+ if not isinstance (msg , dict ):
155+ return msg
156+
157+ new_msg = msg .copy ()
158+ content = new_msg .get ("content" )
159+ img_base64_prefix = "data:image/"
160+
161+ if isinstance (content , list ):
162+ # Handling multimodal content (like gpt-4v format)
163+ new_content = []
164+ for item in content :
165+ if isinstance (item , dict ) and item .get ("type" ) == "image_url" :
166+ image_url = item .get ("image_url" , {}).get ("url" , "" )
167+ if image_url .startswith (img_base64_prefix ):
168+ item = item .copy ()
169+ item ["image_url" ] = {"url" : "<Image base64 data has been omitted>" }
170+ new_content .append (item )
171+ new_msg ["content" ] = new_content
172+ elif isinstance (content , str ) and img_base64_prefix in content :
173+ # Process plain text messages containing base64 image data
174+ new_msg ["content" ] = "<Messages containing image base64 data have been omitted>"
175+ return new_msg
176+
145177 async def aask (
146178 self ,
147179 msg : Union [str , list [dict [str , str ]]],
@@ -165,7 +197,11 @@ async def aask(
165197 message .extend (msg )
166198 if stream is None :
167199 stream = self .config .stream
168- logger .debug (message )
200+
201+ # the image data is replaced with placeholders to avoid long output
202+ masked_message = [self .mask_base64_data (m ) for m in message ]
203+ logger .debug (masked_message )
204+
169205 compressed_message = self .compress_messages (message , compress_type = self .config .compress_type )
170206 rsp = await self .acompletion_text (compressed_message , stream = stream , timeout = self .get_timeout (timeout ))
171207 # rsp = await self.acompletion_text(message, stream=stream, timeout=self.get_timeout(timeout))
0 commit comments