نستخدم ملفات تعريف الارتباط. تُبقيك ملفات تعريف الارتباط وتخزين المتصفح مسجّلًا للدخول وتتذكر تفضيلاتك. وبإذنك نقيس أيضًا كيفية استخدام الموقع. يمكنك في أي وقت. راجع سياسة ملفات تعريف الارتباط.

Vercel AI SDK

أدلة SDK

Vercel AI SDK

استخدم api14 كمزوّد متوافق مع OpenAI في Vercel AI SDK مع generateText وstreamText وgenerateObject وembed، وأمثلة Next.js.

يتحدث Vercel AI SDK مع api14 عبر مزوّده المتوافق مع OpenAI. يصبح كل معرّف نموذج نموذجًا يمكنك تمريره إلى generateText أو streamText أو generateObject أو embed.

التثبيت

npm install ai @ai-sdk/openai-compatible zod
export API14_API_KEY="sk-api14-..."

الإعداد

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 أيضًا: createOpenAI({ baseURL: "https://api14.com/api/v1", apiKey })، ثم استخدم openai.chat("anthropic/claude-sonnet-4.5") لتذهب الطلبات إلى /chat/completions.

توليد النص

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

البث

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

في route handler بتطبيق Next.js أعد الدفق مباشرة:

// 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();
}

الأدوات والمخرجات المنظمة

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"],
});

الأخطاء

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 محاولة 429 و5xx مرتين افتراضيًا (maxRetries في كل استدعاء). راجع الأخطاء.