feat: add Gemini and Bedrock model providers
Add native GeminiClient using @google/generative-ai SDK and BedrockClient using @aws-sdk/client-bedrock-runtime. Replace the previous Gemini fallback (OpenAI-compatible shim) with the real implementation. Add OpenRouter as a provider option (OpenAI-compatible with custom baseURL). Update model costs, doctor CLI checks, and client factory tests.
This commit is contained in:
@@ -4,6 +4,8 @@ import { AnthropicClient } from '../models/anthropic.js';
|
||||
import { OpenAIClient } from '../models/openai.js';
|
||||
import { OllamaClient } from '../models/local/ollama.js';
|
||||
import { LlamaCppClient } from '../models/local/llamacpp.js';
|
||||
import { GeminiClient } from '../models/gemini.js';
|
||||
import { BedrockClient } from '../models/bedrock.js';
|
||||
|
||||
describe('createClientFromConfig', () => {
|
||||
it('creates AnthropicClient for anthropic provider', () => {
|
||||
@@ -59,14 +61,13 @@ describe('createClientFromConfig', () => {
|
||||
expect(client).toBeInstanceOf(LlamaCppClient);
|
||||
});
|
||||
|
||||
it('creates OpenAI-compatible client for gemini provider (with warning)', () => {
|
||||
it('creates GeminiClient for gemini provider', () => {
|
||||
const client = createClientFromConfig({
|
||||
provider: 'gemini',
|
||||
model: 'gemini-2.5-pro',
|
||||
api_key: 'test-key',
|
||||
});
|
||||
// Gemini falls back to OpenAI-compatible client
|
||||
expect(client).toBeInstanceOf(OpenAIClient);
|
||||
expect(client).toBeInstanceOf(GeminiClient);
|
||||
});
|
||||
|
||||
it('throws for unknown provider', () => {
|
||||
@@ -75,4 +76,21 @@ describe('createClientFromConfig', () => {
|
||||
model: 'test',
|
||||
})).toThrow('Unknown model provider: unknown');
|
||||
});
|
||||
|
||||
it('creates OpenAIClient with OpenRouter baseURL for openrouter provider', () => {
|
||||
const client = createClientFromConfig({
|
||||
provider: 'openrouter',
|
||||
model: 'meta-llama/llama-3.1-70b',
|
||||
api_key: 'test-key',
|
||||
});
|
||||
expect(client).toBeInstanceOf(OpenAIClient);
|
||||
});
|
||||
|
||||
it('creates BedrockClient for bedrock provider', () => {
|
||||
const client = createClientFromConfig({
|
||||
provider: 'bedrock',
|
||||
model: 'anthropic.claude-3-sonnet',
|
||||
});
|
||||
expect(client).toBeInstanceOf(BedrockClient);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user