Skip to content

Commit 99361e6

Browse files
authored
feat(core): add optional include_id param to convert_to_openai_messages function (#33242)
1 parent 5a016de commit 99361e6

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
@@ -1045,6 +1045,7 @@ def convert_to_openai_messages(
10451045
messages: Union[MessageLikeRepresentation, Sequence[MessageLikeRepresentation]],
10461046
*,
10471047
text_format: Literal["string", "block"] = "string",
1048+
include_id: bool = False,
10481049
) -> Union[dict, list[dict]]:
10491050
"""Convert LangChain messages into OpenAI message dicts.
10501051
@@ -1062,6 +1063,8 @@ def convert_to_openai_messages(
10621063
If a message has a string content, this is turned into a list
10631064
with a single content block of type ``'text'``. If a message has
10641065
content blocks these are left as is.
1066+
include_id: Whether to include message ids in the openai messages, if they
1067+
are present in the source messages.
10651068
10661069
Raises:
10671070
ValueError: if an unrecognized ``text_format`` is specified, or if a message
@@ -1150,6 +1153,8 @@ def convert_to_openai_messages(
11501153
oai_msg["refusal"] = message.additional_kwargs["refusal"]
11511154
if isinstance(message, ToolMessage):
11521155
oai_msg["tool_call_id"] = message.tool_call_id
1156+
if include_id and message.id:
1157+
oai_msg["id"] = message.id
11531158

11541159
if not message.content:
11551160
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)