AI-integraties
fremforge levert drie AI-functies aan de serverkant: AI-PR-review, uitleg bij Renovate-updates van afhankelijkheden en een door de klant aanroepbare AI-gateway op POST /_app/api/v1/orgs/<slug>/ai/complete. Alle drie werken volgens het BYOK-model (bring your own key): de klant kiest een AI-leverancier, plakt een API-sleutel van die leverancier in de beheer-UI, en fremforge stuurt de aanroepen door met audit en registratie van de kosten. De leverancier is de eigen verwerker van de klant onder het contract van de klant, geen subverwerker van fremverk (zie de trustpagina en DPA-bijlage B §B.8).
Waar de aanroepen heen gaan. Elke aanroep naar je provider verlaat fremforge alleen via een beperkte uitgaande proxy, en alleen naar de host van de provider zoals die is gecontroleerd en vastgepind toen je de provider opsloeg: een https-adres met een DNS-naam, nooit een IP-adres of een privé-, intern of link-local adres. Doorverwijzingen worden niet gevolgd. Een aanroep naar een andere host wordt geweigerd, schakelt de functie uit en wordt vastgelegd in het auditlog (ai.feature.auto_disabled). De proxy ziet alleen de host en poort van de versleutelde verbinding, nooit de prompt of het antwoord.
Deze pagina is de naslag voor beheerders van die configuratie. Voor de AI-hulpmiddelen aan de kant van de ontwikkelaar (Claude Code, Cursor, Continue, JetBrains AI die met een PAT rechtstreeks met fremforge praten) zie AI in je IDE: ander publiek, ander oppervlak, ander verhaal over soevereiniteit.
Wat je configureert
Alles hieronder staat op /<org>/_admin/ai-integrations.
Providers
Een “provider” is één account bij een AI-leverancier. De klant voegt er zoveel toe als nodig (gebruikelijk: één voor productie, één voor staging met een goedkoper model). Elke rij bevat:
- Label: een leesbare naam (bijv.
anthropic-prod). Vaste identiteit die in de beheer-UI en de tevredenheidsscores wordt gebruikt. - Leverancier + adapter: de identiteit van de leverancier (
anthropic/openai/azure-openai/mistral/vertex-gemini/custom) bepaalt welke adapter de aanroep afhandelt (openai-compatible/anthropic/vertex-gemini). - Basis-URL + Standaardmodel: endpoint van de leverancier + modelidentificatie.
- API-sleutel: in rust versleuteld met AES-256-GCM onder een T Cloud Public DEW KMS-root, met een AAD-binding per rij. De platte tekst bestaat alleen op het moment van een aanroep naar de leverancier.
- Directe test: bij het opslaan roept fremforge met de sleutel het endpoint van de leverancier aan dat de modellen opsomt (of een gelijkwaardig endpoint). Een rode badge op de rij betekent dat de sleutel niet geldig bleek. De badge wordt ook rood wanneer de leverancier de sleutel bij een echte aanroep weigert (HTTP 401 of 403), bijvoorbeeld nadat de sleutel bij de leverancier is ingetrokken, zodat de rij nooit een oude geslaagde test blijft tonen. Sla je de provider opnieuw op, dan wordt de sleutel opnieuw getest en verdwijnt de badge.
Wie elke leverancier beheert
Elke tegel van een leverancier, en elke provider die je hebt toegevoegd, laat zien wie hem beheert. De API meldt hetzelfde als operator_jurisdiction op elk providerobject.
| Leverancier | Beheerd |
|---|---|
| Mistral | Door de EU beheerd |
| Scaleway Generative APIs | Door de EU beheerd |
| Azure OpenAI | Door de VS beheerd, ook als de resource in een EU-regio staat |
| Anthropic | Door de VS beheerd |
| OpenAI | Door de VS beheerd |
| Google Vertex Gemini | Door de VS beheerd |
| Custom | Hangt af van het endpoint: de URL die je invult, bepaalt het |
Een door de VS beheerde leverancier wordt gerund door een Amerikaans bedrijf, dus Amerikaanse wetgeving kan toegang eisen tot de gegevens die het verwerkt, ook als die gegevens in de EU zijn opgeslagen. Zie de verwerkersovereenkomst §11.3 en bijlage B §B.8.
Standaardinstellingen per functie
Vijf functies, elk één rij in de tabel ai_feature_defaults:
| Functie | Wat het doet |
|---|---|
| pr-review | Plaatst bij elke nieuwe PR een gestructureerd AI-reviewcommentaar. Commitstatus van pending naar success / warning. |
| renovate-explanation | Voegt uitleg over CVE’s en brekende wijzigingen toe aan PR’s van Renovate die afhankelijkheden bijwerken. |
| workflow-callable | Routeert het door de klant aanroepbare endpoint POST /_app/api/v1/orgs/<slug>/ai/complete. |
| autofix | Stelt een pull request met een fix voor bij een gecureerde SAST-bevinding wanneer iemand op AI-fix klikt (AI-fix). Vereist ook dat AI-fixes zijn ingeschakeld in de SAST-instellingen; die staan standaard uit. |
| active-work-semantic | Semantische matching voor Active work: vraagt je provider of twee stukken lopend werk in dezelfde repository hetzelfde werk zijn. Verstuurt titels, het begin van beschrijvingen, branchnamen en mappen op het hoogste niveau, nooit code; een veld waarin een credential staat, wordt weggelaten. Vereist dat Active work aanstaat en een provider met een vastgepinde host; alleen in de console in te schakelen, en uit tot een eigenaar van de organisatie het inschakelt. |
Elke functie staat uit tot je haar aanzet. Een provider toevoegen schakelt niets in: een functie draait alleen waar haar rij enabled=true zegt (vink Ingeschakeld aan en sla op, of PUT /_app/api/v1/orgs/<slug>/ai/feature-defaults/<feature>). De console toont elke functie als Aan of Uit. Een rij kan ook de provider en een afwijkend model kiezen; is er geen provider gekozen, dan gebruikt een ingeschakelde functie je nieuwste actieve provider.
Tot 2026-10-19 gebruikte een functie zonder opgeslagen standaardinstelling je nieuwste provider, zodat het toevoegen van een provider elke functie inschakelde, AI-PR-review inbegrepen. Dat is niet meer zo.
Uitzonderingen per repository
De klant kan de standaardinstelling van een functie voor één repository overschrijven, bijvoorbeeld AI-review uitschakelen op een gevoelige repository, het alleen voor één repository inschakelen, of een gereguleerde repository aan een ander model vastpinnen.
Of een functie draait voor een repository: de rij in ai_repo_overrides voor (tenant, repo_full_name, feature) als die er is, anders de rij in ai_feature_defaults voor (tenant, feature), anders uit. Voor een functie die uitstaat, wordt niets hieronder geraadpleegd, ook geen provideroverride per aanroep.
Welke provider ze gebruikt, in AiGateway.resolveProvider():
provider_override/model_overrideper aanroep (body van het workflowverzoek)- De provider van de uitzondering voor de repository
- De provider van de standaardinstelling van de functie
- Terugvaloptie: de nieuwste actieve provider van de tenant
Workflows die AI gebruiken
Dagelijks loopt de cronjob /jobs/sha-pin-scan door elke workflow-YAML onder .forgejo/workflows/, .gitea/workflows/ en .github/workflows/ en herkent hij:
- Een blokannotatie
# fremforge-ai:dieprovider:+model:declareert - Elke directe aanroep van
/_app/api/v1/orgs/<slug>/ai/complete
Beide signalen voeden het beheeronderdeel “Workflows die AI gebruiken”. Gebruik het om kosten te voorspellen, soevereiniteit te auditen en het roteren van sleutels te plannen.
Formaat van de annotatie:
# 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":"…"}]}'Gebruiksoverzicht
Maandelijkse aggregatie van ai_usage_events: verzoeken, tokens in en tokens uit per tenant. Het geschatte bedrag in euro’s is momenteel null; het opzoeken van prijzen per leverancier is gepland. De factuur van de leverancier is de bron van waarheid voor de kosten; het overzicht van fremforge is bedoeld om te voorspellen en de kosten per (provider, model) te sturen.
Feedback op reviews
Tevredenheidsscore per (provider, model) op basis van 👍 / 👎-reacties op AI-PR-reviewcommentaren. Wordt na het plaatsen van elk commentaar 14 dagen lang dagelijks bij Forgejo opgevraagd. Onder 70% wordt de score rood: overweeg dan een ander model of een herschreven prompt.
Zacht falen
AI-functies blokkeren nooit een PR. Elke manier van falen leidt tot een zachte foutafhandeling:
| Reden | Status | Wat je ziet |
|---|---|---|
no_provider | 503 | (niets: de functie staat uit voor deze tenant) |
invalid_key | 502 | Commitstatus-waarschuwing: “AI provider key invalid — re-add under AI integrations” |
rate_limited | 429 | Commitstatus-waarschuwing: “AI review queued — retrying on next push” |
over_cap | 402 | Commitstatus-waarschuwing: “AI quota exhausted this month” |
vendor_error | 502 | Commitstatus-waarschuwing: “AI review unavailable; retry on next push” |
timeout | 504 | Commitstatus-waarschuwing: “AI review timed out” |
De CI en de mergeroute van een klant worden door geen enkele AI-fout geraakt; alleen het door AI gegenereerde commentaar ontbreekt.
PAT-scope
Het door de klant aanroepbare POST /_app/api/v1/orgs/<slug>/ai/complete vereist een PAT met de scope ai:invoke. Maak er een aan op /-/settings/tokens; kies een maximale geldigheid van 90 dagen; geef hem mee als Authorization: Bearer ffp_…. De tokenkosten komen op de rekening van de leverancier van de geconfigureerde provider, niet op de vergoedingen van fremforge.
Fase 2: kant-en-klare AIFS
Een kant-en-klaar abonnement waarbij fremverk een AIFS-Germany-account aanhoudt en tokens per gebruiker factureert, staat op de roadmap (6–18 maanden; afhankelijk van of de AIFS-catalogus een op code getraind model levert dat goed genoeg is voor PR-review). Komt dat er, dan blijft de BYOK-route beschikbaar; resolveProvider() van de gateway kijkt dan eerst naar een vlag voor het kant-en-klare abonnement.
AI overal uitschakelen
Wil je AI om welke reden dan ook voor de hele tenant uitzetten: zet elke rij in ai_feature_defaults op enabled=false (een functie zonder rij staat al uit) en verwijder elke uitzondering per repository die een functie inschakelt. Neem contact op met support om AI voor je tenant op het hele platform uit te schakelen.
Gerelateerd
- Trustpagina: gegevensstroom van AI-integraties: het artikel over soevereiniteit voor klanten
- DPA-bijlage B §B.8: de contractuele basis voor het standpunt dat een BYOK-leverancier geen subverwerker is
- Snelstarts per IDE-tool: AI-hulpmiddelen voor ontwikkelaars
- OpenAPI-specificatie:
POST /orgs/{org}/ai/completestaat beschreven ondertags: [AI]