harn-vm 0.8.79

Async bytecode virtual machine for the Harn programming language
Documentation
# ---------- OpenAI family -----------------------------------------------------
#
# `provider.openai` rules are inherited by the sibling providers declared
# in `[provider_family]` below (OpenRouter, Together, Groq, DeepSeek,
# Fireworks, HuggingFace, local vLLM/SGLang). Siblings may still add their
# own `[[provider.<name>]]` rules and those win over the openai fallback.

# ChatGPT-era GPT models use Markdown prompt sections and native JSON output.
[[provider.openai]]
model_match = "gpt-4o*"
native_tools = true
preferred_tool_format = "native"
vision = true
audio_supported = true
structured_output = "native"
vision_supported = true
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = false
prefers_xml_tools = false
thinking_block_style = "none"

[[provider.openai]]
model_match = "gpt-4.1*"
native_tools = true
preferred_tool_format = "native"
vision_supported = true
structured_output = "native"
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = false
prefers_xml_tools = false
thinking_block_style = "none"

# gpt-5.4+ exposes native `tool_search` on the Responses API.
[[provider.openai]]
model_match = "gpt-*"
version_min = [5, 4]
native_tools = true
preferred_tool_format = "native"
defer_loading = true
tool_search = ["hosted", "client"]
responses_api = true
hosted_tools = ["web_search", "web_search_preview", "file_search", "code_interpreter", "image_generation", "computer_use", "mcp", "remote_mcp"]
remote_mcp = true
conversation_state = true
compaction = true
background_mode = true
tool_approval_policy = "provider_or_harn"
vision_supported = true
structured_output = "native"
thinking_modes = ["effort"]
reasoning_effort_supported = true
reasoning_none_supported = true
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = false
prefers_xml_tools = false
thinking_block_style = "reasoning_summary"

[[provider.openai]]
model_match = "gpt-*"
version_min = [5, 1]
native_tools = true
preferred_tool_format = "native"
vision_supported = true
structured_output = "native"
thinking_modes = ["effort"]
reasoning_effort_supported = true
reasoning_none_supported = true
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = false
prefers_xml_tools = false
thinking_block_style = "reasoning_summary"

[[provider.openai]]
model_match = "gpt-*"
version_min = [5, 0]
native_tools = true
preferred_tool_format = "native"
vision_supported = true
structured_output = "native"
thinking_modes = ["effort"]
reasoning_effort_supported = true
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = false
prefers_xml_tools = false
thinking_block_style = "reasoning_summary"

# Legacy GPT: native tool calls only.
[[provider.openai]]
model_match = "gpt-*"
native_tools = true
preferred_tool_format = "native"
structured_output = "native"
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = false
prefers_xml_tools = false
thinking_block_style = "none"

# Reasoning family (o1, o3, o4, ...).
[[provider.openai]]
model_match = "o1*"
native_tools = true
preferred_tool_format = "native"
structured_output = "native"
thinking_modes = ["effort"]
requires_completion_tokens = true
reasoning_effort_supported = true
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = true
prefers_xml_tools = false
thinking_block_style = "reasoning_summary"

[[provider.openai]]
model_match = "o3*"
native_tools = true
preferred_tool_format = "native"
structured_output = "native"
thinking_modes = ["effort"]
requires_completion_tokens = true
reasoning_effort_supported = true
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = true
prefers_xml_tools = false
thinking_block_style = "reasoning_summary"

[[provider.openai]]
model_match = "o4*"
native_tools = true
preferred_tool_format = "native"
structured_output = "native"
thinking_modes = ["effort"]
vision_supported = true
requires_completion_tokens = true
reasoning_effort_supported = true
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = true
prefers_xml_tools = false
thinking_block_style = "reasoning_summary"

# OpenRouter-style provider-prefixed IDs.
[[provider.openai]]
model_match = "openai/gpt-4o*"
native_tools = true
preferred_tool_format = "native"
vision = true
audio_supported = true
structured_output = "native"
vision_supported = true
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = false
prefers_xml_tools = false
thinking_block_style = "none"

[[provider.openai]]
model_match = "openai/gpt-4.1*"
native_tools = true
preferred_tool_format = "native"
vision_supported = true
structured_output = "native"
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = false
prefers_xml_tools = false
thinking_block_style = "none"

[[provider.openai]]
model_match = "openai/gpt-*"
version_min = [5, 4]
native_tools = true
preferred_tool_format = "native"
defer_loading = true
tool_search = ["hosted", "client"]
responses_api = true
hosted_tools = ["web_search", "web_search_preview", "file_search", "code_interpreter", "image_generation", "computer_use", "mcp", "remote_mcp"]
remote_mcp = true
conversation_state = true
compaction = true
background_mode = true
tool_approval_policy = "provider_or_harn"
vision_supported = true
structured_output = "native"
thinking_modes = ["effort"]
reasoning_effort_supported = true
reasoning_none_supported = true
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = false
prefers_xml_tools = false
thinking_block_style = "reasoning_summary"

[[provider.openai]]
model_match = "openai/gpt-*"
version_min = [5, 1]
native_tools = true
preferred_tool_format = "native"
json_schema = "native"
thinking_modes = ["effort"]
reasoning_effort_supported = true
reasoning_none_supported = true
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = false
prefers_xml_tools = false
thinking_block_style = "reasoning_summary"

[[provider.openai]]
model_match = "openai/gpt-*"
version_min = [5, 0]
native_tools = true
preferred_tool_format = "native"
json_schema = "native"
thinking_modes = ["effort"]
reasoning_effort_supported = true
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = false
prefers_xml_tools = false
thinking_block_style = "reasoning_summary"

[[provider.openai]]
model_match = "openai/gpt-*"
native_tools = true
preferred_tool_format = "native"
structured_output = "native"
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = false
prefers_xml_tools = false
thinking_block_style = "none"

[[provider.openai]]
model_match = "openai/o1*"
native_tools = true
preferred_tool_format = "native"
json_schema = "native"
thinking_modes = ["effort"]
requires_completion_tokens = true
reasoning_effort_supported = true
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = true
prefers_xml_tools = false
thinking_block_style = "reasoning_summary"

[[provider.openai]]
model_match = "openai/o3*"
native_tools = true
preferred_tool_format = "native"
json_schema = "native"
thinking_modes = ["effort"]
requires_completion_tokens = true
reasoning_effort_supported = true
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = true
prefers_xml_tools = false
thinking_block_style = "reasoning_summary"

[[provider.openai]]
model_match = "openai/o4*"
native_tools = true
preferred_tool_format = "native"
json_schema = "native"
thinking_modes = ["effort"]
vision_supported = true
requires_completion_tokens = true
reasoning_effort_supported = true
prefers_xml_scaffolding = false
prefers_markdown_scaffolding = true
structured_output_mode = "native_json"
supports_assistant_prefill = false
prefers_role_developer = true
prefers_xml_tools = false
thinking_block_style = "reasoning_summary"