Kod
Vercel AI SDK
@ai-sdk/openai-compatible paketinden createOpenAICompatible ile bir nokeep sağlayıcısı oluştur. Sonra generateText, streamText ve araçlar, AI SDK’nın herhangi bir modelinde olduğu gibi çalışır.
29 Ekim 2026 tarihinde kontrol edildi
Kurulum ve sağlayıcıyı ayarlama
npm install ai @ai-sdk/openai-compatible zod
export NOKEEP_API_KEY="sk-nokeep-test" # your own key once it connectsimport { createOpenAICompatible } from "@ai-sdk/openai-compatible"
export const nokeep = createOpenAICompatible({
name: "nokeep",
apiKey: process.env.NOKEEP_API_KEY,
baseURL: "https://nokeep.ai/v1",
includeUsage: true, // token counts on streamed replies too
})nokeep("<model id>") sana bir model verir. Kimlikler deepseek-v4.1-flash-uncensored ve glm-5.3-flash-uncensored: bunları Modeller sayfasında karşılaştır ya da GET /v1/models üzerinden oku. includeUsage: true, akışlı yanıtlarda da token sayılarını ister; bu olmadan streamText hiçbir sayı bildirmez.
generateText
import { generateText } from "ai"
import { nokeep } from "./nokeep.js"
const { text, usage } = await generateText({
model: nokeep("deepseek-v4.1-flash-uncensored"),
system: "You are a blunt editor.",
prompt: "Cut this opening line to ten words: ...",
})
console.log(text)
console.log(usage.inputTokens, usage.outputTokens)streamText
import { streamText } from "ai"
import { nokeep } from "./nokeep.js"
const result = streamText({
model: nokeep("deepseek-v4.1-flash-uncensored"),
prompt: "Tell me a story in three lines.",
})
for await (const text of result.textStream) process.stdout.write(text)
// With includeUsage on, the counts arrive once the stream ends.
console.log(await result.usage)Bir Next.js rota işleyicisinde, useChat için result.toUIMessageStreamResponse(), düz metin için result.toTextStreamResponse() döndür. Yanıtı isteği iptal ederek durdur (abortSignal); durdurmadan önce yazılanın bedelini ödersin. Bkz. Akış.
Araç çağırma
import { generateText, stepCountIs, tool } from "ai"
import { z } from "zod"
import { nokeep } from "./nokeep.js"
const { text } = await generateText({
model: nokeep("deepseek-v4.1-flash-uncensored"),
tools: {
weather: tool({
description: "Get the weather in a city",
inputSchema: z.object({ city: z.string() }),
execute: async ({ city }) => ({ city, celsius: 18 }),
}),
},
stopWhen: stepCountIs(5), // let the model call the tool, read the result and answer
prompt: "What's the weather in Lisbon?",
})
console.log(text)İki model de araç çağırır. glm-5.3-flash-uncensored kendi seçimini yapar: toolChoice: "required" ya da adlandırılmış bir araç 400 döndürür; bu yüzden bir aracın mutlaka çalışması gerektiğinde DeepSeek’i kullan. Bkz. Araç çağrıları.
Akıl yürütme çabası
import { generateText } from "ai"
import { nokeep } from "./nokeep.js"
const { text, reasoningText } = await generateText({
model: nokeep("deepseek-v4.1-flash-uncensored"),
prompt: "Plan a three-act heist story in five bullet points.",
maxOutputTokens: 4000, // thinking counts toward the limit
providerOptions: { nokeep: { reasoningEffort: "high" } },
})
console.log(reasoningText) // the thinking, apart from the answer
console.log(text)providerOptions altındaki anahtar, sağlayıcıya verdiğin name’dir. reasoning_effort olarak, olduğu gibi gönderilir. DeepSeek V4.1 Flash Uncensored, düşünmesini istemediğin sürece hemen yanıtlar: none, low, high, max değerlerini alır. AI SDK’nın kendi reasoning: "high" seçeneği aynı alanı gönderir. Bkz. Düşünme.
Görseller (DeepSeek)
import { readFile } from "node:fs/promises"
import { generateText } from "ai"
import { nokeep } from "./nokeep.js"
const { text } = await generateText({
model: nokeep("deepseek-v4.1-flash-uncensored"),
messages: [{
role: "user",
content: [
{ type: "text", text: "What is in this picture?" },
{ type: "file", mediaType: "image/jpeg", data: await readFile("photo.jpg") },
],
}],
})
console.log(text)deepseek-v4.1-flash-uncensoredistek başına en fazla 10 görseli okur.glm-5.3-flash-uncensoredyalnızca metin okur ve400 unsupported_inputdöndürür.- AI SDK her görseli base64 olarak isteğin içine koyar.
dataolarak birURLverirsen, önce dosyayı indirir. Bir istek en fazla 12 MB olabilir, bu yüzden büyük fotoğrafları küçült. - Görseller
image/*medya türüne sahipfileparçalarıdır. Eskiimageparçası hâlâ çalışır ama kullanımdan kaldırılmıştır. - PDF ya da ses gibi diğer dosyalar
400 unsupported_inputile reddedilir. Bkz. Görseller.
Dikkat edilecekler
- `reasoning_effort` yalnızca modelin kendi değerlerini kabul eder.
deepseek-v4.1-flash-uncensorednone,low,high,maxalır;glm-5.3-flash-uncensoredlow,highalır. Başka uygulamalarınminimal,mediumvexhighdeğerleri modelin en yakın düzeyinde çalışır (mediumyerinehigh,xhighyerine modelde varsamax); başka her değer400 invalid_reasoning_effortdöndürür. Bkz. Düşünme. - Bir modelin alamadığı alanlar reddedilmez, düşürülür. Çağrı yine yanıtlanır ve
x-nokeep-ignoredyanıt üst bilgisi hangi alanların çıkarıldığını söyler. GLM yalnızcatools,tool_choicevereasoning_effortalanlarını tutar; bu yüzdentemperatureveresponse_formatdüşürülür. Bkz. hangi modelin hangi alanları aldığı. - `n` 1 olmalıdır. Birden çok yanıt için birden çok çağrı yap.
- `@ai-sdk/openai-compatible` kullan, `@ai-sdk/openai` değil. OpenAI sağlayıcısı varsayılan olarak
/v1/responsesadresini çağırır; nokeep’te bu yoktur.
Sorular
nokeep için AI SDK sağlayıcı paketi var mı?
Gerekmiyor. @ai-sdk/openai-compatible, OpenAI uyumlu API’ler için AI SDK’nın kendi paketidir ve bu sayfadaki her özellik onunla çalışır.
streamText kullanım bilgisi bildirir mi?
Evet, sağlayıcı includeUsage: true ile oluşturulduğunda. await result.usage çağrının token sayılarını verir.
Ücret ödemeden deneyebilir miyim?
Evet. sk-nokeep-test anahtarını kullan: her çağrı tek sabit bir satırla yanıtlanır ve ücret almaz, böylece önce uygulamanı bağlayabilirsin. Ücretsiz test anahtarı.