Aller au contenu principal

Fournisseurs Personnalisés

AISCouncil supporte n'importe quelle API LLM qui implémente le format de complétions de chat OpenAI. Cela vous permet de vous connecter à des modèles auto-hébergés, des passerelles LLM d'entreprise, des fournisseurs alternatifs et des serveurs d'inférence locaux.

Que Sont les Fournisseurs Personnalisés

Les fournisseurs personnalisés sont des endpoints LLM définis par l'utilisateur qui utilisent le format d'API compatible OpenAI (/v1/chat/completions avec streaming SSE). La plupart des serveurs d'inférence modernes et passerelles LLM implémentent ce format, ce qui en fait le standard de facto pour les APIs LLM.

Cas d'Usage

  • Modèles auto-hébergés — Connectez-vous à vLLM, Text Generation Inference, ou LocalAI s'exécutant sur votre propre matériel
  • Passerelles LLM d'entreprise — Routez via le proxy API de votre entreprise avec authentification et journalisation
  • Proxys locaux — Utilisez LiteLLM ou des outils similaires pour unifier plusieurs fournisseurs derrière un seul endpoint
  • Fournisseurs alternatifs — Connectez-vous à tout fournisseur pas encore intégré dans l'application
  • Modèles fine-tunés — Accédez à vos modèles personnalisés fine-tunés sur toute plateforme d'hébergement compatible
  • Déploiements cloisonnés — Utilisez des modèles s'exécutant sur un réseau local sans accès internet

Ajouter un Fournisseur Personnalisé via Settings

  1. Ouvrez Settings (cliquez sur l'icône engrenage ou pressez Ctrl+Shift+S)
  2. Allez à la section API Keys
  3. Défilez jusqu'à Custom Providers
  4. Remplissez les champs :
ChampRequisDescription
Provider IDOuiUn identifiant court (ex., my-llm). Doit être unique, minuscules, sans espaces
Display NameOuiNom lisible montré dans le menu déroulant des fournisseurs
Endpoint URLOuiURL complète vers l'endpoint de complétions de chat (ex., https://my-api.example.com/v1/chat/completions)
API KeyNonToken Bearer pour l'authentification (laissez vide si non requis)
ModelsOuiListe de modèles disponibles à cet endpoint séparés par des virgules
  1. Cliquez sur Save
  2. Le fournisseur apparaît dans le menu déroulant des fournisseurs lors de la création ou configuration d'un bot

Enregistrement Programmatique

Vous pouvez enregistrer des fournisseurs personnalisés depuis la console du navigateur ou depuis un script :

AIS.Providers.registerCustom("my-provider", {
name: "Mon Fournisseur",
endpoint: "https://my-api.example.com/v1/chat/completions",
models: [
{ id: "my-model-7b", name: "Mon Modèle 7B" },
{ id: "my-model-70b", name: "Mon Modèle 70B" },
],
apiStyle: "openai",
});

Options d'Enregistrement

OptionTypeDéfautDescription
namestringID du fournisseurNom d'affichage
endpointstringRequisURL complète vers l'endpoint de complétions de chat
modelsarray[{id: 'default', name: id}]Modèles disponibles
apiStylestring'openai'Format API (actuellement seul 'openai' est supporté)
extraHeadersobject{}En-têtes HTTP additionnels à inclure dans chaque requête
pricingobjectnullInfos de prix (pour le suivi des coûts)
maxInputnumber0Longueur max du contexte d'entrée (pour affichage uniquement)

En-Têtes Supplémentaires

Si votre endpoint nécessite des en-têtes personnalisés (ex., pour des schémas d'authentification autres que les tokens Bearer) :

AIS.Providers.registerCustom("corp-gateway", {
name: "Passerelle Corporate",
endpoint: "https://llm.corp.internal/v1/chat/completions",
models: [{ id: "gpt-4o", name: "GPT-4o (via gateway)" }],
extraHeaders: {
"X-Corp-Token": "votre-token-interne",
"X-Department": "engineering",
},
});

Persistance

Les fournisseurs personnalisés sont automatiquement sauvegardés dans localStorage sous la clé ais-custom-providers. Ils sont restaurés à chaque chargement de page, donc vous n'avez besoin de les enregistrer qu'une seule fois.

Gestion des Fournisseurs Personnalisés

Lister les fournisseurs personnalisés enregistrés

const customIds = AIS.Providers.listCustom();
// ['my-provider', 'corp-gateway']

Supprimer un fournisseur personnalisé

AIS.Providers.removeCustom("my-provider");

Cela le supprime à la fois du registre runtime et de localStorage.

Lister tous les fournisseurs (intégrés + personnalisés)

const all = AIS.Providers.list();
// [{ name: 'anthropic', models: [...] }, { name: 'my-provider', models: [...] }, ...]

Comment Ça Fonctionne en Interne

Les fournisseurs personnalisés utilisent la même factory de streaming SSE openaiCompatible() qui alimente les fournisseurs intégrés OpenAI, xAI, OpenRouter, DeepSeek, Groq et autres. Cette factory :

  1. Construit un corps de requête au format OpenAI standard (model, messages, temperature, max_tokens, stream, etc.)
  2. Envoie une requête POST avec l'en-tête Authorization: Bearer {apiKey}
  3. Analyse le flux SSE (lignes data: {...}) pour les deltas de contenu
  4. Gère à la fois les formats de réponse streaming (delta) et non-streaming (message)
  5. Extrait l'utilisation des tokens du champ usage si présent

Tous les champs de config fonctionnent avec les fournisseurs personnalisés : température, top_p, frequency_penalty, presence_penalty, séquences d'arrêt, format de réponse et effort de raisonnement.

Services Compatibles

Les services suivants implémentent le format d'API compatible OpenAI et fonctionnent comme fournisseurs personnalisés :

ServiceEndpointNotes
LiteLLMhttp://localhost:4000/v1/chat/completionsProxy qui unifie 100+ fournisseurs
LocalAIhttp://localhost:8080/v1/chat/completionsExécutez des modèles open-source localement
vLLMhttp://localhost:8000/v1/chat/completionsServeur d'inférence haute performance
Text Generation Inferencehttp://localhost:8080/v1/chat/completionsServeur d'inférence Hugging Face
Ollamahttp://localhost:11434/v1/chat/completionsDéjà intégré, mais peut être ajouté comme personnalisé aussi
llama.cpp (mode serveur)http://localhost:8080/v1/chat/completionsInférence C++ légère
Janhttp://localhost:1337/v1/chat/completionsApplication de bureau avec modèles locaux
LM Studiohttp://localhost:1234/v1/chat/completionsApplication de bureau avec gestion de modèles
Cloudflare Workers AIhttps://api.cloudflare.com/client/v4/accounts/{id}/ai/v1/chat/completionsIntégré, mais peut personnaliser
Azure OpenAIhttps://{resource}.openai.azure.com/openai/deployments/{deployment}/chat/completions?api-version=2024-02-01Nécessite l'en-tête api-key

Dépannage

Erreurs CORS

CORS (Cross-Origin Resource Sharing)

Lorsque le navigateur appelle un endpoint API directement, le serveur doit inclure des en-têtes CORS dans sa réponse. Sans eux, le navigateur bloque la requête pour des raisons de sécurité.

Si vous voyez une erreur CORS dans la console, votre endpoint personnalisé doit retourner ces en-têtes :

Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Methods: POST, OPTIONS

Pour les services locaux :

  • Ollama : Définir la variable d'environnement OLLAMA_ORIGINS=* avant de démarrer
  • vLLM : Ajouter le flag --allowed-origins '*'
  • LiteLLM : Ajouter le flag --cors ou définir LITELLM_ALLOW_ORIGINS=*
  • LocalAI : CORS est activé par défaut

Pour les services distants derrière un reverse proxy (Nginx) :

location /v1/ {
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization' always;
add_header 'Access-Control-Allow-Methods' 'POST, OPTIONS' always;

if ($request_method = 'OPTIONS') {
return 204;
}

proxy_pass http://localhost:8000;
}

Connexion Refusée

  • Vérifiez que l'URL de l'endpoint est correcte et que le service est en cours d'exécution
  • Pour les services locaux, assurez-vous que le serveur écoute sur le port attendu
  • Pour les services localhost, essayez 127.0.0.1 à la place (ou vice versa)
  • Vérifiez qu'aucun pare-feu ne bloque le port

Erreurs d'Authentification

  • Vérifiez que votre clé API est correcte
  • Certains services utilisent différents en-têtes d'auth — utilisez extraHeaders si le service n'utilise pas le format standard Authorization: Bearer
  • Azure OpenAI utilise l'en-tête api-key au lieu de Authorization

Réponses Vides ou Corrompues

  • Confirmez que l'endpoint retourne le format SSE compatible OpenAI (data: {"choices":[{"delta":{"content":"..."}}]})
  • Certains services nécessitent stream: true dans le corps de la requête (l'application envoie cela par défaut)
  • Vérifiez que l'ID du modèle correspond à ce que le service attend
  • Ouvrez l'onglet Réseau du navigateur dans DevTools pour inspecter la requête et réponse brutes