XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/gpt4free

Refactor PollinationsAI and PollinationsImage models: update endpoints and default model settings

8faa8607
hlohaus <983577+hlohaus@users.noreply.github.com>
提交于

代码差异

2 个文件 +24 -16
Modified g4f/Provider/PollinationsAI.py +20 -12
@@ -41,9 +41,10 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
41 41 # API endpoints
42 42 text_api_endpoint = "https://text.pollinations.ai/openai"
43 43 image_api_endpoint = "https://image.pollinations.ai/prompt/{}"
44 image_models_endpoint = "https://image.pollinations.ai/models"
44 45 gen_image_api_endpoint = "https://gen.pollinations.ai/image/{}"
45 46 gen_text_api_endpoint = "https://gen.pollinations.ai/v1/chat/completions"
46 image_models_endpoint = "https://gen.pollinations.ai/image/models"
47 gen_image_models_endpoint = "https://gen.pollinations.ai/image/models"
47 48 text_models_endpoint = "https://gen.pollinations.ai/text/models"
48 49 balance_endpoint = "https://g4f.space/api/pollinations/account/balance"
49 50 worker_api_endpoint = "https://g4f.space/api/pollinations/chat/completions"
@@ -52,11 +53,10 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
52 53 # Models configuration
53 54 default_model = "openai-fast"
54 55 fallback_model = "deepseek"
55 default_image_model = "flux"
56 56 default_vision_model = default_model
57 57 default_voice = "alloy"
58 58 text_models = {default_model: {"id": default_model}}
59 image_models = {default_image_model: {"id": default_image_model}, "turbo": {"id": "turbo"}, "kontext": {"id": "kontext"}}
59 image_models = {}
60 60 audio_models = {}
61 61 vision_models = [default_vision_model]
62 62 model_aliases = {
@@ -119,12 +119,15 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
119 119 if (not api_key or api_key.startswith("g4f_") or api_key.startswith("gfs_")) and cls.balance or cls.balance is None and cls.get_balance(api_key, timeout) and cls.balance > 0:
120 120 debug.log(f"Authenticated with Pollinations AI using G4F API.")
121 121 models_url = cls.worker_models_endpoint
122 image_url = cls.image_models_endpoint
122 123 elif api_key:
123 124 debug.log(f"Using Pollinations AI with provided API key.")
124 125 models_url = cls.gen_text_api_endpoint
126 image_url = cls.gen_image_models_endpoint
125 127 else:
126 128 debug.log(f"Using Pollinations AI without authentication.")
127 129 models_url = cls.text_models_endpoint
130 image_url = cls.image_models_endpoint
128 131
129 132 if cls.current_models_endpoint != models_url:
130 133 path = Path(get_cookies_dir()) / "models" / datetime.today().strftime('%Y-%m-%d') / f"{secure_filename(models_url)}.json"
@@ -139,7 +142,7 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
139 142 debug.error(f"Failed to load cached models from {path}: {e}")
140 143 try:
141 144 # Update of image models
142 image_response = requests.get(cls.image_models_endpoint, timeout=timeout)
145 image_response = requests.get(image_url, timeout=timeout)
143 146 if image_response.ok:
144 147 new_image_models = image_response.json()
145 148 else:
@@ -147,14 +150,17 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
147 150
148 151 # Add image and video models
149 152 cls.vision_models = []
150 cls.video_models = [model.get("name") for model in new_image_models if "video" in model.get("output_modalities", [])]
153 cls.video_models = [model.get("name") for model in new_image_models if isinstance(model, dict) and "video" in model.get("output_modalities", [])]
151 154 for model in new_image_models:
152 if model.get("name") not in cls.video_models:
153 cls.image_models[model.get("name")] = {"id": model.get("name"), "label": get_alias(model), **model}
154 if "image" in model.get("input_modalities", []):
155 cls.vision_models.append(model.get("name"))
156 for alias in model.get("aliases", []):
157 cls.model_aliases[alias] = model.get("name")
155 if isinstance(model, dict):
156 if model.get("name") not in cls.video_models:
157 cls.image_models[model.get("name")] = {"id": model.get("name"), "label": get_alias(model), **model}
158 if "image" in model.get("input_modalities", []):
159 cls.vision_models.append(model.get("name"))
160 for alias in model.get("aliases", []):
161 cls.model_aliases[alias] = model.get("name")
162 else:
163 cls.image_models[model] = {"id": model}
158 164
159 165 text_response = requests.get(cls.text_models_endpoint, timeout=timeout)
160 166 if not text_response.ok:
@@ -180,7 +186,7 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
180 186 cls.swap_model_aliases = {v: k for k, v in cls.model_aliases.items()}
181 187 cls.text_models = {model.get("name"): {"id": model.get("name"), "label": get_alias(model), **model} for model in models}
182 188 cls.models = cls.text_models.copy()
183 cls.models.update({model.get("name"): {"id": model.get("name"), "label": get_alias(model), **model} for model in new_image_models})
189 cls.models.update(cls.image_models)
184 190 finally:
185 191 cls.current_models_endpoint = models_url
186 192 # Cache the models to a file
@@ -341,6 +347,8 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
341 347 "enhance": str(enhance).lower(),
342 348 "safe": str(safe).lower(),
343 349 }
350 if not model or model == "auto":
351 del params["model"]
344 352 if transparent:
345 353 params["transparent"] = "true"
346 354 image = [data for data, _ in media if isinstance(data, str) and data.startswith("http")] if media else []
Modified g4f/Provider/PollinationsImage.py +4 -4
@@ -10,7 +10,7 @@ class PollinationsImage(PollinationsAI):
10 10 label = "PollinationsImage"
11 11 parent = PollinationsAI.__name__
12 12 active_by_default = False
13 default_model = "flux"
13 default_model = "auto"
14 14 default_vision_model = None
15 15 default_image_model = default_model
16 16 audio_models = {}
@@ -18,15 +18,15 @@ class PollinationsImage(PollinationsAI):
18 18 @classmethod
19 19 def get_models(cls, **kwargs):
20 20 PollinationsAI.get_models()
21 cls.image_models = PollinationsAI.image_models
21 cls.image_models = {"Auto-Select": "auto", **PollinationsAI.image_models}
22 22 cls.models = cls.image_models
23 23 return cls.models
24 24
25 25 @classmethod
26 26 def get_grouped_models(cls) -> dict[str, list[str]]:
27 PollinationsAI.get_models()
27 cls.get_models()
28 28 return [
29 {"group": "Image Generation", "models": PollinationsAI.image_models},
29 {"group": "Image Generation", "models": cls.image_models},
30 30 ]
31 31
32 32 @classmethod