返回提交历史
Modified
g4f/Provider/template/OpenaiTemplate.py
+1
-2
Modified
g4f/api/__init__.py
+5
-2
XFEstudio/gpt4free
Refactor OpenaiTemplate and Api classes for improved error handling and user identification
7ee118e2
代码差异
2 个文件
+6
-4
@@ -34,7 +34,6 @@ class OpenaiTemplate(AsyncGeneratorProvider, ProviderModelMixin, RaiseErrorMixin
34
34
def get_models(cls, api_key: str = None, api_base: str = None) -> list[str]:
35
35
if not cls.models:
36
36
try:
37
headers = {}
38
37
if api_base is None:
39
38
api_base = cls.api_base
40
39
if api_key is None and cls.api_key is not None:
@@ -62,7 +61,7 @@ class OpenaiTemplate(AsyncGeneratorProvider, ProviderModelMixin, RaiseErrorMixin
62
61
if cls.fallback_models:
63
62
debug.error(e)
64
63
return cls.fallback_models
65
raise e
64
raise
66
65
return cls.models
67
66
68
67
@classmethod
@@ -240,9 +240,9 @@ class Api:
240
240
except HTTPException:
241
241
user_g4f_api_key = await self.security(request)
242
242
user_g4f_api_key = getattr(user_g4f_api_key, "credentials", user_g4f_api_key)
243
country = request.headers.get("Cf-Ipcountry", "")
243
244
if AppConfig.demo and user is None:
244
245
ip = request.headers.get("X-Forwarded-For", "")[:4].strip(":.")
245
country = request.headers.get("Cf-Ipcountry", "")
246
246
user = request.headers.get("x-user", ip)
247
247
user = f"{country}:{user}" if country else user
248
248
if AppConfig.g4f_api_key is None or not user_g4f_api_key or not secrets.compare_digest(AppConfig.g4f_api_key, user_g4f_api_key):
@@ -261,15 +261,18 @@ class Api:
261
261
expires = int(expires) - int(time.time())
262
262
hours, remainder = divmod(expires, 3600)
263
263
minutes, seconds = divmod(remainder, 60)
264
debug.log(f"User: '{user}' G4F API key expires in {hours}h {minutes}m {seconds}s")
265
264
if expires < 0:
265
debug.log(f"G4F API key expired for user '{user}'")
266
266
return ErrorResponse.from_message("G4F API key expired", HTTP_401_UNAUTHORIZED)
267
267
count = 0
268
268
for char in user:
269
269
if char.isupper():
270
270
count += 1
271
271
if count > 4:
272
debug.log(f"Invalid user name (screaming): '{user}'")
272
273
return ErrorResponse.from_message("Invalid user name (screaming)", HTTP_401_UNAUTHORIZED)
274
user = f"{country}:{user}" if country else user
275
debug.log(f"User: '{user}' G4F API key expires in {hours}h {minutes}m {seconds}s")
273
276
else:
274
277
user = "admin"
275
278
path = request.url.path