Guide alla migrazioneDa gli SDK diretti di OpenAI e Anthropic
Dalle chiamate SDK dirette a un unico piano di controllo
La maggior parte dei team inizia chiamando OpenAI o Anthropic con l'SDK del vendor e una chiave in una variabile d'ambiente. Funziona finché non ci sono diversi servizi, diverse chiavi e una fattura mensile che nessuno sa attribuire. Questa pagina è la modifica che mette INFRO davanti a quelle chiamate senza cambiare SDK, account del provider o contratto.
Il tuo codice, che chiama l'SDK di ogni provider con la chiave di quel provider
Gli account INFRO sono self-service. Il catalogo, la documentazione e il contratto dell'API sono pubblici, il gateway è in produzione e tutto ciò che va oltre la v1 è indicato come "Più avanti". Piani e prova
A che punto siamo
Cosa hai
Chiavi dei provider nell'ambiente di ogni servizio, retry e timeout scritti in ogni codebase, e costi visibili solo sulla fattura o sulla pagina di utilizzo del provider, al massimo per chiave o progetto.
Cosa cambia
Ogni client punta a https://api.infro.io con una chiave del gateway INFRO. Le tue chiavi dei provider passano in INFRO come connessioni, sigillate; i tuoi provider continuano a fatturarti direttamente alle tue tariffe.
Cosa non cambia
Gli SDK, le forme di richiesta e risposta, lo streaming, le chiamate agli strumenti e gli output strutturati su chat completions. INFRO risponde con le forme Chat Completions e Responses di OpenAI e con la forma Messages di Anthropic.
Un gateway è un passaggio in più e un vendor in più. Per alcune configurazioni non ne vale ancora la pena, e questo elenco ne è la versione onesta.
- Un servizio, un provider, una chiave e una fattura letta da una sola persona. Un gateway aggiunge un passaggio e un abbonamento prima di aggiungere qualcosa che ti serve.
- Il tuo carico di lavoro è soprattutto Batch, fine-tuning, Files, vector store o la Realtime API. INFRO non serve nessuno di questi; quelle chiamate resterebbero comunque dirette.
- Ti affidi a una funzionalità del provider che le forme chat non supportano, e usi solo quel provider. Le chiamate che INFRO non può supportare è meglio lasciarle dirette che convertirle a metà.
- Ti serve che ogni richiesta resti in una sola regione cloud. INFRO gira sulla rete di Cloudflare e il vincolo a una regione oggi non è disponibile.
Le modifiche, una riga ciascuna. Tutto ciò che non è elencato qui resta com'è.
| Chiamate SDK dirette | INFRO | |
|---|---|---|
| URL di base | Il default dell'SDK: api.openai.com/v1, api.anthropic.com. | https://api.infro.io/v1 per l'SDK di OpenAI; https://api.infro.io per l'SDK di Anthropic (che aggiunge /v1/messages). |
| Chiave | OPENAI_API_KEY, ANTHROPIC_API_KEY in ogni servizio. | Una chiave del gateway INFRO (Authorization: Bearer; è accettato anche x-api-key dell'SDK di Anthropic). Le chiavi dei provider si inseriscono una volta, nella console, come connessioni. |
| Id del modello | gpt-5.6-terra, claude-sonnet-5-5. | openai/gpt-5.6-terra su chat completions, o il nome di una route. L'SDK di Anthropic può mantenere claude-sonnet-5-5: /v1/messages legge gli id di Anthropic. |
| Attribuzione | Di solito nulla, o il campo user del provider. | metadata.user_id, metadata.session_id, metadata.tags nel corpo, oppure gli header X-INFRO-User-Id / X-INFRO-Feature. Registrati sulla richiesta, mai inviati al provider. |
Prima · gli SDK dei provider
import OpenAI from "openai";
import Anthropic from "@anthropic-ai/sdk";
const openai = new OpenAI(); // reads OPENAI_API_KEY
const anthropic = new Anthropic(); // reads ANTHROPIC_API_KEY
await openai.chat.completions.create({
model: "gpt-5.6-terra",
messages: [{ role: "user", content: "Hello" }],
});
await anthropic.messages.create({
model: "claude-sonnet-5-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello" }],
});Dopo · INFRO
import OpenAI from "openai";
import Anthropic from "@anthropic-ai/sdk";
const openai = new OpenAI({
baseURL: "https://api.infro.io/v1",
apiKey: process.env.INFRO_API_KEY,
});
const anthropic = new Anthropic({
baseURL: "https://api.infro.io",
apiKey: process.env.INFRO_API_KEY,
});
await openai.chat.completions.create({
model: "openai/gpt-5.6-terra",
messages: [{ role: "user", content: "Hello" }],
});
await anthropic.messages.create({
model: "claude-sonnet-5-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello" }],
});Failover senza nuovo codice
Collega Claude su Anthropic e su Vertex AI, o due chiavi Anthropic, e una richiesta che indica il modello passa in failover tra loro. Una route con nome stabilisce l'ordine e le regole per tipo di errore (429, 5xx, timeout) nella configurazione.
Budget prima della chiamata
I budget a livello di organizzazione, progetto, membro e chiave riservano il caso peggiore di una richiesta prima che il provider venga chiamato. Al raggiungimento del tetto la risposta è 402 budget_exceeded, nel formato di errore dell'API stessa.
Cosa lasciare com'è
Batch, Files, fine-tuning, vector store, moderazioni e Realtime mantengono il loro client diretto. Un singolo servizio può avere entrambi i client: uno tramite INFRO, uno diretto. Gli embedding si spostano, ma mantieni esattamente il modello che ha costruito il tuo indice: i vettori di modelli diversi non sono confrontabili.
Cosa fa oggi la tua configurazione rispetto a INFRO, verificato con ciò che il gateway implementa. Una riga dice che INFRO non ha nulla.
| Chiamate SDK dirette | Cosa fa lì | In INFRO |
|---|---|---|
| Chiave del provider per serviziodiverso | Ogni servizio tiene la chiave del provider nel proprio ambiente. | La chiave è una connessione, sigillata in INFRO; i servizi detengono chiavi del gateway con ambito limitato, che possono essere ristrette a provider, modelli, intervalli IP e un ambiente, ruotate o disattivate. |
| Retry e timeoutdiverso | I retry dell'SDK, più quelli che aggiunge ogni codebase. | Route con destinazioni a priorità o pesate tra le tue connessioni e regole di errore per tipo (429, 5xx, timeout). I retry dell'SDK continuano ad applicarsi in aggiunta. |
| Costodiverso | La pagina di utilizzo e la fattura del provider, per chiave o progetto. | Un costo stimato del provider su ogni risposta (usage.cost, usage.price_source), per progetto, chiave, utente e tag; riconciliato ogni giorno con le API dei costi di OpenAI e Anthropic tramite una chiave amministrativa che aggiungi tu. |
| Limiti di spesadiverso | Limiti di progetto lato provider, dove il provider li offre. | Budget che rifiutano al raggiungimento del tetto con 402, su tutti i provider insieme, a livello di organizzazione, progetto, membro, chiave e cliente finale. |
| Chat Completions e Responsesstessa forma | Le due API di testo di OpenAI. | Entrambe, su /v1/chat/completions e /v1/responses. previous_response_id e background vengono rifiutati: INFRO non conserva risposte, quindi invia la conversazione a ogni turno. |
| Anthropic Messagesstessa forma | /v1/messages, con thinking, cache_control e strumenti lato server. | /v1/messages nella forma di Anthropic. Su una connessione Anthropic, o con Claude su Vertex AI, il corpo arriva al provider così com'è scritto. |
| Immagini, sintesi vocale, trascrizione, videostessa forma | Gli endpoint multimediali del provider. | /v1/images, /v1/audio, /v1/videos con job asincroni, sui provider che servono ciascun modello. |
| Embeddingstessa forma | /v1/embeddings. | /v1/embeddings nella forma di OpenAI sulla tua connessione OpenAI, Azure OpenAI o Mistral. Failover solo verso lo stesso modello, così i vettori archiviati restano confrontabili. |
| Batch, Files, fine-tuning, Realtimeniente | API dei provider a livello di account. | Non serviti, e non previsti come funzionalità del gateway. Restano sul provider. |
Cosa non fa INFRO
- Batch, Files, fine-tuning, vector store, moderazioni, Assistants e la Realtime API.
- Risposte archiviate:
previous_response_id,conversationebackground: truesu/v1/responsesvengono rifiutati con400. - Vincolo a una regione. INFRO gira sulla rete di Cloudflare; la residenza dei dati è nella roadmap, non disponibile.
- Un deployment self-hosted senza un accordo enterprise.
Cosa non si porta con sé
- Lo storico di utilizzo precedente al passaggio. Lo conserva la dashboard del provider; INFRO registra dalla prima richiesta che serve.
- Limiti di progetto lato provider. Imposta invece i budget INFRO; i limiti del provider continuano ad applicarsi dal suo lato.
Domande
- Pago ancora direttamente OpenAI e Anthropic?
- Sì. INFRO chiama i tuoi account dei provider con le tue chiavi, quindi i tuoi provider ti fatturano alle tue tariffe. INFRO addebita un abbonamento e aggiunge lo 0% alla spesa per i modelli.
- Devo cambiare SDK?
- No. L'SDK di OpenAI accetta un
baseURLpari ahttps://api.infro.io/v1, l'SDK di Anthropic unbaseURLpari ahttps://api.infro.io, ed entrambi accettano la chiave INFRO come chiave API. - Cosa deve restare direttamente sul provider?
- Batch, Files, fine-tuning, vector store, moderazioni e Realtime. INFRO non li serve. Gli embedding possono spostarsi:
/v1/embeddingsgira su connessioni OpenAI, Azure OpenAI e Mistral.
Migra con noi, o da solo
Il programma di migrazione mappa in una call la tua configurazione gli SDK diretti di OpenAI e Anthropic su connessioni, route e budget di INFRO e migra con te il primo servizio. I tuoi provider continuano a fatturarti direttamente; INFRO è un abbonamento e aggiunge 0% alla spesa per i modelli.
Fonti
Il comportamento degli SDK descritto in questa pagina proviene da queste fonti, lette il 19 ottobre 2026.
- OpenAI — openai-node README (client options)letto il 19 ott 2026
- OpenAI — openai-python README (client options)letto il 19 ott 2026
- Anthropic — TypeScript SDKletto il 19 ott 2026
- Anthropic — Python SDKletto il 19 ott 2026