Update server.js
Browse files
server.js
CHANGED
|
@@ -78,13 +78,50 @@ const ServiceKey = sequelize.define('ServiceKey', {
|
|
| 78 |
GeminiKey.hasMany(RequestLog, { foreignKey: 'gemini_key_id' });
|
| 79 |
RequestLog.belongsTo(GeminiKey, { foreignKey: 'gemini_key_id' });
|
| 80 |
|
|
|
|
| 81 |
const GEMINI_DEFAULT_LIMITS = {
|
| 82 |
-
|
| 83 |
-
'gemini-
|
| 84 |
-
'gemini-
|
| 85 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
};
|
| 87 |
|
|
|
|
|
|
|
| 88 |
// ... (Функции getModelLimits, safeParseInt, selectBestGeminiKey остаются без изменений)
|
| 89 |
function getModelLimits(model) {
|
| 90 |
const foundModel = Object.keys(GEMINI_DEFAULT_LIMITS).find(k => model.startsWith(k));
|
|
|
|
| 78 |
GeminiKey.hasMany(RequestLog, { foreignKey: 'gemini_key_id' });
|
| 79 |
RequestLog.belongsTo(GeminiKey, { foreignKey: 'gemini_key_id' });
|
| 80 |
|
| 81 |
+
|
| 82 |
const GEMINI_DEFAULT_LIMITS = {
|
| 83 |
+
// Models from the "Текущие ограничения по ставкам" (Current rate limits) table
|
| 84 |
+
'gemini-2.5-flash-preview-05-20': { rpm: 10, tpm: 250000, rpd: 500 },
|
| 85 |
+
'gemini-2.5-flash-preview-tts': { rpm: 3, tpm: 10000, rpd: 15 },
|
| 86 |
+
// Mapped from "Gemini 2.5 Pro Экспериментальный 03-25"
|
| 87 |
+
'gemini-2.5-pro-preview-03-25': { rpm: 5, tpm: 250000, tpd: 1000000, rpd: 25 },
|
| 88 |
+
'gemini-2.0-flash': { rpm: 15, tpm: 1000000, rpd: 1500 },
|
| 89 |
+
// Mapped from "Генерация изображений предварительного просмотра Flash Gemini 2.0"
|
| 90 |
+
'gemini-2.0-flash-preview-image-generation': { rpm: 10, tpm: 200000, rpd: 100 },
|
| 91 |
+
// Mapped from "Gemini 2.0 Flash Экспериментальный"
|
| 92 |
+
'gemini-2.0-flash-exp': { rpm: 10, tpm: 250000, rpd: 1000 },
|
| 93 |
+
'gemini-2.0-flash-lite': { rpm: 30, tpm: 1000000, rpd: 1500 },
|
| 94 |
+
'gemini-1.5-flash': { rpm: 15, tpm: 250000, rpd: 500 },
|
| 95 |
+
'gemini-1.5-flash-8b': { rpm: 15, tpm: 250000, rpd: 500 },
|
| 96 |
+
// "latest" aliases pointing to the same limits
|
| 97 |
+
'gemini-1.5-flash-latest': { rpm: 15, tpm: 250000, rpd: 500 },
|
| 98 |
+
'gemini-1.5-flash-8b-latest': { rpm: 15, tpm: 250000, rpd: 500 },
|
| 99 |
+
// Gemma models
|
| 100 |
+
'gemma-3': { rpm: 30, tpm: 15000, rpd: 14400 },
|
| 101 |
+
'gemma-3n': { rpm: 30, tpm: 15000, rpd: 14400 },
|
| 102 |
+
// Embedding model
|
| 103 |
+
'gemini-embedding-exp-03-07': { rpm: 5, rpd: 100 }, // TPM is not specified in the docs
|
| 104 |
+
|
| 105 |
+
// Models from "Ограничения скорости АРІ в реальном времени" (Real-time API rate limits) table
|
| 106 |
+
// Mapped from "Gemini 2.5 Flash Preview Собственный аудиодиалог"
|
| 107 |
+
'gemini-2.5-flash-preview-native-audio-dialog': { concurrentSessions: 1, tpm: 25000, rpd: 5 },
|
| 108 |
+
// Mapped from "Gemini 2.5 Flash Experimental Native Audio Thinking Dialog"
|
| 109 |
+
'gemini-2.5-flash-exp-native-audio-thinking-dialog': { concurrentSessions: 1, tpm: 10000, rpd: 5 },
|
| 110 |
+
|
| 111 |
+
// Models with no specified limits in the provided "Free tier" table
|
| 112 |
+
'gemini-1.5-pro': null,
|
| 113 |
+
'gemini-1.5-pro-latest': null,
|
| 114 |
+
'gemini-2.5-pro': null,
|
| 115 |
+
'gemini-2.5-pro-preview-06-05': null,
|
| 116 |
+
'imagen-3.0-generate-002': null,
|
| 117 |
+
'veo-2.0-generate-001': null,
|
| 118 |
+
|
| 119 |
+
// Default as a fallback, based on a common powerful model like gemini-2.0-flash
|
| 120 |
+
'default': { rpm: 15, rpd: 1500, tpm: 1000000 }
|
| 121 |
};
|
| 122 |
|
| 123 |
+
|
| 124 |
+
|
| 125 |
// ... (Функции getModelLimits, safeParseInt, selectBestGeminiKey остаются без изменений)
|
| 126 |
function getModelLimits(model) {
|
| 127 |
const foundModel = Object.keys(GEMINI_DEFAULT_LIMITS).find(k => model.startsWith(k));
|