prompt_message_util.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. from typing import cast
  2. from core.model_runtime.entities.message_entities import (
  3. ImagePromptMessageContent,
  4. PromptMessage,
  5. PromptMessageContentType,
  6. PromptMessageRole,
  7. TextPromptMessageContent,
  8. )
  9. from core.prompt.simple_prompt_transform import ModelMode
  10. class PromptMessageUtil:
  11. @staticmethod
  12. def prompt_messages_to_prompt_for_saving(model_mode: str, prompt_messages: list[PromptMessage]) -> list[dict]:
  13. """
  14. Prompt messages to prompt for saving.
  15. :param model_mode: model mode
  16. :param prompt_messages: prompt messages
  17. :return:
  18. """
  19. prompts = []
  20. if model_mode == ModelMode.CHAT.value:
  21. for prompt_message in prompt_messages:
  22. if prompt_message.role == PromptMessageRole.USER:
  23. role = 'user'
  24. elif prompt_message.role == PromptMessageRole.ASSISTANT:
  25. role = 'assistant'
  26. elif prompt_message.role == PromptMessageRole.SYSTEM:
  27. role = 'system'
  28. else:
  29. continue
  30. text = ''
  31. files = []
  32. if isinstance(prompt_message.content, list):
  33. for content in prompt_message.content:
  34. if content.type == PromptMessageContentType.TEXT:
  35. content = cast(TextPromptMessageContent, content)
  36. text += content.data
  37. else:
  38. content = cast(ImagePromptMessageContent, content)
  39. files.append({
  40. "type": 'image',
  41. "data": content.data[:10] + '...[TRUNCATED]...' + content.data[-10:],
  42. "detail": content.detail.value
  43. })
  44. else:
  45. text = prompt_message.content
  46. prompts.append({
  47. "role": role,
  48. "text": text,
  49. "files": files
  50. })
  51. else:
  52. prompt_message = prompt_messages[0]
  53. text = ''
  54. files = []
  55. if isinstance(prompt_message.content, list):
  56. for content in prompt_message.content:
  57. if content.type == PromptMessageContentType.TEXT:
  58. content = cast(TextPromptMessageContent, content)
  59. text += content.data
  60. else:
  61. content = cast(ImagePromptMessageContent, content)
  62. files.append({
  63. "type": 'image',
  64. "data": content.data[:10] + '...[TRUNCATED]...' + content.data[-10:],
  65. "detail": content.detail.value
  66. })
  67. else:
  68. text = prompt_message.content
  69. params = {
  70. "role": 'user',
  71. "text": text,
  72. }
  73. if files:
  74. params['files'] = files
  75. prompts.append(params)
  76. return prompts