Skip to content

Commit 5904cbe

Browse files
authored
feat(core): add optional include_id param to convert_to_openai_messages function (#33248)
1 parent c9590ef commit 5904cbe

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

libs/core/langchain_core/messages/utils.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,6 +1040,7 @@ def convert_to_openai_messages(
10401040
messages: Union[MessageLikeRepresentation, Sequence[MessageLikeRepresentation]],
10411041
*,
10421042
text_format: Literal["string", "block"] = "string",
1043+
include_id: bool = False,
10431044
) -> Union[dict, list[dict]]:
10441045
"""Convert LangChain messages into OpenAI message dicts.
10451046
@@ -1057,6 +1058,8 @@ def convert_to_openai_messages(
10571058
If a message has a string content, this is turned into a list
10581059
with a single content block of type ``'text'``. If a message has
10591060
content blocks these are left as is.
1061+
include_id: Whether to include message ids in the openai messages, if they
1062+
are present in the source messages.
10601063
10611064
Raises:
10621065
ValueError: if an unrecognized ``text_format`` is specified, or if a message
@@ -1145,6 +1148,8 @@ def convert_to_openai_messages(
11451148
oai_msg["refusal"] = message.additional_kwargs["refusal"]
11461149
if isinstance(message, ToolMessage):
11471150
oai_msg["tool_call_id"] = message.tool_call_id
1151+
if include_id and message.id:
1152+
oai_msg["id"] = message.id
11481153

11491154
if not message.content:
11501155
content = "" if text_format == "string" else []

libs/core/tests/unit_tests/messages/test_utils.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -882,10 +882,21 @@ def test_convert_to_openai_messages_string() -> None:
882882

883883

884884
def test_convert_to_openai_messages_single_message() -> None:
885-
message = HumanMessage(content="Hello")
885+
message: BaseMessage = HumanMessage(content="Hello")
886886
result = convert_to_openai_messages(message)
887887
assert result == {"role": "user", "content": "Hello"}
888888

889+
# Test IDs
890+
result = convert_to_openai_messages(message, include_id=True)
891+
assert result == {"role": "user", "content": "Hello"} # no ID
892+
893+
message = AIMessage(content="Hello", id="resp_123")
894+
result = convert_to_openai_messages(message)
895+
assert result == {"role": "assistant", "content": "Hello"}
896+
897+
result = convert_to_openai_messages(message, include_id=True)
898+
assert result == {"role": "assistant", "content": "Hello", "id": "resp_123"}
899+
889900

890901
def test_convert_to_openai_messages_multiple_messages() -> None:
891902
messages = [

0 commit comments

Comments
 (0)