Kendi Cihazınızdaki Modeller
Bilgisayarınızda çalışan modelleri dış programlardan API ile kullanın
Onysoft AI Gateway Node programını bilgisayarınıza kurup hesabınıza bağladıysanız, o bilgisayarda çalışan modelleri n8n, Cursor, LangChain, OpenAI kütüphaneleri ya da kendi kodunuz gibi dış programlardan kullanabilirsiniz. Uç ve anahtar diğer modellerle aynıdır; tek fark, model adının başındaki node/ önekidir.
Önce Onysoft AI Gateway Node programını bilgisayarınıza kurup hesabınıza bağlayın ve programda paylaşımı açın. Cihazlarınızı ve modellerinin durumunu panelde GPU Paylaşımım sayfasından izleyebilirsiniz.
/v1/chat/completions
Model adı node/<katalog_kimliği> olduğunda istek sizin cihazınızda çalışır.
/v1/node/models
Cihazlarınızda yüklü modelleri ve o an kullanıma hazır olup olmadıklarını listeler.
Nasıl Çalışır?
Bilgisayarınız dışarıya port açmaz; bağlantıyı her zaman Node programı sunucuya doğru kurar. Bir istek şu yolu izler:
- Programınız isteği her zamanki gibi
https://api.onysoft.com/v1/chat/completionsadresine gönderir. - Sunucu, anahtarın panelden oluşturduğunuz kişisel bir anahtar olduğunu ve istenen modelin çevrimiçi cihazlarınızdan birinde hazır olduğunu kontrol eder.
- İstek, sahibi siz olacak şekilde kuyruğa alınır.
- Bilgisayarınızdaki Node programı, sunucuya kendisinin açtığı ve sürekli yenilediği giden bağlantı üzerinden işi alır ve modeli bilgisayarınızda yerel olarak (
127.0.0.1) çalıştırır. - Sonuç sunucuya geri gönderilir ve programınıza diğer modellerle aynı biçimde yanıt olarak döner.
- Token sayıları ve süre kullanım kaydınıza işlenir; ücret 0'dır.
Programınız (n8n, Cursor, kendi kodunuz) │ ▲ │ │ POST /v1/chat/completions "model": "node/..." │ │ yanıt, diğer modellerle aynı biçimde döner ▼ │ api.onysoft.com anahtar ve cihaz kontrolü → kuyruk ▲ │ │ │ giden bağlantı: Node programı işi alır, sonucu geri gönderir │ │ (bilgisayarınızda port açılmaz) │ ▼ Bilgisayarınız Onysoft AI Gateway Node → yerel model (127.0.0.1)
Model Adı
Katalog kimliğinin başına node/ ekleyin. Aynı model birden fazla cihazınızda hazırsa istek bunlardan birine gider; belirli bir cihazı seçmek için sonuna @<cihaz_no> ekleyin.
| Model adı | Anlamı |
|---|---|
node/qwen3-4b-q4_k_m |
Bu modelin hazır olduğu çevrimiçi cihazlarınızdan herhangi biri. |
node/qwen3-4b-q4_k_m@12 |
Yalnız 12 numaralı cihazınız. Bu cihaz çevrimdışıysa ya da model orada hazır değilse istek başka bir cihaza gitmez, 503 node_unavailable döner. |
Kullanabileceğiniz adları ve cihaz numaralarını GET /v1/node/models yanıtındaki id ve device_model_id alanlarında bulursunuz. node/ sonrasındaki katalog kimliğinde büyük/küçük harf farkı önemli değildir; öneki ise küçük harfle yazın. Anahtarınıza model kısıtı tanımladıysanız, tüm cihaz modellerine izin vermek için listeye node/* ekleyebilirsiniz.
Örnek İstek
Uç, anahtar ve istek gövdesi diğer modellerle aynıdır; yalnız model alanı değişir.
curl https://api.onysoft.com/v1/chat/completions \
-H "Authorization: Bearer sk-ony-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "node/qwen3-4b-q4_k_m",
"messages": [
{"role": "user", "content": "Merhaba! Kısaca kendini tanıtır mısın?"}
],
"max_tokens": 300
}'
Örnek Yanıt
Yanıt diğer modellerle aynı biçimdedir. id isteğin kimliğidir (req_...), model alanında cihaz numarası olmadan node/<katalog_kimliği> yazar ve cost.amount her zaman 0'dır. Model düşünce metni ürettiyse mesajda reasoning ve reasoning_content alanları da bulunur; araç çağırdıysa tool_calls gelir ve finish_reason değeri tool_calls olur.
{
"success": true,
"data": {
"id": "req_5c1e9a7d2b3f4e6a8c0d1e2f",
"object": "chat.completion",
"created": 1758542400,
"model": "node/qwen3-4b-q4_k_m",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Merhaba! Ben Qwen3, bilgisayarınızda çalışan bir dil modeliyim."
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 18,
"completion_tokens": 16,
"total_tokens": 34
},
"cost": {
"amount": 0,
"currency": "USD"
}
}
}
Desteklenen Parametreler
Cihazınıza yalnız aşağıdaki alanlar iletilir:
messages,max_tokens(ya damax_completion_tokens),temperature,top_p,stop,seed,presence_penalty,frequency_penalty,response_format,toolsvetool_choice. Akışta ayrıcastreamvestream_options.include_usagedikkate alınır.max_tokensvermezseniz varsayılan 2048'dir; 8192'den büyük bir değer verirseniz 8192'ye indirilir.- Modeli çalıştırabilecek cihazlarınızdan biri modeli işlemcide (CPU) çalıştırıyorsa ve
max_tokensvermediyseniz varsayılan, akışsız istekte 256,stream:trueisteğinde 512'dir. Açıkça verdiğiniz değere dokunulmaz. nyalnız 1 olabilir; başka bir değer400 invalid_requestdöner.- Listede olmayan alanlar cihaza iletilmez ve yok sayılır.
Akış (Streaming)
stream:true gönderdiğinizde yanıt, diğer modellerde olduğu gibi SSE parçaları hâlinde gelir. Ancak cihaz yanıtı sunucuya tamamını ürettikten sonra gönderir; bu yüzden parçalar, yanıt cihazda tamamlanınca art arda ve yaklaşık 40 karakterlik dilimler hâlinde gelir.
Cihaz yanıtı üretirken bağlantı açık tutulur: sunucu 5 saniyede bir : ping yorum satırı gönderir. SSE istemcileri ve OpenAI kütüphaneleri bu satırları yok sayar. Akışsız istekte süre sınırı daha kısa olduğundan uzun yanıtlar için stream:true kullanmanızı öneririz.
: ping
: ping
data: {"id":"req_5c1e9a7d2b3f4e6a8c0d1e2f","object":"chat.completion.chunk","created":1758542400,"model":"node/qwen3-4b-q4_k_m","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null,"logprobs":null}]}
data: {"id":"req_5c1e9a7d2b3f4e6a8c0d1e2f","object":"chat.completion.chunk","created":1758542400,"model":"node/qwen3-4b-q4_k_m","choices":[{"index":0,"delta":{"content":"Merhaba! Ben Qwen3, bilgisayarınızda çal"},"finish_reason":null,"logprobs":null}]}
data: {"id":"req_5c1e9a7d2b3f4e6a8c0d1e2f","object":"chat.completion.chunk","created":1758542400,"model":"node/qwen3-4b-q4_k_m","choices":[{"index":0,"delta":{"content":"ışan bir dil modeliyim."},"finish_reason":null,"logprobs":null}]}
data: {"id":"req_5c1e9a7d2b3f4e6a8c0d1e2f","object":"chat.completion.chunk","created":1758542400,"model":"node/qwen3-4b-q4_k_m","choices":[{"index":0,"delta":{},"finish_reason":"stop","logprobs":null}]}
data: {"id":"req_5c1e9a7d2b3f4e6a8c0d1e2f","object":"chat.completion.chunk","created":1758542401,"model":"node/qwen3-4b-q4_k_m","choices":[],"usage":{"prompt_tokens":18,"completion_tokens":16,"total_tokens":34},"cost":{"amount":0,"currency":"USD"}}
data: [DONE]
Parça sırası: role, varsa düşünce metni (reasoning / reasoning_content), content, varsa tool_calls ve finish_reason. stream_options.include_usage gönderdiyseniz ardından bir usage parçası gelir. En sonda her zaman usage ve cost içeren parça, ardından [DONE] gönderilir.
Akış başladıktan sonra oluşan hatalar (cihazın isteği süresinde almaması, zaman aşımı, cihaz hatası) HTTP durum kodu olarak değil, akışın içinde bir error parçası olarak gelir ve akış [DONE] ile kapanır. Anahtar, model adı ve istek gövdesiyle ilgili hatalar ise akış başlamadan, normal JSON hata yanıtı olarak döner.
data: {"error":{"code":"node_timeout","message":"..."}}
data: [DONE]
Cihaz Modellerini Listeleme
GET /v1/node/models, hesabınıza bağlı cihazlarda yüklü modelleri döner. Aynı model iki cihazınızda yüklüyse iki satır gelir (node_id farklıdır). Bir modeli o an kullanabilmek için ready alanının true olması gerekir. Bu uç da yalnız kişisel anahtarlarla çalışır.
curl https://api.onysoft.com/v1/node/models \
-H "Authorization: Bearer sk-ony-your-api-key"
{
"success": true,
"object": "list",
"data": [
{
"id": "node/qwen3-4b-q4_k_m",
"object": "model",
"created": 1758369600,
"owned_by": "cihazim",
"name": "Qwen3 4B",
"purpose": "genel",
"context_window": 8192,
"node_id": 12,
"node_name": "MacBook Pro",
"device_model_id": "node/qwen3-4b-q4_k_m@12",
"online": true,
"sharing": true,
"model_status": "hazir",
"ready": true,
"last_seen_at": "2026-09-22T14:05:31+03:00",
"pricing": {
"input_per_million_tokens": 0,
"output_per_million_tokens": 0,
"currency": "USD"
}
}
],
"total": 1
}
| Alan | Anlamı |
|---|---|
id | İstekte model olarak kullanacağınız ad; istek, modelin hazır olduğu cihazlarınızdan birine gider. |
device_model_id | Modeli yalnız bu cihazda çalıştırmak için kullanacağınız ad. |
node_id, node_name | Cihazın numarası ve adı. |
ready | online ve sharing true, model_status da hazir ise true olur. İstek yalnız bu durumda o cihazda çalışır. |
online | Cihaz son 45 saniye içinde sunucuya bağlandıysa true. |
sharing | Node programında paylaşım açıksa true. |
model_status | Modelin cihazdaki durumu: hazir (kullanıma hazır), yukleniyor (yükleniyor), hata (hata oluştu) ya da durdu (durduruldu). |
purpose | Modelin kullanım amacı: genel, kod, hizli, akil_yurutme ya da turkce. |
context_window | Modelin bağlam penceresi (token). Bilinmiyorsa <code>null</code> olur; bu durumda 8192 token varsayılır. |
last_seen_at | Cihazın sunucuya son bağlandığı an (ISO 8601). |
pricing | Kendi cihazınızı kullanmak ücretsiz olduğu için her zaman 0. |
Hata Kodları
Hata yanıtları diğer uçlarla aynı biçimdedir: {"success": false, "error": {"code": "...", "message": "..."}}. Hata mesajları Türkçedir.
| Kod | code |
Açıklama |
|---|---|---|
| 400 | context_length_exceeded | İstek, modelin bağlam uzunluğunu aşıyor. Sunucu tahmini istem uzunluğunu cihaza göndermeden önce kontrol eder; cihaz bağlam aşımı bildirdiğinde de aynı kod döner. |
| 400 | invalid_request | İstek gövdesi hatalı: örneğin n 1'den farklı, messages dizi değil ya da bir parametre yanlış tipte. |
| 403 | node_owner_only | Anahtar, panelden oluşturulmuş kişisel bir anahtar değil (proje ya da iş ortağı anahtarı). Cihaz modellerini yalnız kişisel anahtarlar kullanabilir. |
| 403 | model_not_allowed | Anahtarınızın model kısıtı bu modele izin vermiyor. |
| 404 | model_not_found | node/ sonrasındaki kimlik katalogda yok ya da model adı hatalı yazılmış. |
| 413 | payload_too_large | Mesajlar 256 KB'ı ya da istek gövdesinin tamamı (mesajlar, araçlar ve biçim tanımları) 512 KB'ı aşıyor. |
| 422 | validation_error | Genel istek doğrulaması başarısız: model ya da messages alanı eksik, messages dizi değil ya da boş. Hatalı alanlar error.fields içinde listelenir. |
| 429 | too_many_node_jobs | Cihazlarınızda aynı anda en fazla 4 istek işlenebilir. Retry-After: 5 başlığıyla döner; önceki istekler bitince tekrar deneyin. |
| 502 | node_error | Cihazınız isteği işleyemedi. Node programında modelin durumunu kontrol edip tekrar deneyin. |
| 503 | node_unavailable | Bu model için çevrimiçi ve hazır bir cihazınız yok ya da cihazınız isteği süresi içinde almadı (akışsız istekte 30, akışta 60 saniye). Alınmayan istek iptal edilir. |
| 503 | node_busy | Sunucunun cihaz isteklerini bekletme kapasitesi o an dolu. Retry-After: 5 başlığıyla döner; birkaç saniye sonra tekrar deneyin. |
| 504 | node_timeout | Cihazınız yanıtı süresi içinde üretemedi. Daha kısa bir mesajla, daha düşük max_tokens ile ya da stream:true ile tekrar deneyin. |
Sınırlar
- Yalnız panelde API Anahtarları sayfasından oluşturduğunuz kişisel anahtarlar kullanılabilir; proje ve iş ortağı anahtarları
403 node_owner_onlyalır. - Kullanıcı başına aynı anda en fazla 4 istek (kuyrukta bekleyenler ve cihazda çalışanlar birlikte sayılır).
- Akışsız istekte cihazın isteği alması için 30 saniye, yanıtı üretmesi için 120 saniye vardır; toplam bekleme 160 saniyeyi geçmez.
stream:trueisteğinde bu süreler 60 ve 180 saniyedir (model işlemcide çalışıyorsa 300 saniye). - Bağlam penceresi modelin
context_windowdeğeridir (yazılı değilse 8192 token). İstem uzunluğu yaklaşık 4 karakter = 1 token hesabıyla tahmin edilir. - Mesajlar en fazla 256 KB, istek gövdesinin tamamı en fazla 512 KB olabilir; en fazla 64 araç ve en fazla 4
stopmetni tanımlanabilir.
Gizlilik ve Güvenlik
- İsteğiniz yalnızca kendi cihazlarınıza gider; başka bir kullanıcının cihazına asla yönlendirilmez. Başkaları da bu yoldan sizin cihazınıza istek gönderemez.
- Bilgisayarınız dışarıya port açmaz. Bağlantıyı her zaman Node programı sunucuya doğru kurar; bu yüzden modem, NAT ya da güvenlik duvarı arkasında ek bir ayar gerekmez.
- Her istek, diğer modellerde olduğu gibi token sayıları, süre ve istek/yanıt içeriğiyle birlikte kullanım kayıtlarınıza yazılır.
Ücret
Kendi cihazınızı kullanmak ücretsizdir; bakiyenizden kesinti yapılmaz. İstekler kullanım kaydınızda tutarı 0 olarak görünür, token sayıları ve süre yine kaydedilir.
Sık Sorulan Sorular
Neden ayrı bir uç yok?
n8n, Cursor, LangChain ve OpenAI kütüphaneleri gibi OpenAI uyumlu araçlar sohbet için /v1/chat/completions ucunu bekler. Aynı ucu kullandığımız için bu araçlarda adresi ya da anahtarı değiştirmeniz gerekmez; yalnız model adını değiştirirsiniz. node/ öneki, isteğin katalogdaki bir modele değil sizin cihazınıza gideceğini açıkça belirtir.
Bilgisayarım kapalıysa ne olur?
Çevrimiçi ve modeli hazır bir cihazınız yoksa istek 503 node_unavailable ile döner. Bilgisayarınız az önce kapandıysa sunucu onu 45 saniye boyunca çevrimiçi sayar; bu durumda istek kuyruğa girer ve hata, isteğin alınma süresi dolunca (akışsız istekte 30, akışta 60 saniye) gelir. Akışlı istekte bu hata akışın içinde bir error parçası olarak gelir. İstek başka bir cihaza ya da başka bir modele aktarılmaz.
Proje anahtarımla kullanabilir miyim?
Hayır. Cihaz modelleri yalnız panelde API Anahtarları sayfasından oluşturduğunuz kişisel anahtarlarla çalışır; proje ve iş ortağı anahtarları 403 node_owner_only alır.
Başkası benim cihazımı bu yoldan kullanabilir mi?
Hayır. İstek, onu gönderen anahtarın sahibinin cihazlarına gider. Sizin anahtarınızla gönderilen istek yalnız sizin cihazlarınızda, başkasının anahtarıyla gönderilen istek yalnız onun cihazlarında çalışır.