Generate Object with a Reasoning Model
Reasoning models, like DeepSeek's R1, are gaining popularity due to their ability to understand and generate better responses to complex queries than non-reasoning models. You may want to use these models to generate structured data. However, most (like R1 and OpenAI's o1) do not support tool-calling or structured outputs.
One solution is to pass the output from a reasoning model through a smaller model that can output structured data (like gpt-4o-mini). These lightweight models can efficiently extract the structured data while adding very little overhead in terms of speed and cost.
import { deepseek } from '@ai-sdk/deepseek';import { openai } from '@ai-sdk/openai';import { generateObject, generateText } from 'ai';import 'dotenv/config';import { z } from 'zod';
async function main() { const { text: rawOutput } = await generateText({ model: deepseek('deepseek-reasoner'), prompt: 'Predict the top 3 largest city by 2050. For each, return the name, the country, the reason why it will on the list, and the estimated population in millions.', });
const { object } = await generateObject({ model: openai('gpt-4o-mini'), prompt: 'Extract the desired information from this text: \n' + rawOutput, schema: z.object({ name: z.string().describe('the name of the city'), country: z.string().describe('the name of the country'), reason: z .string() .describe( 'the reason why the city will be one of the largest cities by 2050', ), estimatedPopulation: z.number(), }), output: 'array', });
console.log(object);}
main().catch(console.error);