İçeriğe geç / Skip to content / Zum Inhalt
Ahmet Balaman LogoAhmet Balaman

Space Bunny Alpha Nasıl Kurulur? Adım Adım Rehber

Ahmet Balaman

8 dk okuma

Vibe CodingSpace Bunny AlphaOpenRouterYapay ZekaAI AgentAPI
Space Bunny Alpha Nasıl Kurulur? Adım Adım Rehber

"Space Bunny nasıl kurulur" sorusunun kısa cevabı: kurulmuyor. Space Bunny Alpha tek başına çalışan bir program değil, uzaktan çağrılan bir model. Bilgisayarınıza pip install edilecek ya da npm i ile indirilecek bir paketi yok. Yapmanız gereken tek şey bir API anahtarı almak ve ilk isteği atmak.

Bu cevap "kolay" demek değil. Çünkü modelin arkasında ciddi birkaç karar var ve bu yazıda o kararların hepsini, kopyalayıp çalıştırabileceğiniz kodla birlikte anlatıyorum.

Önce modelin ne olduğunu netleştirelim, sonra kurulumu adım adım yapalım.

Space Bunny Alpha nedir?

Space Bunny Alpha, OpenRouter üzerinde stealth/space-bunny-alpha kimliğiyle sunulan, ismi açıklanmamış ("anonim") bir büyük dil modeli. Sağlayıcısı Stealth olarak görünüyor ve model ağırlıkları yayımlanmamış. Yani Hugging Face'te bir model kartı, lisans dosyası ya da indirilebilir ağırlık yok. Bu ayrım, "kurulum" sorusunun neden bir indirme işine dönüşmediğini de açıklıyor.

Yazıyı yazarken OpenRouter'ın model API'sinden ve model sayfasından doğruladığım değerler şunlar:

Özellik Değer
Model kimliği stealth/space-bunny-alpha
OpenRouter'a eklenme 23 Eylül 2026
Bağlam penceresi 1.000.000 token
Azami çıktı 524.288 token
Girdi biçimleri metin, görsel, video
Çıktı biçimi metin
Girdi fiyatı (milyon token) 0 $
Çıktı fiyatı (milyon token) 0 $
Akıl yürütme zorunlu, low / medium / high / xhigh / max
Varsayılan akıl yürütme max
Yayımlanmış ağırlık yok
Yayımlanmış bilgi kesim tarihi yok
İçerik filtreleme yok (is_moderated: false)

Üç satır burada ayrı bir yazıyı hak ediyor.

Fiyat sıfır. Hem girdi hem çıktı için liste fiyatı 0 $. Bu, ay sonunda gelen faturanın sıfır olacağı anlamına geliyor. OpenRouter'da ücretsiz modeller için kota ve hız limiti uygulanabilir; bu yüzden "sınırsız" demek doğru olmaz.

Bağlam penceresi 1 milyon token. Bu, tek istekte yaklaşık 750.000 satırlık düz metin ya da yüzlerce dosyalık bir kod tabanı demek. opencode yazısında bahsettiğim "bağlam sınırı" derdi bu modelde çok daha geç ortaya çıkıyor.

Akıl yürütme zorunlu ve varsayılanı max. Model kapatılamayan bir akıl yürütme adımıyla çalışıyor ve varsayılan en yüksek kademede. Bu, gecikmeyi doğrudan etkileyen bir ayar; ne demek olduğunu ilk istekten sonra ayrı bir bölümde açıyorum.

Neden OpenRouter üzerinden?

Ağırlıkları yayımlanmadığı için modeli kendi sunucunuzda çalıştırmanız, ollama ile indirmeniz ya da vllm ile servis etmeniz mümkün değil. Tek dağıtım kanalı bir API. Bu durumda soru şu: bu API'ye nereden bağlanmalı?

İki yol var.

Doğrudan sağlayıcıya bağlanmak. Sağlayıcının kendi adresi varsa en az aracı katmanı demektir. Ama Stealth adlı sağlayıcı için kamuya açık bir uç nokta adresi ve kendi dokümantasyonu yok. Bağlanacağınız tek belgelenmiş adres OpenRouter'ın kendi adresi.

OpenRouter üzerinden geçmek. OpenRouter, tek OpenAI uyumlu adres arkasında yüzlerce modeli toplayan bir aracı katman. Modelin tek resmi dağıtım noktası zaten burası. Yanında pratik bir avantajı da var: curl, Python, TypeScript için tek bir istemci kullanıyorsunuz ve istediğiniz an model kimliğini değiştiriyorsunuz.

Bu yazıdaki bütün kod örnekleri ikinci yolu kullanıyor. opencode yazısında anlattığım "araç bedava, token seçilir" ayrımı burada da geçerli: OpenRouter sizin aracınız, Space Bunny Alpha ise aracınızın içindeki motor.

Kurulum zinciri: API anahtarı alınır, OpenRouter'a bağlanılır, model kimliğiyle istek atılır ve metin cevabı geri gelir

Adım 1: OpenRouter API anahtarı

Model çağırmak için önce anahtar gerekiyor.

  1. openrouter.ai/keys adresine gidin ve hesabınızla giriş yapın.
  2. Create Key düğmesine basın.
  3. Anahtara bir ad verin. İsim sadece sizin için, ama ekranda birden fazla anahtar varsa hangisinin ne olduğunu ayırt etmek istersiniz.
  4. Anahtarı kopyalayın. Bu ekranı kapattıktan sonra anahtarı göremezsiniz. Kopyalamadan kapatmayın.

Anahtarı bir yere yazın ama kodun içine değil. En az yapmanız gereken şey, onu ortam değişkeni olarak tanımlamak:

# macOS / Linux
export OPENROUTER_API_KEY="sk-or-v1-..."

# PowerShell
$env:OPENROUTER_API_KEY = "sk-or-v1-..."

Neden bu kadar ısrar ediyorum: anahtarı bir dosyaya ya da bir depoya yazarsanız, o dosya Git geçmişine girer ve iptal etmekten başka çareniz kalmaz. Anahtarı env değişkeni olarak tutmak, aynı kodu hem geliştirme hem sunucuda çalıştırmanızı da mümkün kılıyor.

Ücretsiz sürümde de hesap açmanız gerekiyor. "Kayıt olmadan bedava kullanılır" diye bir durum yok.

Adım 2: İlk isteği curl ile atın

Kurulumun doğruluğunu en hızlı yoldan anlamanın yolu, kurulumu atlayıp tek bir istek atmak. Bir şeyler çalışmıyorsa en az değişkenle debug etmiş olursunuz.

curl https://openrouter.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "stealth/space-bunny-alpha",
    "messages": [
      { "role": "user", "content": "Bir cümleyle Space Bunny Alpha nedir?" }
    ]
  }'

Beklenen cevap şu biçimde:

{
  "id": "gen-...",
  "choices": [
    { "message": { "role": "assistant", "content": "..." } }
  ],
  "usage": {
    "prompt_tokens": 24,
    "completion_tokens": 61,
    "total_tokens": 85,
    "cost": 0
  }
}

Buradaki usage.cost alanını bir an için inceleyin: 0. Fiyat sıfır olduğu için burada gerçekten sıfır yazıyor.

Model kimliğini yazarken iki ayrı isim yayımlanıyor: gösterim adı olan Space Bunny Alpha ve API'de kullanılacak stealth/space-bunny-alpha. API her zaman ikincisini istiyor. İsimle çağırırsanız 404 alırsınız.

Gövdeye ekleyebileceğiniz iki başlık, çağrının hangi uygulamadan geldiğini OpenRouter panosunda görebilmenizi sağlıyor:

-H "HTTP-Referer: https://benim-uygulamam.com" \
-H "X-Title: Benim Uygulamam"

Bu iki başlık isteğe bağlı. Modelin cevabını değiştirmez.

Adım 3: Python ile

OpenRouter'ın API'si OpenAI ile uyumlu. Bu, en sevdiğim kısayollardan biri: openai paketini zaten projede kullanıyorsanız taban adresi değiştirmekten ibaret kalıyor.

pip install openai
import os

from openai import OpenAI

client = OpenAI(
    api_key=os.environ["OPENROUTER_API_KEY"],
    base_url="https://openrouter.ai/api/v1",
)

response = client.chat.completions.create(
    model="stealth/space-bunny-alpha",
    messages=[
        {"role": "user", "content": "Bir cümleyle Space Bunny Alpha nedir?"}
    ],
)

print(response.choices[0].message.content)
print("maliyet:", response.usage.cost)

İki satır dışında OpenAI'ye göre hiçbir fark yok. Bu yüzden modeli sonradan değiştirmek istediğinizde kodun tamamını değil, yalnızca model= satırını değiştirmeniz yeterli.

Zaman aşımı, modelin max kademesinde düşündüğü için sıfır bırakılmamalı. Varsayılan 10 saniyelik istemci zaman aşımı uzun bir akıl yürütmede yetersiz kalabilir:

client = OpenAI(
    api_key=os.environ["OPENROUTER_API_KEY"],
    base_url="https://openrouter.ai/api/v1",
    timeout=180.0,
    max_retries=2,
)

Adım 4: TypeScript ile

npm install openai
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.OPENROUTER_API_KEY,
  baseURL: "https://openrouter.ai/api/v1",
  timeout: 180_000,
  maxRetries: 2,
});

const completion = await client.chat.completions.create({
  model: "stealth/space-bunny-alpha",
  messages: [{ role: "user", content: "Bir cümleyle Space Bunny Alpha nedir?" }],
});

console.log(completion.choices[0]?.message?.content);
console.log("maliyet:", completion.usage?.cost);

TypeScript tarafında tek dikkat edilecek şey process.env.OPENROUTER_API_KEY ifadesinin tiplenmiş olması. tsconfig.json içinde strict: true kullanıyorsanız Node'un process tipini tanımanız gerekiyor; @types/node paketinin kurulu olduğundan emin olun.

Adım 5: Akıl yürütme gücünü kontrol etmek

Space Bunny Alpha'nın akıl yürütmesi kapatılamaz, ama kademesi değiştirilebilir. Beş basamak var:

reasoning_effort Ne zaman
low Basit biçim dönüştürme, sınıflandırma, kısa cevap
medium Günlük kod soruları, açıklama yazma
high Hata ayıklama, birden çok dosyayı ilgilendiren değişiklik
xhigh Planlama, mimari karar, zor sınınav sorusu
max Varsayılan. Uzun zincirler, karmaşık hata ayıklama
curl https://openrouter.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "stealth/space-bunny-alpha",
    "messages": [{ "role": "user", "content": "20 satırlık hızlı sıralama algoritması yaz." }],
    "reasoning_effort": "low"
  }'

Varsayılan max olduğu için bu ayarı yapmazsanız her istek en pahalı kademede çalışır. Fiyat sıfır olsa da gecikme sıfır değil; low ile max arasındaki fark bir sohbet arayüzünde gözle görülür.

Modelin düşünme adımını cevabın içinden ayrı görmek istiyorsanız reasoning alanını açın:

-d '{
    "model": "stealth/space-bunny-alpha",
    "messages": [{ "role": "user", "content": "18. satırdaki hata neden oluşuyor?" }],
    "reasoning": { "enabled": true, "exclude": false }
  }'

Cevaptaki choices[0].message.reasoning alanına bu adımın metni düşer. Bir ajan yazıyorsanız ve bu adımı kullanıcıya göstermek istemiyorsanız exclude: true yapın.

Adım 6: Görsel ve video girdisi

Model text + image + video girdisi kabul ediyor. Görseli iki biçimde gönderebilirsiniz.

Uzak adres olarak. En kısa yol, herkese açık bir adres vermek:

-d '{
    "model": "stealth/space-bunny-alpha",
    "messages": [{
      "role": "user",
      "content": [
        { "type": "text", "text": "Bu ekran görüntüsündeki hata mesajını açıkla." },
        { "type": "image_url", "image_url": { "url": "https://example.com/hata.png" } }
      ]
    }]
  }'

Veri adresi olarak. Görseli dosyadan okuyup base64 olarak gömüyorsunuz. Büyük dosyalarda uzak adres daha ucuzdur, çünkü base64 veriyi her istekte yeniden gönderirsiniz:

import { readFileSync } from "node:fs";

const image = readFileSync("hata.png").toString("base64");

const completion = await client.chat.completions.create({
  model: "stealth/space-bunny-alpha",
  messages: [
    {
      role: "user",
      content: [
        { type: "text", text: "Bu ekran görüntüsündeki hata mesajını açıkla." },
        {
          type: "image_url",
          image_url: { url: `data:image/png;base64,${image}` },
        },
      ],
    },
  ],
});

Video girdi biçimi de aynı: içerik dizisinde {"type": "video_url", "video_url": {...}} öğesi. Dikkat edilmesi gereken, modelin 1 milyon tokenlık bağlamının metin, görsel ve video arasında paylaşılan bir bütçe olması. Bir video çerçevelerinin token karşılığı bağlamdan yer kaplar.

Görsel ve video tarafının ayrıntısı için 1M bağlam ve multimodal girdi yazısına bakabilirsiniz.

Adım 7: Cevabı JSON'a zorlama

Yapılandırılmış çıktı istiyorsanız response_format kullanın. Model bu parametreyi destekliyor:

-d '{
    "model": "stealth/space-bunny-alpha",
    "messages": [{
      "role": "user",
      "content": "Bu e-postanın konusunu ve aciliyet derecesini JSON olarak ver."
    }],
    "response_format": {
      "type": "json_schema",
      "json_schema": {
        "name": "konu_analizi",
        "strict": true,
        "schema": {
          "type": "object",
          "properties": {
            "konu":   { "type": "string" },
            "onem":   { "type": "integer" },
            "etiket": { "type": "string", "enum": ["satis", "destek", "bilgi", "spam"] }
          },
          "required": ["konu", "onem", "etiket"],
          "additionalProperties": false
        }
      }
    }
  }'

strict: true ve additionalProperties: false yazmazsanız şema gevşek kalıyor ve model alan dışı anahtarlar uydurabiliyor. İki satırı atlamamak, sonradan ayrıştırma hatası yaşamamak için en ucuz önlem.

Yalnızca "geçerli JSON ver" demek yeterliyse {"type": "json_object"} da çalışıyor, ama şema vermediğiniz için alan adları size kalmış oluyor.

Adım 8: Açık kaynak ajanlara bağlamak

Model bir ajanın içine konduğunda, ajanın tanıdığı isimlerden biri olması gerekiyor. Burada OpenRouter'ın OpenAI uyumlu olması işe yarıyor.

opencode. Proje kökündeki opencode.json dosyasına şu bloğu ekleyin:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "openrouter": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "OpenRouter",
      "options": {
        "baseURL": "https://openrouter.ai/api/v1",
        "apiKey": "{env:OPENROUTER_API_KEY}"
      },
      "models": {
        "stealth/space-bunny-alpha": {
          "name": "Space Bunny Alpha",
          "limit": { "context": 1000000, "output": 524288 }
        }
      }
    }
  }
}

limit bloğunu doğru yazmak önemli. Buradaki context ve output değerleri modelin gerçek sınırları; araç bu sayıları kullanarak oturumun ne zaman dolduğunu hesaplıyor. Yanlış yazarsanız ya gereksiz yere erken kesiyor ya da hata veriyor.

npm alanı @ai-sdk/openai-compatible olmalı. Bu, /v1/chat/completions konuşan sağlayıcılar için doğru paket. @ai-sdk/openai yazarsanız /v1/responses bekleniyor hatası alırsınız; bu, opencode yazısında en sık geçen kurulum hatası.

Anahtarı {env:OPENROUTER_API_KEY} yazımıyla verdiğinize dikkat edin. Dosya çoğu zaman depoya giriyor; anahtar orada durmamalı.

Cline, Roo Code ve Continue gibi VS Code eklentileri. Üçü de "OpenAI uyumlu" ya da "Özel sağlayıcı" seçeneği sunuyor. Aynı üç değeri giriyorsunuz:

Alan Değer
Sağlayıcı OpenAI Compatible / OpenRouter
Base URL https://openrouter.ai/api/v1
Model kimliği stealth/space-bunny-alpha

Üç dilde de aynı adresi kullanıyorsunuz; taban adresin sonuna /v1 eklemeyi unutmayın.

Sık karşılaşılan hatalar

401 hatası: kimlik doğrulanamadı. Anahtar yanlış ya da kopyalanırken başına veya sonuna boşluk girdi. Ortam değişkeninin gerçekten dışa aktarıldığını echo $OPENROUTER_API_KEY | wc -c ile kontrol edin.

402 hatası: kredi yetersiz. Ücretsiz model bile hesabın kullanılabilir olmasını gerektirir. OpenRouter'da ücretsiz kredi yoksa bu hata çıkar. Panodan kredi yükleyin.

404 hatası: model bulunamadı. Model kimliğini gösterim adıyla yazmışsınız. Space Bunny Alpha değil, stealth/space-bunny-alpha yazılacak.

429 hatası: hız sınırı. Ücretsiz modellerde kuyruk vardır. max_retries ayarını 2 ya da 3 yapmak, üstel bekleme ile tekrar denemek çoğu zaman çözer.

502 hatası: sağlayıcı hatası. Üretilemeyen istekler faturalandırılmaz, güvenle tekrar deneyebilirsiniz.

Cevap geliyor ama çok geç. Varsayılan reasoning_effort: max her isteği en pahalı kademede çalıştırıyor. Basit işlerde low deneyin; istemci zaman aşımını da 180 saniyeye çıkarın.

Metin geliyor ama JSON değil. response_format kısmını atlamışsınız. Sadece isteme güvenmek, akıl yürütme yapan bir modelde yeterli değil; şemayı API'ye verin.

Görsel hata mesajıyla dönüyor. Model is_moderated: false bildiriyor, yani OpenRouter tarafında bir içerik filtresi yok. Girdi tarafında kendi kontrolünüzü yapmanız gerekiyor. Güvenlik yazısındaki denetim mantığı aynı şekilde burada da geçerli.

Kimler kullanmalı?

Kullanmak için iyi olduğu yerler: maliyetin sıfır olması gereken her yer. Kişisel projeler, deneme kodu, eğitim amaçlı kullanım, sınıf ödevi, prototip. Bir lisansa para yatırmadan önce denemek istediğiniz her şey.

Düşünmeniz gereken yerler: üretim ortamı. Bir modelin 1M bağlamı, max kademesi ve sıfır fiyatı cazip, ama üç belirsizlik var: kim geliştirdiğini bilmiyorsunuz, ağırlıkları göremiyorsunuz ve bilgi kesim tarihi yayımlanmamış. Uzun ömürlü bir ürünün kritik kodunu, bu üçü bilmeden bir modele vermek risktir.

Ayrıca "ücretsiz" kelimesi kalıcı bir söz değil. Bugünün fiyat listesi yarınınki değil; karşılaştırma yazısında hangi kalemlerin ne kadar süreyle sabit kalabileceğini ayrıntılı anlatıyorum.

Kaynaklar

Yorumlar