Intégrations IA
fremforge propose trois fonctionnalités d’IA côté serveur : la revue de PR par IA, les explications des mises à jour de dépendances Renovate et une passerelle IA appelable par le client sur POST /_app/api/v1/orgs/<slug>/ai/complete. Toutes trois reposent sur le modèle BYOK (« bring your own key », apportez votre propre clé) : le client choisit un fournisseur d’IA, colle une clé d’API du fournisseur dans l’interface d’administration, et fremforge relaie les appels en assurant l’audit et le suivi des dépenses. Le fournisseur est le sous-traitant propre du client, sous le contrat du client, et non un sous-traitant ultérieur de fremverk (voir la page de confiance et l’annexe B §B.8 du DPA).
Où vont les appels. Chaque appel vers votre fournisseur ne quitte fremforge que par un proxy sortant restreint, et uniquement vers l’hôte du fournisseur tel qu’il a été vérifié et épinglé lorsque vous avez enregistré le fournisseur : une adresse https avec un nom DNS, jamais une adresse IP ni une adresse privée, interne ou link-local. Les redirections ne sont pas suivies. Un appel vers tout autre hôte est refusé, désactive la fonctionnalité et est consigné dans le journal d’audit (ai.feature.auto_disabled). Le proxy ne voit que l’hôte et le port de la connexion chiffrée, jamais le prompt ni la réponse.
Cette page est la référence destinée aux administrateurs pour cette configuration. Pour l’outillage IA côté développeur (Claude Code, Cursor, Continue, JetBrains AI qui dialoguent directement avec fremforge à l’aide d’un PAT), consultez get-started/ai-in-your-ide/ : public différent, surface différente, approche de la souveraineté différente.
Ce que vous configurez
Tout ce qui suit se trouve sur /<org>/_admin/ai-integrations.
Fournisseurs
Un « fournisseur » correspond à un compte chez un fournisseur d’IA. Le client en ajoute autant qu’il le souhaite (cas typique : un pour la production, un pour la préproduction avec un modèle moins cher). Chaque ligne comporte :
- Libellé : nom lisible (par exemple
anthropic-prod). Identité stable utilisée dans l’interface d’administration et dans les scores de satisfaction. - Fournisseur + Adaptateur : l’identité du fournisseur (
anthropic/openai/azure-openai/mistral/vertex-gemini/custom) détermine l’adaptateur qui traite l’appel (openai-compatible/anthropic/vertex-gemini). - URL de base + Modèle par défaut : point d’accès du fournisseur et identifiant du modèle.
- Clé d’API : chiffrée au repos en AES-256-GCM avec une racine KMS T Cloud Public DEW, avec une liaison AAD propre à chaque ligne. Le texte en clair n’est obtenu qu’au moment d’un appel au fournisseur.
- Test intégré : à l’enregistrement, fremforge appelle avec la clé le point d’accès de liste des modèles du fournisseur (ou son équivalent). Un badge rouge sur la ligne signifie que la clé n’a pas été validée. Le badge passe aussi au rouge lorsque le fournisseur refuse la clé (HTTP 401 ou 403) lors d’un appel réel, par exemple après la révocation de la clé chez le fournisseur ; la ligne n’affiche donc jamais un ancien test réussi. Enregistrer de nouveau le fournisseur teste à nouveau la clé et efface le badge.
Qui exploite chaque fournisseur
Chaque vignette de fournisseur, ainsi que chaque fournisseur que vous avez ajouté, indique qui l’exploite. L’API renvoie la même information dans operator_jurisdiction sur chaque objet fournisseur.
| Fournisseur | Exploitation |
|---|---|
| Mistral | Exploité dans l’UE |
| Scaleway Generative APIs | Exploité dans l’UE |
| Azure OpenAI | Exploité aux États-Unis, y compris lorsque la ressource se trouve dans une région de l’UE |
| Anthropic | Exploité aux États-Unis |
| OpenAI | Exploité aux États-Unis |
| Google Vertex Gemini | Exploité aux États-Unis |
| Custom | Dépend du point d’accès : l’URL que vous saisissez en décide |
Un fournisseur exploité aux États-Unis est géré par une entreprise américaine ; le droit américain peut donc exiger l’accès aux données qu’il traite, même lorsque ces données sont stockées dans l’UE. Voir le Data Processing Agreement §11.3 et l’annexe B §B.8.
Valeurs par défaut des fonctionnalités
Cinq fonctionnalités, une ligne chacune dans la table ai_feature_defaults :
| Fonctionnalité | Rôle |
|---|---|
| pr-review | Publie un commentaire de revue IA structuré sur chaque nouvelle PR. Statut de commit en attente → succès / avertissement. |
| renovate-explanation | Ajoute des explications sur les CVE et les changements incompatibles aux PR de mise à jour de dépendances créées par Renovate. |
| workflow-callable | Achemine le point d’accès appelable par le client POST /_app/api/v1/orgs/<slug>/ai/complete. |
| autofix | Propose une pull request de correctif pour un résultat SAST sélectionné lorsqu’une personne clique sur Correctif IA (Correctif IA). Nécessite aussi que les correctifs IA soient activés dans les paramètres SAST, où ils sont désactivés par défaut. |
| active-work-semantic | Rapprochement sémantique pour le Travail en cours : demande à votre fournisseur si deux travaux en cours dans le même dépôt sont le même travail. Envoie les titres, le début des descriptions, les noms de branches et les dossiers de premier niveau, jamais de code ; un champ contenant un identifiant secret est omis. Nécessite que le Travail en cours soit activé et un fournisseur dont l’hôte est épinglé ; s’active uniquement dans la console, et reste désactivé tant qu’un propriétaire de l’organisation ne l’active pas. |
Chaque fonctionnalité est désactivée tant que vous ne l’activez pas. Ajouter un fournisseur n’active rien : une fonctionnalité ne s’exécute que là où sa ligne indique enabled=true (cochez Activé puis enregistrez, ou PUT /_app/api/v1/orgs/<slug>/ai/feature-defaults/<feature>). La console affiche chaque fonctionnalité comme Activée ou Désactivée. Une ligne peut aussi choisir le fournisseur et un modèle de remplacement ; si aucun fournisseur n’est choisi, une fonctionnalité activée utilise votre fournisseur actif le plus récent.
Jusqu’au 2026-10-19, une fonctionnalité sans valeur par défaut enregistrée utilisait votre fournisseur le plus récent : ajouter un fournisseur activait donc toutes les fonctionnalités, y compris la revue de PR par IA. Ce n’est plus le cas.
Dérogations par dépôt
Le client peut déroger à la valeur par défaut d’une fonctionnalité pour un seul dépôt : par exemple, désactiver la revue IA sur un dépôt sensible, l’activer pour un seul dépôt, ou épingler un dépôt réglementé sur un autre modèle.
Si une fonctionnalité s’exécute pour un dépôt : la ligne ai_repo_overrides pour (tenant, repo_full_name, feature) si elle existe, sinon la ligne ai_feature_defaults pour (tenant, feature), sinon désactivée. Rien de ce qui suit n’est consulté pour une fonctionnalité désactivée, pas même une dérogation de fournisseur par appel.
Quel fournisseur elle utilise, dans AiGateway.resolveProvider() :
provider_override/model_overridepar appel (corps de la requête du workflow)- Le fournisseur de la dérogation du dépôt
- Le fournisseur de la valeur par défaut de la fonctionnalité
- Repli : le fournisseur actif le plus récent du tenant
Workflows utilisant l’IA
Chaque jour, la tâche planifiée /jobs/sha-pin-scan parcourt chaque fichier YAML de workflow sous .forgejo/workflows/, .gitea/workflows/ et .github/workflows/ et détecte :
- Une annotation de bloc
# fremforge-ai:déclarantprovider:+model: - Tout appel direct à
/_app/api/v1/orgs/<slug>/ai/complete
Ces deux signaux alimentent la section d’administration « Workflows utilisant l’IA ». Servez-vous-en pour prévoir les dépenses, auditer la souveraineté et planifier les rotations de clés.
Format de l’annotation :
# fremforge-ai:
# provider: anthropic-prod
# model: claude-opus-4-7
name: ai-summary
on:
pull_request:
types: [opened]
jobs:
summarize:
runs-on: fremforge
steps:
- name: Call AI
run: |
curl -sf https://frem.sh/_app/api/v1/orgs/<org>/ai/complete \
-H "authorization: Bearer $FREMFORGE_TOKEN" \
-H "content-type: application/json" \
-d '{"messages":[{"role":"user","content":"…"}]}'Consommation agrégée
Agrégation mensuelle de ai_usage_events : requêtes, jetons en entrée et jetons en sortie par tenant. Le montant estimé en euros vaut actuellement null ; une table de tarifs par fournisseur est prévue. La facture du fournisseur fait foi pour les coûts : l’agrégation de fremforge sert à la prévision et à l’analyse des coûts par couple (fournisseur, modèle).
Retours sur les revues
Score de satisfaction par couple (fournisseur, modèle), calculé à partir des réactions 👍 / 👎 sur les commentaires de revue de PR par IA. Interrogé quotidiennement auprès de Forgejo pendant 14 jours après la publication de chaque commentaire. En dessous de 70 %, il s’affiche en rouge : envisagez de changer de modèle ou de réécrire le prompt.
Échecs sans blocage
Les fonctionnalités d’IA ne bloquent jamais une PR. Chaque mode de défaillance correspond à un échec sans blocage :
| Raison | Statut | Comportement |
|---|---|---|
no_provider | 503 | (silencieux : la fonctionnalité est désactivée pour ce tenant) |
invalid_key | 502 | Avertissement dans le statut de commit : “AI provider key invalid — re-add under AI integrations” |
rate_limited | 429 | Avertissement dans le statut de commit : “AI review queued — retrying on next push” |
over_cap | 402 | Avertissement dans le statut de commit : “AI quota exhausted this month” |
vendor_error | 502 | Avertissement dans le statut de commit : “AI review unavailable; retry on next push” |
timeout | 504 | Avertissement dans le statut de commit : “AI review timed out” |
Le chemin de CI et de fusion du client n’est affecté par aucune défaillance de l’IA : seul le commentaire généré par l’IA est absent.
Portée du PAT
Le point d’accès appelable par le client POST /_app/api/v1/orgs/<slug>/ai/complete exige un PAT portant la portée ai:invoke. Créez-le sur /-/settings/tokens ; choisissez une durée de vie maximale de 90 jours ; transmettez-le sous la forme Authorization: Bearer ffp_…. La consommation de jetons est facturée par le fournisseur configuré, pas dans les frais fremforge.
Phase 2 : AIFS clé en main
Une offre clé en main, dans laquelle fremverk détient un compte AIFS-Germany et facture les jetons par utilisateur, figure sur la feuille de route (6 à 18 mois, sous réserve que le catalogue AIFS propose un modèle adapté au code suffisamment bon pour la revue de PR). Lorsque cette offre arrivera, le chemin BYOK restera disponible ; resolveProvider() dans la passerelle consultera d’abord un indicateur clé en main.
Désactiver l’IA globalement
Si vous devez, pour une raison quelconque, désactiver l’IA pour tout le tenant : passez chaque ligne ai_feature_defaults à enabled=false (une fonctionnalité sans ligne est déjà désactivée) et supprimez toute dérogation par dépôt qui active une fonctionnalité. Pour désactiver l’IA à l’échelle de la plateforme pour votre tenant, contactez le support.
Voir aussi
- Page de confiance : flux de données des intégrations IA : l’article sur la souveraineté destiné aux clients
- Annexe B §B.8 du DPA : le support contractuel de la position « BYOK, pas un sous-traitant ultérieur »
- Démarrages rapides par outil d’IDE : outillage IA côté développeur
- Spécification OpenAPI :
POST /orgs/{org}/ai/completeest documenté soustags: [AI]