Vai al contenuto
PuraPura Developers

SDK in abbonamento

OAuth per utente · limiti del piano condivisi tra le app · modello gestito da Pura.

Cerchi le API a consumo?
Developers/SDK Python

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.

python
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.

python
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.

python
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.