SDK-guider
Vercel AI SDK
Använd api14 som OpenAI-kompatibel leverantör i Vercel AI SDK med generateText, streamText, generateObject och embed, med installation och exempel.
Vercel AI SDK pratar med api14 genom sin OpenAI-kompatibla leverantör. Varje modell-id blir en modell som du kan skicka till generateText, streamText, generateObject eller embed.
Installera
npm install ai @ai-sdk/openai-compatible zod
export API14_API_KEY="sk-api14-..."
Konfigurera
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
export const api14 = createOpenAICompatible({
name: "api14",
baseURL: "https://api14.com/api/v1",
apiKey: process.env.API14_API_KEY,
includeUsage: true,
});
@ai-sdk/openai fungerar också: createOpenAI({ baseURL: "https://api14.com/api/v1", apiKey }), och använd sedan openai.chat("anthropic/claude-sonnet-4.5") så att anropen går till /chat/completions.
Generera text
import { generateText } from "ai";
const { text, usage } = await generateText({
model: api14("anthropic/claude-sonnet-4.5"),
prompt: "Explain vector databases in two sentences.",
});
console.log(text, usage);
Streaming
import { streamText } from "ai";
const result = streamText({
model: api14("openai/gpt-5-mini"),
prompt: "Write a haiku about APIs.",
});
for await (const delta of result.textStream) process.stdout.write(delta);
I en route handler i Next.js kan du returnera strömmen direkt:
// app/api/chat/route.ts
import { convertToModelMessages, streamText, type UIMessage } from "ai";
export async function POST(req: Request) {
const { messages }: { messages: UIMessage[] } = await req.json();
const result = streamText({ model: api14("openai/gpt-5-mini"), messages: convertToModelMessages(messages) });
return result.toUIMessageStreamResponse();
}
Verktyg och strukturerad utdata
import { generateObject, generateText, tool } from "ai";
import { z } from "zod";
const { text } = await generateText({
model: api14("openai/gpt-5-mini"),
prompt: "What is the weather in Istanbul?",
tools: {
getWeather: tool({
description: "Get the current weather",
inputSchema: z.object({ city: z.string() }),
execute: async ({ city }) => ({ city, tempC: 21 }),
}),
},
});
const { object } = await generateObject({
model: api14("openai/gpt-5-mini"),
schema: z.object({ city: z.string(), country: z.string() }),
prompt: 'Extract the place from: "I live in Lisbon, Portugal."',
});
Embeddings
import { embedMany } from "ai";
const { embeddings } = await embedMany({
model: api14.textEmbeddingModel("openai/text-embedding-3-small"),
values: ["The quick brown fox", "Lorem ipsum"],
});
Fel
import { APICallError } from "ai";
try {
await generateText({ model: api14("openai/gpt-5-mini"), prompt: "Hi" });
} catch (e) {
if (APICallError.isInstance(e) && e.statusCode === 402) console.error("Balance too low, add funds");
else if (APICallError.isInstance(e) && e.statusCode === 429) console.error("Retry after", e.responseHeaders?.["retry-after"]);
else throw e;
}
SDK:n försöker som standard igen två gånger vid 429 och 5xx (maxRetries på varje anrop). Se Fel.