Questions fréquentes

La plupart des pages de ce site avancent une affirmation. Celle-ci répond à dix questions qu'un acheteur doit normalement nous envoyer par e-mail pour obtenir. Quand la réponse est « pas encore », elle dit « pas encore » — une page qui exagérerait vaudrait moins que pas de page du tout, parce que toutes les autres pages ici sont écrites pour être vérifiables.

Où les prompts et les complétions sont-ils traités ?

Sur le point de terminaison que le routeur sélectionne, qui correspond à une région nommée, et la réponse indique lequel : le bloc llmeu de chaque complétion porte inference_region, endpoint_id et sovereignty_class. Une valeur de résidence dans votre politique contraint cet ensemble avant la sélection ; elle est appliquée comme un filtre, et non comme une préférence, et catalogue_unknown n'est jamais routable. Deux limites à cette phrase. Premièrement, les lignes de région sont des données de configuration, et non la preuve de machines en fonctionnement ni de contrats d'exploitation confirmés — le document sur la résidence le dit dans ses propres termes, et nous le répétons ici plutôt que là-bas seulement. Deuxièmement, sur ce déploiement il n'y a pas de GPU : le backend par défaut est le mock, dont la région est dev-mock, et le mock ne représente pas un lieu. Voir « Que se passe-t-il s'il n'y a pas de GPU ? » ci-dessous. L'API qui fait cela est un processus Node, et non une partie de ce site statique — llmeu.com lui-même sert des pages, il ne traite pas de requêtes.

apps/api/src/inference.mjs:457 (le bloc de réponse llmeu), packages/router/src/engine.mjs:467 (la résidence est appliquée avant le calcul du score), packages/inference/src/mock.mjs:7 (MOCK_REGION = dev-mock), packages/shared/src/catalog-schema.mjs:64 (les classes routables)

Les prompts et les complétions sont-ils conservés ?

Non. Les corps des prompts et des complétions ne sont pas écrits dans la base de données. Chaque appel stocke des métadonnées — modèle demandé et utilisé, version, point de terminaison, région, classe de souveraineté, raison du routeur, nombre de tokens, latence, coût, statut — et le prompt_stored de la ligne vaut 0. Les deux colonnes de corps existent dans le schéma et sont nulles. L'application est dans le code, pas dans un texte de politique : une requête dont la rétention effective est autre que zéro est refusée, avec 403 retention_exceeds_policy si elle demande plus que votre politique ne permet et 501 retention_not_implemented si c'est permis mais non implémenté. Les politiques peuvent stocker 24h, 7d ou 30d comme choix ; stocker le choix n'active pas le stockage du corps. Si une trace montre un prompt_stored autre que 0, c'est la réponse d'une page à « qu'avez-vous conservé » — et vous pouvez le vérifier vous-même avec jq, comme le montre la page de preuves.

packages/shared/src/db/schema.sql:295 (prompt_stored et les deux colonnes de corps), apps/api/src/inference.mjs:83 (IMPLEMENTED_RETENTION = zero), apps/api/src/inference.mjs:89 (403 retention_exceeds_policy), apps/api/src/inference.mjs:97 (501 retention_not_implemented), docs/product/decisions.md:62 (ADR-003)

Entraînez-vous des modèles sur les données des clients ?

Non — rien dans ce produit n'est en mesure de le faire. Il n'y a aucun chemin de code d'entraînement ou d'affinage dans l'API, le processus web, le routeur ou les paquets partagés. L'API orchestre une requête vers un backend et la mesure ; il n'y a pas d'ingestion de jeux de données, pas de stockage de corpus et pas de tâche d'affinage. Les corps des prompts et des complétions ne sont pas écrits dans la base de données, il n'y a donc même pas de corpus stocké sur lequel entraîner. C'est une affirmation sur notre code, pas sur les données d'entraînement en amont de chaque modèle. Les modèles qui ont été entraînés sur les données d'autres personnes, ou qui divulguent leurs données d'entraînement, sont décrits sur leurs propres fiches, avec sources, et certaines de ces fiches indiquent que les données d'entraînement ne sont pas publiées.

apps/api/src/inference.mjs (tout le chemin de la requête : orchestrer, mesurer, ne jamais conserver), packages/shared/src/db/schema.sql (aucune table de jeux de données ou de corpus), packages/content/models.mjs:196 (une fiche qui indique que les données d'entraînement ne sont pas publiées)

Que se passe-t-il quand aucun point de terminaison ne satisfait ma politique de résidence ?

La requête échoue. Elle n'est pas dégradée vers une région voisine, et elle n'est envoyée nulle part ailleurs : 409 no_endpoint_for_policy, avec la raison dans le corps de l'erreur et les points de terminaison exclus nommés dans la trace. La résidence est appliquée avant le calcul du score, et le basculement ne se déplace jamais en dehors de l'ensemble déjà filtré par le routeur — c'est pourquoi une nouvelle tentative ne peut pas échapper discrètement à la règle que vous avez fixée. Le code le dit en une phrase : « No endpoint satisfies residency {x}. Residency is never relaxed silently. » Que faire : nommer une région ou une classe que votre politique autorise, élargir la politique délibérément (une décision, avec une entrée dans le journal des modifications), ou accepter qu'aucune route n'existe pour ce modèle sous cette règle. Un 409, c'est le produit qui fonctionne comme prévu ; le mode de défaillance qu'il évite est une requête qui « a réussi » quelque part que vous n'avez pas autorisé.

packages/shared/src/errors.mjs:59 (no_endpoint_for_policy), packages/router/src/engine.mjs:370 (l'échec, avant le calcul du score), packages/router/src/engine.mjs:507 (le basculement ne peut pas sortir de l'ensemble filtré), apps/api/src/inference.mjs:137 (la rétention est vérifiée avant le routage)

Est-ce conforme au RGPD ou certifié ?

Nous ne faisons pas cette affirmation, et nous ne la ferons pas — pas « conforme à l'AI Act », pas « certifié », pas « officiel de l'UE ». LLM EU est une entreprise privée. Elle n'est pas une institution de l'UE et pas un organisme d'évaluation de la conformité. « Vérifié » sur ce site signifie documenté, et non certifié juridiquement : c'est une liste de contrôle de divulgation, notée selon qu'une fiche indique sa résidence, son fournisseur, sa version, sa rétention, ses sous-traitants ultérieurs et sa licence, avec des liens. Ce que nous pouvons affirmer, c'est ce que fait le code, et où sont les lacunes : rétention zéro appliquée dans le code ; clés d'API stockées sous forme de hachages scrypt avec le secret affiché une seule fois ; chaque requête client cloisonnée par identifiant d'organisation ; limites de débit par IP, par clé et par organisation ; corps de requête plafonnés et validés. Ce qui n'est pas fait : aucun test d'intrusion indépendant ; aucun audit par un tiers ; la politique de confidentialité et les conditions sont des résumés ; l'accord de traitement des données est un modèle non relu et non signé ; l'inventaire des sous-traitants ultérieurs est incomplet. La page de sécurité et l'index juridique énumèrent ces lacunes dans leurs propres sections ; cette réponse y renvoie plutôt que de les paraphraser en quelque chose de plus édulcoré.

docs/product/decisions.md:115 (ADR-006 — aucune estampille de conformité, dans aucune chaîne), apps/web/server/pages/docs.mjs:537 (SECURITY_COPY : la liste des contrôles et des lacunes), apps/web/server/pages/docs.mjs:643 (LEGAL_READINESS : préparation par document)

L'API est-elle compatible OpenAI, et que doit changer un client ?

L'URL de base, et rien d'autre. /v1/chat/completions accepte la forme de requête officielle et renvoie la forme de réponse officielle — choices, usage, streaming en SSE — de sorte que les SDK officiels fonctionnent après les avoir pointés vers nous. Les champs de corps supplémentaires sont ignorés plutôt que rejetés, un SDK plus récent ne peut donc pas casser une route plus ancienne. Ce qui est ajouté est facultatif et additif : un objet llmeu dans la requête (residency, task, retention, data_class, policy_id, max_usd_per_1m, allow_partners) et un bloc llmeu dans la réponse portant trace_id, model_used, model_version, provider, endpoint_id, inference_region, sovereignty_class, route_reason, policy_id, retention et des estimations de coût. Non proposé, délibérément : /v1/completions (501), n > 1 (400), les embeddings sauf si un modèle d'embedding est réellement hébergé. Le bloc llmeu peut gagner des champs ; en retirer un serait un changement incompatible et apparaîtrait dans le journal des modifications.

docs/product/decisions.md:78 (ADR-004), apps/api/src/app.mjs:554 (la réponse que lit le client), apps/api/src/app.mjs:255 (501 sur /v1/completions), apps/web/server/pages/docs.mjs:403 (le contrat de compatibilité écrit)

Que se passe-t-il s'il n'y a pas de GPU ?

Le MockBackend répond, et il le dit dans sa propre sortie : la complétion nomme le modèle et la région, indique qu'aucun poids réel n'a tourné, et explique comment activer l'inférence en propre (VLLM_BASE_URL, puis l'indicateur gpu_enabled). Sa région est dev-mock, qui n'est pas un lieu, et un appel au mock est gratuit. GET /readyz indique quels backends sont actifs, et la disponibilité n'est pas satisfaite par une ligne de point de terminaison qui se déclare up — un environnement d'exécution géré doit réellement signaler qu'il est sain, parce que tout l'intérêt de cette sonde est de détecter un nœud dont les poids sont encore en cours de chargement. Le registre des backends refuse de substituer le mock à un point de terminaison dont l'environnement d'exécution est vllm ; il lève une erreur à la place. Le résumé honnête est inconfortable et mérite d'être dit clairement : ce déploiement n'a pas de GPU, donc un appel ici est une démonstration du pipeline, pas une exécution de modèle. Un succès du mock est un succès sur le réseau ; il n'est jamais présenté comme une exécution réelle de modèle.

packages/inference/src/mock.mjs:49 (la réponse qui nomme le mock), apps/api/src/app.mjs:157 (la disponibilité inclut les backends gérés), docs/product/decisions.md:131 (ADR-007 — le registre refuse de simuler un environnement d'exécution GPU)

Que signifie une fiche de modèle marquée catalogue_only ?

Cela signifie que nous cataloguons le modèle et ne le servons pas. La fiche est une information de référence — fournisseur, licence, fenêtre de contexte, lieu d'exécution annoncé par le fournisseur, sources pour chaque chiffre — et aucun point de terminaison LLM EU n'y répond. Demandez-le à l'API et vous obtenez 404 hosted_unavailable, avec la note « catalogue only — not hosted on LLM EU yet » ; une page qui lui est consacrée n'indique aucun prix, parce qu'un prix pour quelque chose que personne ne peut appeler est une affirmation sans rien derrière. Les requêtes vers ce modèle vont directement à son fournisseur, selon les propres conditions de celui-ci, et la fiche de modèle dit exactement cela. Le badge inverse n'est pas non plus une promesse plus forte : un modèle que nous hébergeons est hébergé dans une région nommée avec une classe de souveraineté nommée, et c'est l'affirmation que vous pouvez vérifier dans la trace. Aucun des deux badges n'est une déclaration de conformité.

packages/router/src/engine.mjs:325 (le routeur rejette le type), apps/api/src/app.mjs:235 (404 hosted_unavailable avec la note), apps/web/server/pages/docs.mjs:446 (la tarification ignore catalogue_only)

Comment fonctionnent la tarification et le crédit aujourd'hui ?

Les prix sont par million de tokens en entrée et en sortie, stockés par point de terminaison et affichés sur la page de tarification et les fiches de modèles, en EUR, dérivés d'un seul taux USD publié ; le grand livre lui-même stocke des micros USD et inscrit le taux sur chaque ligne, de sorte qu'une facture passée peut être reconstruite exactement. Chaque complétion renvoie cost_estimate_usd et cost_estimate_eur, et une trace enregistre le coût dans les deux. Les limites de politique — un plafond par million et un plafond journalier — sont vérifiées avant le routage, une requête hors budget est donc refusée plutôt que lancée. Les paiements par carte ne sont pas activés sur ce déploiement, et rien n'ajoute de crédit automatiquement : il n'y a pas d'exécution de facturation ni de chemin de crédit opérateur pour l'instant. La console indique ce qui a été dépensé et ce qui reste. Si un indicateur stripe_enabled est activé, le gestionnaire de crédit accepte un montant transmis sans vérifier qu'un paiement a eu lieu — c'est pourquoi l'indicateur doit rester désactivé jusqu'à ce que la vérification des paiements soit implémentée et testée, et c'est pourquoi nous le disons ici plutôt que de proposer un bouton de paiement.

docs/product/decisions.md:148 (ADR-008 — micros stockés, EUR affichés), apps/api/src/inference.mjs:457 (estimations de coût par requête), apps/web/server/pages/docs.mjs:463 (la page de tarification indique que les paiements sont désactivés), apps/web/server/pages/docs.mjs:559 (le gestionnaire de crédit ne vérifie pas le paiement)

Pouvons-nous l'héberger nous-mêmes ?

Pas par ce que nous livrons aujourd'hui. Il n'y a pas de distribution auto-hébergée : pas d'image de conteneur, pas d'installateur, pas de licence sur site, pas de contrat de support pour l'exploiter dans votre propre environnement, et ce dépôt n'est pas proposé comme déploiement pris en charge. La surface d'équipe de la console existe, mais les rôles d'organisation ne constituent pas un contrôle d'accès complet basé sur les rôles, et c'est documenté plutôt que passé sous silence. Ce que le catalogue porte, c'est une classe de résidence appelée on_prem_customer — « le modèle s'exécute dans une infrastructure contrôlée par le client » — et c'est une classification de la propriété et de l'exploitation d'un point de terminaison, pas une offre de notre part. Beaucoup de modèles du catalogue publient des poids ouverts, et leurs licences (certaines non commerciales, certaines réservées à la recherche) figurent sur les fiches avec un lien, ce qui vous permet d'évaluer leur exécution par vous-même ; c'est une décision portant sur les poids de quelqu'un d'autre et la licence de quelqu'un d'autre, pas un produit d'auto-hébergement de LLM EU. Pour une discussion sur site, la page entreprise est la bonne porte, et il est honnête que l'accord n'existe pas encore.

packages/router/src/engine.mjs:12 (on_prem_customer n'apparaît que dans les correspondances de résidence), packages/shared/src/catalog-schema.mjs:84 (sa définition), apps/web/server/pages/docs.mjs:517 (RBAC incomplet, dit tel quel), packages/content/models.mjs:695 (une licence de poids ouverts sur une fiche)

Si une réponse ici est fausse, c'est un défaut et nous le traitons comme tel. Là où le code et cette page sont en désaccord, c'est le code qui l'emporte — et la page de preuves, la page de sécurité et l'index juridique sont les endroits où nous gardons le reste des détails inconfortables plutôt que de les répéter dix fois.

Questions auxquelles cette page ne répond pas : mail@llmeu.com

Preuves et vérification · Sécurité · Mentions légales · Accessibilité