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 (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./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.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.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
- Créez une clé sur
/app/keyset copiez-la : elle ne s’affiche qu’une seule fois. Exportez-la sous la formeKUNAVO_API_KEYdans 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. - Ouvrez
~/.factory/settings.json(créez-le s’il n’existe pas) et ajoutez le tableaucustomModelsci-dessus. Factory marque exactement trois champs comme obligatoires —model,baseUrletprovider— etdisplayNameest le libellé affiché par le sélecteur. - Vérifiez l’orthographe de
provider. La valeur doit être exactement l’une de celles-ci :anthropic,openaiougeneric-chat-completion-api; la section de dépannage de Factory indique qu’une faute à cet endroit est à l’origine de son erreur"Invalid provider". - Exécutez
/modeldans la CLI. Vos entrées apparaissent dans une section distincte Modèles personnalisés, sous celles de Factory, avec le libellédisplayNameque vous avez défini. Factory surveille le fichier de paramètres : il suffit donc de l’enregistrer, sans redémarrage. - 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 marqueurscache_controld’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.
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èle | Entrée / sortie sur Kunavo | Où cela s’intègre dans Factory Droid |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | le modèle de travail par défaut — à placer dans l’entrée provider: "anthropic" |
claude-opus-5 | $3.50 / $17.50 | planification d’une modification dont une erreur coûterait cher ; même entrée anthropic |
claude-haiku-4-5 | $0.70 / $3.50 | tours peu coûteux et tri de fichiers, lorsque le volume domine ; même entrée anthropic |
gpt-5-6-sol | $2.00 / $12.00 | un second avis provenant d’une autre famille — nécessite l’entrée generic-chat-completion-api |
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.jsonlocal, 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.allowCustomModelsetallowedBaseUrls, 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.