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

XFEstudio/gpt4free

Update any privider model list, upgrade only own package

03a91179
hlohaus <983577+hlohaus@users.noreply.github.com>
提交于

代码差异

4 个文件 +41 -26
Modified g4f-go/runtime.go +1 -1
@@ -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)
Modified g4f/Provider/__init__.py +4 -0
@@ -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
Modified g4f/providers/any_model_map.py +9 -9
@@ -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",
Modified g4f/providers/any_provider.py +27 -16
@@ -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