Integrations
Vercel AI SDK
Last updated May 28, 2026
Build AI UIs with the Vercel AI SDK and Cencori's first-party provider.
Cencori works directly with the Vercel AI SDK. The recommended path is the first-party cencori/vercel provider so you do not have to wire an OpenAI-compatible client manually.
Recommended Path
1. Install Dependencies
npm install ai cencori2. Set Your API Key
# .env.local
CENCORI_API_KEY=csk_...3. Export The Provider
// lib/cencori.ts
import { cencori } from 'cencori/vercel';
export { cencori };4. Stream In Your Route Handler
// app/api/chat/route.ts
import { streamText, convertToModelMessages, type UIMessage } from 'ai';
import { cencori } from '@/lib/cencori';
export async function POST(req: Request) {
const { messages, model = 'gpt-4o' }: { messages: UIMessage[]; model?: string } = await req.json();
const result = streamText({
model: cencori(model),
messages: await convertToModelMessages(messages),
});
return result.toUIMessageStreamResponse();
}5. Use useChat() In The Client
'use client';
import { useChat } from '@ai-sdk/react';
import { useState, type FormEvent } from 'react';
function getMessageText(message: { parts?: Array<{ type: string; text?: string }> }) {
return message.parts
?.map((part) => (part.type === 'text' ? part.text || '' : ''))
.join('') || '';
}
export default function Chat() {
const [input, setInput] = useState('');
const { messages, sendMessage, status } = useChat({ api: '/api/chat' });
function handleSubmit(event: FormEvent<HTMLFormElement>) {
event.preventDefault();
if (!input.trim() || status !== 'ready') return;
const text = input.trim();
setInput('');
void sendMessage({ text });
}
return (
<div>
{messages.map((message) => (
<div key={message.id}>{getMessageText(message)}</div>
))}
<form onSubmit={handleSubmit}>
<input value={input} onChange={(event) => setInput(event.target.value)} />
</form>
</div>
);
}Alternative: OpenAI-Compatible Mode
If you must use @ai-sdk/openai, point it to Cencori's OpenAI-compatible base URL:
import { createOpenAI } from '@ai-sdk/openai';
export const cencori = createOpenAI({
baseURL: 'https://api.cencori.com/v1',
apiKey: process.env.CENCORI_API_KEY,
});Use this mode only when a project already depends on the OpenAI provider abstraction. For new Cencori integrations, prefer cencori/vercel.
Security
Keep CENCORI_API_KEY on the server. Do not expose it through NEXT_PUBLIC_* environment variables or browser-side fetch calls.