Basis: Certvia dev@a48c5fb als Fundament für Craftvia
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>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user