With the Inkeep context mode, you can leverage all of the capabilities provided by a normal OpenAI API endpoint but “grounded” with context about your product.

This gives you the full flexibility of creating any LLM application: custom copilots, AI workflows, etc., all backed by your own data. Structured data can be particularly powerful in rendering dynamic UI components as part of a conversational experience.

As a basic example, instead of having a support bot that answers with a single content payload, we can instead define a response to be returned as a series of structured steps. The example shown below illustrates how to accomplish that with streamObject and Inkeep’s context model.

index.ts
import { z } from 'zod';

import { streamObject } from 'ai';
import { createOpenAI } from '@ai-sdk/openai'
import dotenv from 'dotenv';
dotenv.config();

if (!process.env.INKEEP_API_KEY) {
  throw new Error('INKEEP_API_KEY is required');
}

const openai = createOpenAI({
  apiKey: process.env.INKEEP_API_KEY,
  baseURL: 'https://api.inkeep.com/v1'
})

const StepSchema = z.object({
  steps: z.array(z.object({
    step: z.string(),
    description: z.string()
  }))
})

async function getResponseFromAI() {

  const result = await streamObject({
    model: openai('inkeep-context-sonnet-3-5'),
    schema: StepSchema,
    messages: [
      {
        role: 'system',
        content:
          'Generate step-by-step instructions to answer the user question about Inkeep only based on the information sources. Break it down to be as granular as possible. Always generate more than one step.'
      },
    ]
  })

    const { partialObjectStream } = result
    for await (const partialObject of partialObjectStream) {
      console.clear();
      console.log(partialObject.steps)
    }

}

getResponseFromAI();