From 250342bb21c3ded0d477b13a0fe83930ff54b86e Mon Sep 17 00:00:00 2001 From: SanthoshSachin Date: Tue, 7 Jan 2025 11:05:09 +0530 Subject: [PATCH 1/2] Fix #29034 --- libs/core/langchain_core/prompts/chat.py | 32 +++++++++++++++++++----- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/libs/core/langchain_core/prompts/chat.py b/libs/core/langchain_core/prompts/chat.py index 1629962ba1333..1647fdc835f62 100644 --- a/libs/core/langchain_core/prompts/chat.py +++ b/libs/core/langchain_core/prompts/chat.py @@ -1219,17 +1219,37 @@ def format_messages(self, **kwargs: Any) -> list[BaseMessage]: """ kwargs = self._merge_partial_and_user_variables(**kwargs) result = [] + for message_template in self.messages: if isinstance(message_template, BaseMessage): - result.extend([message_template]) - elif isinstance( - message_template, (BaseMessagePromptTemplate, BaseChatPromptTemplate) - ): + # Check if the content contains any template variables + if any(char in message_template.content for char in "{}"): + try: + # Create a temporary template from the message content + temp_template = PromptTemplate.from_template( + message_template.content + ) + # Format the content with provided variables + formatted_content = temp_template.format(**kwargs) + # Create a new message with formatted content + formatted_message = type(message_template)( + content=formatted_content, + additional_kwargs=message_template.additional_kwargs.copy() + ) + result.append(formatted_message) + except (KeyError, ValueError): + # If formatting fails, use original message + result.append(message_template) + else: + # If no template variables, use original message + result.append(message_template) + + elif isinstance(message_template, (BaseMessagePromptTemplate, BaseChatPromptTemplate)): message = message_template.format_messages(**kwargs) result.extend(message) else: - msg = f"Unexpected input: {message_template}" - raise ValueError(msg) + raise ValueError(f"Unexpected input: {message_template}") + return result async def aformat_messages(self, **kwargs: Any) -> list[BaseMessage]: From 37a656bb2d1b6a9395186fef5de0cf88ff957221 Mon Sep 17 00:00:00 2001 From: SanthoshSachin Date: Tue, 7 Jan 2025 11:25:12 +0530 Subject: [PATCH 2/2] ChatPromptTemplate.format_messages now handles f-strings inherited from BaseMessage #29034 --- libs/core/langchain_core/prompts/chat.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libs/core/langchain_core/prompts/chat.py b/libs/core/langchain_core/prompts/chat.py index 1647fdc835f62..9fe6c43628ead 100644 --- a/libs/core/langchain_core/prompts/chat.py +++ b/libs/core/langchain_core/prompts/chat.py @@ -1244,11 +1244,15 @@ def format_messages(self, **kwargs: Any) -> list[BaseMessage]: # If no template variables, use original message result.append(message_template) - elif isinstance(message_template, (BaseMessagePromptTemplate, BaseChatPromptTemplate)): + elif isinstance( + message_template, + (BaseMessagePromptTemplate, BaseChatPromptTemplate) + ): message = message_template.format_messages(**kwargs) result.extend(message) else: - raise ValueError(f"Unexpected input: {message_template}") + error_msg = "Unexpected input: " + str(message_template) + raise ValueError(error_msg) return result