| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | from typing import castfrom core.model_runtime.entities.message_entities import (    AssistantPromptMessage,    ImagePromptMessageContent,    PromptMessage,    PromptMessageContentType,    PromptMessageRole,    TextPromptMessageContent,)from core.prompt.simple_prompt_transform import ModelModeclass 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
 |