Fleeexdocs

Choisir un modèle

Passez un alias plutôt qu'un identifiant de fournisseur versionné, et demandez quels modèles votre application peut appeler au lieu d'écrire la liste en dur.

Deux choses à propos de model cessent d'être vraies quand on arrive d'OpenAI : quels identifiants existent, et lesquels votre application a le droit d'appeler. Ni l'un ni l'autre ne se devine, et une seule requête répond aux deux.

Passer un alias

Envoyez un nom public stable comme nova-lite plutôt que l'identifiant de fournisseur versionné vers lequel il pointe (amazon.nova-lite-v1:0). Les deux sont des valeurs valides pour model, mais l'alias est celui qui survit à la révision suivante du modèle : Fleeex le fait pointer ailleurs, et votre code ne bouge pas.

await client.chat.completions.create({
  model: "nova-lite", // et non "amazon.nova-lite-v1:0"
  messages: [{ role: "user", content: "Bonjour !" }],
});

La réponse renvoie en écho l'identifiant résolu, dans completion.model et sur chaque chunk d'un flux. C'est ce que fait OpenAI quand un nom de famille de modèles pointe vers un instantané daté, et c'est la seule façon pour un appelant qui utilise un alias de voir quel modèle a réellement répondu et a été facturé. Vos événements d'usage enregistrent aussi l'identifiant résolu, donc l'historique de facturation reste auditable au travers d'un changement de cible.

Les modèles appelables dépendent de votre application

Les licences des modèles n'autorisent pas toutes la revente. Le catalogue enregistre donc un droit de revente par modèle, et les familles propriétaires sont réservées aux applications de FlexCorp. Une application tierce ne les voit pas dans le catalogue et ne peut pas les appeler.

Si la liste est plus courte que prévu, la raison est là. Ce n'est pas un bug, et ce n'est pas quelque chose que change une nouvelle tentative, une autre clé ou un portefeuille approvisionné :

  • GET /v1/models omet ce que votre application n'a pas le droit d'utiliser, au lieu de le lister puis de le refuser. Tout ce qu'il renvoie est appelable.
  • Demander un modèle réservé par son nom donne un 403 avec le code MODEL_NOT_ENTITLED, qui nomme le modèle et le remède. L'appel n'atteint aucun fournisseur et ne réserve rien.
  • Un modèle que personne ne sert est une réponse différente : un 400 sur une complétion, un 404 sur GET /v1/models/{model}.

Les modèles à poids ouverts et Amazon Nova ne portent aucune restriction de ce genre et sont ouverts à toute application, ce qui explique que tous les exemples de ce site utilisent nova-lite.

Lister les modèles que vous pouvez appeler

GET /v1/models répond dans le format de liste d'OpenAI, restreint à l'application dont relève votre clé. FleeexClient n'enveloppe que les complétions de chat : listez donc avec le client OpenAI (déjà une dépendance pair) pointé sur la même URL de base.

Contrairement à une complétion, la découverte n'exige pas x-fleeex-user : le catalogue est une propriété de votre application et non de l'un de ses utilisateurs finaux, donc un client peut énumérer les modèles avant même d'avoir un utilisateur.

catalog.ts
import OpenAI from "openai";
 
const catalog = new OpenAI({
  apiKey: process.env.FLEEEX_API_KEY!,
  baseURL: "https://api.fleeex.dev/v1", // noter le /v1 final
  // pas de x-fleeex-user : délibérément non requis ici
});
 
const page = await catalog.models.list();
for await (const model of page) {
  console.log(model.id, model.owned_by); // ex. "nova-lite" "amazon"
}

Les alias sont listés à côté des identifiants vers lesquels ils pointent. Les deux sont des valeurs utilisables pour model, comme un fournisseur liste un nom de famille à côté d'un instantané daté. Masquer l'alias rendrait la liste fausse.

ChampValeur
idCe qu'il faut envoyer comme model : un identifiant du catalogue, ou un alias qui pointe vers l'un d'eux.
object"model".
createdToujours 0. Fleeex n'enregistre aucune date de création pour une entrée de catalogue, et en fabriquer une reviendrait à la fois à affirmer un instant que personne ne connaît et à faire changer à chaque requête une réponse par ailleurs identique.
owned_byDérivé du préfixe fournisseur de l'identifiant résolu (anthropic.claude-… → anthropic) : un alias annonce donc le fournisseur propriétaire du modèle visé.

Rien de spécifique à Fleeex (prix, marge, droit de revente) n'apparaît ici. Le corps porte exactement le jeu de clés d'OpenAI, car un décodeur client strict échoue sur une propriété inconnue.

Décrire un modèle

const model = await catalog.models.retrieve("nova-lite"); // alias ou identifiant fournisseur

Les deux modes d'échec sont délibérément deux réponses distinctes :

RéponseSignification
404Aucun modèle ni alias de ce nom n'est servi ici. Cherchez une faute de frappe.
403 MODEL_NOT_ENTITLEDLe modèle existe, et il est réservé à d'autres applications.

La liste omet le modèle réservé parce qu'une liste répond à « ce que vous pouvez utiliser ». Un appelant qui interroge un modèle précis, lui, apprend dans laquelle des deux situations il se trouve, au lieu de chercher une faute de frappe qui n'existe pas.