Exigences#
Node 22 ou plus récent. Définissez WEIGHTSAPI_API_KEY sur votre propre clé. L'accès à l'IA nécessite une connexion, un rechargement confirmé d'au moins 100 USD, une clé API autorisée et suffisamment de crédit disponible pour la requête. Chaque rechargement ultérieur a également un minimum de 100 USD ; les soldes restants plus petits restent utilisables lorsqu'ils couvrent la requête. Le crédit nécessite une vérification de transaction. Vérifiez le statut du service pour la disponibilité des modèles avant d'envoyer du trafic.
Exécutez la recette#
// 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");
Avant la production#
Limitez le nombre de requêtes simultanées et les nouvelles tentatives, validez les sorties et gérez les erreurs avant d'exposer le flux de travail aux utilisateurs.