SDK-guider
Node.js
Använd det officiella npm-paketet openai med api14 genom att byta baseURL och apiKey, med exempel för chat, streaming, verktyg, Zod och felhantering.
Använd det officiella npm-paketet openai med api14. Inget annat ändras: bara baseURL och apiKey pekar mot api14, och varje modell-id fungerar som model.
Installera
npm install openai
Spara din nyckel i en miljövariabel:
export API14_API_KEY="sk-api14-..."
Konfigurera
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api14.com/api/v1",
apiKey: process.env.API14_API_KEY,
});
Utan alternativ läser SDK:n OPENAI_BASE_URL och OPENAI_API_KEY. Genom att sätta de två variablerna byter du en befintlig app till api14 utan kodändringar:
export OPENAI_BASE_URL="https://api14.com/api/v1"
export OPENAI_API_KEY="sk-api14-..."
const client = new OpenAI(); // läser båda variablerna
Chat
const result = await client.chat.completions.create({
model: "openai/gpt-5-mini",
messages: [{ role: "user", content: "Explain vector databases in two sentences." }],
});
console.log(result.choices[0].message.content);
Streaming
const stream = await client.chat.completions.create({
model: "anthropic/claude-sonnet-4.5",
messages: [{ role: "user", content: "Write a haiku about APIs." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
Se Streaming för händelseformatet.
Verktygsanrop
Skicka tools, kör de anrop som modellen ber om, lägg till resultaten och anropa igen tills den svarar med text:
const tools = [{
type: "function",
function: {
name: "get_weather",
description: "Current weather for a city",
parameters: {
type: "object",
properties: { city: { type: "string" } },
required: ["city"],
},
},
}];
const messages = [{ role: "user", content: "What's the weather in Istanbul?" }];
let res = await client.chat.completions.create({ model: "openai/gpt-5-mini", messages, tools });
while (res.choices[0].finish_reason === "tool_calls") {
const msg = res.choices[0].message;
messages.push(msg);
for (const call of msg.tool_calls) {
const args = JSON.parse(call.function.arguments);
const result = await getWeather(args.city); // din funktion
messages.push({ role: "tool", tool_call_id: call.id, content: JSON.stringify(result) });
}
res = await client.chat.completions.create({ model: "openai/gpt-5-mini", messages, tools });
}
console.log(res.choices[0].message.content);
Se Verktygsanrop.
Strukturerad utdata
Hjälpfunktionen parse omvandlar ett Zod-schema till ett svarsformat av typen json_schema och tolkar svaret (npm install zod):
import { z } from "zod";
import { zodResponseFormat } from "openai/helpers/zod";
const Person = z.object({ name: z.string(), born: z.number().int(), city: z.string() });
const res = await client.chat.completions.parse({
model: "openai/gpt-5-mini",
messages: [{ role: "user", content: "Extract: Ada Lovelace, born 1815 in London." }],
response_format: zodResponseFormat(Person, "person"),
});
console.log(res.choices[0].message.parsed); // { name: "Ada Lovelace", born: 1815, city: "London" }
Bild som indata
Skicka content som en array av delar. Använd en publik URL eller en base64-data-URL:
import { readFileSync } from "node:fs";
const image = readFileSync("photo.png").toString("base64");
const res = await client.chat.completions.create({
model: "google/gemini-2.5-flash",
messages: [{
role: "user",
content: [
{ type: "text", text: "What is in this picture?" },
{ type: "image_url", image_url: { url: `data:image/png;base64,${image}` } },
],
}],
});
Se Vision och filer för PDF-filer, ljud och video.
Embeddings
const result = await client.embeddings.create({
model: "openai/text-embedding-3-small",
input: ["The quick brown fox", "Lorem ipsum"],
});
console.log(result.data.map((d) => d.embedding.length));
Endpoints utan SDK-metod
Videojobb och rerank ingår inte i OpenAI SDK:s yta. Använd klientens generiska hjälpfunktioner post / get, som återanvänder base URL, nyckel och återförsök:
const ranked = await client.post("/rerank", {
body: {
model: "cohere/rerank-v3.5",
query: "What is the capital of France?",
documents: ["Paris is the capital of France.", "Berlin is in Germany."],
top_n: 1,
},
});
console.log(ranked.results);
Fel
Fel kommer i OpenAI-formatet och kastas som OpenAI.APIError. Förgrena på status och code:
try {
await client.chat.completions.create({ model: "openai/gpt-5-mini", messages: [{ role: "user", content: "Hi" }] });
} catch (err) {
if (err instanceof OpenAI.APIError) {
if (err.status === 402) console.error("Balance too low, add funds:", err.code); // insufficient_balance
else if (err.status === 429) console.error("Retry after", err.headers?.["retry-after"], "s:", err.code); // rate_limited
else throw err;
}
}
Se Fel för alla koder.
Tidsgränser och återförsök
SDK:n försöker som standard igen två gånger vid anslutningsfel och svar med 408, 409, 429 och 5xx, med exponentiell backoff som respekterar Retry-After. Standardtidsgränsen är 10 minuter per försök. Ange båda på klienten, eller åsidosätt dem per anrop:
const client = new OpenAI({
baseURL: "https://api14.com/api/v1",
apiKey: process.env.API14_API_KEY,
timeout: 60_000, // ms per försök
maxRetries: 4,
});
await client.chat.completions.create(params, { timeout: 300_000, maxRetries: 0 });
Ett återförsök kan inte åtgärda daily_limit_reached eller insufficient_balance. För långa batchjobb, stoppa vid de koderna i stället för att försöka igen. Se Hastighetsgränser.
Alla funktioner
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api14.com/api/v1",
apiKey: process.env.API14_API_KEY,
});
const result = await client.chat.completions.create({
"model": "openai/gpt-5-mini",
"messages": [
{
"role": "user",
"content": "Explain vector databases in two sentences."
}
]
});
console.log(result.choices[0].message.content);