返回提交历史
Modified
g4f/__init__.py
+5
-4
Modified
g4f/client/__init__.py
+7
-5
Modified
g4f/client/service.py
+9
-4
Modified
g4f/gui/server/api.py
+2
-1
Modified
g4f/models.py
+34
-22
XFEstudio/gpt4free
Add default vision model, Add MiniMax to models.py
cc6f9d1a
代码差异
5 个文件
+57
-36
@@ -33,13 +33,14 @@ class ChatCompletion:
33
33
ignore_working: bool = False,
34
34
ignore_stream: bool = False,
35
35
**kwargs) -> Union[CreateResult, str]:
36
if image is not None:
37
kwargs["images"] = [(image, image_name)]
36
38
model, provider = get_model_and_provider(
37
39
model, provider, stream,
38
40
ignore_working,
39
ignore_stream
41
ignore_stream,
42
has_images="images" in kwargs,
40
43
)
41
if image is not None:
42
kwargs["images"] = [(image, image_name)]
43
44
if "proxy" not in kwargs:
44
45
proxy = os.environ.get("G4F_PROXY")
45
46
if proxy:
@@ -61,9 +62,9 @@ class ChatCompletion:
61
62
ignore_stream: bool = False,
62
63
ignore_working: bool = False,
63
64
**kwargs) -> Union[AsyncResult, Coroutine[str]]:
64
model, provider = get_model_and_provider(model, provider, False, ignore_working)
65
65
if image is not None:
66
66
kwargs["images"] = [(image, image_name)]
67
model, provider = get_model_and_provider(model, provider, False, ignore_working, has_images="images" in kwargs)
67
68
if "proxy" not in kwargs:
68
69
proxy = os.environ.get("G4F_PROXY")
69
70
if proxy:
@@ -241,16 +241,17 @@ class Completions:
241
241
ignore_stream: Optional[bool] = False,
242
242
**kwargs
243
243
) -> ChatCompletion:
244
if image is not None:
245
kwargs["images"] = [(image, image_name)]
244
246
model, provider = get_model_and_provider(
245
247
model,
246
248
self.provider if provider is None else provider,
247
249
stream,
248
250
ignore_working,
249
251
ignore_stream,
252
has_images="images" in kwargs
250
253
)
251
254
stop = [stop] if isinstance(stop, str) else stop
252
if image is not None:
253
kwargs["images"] = [(image, image_name)]
254
255
if ignore_stream:
255
256
kwargs["ignore_stream"] = True
256
257
@@ -526,16 +527,17 @@ class AsyncCompletions:
526
527
ignore_stream: Optional[bool] = False,
527
528
**kwargs
528
529
) -> Awaitable[ChatCompletion]:
530
if image is not None:
531
kwargs["images"] = [(image, image_name)]
529
532
model, provider = get_model_and_provider(
530
533
model,
531
534
self.provider if provider is None else provider,
532
535
stream,
533
536
ignore_working,
534
ignore_stream,
537
ignore_stream,,
538
has_images="images" in kwargs
535
539
)
536
540
stop = [stop] if isinstance(stop, str) else stop
537
if image is not None:
538
kwargs["images"] = [(image, image_name)]
539
541
if ignore_stream:
540
542
kwargs["ignore_stream"] = True
541
543
@@ -4,7 +4,7 @@ from typing import Union
4
4
5
5
from .. import debug, version
6
6
from ..errors import ProviderNotFoundError, ModelNotFoundError, ProviderNotWorkingError, StreamNotSupportedError
7
from ..models import Model, ModelUtils, default
7
from ..models import Model, ModelUtils, default, default_vision
8
8
from ..Provider import ProviderUtils
9
9
from ..providers.types import BaseRetryProvider, ProviderType
10
10
from ..providers.retry_provider import IterListProvider
@@ -26,7 +26,8 @@ def get_model_and_provider(model : Union[Model, str],
26
26
stream : bool,
27
27
ignore_working: bool = False,
28
28
ignore_stream: bool = False,
29
logging: bool = True) -> tuple[str, ProviderType]:
29
logging: bool = True,
30
has_images: bool = False) -> tuple[str, ProviderType]:
30
31
"""
31
32
Retrieves the model and provider based on input parameters.
32
33
@@ -60,8 +61,12 @@ def get_model_and_provider(model : Union[Model, str],
60
61
61
62
if not provider:
62
63
if not model:
63
model = default
64
provider = model.best_provider
64
if has_images:
65
model = default_vision
66
provider = default_vision.best_provider
67
else:
68
model = default
69
provider = model.best_provider
65
70
elif isinstance(model, str):
66
71
if model in ProviderUtils.convert:
67
72
provider = ProviderUtils.convert[model]
@@ -147,7 +147,8 @@ class Api:
147
147
kwargs.get("model"), provider,
148
148
stream=True,
149
149
ignore_stream=True,
150
logging=False
150
logging=False,
151
has_images="images" in kwargs,
151
152
)
152
153
except Exception as e:
153
154
logger.exception(e)
@@ -37,8 +37,10 @@ from .Provider import (
37
37
Gemini,
38
38
GeminiPro,
39
39
GigaChat,
40
HailuoAI,
40
41
HuggingChat,
41
42
HuggingFace,
43
HuggingFaceAPI,
42
44
MetaAI,
43
45
MicrosoftDesigner,
44
46
OpenaiAccount,
@@ -70,7 +72,7 @@ class ImageModel(Model):
70
72
71
73
### Default ###
72
74
default = Model(
73
name = "",
75
name = "",
74
76
base_provider = "",
75
77
best_provider = IterListProvider([
76
78
DDG,
@@ -90,6 +92,21 @@ default = Model(
90
92
])
91
93
)
92
94
95
default_vision = Model(
96
name = "",
97
base_provider = "",
98
best_provider = IterListProvider([
99
Blackbox,
100
PollinationsAI,
101
HuggingSpace,
102
GeminiPro,
103
HuggingFaceAPI,
104
CopilotAccount,
105
OpenaiAccount,
106
Gemini,
107
], shuffle=False)
108
)
109
93
110
############
94
111
### Text ###
95
112
############
@@ -523,6 +540,13 @@ glm_4 = Model(
523
540
best_provider = ChatGLM
524
541
)
525
542
543
### MiniMax
544
mini_max = Model(
545
name = "MiniMax",
546
base_provider = "MiniMax",
547
best_provider = HailuoAI
548
)
549
526
550
### Uncensored AI ###
527
551
evil = Model(
528
552
name = 'evil',
@@ -570,7 +594,7 @@ sd_3_5 = ImageModel(
570
594
flux = ImageModel(
571
595
name = 'flux',
572
596
base_provider = 'Flux AI',
573
best_provider = IterListProvider([Blackbox, PollinationsAI])
597
best_provider = IterListProvider([Blackbox, PollinationsAI, HuggingSpace])
574
598
)
575
599
576
600
flux_dev = ImageModel(
@@ -742,26 +766,14 @@ class ModelUtils:
742
766
deepseek_chat.name: deepseek_chat,
743
767
deepseek_r1.name: deepseek_r1,
744
768
745
### Nvidia ###
746
nemotron_70b.name: nemotron_70b,
747
748
### Liquid ###
749
lfm_40b.name: lfm_40b,
750
751
### Databricks ###
752
dbrx_instruct.name: dbrx_instruct,
753
754
### PollinationsAI ###
755
p1.name: p1,
756
757
### CablyAI ###
758
cably_80b.name: cably_80b,
759
760
### THUDM ###
761
glm_4.name: glm_4,
762
763
### Uncensored AI ###
764
evil.name: evil,
769
nemotron_70b.name: nemotron_70b, ### Nvidia ###
770
lfm_40b.name: lfm_40b, ### Liquid ###
771
dbrx_instruct.name: dbrx_instruct, ### Databricks ###
772
p1.name: p1, ### PollinationsAI ###
773
cably_80b.name: cably_80b, ### CablyAI ###
774
glm_4.name: glm_4, ### THUDM ###
775
mini_max.name: mini_max, ## MiniMax
776
evil.name: evil, ### Uncensored AI ###
765
777
766
778
### Other ###
767
779
midijourney.name: midijourney,