| 
8 | 8 | from tqdm.asyncio import tqdm_asyncio  | 
9 | 9 | 
 
  | 
10 | 10 | from swift.llm import InferRequest, RolloutInferRequest, Template, VllmEngine  | 
 | 11 | +from swift.llm.infer.protocol import MultiModalRequestMixin  | 
11 | 12 | from swift.plugin import Metric, multi_turns  | 
12 | 13 | from swift.plugin.context_manager import ContextManager, context_managers  | 
13 | 14 | from swift.plugin.env import Env, envs  | 
@@ -295,13 +296,16 @@ async def _multi_turn_sampling_controller(self, infer_request: RolloutInferReque  | 
295 | 296 |             if should_stop:  | 
296 | 297 |                 result_choice.messages = messages  | 
297 | 298 |                 info_dict['num_turns'] = current_turn  | 
298 |  | -                for key, value in info_dict.items():  | 
 | 299 | +                for key, values in info_dict.items():  | 
299 | 300 |                     if key in ['images', 'audios', 'videos']:  | 
300 |  | -                        value = MultiModalRequestMixin.to_base64(value)  | 
 | 301 | +                        if not isinstance(values, list):  | 
 | 302 | +                            values = [values]  | 
 | 303 | +                        for i, value in enumerate(values):  | 
 | 304 | +                            values[i] = MultiModalRequestMixin.to_base64(value)  | 
301 | 305 |                     if hasattr(result_choice, key):  | 
302 |  | -                        setattr(result_choice, key, value)  | 
 | 306 | +                        setattr(result_choice, key, values)  | 
303 | 307 |                     else:  | 
304 |  | -                        result_choice.multi_turn_infos[key] = value  | 
 | 308 | +                        result_choice.multi_turn_infos[key] = values  | 
305 | 309 |                 return result  | 
306 | 310 | 
 
  | 
307 | 311 |             ret = self.multi_turn_scheduler.step(current_request, result_choice, current_turn)  | 
 | 
0 commit comments