Gereksinimler#
Node 22 veya daha yeni. WEIGHTSAPI_API_KEY'i kendi anahtarınıza ayarlayın. AI erişimi oturum açmayı, en az 100 USD tutarında bir onaylanmış yüklemeyi, yetkili bir API anahtarını ve istek için yeterli kullanılabilir krediyi gerektirir. Sonraki her yükleme de minimum 100 USD'dir; daha küçük kalan bakiyeler isteği karşıladığında kullanılabilir kalır. Kredi işlem doğrulaması gerektirir. Trafik göndermeden önce model kullanılabilirliği için hizmet durumunu kontrol edin.
Tarifi çalıştırın#
// Node 22+. Save as server.mjs, set WEIGHTSAPI_API_KEY, then node server.mjs.
import http from "node:http";
const base = process.env.WEIGHTSAPI_BASE_URL || "https://weightsapi.com/v1";
http.createServer(async (req, res) => {
if (req.url !== "/stream") {
res.setHeader("Content-Type", "text/html");
return res.end('<button id="run">Run</button><pre id="out"></pre><script>run.onclick=async()=>{out.textContent="";const r=await fetch("/stream");const reader=r.body.getReader();const decoder=new TextDecoder();for(;;){const {value,done}=await reader.read();if(done)break;out.textContent+=decoder.decode(value,{stream:true});}}<\/script>');
}
try {
const upstream = await fetch(base+"/chat/completions", {method:"POST",
headers:{"Content-Type":"application/json",Authorization:"Bearer "+process.env.WEIGHTSAPI_API_KEY},
body:JSON.stringify({model:"Qwen/Qwen3-32B",messages:[{role:"user",content:"Explain SSE."}],stream:true,max_tokens:256})});
res.writeHead(upstream.status, {"Content-Type":upstream.headers.get("content-type")||"text/plain","Cache-Control":"no-store"});
for await (const chunk of upstream.body) res.write(chunk);
res.end();
} catch {res.writeHead(502);res.end("Upstream unavailable");}
}).listen(8080,"127.0.0.1");
Üretimden önce#
Kullanıcılara sunmadan önce eşzamanlılığı ve yeniden denemeleri sınırlayın, çıktıları doğrulayın ve hataları işleyin.