Refactor Gemini model display: filter old versions, group low/high pкo, and improve naming (#114)

* Refactor Gemini model display: filter old versions, group low/high pro, and improve naming

* Fix potential negative minutes and refine Gemini 3 Pro grouping logic based on PR feedback

* The account change process has been sped up

* Address PR review: enhance error message and parameterize polling interval in process handler

* Address PR review: fix potential race condition in database backup logic

* fix: prevent renderer white screen and harden sentry gating

* feat:  localize model labels

* chore: enable hoisted node-linker

* chore: ignore .agent/.claude/.codex in prettier

---------

Co-authored-by: Draculabo <[email protected]>
This commit is contained in:
AngeloooooandDraculabo authored and GitHub committed 2026-02-19 19:37:30 +08:00
1 parent b9497648c6
commit 8ed4593f73
162 files changed
+2981 -2541

No files matched your search

+21 -28
View File
@@ -20,49 +20,42 @@ const CLAUDE_TO_GEMINI: Record<string, string> = {
'claude-haiku-4-5-20251001': 'claude-sonnet-4-5',
// OpenAI Protocol Mapping
'gpt-4': 'gemini-2.5-flash',
'gpt-4-turbo': 'gemini-2.5-flash',
'gpt-4-turbo-preview': 'gemini-2.5-flash',
'gpt-4-0125-preview': 'gemini-2.5-flash',
'gpt-4-1106-preview': 'gemini-2.5-flash',
'gpt-4-0613': 'gemini-2.5-flash',
'gpt-4': 'gemini-3-flash',
'gpt-4-turbo': 'gemini-3-flash',
'gpt-4-turbo-preview': 'gemini-3-flash',
'gpt-4-0125-preview': 'gemini-3-flash',
'gpt-4-1106-preview': 'gemini-3-flash',
'gpt-4-0613': 'gemini-3-flash',
'gpt-4o': 'gemini-2.5-flash',
'gpt-4o-2024-05-13': 'gemini-2.5-flash',
'gpt-4o-2024-08-06': 'gemini-2.5-flash',
'gpt-4o': 'gemini-3-flash',
'gpt-4o-2024-05-13': 'gemini-3-flash',
'gpt-4o-2024-08-06': 'gemini-3-flash',
'gpt-4o-mini': 'gemini-2.5-flash',
'gpt-4o-mini-2024-07-18': 'gemini-2.5-flash',
'gpt-4o-mini': 'gemini-3-flash',
'gpt-4o-mini-2024-07-18': 'gemini-3-flash',
'gpt-3.5-turbo': 'gemini-2.5-flash',
'gpt-3.5-turbo-16k': 'gemini-2.5-flash',
'gpt-3.5-turbo-0125': 'gemini-2.5-flash',
'gpt-3.5-turbo-1106': 'gemini-2.5-flash',
'gpt-3.5-turbo-0613': 'gemini-2.5-flash',
'gpt-3.5-turbo': 'gemini-3-flash',
'gpt-3.5-turbo-16k': 'gemini-3-flash',
'gpt-3.5-turbo-0125': 'gemini-3-flash',
'gpt-3.5-turbo-1106': 'gemini-3-flash',
'gpt-3.5-turbo-0613': 'gemini-3-flash',
// Gemini Protocol Mapping
'gemini-2.5-flash-lite': 'gemini-2.5-flash',
'gemini-2.5-flash-thinking': 'gemini-2.5-flash-thinking',
'gemini-2.5-flash-lite': 'gemini-3-flash',
'gemini-3-pro-low': 'gemini-3-pro-preview',
'gemini-3-pro-high': 'gemini-3-pro-preview',
'gemini-3-pro-preview': 'gemini-3-pro-preview',
'gemini-3-pro': 'gemini-3-pro-preview',
'gemini-2.5-flash': 'gemini-2.5-flash',
'gemini-2.5-flash': 'gemini-3-flash',
'gemini-3-flash': 'gemini-3-flash',
'gemini-3-pro-image': 'gemini-3-pro-image',
'internal-background-task': 'gemini-2.5-flash',
'internal-background-task': 'gemini-3-flash',
};
const DYNAMIC_IMAGE_BASE_MODEL = 'gemini-3-pro-image';
const DYNAMIC_IMAGE_RESOLUTIONS = ['', '-2k', '-4k'];
const DYNAMIC_IMAGE_RATIOS = ['', '-1x1', '-4x3', '-3x4', '-16x9', '-9x16', '-21x9'];
const EXTRA_DYNAMIC_MODELS = [
'gemini-2.0-flash-exp',
'gemini-2.5-flash',
'gemini-3-flash',
'gemini-3-pro-high',
'gemini-3-pro-low',
];
const EXTRA_DYNAMIC_MODELS = ['gemini-3-flash', 'gemini-3-pro-high', 'gemini-3-pro-low'];
export const MODEL_LIST_CREATED_AT = 1770652800;
@@ -93,7 +86,7 @@ export function getAllDynamicModels(customMapping: Record<string, string> = {}):
modelIds.add(modelId);
}
return [...modelIds].sort();
return [...modelIds].filter((id) => !/gemini-[12](\.|$|-)/.test(id)).sort();
}
export function mapClaudeModelToGemini(input: string): string {
+6 -2
View File
@@ -115,8 +115,12 @@ export class QuotaService {
const percentage = Math.floor(fraction * 100);
const resetTime = info.quotaInfo.resetTime || '';
// Only save models we care about
if (name.includes('gemini') || name.includes('claude')) {
// Only save models we care about, filtering out old versions (< 3.0)
const isGemini = name.includes('gemini');
const isClaude = name.includes('claude');
const isOldGemini = /gemini-[12](\.|$|-)/.test(name);
if ((isGemini || isClaude) && !isOldGemini) {
quotaData.models[name] = { percentage, resetTime };
}
}