From 1dbf6cd4e5ce3cd1d3b252e3cb1696f77b2f493c Mon Sep 17 00:00:00 2001 From: Sarah Wooders Date: Fri, 11 Apr 2025 21:59:48 -0700 Subject: [PATCH] feat: translate `system` to `developer` or o-series models (#1692) Co-authored-by: cpacker --- letta/llm_api/openai_client.py | 8 +++++++- letta/schemas/message.py | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/letta/llm_api/openai_client.py b/letta/llm_api/openai_client.py index 8df6c1cb..426069ab 100644 --- a/letta/llm_api/openai_client.py +++ b/letta/llm_api/openai_client.py @@ -66,8 +66,14 @@ class OpenAIClient(LLMClientBase): put_inner_thoughts_first=True, ) + use_developer_message = llm_config.model.startswith("o1") or llm_config.model.startswith("o3") # o-series models openai_message_list = [ - cast_message_to_subtype(m.to_openai_dict(put_inner_thoughts_in_kwargs=llm_config.put_inner_thoughts_in_kwargs)) + cast_message_to_subtype( + m.to_openai_dict( + put_inner_thoughts_in_kwargs=llm_config.put_inner_thoughts_in_kwargs, + use_developer_message=use_developer_message, + ) + ) for m in messages ] diff --git a/letta/schemas/message.py b/letta/schemas/message.py index b9966386..0cb79238 100644 --- a/letta/schemas/message.py +++ b/letta/schemas/message.py @@ -598,6 +598,7 @@ class Message(BaseMessage): self, max_tool_id_length: int = TOOL_CALL_ID_MAX_LEN, put_inner_thoughts_in_kwargs: bool = False, + use_developer_message: bool = False, ) -> dict: """Go from Message class to ChatCompletion message object""" @@ -625,7 +626,7 @@ class Message(BaseMessage): assert all([v is not None for v in [self.role]]), vars(self) openai_message = { "content": text_content, - "role": self.role, + "role": "developer" if use_developer_message else self.role, } elif self.role == "user":