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, replaced by Datasets |
| 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()
client.fine_tuning.jobs.create(
training_file="file-abc123",
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, replaced by a product called Datasets. Build new evaluation pipelines against Datasets to avoid rebuilding them in a few months. Source: OpenAI Evals guide.
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.