feat(GeminiAgent): expand available Gemini models and update RPM limits
- Added new Gemini model types: 'gemini-2.5-pro', 'gemini-2.0-flash', and 'gemini-2.0-flash-lite'. - Updated RPM limits for existing and new models. - Enhanced model selection logic to validate configured model against available options, with fallback to a default model.
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -25,14 +25,21 @@ import { ModeManager } from '../domain/ModeManager.js';
|
||||
// Gemini API endpoint
|
||||
const GEMINI_API_URL = 'https://generativelanguage.googleapis.com/v1beta/models';
|
||||
|
||||
// Gemini model types (free tier models)
|
||||
export type GeminiModel = 'gemini-2.5-flash-lite' | 'gemini-2.5-flash' | 'gemini-3-flash';
|
||||
// Gemini model types (available via API)
|
||||
export type GeminiModel =
|
||||
| 'gemini-2.5-flash-lite'
|
||||
| 'gemini-2.5-flash'
|
||||
| 'gemini-2.5-pro'
|
||||
| 'gemini-2.0-flash'
|
||||
| 'gemini-2.0-flash-lite';
|
||||
|
||||
// Free tier RPM limits by model (requests per minute)
|
||||
const GEMINI_RPM_LIMITS: Record<GeminiModel, number> = {
|
||||
'gemini-2.5-flash-lite': 10,
|
||||
'gemini-2.5-flash': 5,
|
||||
'gemini-3-flash': 5,
|
||||
'gemini-2.5-flash': 10,
|
||||
'gemini-2.5-pro': 5,
|
||||
'gemini-2.0-flash': 15,
|
||||
'gemini-2.0-flash-lite': 30,
|
||||
};
|
||||
|
||||
// Track last request time for rate limiting
|
||||
@@ -246,8 +253,6 @@ export class GeminiAgent {
|
||||
historyLength: session.conversationHistory.length
|
||||
});
|
||||
|
||||
this.dbManager.getSessionStore().markSessionCompleted(session.sessionDbId);
|
||||
|
||||
} catch (error: any) {
|
||||
if (error.name === 'AbortError') {
|
||||
logger.warn('SDK', 'Gemini agent aborted', { sessionId: session.sessionDbId });
|
||||
@@ -518,8 +523,27 @@ export class GeminiAgent {
|
||||
// API key: check settings first, then environment variable
|
||||
const apiKey = settings.CLAUDE_MEM_GEMINI_API_KEY || process.env.GEMINI_API_KEY || '';
|
||||
|
||||
// Model: from settings or default (gemini-2.5-flash-lite has highest free tier RPM)
|
||||
const model = (settings.CLAUDE_MEM_GEMINI_MODEL || 'gemini-2.5-flash-lite') as GeminiModel;
|
||||
// Model: from settings or default, with validation
|
||||
const defaultModel: GeminiModel = 'gemini-2.5-flash';
|
||||
const configuredModel = settings.CLAUDE_MEM_GEMINI_MODEL || defaultModel;
|
||||
const validModels: GeminiModel[] = [
|
||||
'gemini-2.5-flash-lite',
|
||||
'gemini-2.5-flash',
|
||||
'gemini-2.5-pro',
|
||||
'gemini-2.0-flash',
|
||||
'gemini-2.0-flash-lite',
|
||||
];
|
||||
|
||||
let model: GeminiModel;
|
||||
if (validModels.includes(configuredModel as GeminiModel)) {
|
||||
model = configuredModel as GeminiModel;
|
||||
} else {
|
||||
logger.warn('SDK', `Invalid Gemini model "${configuredModel}", falling back to ${defaultModel}`, {
|
||||
configured: configuredModel,
|
||||
validModels,
|
||||
});
|
||||
model = defaultModel;
|
||||
}
|
||||
|
||||
// Billing: if enabled, skip rate limiting (1000+ RPM available)
|
||||
const billingEnabled = settings.CLAUDE_MEM_GEMINI_BILLING_ENABLED === 'true';
|
||||
|
||||
Reference in New Issue
Block a user