Spaces:
Paused
Paused
Upload 4 files
Browse files
app.py
CHANGED
|
@@ -4,6 +4,7 @@ from google.api_core.exceptions import InvalidArgument, ResourceExhausted, Abort
|
|
| 4 |
import google.generativeai as genai
|
| 5 |
import json
|
| 6 |
import os
|
|
|
|
| 7 |
import logging
|
| 8 |
import func
|
| 9 |
from datetime import datetime, timedelta
|
|
@@ -56,10 +57,9 @@ safety_settings = [
|
|
| 56 |
"threshold": "BLOCK_NONE"
|
| 57 |
},
|
| 58 |
]
|
| 59 |
-
|
| 60 |
class APIKeyManager:
|
| 61 |
def __init__(self):
|
| 62 |
-
self.api_keys = os.environ.get('KeyArray')
|
| 63 |
self.current_index = 0
|
| 64 |
|
| 65 |
def get_available_key(self):
|
|
@@ -74,7 +74,7 @@ class APIKeyManager:
|
|
| 74 |
return current_key
|
| 75 |
|
| 76 |
logger.error("所有API key都已耗尽或被暂时禁用,请重新配置或稍后重试")
|
| 77 |
-
return None
|
| 78 |
|
| 79 |
def show_all_keys(self):
|
| 80 |
logger.info(f"当前可用API key个数: {len(self.api_keys)} ")
|
|
@@ -117,7 +117,7 @@ GEMINI_MODELS = [
|
|
| 117 |
|
| 118 |
@app.route('/')
|
| 119 |
def index():
|
| 120 |
-
main_content = "Moonfanz Reminiproxy v2.1.
|
| 121 |
html_template = """
|
| 122 |
<!DOCTYPE html>
|
| 123 |
<html>
|
|
@@ -192,17 +192,32 @@ def handle_api_error(error, attempt):
|
|
| 192 |
switch_api_key()
|
| 193 |
return 0, None
|
| 194 |
|
| 195 |
-
elif isinstance(error,
|
| 196 |
delay = min(RETRY_DELAY * (2 ** attempt), MAX_RETRY_DELAY)
|
| 197 |
-
|
| 198 |
-
logger.warning(f"{current_api_key[:11]} → 429 官方资源耗尽 → {delay} 秒后重试...")
|
| 199 |
-
else:
|
| 200 |
-
logger.warning(f"{current_api_key[:11]} → 未知错误↙ {delay} 秒后重试...\n{error}\n")
|
| 201 |
key_manager.blacklist_key(current_api_key)
|
| 202 |
switch_api_key()
|
| 203 |
time.sleep(delay)
|
| 204 |
return 0, None
|
| 205 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 206 |
elif isinstance(error, PermissionDenied):
|
| 207 |
logger.error(f"{current_api_key[:11]} → 403 权限被拒绝,该 API KEY 可能已经被官方封禁")
|
| 208 |
key_manager.blacklist_key(current_api_key)
|
|
|
|
| 4 |
import google.generativeai as genai
|
| 5 |
import json
|
| 6 |
import os
|
| 7 |
+
import re
|
| 8 |
import logging
|
| 9 |
import func
|
| 10 |
from datetime import datetime, timedelta
|
|
|
|
| 57 |
"threshold": "BLOCK_NONE"
|
| 58 |
},
|
| 59 |
]
|
|
|
|
| 60 |
class APIKeyManager:
|
| 61 |
def __init__(self):
|
| 62 |
+
self.api_keys = re.findall(r"AIzaSy[a-zA-Z0-9]{33}", os.environ.get('KeyArray'))
|
| 63 |
self.current_index = 0
|
| 64 |
|
| 65 |
def get_available_key(self):
|
|
|
|
| 74 |
return current_key
|
| 75 |
|
| 76 |
logger.error("所有API key都已耗尽或被暂时禁用,请重新配置或稍后重试")
|
| 77 |
+
return None
|
| 78 |
|
| 79 |
def show_all_keys(self):
|
| 80 |
logger.info(f"当前可用API key个数: {len(self.api_keys)} ")
|
|
|
|
| 117 |
|
| 118 |
@app.route('/')
|
| 119 |
def index():
|
| 120 |
+
main_content = "Moonfanz Reminiproxy v2.1.3 2025-01-09"
|
| 121 |
html_template = """
|
| 122 |
<!DOCTYPE html>
|
| 123 |
<html>
|
|
|
|
| 192 |
switch_api_key()
|
| 193 |
return 0, None
|
| 194 |
|
| 195 |
+
elif isinstance(error, ResourceExhausted):
|
| 196 |
delay = min(RETRY_DELAY * (2 ** attempt), MAX_RETRY_DELAY)
|
| 197 |
+
logger.warning(f"{current_api_key[:11]} → 429 官方资源耗尽 → {delay} 秒后重试...")
|
|
|
|
|
|
|
|
|
|
| 198 |
key_manager.blacklist_key(current_api_key)
|
| 199 |
switch_api_key()
|
| 200 |
time.sleep(delay)
|
| 201 |
return 0, None
|
| 202 |
|
| 203 |
+
elif isinstance(error, Aborted):
|
| 204 |
+
delay = min(RETRY_DELAY * (2 ** attempt), MAX_RETRY_DELAY)
|
| 205 |
+
logger.warning(f"{current_api_key[:11]} → 操作被中止 → {delay} 秒后重试...")
|
| 206 |
+
time.sleep(delay)
|
| 207 |
+
return 0, None
|
| 208 |
+
|
| 209 |
+
elif isinstance(error, InternalServerError):
|
| 210 |
+
delay = min(RETRY_DELAY * (2 ** attempt), MAX_RETRY_DELAY)
|
| 211 |
+
logger.warning(f"{current_api_key[:11]} → 500 服务器内部错误 → {delay} 秒后重试...")
|
| 212 |
+
time.sleep(delay)
|
| 213 |
+
return 0, None
|
| 214 |
+
|
| 215 |
+
elif isinstance(error, ServiceUnavailable):
|
| 216 |
+
delay = min(RETRY_DELAY * (2 ** attempt), MAX_RETRY_DELAY)
|
| 217 |
+
logger.warning(f"{current_api_key[:11]} → 503 服务不可用 → {delay} 秒后重试...")
|
| 218 |
+
time.sleep(delay)
|
| 219 |
+
return 0, None
|
| 220 |
+
|
| 221 |
elif isinstance(error, PermissionDenied):
|
| 222 |
logger.error(f"{current_api_key[:11]} → 403 权限被拒绝,该 API KEY 可能已经被官方封禁")
|
| 223 |
key_manager.blacklist_key(current_api_key)
|