All files / core/ai-providers index.ts

0% Statements 0/18
0% Branches 0/8
0% Functions 0/1
0% Lines 0/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42                                                                                   
// Copyright 2026 ForgeKit Contributors
// SPDX-License-Identifier: Apache-2.0
// https://github.com/SubhanshuMG/ForgeKit
import { AIProvider } from '../../types';
import { loadConfig } from '../config';
import { OpenAIProvider } from './openai';
import { AnthropicProvider } from './anthropic';
 
export function getAIProvider(): AIProvider {
  const config = loadConfig();
 
  // Check env vars first (preferred), then config
  const openaiKey = process.env.OPENAI_API_KEY;
  const anthropicKey = process.env.ANTHROPIC_API_KEY;
 
  // Prefer config-specified provider if both keys exist
  const preferred = config.ai?.provider;
  const model = config.ai?.model;
 
  Iif (preferred === 'anthropic' && anthropicKey) {
    return new AnthropicProvider(anthropicKey, model);
  }
  Iif (preferred === 'openai' && openaiKey) {
    return new OpenAIProvider(openaiKey, model);
  }
 
  // Auto-detect: prefer Anthropic if available
  Iif (anthropicKey) {
    return new AnthropicProvider(anthropicKey, model);
  }
  Iif (openaiKey) {
    return new OpenAIProvider(openaiKey, model);
  }
 
  throw new Error(
    'No AI provider configured. Set OPENAI_API_KEY or ANTHROPIC_API_KEY environment variable.\n\n' +
    '  export OPENAI_API_KEY=sk-...\n' +
    '  # or\n' +
    '  export ANTHROPIC_API_KEY=sk-ant-...\n'
  );
}