Lompat ke konten
Semua dokumentasi

Kode

Vercel AI SDK

Buat provider nokeep dengan createOpenAICompatible dari @ai-sdk/openai-compatible. Setelah itu generateText, streamText dan tool bekerja seperti model AI SDK lainnya.

Diperiksa 29 Oktober 2026

Pasang dan atur provider

Shell
npm install ai @ai-sdk/openai-compatible zod
export NOKEEP_API_KEY="sk-nokeep-test"  # your own key once it connects
nokeep.js
import { 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>") memberi kamu sebuah model. Id-nya deepseek-v4.1-flash-uncensored dan glm-5.3-flash-uncensored: bandingkan di Model, atau baca dari GET /v1/models. includeUsage: true meminta jumlah token pada balasan yang di-stream; tanpa itu, streamText tidak melaporkan apa pun.

generateText

JavaScript
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

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

Di route handler Next.js, kembalikan result.toUIMessageStreamResponse() untuk useChat, atau result.toTextStreamResponse() untuk teks biasa. Hentikan balasan dengan membatalkan permintaan (abortSignal); kamu membayar untuk apa yang sudah ditulis sebelum berhenti. Lihat Streaming.

Pemanggilan tool

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

Keduanya bisa memanggil tool. glm-5.3-flash-uncensored memilih sendiri: toolChoice: "required" atau nama tool tertentu mendapat 400, jadi pakai DeepSeek saat sebuah tool harus dijalankan. Lihat Pemanggilan tool.

Tingkat penalaran

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

Kunci di bawah providerOptions adalah name yang kamu beri ke provider. Nilainya dikirim sebagai reasoning_effort, tanpa diubah. DeepSeek V4.1 Flash Uncensored langsung menjawab kecuali kamu memintanya berpikir: ia menerima none, low, high, max. Opsi reasoning: "high" milik AI SDK mengirim field yang sama. Lihat Thinking.

Gambar (DeepSeek)

JavaScript
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-uncensored membaca hingga 10 gambar per permintaan. glm-5.3-flash-uncensored hanya membaca teks dan menjawab 400 unsupported_input.
  • AI SDK mengirim setiap gambar di dalam permintaan, sebagai base64. Beri URL sebagai data dan ia akan mengunduh file dulu. Satu permintaan bisa sampai 12 MB, jadi perkecil foto yang besar.
  • Gambar adalah bagian file dengan media type image/*. Bagian image yang lama masih berfungsi tetapi sudah usang.
  • File lain, seperti PDF atau audio, ditolak dengan 400 unsupported_input. Lihat Gambar.

Hal yang perlu diwaspadai

  • `reasoning_effort` hanya menerima nilai milik model. deepseek-v4.1-flash-uncensored menerima none, low, high, max; glm-5.3-flash-uncensored menerima low, high. Nilai minimal, medium dan xhigh dari aplikasi lain dijalankan di tingkat terdekat milik model (medium sebagai high, xhigh sebagai max jika model memilikinya); nilai lain mendapat 400 invalid_reasoning_effort. Lihat Thinking.
  • Field yang tidak bisa diterima model dibuang, bukan ditolak. Panggilan tetap dijawab, dan header x-nokeep-ignored pada respons menyebut apa saja yang dibuang. GLM hanya menerima tools, tool_choice dan reasoning_effort, jadi temperature dan response_format miliknya dibuang. Lihat field apa yang diterima tiap model.
  • `n` harus 1. Untuk beberapa balasan, buat beberapa panggilan.
  • Pakai `@ai-sdk/openai-compatible`, bukan `@ai-sdk/openai`. Provider OpenAI memanggil /v1/responses secara default, yang tidak dimiliki nokeep.

Pertanyaan

Apakah ada paket provider nokeep untuk AI SDK?

Tidak perlu. @ai-sdk/openai-compatible adalah paket resmi AI SDK untuk API yang kompatibel dengan OpenAI, dan setiap fitur di halaman ini berjalan lewat paket itu.

Apakah streamText melaporkan usage?

Ya, jika provider dibuat dengan includeUsage: true. await result.usage lalu memberi jumlah token untuk panggilan itu.

Bisakah mencobanya tanpa membayar?

Bisa. Pakai kunci sk-nokeep-test: setiap panggilan menjawab dengan satu baris tetap dan tidak memakan biaya, jadi kamu bisa menyambungkan aplikasimu dulu. Kunci uji gratis.