{"id":76,"date":"2026-06-15T22:10:00","date_gmt":"2026-06-15T22:10:00","guid":{"rendered":"https:\/\/rpi.temporiti.net\/wordpress\/?p=76"},"modified":"2026-06-16T05:31:49","modified_gmt":"2026-06-16T03:31:49","slug":"sambanova-fallback","status":"publish","type":"post","link":"https:\/\/rpi.temporiti.net\/wordpress\/?p=76","title":{"rendered":"SambaNova come fallback automatico quando Groq \u00e8 rate-limited"},"content":{"rendered":"<p>SambaNova Cloud \u00e8 il secondo provider OpenAI-compatibile che tengo sempre pronto, quello su cui ripiego quando Groq mi sbatte contro i rate limit. Sui modelli open-weights che girano su entrambi (Llama 3.x, DeepSeek, Qwen) le risposte si equivalgono, e quanto a velocit\u00e0 SambaNova non sfigura per niente.<\/p>\n<p>Per quello che ci faccio io, cio\u00e8 smanettare da solo in homelab, il free tier basta e avanza. Non \u00e8 il mio provider principale, ma di sessioni me ne ha salvate parecchie: quelle volte in cui Groq ti mette in coda sul tetto delle 30 richieste al minuto proprio mentre sei nel pieno del lavoro. Tutto quello che gli do in pasto \u00e8 open weights: Llama 3.3 70B con la Llama 3 Community License di Meta, DeepSeek sotto MIT, Qwen 3 sotto Apache 2.0 di Alibaba.<\/p>\n<h2>Configurazione di opencode<\/h2>\n<p>La chiave me la genero su <code>cloud.sambanova.ai<\/code>, basta una mail e non costa nulla, poi la parcheggio in <code>~\/.config\/claude-credentials\/credentials.env<\/code> sotto la voce <code>SAMBANOVA_API_KEY<\/code>. A quel punto registro il provider dentro <code>~\/.config\/opencode\/opencode.json<\/code>:<\/p>\n<pre><code class=\"language-json\">\n{\n  \"provider\": {\n    \"sambanova\": {\n      \"npm\": \"@ai-sdk\/openai-compatible\",\n      \"options\": {\n        \"apiKey\": \"{env:SAMBANOVA_API_KEY}\",\n        \"baseURL\": \"https:\/\/api.sambanova.ai\/v1\"\n      },\n      \"models\": {\n        \"Meta-Llama-3.3-70B-Instruct\": { \"name\": \"Llama 3.3 70B (SambaNova)\" }\n      }\n    }\n  }\n}\n<\/code><\/pre>\n<p>Per far partire la TUI gi\u00e0 agganciata al modello giusto:<\/p>\n<pre><code class=\"language-bash\">\nopencode . --model sambanova\/Meta-Llama-3.3-70B-Instruct\n<\/code><\/pre>\n<p>Per il ripiego automatico da terminale mi sono scritto quattro righe di bash: prima tentano Groq, e se si beccano un HTTP 429 rilanciano la stessa identica richiesta JSON verso SambaNova. Niente di sofisticato, davvero: un <code>curl<\/code> con <code>--fail<\/code>, un controllo sull&#8217;exit code e, se la prima chiamata va a vuoto, una seconda sull&#8217;altro endpoint. A cambiare sono soltanto <code>baseURL<\/code> e <code>model<\/code>.<\/p>\n<h2>Un esempio di sessione reale<\/h2>\n<p>Ieri sera, saranno state le 22:30, stavo mettendo le mani a un piccolo script per tirare fuori qualche statistica da una pila di file CSV di log. Per limare il parser avevo gi\u00e0 sparato a Groq una ventina di richieste nel giro di pochi minuti, e puntuale \u00e8 arrivata la coda sul rate limit, HTTP 429. Ho aperto opencode su SambaNova e gli ho chiesto:<\/p>\n<blockquote>\n<p>leggi parser.py. Identifica le aree dove la complessit\u00e0 \u00e8 inutile. Suggerisci tre rifattorizzazioni con stima del payoff (basso\/medio\/alto). Tieni l&#8217;interfaccia CLI invariata.<\/p>\n<\/blockquote>\n<p>Risposta in una manciata di secondi, quattro scarsi. Tre indicazioni nette: rimpiazzare una catena di <code>if\/elif<\/code> con un dizionario di funzioni (payoff medio), tirare fuori la lettura del file dal ciclo principale per alleggerire l&#8217;IO (payoff alto) e fondere due funzioni di normalizzazione che in pratica facevano lo stesso lavoro (payoff basso). Ho applicato i primi due, i test di regressione sono passati e su un file da 200 MB il tempo di esecuzione \u00e8 crollato del 40%.<\/p>\n<h2>Cosa fa bene<\/h2>\n<p>Il pregio numero uno \u00e8 esserci quando gli altri sono al completo. La latenza sui modelli open-weights condivisi regge benissimo il confronto, e siccome SambaNova parla lo stesso dialetto OpenAI-compatibile di tutti gli altri mi basta cambiare il <code>baseURL<\/code> per riciclare pari pari il codice del client. Su Llama 3.3 70B, in particolare, la qualit\u00e0 delle risposte mi ha convinto.<\/p>\n<h2>Cosa fa meno bene<\/h2>\n<p>I nei ci sono, inutile nasconderli. La policy del free tier \u00e8 documentata in modo pi\u00f9 nebuloso che altrove, e il catalogo dei modelli serviti \u00e8 pi\u00f9 magro di quello di Groq. L&#8217;inferenza va bene, ma sui modelli pi\u00f9 piccoli non tiene il passo delle LPU di Groq. Insomma, \u00e8 un fallback solido, non un titolare.<\/p>\n<h2>Privacy e termini del provider<\/h2>\n<p>Qui qualche zona grigia c&#8217;\u00e8, ed \u00e8 giusto metterla in chiaro. Sul free tier la policy di training non \u00e8 scritta nero su bianco: il marketing enterprise sbandiera il &#8220;no training&#8221;, ma per il piano gratuito una garanzia altrettanto netta non l&#8217;ho trovata. Qualche log tecnico viene comunque raccolto via web server, le solite cose, token, latenza, IP. Nei termini di servizio si legge che i &#8220;Customer Data&#8221; non finiscono ad addestrare nulla, a differenza dei &#8220;Service Usage Data&#8221;: dove passi esattamente il confine tra le due categorie, per\u00f2, te lo devi leggere caso per caso.<\/p>\n<p>I dati stanno negli Stati Uniti. Per chi si trova nello spazio economico europeo ci sono le Standard Contractual Clauses a fare da paracadute. E comunque i modelli sono open-weights, Llama, DeepSeek, Qwen: se mi serve me li scarico e me li rieseguo per conto mio, fuori dal provider.<\/p>\n<p>La regola che mi sono dato \u00e8 semplice: lo considero un provider statunitense con un free tier dalle regole non del tutto chiare. Per i lavori tecnici di tutti i giorni va benissimo come ripiego; per i contenuti sensibili, invece, non ci penso nemmeno.<\/p>\n<h2>Cosa non gli mando<\/h2>\n<p>Nomi veri di clienti, hostname interni, IP privati, pezzi di configurazione con dentro credenziali: niente di tutto questo prende la strada di SambaNova. Sui log di prova ci infilo dei placeholder prima di premere invio. Se una cosa ha bisogno di giurisdizione europea la giro a Mistral La Plateforme, che di default tiene i dati in UE ed \u00e8 sotto CNIL. E quando il contenuto \u00e8 davvero delicato taglio corto e resto in casa, su <code>qwen2.5-coder:14b<\/code> con Ollama in locale: stessa famiglia Qwen, ma gira sulla mia macchina e finisce l\u00ec.<\/p>\n<h2>In pratica<\/h2>\n<p>Tirando le somme, nel mio armamentario SambaNova fa la rete di sicurezza per quando Groq mi mette in panchina. Nel quotidiano resto su Groq diretto: Llama 3.3 70B Versatile per gli output lunghi, Llama 3.1 8B Instant per le cose veloci, Qwen3 32B quando voglio il ragionamento sul codice passo passo. Per i ragionamenti lunghi spalmati su tanti file salgo su Qwen3 235B via Cerebras, e per quello che deve restare in Europa c&#8217;\u00e8 Mistral 7B su La Plateforme. SambaNova, in mezzo a tutto questo, \u00e8 la ridondanza che non mi costa niente, e gi\u00e0 solo per questo vale la pena tenerlo configurato.<\/p>\n<hr>\n<blockquote>\n<p>Immagine generata con Cloudflare Workers AI \/ FLUX.<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>SambaNova Cloud \u00e8 il secondo provider OpenAI-compatibile che tengo sempre pronto, quello su cui ripiego quando Groq mi sbatte contro i rate limit. Sui modelli open-weights che girano su entrambi (Llama 3.x, DeepSeek, Qwen) le risposte si equivalgono, e quanto a velocit\u00e0 SambaNova non sfigura per niente. Per quello che ci faccio io, cio\u00e8 smanettare [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":77,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-76","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-locale"],"_links":{"self":[{"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/76","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=76"}],"version-history":[{"count":12,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/76\/revisions"}],"predecessor-version":[{"id":390,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/76\/revisions\/390"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/media\/77"}],"wp:attachment":[{"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=76"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=76"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=76"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}