AI Models
Dans l'admin : System › Admin › License & updates (
/license) pour activer le module. Puis Services › AI Models : Providers (/ai/providers), Models (/ai/models), Profit (/ai/profit) et Audit (/ai/audit). Les clients utilisent AI › API dans le portail client.
Description
AI Models est une passerelle et une couche de facturation intégrées à votre propre panneau. Vos clients obtiennent des clés API et appellent un endpoint unique sur votre domaine, au format compatible OpenAI ou compatible Anthropic. Vous choisissez les modèles à proposer et le coût de chacun pour 1 million de tokens. NexCMP vérifie la clé, les limites et le solde, transmet la requête à un fournisseur que vous avez ajouté, comptabilise les tokens et débite le compte prépayé du client.
Vous fournissez les sources de modèles. NexCMP est livré sans provider, sans modèle, sans adresse par défaut et sans tarif. Il ne fournit ni modèles, ni clés API, ni tokens, ni comptes de provider.
Vérifiez d'abord les conditions de vos sources
De nombreuses sources de modèles limitent la revente ou la transmission d'accès à des tiers. N'utilisez que des sources que vous êtes autorisé à exploiter et à revendre, et respectez leurs conditions ainsi que la législation en vigueur. Cette page ne constitue pas un conseil juridique.
AI Models est un produit distinct de AI Chat and AI Agent (module AI, voir AI providers). Les deux modules sont totalement indépendants.
Prérequis
| Élément | Prérequis |
|---|---|
| Module | AI Models activé sous License & updates, Modules. Il est désactivé par défaut. |
| Providers | Une ou plusieurs sources de modèles que vous êtes autorisé à revendre, chacune avec une API compatible OpenAI (/chat/completions), une API compatible Anthropic (/messages) ou les deux. Chacune nécessite une URL de base et une clé API. |
| Réseau | Le panel doit pouvoir joindre chaque provider en HTTPS sur le port 443 via un nom de domaine public. Tout provider situé sur un hôte interne, un autre port ou en HTTP standard doit être répertorié sous Allowed internal hosts (paramètre ai_endpoint_allow). |
| Clients | Un compte client avec une adresse e-mail vérifiée et un solde sur son wallet. |
| Matériel | Aucun. NexCMP ne fait que relayer les requêtes : aucun GPU ni fichier de modèle requis. |
Préparer l'infrastructure
- Obtenez une clé API auprès de chaque source de modèle que vous utiliserez, et notez son URL de base (par exemple
https://api.example.com/v1). - Vérifiez les conditions de la source concernant la revente.
- Si une source fonctionne sur votre réseau interne, déterminez son adresse, par exemple
http://10.0.0.5:8000/v1. Vous renseignerez10.0.0.5:8000sous Allowed internal hosts.
Connecter dans NexCMP
1. Activer le module
Ouvrez System › Admin › License & updates, localisez la carte Module et activez AI Models. Le menu se recharge et Services › AI Models apparaît. Tant que le module est désactivé, les pages client, les pages d'administration et la passerelle répondent toutes 404 module_disabled, et aucun provider n'est contacté.

2. Ajouter un fournisseur
- Ouvrez AI Models › Providers et choisissez Add provider.
- Saisissez un slug court, un nom (vous seul le voyez), le type (OpenAI-compatible, Anthropic-compatible ou Both), l'URL de base et l'API key, ainsi qu'une priorité (un nombre plus faible est testé en premier).
- Enregistrez. La clé est stockée chiffrée et seuls ses quatre derniers caractères sont affichés par la suite. Une clé ne peut être saisie que depuis une session administrateur connectée.
N'utilisez Both que pour une passerelle qui prend réellement en charge les deux formats. NexCMP ne convertit pas un format vers l'autre : un modèle proposé par un fournisseur compatible OpenAI est accessible sur /ai/v1/chat/completions, et un modèle proposé par un fournisseur compatible Anthropic sur /ai/v1/messages.

3. Tester la connexion
Choisissez Test connection sur le fournisseur. NexCMP interroge GET <base URL>/models avec la clé et indique ok, ou la raison de l'échec : auth (clé incorrecte), blocked, billing ou unreachable. Les tests sont limités à 6 par minute.
4. Synchroniser les modèles
Choisissez Sync models. NexCMP lit la liste des modèles du fournisseur et ajoute chaque nouveau modèle désactivé et sans prix. Un modèle qui ne figure plus chez le fournisseur est signalé. Tant que le module est activé, la liste est également synchronisée automatiquement toutes les 6 heures (paramètre ai_models_sync_hours).
5. Définir les prix et activer les modèles
- Ouvrez AI Models › Models.
- Pour chaque modèle que vous souhaitez commercialiser, définissez le prix de vente en dollars américains par 1 million de tokens: input, cached input et output.
- Vous pouvez également saisir votre coût pour le modèle. Profit affiche alors les revenus par rapport aux coûts par jour et par modèle, et un prix de vente inférieur à votre coût majoré de la marge minimale (paramètre
ai_min_margin_pct, 10 par défaut) est refusé à moins que vous ne confirmiez une vente à perte délibérée. Set price from cost utilise une marge que vous choisissez ; il n'y a pas de marge par défaut. - Activez le modèle. Un modèle sans prix de vente ne peut pas être activé. Un prix de cached input laissé à zéro est facturé au prix de l'input.

6. Routes et basculement
Sur un modèle, Routes liste les fournisseurs qui le desservent, dans l'ordre. Ajoutez un deuxième fournisseur de secours, définissez l'ordre et indiquez si besoin un nom de modèle différent pour chaque fournisseur (le nom envoyé au fournisseur peut différer du nom que vous publiez). Lorsqu'un fournisseur renvoie une erreur de serveur, une erreur d'autorisation ou de facturation, un modèle manquant ou une limite de débit, NexCMP essaie la route suivante. Si un délai d'attente de lecture expire après l'envoi de la requête, celle-ci n'est pas envoyée à un autre fournisseur, pour vous éviter de payer deux fois.
Chaque fournisseur est régulé à ai_provider_rpm requêtes par minute (50 par défaut). Si un fournisseur continue de renvoyer des erreurs d'autorisation ou de facturation, NexCMP alerte l'administrateur sur Telegram lorsque Telegram est configuré.
7. Activer le commutateur de vente
En haut des pages AI Models, le commutateur de vente (paramètre feature_ai_models) est désactivé par défaut. Tant qu'il est désactivé, les clients voient que le service n'est pas encore ouvert et la liste de prix publique l'indique comme indisponible. Vérifiez qu'au moins un modèle est activé, qu'il a un prix de vente et une route avec une clé, puis activez-le.
Ce que les clients peuvent faire
Dans le portail client, AI › API:
- Models affiche vos modèles et vos prix, l'URL de base et des exemples de commandes prêts à l'emploi.
- API Keys : créez, renommez, renouvelez, désactivez et supprimez des clés. Un secret n'est affiché qu'une seule fois ; seul un hash est conservé. Par clé : modèles autorisés, expiration, budget indicatif (avertit) et budget strict (bloque avec
402), requêtes par minute et tokens par minute. - Usage par modèle, clé et jour, avec export.
- Logs: enregistrements de requêtes filtrables (heure, clé, modèle, tokens, coût, statut, latence). Les prompts et réponses ne sont pas enregistrés. Les logs sont conservés 90 jours par défaut (
ai_log_retention_days). - Settings: un budget de compte et l'adresse e-mail pour les alertes de budget.
- Playground: discutez avec un modèle, comparez des modèles côte à côte et copiez le code correspondant.

Les endpoints de la passerelle, sur votre domaine:
text
POST /ai/v1/chat/completions OpenAI-compatible
POST /ai/v1/messages Anthropic-compatible (also /ai/v1/messages/count_tokens)
GET /ai/v1/models model list
GET /ai/v1/models/pricing public price list, no key neededPortefeuille et facturation
L'utilisation de l'IA est débitée du même portefeuille prépayé que tous les autres services. Avant qu'une requête ne soit envoyée à un fournisseur, NexCMP réserve le montant maximal que la requête pourrait coûter; si le solde est inférieur au minimum (ai_min_balance_cents, 20 centimes par défaut) ou insuffisant, la requête est refusée avec 402 insufficient_balance et aucun fournisseur n'est appelé. L'utilisation est regroupée par compte et imputée dans le grand livre du portefeuille après chaque heure, avec un balayage toutes les 5 minutes; l'utilisation non encore imputée est déjà déduite du solde visible par la passerelle.
Les revendeurs peuvent vendre AI Models sur leur propre domaine: leur marge ou remise s'applique à votre prix de vente et leur portefeuille wholesale est débité du prix de gros. Un commutateur d'IA par revendeur, activé par défaut, contrôle qui peut les vendre.
Vérification
Après l'étape 3, Test connection affiche ok et le nombre de modèles.
Après l'étape 4, les nouveaux modèles sont listés, désactivés, sans aucun prix.
En tant que client disposant d'un portefeuille approvisionné, créez une clé et appelez la passerelle:
bashcurl https://your-domain/ai/v1/chat/completions \ -H "Authorization: Bearer sk-ai-…" -H "Content-Type: application/json" \ -d '{"model":"model-one","messages":[{"role":"user","content":"hello"}]}'Une réponse
200renvoie la réponse du modèle. Usage affiche la requête, et Profit l'affiche si vous avez saisi un coût.Avec un portefeuille à zéro, le même appel renvoie
402 insufficient_balance.
Limites et remarques
- Le module n'intègre aucun fournisseur, modèle ou tarif par défaut, et aucune grille tarifaire n'est jamais récupérée auprès d'un fournisseur.
- Les outils exécutés côté fournisseur et facturés par appel, comme la recherche web, sont rejetés car ils ne peuvent pas être mesurés. Seule une courte liste de paramètres de requête est transmise.
- L'utilisation des tokens est extraite de la réponse du fournisseur; si une réponse n'en contient pas, NexCMP l'estime et marque l'enregistrement comme estimé.
- Les erreurs d'un fournisseur sont nettoyées avant d'atteindre le client (les noms, hôtes, adresses et le nom de modèle du fournisseur sont supprimés). Les clients ne voient jamais quel fournisseur a traité une requête.
- Les clients accèdent à la passerelle via le domaine de votre panneau, le protocole TLS de ce domaine doit donc être fonctionnel.
- NexCMP ne fournit pas de contrat de niveau de service, de fine-tuning ni d'hébergement GPU pour ce module.
Dépannage
| Symptôme | Cause et résolution |
|---|---|
Toutes les pages AI Models et la passerelle répondent 404 module_disabled | Le module est désactivé. Activez AI Models sous License & updates, Modules. |
L'ajout d'un fournisseur échoue avec endpoint_host_not_allowed, endpoint_must_be_https ou invalid_endpoint_port | L'URL de base doit être en HTTPS sur le port 443 avec un nom de domaine public. Pour un hôte interne, un autre port ou du HTTP simple, ajoutez host:port sous Allowed internal hosts. |
blocked_endpoint | L'adresse est une IP, ou le nom résout vers une adresse privée. Ajoutez-la sous Allowed internal hosts si c'est ce que vous souhaitez. |
Test connection indique auth | La clé est incorrecte ou n'a aucun accès. Saisissez à nouveau la clé. |
Un modèle ne peut pas être activé (no_price) | Définissez d'abord un prix de vente. |
Les clients reçoivent 503 ai_unavailable | Le commutateur de vente est désactivé, ou le commutateur d'IA du revendeur est désactivé. |
Les clients reçoivent 503 upstream_unavailable | Aucune route activée avec une clé ne dessert ce modèle dans le format demandé. Vérifiez les routes du modèle et le type de fournisseur. |
Les clients reçoivent 402 insufficient_balance | Le solde du portefeuille est inférieur au minimum ou insuffisant pour la requête. Demandez au client de recharger. |