Heal your failed LLM requests on-the-fly to avoid any downtime. Malformed parameters and model deprecations.
The hosted demo uses https://phoenix-yc-production.up.railway.app. Set
AUTOFIX_API_KEY in your application environment (or .env when your runtime
loads it) to send Authorization: Bearer <key> to the heal API. AUTOFIX_URL
still overrides the hosted endpoint.
One package - compatible with every LLM SDK.
npm install @mnfst/autofiximport OpenAI from 'openai';
import { autofix } from '@mnfst/autofix';
const client = new OpenAI({ fetch: autofix() });
const res = await client.chat.completions.create({
model: 'gpt-5-mini',
temperature: 0.2, // gpt-5 models reject this — normally a 400
messages: [{ role: 'user', content: 'Hello!' }],
});
// → healed at runtime (temperature set to 1), returns a normal 200const response = await client.responses.create({
model: 'gpt-5-mini',
temperature: 0.2,
input: 'Hello!',
});import Anthropic from '@anthropic-ai/sdk';
import { autofix } from '@mnfst/autofix';
const client = new Anthropic({ fetch: autofix() });
const message = await client.messages.create({
model: 'claude-sonnet-4-20250514',
max_tokens: 256,
messages: [{ role: 'user', content: 'Hello!' }],
});Other providers like OpenRouter uses the OpenAI SDK with its own baseURL:
import OpenAI from 'openai';
import { autofix } from '@mnfst/autofix/openai';
const client = new OpenAI({
baseURL: 'https://openrouter.ai/api/v1',
apiKey: process.env.OPENROUTER_API_KEY,
fetch: autofix(),
});One package - compatible with every LLM SDK.
pip install mnfst-autofixfrom openai import OpenAI
from mnfst_autofix.openai import autofix
client = OpenAI(http_client=autofix())Async:
from openai import AsyncOpenAI
from mnfst_autofix.openai import autofix_async
client = AsyncOpenAI(http_client=autofix_async())For Anthropic:
from anthropic import Anthropic
from mnfst_autofix.anthropic import autofix
client = Anthropic(http_client=autofix())Just change the base_url and add autofix.
from openai import OpenAI
from mnfst_autofix.openai import autofix
client = OpenAI(
base_url="http://localhost:4000/v1",
http_client=autofix(),
)Real errors, healed at runtime:
| Normally, you'd see | autofix does |
|---|---|
Unsupported value: 'temperature' does not support 0.2 with this model. |
sets temperature to 1, replays |
Unsupported parameter: 'max_tokens' |
drops max_tokens, replays |
The model 'gpt-4-0314' has been deprecated |
remaps to the current model (gpt-5), replays |
- Zero overhead on success — the wrapper only wakes up on a healable failure.
- Fail open — autofix is never the outage. A heal API that is slow, down, or wrong gets you your original error back.
- One replay, ever — a replay is never itself healed.
- Your key never leaves — the provider API key stays on your SDK's request, on its original path. Not a gateway.
The heal API receives settings, not prompt data:
Scalar settings and scalar-only arrays may travel. Prompts, tools, nested arrays, schema bodies, identity fields, and credential fields stay local. The provider error, endpoint origin and path, derived workspace id, and SDK source are also sent.
autofix({ sendMessages: true }) in Node / autofix(send_messages=True) in
Python (default off) opts the top-level messages array in, verbatim — for
teams pointing at their own heal service who want the conversation visible next
to the failure it caused. It is observability only: the heal API still cannot
author or rewrite a message on the way back.
const client = new OpenAI({
fetch: autofix({
onHeal: ({ healStatus, summary }) => {
console.log(`[autofix] ${healStatus}: ${summary ?? ''}`);
},
}),
});| Package | Language | SDKs |
|---|---|---|
@mnfst/autofix |
Node / TypeScript | OpenAI, Anthropic |
mnfst-autofix |
Python | OpenAI, Anthropic |
MIT © Manifest