SDK in abbonamento
OAuth per utente · limiti del piano condivisi tra le app · modello gestito da Pura.
Cerchi le API a consumo?SDK Python
Client sincrono, OAuth server-side e adapter di storage.
OAuth sul backend
create_authorization restituisce URL e pending. Salva pending nella sessione autenticata e passa il callback completo a exchange. Chiudi il client HTTPX al termine. Il client Python è sincrono: in un’app ASGI eseguilo fuori dall’event loop o in un worker.
from pura_llm import create_authorization, PuraOAuthClient
options = dict(api_base="https://ai.puradigital.it/v1", client_id="YOUR_CLIENT_ID")
url, pending = create_authorization(
**options, redirect_uri="https://your-app.example/pura/callback", locale="it")
oauth = PuraOAuthClient(**options, client_secret=server_client_secret)
try:
tokens = oauth.exchange(callback_url, pending)
user_token_store.set(tokens)
finally:
oauth.close()Chat e consumo
Crea un client per il grant corrente con uno store persistente. capabilities(), chat(), usage() e transcribe() usano lo stesso collegamento e abbonamento. Conserva i token ruotati usando set; get restituisce None per una connessione assente.
from pura_llm import PuraInferenceClient
pura = PuraInferenceClient(**options, store=user_token_store,
client_secret=server_client_secret)
try:
capabilities = pura.capabilities()
answer = pura.chat(messages=[
{"role": "user", "content": "Hello"}])
usage = pura.usage()
finally:
pura.close()Streaming
stream_chat è un context manager che restituisce le righe SSE native, inclusa la terminazione [DONE]. Interpreta solo le righe data: come eventi e chiudi il contesto anche in caso di interruzione.
with pura.stream_chat(messages=messages) as lines:
for line in lines:
if line.startswith("data: "):
data = line[6:]
if data == "[DONE]":
break
consume_json_event(data)Adapter e lock
TokenStore offre get() e set(tokens). Su più processi implementa with_refresh_lock() come context manager condiviso per il grant, con accessi DB nello stesso contesto. PuraError.status e .code espongono gli errori stabili; una famiglia revocata richiede una nuova autorizzazione.