# Node.js: açık ağırlıklı modellere yönlendirilmiş openai paketi

> Resmi openai paketiyle Node.js üzerinden açık ağırlıklı LLM'leri çağırın: tek çağrı, toplu iş, akış ve kalan kredi. Kopyala-yapıştır örnekler.

- URL: https://llmwithcrypto.com/tr/docs/node/
- Son güncelleme: 2026-10-23
- Yayıncı: LLMwithCrypto (https://llmwithcrypto.com)

Resmi `openai` npm paketi değiştirilmeden çalışır: ona bizim `baseURL` bilgimizi ve anahtarınızı verin. Aşağıdaki örnekler, `fetch` ve üst düzey `await` desteği yerleşik olan Node.js 18 veya daha yenisine yönelik ES modülleridir.

**Kısa yanıt — LLMwithCrypto nasıl Node.js'ten çağırılır?**

Resmi paketi `npm install openai` ile kurun, ardından istemciyi `baseURL: "https://llmwithcrypto.com/api/v1"` ve `apiKey: process.env.LLMWITHCRYPTO_API_KEY` ile oluşturun. **LLMwithCrypto**, 23 Ekim 2026 itibarıyla belgelendiği şekilde, 12 açık ağırlıklı model için `client.chat.completions.create()` ile OpenAI formatında yanıt verir; modelin desteklediği yerlerde akış ve tool çağrılarıyla birlikte.

## Neye ihtiyacınız var

| Özellik | Değer |
| --- | --- |
| Node.js | 18 veya daha yenisi, ES modülleri (`.mjs` veya `"type": "module"`) |
| Paket | `openai` (resmi) |
| Base URL | `https://llmwithcrypto.com/api/v1` |
| Anahtar | `LLMWITHCRYPTO_API_KEY` ortam değişkeninde, asla kodda veya tarayıcıda |

## Tek bir isteği nasıl gönderirim?

İstemciyi başlangıçta bir kez oluşturun ve her yerde yeniden kullanın. Anahtarı sunucuda tutun: tarayıcı kodunda gönderilen bir anahtarı sayfayı açan herkes okuyabilir, bu nedenle API'yi arka ucunuzdan çağırın ve tarayıcıya yalnızca yanıtı gönderin.

*one-call.mjs*

```javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://llmwithcrypto.com/api/v1',
  apiKey: process.env.LLMWITHCRYPTO_API_KEY,
});

const resp = await client.chat.completions.create({
  model: 'deepseek-v4-pro',
  messages: [
    { role: 'system', content: 'Answer in two sentences.' },
    { role: 'user', content: 'What is a context window?' },
  ],
  max_tokens: 200,
});
console.log(resp.choices[0].message.content);
console.log(resp.usage.prompt_tokens, 'in,', resp.usage.completion_tokens, 'out');

```

## Rate limit'e takılmadan bir toplu işi nasıl çalıştırırım?

Aynı anda sabit sayıda istek çalıştırın. Aşağıdaki küçük `mapLimit` yardımcısı dört isteği aynı anda uçuşta tutar ve sonuçları sırayla döndürür; ek paket gerekmez. Her hesabın dashboard'da gösterilen bir dakika başına istek ve token limiti vardır; destek ekibine sorun, yükseltilebilir.

*batch.mjs*

```javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://llmwithcrypto.com/api/v1',
  apiKey: process.env.LLMWITHCRYPTO_API_KEY,
});

async function translate(text) {
  const resp = await client.chat.completions.create({
    model: 'qwen3-235b-a22b-instruct-2507',
    messages: [
      { role: 'system', content: 'Translate into Spanish. Reply with the translation only.' },
      { role: 'user', content: text },
    ],
    max_tokens: 200,
  });
  return resp.choices[0].message.content;
}

// at most 4 requests in flight
async function mapLimit(items, limit, fn) {
  const out = new Array(items.length);
  let next = 0;
  async function worker() {
    while (next < items.length) {
      const i = next++;
      out[i] = await fn(items[i]);
    }
  }
  await Promise.all(Array.from({ length: limit }, worker));
  return out;
}

const lines = ['Your order has shipped.', 'Your payment was received.', 'Your key was revoked.'];
console.log(await mapLimit(lines, 4, translate));

```

## Yanıtı nasıl akış (stream) olarak alırım?

`stream: true` gönderin ve sonuçta `for await` kullanın. Her parça `choices[0].delta.content` içinde bir metin parçası taşır; `stream_options: { include_usage: true }` ile son parçada token sayıları bulunur.

*stream.mjs*

```javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://llmwithcrypto.com/api/v1',
  apiKey: process.env.LLMWITHCRYPTO_API_KEY,
});

const stream = await client.chat.completions.create({
  model: 'deepseek-v4.1-flash',
  messages: [{ role: 'user', content: 'Write a haiku about latency.' }],
  stream: true,
  stream_options: { include_usage: true },
  max_tokens: 120,
});
for await (const chunk of stream) {
  const text = chunk.choices[0]?.delta?.content;
  if (text) process.stdout.write(text);
  if (chunk.usage) console.log(`\n${chunk.usage.prompt_tokens} in, ${chunk.usage.completion_tokens} out`);
}

```

## Kalan krediyi nasıl okurum?

credits endpoint'i OpenAI SDK'nın bir parçası değildir, bu yüzden onu `fetch` ile çağırın. Ücretsizdir; büyük bir toplu işten önce kredinin yeteceğinden emin olmak için çağırın.

*credits.mjs*

```javascript
const res = await fetch('https://llmwithcrypto.com/api/v1/credits', {
  headers: { Authorization: `Bearer ${process.env.LLMWITHCRYPTO_API_KEY}` },
});
const credits = await res.json();
console.log('credit left:', credits.balance_usd, 'USD');

```

## Hataları nasıl ele alırım?

SDK her HTTP hatası için bir `OpenAI.APIError` fırlatır; durum kodu `err.status` içinde, yanıt gövdesinin `code` değeri `err.code` içinde bulunur. Mesajı değil, kodu test edin: `insufficient_balance` bakiye yüklemeniz gerektiği, `model_not_found` yanlış bir id olduğu, `rate_limit_exceeded` bekleyip yeniden denemeniz gerektiği anlamına gelir.

SDK bazı hataları zaten bir bekleme ile iki kez yeniden dener (`maxRetries`). Uzun toplu işler için bu varsayılanı koruyun, eşzamanlılığı yukarıdaki gibi sınırlayın ve vazgeçtiğiniz başarısızlıkları günlüğe kaydedin. [errors page](https://llmwithcrypto.com/tr/docs/errors/) her durum kodunu ve hangilerinin yeniden denemeye değer olduğunu listeler. Başarısız çağrılar hiçbir şeye mal olmaz: Token başına bakiyenizden ödersiniz: girdi ve çıktı token'ları modelin kendi tokenizer'ı ile sayılır ve o modelin 1M token başına fiyatından ücretlendirilir. Hata ile sonuçlanan bir çağrı ücretsizdir.

## Mevcut bir OpenAI uygulamasını nasıl taşırım?

İstemci seçeneklerini, `baseURL` ve `apiKey` değerlerini değiştirin ve her `gpt-…` model adını [models page](https://llmwithcrypto.com/tr/models/) içindeki bir id ile değiştirin. Prompt'lar, akış kodu ve `choices` ile `usage` ayrıştırması olduğu gibi kalır. Trafiği geçirmeden önce testlerinizi yeni model üzerinde çalıştırın: tool calling ve JSON çıktısı her modelin desteklediğine göre çalışır.

## Node.js: sık sorulan sorular

### API'yi tarayıcıdan çağırabilir miyim?

Teknik olarak evet, ama anahtarınızı asla sayfada bulundurmayın. Sunucunuzdan veya anahtarı barındıran bir serverless fonksiyondan çağırın.

### Vercel AI SDK çalışır mı?

OpenAI uyumlu bir base URL kabul eden her kütüphane çalışır. API, OpenAI chat completions formatını konuşur: OpenAI SDK'sını, LangChain'i veya OpenAI ile uyumlu herhangi bir aracı, anahtarınızla birlikte temel URL'mize yönlendirin ve model adını değiştirin.

### Kredi tükendiğinde ne olur?

Çağrılar `402 insufficient_balance` döndürür ve hiçbir şeye mal olmaz. [errors page](https://llmwithcrypto.com/tr/docs/errors/) nasıl tepki vereceğinizi gösterir.

---

LLMwithCrypto: LLMwithCrypto, açık ağırlıklı modeller için OpenAI uyumlu bir LLM API'sidir — DeepSeek V4 Pro, DeepSeek V4.1 Flash, DeepSeek R1, Qwen3.5 397B A17B, Qwen3 235B A22B Instruct, gpt-oss-120b, gpt-oss-20b, GLM-4.7, Llama 3.3 70B Instruct, Gemma 4 31B, Mistral Large 3, Mistral Small 4 — ön ödemeli kripto bakiyesinden token başına ödenir ve genel barındırıcıların medyan fiyatının %5 altındadır. KYC yok: kimlik yok, selfie yok, belge yok. İstemler ve çıktılar saklanmaz.
