OneProvider

SDK Python

Usa il pacchetto Python anthropic o openai con OneProvider cambiando solo base_url. Client sincroni e asincroni, streaming, uso di strumenti e retry.

Due strade in Python: anthropic per il codice nativo Claude, openai per le migrazioni. Entrambe funzionano cambiando solo base_url.

Tutti i modelli, le funzionalità e i prezzi Indice della documentazione per agenti AI: https://oneprovider.dev/docs/llms.txt Sistema operativo Prima di iniziare: una chiave dalla tua area personale Apri la tua area personale: nel bot Telegram @oneprovider_robot («Area personale») oppure su app.oneprovider.dev . Premi «Emetti una chiave», dalle un nome (per esempio, questo client) e un limite di spesa, poi copia la chiave. Il saldo si ricarica nello stesso posto. Altro sull'area personale e sulle chiavi .

Installazione

bash
pip3 install anthropic
# or, for OpenAI-style code:
pip3 install openai
# In a venv (recommended):
# python3 -m venv .venv && source .venv/bin/activate
# pip install anthropic openai

Anthropic SDK

python
import os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ["ONEPROVIDER_KEY"],
base_url="https://api.oneprovider.dev",
)
resp = client.messages.create(
model="claude-sonnet-5-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Say hi."}],
)
print(resp.content[0].text)

Compatibile con OpenAI

python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ONEPROVIDER_KEY"],
base_url="https://api.oneprovider.dev/v1",
)
resp = client.chat.completions.create(
model="claude-sonnet-5-5",
messages=[{"role": "user", "content": "Say hi."}],
)
print(resp.choices[0].message.content)

Client asincrono

python
import asyncio
from anthropic import AsyncAnthropic
async def main():
client = AsyncAnthropic(base_url="https://api.oneprovider.dev")
resp = await client.messages.create(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{"role": "user", "content": "Hi async."}],
)
print(resp.content[0].text)
asyncio.run(main())

Streaming

python
with client.messages.stream(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{"role": "user", "content": "Tell me a haiku."}],
) as stream:
for chunk in stream.text_stream:
print(chunk, end="", flush=True)

Uso degli strumenti

python
tools = [{
"name": "get_weather",
"description": "Get current weather for a city.",
"input_schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
}]
resp = client.messages.create(
model="claude-sonnet-5-5",
max_tokens=1024,
tools=tools,
messages=[{"role": "user", "content": "What's the weather in Frankfurt?"}],
)
# resp.stop_reason == "tool_use"
# Inspect resp.content for tool_use blocks.

Nuovi tentativi e gestione degli errori

python
from anthropic import APIStatusError
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=0.5, min=0.5, max=4),
retry_error_cls=APIStatusError,
)
def call():
return client.messages.create(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{"role": "user", "content": "Hi."}],
)
Non scrivere la chiave nel codice Leggi sempre la chiave da una variabile d'ambiente o da un gestore di segreti. Le chiavi scritte nel codice prima o poi finiscono nel controllo di versione.

Quale modello scegliere

Passa l'ID in model. claude-sonnet-5-5 è la scelta predefinita per la maggior parte del codice, claude-haiku-5-5 per chiamate veloci ad alto volume e claude-opus-5-5 per ragionamenti difficili. La forma compatibile con OpenAI accetta anche ID GPT come gpt-6.1-terra. Usa la forma Anthropic con https://api.oneprovider.dev e la forma OpenAI con https://api.oneprovider.dev/v1. Gli ID sono nella pagina dei modelli .

Errori comuni e soluzioni

404 NotFoundError

SDK Anthropic: base_url="https://api.oneprovider.dev" senza /v1. SDK OpenAI: base_url="https://api.oneprovider.dev/v1" con /v1.

401 AuthenticationError

La variabile d'ambiente è vuota o ha un a capo finale. Stampa len(os.environ["ONEPROVIDER_KEY"]) prima della chiamata.

429 RateLimitError

Leggi il messaggio: «Insufficient balance» significa che devi ricaricare (non riprovare), qualsiasi altro 429 è un limite di frequenza, quindi rallenta e rispetta Retry-After.

APIConnectionError o timeout di lettura

Disattiva le variabili di VPN o proxy (HTTPS_PROXY) e usa lo streaming per le risposte lunghe: una richiesta senza streaming deve iniziare entro 6 minuti.

400 su max_tokens

L'SDK Anthropic richiede max_tokens in ogni richiesta.

FAQ

Posso mantenere gli SDK ufficiali?

Sì. Cambiano solo la chiave e base_url, vedi migrare da Anthropic e migrare da OpenAI .

Lo streaming funziona?

Sì, con entrambi gli SDK; vedi Streaming .

Dove tengo la chiave?

In una variabile d'ambiente, mai nel repository.

Risposte rapide

Quale base URL devo usare?

Claude Code e gli SDK Anthropic usano https://api.oneprovider.dev. Gli SDK OpenAI e i client compatibili con OpenAI usano https://api.oneprovider.dev/v1. Con una sola chiave funzionano entrambi; l'elenco dei modelli è nella pagina dei modelli , le tariffe nella pagina dei prezzi .

Come mi autentico?

Invia la chiave sk-… così com'è in x-api-key oppure in Authorization: Bearer: uno dei due, mai entrambi. Tieni la chiave in una variabile d'ambiente, non in un file che finisce nel commit. Altro sull'autenticazione .

Dove ottengo una chiave?

Apri la tua area personale nel bot Telegram @oneprovider_robot oppure su app.oneprovider.dev, ricarica il saldo e premi «Emetti una chiave». Ogni chiave può avere un proprio limite di spesa. Area personale e chiavi API .

Cosa significano 401, 404 e 429?

401: la chiave manca, è scritta male o è inviata nell'header sbagliato; incolla la chiave intera, senza virgolette né spazi. 404: di solito la base URL è sbagliata, per esempio manca /v1 o è doppio. 429 con “Insufficient balance”: il saldo dell'area personale o il limite di spesa della chiave è esaurito, quindi ricarica invece di riprovare; qualsiasi altro 429 è un limite di frequenza, quindi attendi il tempo indicato in Retry-After. Dettagli: codici di errore e risoluzione dei problemi .

Perché gli stream si interrompono o si resettano?

VPN e proxy VLESS spesso mettono in buffer gli SSE o rompono la negoziazione HTTP/2. OneProvider non ha restrizioni regionali e non mette in buffer gli stream: disattiva il proxy e riprova.

Dove chiedo se non basta?

Scrivi a @Oneproviderhelpbot su Telegram oppure apri «Assistenza» nell'area personale sul sito, indicando il codice di stato HTTP e il testo esatto dell'errore. Come funziona l'assistenza .

Ultimo aggiornamento: 2026-11-08 Hai trovato un errore? @Oneproviderhelpbot