July 14, 2026
Fine-Tuning OpenAI Models: What Still Works
If you landed here looking for a GPT-3.5-turbo fine-tuning tutorial, that door is closed. OpenAI no longer offers fine-tuning for gpt-3.5-turbo at all, and the model itself shuts down October 23, 2026. Beyond that, OpenAI is winding down its entire self-serve fine-tuning platform. New organizations without prior fine-tuning history have been blocked since May 7, 2026. All existing customers lose the ability to start any new fine-tuning job on January 6, 2027.
This guide replaces the old GPT-3.5-turbo walkthrough with the current situation: which models you can still fine-tune, how to actually run a job against today's API, what it costs, and whether fine-tuning is still the right call before OpenAI closes the door.
The wind-down timeline
OpenAI's fine-tuning guide confirms that the platform is winding down. New users have lost access, while qualifying existing users can create jobs during the remaining window. Source: OpenAI supervised fine-tuning guide.
| Date | What happens |
|---|---|
| 2026-05-07 | New organizations with no prior fine-tuning history can no longer create fine-tuning jobs |
| 2026-07-02 | Job creation restricted to organizations with recent fine-tuning inference activity |
| 2026-09-28 | gpt-3.5-turbo-instruct shuts down entirely |
| 2026-10-23 | gpt-3.5-turbo (gpt-3.5-turbo-0125) shuts down entirely |
| 2026-10-31 | OpenAI Evals platform becomes read-only |
| 2026-11-30 | OpenAI Evals platform shuts down; Datasets remains an option for new evaluation workflows |
| 2027-01-06 | All existing customers lose the ability to create any new fine-tuning job, on any model |
Source: OpenAI deprecations page.
Inference on a model you've already fine-tuned keeps working after these dates. It only stops when the underlying base model itself is deprecated. A fine-tuned gpt-3.5-turbo model, for example, keeps serving requests until October 23, 2026, then stops for good.
Which models you can still fine-tune
| Model | Method | Notes |
|---|---|---|
gpt-4.1-2025-04-14 | Supervised (SFT), DPO | Full-size model |
gpt-4.1-mini-2025-04-14 | Supervised (SFT), DPO | Recommended starting point for most teams |
gpt-4.1-nano-2025-04-14 | Supervised (SFT), DPO | Smallest, cheapest to train and serve |
o4-mini-2025-04-16 | Reinforcement fine-tuning (RFT) | Grader-based reasoning work |
gpt-4o-2024-08-06 | Vision fine-tuning (SFT) | Extends SFT to image inputs |
Source: OpenAI supervised fine-tuning guide, reinforcement fine-tuning guide, model optimization guide.
OpenAI dropped gpt-3.5-turbo from the fine-tuning-eligible model set before this rewrite, independent of the platform wind-down.
Reinforcement fine-tuning on o4-mini uses a grader, such as a string_check, score_model, or custom grading function, to score model output. The model improves against that score. OpenAI says dozens to a few hundred high-quality examples are enough to start. Training sets max out at 50,000 examples, test sets at 1,000.
Should you fine-tune at all right now
OpenAI's own stated reason for winding down self-serve fine-tuning is that newer frontier models, plus prompting and retrieval, now cover most of what used to justify it. That's worth taking seriously before you spend the time.
| Signal | Lean toward fine-tuning | Lean toward prompting and retrieval |
|---|---|---|
| Task shape | Narrow, repetitive, consistent format | Varied, open-ended, or still changing |
| Failure mode | Model knows the answer and fails to follow your format or tone | Model lacks facts or context |
| Data | You have hundreds of clean, representative examples | You have a handful of examples or none |
| Latency and cost | You need a smaller model to match a larger one's quality on your task | A current frontier model already clears the bar |
| Timeline | You can act before January 6, 2027 | You're evaluating for a future project |
If your gap is missing information, retrieval usually closes it faster and cheaper than fine-tuning. If your gap is format, tone, or a narrow behavior a good prompt can't reliably enforce, fine-tuning still has a place, on the models above, while the window stays open.
Step 1: Prepare your dataset
Training data is a JSONL file, one JSON object per line, in chat-completions message format. OpenAI recommends starting with 50 well-crafted examples and evaluating the results, with a hard minimum of 10.
A plain instruction-following example:
{"messages": [{"role": "system", "content": "You are a support assistant for a software company. Keep replies under three sentences."}, {"role": "user", "content": "How do I reset my password?"}, {"role": "assistant", "content": "Go to Settings, then Account, then Reset Password. You'll get a reset link by email within a few minutes."}]}
An example with tool calling, using tools and parallel_tool_calls:
{"messages": [{"role": "system", "content": "You are a helpful assistant that can check the weather."}, {"role": "user", "content": "What's the weather like in Boston today?"}, {"role": "assistant", "content": null, "tool_calls": [{"id": "call_abc123", "type": "function", "function": {"name": "get_current_weather", "arguments": "{\"location\": \"Boston, MA\"}"}}]}], "tools": [{"type": "function", "function": {"name": "get_current_weather", "description": "Get the current weather for a location", "parameters": {"type": "object", "properties": {"location": {"type": "string", "description": "City and state, e.g. Boston, MA"}}, "required": ["location"]}}}], "parallel_tool_calls": false}
Before uploading, clean the dataset:
- Remove duplicates. Repeated examples bias training toward whatever's overrepresented.
- Fix errors. Typos and grammatical mistakes in your examples become patterns the model learns.
- Handle missing or irrelevant content. Drop examples that don't represent the task you're training for.
- Check for representativeness. Your examples should cover the full range of production inputs, including hard cases.
Hold out a separate validation set. OpenAI's own guidance is otherwise unchanged from earlier fine-tuning generations: diverse, high-quality examples beat a larger pile of mediocre ones.
Source: OpenAI supervised fine-tuning guide.
Step 2: Upload your data and create the job
Upload the training file through the Files API, then create the job with the current v1.x client. This replaces the older global openai.api_key = "..." and openai.ChatCompletion.create(...) style you may have seen in older tutorials, including the previous version of this one.
from openai import OpenAI
client = OpenAI()
with open("training.jsonl", "rb") as file:
uploaded_file = client.files.create(file=file, purpose="fine-tune")
client.fine_tuning.jobs.create(
training_file=uploaded_file.id,
model="gpt-4.1-mini-2025-04-14",
method={
"type": "supervised",
"supervised": {"hyperparameters": {"n_epochs": 2}},
},
)
The equivalent as a direct API call:
curl https://api.openai.com/v1/fine_tuning/jobs \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{"training_file": "file-RCnFCYRhFDcq1aHxiYkBHw", "model": "gpt-4.1-nano-2025-04-14"}'
For DPO, the same client.fine_tuning.jobs.create call takes method={"type": "dpo", ...} and trains on pairs of preferred and rejected responses. RFT on o4-mini uses method={"type": "reinforcement", ...} with a grader configuration. Both are documented in OpenAI's model optimization guide and reinforcement fine-tuning guide.
Source: OpenAI fine-tuning jobs API reference.
Step 3: Monitor and evaluate the job
A fine-tuning job runs asynchronously. Poll or listen for job status through the same client.fine_tuning.jobs resource, and OpenAI surfaces training and validation loss as the job progresses.
Once the job finishes, evaluate the result the same way you'd evaluate any model change: run it against a held-out test set you didn't train on, and compare its output directly against the base model's.
One thing to plan around: OpenAI's Evals platform goes read-only on October 31, 2026, and shuts down entirely on November 30, 2026. OpenAI's deprecations page names Promptfoo as the migration path, so migrate existing Evals pipelines to Promptfoo before the shutdown. Separately, OpenAI's Evals guide suggests Datasets for people new to evaluations or who want an iterative environment.
Step 4: Deploy and call your fine-tuned model
A fine-tuned model gets an ID in the form ft:{base-model}:{org}::{id}. Call it through the Responses API or Chat Completions exactly like a base model, using that string as the model name.
curl https://api.openai.com/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{"model": "ft:gpt-4.1-nano-2025-04-14:openai::BTz2REMH", "input": "What is 4+4?"}'
Your fine-tuned model is scoped to your organization. Other OpenAI customers can't call it.
Source: OpenAI supervised fine-tuning guide.
What it costs today
OpenAI publishes these standard fine-tuning rates. GPT-4.1-family prices are per 1M tokens. Reinforcement fine-tuning for o4-mini bills training by the hour.
| Model | Training | Input | Cached input | Output |
|---|---|---|---|---|
gpt-4.1-2025-04-14 | $25.00 | $3.00 | $0.75 | $12.00 |
gpt-4.1-mini-2025-04-14 | $5.00 | $0.80 | $0.20 | $3.20 |
gpt-4.1-nano-2025-04-14 | $1.50 | $0.20 | $0.05 | $0.80 |
o4-mini-2025-04-16 | $100.00 per hour | $4.00 | $1.00 | $16.00 |
OpenAI also publishes lower batch inference rates. Check the OpenAI pricing page before committing budget because these figures can change.
What to do next
If you're still on a fine-tuned gpt-3.5-turbo model, treat October 23, 2026 as a hard deadline and start testing gpt-5.4-mini, OpenAI's published replacement. Compare it against your existing evaluation set before moving production traffic. If you haven't started fine-tuning yet, run the prompting-versus-fine-tuning decision above first. Organizations with an unresolved behavior gap and active job-creation access should choose a supported fine-tuning model before January 6, 2027 closes the door on new jobs entirely.
More articles
Continue exploring the Klu blog.
July 14, 2026
Fine-Tuning GPT-4 with OpenAI's API: A Current Guide
It's time to build
Collaborate with your team on reliable Generative AI features.
Want expert guidance? Book a 1:1 onboarding session from your dashboard.