Skip to content

Commit 854a627

Browse files
author
kqlio67
committed
Add Claude 3.5 Sonnet support in Blackbox provider and fix model updates
* Added Claude 3.5 Sonnet to Blackbox * Updated PollinationsAI model handling * Fixed VisionModel class in default_vision * Corrected DeepSeek-R1 alias in PollinationsAI * Updated model count in providers docs
1 parent aeae645 commit 854a627

File tree

4 files changed

+27
-14
lines changed

4 files changed

+27
-14
lines changed

docs/providers-and-models.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ This document provides an overview of various AI providers and models, including
3838
|----------|-------------|--------------|---------------|--------|--------|------|------|
3939
|[playground.allenai.org](https://playground.allenai.org)|No auth required|`g4f.Provider.AllenAI`|`tulu-3-405b, olmo-2-13b, tulu-3-1-8b, tulu-3-70b, olmoe-0125`||||![](https://img.shields.io/badge/Active-brightgreen)|
4040
|[ai-arta.com](https://ai-arta.com)|No auth required|`g4f.Provider.ARTA`||_**(17+)**_|||![](https://img.shields.io/badge/Active-brightgreen)|
41-
|[blackbox.ai](https://www.blackbox.ai)|No auth required|`g4f.Provider.Blackbox`|`blackboxai, blackboxai-pro, gpt-4o-mini, deepseek-chat, deepseek-v3, deepseek-r1, gpt-4o, o1, o3-mini, claude-3.7-sonnet` _**(40+)**_|`flux`||`blackboxai, gpt-4o, o1, o3-mini, deepseek-v3` _**(7+)**_|![](https://img.shields.io/badge/Active-brightgreen)|
41+
|[blackbox.ai](https://www.blackbox.ai)|No auth required|`g4f.Provider.Blackbox`|`blackboxai, blackboxai-pro, gpt-4o-mini, deepseek-chat, deepseek-v3, deepseek-r1, gpt-4o, o1, o3-mini, claude-3.7-sonnet, claude-3.5-sonnet` _**(11+)**_|`flux`||`blackboxai, gpt-4o, o1, o3-mini, deepseek-v3` _**(7+)**_|![](https://img.shields.io/badge/Active-brightgreen)|
4242
|[chatglm.cn](https://chatglm.cn)|No auth required|`g4f.Provider.ChatGLM`|`glm-4`||||![](https://img.shields.io/badge/Active-brightgreen)|
4343
|[chatgpt.com](https://chatgpt.com)|No auth required|`g4f.Provider.ChatGpt`|_**(7+)**_||||![Error](https://img.shields.io/badge/HTTPError-f48d37)|
4444
|[chatgpt.es](https://chatgpt.es)|No auth required|`g4f.Provider.ChatGptEs`|`gpt-4, gpt-4o, gpt-4o-mini`||||![](https://img.shields.io/badge/Active-brightgreen)|
@@ -182,7 +182,7 @@ This document provides an overview of various AI providers and models, including
182182
|claude-3-haiku|Anthropic|2+ Providers|[anthropic.com](https://www.anthropic.com/news/claude-3-haiku)|
183183
|claude-3-sonnet|Anthropic|1+ Providers|[anthropic.com](https://www.anthropic.com/news/claude-3-family)|
184184
|claude-3-opus|Anthropic|2+ Providers|[anthropic.com](https://www.anthropic.com/news/claude-3-family)|
185-
|claude-3.5-sonnet|Anthropic|2+ Providers|[anthropic.com](https://www.anthropic.com/news/claude-3-5-sonnet)|
185+
|claude-3.5-sonnet|Anthropic|3+ Providers|[anthropic.com](https://www.anthropic.com/news/claude-3-5-sonnet)|
186186
|claude-3.7-sonnet|Anthropic|2+ Providers|[anthropic.com](https://www.anthropic.com/claude/sonnet)|
187187
|claude-3.7-sonnet-thinking|Anthropic|1+ Providers|[anthropic.com](https://www.anthropic.com/claude/sonnet)|
188188
|reka-core|Reka AI|1+ Providers|[reka.ai](https://www.reka.ai/ourmodels)|

g4f/Provider/Blackbox.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,14 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
4545

4646
# Completely free models
4747
fallback_models = [
48-
"blackboxai",
48+
default_model,
4949
"blackboxai-pro",
5050
"gpt-4o-mini",
5151
"GPT-4o",
5252
"o1",
5353
"o3-mini",
5454
"Claude-sonnet-3.7",
55+
"Claude-sonnet-3.5",
5556
"DeepSeek-V3",
5657
"DeepSeek-R1",
5758
"DeepSeek-LLM-Chat-(67B)",
@@ -92,13 +93,14 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
9293
image_models = [default_image_model]
9394
vision_models = [default_vision_model, 'GPT-4o', 'o1', 'o3-mini', 'Gemini-PRO', 'Gemini Agent', 'llama-3.1-8b Agent', 'llama-3.1-70b Agent', 'llama-3.1-405 Agent', 'Gemini-Flash-2.0', 'DeepSeek-V3']
9495

95-
userSelectedModel = ['GPT-4o', 'o1', 'o3-mini', 'Gemini-PRO', 'Claude-sonnet-3.7', 'DeepSeek-V3', 'DeepSeek-R1', 'Meta-Llama-3.3-70B-Instruct-Turbo', 'Mistral-Small-24B-Instruct-2501', 'DeepSeek-LLM-Chat-(67B)', 'DBRX-Instruct', 'Qwen-QwQ-32B-Preview', 'Nous-Hermes-2-Mixtral-8x7B-DPO', 'Gemini-Flash-2.0']
96+
userSelectedModel = ['GPT-4o', 'o1', 'o3-mini', 'Gemini-PRO', 'Claude-sonnet-3.7', 'Claude-sonnet-3.5', 'DeepSeek-V3', 'DeepSeek-R1', 'Meta-Llama-3.3-70B-Instruct-Turbo', 'Mistral-Small-24B-Instruct-2501', 'DeepSeek-LLM-Chat-(67B)', 'DBRX-Instruct', 'Qwen-QwQ-32B-Preview', 'Nous-Hermes-2-Mixtral-8x7B-DPO', 'Gemini-Flash-2.0']
9697

9798
# Agent mode configurations
9899
agentMode = {
99100
'GPT-4o': {'mode': True, 'id': "GPT-4o", 'name': "GPT-4o"},
100101
'Gemini-PRO': {'mode': True, 'id': "Gemini-PRO", 'name': "Gemini-PRO"},
101102
'Claude-sonnet-3.7': {'mode': True, 'id': "Claude-sonnet-3.7", 'name': "Claude-sonnet-3.7"},
103+
'Claude-sonnet-3.5': {'mode': True, 'id': "Claude-sonnet-3.5", 'name': "Claude-sonnet-3.5"},
102104
'DeepSeek-V3': {'mode': True, 'id': "deepseek-chat", 'name': "DeepSeek-V3"},
103105
'DeepSeek-R1': {'mode': True, 'id': "deepseek-reasoner", 'name': "DeepSeek-R1"},
104106
'Meta-Llama-3.3-70B-Instruct-Turbo': {'mode': True, 'id': "meta-llama/Llama-3.3-70B-Instruct-Turbo", 'name': "Meta-Llama-3.3-70B-Instruct-Turbo"},
@@ -335,6 +337,7 @@ def _check_premium_access(cls) -> bool:
335337
model_aliases = {
336338
"gpt-4o": "GPT-4o",
337339
"claude-3.7-sonnet": "Claude-sonnet-3.7",
340+
"claude-3.5-sonnet": "Claude-sonnet-3.5",
338341
"deepseek-v3": "DeepSeek-V3",
339342
"deepseek-r1": "DeepSeek-R1",
340343
"deepseek-chat": "DeepSeek-LLM-Chat-(67B)",

g4f/Provider/PollinationsAI.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,10 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
4646
default_model = "openai"
4747
default_image_model = "flux"
4848
default_vision_model = default_model
49+
default_audio_model = "openai-audio"
4950
text_models = [default_model]
5051
image_models = [default_image_model]
52+
audio_models = [default_audio_model]
5153
extra_image_models = ["flux-pro", "flux-dev", "flux-schnell", "midjourney", "dall-e-3", "turbo"]
5254
vision_models = [default_vision_model, "gpt-4o-mini", "o3-mini", "openai", "openai-large"]
5355
extra_text_models = vision_models
@@ -68,7 +70,7 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
6870
"gemini-2.0": "gemini",
6971
"gemini-2.0-flash": "gemini",
7072
"gemini-2.0-flash-thinking": "gemini-thinking",
71-
"deepseek-r1": "deepseek-r1-llama",
73+
"deepseek-r1": "deepseek-reasoning-large",
7274
"gpt-4o-audio": "openai-audio",
7375

7476
### Image Models ###
@@ -98,22 +100,28 @@ def get_models(cls, **kwargs):
98100
text_response = requests.get("https://text.pollinations.ai/models")
99101
text_response.raise_for_status()
100102
models = text_response.json()
101-
original_text_models = [
103+
104+
# Purpose of text models
105+
cls.text_models = [
102106
model.get("name")
103107
for model in models
104-
if model.get("type") == "chat"
108+
if "input_modalities" in model and "text" in model["input_modalities"]
105109
]
110+
111+
# Purpose of audio models
106112
cls.audio_models = {
107113
model.get("name"): model.get("voices")
108114
for model in models
109115
if model.get("audio")
110116
}
111-
112-
# Combining text models
117+
118+
# Combining text models with existing ones
119+
if not cls.text_models:
120+
cls.text_models = [cls.default_model] # or set default models here
121+
113122
combined_text = (
114-
cls.text_models + # Already contains the default
115123
cls.extra_text_models +
116-
original_text_models +
124+
cls.text_models +
117125
cls.vision_models
118126
)
119127
cls.text_models = list(dict.fromkeys(combined_text))
@@ -128,7 +136,9 @@ def get_models(cls, **kwargs):
128136
cls.image_models = [cls.default_image_model]
129137
debug.error(f"Failed to fetch models: {e}")
130138

131-
return cls.text_models + cls.image_models
139+
result = cls.text_models + cls.image_models + list(cls.audio_models.keys())
140+
return result
141+
132142

133143
@classmethod
134144
async def create_async_generator(

g4f/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class VisionModel(Model):
105105
])
106106
)
107107

108-
default_vision = Model(
108+
default_vision = VisionModel(
109109
name = "",
110110
base_provider = "",
111111
best_provider = IterListProvider([
@@ -383,7 +383,7 @@ class VisionModel(Model):
383383
claude_3_5_sonnet = Model(
384384
name = 'claude-3.5-sonnet',
385385
base_provider = 'Anthropic',
386-
best_provider = IterListProvider([Jmuz, Liaobots])
386+
best_provider = IterListProvider([Blackbox, Jmuz, Liaobots])
387387
)
388388

389389
# claude 3.7

0 commit comments

Comments
 (0)