Choisissez le bon modèle
Routez les intentions simples vers Flash. Réservez les modèles classe Max aux tâches où une mauvaise réponse coûte plus cher que les tokens.
Notre passerelle remplace directement l'API OpenAI. Gardez votre SDK, vos templates de prompts et vos tests — changez deux lignes et vous êtes en production.
Trois étapes : créez une clé dans votre console, placez-la dans une variable d'environnement, appelez le modèle.
Dans votre console, ouvrez Clés API → Nouvelle clé. Donnez-lui un nom, une limite de débit, une liste blanche d'IP et un plafond de dépense.
Ne codez jamais une clé en dur dans le dépôt. Utilisez une variable d'environnement.
# Any OpenAI-compatible SDK works. Two values change.
export IAALGERIE_API_KEY="iaa_live_xxxxxxxxxxxxxxxxxxxx"
export OPENAI_BASE_URL="https://api.iaalgerie.com/v1"
# default model
export DEFAULT_MODEL="qwen3.7-plus"
Pointez le SDK OpenAI vers notre URL de base et choisissez un ID de modèle du catalogue.
# pip install openai
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.iaalgerie.com/v1",
api_key=os.environ["IAALGERIE_API_KEY"],
)
response = client.chat.completions.create(
model="qwen3.7-plus",
messages=[
{"role": "system", "content": "Reponds toujours en francais."},
{"role": "user", "content": "Resume ce contrat en 5 points."},
],
temperature=0.3,
)
print(response.choices[0].message.content)
print("tokens:", response.usage.total_tokens)
// npm install openai
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.iaalgerie.com/v1",
apiKey: process.env.IAALGERIE_API_KEY,
});
const response = await client.chat.completions.create({
model: "qwen3.7-plus",
messages: [
{ role: "system", content: "Reponds toujours en francais." },
{ role: "user", content: "Resume ce contrat en 5 points." },
],
});
console.log(response.choices[0].message.content);
curl https://api.iaalgerie.com/v1/chat/completions \
-H "Authorization: Bearer $IAALGERIE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.7-plus",
"messages": [
{"role": "system", "content": "Reponds toujours en francais."},
{"role": "user", "content": "Resume ce contrat en 5 points."}
],
"temperature": 0.3
}'
Une seule URL pour tous les modèles. Notre passerelle choisit la région en amont selon le modèle demandé.
OpenAI-compatible https://api.iaalgerie.com/v1
Anthropic format https://api.iaalgerie.com/anthropic
Native DashScope https://api.iaalgerie.com/api/v1
One URL for every model. Our gateway selects the upstream region
for you (Singapore, US Virginia or Beijing) — nothing to configure
on your side.
Vous n'avez rien à configurer côté région : c'est notre travail. Si vous avez besoin d'une région précise pour des raisons de conformité, dites-le nous.
Envoyez votre clé dans l'en-tête Authorization, exactement comme OpenAI.
Authorization: Bearer iaa_live_xxxxxxxxxxxxxxxxxxxx
Content-Type: application/json
Renouvelez vos clés depuis votre console à tout moment. L'ancienne clé cesse de fonctionner immédiatement.
Le format de chat OpenAI standard fonctionne tel quel.
curl https://api.iaalgerie.com/v1/chat/completions \
-H "Authorization: Bearer $IAALGERIE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.7-plus",
"messages": [
{"role": "system", "content": "Reponds toujours en francais."},
{"role": "user", "content": "Resume ce contrat en 5 points."}
],
"temperature": 0.3
}'
Utilisez qwen3.8-flash pour les brouillons et la classification, qwen3.7-plus pour les réponses aux utilisateurs, qwen3.8-max seulement quand la tâche l'exige.
Mettez stream à true et consommez les événements serveur : l'utilisateur voit le premier mot en quelques centaines de millisecondes.
stream = client.chat.completions.create(
model="qwen3.7-plus",
messages=[{"role": "user", "content": "Ecris un devis pour 3 sites web."}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
Déclarez vos outils de façon habituelle et laissez le modèle décider quand les appeler.
tools = [{
"type": "function",
"function": {
"name": "get_order_status",
"description": "Retourne le statut d'une commande algerienne.",
"parameters": {
"type": "object",
"properties": {
"order_id": {"type": "string"},
"wilaya": {"type": "string"}
},
"required": ["order_id"]
}
}
}]
messages = [{"role": "user", "content": "Ou est ma commande CMD-4821 ?"}]
while True:
reply = client.chat.completions.create(
model="qwen3.7-plus", messages=messages, tools=tools
).choices[0].message
if not reply.tool_calls:
print(reply.content)
break
messages.append(reply)
for call in reply.tool_calls:
args = json.loads(call.function.arguments)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": json.dumps({"status": "en livraison", "wilaya": "Bejaia"}),
})
Demandez du JSON et validez-le par schéma. Idéal pour extraire des champs de factures ou de formulaires.
from pydantic import BaseModel
class Invoice(BaseModel):
supplier: str
nif: str | None
total_da: float
currency: str
due_date: str | None
raw = "FACTURE SARL Exemple, NIF 0998...1620, total 145 000,00 DA, echeance 30/11/2026"
parsed = client.beta.chat.completions.parse(
model="qwen3.8-flash",
messages=[
{"role": "system", "content": "Extract the invoice fields."},
{"role": "user", "content": raw},
],
response_format=Invoice,
)
invoice = parsed.choices[0].message.parsed
print(invoice.total_da, invoice.currency) # 145000.0 DA
Les modèles média sont asynchrones : vous soumettez une tâche, puis vous l'interrogez. La facturation a lieu à la réussite de la tâche.
# Images — synchronous, billed per image
curl -X POST https://api.iaalgerie.com/v1/images/generations \
-H "Authorization: Bearer $IAALGERIE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "qwen-image-3.0-pro",
"prompt": "Photo produit d une bouteille d huile d olive",
"size": "1024x1024", "n": 2}'
# Video — asynchronous: submit, then poll the task
curl -X POST https://api.iaalgerie.com/v1/services/aigc/video-generation/video-synthesis \
-H "Authorization: Bearer $IAALGERIE_API_KEY" \
-H "X-DashScope-Async: enable" \
-H "Content-Type: application/json" \
-d '{"model": "wan3.0-video",
"input": {"prompt": "Tramway d Alger au coucher du soleil"},
"parameters": {"duration": 5, "size": "1280*720"}}'
# -> {"output": {"task_id": "..."}} then:
curl https://api.iaalgerie.com/v1/tasks/<task_id> \
-H "Authorization: Bearer $IAALGERIE_API_KEY"
# Speech to text
curl -X POST https://api.iaalgerie.com/v1/audio/transcriptions \
-H "Authorization: Bearer $IAALGERIE_API_KEY" \
-F model="qwen-audio-3.1-asr-flash-filetrans" \
-F file="@reunion.m4a"
Les tarifs média sont par image, par seconde de vidéo ou par minute d'audio — voir la page tarifs.
Construisez un pipeline de recherche pour des documents en arabe, français et anglais.
# Embeddings: turn your knowledge base into vectors
emb = client.embeddings.create(
model="text-embedding-v4",
input=["Politique de retour sous 7 jours", "Frais de livraison Yalidine"],
)
vectors = [d.embedding for d in emb.data]
# Rerank: best candidates first, before the chat call
import dashscope # pip install dashscope
ranked = dashscope.TextReRank.call(
model="qwen3-rerank",
query="Quel est le delai de retour ?",
documents=["Politique de retour sous 7 jours",
"Nos horaires d ouverture",
"Frais de livraison Yalidine"],
top_n=2,
return_documents=True,
api_key=os.environ["IAALGERIE_API_KEY"],
)
print(ranked.output.results[0].document.text)
| Statut | Signification | Que faire |
|---|---|---|
| 400 | Requête mal formée | Vérifiez l'ID du modèle dans le catalogue. |
| 401 | Clé invalide ou révoquée | Régénérez la clé dans votre console. |
| 402 | Solde insuffisant | Rechargez, ou réduisez le plafond de la clé. |
| 429 | Limite de débit atteinte | Réessayez avec un backoff exponentiel. |
| 500 | Erreur amont | Réessayez une fois, puis contactez le support avec l'ID de requête. |
| 503 | Modèle temporairement indisponible | Basculez vers un modèle frère de la même famille. |
Chaque réponse contient votre quota restant et l'ID de requête. Journalisez cet ID — le support ne peut rien investiguer sans lui.
import time
from openai import APIStatusError
def ask(messages, model="qwen3.7-plus"):
for attempt in range(5):
try:
r = client.chat.completions.create(model=model, messages=messages)
print("request_id:", r._request_id, "tokens:", r.usage.total_tokens)
return r
except APIStatusError as e:
if e.status_code == 429: # rate limit
time.sleep(2 ** attempt)
continue
if e.status_code == 402: # insufficient balance
raise SystemExit("Top up your IA Algerie balance.")
if e.status_code >= 500: # upstream hiccup
time.sleep(1)
continue
raise
raise RuntimeError("rate limited after 5 attempts")
Cinq habitudes qui réduisent réellement une facture IA de moitié ou plus.
Routez les intentions simples vers Flash. Réservez les modèles classe Max aux tâches où une mauvaise réponse coûte plus cher que les tokens.
Un plafond mensuel par clé transforme une boucle folle en erreur inoffensive.
Les tokens de sortie coûtent généralement quatre fois les tokens d'entrée.
Le cache de contexte facture les préfixes répétés à tarif réduit.
Les traitements nocturnes de classification ou d'embedding n'ont pas besoin de réponse temps réel.
Oui. Définissez base_url sur notre endpoint et api_key sur votre clé IA Algérie. Rien d'autre ne change.
Oui, sur un chemin séparé. Utile pour les outils type Claude Code.
Épinglez un ID de version exact plutôt qu'un alias mobile, pour qu'une mise à jour amont ne change jamais vos sorties en silence.
Chaque nouveau compte reçoit un petit solde d'essai pour valider l'intégration avant de payer.
Envoyez l'ID de requête et l'ID du modèle au support ; nous pouvons rejouer l'appel et escalader.
Les premiers comptes reçoivent le solde d'essai, l'appel d'onboarding et une ligne Telegram directe.
Phase de lancement — places restantes sur 100 pour la bêta