feat: add Google Gemini provider integration and docs

This commit is contained in:
2025-05-28 12:13:29 +02:00
parent aa2fd98cc1
commit 5da37f388f
9 changed files with 1015 additions and 87 deletions

View File

@@ -6,12 +6,13 @@
import type { AIProviderConfig } from '../types/index.js';
import { ClaudeProvider, type ClaudeConfig } from '../providers/claude.js';
import { OpenAIProvider, type OpenAIConfig } from '../providers/openai.js';
import { GeminiProvider, type GeminiConfig } from '../providers/gemini.js';
import { BaseAIProvider } from '../providers/base.js';
/**
* Supported AI provider types
*/
export type ProviderType = 'claude' | 'openai';
export type ProviderType = 'claude' | 'openai' | 'gemini';
/**
* Configuration map for different provider types
@@ -19,6 +20,7 @@ export type ProviderType = 'claude' | 'openai';
export interface ProviderConfigMap {
claude: ClaudeConfig;
openai: OpenAIConfig;
gemini: GeminiConfig;
}
/**
@@ -36,6 +38,8 @@ export function createProvider<T extends ProviderType>(
return new ClaudeProvider(config as ClaudeConfig);
case 'openai':
return new OpenAIProvider(config as OpenAIConfig);
case 'gemini':
return new GeminiProvider(config as GeminiConfig);
default:
throw new Error(`Unsupported provider type: ${type}`);
}
@@ -73,6 +77,22 @@ export function createOpenAIProvider(
});
}
/**
* Create a Gemini provider with simplified configuration
* @param apiKey - Google AI API key
* @param options - Optional additional configuration
* @returns Configured Gemini provider instance
*/
export function createGeminiProvider(
apiKey: string,
options: Partial<Omit<GeminiConfig, 'apiKey'>> = {}
): GeminiProvider {
return new GeminiProvider({
apiKey,
...options
});
}
/**
* Provider registry for dynamic provider creation
*/
@@ -122,4 +142,5 @@ export class ProviderRegistry {
// Pre-register built-in providers
ProviderRegistry.register('claude', ClaudeProvider);
ProviderRegistry.register('openai', OpenAIProvider);
ProviderRegistry.register('openai', OpenAIProvider);
ProviderRegistry.register('gemini', GeminiProvider);