Vercel AI SDK Integration
The Vercel AI SDK provides a streaming-first interface for AI applications. You can use it with Vexrail by configuring a custom OpenAI provider that points to the Vexrail API.
Installation
npm install ai @ai-sdk/openai
Setup
import { createOpenAI } from "@ai-sdk/openai";
const vexrail = createOpenAI({
baseURL: "https://api.vexrail.com/v1",
apiKey: "unused",
headers: {
"x-publishable-key": process.env.VEXRAIL_PUBLISHABLE_KEY!,
"x-secret-key": process.env.VEXRAIL_SECRET_KEY!,
"x-conversation-id": "your-conversation-id",
},
});
Generate Text
import { generateText } from "ai";
const { text } = await generateText({
model: vexrail("gpt-4o-mini"),
prompt: "What tools can help me with project management?",
});
console.log(text);
Stream Text
import { streamText } from "ai";
const result = streamText({
model: vexrail("gpt-4o-mini"),
prompt: "Recommend a good design tool for teams.",
});
for await (const textPart of result.textStream) {
process.stdout.write(textPart);
}
Using with Next.js
Vexrail works with the Vercel AI SDK's Next.js integration for building chat interfaces:
API Route (app/api/chat/route.ts)
import { createOpenAI } from "@ai-sdk/openai";
import { streamText } from "ai";
const vexrail = createOpenAI({
baseURL: "https://api.vexrail.com/v1",
apiKey: "unused",
headers: {
"x-publishable-key": process.env.VEXRAIL_PUBLISHABLE_KEY!,
"x-secret-key": process.env.VEXRAIL_SECRET_KEY!,
},
});
export async function POST(req: Request) {
const { messages } = await req.json();
const result = streamText({
model: vexrail("gpt-4o-mini"),
messages,
});
return result.toDataStreamResponse();
}
Client Component
"use client";
import { useChat } from "@ai-sdk/react";
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit } = useChat();
return (
<div>
{messages.map((m) => (
<div key={m.id}>
<strong>{m.role}:</strong> {m.content}
</div>
))}
<form onSubmit={handleSubmit}>
<input value={input} onChange={handleInputChange} />
<button type="submit">Send</button>
</form>
</div>
);
}
Conversation ID in Server Routes
To pass the conversation ID dynamically, you can send it from the client and set it in the headers:
export async function POST(req: Request) {
const { messages, conversationId } = await req.json();
const vexrail = createOpenAI({
baseURL: "https://api.vexrail.com/v1",
apiKey: "unused",
headers: {
"x-publishable-key": process.env.VEXRAIL_PUBLISHABLE_KEY!,
"x-secret-key": process.env.VEXRAIL_SECRET_KEY!,
"x-conversation-id": conversationId,
},
});
const result = streamText({
model: vexrail("gpt-4o-mini"),
messages,
});
return result.toDataStreamResponse();
}
Next Steps
- Enable monetization on your project.
- See the API Reference for the full request/response format.