Skip to main content
xAI Grok models provide competitive document understanding with OpenAI-compatible API format.

Installation

npm install @docloai/providers-llm

Basic Setup

import { createVLMProvider } from '@docloai/providers-llm';

const provider = createVLMProvider({
  provider: 'xai',
  model: 'x-ai/grok-4.1',
  apiKey: process.env.OPENROUTER_API_KEY!,
  via: 'openrouter'
});

Native API

const provider = createVLMProvider({
  provider: 'xai',
  model: 'grok-4.1',
  apiKey: process.env.XAI_API_KEY!
});

Available Models

ModelContextReasoningBest For
grok-4.1256kYesComplex extraction
grok-4.1-fast2MNoHigh-volume processing
grok-4256kYesPrevious generation
grok-4-fast2MNoFast processing

OpenRouter Model IDs

When using OpenRouter, prefix models with x-ai/:
// OpenRouter
model: 'x-ai/grok-4.1'

// Native
model: 'grok-4.1'

Configuration Options

createVLMProvider({
  provider: 'xai',
  model: string,           // Model ID
  apiKey: string,          // API key
  via?: 'openrouter',      // Access method
  baseUrl?: string,        // Custom endpoint
  limits?: {
    maxFileSize?: number,      // Max file size (bytes)
    requestTimeout?: number,   // Timeout (ms)
    maxJsonDepth?: number      // Max JSON nesting
  }
})

Capabilities

FeatureSupport
ImagesYes (JPEG, PNG only)
PDFsYes
Structured OutputYes (json_schema)
ReasoningYes (grok-4.1, grok-4)
StreamingNo (with structured output)

Input Formats

Images

xAI only supports JPEG and PNG images:
// Supported: JPEG, PNG only
{
  images: [{
    url: 'https://example.com/image.jpg',
    mimeType: 'image/jpeg'
  }]
}

// Or base64
{
  images: [{
    base64: 'data:image/jpeg;base64,...',
    mimeType: 'image/jpeg'
  }]
}
Image limits: 30MB per file, max 10 images via API.

PDFs

{
  pdfs: [{
    base64: 'data:application/pdf;base64,...'
  }]
}

// Or via URL
{
  pdfs: [{
    url: 'https://example.com/document.pdf'
  }]
}
xAI also supports DOCX, TXT, MD, and CSV files.

Extended Reasoning

Grok models support reasoning for complex extractions:
import { createFlow, extract } from '@docloai/flows';

const flow = createFlow()
  .step('extract', extract({
    provider: createVLMProvider({
      provider: 'xai',
      model: 'x-ai/grok-4.1',
      apiKey: process.env.OPENROUTER_API_KEY!,
      via: 'openrouter'
    }),
    schema: complexSchema,
    reasoning: {
      enabled: true,
      effort: 'high'  // 'low' | 'medium' | 'high'
    }
  }))
  .build();
Reasoning configuration uses the same effort parameter as OpenAI.

Large Context Processing

Grok fast models have 2M token context:
const provider = createVLMProvider({
  provider: 'xai',
  model: 'x-ai/grok-4.1-fast',
  apiKey: process.env.OPENROUTER_API_KEY!,
  via: 'openrouter'
});

// Can process very large documents

Production Setup

import { buildLLMProvider } from '@docloai/providers-llm';

const provider = buildLLMProvider({
  providers: [
    {
      provider: 'xai',
      model: 'x-ai/grok-4.1',
      apiKey: process.env.OPENROUTER_API_KEY!,
      via: 'openrouter'
    },
    {
      provider: 'xai',
      model: 'x-ai/grok-4.1-fast',
      apiKey: process.env.OPENROUTER_API_KEY!,
      via: 'openrouter'
    }
  ],
  maxRetries: 2,
  retryDelay: 1000,
  useExponentialBackoff: true
});

Pricing

Via OpenRouter (approximate):
ModelInput (per 1k)Output (per 1k)
grok-4.1$0.003$0.015
grok-4.1-fast$0.005$0.025
grok-4$0.003$0.015
grok-4-fast$0.005$0.025

Example: Technical Document

import { createFlow, extract } from '@docloai/flows';
import { createVLMProvider } from '@docloai/providers-llm';

const provider = createVLMProvider({
  provider: 'xai',
  model: 'x-ai/grok-4.1',
  apiKey: process.env.OPENROUTER_API_KEY!,
  via: 'openrouter'
});

const techDocSchema = {
  type: 'object',
  properties: {
    title: { type: 'string' },
    version: { type: 'string' },
    components: {
      type: 'array',
      items: {
        type: 'object',
        properties: {
          name: { type: 'string' },
          specifications: {
            type: 'object',
            additionalProperties: { type: 'string' }
          }
        }
      }
    },
    requirements: {
      type: 'array',
      items: { type: 'string' }
    }
  }
};

const flow = createFlow()
  .step('extract', extract({
    provider,
    schema: techDocSchema
  }))
  .build();

const result = await flow.run({
  base64: 'data:application/pdf;base64,...'
});

console.log(result.output.components);

API Compatibility

xAI uses OpenAI-compatible API format, making it easy to switch between providers:
// Same code works for both OpenAI and xAI
const openaiProvider = createVLMProvider({
  provider: 'openai',
  model: 'openai/gpt-4.1',
  apiKey: process.env.OPENROUTER_API_KEY!,
  via: 'openrouter'
});

const xaiProvider = createVLMProvider({
  provider: 'xai',
  model: 'x-ai/grok-4.1',
  apiKey: process.env.OPENROUTER_API_KEY!,
  via: 'openrouter'
});

// Both can be used interchangeably in flows

Next Steps