返回提交历史
Modified
g4f/Provider/PollinationsAI.py
+8
-15
Modified
g4f/Provider/template/OpenaiTemplate.py
+1
-1
XFEstudio/gpt4free
refactor: streamline image param handling and fix media URL extraction
- Removed extension of `vision_models` into `text_models` in `PollinationsAI.get_models` - Unified image parameter handling in `PollinationsAI.create_payload`, removing special case for `"gptimage"` model - Added conditional inclusion of `"transparent"` and `"image"` params based on `transparent` flag and media content - Replaced `quote_plus` with `quote` for URL encoding in query string construction - In `OpenaiTemplate.create_payload`, wrapped media URL extraction in `iter()` to fix `next()` usage with list comprehension
dc9f1156
代码差异
2 个文件
+9
-16
@@ -5,7 +5,7 @@ import json
5
5
import random
6
6
import requests
7
7
import asyncio
8
from urllib.parse import quote_plus
8
from urllib.parse import quote, quote_plus
9
9
from typing import Optional
10
10
from aiohttp import ClientSession, ClientTimeout
11
11
@@ -180,9 +180,6 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
180
180
# Create a set of unique text models starting with default model
181
181
text_models = cls.text_models.copy()
182
182
183
# Add models from vision_models
184
text_models.extend(cls.vision_models)
185
186
183
# Add models from the API response
187
184
for model in models:
188
185
model_name = model.get("name")
@@ -355,22 +352,18 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
355
352
"enhance": str(enhance).lower(),
356
353
"safe": str(safe).lower(),
357
354
}
358
if model == "gptimage":
359
n = 1
360
# Only remote images are supported
361
image = [item[0] for item in media if isinstance(item[0], str) and item[0].startswith("http")] if media else []
362
params = {
363
**params,
364
"transparent": str(transparent).lower(),
365
"image": ",".join(image) if image else "",
366
}
367
else:
355
if transparent:
356
params["transparent"] = "true"
357
image = [data for data, _ in media if isinstance(data, str) and data.startswith("http")] if media else []
358
if image:
359
params["image"] = ",".join(image)
360
if model != "gptimage":
368
361
params = use_aspect_ratio({
369
362
"width": width,
370
363
"height": height,
371
364
**params
372
365
}, "1:1" if aspect_ratio is None else aspect_ratio)
373
query = "&".join(f"{k}={quote_plus(str(v))}" for k, v in params.items() if v is not None)
366
query = "&".join(f"{k}={quote(str(v))}" for k, v in params.items() if v is not None)
374
367
encoded_prompt = prompt.strip(". \n")
375
368
if model == "gptimage" and aspect_ratio is not None:
376
369
encoded_prompt = f"{encoded_prompt} aspect-ratio: {aspect_ratio}"
@@ -94,7 +94,7 @@ class OpenaiTemplate(AsyncGeneratorProvider, ProviderModelMixin, RaiseErrorMixin
94
94
}
95
95
# Handle media if provided
96
96
if media is not None:
97
data["image_url"] = next([data for data, _ in media if data and isinstance(data, str) and data.startswith("http://") or data.startswith("https://")], None)
97
data["image_url"] = next(iter([data for data, _ in media if data and isinstance(data, str) and data.startswith("http://") or data.startswith("https://")]), None)
98
98
async with session.post(f"{api_base.rstrip('/')}/images/generations", json=data, ssl=cls.ssl) as response:
99
99
data = await response.json()
100
100
cls.raise_error(data, response.status)