-
Notifications
You must be signed in to change notification settings - Fork 224
Open
Description
I used the official code from https://cookbook.openai.com/articles/openai-harmony
, but the generated text is inconsistent with the one shown in the cookbook.
The main issue occurs when calling tools.
In the official example, the format is:
<|start|>assistant<|channel|>commentary to=functions.get_current_weather <|constrain|>json<|message|>
But when I use the code provided in the repository, the generated result is:
<|start|>assistant to=functions.get_current_weather<|channel|>commentary <|constrain|> json<|message|>
The position of to= is different between the two outputs.
In the official example, it appears after <|channel|>commentary, while in the generated output from the provided code, it appears immediately after <|start|>assistant.
from openai_harmony import (
Author,
Conversation,
DeveloperContent,
HarmonyEncodingName,
Message,
Role,
SystemContent,
ToolDescription,
load_harmony_encoding,
ReasoningEffort
)
encoding = load_harmony_encoding(HarmonyEncodingName.HARMONY_GPT_OSS)
system_message = (
SystemContent.new()
.with_reasoning_effort(ReasoningEffort.HIGH)
.with_conversation_start_date("2025-06-28")
)
developer_message = (
DeveloperContent.new()
.with_instructions("Always respond in riddles")
.with_function_tools(
[
ToolDescription.new(
"get_current_weather",
"Gets the current weather in the provided location.",
parameters={
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
},
"format": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"default": "celsius",
},
},
"required": ["location"],
},
),
]
)
)
convo = Conversation.from_messages(
[
Message.from_role_and_content(Role.SYSTEM, system_message),
Message.from_role_and_content(Role.DEVELOPER, developer_message),
Message.from_role_and_content(Role.USER, "What is the weather in Tokyo?"),
Message.from_role_and_content(
Role.ASSISTANT,
'User asks: "What is the weather in Tokyo?" We need to use get_current_weather tool.',
).with_channel("analysis"),
Message.from_role_and_content(Role.ASSISTANT, '{"location": "Tokyo"}')
.with_channel("commentary")
.with_recipient("functions.get_current_weather")
.with_content_type("<|constrain|> json"),
Message.from_author_and_content(
Author.new(Role.TOOL, "functions.get_current_weather"),
'{ "temperature": 20, "sunny": true }',
).with_channel("commentary"),
]
)
tokens = encoding.render_conversation_for_completion(convo, Role.ASSISTANT)
print(encoding.decode(tokens))

Metadata
Metadata
Assignees
Labels
No labels