Aller au contenu

SDK OpenAI pour Python

Utilisez le package Python officiel openai avec Promptix en changeant simplement base_url.

Le package Python officiel openai fonctionne tel quel avec Promptix. Faites-le pointer vers l'URL de base de Promptix, utilisez votre clé Promptix et choisissez n'importe quel modèle du catalogue.

Installation

terminalbash
pip install --upgrade openai

Configurer le client

Définissez base_url et api_key. Tout le reste de votre code est inchangé.

client.pyPython
import osfrom openai import OpenAI client = OpenAI(    base_url="https://promptix.tn/api/v1",       # the only line that changes    api_key=os.environ["PROMPTIX_API_KEY"],)

Vous pouvez aussi, sans toucher au code, définir les variables d'environnement que le SDK lit par défaut :

terminalbash
export OPENAI_BASE_URL="https://promptix.tn/api/v1"export OPENAI_API_KEY="$PROMPTIX_API_KEY" # Existing code that calls OpenAI() with no arguments now goes through Promptix

Chat completion

chat.pyPython
import osfrom openai import OpenAI client = OpenAI(    base_url="https://promptix.tn/api/v1",    api_key=os.environ["PROMPTIX_API_KEY"],) completion = client.chat.completions.create(    model="anthropic/claude-sonnet-5",    messages=[        {"role": "system", "content": "You are a helpful assistant who answers in French."},        {"role": "user", "content": "Explain what a VAT number is in two sentences."},    ],    temperature=0.3,    max_tokens=300,) print(completion.choices[0].message.content)print(completion.usage.total_tokens, "tokens")

Streaming

Passez stream=True et parcourez les chunks. Le dernier chunk contient usage et peut avoir une liste choices vide, d'où la vérification. Voir Streaming.

stream.pyPython
stream = client.chat.completions.create(    model="openai/gpt-6-luna",    messages=[{"role": "user", "content": "List five dishes from Tunisian cuisine."}],    stream=True,) for chunk in stream:    if chunk.choices and chunk.choices[0].delta.content:        print(chunk.choices[0].delta.content, end="", flush=True)

Client asynchrone

AsyncOpenAI accepte les mêmes options. Pratique pour les serveurs web (FastAPI, vues asynchrones Django) et les traitements en lot.

batch.pyPython
import asyncioimport osfrom openai import AsyncOpenAI client = AsyncOpenAI(    base_url="https://promptix.tn/api/v1",    api_key=os.environ["PROMPTIX_API_KEY"],) async def summarize(text: str) -> str:    completion = await client.chat.completions.create(        model="openai/gpt-6-luna",        messages=[{"role": "user", "content": f"Summarize in one sentence:\n\n{text}"}],        max_tokens=100,    )    return completion.choices[0].message.content async def main():    texts = ["First document...", "Second document...", "Third document..."]    # Keep concurrency modest: providers rate-limit bursts    semaphore = asyncio.Semaphore(4)     async def bounded(t: str) -> str:        async with semaphore:            return await summarize(t)     for summary in await asyncio.gather(*(bounded(t) for t in texts)):        print(summary) asyncio.run(main())

Sortie structurée

Sur les modèles qui prennent en charge les schémas JSON, l'assistant parse du SDK renvoie des objets typés :

structured.pyPython
from pydantic import BaseModel class Invoice(BaseModel):    city: str    amount_tnd: float completion = client.chat.completions.parse(    model="openai/gpt-6-luna",    messages=[{"role": "user", "content": "Invoice from Sousse, total due 245.500 dinars."}],    response_format=Invoice,) invoice = completion.choices[0].message.parsedprint(invoice.city, invoice.amount_tnd)

Erreurs et nouvelles tentatives

Le SDK réessaie deux fois par défaut les réponses 408, 409, 429 et 5xx (réglez max_retries sur le client pour changer ce comportement) et lève des exceptions typées. Les cas propres à Promptix sont décrits dans Erreurs et limites.

errors.pyPython
import openai try:    completion = client.chat.completions.create(        model="openai/gpt-6-luna",        messages=[{"role": "user", "content": "Hello"}],    )except openai.AuthenticationError:    ...  # 401: invalid or revoked keyexcept openai.RateLimitError:    ...  # 429: provider throttling (already retried by the SDK)except openai.APIStatusError as e:    if e.status_code == 402:        ...  # balance too low, or key_monthly_limit reached    raise

Ce qui n'est pas disponible

Promptix expose les chat completions et client.models.list(). Les autres endpoints OpenAI (embeddings, images, audio, responses, files) ne sont pas disponibles via l'URL de base de Promptix. Consultez la liste des modèles pour les champs renvoyés par models.list().