Your task is to review pull requests. Instructions:
- Provide the response in following JSON format: {"reviews": [{"line": <line_number>, "body": "<review comment>"}]}
- Do not give positive comments or compliments.
- Provide comments and suggestions ONLY if there is something to improve, otherwise "reviews" should be an empty array.
- Write the comment in GitHub Markdown format.
- Use the given description only for the overall context and only comment the code.
- IMPORTANT: NEVER suggest adding comments to the code.

Review the following code diff in the file "g4f/models.py" and take the pull request title and description into account when writing the response.
  
Pull request title: [pull] main from xtekky:main
Pull request description:
---
See [Commits](/niyoh120/gpt4free/pull/53/commits) and [Changes](/niyoh120/gpt4free/pull/53/files) for more details.

-----
Created by [<img src="https://prod.download/pull-18h-svg" valign="bottom"/> **pull[bot]**](https://github.com/wei/pull) (v2.0.0-alpha.1)

_Can you help keep this open source service alive? **[💖 Please sponsor : )](https://prod.download/pull-pr-sponsor)**_
---

Each line is prefixed by its number. Code to review:
```
5: from .Provider import IterListProvider, ProviderType
6: from .Provider import (
7:     ### no auth required ###
-    AIChatFree,
-    AIUncensored,
-    AutonomousAI,
8:     Blackbox,
9:     CablyAI,
10:     ChatGLM,
16:     DDG,
17:     DeepInfraChat,
18:     HuggingSpace,
19:+    Glider,
20:     GPROChat,
21:     ImageLabs,
22:     Jmuz,
87:         CablyAI,
88:         OIVSCode,
89:         DarkAI,
-        AIUncensored,
90:         OpenaiChat,
91:         Cloudflare,
92:     ])
107:     ], shuffle=False)
108: )
109: 
-############
-### Text ###
-############
110:+###################
111:+### Text/Vision ###
112:+###################
113: 
114: ### OpenAI ###
115: # gpt-3.5
116: gpt_35_turbo = Model(
117:     name          = 'gpt-3.5-turbo',
118:     base_provider = 'OpenAI',
-    best_provider = IterListProvider([DarkAI])
119:+    best_provider = DarkAI
120: )
121: 
122: # gpt-4
195: llama_3_1_8b = Model(
196:     name          = "llama-3.1-8b",
197:     base_provider = "Meta Llama",
-    best_provider = IterListProvider([Blackbox, DeepInfraChat, Jmuz, PollinationsAI, Cloudflare])
198:+    best_provider = IterListProvider([Blackbox, DeepInfraChat, Glider, Jmuz, PollinationsAI, Cloudflare])
199: )
200: 
201: llama_3_1_70b = Model(
202:     name          = "llama-3.1-70b",
203:     base_provider = "Meta Llama",
-    best_provider = IterListProvider([DDG, Jmuz, Blackbox, TeachAnything, DarkAI])
204:+    best_provider = IterListProvider([DDG, Blackbox, Glider, Jmuz, TeachAnything, DarkAI])
205: )
206: 
207: llama_3_1_405b = Model(
217:     best_provider = Cloudflare
218: )
219: 
-llama_3_2_11b = VisionModel(
-    name          = "llama-3.2-11b",
220:+llama_3_2_3b = Model(
221:+    name          = "llama-3.2-3b",
222:     base_provider = "Meta Llama",
-    best_provider = IterListProvider([Jmuz, HuggingChat, HuggingFace])
223:+    best_provider = Glider
224: )
225: 
-llama_3_2_70b = Model(
-    name          = "llama-3.2-70b",
226:+llama_3_2_11b = VisionModel(
227:+    name          = "llama-3.2-11b",
228:     base_provider = "Meta Llama",
-    best_provider = AutonomousAI
229:+    best_provider = IterListProvider([Jmuz, HuggingChat, HuggingFace])
230: )
231: 
232: llama_3_2_90b = Model(
233:     name          = "llama-3.2-90b",
234:     base_provider = "Meta Llama",
-    best_provider = IterListProvider([Jmuz, AutonomousAI])
235:+    best_provider = Jmuz
236: )
237: 
238: # llama 3.3
239: llama_3_3_70b = Model(
240:     name          = "llama-3.3-70b",
241:     base_provider = "Meta Llama",
-    best_provider = IterListProvider([Blackbox, DeepInfraChat, PollinationsAI, AutonomousAI, Jmuz, HuggingChat, HuggingFace])
242:+    best_provider = IterListProvider([Blackbox, DeepInfraChat, PollinationsAI, Jmuz, HuggingChat, HuggingFace])
243: )
244: 
245: ### Mistral ###
268:     best_provider = Blackbox
269: )
270: 
-hermes_3 = Model(
-    name          = "hermes-3",
-    base_provider = "NousResearch",
-    best_provider = IterListProvider([AutonomousAI, AIUncensored])
-)
-
271: 
272: ### Microsoft ###
273: # phi
315: gemini_1_5_pro = Model(
316:     name          = 'gemini-1.5-pro',
317:     base_provider = 'Google DeepMind',
-    best_provider = IterListProvider([Blackbox, Jmuz, GPROChat, AIChatFree, Gemini, GeminiPro, Liaobots])
318:+    best_provider = IterListProvider([Blackbox, Jmuz, GPROChat, Gemini, GeminiPro, Liaobots])
319: )
320: 
321: # gemini-2.0
331:     best_provider = Liaobots
332: )
333: 
-gemma_2_27b = Model(
-    name          = 'gemma-2-27b',
-    base_provider = 'Google DeepMind',
-    best_provider = HuggingFace
-)
-
334: ### Anthropic ###
335: # claude 3
336: claude_3_haiku = Model(
422: qwen_2_5_coder_32b = Model(
423:     name = 'qwen-2.5-coder-32b',
424:     base_provider = 'Qwen',
-    best_provider = IterListProvider([DeepInfraChat, PollinationsAI, AutonomousAI, Jmuz, HuggingChat])
425:+    best_provider = IterListProvider([DeepInfraChat, PollinationsAI, Jmuz, HuggingChat])
426: )
427: qwen_2_5_1m = Model(
428:     name = 'qwen-2.5-1m-demo',
453: deepseek_chat = Model(
454:     name = 'deepseek-chat',
455:     base_provider = 'DeepSeek',
-    best_provider = IterListProvider([Blackbox, DeepInfraChat, Jmuz, PollinationsAI])
456:+    best_provider = IterListProvider([Blackbox, Jmuz, PollinationsAI])
457:+)
458:+
459:+deepseek_v3 = Model(
460:+    name = 'deepseek-v3',
461:+    base_provider = 'DeepSeek',
462:+    best_provider = IterListProvider([Blackbox, DeepInfraChat])
463: )
464:+
465: deepseek_r1 = Model(
466:     name = 'deepseek-r1',
467:     base_provider = 'DeepSeek',
-    best_provider = IterListProvider([Blackbox, Jmuz, PollinationsAI, HuggingChat, HuggingFace])
468:+    best_provider = IterListProvider([Blackbox, Glider, PollinationsAI, Jmuz, HuggingChat, HuggingFace])
469: )
470: 
471: ### x.ai ###
488:     best_provider = PerplexityLabs
489: )
490: 
491:+sonar_reasoning = Model(
492:+    name = 'sonar-reasoning',
493:+    base_provider = 'Perplexity AI',
494:+    best_provider = PerplexityLabs
495:+)
496:+
497: ### Nvidia ### 
498: nemotron_70b = Model(
499:     name = 'nemotron-70b',
649: 
650:         # llama-3.2
651:         llama_3_2_1b.name: llama_3_2_1b,
652:+        llama_3_2_3b.name: llama_3_2_3b,
653:         llama_3_2_11b.name: llama_3_2_11b,
-        llama_3_2_70b.name: llama_3_2_70b,
654:         llama_3_2_90b.name: llama_3_2_90b,
655:         
656:         # llama-3.3
663: 
664:         ### NousResearch ###
665:         hermes_2_dpo.name: hermes_2_dpo,
-        hermes_3.name: hermes_3,
666:                 
667:         ### Microsoft ###
668:         # phi
680:         gemini_1_5_flash.name: gemini_1_5_flash,
681:         gemini_2_0_flash.name: gemini_2_0_flash,
682:         gemini_2_0_flash_thinking.name: gemini_2_0_flash_thinking,
-        ### Gemma
-        gemma_2_27b.name: gemma_2_27b,
683: 
684:         ### Anthropic ###
685:         # claude 3
726:         ### Perplexity AI ###
727:         sonar.name: sonar,
728:         sonar_pro.name: sonar_pro,
729:+        sonar_reasoning.name: sonar_reasoning,
730:         
731:         ### DeepSeek ###
732:         deepseek_chat.name: deepseek_chat,
733:+        deepseek_v3.name: deepseek_v3,
734:         deepseek_r1.name: deepseek_r1,
735: 
736:         nemotron_70b.name: nemotron_70b, ### Nvidia ###
762:         midjourney.name: midjourney,
763:     }
764: 
765:+
766: demo_models = {
767:     gpt_4o.name: [gpt_4o, [PollinationsAI, Blackbox]],
768:     "default": [llama_3_2_11b, [HuggingFaceAPI]],
773:     command_r.name: [command_r, [HuggingSpace]],
774:     command_r_plus.name: [command_r_plus, [HuggingSpace]],
775:     command_r7b.name: [command_r7b, [HuggingSpace]],
-    gemma_2_27b.name: [gemma_2_27b, [HuggingFaceAPI]],
776:     qwen_2_72b.name: [qwen_2_72b, [HuggingSpace]],
777:     qwen_2_5_coder_32b.name: [qwen_2_5_coder_32b, [HuggingFace]],
778:     qwq_32b.name: [qwq_32b, [HuggingFace]],
```