import Anthropic from "@anthropic-ai/sdk"; /** * Zentrale, gekapselte LLM-Anbindung (Anthropic). Erste und derzeit einzige * Nutzung: KI-Entwurf der Umsetzungsbeschreibungen (VDA-ISA-ABGABE) im * Audit-Wizard. Bewusst als Singleton mit lazy-Init, damit ein fehlender * API-Key den restlichen Serverstart nicht beeinträchtigt. * * Konfiguration ausschließlich über Umgebungsvariablen: * - ANTHROPIC_API_KEY Pflicht für den KI-Betrieb. Fehlt er, ist die * KI-Anbindung deaktiviert (graceful degradation): * `getAnthropic()` liefert `null`, Aufrufer fallen auf * „manuell zu erfassen" zurück. * - ANTHROPIC_MODEL Optionale Modell-ID; Default `claude-opus-5`. * * Das offizielle SDK liest `ANTHROPIC_API_KEY` selbst aus der Umgebung; wir * prüfen die Existenz dennoch explizit, um den Client nur bei vorhandenem Key * zu instanziieren und die Deaktivierung eindeutig zu machen. */ const DEFAULT_MODEL = "claude-opus-5"; /** Modell-ID für KI-Aufrufe (ENV-Override, sonst Default). */ export const AI_MODEL = process.env.ANTHROPIC_MODEL?.trim() || DEFAULT_MODEL; let client: Anthropic | null | undefined; /** True, wenn ein API-Key gesetzt ist und die KI-Anbindung genutzt werden kann. */ export function isAiConfigured(): boolean { return Boolean(process.env.ANTHROPIC_API_KEY?.trim()); } /** * Liefert den (gecachten) Anthropic-Client oder `null`, wenn kein API-Key * konfiguriert ist. Aufrufer müssen den `null`-Fall behandeln (kein Entwurf). */ export function getAnthropic(): Anthropic | null { if (client !== undefined) return client; client = isAiConfigured() ? new Anthropic() : null; return client; }