Ai apiRag mode

Using the Inkeep RAG API with the Vercel AI SDK

Using the Vercel AI SDK with Inkeep's RAG API

The Inkeep RAG API provides structured documents from your knowledge base. This example shows how to use the Vercel AI SDK to retrieve these documents. Please ensure you have an API key (don't have one? Get one here).

Schema Definition

inkeep-rag-schema.ts
import { generateObject} from 'ai'
import { z } from 'zod';
import dotenv from 'dotenv';
import { createOpenAI } from '@ai-sdk/openai';
dotenv.config();
 
if (!process.env.INKEEP_API_KEY) {
  throw new Error('INKEEP_API_KEY is required');
}
 
export const provider = createOpenAI({
  baseURL: 'https://api.inkeep.com/v1/',
  apiKey: process.env.INKEEP_API_KEY,
});
 
 
/* Inkeep RAG Document Schema */
 
export const InkeepSourceContentSchema = z.object({
  type: z.union([z.literal('text'), z.string()]),
  media_type: z.union([z.literal('text/plain'), z.string()]).optional(),
  text: z.string().optional(),
  data: z.string().optional(),
}).passthrough();
 
export const InkeepSourceSchema = z.object({
  content: z.array(InkeepSourceContentSchema).optional(),
  type: z.union([z.literal('content'), z.string()]).optional(),
  media_type: z.string().optional(),
  data: z.string().optional(),
}).passthrough();
 
const InkeepRecordTypes = z.enum([
    'documentation',
    'site',
    'discourse_post',
    'github_issue',
    'github_discussion',
    'stackoverflow_question',
    'discord_forum_post',
    'discord_message',
    'custom_question_answer',
]);
 
export const InkeepRAGDocumentSchema = z.object({
  type: z.string(),
  source: InkeepSourceSchema,
  title: z.string().optional(),
  context: z.string().optional(),
  record_type: z.union([z.string(), InkeepRecordTypes]).optional(),
  url: z.string().optional(),
}).passthrough();
 
export const InkeepRAGResponseSchema = z.object({
  content: z.array(InkeepRAGDocumentSchema),
}).passthrough();
 
export type InkeepSourceContent = z.infer<typeof InkeepSourceContentSchema>;
export type InkeepSource = z.infer<typeof InkeepSourceSchema>;
export type InkeepRAGDocument = z.infer<typeof InkeepRAGDocumentSchema>;
export type InkeepRAGResponse = z.infer<typeof InkeepRAGResponseSchema>;

Simple Example

index.ts
import { createOpenAI } from '@ai-sdk/openai';
import { z } from 'zod';
import dotenv from 'dotenv';
import fetch from 'node-fetch';
dotenv.config();
 
if (!process.env.INKEEP_API_KEY) {
  throw new Error('INKEEP_API_KEY is required');
}
 
// Initialize OpenAI client with Inkeep's base URL
const provider = createOpenAI({
  apiKey: process.env.INKEEP_API_KEY,
  baseURL: 'https://api.inkeep.com/v1'
});
 
// Define the RAG document schema
const InkeepSourceContentSchema = z.object({
  type: z.union([z.literal('text'), z.string()]),
  media_type: z.union([z.literal('text/plain'), z.string()]).optional(),
  text: z.string().optional(),
  data: z.string().optional(),
}).passthrough();
 
const InkeepSourceSchema = z.object({
  content: z.array(InkeepSourceContentSchema).optional(),
  type: z.union([z.literal('content'), z.string()]).optional(),
  media_type: z.string().optional(),
  data: z.string().optional(),
}).passthrough();
 
const InkeepRAGDocumentSchema = z.object({
  type: z.string(),
  source: InkeepSourceSchema,
  title: z.string().optional(),
  context: z.string().optional(),
  record_type: z.string().optional(),
  url: z.string().optional(),
}).passthrough();
 
const InkeepRAGResponseSchema = z.object({
  content: z.array(InkeepRAGDocumentSchema),
}).passthrough();
 
const {object} = await generateObject({
    model: provider.languageModel('inkeep-rag'),
    messages: [{ role: 'user', content: 'How do I get started?' }],
    schema: InkeepRAGResponseSchema,
    mode: 'json',
  }
)
// Process the RAG documents
object.content.forEach((doc, index) => {
  console.log(`Document ${index + 1}:`);
  console.log(`Title: ${doc.title || 'N/A'}`);
  console.log(`URL: ${doc.url || 'N/A'}`);
  console.log(`Context: ${doc.context || 'N/A'}`);
  console.log(`Record Type: ${doc.record_type || 'N/A'}`);
  console.log('---');
  });

This example demonstrates how to use the Vercel AI SDK to retrieve structured RAG documents from Inkeep's knowledge base. The response includes an array of documents with context, source information, and URLs.

On this page