feat: integrate Google Gemini, MiniMax, and GLM providers; fix persistent agent loading toast
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 1m23s

This commit is contained in:
Antigravity
2026-05-10 22:33:35 +00:00
parent b23829846a
commit cf2786dec4
7 changed files with 278 additions and 5 deletions

View File

@@ -2,11 +2,15 @@ import { OpenAIProvider } from './providers/openai';
import { OllamaProvider } from './providers/ollama';
import { CustomOpenAIProvider } from './providers/custom-openai';
import { AnthropicProvider } from './providers/anthropic';
import { GoogleProvider } from './providers/google';
import { AIProvider } from './types';
type ProviderType =
| 'ollama'
| 'openai'
| 'google'
| 'minimax'
| 'glm'
| 'custom'
| 'deepseek'
| 'openrouter'
@@ -43,6 +47,21 @@ const PROVIDER_DEFAULTS: Record<string, { baseUrl: string; model: string; embedd
model: '',
embeddingModel: '',
},
google: {
baseUrl: '',
model: 'gemini-1.5-flash',
embeddingModel: 'text-embedding-004',
},
minimax: {
baseUrl: 'https://api.minimax.io/v1',
model: 'abab6.5-chat',
embeddingModel: '',
},
glm: {
baseUrl: 'https://open.bigmodel.ai/api/paas/v4',
model: 'glm-4',
embeddingModel: 'embedding-2',
},
};
function createOllamaProvider(config: Record<string, string>, modelName: string, embeddingModelName: string, baseUrlOverride?: string): OllamaProvider {
@@ -156,6 +175,26 @@ function createAnthropicCustomProvider(config: Record<string, string>, modelName
return new AnthropicProvider(apiKey, resolvedModel, baseUrl.trim());
}
function createGoogleProvider(config: Record<string, string>, modelName: string, embeddingModelName: string): GoogleProvider {
const apiKey = config?.GOOGLE_GENERATIVE_AI_API_KEY || process.env.GOOGLE_GENERATIVE_AI_API_KEY || '';
if (!apiKey) throw new Error('GOOGLE_GENERATIVE_AI_API_KEY is required when using Google provider');
return new GoogleProvider(apiKey, modelName || PROVIDER_DEFAULTS.google.model, embeddingModelName || PROVIDER_DEFAULTS.google.embeddingModel);
}
function createMiniMaxProvider(config: Record<string, string>, modelName: string, embeddingModelName: string): CustomOpenAIProvider {
const apiKey = config?.MINIMAX_API_KEY || process.env.MINIMAX_API_KEY || '';
if (!apiKey) throw new Error('MINIMAX_API_KEY is required when using MiniMax provider');
const defaults = PROVIDER_DEFAULTS.minimax;
return new CustomOpenAIProvider(apiKey, defaults.baseUrl, modelName || defaults.model, embeddingModelName || defaults.embeddingModel);
}
function createGLMProvider(config: Record<string, string>, modelName: string, embeddingModelName: string): CustomOpenAIProvider {
const apiKey = config?.GLM_API_KEY || process.env.GLM_API_KEY || '';
if (!apiKey) throw new Error('GLM_API_KEY is required when using GLM provider');
const defaults = PROVIDER_DEFAULTS.glm;
return new CustomOpenAIProvider(apiKey, defaults.baseUrl, modelName || defaults.model, embeddingModelName || defaults.embeddingModel);
}
function getProviderInstance(providerType: ProviderType, config: Record<string, string>, modelName: string, embeddingModelName: string, ollamaBaseUrl?: string): AIProvider {
switch (providerType) {
case 'ollama':
@@ -178,6 +217,12 @@ function getProviderInstance(providerType: ProviderType, config: Record<string,
return createAnthropicProvider(config, modelName);
case 'anthropic_custom':
return createAnthropicCustomProvider(config, modelName);
case 'google':
return createGoogleProvider(config, modelName, embeddingModelName);
case 'minimax':
return createMiniMaxProvider(config, modelName, embeddingModelName);
case 'glm':
return createGLMProvider(config, modelName, embeddingModelName);
default:
return createOllamaProvider(config, modelName, embeddingModelName, ollamaBaseUrl);
}
@@ -196,6 +241,9 @@ function getProviderConfigKeys(providerType: string): { apiKeyConfigKey: string;
case 'anthropic': return { apiKeyConfigKey: 'ANTHROPIC_API_KEY', baseUrlConfigKey: '' };
case 'anthropic_custom':
return { apiKeyConfigKey: 'ANTHROPIC_CUSTOM_API_KEY', baseUrlConfigKey: 'ANTHROPIC_CUSTOM_BASE_URL' };
case 'google': return { apiKeyConfigKey: 'GOOGLE_GENERATIVE_AI_API_KEY', baseUrlConfigKey: '' };
case 'minimax': return { apiKeyConfigKey: 'MINIMAX_API_KEY', baseUrlConfigKey: '' };
case 'glm': return { apiKeyConfigKey: 'GLM_API_KEY', baseUrlConfigKey: '' };
case 'custom': return { apiKeyConfigKey: 'CUSTOM_OPENAI_API_KEY', baseUrlConfigKey: 'CUSTOM_OPENAI_BASE_URL' };
default: return { apiKeyConfigKey: '', baseUrlConfigKey: 'OLLAMA_BASE_URL' };
}