33 lines
918 B
TypeScript
33 lines
918 B
TypeScript
|
|
/**
|
||
|
|
* Anthropic SDK singleton.
|
||
|
|
*
|
||
|
|
* Lazy: the client is constructed on first access so importing this module is
|
||
|
|
* cheap and doesn't require ANTHROPIC_API_KEY to be set at boot. Throws on
|
||
|
|
* first use if the env var is missing.
|
||
|
|
*/
|
||
|
|
|
||
|
|
import Anthropic from '@anthropic-ai/sdk';
|
||
|
|
|
||
|
|
let instance: Anthropic | null = null;
|
||
|
|
|
||
|
|
export function getAnthropicClient(): Anthropic {
|
||
|
|
if (instance) return instance;
|
||
|
|
const apiKey = process.env.ANTHROPIC_API_KEY;
|
||
|
|
if (!apiKey) {
|
||
|
|
throw new Error(
|
||
|
|
'ANTHROPIC_API_KEY is not set. The AI Ticket Analyzer cannot run without it.'
|
||
|
|
);
|
||
|
|
}
|
||
|
|
instance = new Anthropic({ apiKey });
|
||
|
|
return instance;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function isAnthropicConfigured(): boolean {
|
||
|
|
return !!process.env.ANTHROPIC_API_KEY;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** Test-only: replace the singleton (e.g. with a vitest-mocked client). */
|
||
|
|
export function _setAnthropicClientForTests(client: Anthropic | null): void {
|
||
|
|
instance = client;
|
||
|
|
}
|