返回提交历史
Modified
g4f/Provider/needs_auth/LMArena.py
+12
-7
Modified
g4f/requests/raise_for_status.py
+4
-4
XFEstudio/gpt4free
Enhance LMArena provider to handle image responses and raise MissingRequirementsError for missing auth files
2bb58a18
代码差异
2 个文件
+16
-11
@@ -22,7 +22,7 @@ except ImportError:
22
22
23
23
from ...typing import AsyncResult, Messages, MediaListType
24
24
from ...requests import StreamSession, get_args_from_nodriver, raise_for_status, merge_cookies
25
from ...errors import ModelNotFoundError, CloudflareError, MissingAuthError
25
from ...errors import ModelNotFoundError, CloudflareError, MissingAuthError, MissingRequirementsError
26
26
from ...providers.response import FinishReason, Usage, JsonConversation, ImageResponse, Reasoning
27
27
from ...tools.media import merge_media
28
28
from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin,AuthFileMixin
@@ -553,15 +553,20 @@ class LMArena(AsyncGeneratorProvider, ProviderModelMixin, AuthFileMixin):
553
553
"provider": cls.__name__
554
554
})
555
555
raise_for_status(response)
556
text, *args = response.text.split("\n" * 10 + "<!--", 1)
557
if args:
558
debug.log("Save args to cache file:", str(cache_file))
559
with cache_file.open("w") as f:
560
f.write(args[0].strip())
561
yield text
556
if response.headers.get("Content-Type", "").startswith("image/"):
557
yield ImageResponse(str(response.url), prompt)
558
else:
559
text, *args = response.text.split("\n" * 10 + "<!--", 1)
560
if args:
561
debug.log("Save args to cache file:", str(cache_file))
562
with cache_file.open("w") as f:
563
f.write(args[0].strip())
564
yield text
562
565
finally:
563
566
cls.looked = False
564
567
return
568
else:
569
raise MissingRequirementsError("No auth file found and nodriver is not available.")
565
570
566
571
if not cls._models_loaded:
567
572
cls.get_models()
@@ -37,8 +37,8 @@ async def raise_for_status_async(response: Union[StreamResponse, ClientResponse]
37
37
if message is None or is_html:
38
38
if response.status == 520:
39
39
message = "Unknown error (Cloudflare)"
40
elif response.status in (429, 402):
41
message = "Rate limit"
40
if response.status in (429, 402):
41
raise RateLimitError(f"Response {response.status}: {message}")
42
42
if response.status == 401:
43
43
raise MissingAuthError(f"Response {response.status}: {message}")
44
44
if response.status == 403 and is_cloudflare(message):
@@ -64,8 +64,8 @@ def raise_for_status(response: Union[Response, StreamResponse, ClientResponse, R
64
64
if message is None or is_html:
65
65
if response.status_code == 520:
66
66
message = "Unknown error (Cloudflare)"
67
elif response.status_code in (429, 402):
68
raise RateLimitError(f"Response {response.status_code}: Rate Limit")
67
if response.status_code in (429, 402):
68
raise RateLimitError(f"Response {response.status_code}: {message}")
69
69
if response.status_code == 401:
70
70
raise MissingAuthError(f"Response {response.status_code}: {message}")
71
71
if response.status_code == 403 and is_cloudflare(response.text):