weightsapi.INFERENZAConsole
Navigazione
Streaming verso un browser

Streaming verso un browser

Un server Node same-origin conserva la chiave API e inoltra gli SSE.

Requisiti#

Node 22 o successivo. Imposta WEIGHTSAPI_API_KEY con la tua chiave. L'accesso AI richiede accesso, una ricarica confermata di almeno 100 USD, una chiave API autorizzata e credito disponibile sufficiente per la richiesta. Anche ogni ricarica successiva ha un minimo di 100 USD; saldi residui inferiori restano utilizzabili quando coprono la richiesta. Il credito richiede la verifica della transazione. Controlla lo stato del servizio per la disponibilità dei modelli prima di inviare traffico.

Esegui la ricetta#

// 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");

Prima della produzione#

Limita concorrenza e nuovi tentativi, convalida gli output e gestisci gli errori prima di esporre il flusso di lavoro agli utenti.