返回提交历史
Modified
g4f/Provider/PollinationsAI.py
+7
-11
XFEstudio/gpt4free
Refactor PollinationsAI: update image API endpoint, clean up default headers, and enhance error handling
189a9266
代码差异
1 个文件
+7
-11
@@ -16,23 +16,17 @@ from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
16
16
from ..typing import AsyncResult, Messages, MediaListType
17
17
from ..image import is_data_an_audio
18
18
from ..errors import MissingAuthError
19
from ..requests.defaults import DEFAULT_HEADERS
19
20
from ..requests.raise_for_status import raise_for_status
20
21
from ..requests.aiohttp import get_connector
21
22
from ..image import use_aspect_ratio
22
from ..providers.response import ImageResponse, Reasoning, VideoResponse, JsonRequest
23
from ..providers.response import ImageResponse, Reasoning, VideoResponse, JsonRequest, PreviewResponse
23
24
from ..tools.media import render_messages
24
25
from ..tools.run_tools import AuthManager
25
26
from ..cookies import get_cookies_dir
26
27
from .template.OpenaiTemplate import read_response
27
28
from .. import debug
28
29
29
DEFAULT_HEADERS = {
30
"accept": "*/*",
31
'accept-language': 'en-US,en;q=0.9',
32
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
33
"origin": "https://pollinations.ai",
34
}
35
36
30
class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
37
31
label = "Pollinations AI 🌸"
38
32
url = "https://pollinations.ai"
@@ -44,7 +38,7 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
44
38
45
39
# API endpoints
46
40
text_api_endpoint = "https://g4f.dev/api/pollinations/chat/completions"
47
image_api_endpoint = "https://g4f.dev/prompt/{}"
41
image_api_endpoint = "https://image.pollinations.ai/prompt/{}"
48
42
gen_image_api_endpoint = "https://gen.pollinations.ai/image/{}"
49
43
gen_text_api_endpoint = "https://gen.pollinations.ai/v1/chat/completions"
50
44
image_models_endpoint = "https://gen.pollinations.ai/image/models"
@@ -340,7 +334,7 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
340
334
**params
341
335
}, "1:1" if aspect_ratio is None else aspect_ratio)
342
336
query = "&".join(f"{k}={quote(str(v))}" for k, v in params.items() if v is not None)
343
encoded_prompt = prompt.strip(". \n")
337
encoded_prompt = prompt.strip(". \n?")
344
338
if model == "gptimage" and aspect_ratio is not None:
345
339
encoded_prompt = f"{encoded_prompt} aspect-ratio: {aspect_ratio}"
346
340
encoded_prompt = quote_plus(encoded_prompt)[:4096 - len(cls.image_api_endpoint) - len(query) - 8].rstrip("%")
@@ -379,7 +373,9 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
379
373
except Exception as e:
380
374
responses.add(e)
381
375
debug.error(f"Error fetching image:", e)
382
if response.headers.get('content-type', '').startswith("image/"):
376
if response.headers.get("x-error-type"):
377
responses.add(PreviewResponse(ImageResponse(str(response.url), prompt)))
378
elif response.headers.get('content-type', '').startswith("image/"):
383
379
responses.add(ImageResponse(str(response.url), prompt, {"headers": headers}))
384
380
elif response.headers.get('content-type', '').startswith("video/"):
385
381
responses.add(VideoResponse(str(response.url), prompt, {"headers": headers}))