# KI-Anbieter für das Abgabe-Inserat (FEAT-12a) `POST /gerbils/sale-ad` spricht einen beliebigen **OpenAI-kompatiblen** Chat-Completions-Endpunkt an — kein SDK, nur drei Einstellungen (Sektion `AI`), gesetzt als **Umgebungsvariablen oder user-secrets, niemals in appsettings committen**. Fehlt eine der drei, antwortet der Endpunkt mit `503 {code:"AiKeyMissing"}` und die Oberfläche zeigt den deutschen Hinweis. | Variable | Bedeutung | |---|---| | `AI__BaseUrl` | Basis-URL des Anbieters (ohne `/chat/completions`) | | `AI__ApiKey` | API-Schlüssel (Bearer) | | `AI__Model` | Modellname des Anbieters | ## Anbieter-Matrix (alle mit derselben Implementierung getestet) | Anbieter | `AI__BaseUrl` | Beispiel-`AI__Model` | Kosten | |---|---|---|---| | **Google Gemini** (vermutlich Julians Wahl) | `https://generativelanguage.googleapis.com/v1beta/openai` | `gemini-2.0-flash` | Free Tier | | **Groq** | `https://api.groq.com/openai/v1` | `llama-3.3-70b-versatile` | Free Tier | | **Mistral** | `https://api.mistral.ai/v1` | `mistral-small-latest` | Free Tier | | **Ollama** (lokal/TrueNAS) | `http://:11434/v1` | `llama3.2` | kostenlos, lokal | Ollama ignoriert den Schlüssel — `AI__ApiKey=ollama` als Platzhalter setzen (die Einstellung darf nur nicht leer sein). ## Setzen der Variablen **Entwicklung (PowerShell, vor dem AppHost-Start):** ```powershell $env:AI__BaseUrl = 'https://generativelanguage.googleapis.com/v1beta/openai' $env:AI__ApiKey = '' $env:AI__Model = 'gemini-2.0-flash' ``` oder per user-secrets im API-Projekt: `dotnet user-secrets set "AI:ApiKey" "" --project GerbilManagerWebAPI` (usw.). **TrueNAS / Docker Compose** (für Dwights Ops-Doku): im `environment:`-Block des API-Containers — ```yaml services: webapi: environment: AI__BaseUrl: https://generativelanguage.googleapis.com/v1beta/openai AI__ApiKey: ${AI_API_KEY} # Wert in der TrueNAS-App/.env hinterlegen AI__Model: gemini-2.0-flash ```