Présentation
L’API Agent-First de LemonData enrichit les réponses d’erreur avec des indices structurés que les agents d’IA peuvent analyser et appliquer immédiatement — pas de recherches web, pas de consultation de docs, pas de conjectures. Chaque réponse d’erreur inclut des champs optionnels commedid_you_mean, suggestions, hint, retryable et retry_after à l’intérieur de l’objet error standard. Ces champs sont rétrocompatibles — les clients qui ne les utilisent pas ne remarquent aucune différence.
Champs d’indice d’erreur
Tous les champs d’indice sont des extensions optionnelles à l’intérieur de l’objeterror :
| Field | Type | Description |
|---|---|---|
did_you_mean | string | Nom de modèle le plus proche correspondant |
suggestions | array | Modèles recommandés avec métadonnées |
alternatives | array | Modèles alternatifs actuellement disponibles |
hint | string | Guide lisible par un humain/agent pour l’étape suivante |
retryable | boolean | Indique si retenter la même requête peut réussir |
retry_after | number | Secondes à attendre avant de retenter |
balance_usd | number | Solde actuel du compte en USD |
estimated_cost_usd | number | Coût estimé de la requête échouée |
Exemples de codes d’erreur
model_not_found (400)
Quand un nom de modèle ne correspond à aucun modèle actif :did_you_mean utilise :
- Mappage d’alias statique (à partir des données d’erreur en production)
- Correspondance de chaînes normalisée (supprime les traits d’union, insensible à la casse)
- Correspondance par distance d’édition (seuil ≤ 3)
did_you_mean, suggestions et hint, puis retentez avec un modèle public pris en charge.
insufficient_balance (402)
Lorsque le solde du compte est trop faible pour le coût estimé :suggestions contient des modèles moins chers que le coût estimé vers lesquels l’agent peut basculer.
all_channels_failed (503)
Lorsque tous les canaux en amont pour un modèle sont indisponibles :retryable est false lorsque la raison est no_channels (aucun canal configuré pour ce modèle). Il est true uniquement pour les pannes transitoires comme des déclenchements de circuit breaker ou l’épuisement de quotas.rate_limit_exceeded (429)
retry_after est calculée à partir du temps réel de réinitialisation de la fenêtre de limitation de débit.
Les endpoints compatibles OpenAI utilisent les types d’erreur publics stables de LemonData tels que
rate_limit_exceeded, upstream_error et all_channels_failed. Les endpoints compatibles Anthropic et Gemini utilisent leurs propres formes de réponse natives.context_length_exceeded (400)
Lorsque l’entrée dépasse la fenêtre de contexte du modèle (erreur en amont, enrichie d’indices) :En-têtes des endpoints natifs
Lorsque vous appelez/v1/chat/completions avec un modèle qui dispose d’un endpoint natif (Anthropic ou Gemini), la réponse en cas de succès inclut des en-têtes d’optimisation :
| Model Provider | Suggested Endpoint | Benefit |
|---|---|---|
| Anthropic (Claude) | /v1/messages | No format conversion, extended thinking, prompt caching |
| Google (Gemini) | /v1beta/gemini | No format conversion, grounding, safety settings |
| OpenAI | — | Chat completions is already the native format |
Améliorations de /v1/models
/v1/models contient désormais des métadonnées de recommandation non-chat que les agents peuvent utiliser avant d’appeler les endpoints d’image, vidéo, musique, 3D, TTS, STT, embedding, rerank ou traduction.
| Field | Values | Description |
|---|---|---|
category | chat, image, video, audio, tts, stt, 3d, embedding, rerank | Type de modèle |
pricing_unit | per_token, per_image, per_second, per_request | Méthode de facturation du modèle |
cache_pricing | object or null | Renvoyé uniquement quand le modèle a des prix de prompt cache upstream. La seule remise de cache sémantique de plateforme n’apparaît plus sur la liste. |
agent_preferences.<scene> | object | Instantané de recommandation non-chat renvoyé uniquement avec GET /v1/models?recommended_for=<scene> |
recommended_for est présent, agent_preferences est dérivé d’un instantané de taux de succès sur 24 heures mis en cache :
- Fenêtre : 24 heures
- Cache d’instantané : stale-while-revalidate
status = "ready"signifie que le modèle dispose d’un nombre suffisant d’échantillons récents pour participer au classementstatus = "insufficient_samples"signifie que le modèle reste visible mais n’est pas classé devant les modèles notés
Filtrage par catégorie
Découverte de recommandations
Pour les workflows non-chat, les agents doivent d’abord récupérer la liste recommandée actuelle :recommended_for sont :
imagevideomusic3dttssttembeddingreranktranslation
category et recommended_for sont présents, ils doivent correspondre exactement.
Flux recommandé pour l’agent :
GET /v1/models?recommended_for=<scene>- Choisir le premier modèle dont
agent_preferences.<scene>.status == "ready" - Appeler explicitement l’endpoint avec
model=<selected> - En cas d’erreurs transitoires uniquement, retenter avec le modèle
readysuivant
llms.txt
Un aperçu API lisible par machine est disponible à :- Modèle de première requête avec un exemple fonctionnel
- Noms de modèles courants (générés dynamiquement à partir des données d’utilisation)
- Les 12 endpoints API
- Paramètres de filtrage pour la découverte de modèles
- Conseils de gestion des erreurs
llms.txt avant leur premier appel API peuvent généralement réussir dès la première tentative.
Utilisation dans le code agent
Python (OpenAI SDK)
JavaScript (OpenAI SDK)
Principes de conception
Échouer vite, fournir des informations utiles
Les erreurs retournent immédiatement toutes les données dont un agent a besoin pour s’auto-corriger.
Pas de routage automatique
L’API ne remplace jamais silencieusement un modèle différent. L’agent décide.
Suggestions basées sur les données
Toutes les recommandations proviennent de données de production, pas de listes codées en dur.
Rétrocompatible
Tous les champs d’indice sont optionnels. Les clients existants ne voient aucune différence.