XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 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
hlohaus <983577+hlohaus@users.noreply.github.com>
提交于

代码差异

2 个文件 +9 -16
Modified g4f/Provider/PollinationsAI.py +8 -15
@@ -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}"
Modified g4f/Provider/template/OpenaiTemplate.py +1 -1
@@ -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)