返回提交历史
Modified
etc/unittest/models.py
+4
-1
Modified
g4f/models.py
+7
-8
Modified
projects/discord-bot/bot.py
+2
-3
XFEstudio/gpt4free
Fix unittests
8f43a4eb
代码差异
3 个文件
+13
-12
@@ -2,6 +2,7 @@ import unittest
2
2
from typing import Type
3
3
from requests.exceptions import RequestException
4
4
5
from g4f.Provider import __getattr__
5
6
from g4f.models import __models__
6
7
from g4f.providers.base_provider import BaseProvider, ProviderModelMixin
7
8
from g4f.errors import MissingRequirementsError, MissingAuthError
@@ -12,7 +13,8 @@ class TestProviderHasModel(unittest.TestCase):
12
13
def test_provider_has_model(self):
13
14
for model, providers in __models__.values():
14
15
for provider in providers:
15
if provider.needs_auth:
16
provider = __getattr__(provider)
17
if getattr(provider, "needs_auth", False):
16
18
continue
17
19
if issubclass(provider, ProviderModelMixin):
18
20
try:
@@ -38,4 +40,5 @@ class TestProviderHasModel(unittest.TestCase):
38
40
def test_all_providers_working(self):
39
41
for model, providers in __models__.values():
40
42
for provider in providers:
43
provider = __getattr__(provider)
41
44
self.assertTrue(provider.working, f"{provider.__name__} in {model.name}")
@@ -120,7 +120,6 @@ default = Model(
120
120
"WeWordle",
121
121
"TeachAnything",
122
122
"OpenaiChat",
123
"Cloudflare",
124
123
])
125
124
)
126
125
@@ -268,7 +267,7 @@ meta = Model(
268
267
llama_2_7b = Model(
269
268
name = "llama-2-7b",
270
269
base_provider = "Meta Llama",
271
best_provider = IterListProvider(["Cloudflare"])
270
best_provider = None
272
271
)
273
272
274
273
llama_2_70b = Model(
@@ -281,7 +280,7 @@ llama_2_70b = Model(
281
280
llama_3_8b = Model(
282
281
name = "llama-3-8b",
283
282
base_provider = "Meta Llama",
284
best_provider = IterListProvider(["Together", "Cloudflare"])
283
best_provider = IterListProvider(["Together"])
285
284
)
286
285
287
286
llama_3_70b = Model(
@@ -294,7 +293,7 @@ llama_3_70b = Model(
294
293
llama_3_1_8b = Model(
295
294
name = "llama-3.1-8b",
296
295
base_provider = "Meta Llama",
297
best_provider = IterListProvider(["Together", "Cloudflare"])
296
best_provider = IterListProvider(["Together"])
298
297
)
299
298
300
299
llama_3_1_70b = Model(
@@ -313,7 +312,7 @@ llama_3_1_405b = Model(
313
312
llama_3_2_1b = Model(
314
313
name = "llama-3.2-1b",
315
314
base_provider = "Meta Llama",
316
best_provider = "Cloudflare"
315
best_provider = None
317
316
)
318
317
319
318
llama_3_2_3b = Model(
@@ -345,7 +344,7 @@ llama_3_3_70b = Model(
345
344
llama_4_scout = Model(
346
345
name = "llama-4-scout",
347
346
base_provider = "Meta Llama",
348
best_provider = IterListProvider(["PollinationsAI", "Together", "Cloudflare"])
347
best_provider = IterListProvider(["PollinationsAI", "Together"])
349
348
)
350
349
351
350
llama_4_maverick = Model(
@@ -526,7 +525,7 @@ command_a = Model(
526
525
qwen_1_5_7b = Model(
527
526
name = 'qwen-1.5-7b',
528
527
base_provider = 'Qwen',
529
best_provider = "Cloudflare"
528
best_provider = None
530
529
)
531
530
532
531
# qwen-2
@@ -779,7 +778,7 @@ flux_canny = ImageModel(
779
778
flux_kontext_max = ImageModel(
780
779
name = 'flux-kontext',
781
780
base_provider = 'Black Forest Labs',
782
best_provider = IterListProvider(["PollinationsAI", "Azure", "Together"])
781
best_provider = IterListProvider(["PollinationsAI", "Together"])
783
782
)
784
783
785
784
flux_dev_lora = ImageModel(
@@ -51,7 +51,7 @@ MAX_TOOL_LOOPS = int(os.getenv("G4F_MAX_TOOL_LOOPS", "4")) # safety cap
51
51
52
52
# Simple validation for runtime model names.
53
53
ALLOWED_MODEL_CHARS = set(
54
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_."
54
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.:"
55
55
)
56
56
57
57
# Comma-separated list of tools to enable at startup (default: safe set).
@@ -452,7 +452,7 @@ async def searchmodel(
452
452
msg = f"**Matches for `{query}`:**\n" + "\n".join(shown)
453
453
if len(matches) > limit_val:
454
454
msg += f"\n…(showing first {limit_val} of {len(matches)})"
455
await interaction.followup.send(_truncate(msg, 1900), ephemeral=True)
455
await interaction.followup.send(_truncate(msg, 1900))
456
456
457
457
458
458
@bot.tree.command(name="image", description="Generate an image from a prompt.")
@@ -570,7 +570,6 @@ async def on_message(message: discord.Message):
570
570
571
571
prompt = message.content.strip()
572
572
if not prompt:
573
await message.channel.send("🖼️ Usage: !img <prompt>")
574
573
return
575
574
576
575
try: