MCPcopy Create free account
hub / github.com/su-kaka/gcli2api / get_next_available_credential

Method get_next_available_credential

src/storage/psql_manager.py:245–319  ·  view source on GitHub ↗

随机获取一个可用凭证(负载均衡)

(
        self, mode: str = "geminicli", model_name: Optional[str] = None
    )

Source from the content-addressed store, hash-verified

243 # ============ 凭证查询方法 ============
244
245 async def get_next_available_credential(
246 self, mode: str = "geminicli", model_name: Optional[str] = None
247 ) -> Optional[Tuple[str, Dict[str, Any]]]:
248 """随机获取一个可用凭证(负载均衡)"""
249 self._ensure_initialized()
250
251 try:
252 table_name = self._get_table_name(mode)
253 current_time = time.time()
254
255 async with self._pool.acquire() as conn:
256 if mode == "geminicli":
257 rows = await conn.fetch(f"""
258 SELECT filename, credential_data, model_cooldowns, preview
259 FROM {table_name}
260 WHERE disabled = 0
261 ORDER BY RANDOM()
262 """)
263
264 if not model_name:
265 if rows:
266 return rows[0]["filename"], json.loads(rows[0]["credential_data"])
267 return None
268
269 is_preview_model = "preview" in model_name.lower()
270 non_preview_creds = []
271 preview_creds = []
272
273 for row in rows:
274 model_cooldowns = json.loads(row["model_cooldowns"] or "{}")
275 cd = model_cooldowns.get(model_name)
276 if cd is None or current_time >= cd:
277 if row["preview"]:
278 preview_creds.append((row["filename"], row["credential_data"]))
279 else:
280 non_preview_creds.append((row["filename"], row["credential_data"]))
281
282 if is_preview_model:
283 if preview_creds:
284 return preview_creds[0][0], json.loads(preview_creds[0][1])
285 else:
286 if non_preview_creds:
287 return non_preview_creds[0][0], json.loads(non_preview_creds[0][1])
288 elif preview_creds:
289 return preview_creds[0][0], json.loads(preview_creds[0][1])
290
291 return None
292 else:
293 rows = await conn.fetch(f"""
294 SELECT filename, credential_data, model_cooldowns, enable_credit
295 FROM {table_name}
296 WHERE disabled = 0
297 ORDER BY RANDOM()
298 """)
299
300 if not model_name:
301 if rows:
302 credential_data = json.loads(rows[0]["credential_data"])

Callers 1

get_valid_credentialMethod · 0.45

Calls 3

_ensure_initializedMethod · 0.95
_get_table_nameMethod · 0.95
errorMethod · 0.80

Tested by

no test coverage detected