返回提交历史
Modified
g4f/Provider/PollinationsAI.py
+3
-3
Modified
g4f/Provider/PollinationsImage.py
+1
-1
Modified
g4f/api/__init__.py
+2
-8
Modified
g4f/client/__init__.py
+1
-1
XFEstudio/gpt4free
Fix "n" parameter in API, update models.py
2234d926
代码差异
4 个文件
+7
-13
@@ -49,7 +49,7 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
49
49
text_models = [default_model]
50
50
image_models = [default_image_model]
51
51
extra_image_models = ["flux-pro", "flux-dev", "flux-schnell", "midjourney", "dall-e-3", "turbo"]
52
vision_models = [default_vision_model, "gpt-4o-mini", "o3-mini", "openai", "openai-large"]
52
vision_models = [default_vision_model, "gpt-4o-mini", "o3-mini", "openai", "openai-large", "searchgpt"]
53
53
extra_text_models = vision_models
54
54
_models_loaded = False
55
55
model_aliases = {
@@ -68,7 +68,7 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
68
68
"gemini-2.0": "gemini",
69
69
"gemini-2.0-flash": "gemini",
70
70
"gemini-2.0-flash-thinking": "gemini-thinking",
71
"deepseek-r1": "deepseek-r1-llama",
71
"deepseek-r1": "deepseek-reasoning-large",
72
72
"gpt-4o-audio": "openai-audio",
73
73
74
74
### Image Models ###
@@ -101,7 +101,7 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
101
101
original_text_models = [
102
102
model.get("name")
103
103
for model in models
104
if model.get("type") == "chat"
104
if "text"in model.get("output_modalities")
105
105
]
106
106
cls.audio_models = {
107
107
model.get("name"): model.get("voices")
@@ -45,7 +45,7 @@ class PollinationsImage(PollinationsAI):
45
45
private: bool = False,
46
46
enhance: bool = False,
47
47
safe: bool = False,
48
n: int = 4,
48
n: int = 1,
49
49
**kwargs
50
50
) -> AsyncResult:
51
51
# Calling model updates before creating a generator
@@ -421,14 +421,8 @@ class Api:
421
421
config.api_key = credentials.credentials
422
422
try:
423
423
response = await self.client.images.generate(
424
prompt=config.prompt,
425
model=config.model,
426
provider=AppConfig.image_provider if config.provider is None else config.provider,
427
**filter_none(
428
response_format=config.response_format,
429
api_key=config.api_key,
430
proxy=config.proxy
431
)
424
**config.dict(exclude_none=True),
425
provider=AppConfig.image_provider if config.provider is None else config.provider
432
426
)
433
427
for image in response.data:
434
428
if hasattr(image, "url") and image.url.startswith("/"):
@@ -541,7 +541,7 @@ class Images:
541
541
images = await asyncio.gather(*[get_b64_from_url(image) for image in response.get_list()])
542
542
else:
543
543
# Save locally for None (default) case
544
images = await copy_media(response.get_list(), response.get("cookies"), proxy)
544
images = await copy_media(response.get_list(), response.get("cookies"), response.get("headers"), proxy, response.alt)
545
545
images = [Image.model_construct(url=image, revised_prompt=response.alt) for image in images]
546
546
547
547
return ImagesResponse.model_construct(