Unveränderter Stand von certvia/dev (a48c5fb) plus Craftvia-Spezifikation und Brandbook unter docs/craftvia/. ISMS-Module werden im Folgecommit entfernt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
42 lines
1.7 KiB
TypeScript
42 lines
1.7 KiB
TypeScript
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;
|
|
}
|