ai
Version:
AI SDK by Vercel - The AI Toolkit for TypeScript and JavaScript
73 lines (55 loc) • 3.08 kB
text/mdx
---
title: Object generation failed with OpenAI
description: Troubleshooting NoObjectGeneratedError with finish-reason content-filter caused by incompatible Zod schema types when using OpenAI structured outputs
---
When using `generateObject` or `streamObject` with OpenAI's structured output generation, you may encounter a `NoObjectGeneratedError` with the finish reason `content-filter`. This error occurs when your Zod schema contains incompatible types that OpenAI's structured output feature cannot process.
```typescript
// Problematic code - incompatible schema types
import { generateObject } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';
const result = await generateObject({
model: openai('gpt-4o-2024-08-06'),
schema: z.object({
name: z.string().nullish(), // ❌ .nullish() is not supported
email: z.string().optional(), // ❌ .optional() is not supported
age: z.number().nullable(), // ✅ .nullable() is supported
}),
prompt: 'Generate a user profile',
});
// Error: NoObjectGeneratedError: No object generated.
// Finish reason: content-filter
```
OpenAI's structured output generation uses JSON Schema under the hood and has specific requirements for schema compatibility. The Zod methods `.nullish()` and `.optional()` generate JSON Schema patterns that are incompatible with OpenAI's implementation, causing the model to reject the schema and return a content-filter finish reason.
Replace `.nullish()` and `.optional()` with `.nullable()` in your Zod schemas when using structured output generation with OpenAI models.
```typescript
import { generateObject } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';
// Correct approach - use .nullable()
const result = await generateObject({
model: openai('gpt-4o-2024-08-06'),
schema: z.object({
name: z.string().nullable(), // ✅ Use .nullable() instead of .nullish()
email: z.string().nullable(), // ✅ Use .nullable() instead of .optional()
age: z.number().nullable(),
}),
prompt: 'Generate a user profile',
});
console.log(result.object);
// { name: "John Doe", email: "john@example.com", age: 30 }
// or { name: null, email: null, age: 25 }
```
| Zod Type | Compatible | JSON Schema Behavior |
| ------------- | ---------- | ------------------------------------------------------ |
| `.nullable()` | ✅ Yes | Allows `null` or the specified type |
| `.optional()` | ❌ No | Field can be omitted (not supported) |
| `.nullish()` | ❌ No | Allows `null`, `undefined`, or omitted (not supported) |
## Related Information
- For more details on structured output generation, see [Generating Structured Data](/docs/ai-sdk-core/generating-structured-data)
- For OpenAI-specific structured output configuration, see [OpenAI Provider - Structured Outputs](/providers/ai-sdk-providers/openai#structured-outputs)