Spaces:
Running
Running
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)
|