返回提交历史
Modified
g4f-go/runtime.go
+1
-1
Modified
g4f/Provider/__init__.py
+4
-0
Modified
g4f/providers/any_model_map.py
+9
-9
Modified
g4f/providers/any_provider.py
+27
-16
XFEstudio/gpt4free
Update any privider model list, upgrade only own package
03a91179
代码差异
4 个文件
+41
-26
@@ -153,7 +153,7 @@ func upgradeG4F(binDir, exe string, start time.Time) error {
153
153
}
154
154
code, err := runPython(noSignalCtx(), exe, []string{
155
155
"-m", "pip", "install",
156
"--no-input", "--upgrade", "g4f[slim]",
156
"--no-input", "--upgrade", "g4f",
157
157
}, pipEnv(binDir)...)
158
158
if err != nil || code != 0 {
159
159
return fmt.Errorf("pip upgrade g4f failed (exit %d): %w", code, err)
@@ -203,6 +203,10 @@ class ProviderLoader:
203
203
from g4f.Provider.needs_auth.DeepSeek import DeepSeek
204
204
205
205
return DeepSeek
206
elif name == "Default":
207
from g4f.providers.any_provider import DefaultProvider
208
209
return DefaultProvider
206
210
elif name == "EdgeTTS":
207
211
from g4f.Provider.audio.EdgeTTS import EdgeTTS
208
212
@@ -538,7 +538,7 @@ model_map = {
538
538
"Pollinations": "kimi-code",
539
539
"Puter": "togetherai:moonshotai/kimi-k2.7-code",
540
540
},
541
"nvidia-nemotron-3-ultra-550b-a55b": {
541
"nemotron-3-ultra-550b-a55b": {
542
542
"DeepInfra": "nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B",
543
543
"HuggingFace": "nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-BF16",
544
544
"HuggingChat": "nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-BF16",
@@ -643,7 +643,7 @@ model_map = {
643
643
"Pollinations": "gemma-4-31b",
644
644
"Puter": "togetherai:google/gemma-4-31b-it",
645
645
},
646
"nvidia-nemotron-3-super-120b-a12b": {
646
"nemotron-3-super-120b-a12b": {
647
647
"DeepInfra": "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B"
648
648
},
649
649
"glm-5": {
@@ -883,7 +883,7 @@ model_map = {
883
883
"HuggingChat": "Qwen/Qwen2.5-Coder-7B-Instruct",
884
884
"Puter": "openrouter:qwen/qwen2.5-coder-7b-instruct",
885
885
},
886
"nvidia-nemotron-3-ultra-550b-a55b-nvfp4": {
886
"nemotron-3-ultra-550b-a55b-nvfp4": {
887
887
"HuggingFace": "nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-NVFP4",
888
888
"HuggingChat": "nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-NVFP4",
889
889
},
@@ -1438,7 +1438,7 @@ models_count = {
1438
1438
"flux-kontext": 2,
1439
1439
"glm-5.2": 11,
1440
1440
"kimi-k2.7-code": 11,
1441
"nvidia-nemotron-3-ultra-550b-a55b": 3,
1441
"nemotron-3-ultra-550b-a55b": 3,
1442
1442
"deepseek-v4-flash": 10,
1443
1443
"deepseek-v4-pro": 10,
1444
1444
"kimi-k2.6": 11,
@@ -1479,7 +1479,7 @@ models_count = {
1479
1479
"qwen-3-14b": 5,
1480
1480
"qwen-3-next-80b-a3b": 7,
1481
1481
"qwen-2.5-coder-7b": 3,
1482
"nvidia-nemotron-3-ultra-550b-a55b-nvfp4": 2,
1482
"nemotron-3-ultra-550b-a55b-nvfp4": 2,
1483
1483
"qwen-3.5-35b-a3b": 6,
1484
1484
"gemma-3-27b-it": 6,
1485
1485
"gemma-3-12b-it": 6,
@@ -1724,8 +1724,8 @@ model_aliases = {
1724
1724
"moonshotai/kimi-k2.7-code": "kimi-k2.7-code",
1725
1725
"kimi-code": "kimi-k2.7-code",
1726
1726
"togetherai:moonshotai/kimi-k2.7-code": "kimi-k2.7-code",
1727
"nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B": "nvidia-nemotron-3-ultra-550b-a55b",
1728
"nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-BF16": "nvidia-nemotron-3-ultra-550b-a55b",
1727
"nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B": "nemotron-3-ultra-550b-a55b",
1728
"nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-BF16": "nemotron-3-ultra-550b-a55b",
1729
1729
"deepseek-ai/DeepSeek-V4-Flash": "deepseek-v4-flash",
1730
1730
"deepseek-ai/deepseek-v4-flash": "deepseek-v4-flash",
1731
1731
"deepseek/deepseek-v4-flash": "deepseek-v4-flash",
@@ -1766,7 +1766,7 @@ model_aliases = {
1766
1766
"google/gemma-4-31b-it:free": "gemma-4-31b-it",
1767
1767
"gemma-4-31b": "gemma-4-31b-it",
1768
1768
"togetherai:google/gemma-4-31b-it": "gemma-4-31b-it",
1769
"nvidia/NVIDIA-Nemotron-3-Super-120B-A12B": "nvidia-nemotron-3-super-120b-a12b",
1769
"nvidia/NVIDIA-Nemotron-3-Super-120B-A12B": "nemotron-3-super-120b-a12b",
1770
1770
"zai-org/GLM-5": "glm-5",
1771
1771
"z-ai/glm-5": "glm-5",
1772
1772
"z-ai:z-ai/glm-5": "glm-5",
@@ -1873,7 +1873,7 @@ model_aliases = {
1873
1873
"alibaba:qwen/qwen3-next-80b-a3b-instruct": "qwen-3-next-80b-a3b",
1874
1874
"Qwen/Qwen2.5-Coder-7B-Instruct": "qwen-2.5-coder-7b",
1875
1875
"openrouter:qwen/qwen2.5-coder-7b-instruct": "qwen-2.5-coder-7b",
1876
"nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-NVFP4": "nvidia-nemotron-3-ultra-550b-a55b-nvfp4",
1876
"nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-NVFP4": "nemotron-3-ultra-550b-a55b-nvfp4",
1877
1877
"Qwen/Qwen3.5-35B-A3B": "qwen-3.5-35b-a3b",
1878
1878
"qwen3.5-35b-a3b": "qwen-3.5-35b-a3b",
1879
1879
"qwen/qwen3.5-35b-a3b": "qwen-3.5-35b-a3b",
@@ -9,7 +9,8 @@ from ..typing import AsyncResult, Messages, MediaListType, Union
9
9
from ..image import is_data_an_audio
10
10
from ..providers.retry_provider import RotatedProvider
11
11
from ..providers.config_provider import RouterConfig, ConfigModelProvider
12
from ..Provider import __getattr__
12
from ..errors import ModelNotFoundError
13
from ..Provider import G4FSpace, __getattr__
13
14
from .base_provider import (
14
15
AsyncGeneratorProvider,
15
16
ProviderModelMixin,
@@ -303,7 +304,6 @@ class AnyModelProviderMixin(ProviderModelMixin):
303
304
304
305
# Always add default first
305
306
groups["default"].append("auto")
306
307
307
groups["custom"] = list(RouterConfig.routes.keys())
308
308
309
309
for model in unsorted_models:
@@ -312,11 +312,9 @@ class AnyModelProviderMixin(ProviderModelMixin):
312
312
313
313
added = False
314
314
# Check for models with prefix
315
start = model.split(":")[0]
316
if start in ("Pollinations", "openrouter"):
317
added = True
315
key = model.split("-")[0]
318
316
# Check for Mistral company models specifically
319
elif model.startswith("mistral") and not any(
317
if model.startswith("mistral") and not any(
320
318
x in model for x in ["dolphin", "nous", "openhermes"]
321
319
):
322
320
groups["mistral"].append(model)
@@ -373,6 +371,11 @@ class AnyModelProviderMixin(ProviderModelMixin):
373
371
) or model in ("auto", "searchgpt"):
374
372
groups["openai"].append(model)
375
373
added = True
374
elif key in ["minimax", "kimi", "mimo", "nemotron", "tiny"]:
375
if key not in groups:
376
groups[key] = []
377
groups[key].append(model)
378
added = True
376
379
# Check for video models
377
380
elif model in cls.video_models:
378
381
groups["video"].append(model)
@@ -387,13 +390,13 @@ class AnyModelProviderMixin(ProviderModelMixin):
387
390
if not added:
388
391
groups["other"].append(model)
389
392
return [
390
{"group": LABELS[group], "models": names} for group, names in groups.items()
393
{"group": LABELS.get(group, group.title()), "models": names} for group, names in groups.items()
391
394
]
392
395
393
396
394
class AnyProvider(AsyncGeneratorProvider, AnyModelProviderMixin):
397
class DefaultProvider(AsyncGeneratorProvider, AnyModelProviderMixin):
395
398
working = True
396
active_by_default = True
399
add_g4f_space = False
397
400
supports_native_tools = True
398
401
399
402
@classmethod
@@ -530,19 +533,19 @@ class AnyProvider(AsyncGeneratorProvider, AnyModelProviderMixin):
530
533
if not has_api_key:
531
534
providers.sort(key=lambda p: bool(getattr(p, "needs_auth", False)))
532
535
533
if len(providers) == 0:
534
provider: AsyncGeneratorProvider = __getattr__("G4FSpace")
535
async for chunk in provider.create_async_generator(
536
if len(providers) == 0 and cls.add_g4f_space:
537
async for chunk in G4FSpace.create_async_generator(
536
538
model, messages, stream=stream, media=media, api_key=api_key, **kwargs
537
539
):
538
540
yield chunk
539
541
return
540
# raise ModelNotFoundError(
541
# f"AnyProvider: Model {model} not found in any provider."
542
# )
542
elif len(providers) == 0:
543
raise ModelNotFoundError(
544
f"{cls.__name__}: Model {model} not found in any provider."
545
)
543
546
544
547
debug.log(
545
f"AnyProvider: Using providers: {[provider.__name__ for provider in providers]} for model '{model}'"
548
f"{cls.__name__}: Using providers: {[provider.__name__ for provider in providers]} for model '{model}'"
546
549
)
547
550
548
551
async for chunk in RotatedProvider(providers, not model).create_async_generator(
@@ -551,6 +554,12 @@ class AnyProvider(AsyncGeneratorProvider, AnyModelProviderMixin):
551
554
yield chunk
552
555
553
556
557
class AnyProvider(DefaultProvider):
558
working = True
559
active_by_default = True
560
add_g4f_space = True
561
562
554
563
# Clean model names function
555
564
def clean_name(name: str) -> str:
556
565
name = name.split("/")[-1].split(":")[0].lower()
@@ -579,4 +588,6 @@ def clean_name(name: str) -> str:
579
588
name = name.replace("gpt-5-2", "gpt-5.2")
580
589
name = name.replace("claude-haiku-4.5", "claude-haiku-4-5")
581
590
name = name.replace("claude-sonnet-4.5", "claude-sonnet-4-5")
591
if name.startswith("nvidia-"):
592
name = name[len("nvidia-"):]
582
593
return name