Guide Python

OpenAI Decisions API en Python

OpenAI n'a pas publié de SDK pour sa Decisions API — il n'y a pas de client.decisions.create à copier. Cette page montre du Python fonctionnel pour l'endpoint de ce site — une alternative appelable à l'OpenAI Decisions API qui sert decisions-1 et suit le même motif de décision contrainte.

Mis à jour

Faire l'appel

Un POST vers /api/v1/decisions avec une clé Bearer. Le corps est model, state et questions — 1 à 6 questions, chacune de type noul, choice ou score. Définissez DECISIONS_API_KEY avec une clé du tableau de bord.

Utilisez requests (ou httpx pour l'async — la forme de l'appel est identique). Mettez un timeout sur chaque appel : une décision bloquée doit échouer vite, pas figer le pipeline.

Python

import os
import requests

res = requests.post(
    "https://decisions-api.net/api/v1/decisions",
    headers={"Authorization": f"Bearer {os.environ['DECISIONS_API_KEY']}"},
    json={
        "model": "decisions-1",
        "state": "I was charged twice for my subscription this morning.",
        "questions": {
            "refund": {
                "type": "noul",
                "instructions": "Is the customer asking for money back?",
            }
        },
    },
    timeout=30,
)
res.raise_for_status()
answers = res.json()["answers"]
print(answers["refund"]["noul"])

Lire les probabilités

answers revient indexé par vos ids de questions. Une réponse noul est la probabilité que l'énoncé soit vrai. Une réponse choice porte le choice gagnant, une probabilité par option et une valeur de confiance — utilisez la confiance, pas seulement le gagnant, pour décider d'agir automatiquement.

Python

answers = res.json()["answers"]

# noul: probability the statement is true
if answers["refund"]["noul"] >= 0.8:
    route_to_refunds()

# choice: winning label + per-option probabilities + confidence
team = answers["team"]
print(team["choice"], team["probabilities"], team["confidence"])

Timeouts et retries

429 et 502 méritent un retry court avec backoff — les appels échoués ne sont pas facturés. 402 signifie solde vide : rechargez, ne réessayez pas. 422 est une erreur de validation ; le message nomme le champ, corrigez donc le corps plutôt que de réessayer.

Python

import time
import requests

def decide(body, attempts=3):
    for i in range(attempts):
        try:
            res = requests.post(
                "https://decisions-api.net/api/v1/decisions",
                headers={"Authorization": f"Bearer {os.environ['DECISIONS_API_KEY']}"},
                json=body,
                timeout=30,
            )
            if res.status_code in (429, 502):
                time.sleep(2 ** i)
                continue
            if res.status_code == 402:
                raise RuntimeError("out of credits")
            res.raise_for_status()
            return res.json()["answers"]
        except requests.Timeout:
            time.sleep(2 ** i)
    raise RuntimeError("decision call failed")

Garder le fournisseur derrière une fonction

L'appelant doit voir une fonction qui prend du texte et renvoie une étiquette — pas des détails HTTP. Quand OpenAI ouvrira sa Decisions API, vous remplacerez l'intérieur de decide() et chaque site d'appel restera inchangé. Le texte des questions, les options et les seuils se conservent.

Python

# Keep the decision behind one function. Swap the HTTP layer
# when OpenAI publishes its schema — callers never change.
def route_ticket(text: str) -> str:
    answers = decide({
        "model": "decisions-1",
        "state": text,
        "questions": {
            "team": {
                "type": "choice",
                "instructions": "Which team should own this ticket?",
                "criteria": {
                    "payments": "Checkout or billing.",
                    "frontend": "Rendering or browser behavior.",
                    "account": "Login or permissions.",
                },
            }
        },
    })
    team = answers["team"]
    return team["choice"] if team["confidence"] >= 0.7 else "triage"

FAQ

Existe-t-il un exemple officiel du SDK OpenAI pour la Decisions API ?

Non. OpenAI n'a publié ni méthodes SDK ni schéma de requête pour sa Decisions API — tout code montrant client.decisions.create est inventé. Cette page utilise du HTTP simple, ce que tout SDK de fournisseur encapsulerait de toute façon.

Puis-je utiliser httpx au lieu de requests ?

Oui — l'endpoint est un simple POST HTTPS. Utilisez httpx.AsyncClient avec les mêmes en-têtes, corps, timeout et gestion de statut.

Comment envoyer un contexte structuré ?

state accepte un objet JSON ou un tableau, pas seulement une chaîne — passez des dicts directement dans le corps json et le modèle les lit comme contexte.

Lancez une décision depuis le navigateur

Aucune configuration — exécutez un vrai appel dans le bac à sable avec 2 crédits offerts aux nouveaux visiteurs.