| ) -> Sequence[PromptMessage]: | ) -> Sequence[PromptMessage]: | ||||
| prompt_messages: list[PromptMessage] = [] | prompt_messages: list[PromptMessage] = [] | ||||
| for message in messages: | for message in messages: | ||||
| contents: list[PromptMessageContent] = [] | |||||
| if message.edition_type == "jinja2": | if message.edition_type == "jinja2": | ||||
| result_text = _render_jinja2_message( | result_text = _render_jinja2_message( | ||||
| template=message.jinja2_text or "", | template=message.jinja2_text or "", | ||||
| jinjia2_variables=jinja2_variables, | jinjia2_variables=jinja2_variables, | ||||
| variable_pool=variable_pool, | variable_pool=variable_pool, | ||||
| ) | ) | ||||
| contents.append(TextPromptMessageContent(data=result_text)) | |||||
| prompt_message = _combine_message_content_with_role( | |||||
| contents=[TextPromptMessageContent(data=result_text)], role=message.role | |||||
| ) | |||||
| prompt_messages.append(prompt_message) | |||||
| else: | else: | ||||
| # Get segment group from basic message | # Get segment group from basic message | ||||
| if context: | if context: | ||||
| segment_group = variable_pool.convert_template(template) | segment_group = variable_pool.convert_template(template) | ||||
| # Process segments for images | # Process segments for images | ||||
| file_contents = [] | |||||
| for segment in segment_group.value: | for segment in segment_group.value: | ||||
| if isinstance(segment, ArrayFileSegment): | if isinstance(segment, ArrayFileSegment): | ||||
| for file in segment.value: | for file in segment.value: | ||||
| file_content = file_manager.to_prompt_message_content( | file_content = file_manager.to_prompt_message_content( | ||||
| file, image_detail_config=vision_detail_config | file, image_detail_config=vision_detail_config | ||||
| ) | ) | ||||
| contents.append(file_content) | |||||
| file_contents.append(file_content) | |||||
| elif isinstance(segment, FileSegment): | elif isinstance(segment, FileSegment): | ||||
| file = segment.value | file = segment.value | ||||
| if file.type in {FileType.IMAGE, FileType.VIDEO, FileType.AUDIO, FileType.DOCUMENT}: | if file.type in {FileType.IMAGE, FileType.VIDEO, FileType.AUDIO, FileType.DOCUMENT}: | ||||
| file_content = file_manager.to_prompt_message_content( | file_content = file_manager.to_prompt_message_content( | ||||
| file, image_detail_config=vision_detail_config | file, image_detail_config=vision_detail_config | ||||
| ) | ) | ||||
| contents.append(file_content) | |||||
| else: | |||||
| plain_text = segment.markdown.strip() | |||||
| if plain_text: | |||||
| contents.append(TextPromptMessageContent(data=plain_text)) | |||||
| prompt_message = _combine_message_content_with_role(contents=contents, role=message.role) | |||||
| prompt_messages.append(prompt_message) | |||||
| file_contents.append(file_content) | |||||
| # Create message with text from all segments | |||||
| plain_text = segment_group.text | |||||
| if plain_text: | |||||
| prompt_message = _combine_message_content_with_role( | |||||
| contents=[TextPromptMessageContent(data=plain_text)], role=message.role | |||||
| ) | |||||
| prompt_messages.append(prompt_message) | |||||
| if file_contents: | |||||
| # Create message with image contents | |||||
| prompt_message = _combine_message_content_with_role(contents=file_contents, role=message.role) | |||||
| prompt_messages.append(prompt_message) | |||||
| return prompt_messages | return prompt_messages | ||||