agentic-json-repair
v1.0.2
Published
Repair and validate AI-generated JSON with auto-generated retry prompts.
Maintainers
Readme
agentic-json-repair
Repair and validate AI-generated JSON with auto-generated retry prompts. Perfect for building reliable AI agents and LLM pipelines.
Features
- 🔧 Auto-repair malformed JSON (missing quotes, trailing commas, etc.)
- 📝 Extract JSON from markdown code blocks or mixed prose
- ✅ Validate against Zod schemas with full type inference
- 🔄 Auto-generate retry prompts when validation fails
Installation
npm install agentic-json-repair zodUsage
import { safeParseAI } from 'agentic-json-repair';
import { z } from 'zod';
// Define your expected schema
const UserSchema = z.object({
name: z.string(),
age: z.number(),
});
// Parse messy AI output
const aiOutput = `
Sure! Here is the user data:
\`\`\`json
{
name: "Alice",
age: 30,
}
\`\`\`
`;
const result = safeParseAI(aiOutput, UserSchema);
if (result.success) {
console.log(result.data); // { name: "Alice", age: 30 } - fully typed!
} else {
// Use retry prompt to ask the AI to fix the output
console.log(result.retryPrompt);
}API
safeParseAI<T>(aiOutput: string, schema: ZodType<T>): AgenticParseResult<T>
Attempts to extract, repair, and validate JSON from an AI's text output.
Returns:
// On success
{ success: true; data: T }
// On failure
{ success: false; error: string; retryPrompt: string }What it handles
| Problem | Example | Fixed |
|---------|---------|-------|
| Markdown code blocks | ```json {...} ``` | ✅ |
| Surrounding prose | "Here's the JSON: {...}" | ✅ |
| Unquoted keys | { name: "Alice" } | ✅ |
| Trailing commas | { "a": 1, } | ✅ |
| Schema mismatches | Wrong types, missing fields | ✅ (retry prompt) |
Agentic Loop Example
async function getStructuredData(prompt: string, schema: z.ZodType) {
let attempts = 0;
let currentPrompt = prompt;
while (attempts < 3) {
const aiOutput = await callLLM(currentPrompt);
const result = safeParseAI(aiOutput, schema);
if (result.success) {
return result.data;
}
// Use the auto-generated retry prompt
currentPrompt = result.retryPrompt;
attempts++;
}
throw new Error('Failed to get valid structured data');
}License
MIT
