| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | 
							- from typing import cast
 
- from core.model_runtime.entities.message_entities import (
 
-     AssistantPromptMessage,
 
-     ImagePromptMessageContent,
 
-     PromptMessage,
 
-     PromptMessageContentType,
 
-     PromptMessageRole,
 
-     TextPromptMessageContent,
 
- )
 
- from core.prompt.simple_prompt_transform import ModelMode
 
- class PromptMessageUtil:
 
-     @staticmethod
 
-     def prompt_messages_to_prompt_for_saving(model_mode: str, prompt_messages: list[PromptMessage]) -> list[dict]:
 
-         """
 
-         Prompt messages to prompt for saving.
 
-         :param model_mode: model mode
 
-         :param prompt_messages: prompt messages
 
-         :return:
 
-         """
 
-         prompts = []
 
-         if model_mode == ModelMode.CHAT.value:
 
-             tool_calls = []
 
-             for prompt_message in prompt_messages:
 
-                 if prompt_message.role == PromptMessageRole.USER:
 
-                     role = 'user'
 
-                 elif prompt_message.role == PromptMessageRole.ASSISTANT:
 
-                     role = 'assistant'
 
-                     if isinstance(prompt_message, AssistantPromptMessage):
 
-                         tool_calls = [{
 
-                             'id': tool_call.id,
 
-                             'type': 'function',
 
-                             'function': {
 
-                                 'name': tool_call.function.name,
 
-                                 'arguments': tool_call.function.arguments,
 
-                             }
 
-                         } for tool_call in prompt_message.tool_calls]
 
-                 elif prompt_message.role == PromptMessageRole.SYSTEM:
 
-                     role = 'system'
 
-                 elif prompt_message.role == PromptMessageRole.TOOL:
 
-                     role = 'tool'
 
-                 else:
 
-                     continue
 
-                 text = ''
 
-                 files = []
 
-                 if isinstance(prompt_message.content, list):
 
-                     for content in prompt_message.content:
 
-                         if content.type == PromptMessageContentType.TEXT:
 
-                             content = cast(TextPromptMessageContent, content)
 
-                             text += content.data
 
-                         else:
 
-                             content = cast(ImagePromptMessageContent, content)
 
-                             files.append({
 
-                                 "type": 'image',
 
-                                 "data": content.data[:10] + '...[TRUNCATED]...' + content.data[-10:],
 
-                                 "detail": content.detail.value
 
-                             })
 
-                 else:
 
-                     text = prompt_message.content
 
-                 prompt = {
 
-                     "role": role,
 
-                     "text": text,
 
-                     "files": files
 
-                 }
 
-                 
 
-                 if tool_calls:
 
-                     prompt['tool_calls'] = tool_calls
 
-                 prompts.append(prompt)
 
-         else:
 
-             prompt_message = prompt_messages[0]
 
-             text = ''
 
-             files = []
 
-             if isinstance(prompt_message.content, list):
 
-                 for content in prompt_message.content:
 
-                     if content.type == PromptMessageContentType.TEXT:
 
-                         content = cast(TextPromptMessageContent, content)
 
-                         text += content.data
 
-                     else:
 
-                         content = cast(ImagePromptMessageContent, content)
 
-                         files.append({
 
-                             "type": 'image',
 
-                             "data": content.data[:10] + '...[TRUNCATED]...' + content.data[-10:],
 
-                             "detail": content.detail.value
 
-                         })
 
-             else:
 
-                 text = prompt_message.content
 
-             params = {
 
-                 "role": 'user',
 
-                 "text": text,
 
-             }
 
-             if files:
 
-                 params['files'] = files
 
-             prompts.append(params)
 
-         return prompts
 
 
  |