Aller au contenu principal

Nombre illimité d'images par requête

Un avantage concurrentiel de l’API xAI

L’API xAI se distingue de ses concurrents sur un point technique important : elle n’impose aucune limite sur le nombre d’images envoyées dans une seule requête. Là où d’autres API vous limitent à 4, 10 ou 20 images, Grok accepte autant d’images que vous le souhaitez.

Cette flexibilité ouvre des cas d’usage impossibles ailleurs, mais elle exige aussi une bonne compréhension des implications pratiques.

Ce que “illimité” signifie vraiment

L’absence de limite sur le nombre d’images ne signifie pas l’absence de contraintes. Plusieurs facteurs limitent naturellement le nombre d’images que vous pouvez envoyer efficacement :

Fenêtre de contexte

Le modèle dispose d’une fenêtre de contexte de taille fixe. Chaque image consomme entre 256 et 1792 tokens. Si vous envoyez 50 images en mode high, vous utilisez potentiellement 89 600 tokens rien que pour les images, laissant peu de place pour le texte et la réponse.

Qualité de l’analyse

Au-delà d’un certain nombre d’images, la qualité de l’analyse diminue. Le modèle doit répartir son attention sur toutes les images, ce qui peut mener à des descriptions superficielles ou à des oublis.

Latence et timeout

Plus vous envoyez d’images, plus le temps de traitement augmente. Avec un timeout recommandé de 3600 secondes pour les modèles de raisonnement, les requêtes très volumineuses peuvent approcher cette limite.

Recommandations pratiques par volume

Nombre d'images Recommandation Détail suggéré
1-3 Analyse détaillée possible high
4-10 Comparaison efficace auto
11-20 Classification par lots low
20+ Découper en sous-requêtes low

Architectures multi-images en production

Pattern : traitement séquentiel avec agrégation

Pour analyser un grand nombre d’images, traitez-les par lots puis agrégez les résultats :

import json

def analyser_catalogue(images, taille_lot=8):
    """Analyse un catalogue d'images par lots."""
    tous_resultats = []

    for i in range(0, len(images), taille_lot):
        lot = images[i:i + taille_lot]

        input_data = []
        for j, img in enumerate(lot, 1):
            input_data.append({
                "type": "input_text",
                "text": f"Image {i + j} :"
            })
            input_data.append({
                "type": "input_image",
                "image_url": img,
                "detail": "low"
            })

        input_data.append({
            "type": "input_text",
            "text": """Pour chaque image, identifie en JSON :
{"numero": N, "categorie": "...", "description_courte": "..."}
Renvoie un tableau JSON."""
        })

        response = client.responses.create(
            model="grok-4",
            input=input_data,
            store=False
        )

        try:
            resultats_lot = json.loads(response.output_text)
            tous_resultats.extend(resultats_lot)
        except json.JSONDecodeError:
            tous_resultats.append({"lot": i, "brut": response.output_text})

    return tous_resultats

Pattern : filtrage en entonnoir

Commencez par un tri rapide sur toutes les images, puis approfondissez uniquement celles qui sont pertinentes :

def entonnoir_analyse(images, critere):
    """Filtre puis analyse en profondeur."""
    # Étape 1 : filtrage rapide
    input_data = []
    for i, img in enumerate(images):
        input_data.append({"type": "input_image", "image_url": img, "detail": "low"})

    input_data.append({
        "type": "input_text",
        "text": f"""Parmi ces {len(images)} images, lesquelles
correspondent au critère : "{critere}" ?
Renvoie uniquement les numéros (index 0-based) en JSON : [0, 3, 7]"""
    })

    response = client.responses.create(
        model="grok-4", input=input_data, store=False
    )

    indices = json.loads(response.output_text)

    # Étape 2 : analyse approfondie des images filtrées
    resultats = []
    for idx in indices:
        response_detail = client.responses.create(
            model="grok-4",
            input=[
                {"type": "input_image", "image_url": images[idx], "detail": "high"},
                {"type": "input_text", "text": "Analyse détaillée de cette image."}
            ],
            store=False
        )
        resultats.append({"index": idx, "analyse": response_detail.output_text})

    return resultats

Gestion des erreurs avec beaucoup d’images

Quand vous travaillez avec un grand nombre d’images, les erreurs sont plus probables. Implémentez une gestion robuste :

import time

def requete_avec_retry(input_data, max_retries=3):
    for tentative in range(max_retries):
        try:
            response = client.responses.create(
                model="grok-4",
                input=input_data,
                store=False
            )
            return response
        except Exception as e:
            if tentative < max_retries - 1:
                delai = 2 ** tentative  # Backoff exponentiel
                time.sleep(delai)
            else:
                raise e

Points clés à retenir

  • L’API xAI accepte un nombre illimité d’images, mais la fenêtre de contexte reste finie
  • Au-delà de 10 images, utilisez detail: "low" pour préserver la qualité d’analyse
  • Au-delà de 20 images, découpez en sous-requêtes pour la fiabilité
  • Le pattern “entonnoir” (filtrage rapide puis analyse détaillée) est le plus efficace pour les gros volumes
  • Implémentez des retries avec backoff exponentiel pour les requêtes volumineuses