Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,7 @@
"sdk/guides/llm-registry",
"sdk/guides/llm-routing",
"sdk/guides/llm-reasoning",
"sdk/guides/gpt5-preset",
Comment thread
xingyaoww marked this conversation as resolved.
"sdk/guides/llm-streaming",
"sdk/guides/llm-image-input",
"sdk/guides/llm-error-handling",
Expand Down
82 changes: 82 additions & 0 deletions sdk/guides/gpt5-preset.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
---
title: GPT-5 Preset (ApplyPatchTool)
description: Use the GPT-5 preset to build an agent that swaps the standard FileEditorTool for ApplyPatchTool.
---

import RunExampleCode from "/sdk/shared-snippets/how-to-run-example.mdx";

The GPT-5 preset is an opt-in agent preset for patch-based file editing. Calling `get_gpt5_agent(llm)` creates an agent that uses `ApplyPatchTool` instead of the standard `FileEditorTool`, while leaving the default preset unchanged for everything else.

## Ready-to-run Example

<Note>
This example is available on GitHub: [examples/04_llm_specific_tools/01_gpt5_apply_patch_preset.py](https://github.com/OpenHands/software-agent-sdk/blob/main/examples/04_llm_specific_tools/01_gpt5_apply_patch_preset.py)
</Note>

```python icon="python" expandable examples/04_llm_specific_tools/01_gpt5_apply_patch_preset.py
"""Example: Using GPT-5 preset with ApplyPatchTool for file editing.

This example demonstrates how to enable the GPT-5 preset, which swaps the
standard claude-style FileEditorTool for ApplyPatchTool.

Usage:
export OPENAI_API_KEY=... # or set LLM_API_KEY
# Optionally set a model (we recommend a mini variant if available):
# export LLM_MODEL=(
# "openai/gpt-5.2-mini" # or fallback: "openai/gpt-5.1-mini" or "openai/gpt-5.1"
# )

uv run python examples/04_llm_specific_tools/01_gpt5_apply_patch_preset.py
"""

import os

from openhands.sdk import LLM, Agent, Conversation
from openhands.tools.preset.gpt5 import get_gpt5_agent


# Resolve API key from env
api_key = os.getenv("LLM_API_KEY") or os.getenv("OPENAI_API_KEY")
if not api_key:
raise SystemExit("Please set OPENAI_API_KEY or LLM_API_KEY to run this example.")

model = os.getenv("LLM_MODEL", "openai/gpt-5.1")
base_url = os.getenv("LLM_BASE_URL", None)

llm = LLM(model=model, api_key=api_key, base_url=base_url)

# Build an agent with the GPT-5 preset (ApplyPatchTool-based editing)
agent: Agent = get_gpt5_agent(llm)

# Run in the current working directory
cwd = os.getcwd()
conversation = Conversation(agent=agent, workspace=cwd)

conversation.send_message(
"Create (or update) a file named GPT5_DEMO.txt at the repo root with "
"two short lines describing this repository."
)
conversation.run()

# Report cost
cost = llm.metrics.accumulated_cost
print(f"EXAMPLE_COST: {cost}")
```

<RunExampleCode path_to_script="examples/04_llm_specific_tools/01_gpt5_apply_patch_preset.py"/>

<Tip>
You can optionally set `LLM_MODEL` to a GPT-5 variant such as `openai/gpt-5.2-mini`, `openai/gpt-5.1-mini`, or `openai/gpt-5.1`.
</Tip>

## What this preset changes

- Replaces the standard `FileEditorTool` with `ApplyPatchTool`
- Keeps the GPT-5-specific configuration explicit via `get_gpt5_agent(llm)`
- Leaves the default preset unchanged unless you opt into this one

## See Also

- **[LLM Reasoning](/sdk/guides/llm-reasoning)** - Learn more about newer OpenAI model behavior and the Responses API
- **[LLM Subscriptions](/sdk/guides/llm-subscriptions)** - Use supported OpenAI subscription-backed models without API credits
- **[Custom Tools](/sdk/guides/custom-tools)** - Understand the standard SDK tool system and presets
Loading