Generate Object with a Reasoning Model

Learn how to generate structured data with a reasoning model using the AI TOOLKIT and Node

2 min readnodestructured datareasoningView source

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 { generateObject, generateText } from 'ai-toolkit'; import 'dotenv/config'; import { z } from 'zod'; async function main() { const { text: rawOutput } = await generateText({ model: 'deepseek/deepseek-r1', 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);

ts
  1. 1import { generateObject, generateText } from 'ai-toolkit';
  2. 2import 'dotenv/config';
  3. 3import { z } from 'zod';
  4. 4async function main() {
  5. 5const { text: rawOutput } = await generateText({
  6. 6model: 'deepseek/deepseek-r1',
  7. 7prompt:
  8. 8'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.',
  9. 9});
  10. 10const { object } = await generateObject({
  11. 11model: 'openai/gpt-4o-mini',
  12. 12prompt: 'Extract the desired information from this text: \n' + rawOutput,
  13. 13schema: z.object({
  14. 14name: z.string().describe('the name of the city'),
  15. 15country: z.string().describe('the name of the country'),
  16. 16reason: z
  17. 17.string()
  18. 18.describe(
  19. 19'the reason why the city will be one of the largest cities by 2050',
  20. 20),
  21. 21estimatedPopulation: z.number(),
  22. 22}),
  23. 23output: 'array',
  24. 24});
  25. 25console.log(object);
  26. 26}
  27. 27main().catch(console.error);

Run it locally

$ npm install ai