Documentation

Documentation

Factory Droid

Les modèles personnalisés de Droid sont un tableau JSON comportant trois champs obligatoires. Celui qui est souvent mal interprété est baseUrl, car sa valeur correcte dépend du fournisseur choisi parmi les trois options.

Une entrée customModels dans ~/.factory/settings.json — model, baseUrl et provider — place Droid sur tout endpoint parlant Anthropic Messages ou OpenAI Chat Completions.

~/.factory/settings.json → customModels
// ~/.factory/settings.json  (Windows: %USERPROFILE%\.factory\settings.json)
{
  "customModels": [
    {
      "model": "claude-sonnet-5",
      "displayName": "Sonnet 5 [Kunavo]",
      "baseUrl": "https://api.kunavo.com",
      "apiKey": "${KUNAVO_API_KEY}",
      "provider": "anthropic"
    },
    {
      "model": "gpt-5-6-sol",
      "displayName": "GPT-5.6 Sol [Kunavo]",
      "baseUrl": "https://api.kunavo.com/v1",
      "apiKey": "${KUNAVO_API_KEY}",
      "provider": "generic-chat-completion-api"
    }
  ]
}

// Then, in the shell Droid starts from:
//   export KUNAVO_API_KEY=sk-kn-...
// ${VAR_NAME} expansion is a settings.json feature. It does NOT apply to the
// legacy ~/.factory/config.json, which Factory still loads and merges.
Le /v1 appartient à une entrée et pas à l’autre. La documentation de Factory tranche la question avec un tableau plutôt qu’une phrase : sa référence des fournisseurs indique https://api.anthropic.com — l’origine, sans chemin — pour provider: "anthropic", tandis que https://api.openai.com/v1, https://openrouter.ai/api/v1 et https://api.groq.com/openai/v1 utilisent tous la racine /v1. Droid ajoute lui-même la route : l’entrée Anthropic ci-dessus contient donc l’origine seule, et l’entrée Chat Completions indique /v1. Ajouter /v1 à l’entrée Anthropic demande /v1/v1/messages, ce qui produit une 404 et non un échec d’authentification — voir la référence de l’URL de base.
Cette configuration a été relevée dans la documentation de Factory à la date indiquée ci-dessous. Kunavo n’a pas exécuté la CLI Droid contre son endpoint : ni session, ni échange en continu, ni aller-retour d’appel d’outil ; il en va de même pour tous les clients de cette famille. Une page de configuration publiée ne constitue pas un test. Factory précise la même chose de son côté : seuls les modèles Anthropic et OpenAI sur leurs API officielles sont, selon ses termes, « fully tested and benchmarked ». La curl ci-dessous est la partie que vous pouvez vérifier en dix secondes ; le comportement du client dépend de vous et de Factory.
authMode peut être omis. Factory indique que la valeur par défaut, provider-default, envoie l’identifiant dans x-api-key, et l’endpoint Messages de Kunavo accepte cet en-tête ainsi que Authorization: Bearer. Si vous souhaitez explicitement utiliser la forme bearer, Factory documente authMode: "bearer" pour provider: "anthropic", qui fonctionne également ici.
Pas encore de clé ? Créez un compte Kunavo, créez une clé (elle commence par sk-kn-) et ajoutez un crédit à partir de 10 $ — les appels sont payés sur ce solde et les appels échoués ne sont pas facturés. Le tableau de bord s’ouvre ensuite sur la configuration Factory Droid.

Étape par étape

  1. Créez une clé sur /app/keys et copiez-la : elle ne s’affiche qu’une seule fois. Exportez-la sous la forme KUNAVO_API_KEY dans le shell depuis lequel vous lancez Droid, afin que la clé elle-même ne soit jamais enregistrée dans un fichier de paramètres.
  2. Ouvrez ~/.factory/settings.json (créez-le s’il n’existe pas) et ajoutez le tableau customModels ci-dessus. Factory marque exactement trois champs comme obligatoires — model, baseUrl et provider — et displayName est le libellé affiché par le sélecteur.
  3. Vérifiez l’orthographe de provider. La valeur doit être exactement l’une de celles-ci : anthropic, openai ou generic-chat-completion-api ; la section de dépannage de Factory indique qu’une faute à cet endroit est à l’origine de son erreur "Invalid provider".
  4. Exécutez /model dans la CLI. Vos entrées apparaissent dans une section distincte Modèles personnalisés, sous celles de Factory, avec le libellé displayName que vous avez défini. Factory surveille le fichier de paramètres : il suffit donc de l’enregistrer, sans redémarrage.
  5. Donnez-lui une tâche qui lit et modifie un fichier plutôt qu’une simple salutation. Droid s’appuie sur les appels d’outils pour presque tout ce qu’il fait, et un simple échange de chat ne permet pas de tester cette partie. Exécutez ensuite /cost : c’est là que Factory affiche les taux de succès du cache. Kunavo prend en charge nativement les marqueurs cache_control d’Anthropic, et Factory précise que, chez le fournisseur générique Chat Completions, la mise en cache « varie selon le fournisseur et ne peut pas être garantie ».

Vérifié avec La page Modèles personnalisés (BYOK) de Factory le 21 septembre 2026. Les paramètres tiers évoluent ; si le nom d’un champ ne correspond plus à ce que vous voyez ici, cette page fait autorité, pas celle-ci.

Voici la version courte. Le guide complet — choix du modèle, coût d’une session réelle et modes d’échec — se trouve dans le guide des coûts de Factory Droid.

Vérifiez avant de déboguer le client

Une requête suffit à déterminer si l’échec vient de l’endpoint, de la clé ou du fichier de configuration. Si cette requête renvoie du JSON, la même URL de base et la même clé fonctionnent dans Factory Droid.

# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/messages \
  -H "Authorization: Bearer sk-kn-..." \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'

Quel identifiant de modèle saisir dans le champ

Tous les modèles textuels sont accessibles sous forme d’identifiant de modèle — la liste à jour se trouve sur GET /v1/models, et le catalogue avec les prix sur la page des modèles. Les tarifs sont en USD par million de tokens, entrée / sortie.

Identifiant du modèleEntrée / sortie sur KunavoOù cela s’intègre dans Factory Droid
claude-sonnet-5$1.40 / $7.00le modèle de travail par défaut — à placer dans l’entrée provider: "anthropic"
claude-opus-5$3.50 / $17.50planification d’une modification dont une erreur coûterait cher ; même entrée anthropic
claude-haiku-4-5$0.70 / $3.50tours peu coûteux et tri de fichiers, lorsque le volume domine ; même entrée anthropic
gpt-5-6-sol$2.00 / $12.00un second avis provenant d’une autre famille — nécessite l’entrée generic-chat-completion-api
La facturation se fait au token à partir d’un solde prépayé, sans frais mensuels — consultez la facturation. Avec un contexte répété — ce qu’envoient la plupart des éditeurs et clients de chat — la mise en cache des prompts influe davantage sur la facture que le choix du modèle.

Ce qu’un modèle personnalisé n’atteint pas dans Droid

Trois limites proviennent des pages de Factory, et chacune modifie ce que vous pouvez attendre de la configuration ci-dessus, sans remettre en cause son fonctionnement.

  • Interfaces locales uniquement. La page BYOK de Factory indique que les modèles personnalisés sont disponibles dans la CLI Droid et l’application de bureau, qui lisent votre settings.json local, et qu’ils « n’apparaissent pas sur les plateformes web ou mobiles hébergées de Factory ». Tout travail délégué via le produit hébergé continue d’utiliser l’inférence facturée par Factory, quelle que soit la clé configurée ici.
  • Un administrateur peut désactiver cette option. La documentation des contrôles d’entreprise de Factory décrit modelPolicy.allowCustomModels et allowedBaseUrls, qui désactivent entièrement le BYOK des utilisateurs ou imposent un hôte approuvé pour tous les modèles personnalisés. Sur une machine gérée, vérifiez ce point avant de chercher l’origine d’un problème dans le fichier.
  • Les frais d’abonnement restent dus. Une clé ajoutée ici vient en complément, elle ne remplace rien : les frais facturés par Factory au-delà de l’allocation BYOK et le montant de cette allocation sont traités dans le guide des coûts et ne sont pas recalculés sur cette page.

Voici un piège à connaître avant de copier une configuration trouvée ailleurs : Factory charge toujours le fichier historique ~/.factory/config.json avec les clés snake_case custom_models et base_url, qu’il fusionne sous settings.json, et précise que l’expansion de ${VAR_NAME} ne s’y applique pas. Une clé enregistrée comme espace réservé dans ce fichier est envoyée telle quelle. Utilisez settings.json.

Questions fréquentes

Comment ajouter un endpoint d’API personnalisé à Factory Droid ?

Modifiez ~/.factory/settings.json (%USERPROFILE%\.factory\settings.json sous Windows) et ajoutez un tableau customModels. Chaque entrée doit contenir trois champs obligatoires — model, baseUrl et provider — ainsi que des champs facultatifs, notamment displayName, apiKey, authMode, maxOutputTokens et extraHeaders. Aucun formulaire de paramètres n’est prévu : l’interface est le fichier JSON. Factory surveille ce fichier ; après l’enregistrement, exécutez /model dans la CLI et l’entrée apparaîtra sous un titre distinct « Modèles personnalisés ».

L’URL base de Factory Droid doit-elle se terminer par /v1 ?

Cela dépend de la valeur de provider. La documentation de Factory tranche la question au moyen du tableau de référence des fournisseurs plutôt que d’une phrase. La ligne Anthropic indique https://api.anthropic.com sans chemin : avec provider "anthropic", il faut donc utiliser l’origine seule — https://api.kunavo.com pour Kunavo. Toutes les lignes Chat Completions du tableau utilisent une racine /v1 (https://api.openai.com/v1, https://openrouter.ai/api/v1) ; avec provider "generic-chat-completion-api", il faut donc indiquer https://api.kunavo.com/v1. Droid ajoute lui-même la route : mettre /v1 dans l’entrée Anthropic produit /v1/v1/messages et renvoie une erreur 404, pas une erreur d’authentification.

Quelle valeur de provider utiliser pour les modèles Claude sur un endpoint tiers ?

Utilisez "anthropic". Factory documente trois valeurs de provider, chacune sélectionnant un protocole réseau : "anthropic" pour l’API Messages d’Anthropic à /v1/messages, "openai" pour l’API Responses d’OpenAI et "generic-chat-completion-api" pour OpenAI Chat Completions. La valeur indique le protocole pris en charge par l’endpoint, et non qui vous facture. Une passerelle qui répond à /v1/messages utilise donc "anthropic", quel que soit le compte auquel appartient la clé. Factory recommande d’utiliser "generic-chat-completion-api", sauf si vous appelez l’API officielle d’OpenAI ou d’Anthropic. Cela concerne le protocole proposé ; si un endpoint prend en charge les deux, vous pouvez choisir.

Pourquoi Factory Droid signale-t-il un fournisseur non valide ou ignore-t-il mon modèle personnalisé ?

La section de dépannage de Factory indique trois causes. Si un modèle manque dans le sélecteur, il s’agit généralement d’une erreur de syntaxe JSON dans settings.json ou de l’absence d’un champ obligatoire — model, baseUrl ou provider. L’erreur « Invalid provider » signale une faute d’orthographe : la valeur doit être exactement anthropic, openai ou generic-chat-completion-api. Une erreur d’authentification concerne la clé ou l’URL de base ; Factory recommande de vérifier que l’URL de base correspond à la documentation de votre fournisseur. Vérifiez d’abord lequel de ces cas s’applique en dehors du client, avec la commande curl ci-dessus : si vous obtenez du JSON, l’endpoint et la clé fonctionnent, et le problème vient du fichier de paramètres.