Vi använder cookies. Cookies och webbläsarlagring håller dig inloggad och kommer ihåg dina preferenser. Med ditt tillstånd mäter vi också hur webbplatsen används. Du kan när som helst. Läs vår cookiepolicy.

Node.js

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" }

Se Strukturerade utdata.

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);