AI for React Developers

generate-text.tsTypeScriptstream-object.tsTypeScriptstream-text.tsTypeScripttool-calling.tsTypeScript

generate-text.ts

// /app/api/generate-text/route.ts

import { openai } from "@ai-sdk/openai";
import { generateText } from "ai";

export const maxDuration = 30;

export async function POST(req: Request, res: Response) {
  const { messages } = await req.json();

  const response = await generateText({
    model: openai("gpt-4o-mini"),
    system:
      "You are a helpful assistant that provides information about my best projects and experiences.",
    messages,
  });

  return Response.json(response);
}

stream-object.ts

// /app/api/stream-object/route.ts

import { openai } from "@ai-sdk/openai";
import { streamObject } from "ai";
import { z } from "zod";

export const projectSchema = z.object({
  projects: z.array(
    z.object({
      name: z.string().describe("Name of a side project idea."),
      description: z
        .string()
        .describe(
          "Description of the project. It should be a short description of the project."
        ),
      technologies: z
        .array(z.string())
        .describe("Technologies used in the project."),
    })
  ),
});

export const maxDuration = 30;

export async function POST(req: Request) {
  const context = await req.json();

  const result = streamObject({
    model: openai("gpt-4o-mini"),
    schema: projectSchema,
    system: `
    You are a helpful assistant that generates side projects.
    Focus on bringing value and learning for the developer.
    By default you should be able to generate 5 projects, unless the user specifies otherwise.
    `,
    prompt: `Generate projects in this context:` + context,
  });

  return result.toTextStreamResponse();
}

stream-text.ts

// /app/api/stream-text/route.ts

import { openai } from "@ai-sdk/openai";
import { generateText, streamText } from "ai";

export const maxDuration = 30;

export async function POST(req: Request, res: Response) {
  const { messages } = await req.json();

  const response = await streamText({
    model: openai("gpt-4o-mini"),
    system:
      "You are a helpful assistant that provides information about my best projects and experiences.",
    messages,
  });

  return response.toDataStreamResponse();
}

tool-calling.ts

// /app/api/tool-calling/route.ts

import { openai } from "@ai-sdk/openai";
import { streamText } from "ai";

export const maxDuration = 30;

export async function POST(req: Request, res: Response) {
  const { messages } = await req.json();

  const response = await streamText({
    model: openai.responses("gpt-4o-mini"),
    system: `You are a helpful AI assistant that can search the web for real-time information.
When asked questions, use the web_search_preview tool to find relevant and up-to-date information.
Always cite your sources when providing information from web searches.
Keep your responses concise and focused on the user's query.`,
    tools: {
      web_search_preview: openai.tools.webSearchPreview({
        searchContextSize: "medium",
        userLocation: {
          type: "approximate",
          country: "IN",
          region: "Karnataka",
          city: "Bangalore",
        },
      }),
    },
    messages,
  });

  return response.toDataStreamResponse();
}
Updated: 3/29/2025