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

XFEstudio/gpt4free

Update models and providers with improved documentation and code structure (#2786)

* docs(docs/providers-and-models.md): update documentation structure and model listings * refactor(g4f/debug.py): add type hints and docstrings * refactor(g4f/tools/run_tools.py): Restructure tool handling and improve modularity * refactor(g4f/providers/response.py): enhance type hints and code documentation * feat(g4f/models.py): Update model providers and add new models * feat(g4f/Provider/Blackbox.py): add encrypted session handling and model updates * fix(g4f/Provider/ChatGptEs.py): migrate to curl_cffi for request handling and improve error resilience * feat(g4f/Provider/DeepInfraChat.py): Update default model and add new DeepSeek variants * feat(g4f/Provider/Free2GPT.py): add Gemini models and streamline headers * feat(g4f/Provider/FreeGpt.py): Add support for Gemini 1.5 Flash model * feat(g4f/Provider/Liaobots.py): Add Claude 3.7 models and update default GPT-4o * fix(g4f/Provider/PollinationsAI.py): Correct model mappings and generation parameters * feat(g4f/Provider/PollinationsImage.py): Add class identifier label * chore(g4f/Provider/TeachAnything.py): Update default model and simplify model handling * (g4f/Provider/Mhystical.py): Remove class implementation * chore(g4f/Provider/Prodia.py > g4f/Provider/not_working/Prodia.py): mark Prodia provider as non-working * feat(g4f/Provider/Blackbox.py): Add Claude 3.7 Sonnet model alias * chore(g4f/models.py): Update model configurations * fix(g4f/Provider/ChatGptEs.py): improve request reliability and nonce detection --------- Co-authored-by: kqlio67 <>

c79635aa
kqlio67 <166700875+kqlio67@users.noreply.github.com>
提交于

代码差异

18 个文件 +770 -540
Modified docs/providers-and-models.md +53 -29
@@ -11,7 +11,10 @@ This document provides an overview of various AI providers and models, including
11 11 ## Table of Contents
12 12 - [Providers](#providers)
13 13 - [No auth required](#providers-not-needs-auth)
14 - [HuggingFace](#providers-huggingface)
14 15 - [HuggingSpace](#providers-huggingspace)
16 - [Local](#providers-local)
17 - [MiniMax](#providers-minimax)
15 18 - [Needs auth](#providers-needs-auth)
16 19 - [Models](#models)
17 20 - [Text Models](#text-models)
@@ -38,7 +41,7 @@ This document provides an overview of various AI providers and models, including
38 41 | Website | API Credentials | Provider | Text Models | Image Models | Vision (Image Upload) | Stream | Status |
39 42 |----------|-------------|--------------|---------------|--------|--------|------|------|
40 43 |[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)|
41 |[blackbox.ai](https://www.blackbox.ai)|No auth required|`g4f.Provider.Blackbox`|`blackboxai, gemini-1.5-flash, blackboxai-pro, llama-3.1-8b, llama-3.1-70b, llama-3-1-405b, llama-3.3-70b, mixtral-small-28b, deepseek-chat, dbrx-instruct, qwq-32b, hermes-2-dpo, deepseek-v3, deepseek-r1, gemini-2.0-flash` _**(+35)**_|`flux`|`blackboxai, gpt-4o, o3-mini, gemini-1.5-pro, gemini-1.5-flash, llama-3.1-8b, llama-3.1-70b, llama-3.1-405b, gemini-2.0-flash`|✔|![](https://img.shields.io/badge/Active-brightgreen)|
44 |[blackbox.ai](https://www.blackbox.ai)|No auth required|`g4f.Provider.Blackbox`|`blackboxai, gemini-1.5-flash, blackboxai-pro, llama-3.1-8b, llama-3.1-70b, llama-3-1-405b, llama-3.3-70b, mixtral-small-28b, deepseek-chat, dbrx-instruct, qwq-32b, hermes-2-dpo, deepseek-v3, deepseek-r1, gemini-2.0-flash, gpt-4o, o1, o3-mini, gemini-1.5-pro, claude-3.7-sonnet` _**(+29)**_|`flux`|`blackboxai, gpt-4o, o1, o3-mini, gemini-1.5-pro, gemini-1.5-flash, llama-3.1-8b, llama-3.1-70b, llama-3.1-405b, gemini-2.0-flash, deepseek-v3`|✔|![](https://img.shields.io/badge/Active-brightgreen)|
42 45 |[chatglm.cn](https://chatglm.cn)|No auth required|`g4f.Provider.ChatGLM`|`glm-4`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
43 46 |[chatgpt.com](https://chatgpt.com)|No auth required|`g4f.Provider.ChatGpt`|✔ _**(+7)**_|❌|❌|✔|![Error](https://img.shields.io/badge/HTTPError-f48d37)|
44 47 |[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)|
@@ -46,27 +49,34 @@ This document provides an overview of various AI providers and models, including
46 49 |[copilot.microsoft.com](https://copilot.microsoft.com)|Optional API key|`g4f.Provider.Copilot`|`gpt-4, gpt-4o`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
47 50 |[duckduckgo.com/aichat](https://duckduckgo.com/aichat)|No auth required|`g4f.Provider.DDG`|`gpt-4, gpt-4o-mini, llama-3.3-70b, claude-3-haiku, o3-mini, mixtral-small-24b`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
48 51 |[deepinfra.com/chat](https://deepinfra.com/chat)|No auth required|`g4f.Provider.DeepInfraChat`|`llama-3.1-8b, llama-3.2-90b, llama-3.3-70b, deepseek-v3, mixtral-small-28b, deepseek-r1, phi-4, wizardlm-2-8x22b, qwen-2.5-72b, yi-34b, qwen-2-72b, dolphin-2.6, dolphin-2.9, dbrx-instruct, airoboros-70b, lzlv-70b, wizardlm-2-7b, mixtral-8x22b, minicpm-2.5`|❌|`llama-3.2-90b, minicpm-2.5`|✔|![](https://img.shields.io/badge/Active-brightgreen)|
49 |[chat10.free2gpt.xyz](https://chat10.free2gpt.xyz)|No auth required|`g4f.Provider.Free2GPT`|`mistral-7b`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
50 |[freegptsnav.aifree.site](https://freegptsnav.aifree.site)|No auth required|`g4f.Provider.FreeGpt`|`gemini-1.5-pro`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
52 |[chat10.free2gpt.xyz](https://chat10.free2gpt.xyz)|No auth required|`g4f.Provider.Free2GPT`|`gemini-1.5-pro, gemini-1.5-flash`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
53 |[freegptsnav.aifree.site](https://freegptsnav.aifree.site)|No auth required|`g4f.Provider.FreeGpt`|`gemini-1.5-pro, gemini-1.5-flash`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
51 54 |[app.giz.ai/assistant](https://app.giz.ai/assistant)|No auth required|`g4f.Provider.GizAI`|`gemini-1.5-flash`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
52 55 |[glider.so](https://glider.so)|No auth required|`g4f.Provider.Glider`|`llama-3.1-70b, llama-3.1-8b, llama-3.2-3b, deepseek-r1`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
53 56 |[hailuo.ai](https://www.hailuo.ai)|No auth required|`g4f.Provider.HailuoAI`|`MiniMax` _**(1)**_|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
54 |[editor.imagelabs.net](https://editor.imagelabs.net)|No auth required|`g4f.Provider.ImageLabs`|`gemini-1.5-pro`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
55 57 |[editor.imagelabs.net](editor.imagelabs.net)|No auth required|`g4f.Provider.ImageLabs`|❌|`sdxl-turbo`|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
56 58 |[huggingface.co/spaces](https://huggingface.co/spaces)|Optional API key|`g4f.Provider.HuggingSpace`|`qvq-72b, qwen-2-72b, command-r, command-r-plus, command-r7b`|`flux-dev, flux-schnell, sd-3.5`|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
57 59 |[jmuz.me](https://jmuz.me)|Optional API key|`g4f.Provider.Jmuz`|`claude-3-haiku, claude-3-opus, claude-3-haiku, claude-3.5-sonnet, deepseek-r1, deepseek-chat, gemini-exp, gemini-1.5-flash, gemini-1.5-pro, gemini-2.0-flash-thinking, gpt-4, gpt-4o, gpt-4o-mini, llama-3-70b, llama-3-8b, llama-3.1-405b, llama-3.1-70b, llama-3.1-8b, llama-3.2-11b, llama-3.2-90b, llama-3.3-70b, mixtral-8x7b, qwen-2.5-72b, qwen-2.5-coder-32b, qwq-32b, wizardlm-2-8x22b`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
58 |[liaobots.work](https://liaobots.work)|[Automatic cookies](https://liaobots.work)|`g4f.Provider.Liaobots`|`gpt-4o-mini, gpt-4o, gpt-4, o1-preview, deepseek-r1, deepseek-v3, claude-3-opus, claude-3.5-sonnet, claude-3-sonnet, gemini-2.0-flash, gemini-2.0-flash-thinking, grok-3, grok-3-r1, o3-mini`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
59 |[mhystical.cc](https://mhystical.cc)|[Optional API key](https://mhystical.cc/dashboard)|`g4f.Provider.Mhystical`|`gpt-4`|❌|❌|✔|![Error](https://img.shields.io/badge/Active-brightgreen)|
60 |[liaobots.work](https://liaobots.work)|[Automatic cookies](https://liaobots.work)|`g4f.Provider.Liaobots`|`claude-3.5-sonnet, claude-3.7-sonnet, claude-3.7-sonnet-thinking, claude-3-opus, claude-3-sonnet, deepseek-r1, deepseek-v3, gemini-2.0-flash, gemini-2.0-flash-thinking, gemini-2.0-pro, gpt-4, gpt-4o, gpt-4o-mini, grok-3, grok-3-r1, o3-mini`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
60 61 |[oi-vscode-server.onrender.com](https://oi-vscode-server.onrender.com)|No auth required|`g4f.Provider.OIVSCode`|`gpt-4o-mini, deepseek-v3`|❌|`gpt-4o-mini`|✔|![](https://img.shields.io/badge/Active-brightgreen)|
61 62 |[labs.perplexity.ai](https://labs.perplexity.ai)|No auth required|`g4f.Provider.PerplexityLabs`|`sonar, sonar-pro, sonar-reasoning, sonar-reasoning-pro`|❌|❌|✔|![Error](https://img.shields.io/badge/Active-brightgreen)|
62 63 |[pi.ai/talk](https://pi.ai/talk)|[Manual cookies](https://pi.ai/talk)|`g4f.Provider.Pi`|`pi`|❌|❌|✔|![Error](https://img.shields.io/badge/Active-brightgreen)|
63 64 |[pizzagpt.it](https://www.pizzagpt.it)|No auth required|`g4f.Provider.Pizzagpt`|`gpt-4o-mini`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
64 |[pollinations.ai](https://pollinations.ai)|No auth required|`g4f.Provider.PollinationsAI`|`gpt-4o-mini, gpt-4o, qwen-2.5-coder-32b, llama-3.3-70b, mistral-nemo, deepseek-chat, llama-3.1-8b, deepseek-r1, gemini-2.0-flash, gemini-2.0-flash-thinking` _**(3+)**_|`flux, flux-pro, flux-dev, flux-schnell, dall-e-3, sdxl-turbo`|gpt-4o, gpt-4o-mini|✔|![](https://img.shields.io/badge/Active-brightgreen)|
65 |[pollinations.ai](https://pollinations.ai)|No auth required|`g4f.Provider.PollinationsAI`|`gpt-4o-mini, gpt-4o, o1-mini, qwen-2.5-coder-32b, llama-3.3-70b, mistral-nemo, llama-3.1-8b, deepseek-r1, phi-4` _**(6+)**_|`flux, flux-pro, flux-dev, flux-schnell, dall-e-3, sdxl-turbo`|gpt-4o, gpt-4o-mini, o1-mini|✔|![](https://img.shields.io/badge/Active-brightgreen)|
66 |[pollinations.ai](https://pollinations.ai)|No auth required|`g4f.Provider.PollinationsImage`|❌|`flux, flux-pro, flux-dev, flux-schnell, dall-e-3, sdxl-turbo`|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
65 67 |[app.prodia.com](https://app.prodia.com)|No auth required|`g4f.Provider.Prodia`|❌|✔ _**(46)**_|❌|❌|![](https://img.shields.io/badge/Active-brightgreen)|
66 |[teach-anything.com](https://www.teach-anything.com)|No auth required|`g4f.Provider.TeachAnything`|`llama-3.1-70b`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
68 |[teach-anything.com](https://www.teach-anything.com)|No auth required|`g4f.Provider.TeachAnything`|`gemini-1.5-pro, gemini-1.5-flash`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
67 69 |[you.com](https://you.com)|[Manual cookies](https://you.com)|`g4f.Provider.You`|✔|✔|✔|✔|![](https://img.shields.io/badge/Active-brightgreen)|
68 70 |[chat9.yqcloud.top](https://chat9.yqcloud.top)|No auth required|`g4f.Provider.Yqcloud`|`gpt-4`|✔|✔|✔|![](https://img.shields.io/badge/Active-brightgreen)|
69 71
72 ---
73 ### Providers HuggingFace
74 | Website | API Credentials | Provider | Text Models | Image Models | Vision (Image Upload) | Stream | Status |
75 |----------|-------------|--------------|---------------|--------|--------|------|------|
76 |[huggingface.co/chat](https://huggingface.co/chat)|[Manual cookies](https://huggingface.co/chat)|`g4f.Provider.HuggingChat`|`qwen-2.5-72b, llama-3.3-70b, command-r-plus, deepseek-r1, qwq-32b, nemotron-70b, llama-3.2-11b, mistral-nemo, phi-3.5-mini`|`flux-dev, flux-schnell`|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
77 |[huggingface.co/chat](https://huggingface.co/chat)|[API key / Cookies](https://huggingface.co/settings/tokens)|`g4f.Provider.HuggingFace`|✔ _**(47+)**_|✔ _**(9+)**_|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
78 |[api-inference.huggingface.co](https://api-inference.huggingface.co)|[Get API key](https://huggingface.co/settings/tokens)|`g4f.Provider.HuggingFaceAPI`|✔ _**(9+)**_|✔ _**(2+)**_|✔ _**(1+)**_|❌|![](https://img.shields.io/badge/Active-brightgreen)|✔|
79
70 80 ---
71 81 ### Providers HuggingSpace
72 82 | Website | API Credentials | Provider | Text Models | Image Models | Vision (Image Upload) | Stream | Status | Auth |
@@ -74,6 +84,7 @@ This document provides an overview of various AI providers and models, including
74 84 |[black-forest-labs-flux-1-dev.hf.space](https://black-forest-labs-flux-1-dev.hf.space)|[Get API key](https://huggingface.co/settings/tokens)|`g4f.Provider.BlackForestLabsFlux1Dev`|❌|`flux-dev`|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
75 85 |[black-forest-labs-flux-1-schnell.hf.space](https://black-forest-labs-flux-1-schnell.hf.space)|[Get API key](https://huggingface.co/settings/tokens)|`g4f.Provider.BlackForestLabsFlux1Schnell`|❌|`flux-schnell`|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
76 86 |[cohereforai-c4ai-command.hf.space](https://cohereforai-c4ai-command.hf.space)|[Get API key](https://huggingface.co/settings/tokens)|`g4f.Provider.CohereForAI`|`command-r, command-r-plus, command-r7b`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
87 |[roxky-flux-1-dev.hf.space](https://roxky-flux-1-dev.hf.space)|[Get API key](https://huggingface.co/settings/tokens)|❌|❌|✔ _**(3)**_|✔|![](https://img.shields.io/badge/Active-brightgreen)|
77 88 |[huggingface.co/spaces/deepseek-ai/Janus-Pro-7B](https://huggingface.co/spaces/deepseek-ai/Janus-Pro-7B)|[Get API key](https://huggingface.co/settings/tokens)|`g4f.Provider.Janus_Pro_7B`|✔|✔|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
78 89 |[qwen-qvq-72b-preview.hf.space](https://qwen-qvq-72b-preview.hf.space)|[Get API key](https://huggingface.co/settings/tokens)|`g4f.Provider.Qwen_QVQ_72B`|`qvq-72b`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
79 90 |[qwen-qwen2-5-1m-demo.hf.space](https://qwen-qwen2-5-1m-demo.hf.space)|[Get API key](https://huggingface.co/settings/tokens)|`g4f.Provider.Qwen_Qwen_2_5M_Demo`|`qwen-2.5-1m-demo`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
@@ -81,6 +92,19 @@ This document provides an overview of various AI providers and models, including
81 92 |[stabilityai-stable-diffusion-3-5-large.hf.space](https://stabilityai-stable-diffusion-3-5-large.hf.space)|[Get API key](https://huggingface.co/settings/tokens)|`g4f.Provider.StableDiffusion35Large`|❌|`sd-3.5`|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
82 93 |[voodoohop-flux-1-schnell.hf.space](https://voodoohop-flux-1-schnell.hf.space)|[Get API key](https://huggingface.co/settings/tokens)|`g4f.Provider.VoodoohopFlux1Schnell`|❌|`flux-schnell`|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
83 94
95 ### Providers Local
96 | Website | API Credentials | Provider | Text Models | Image Models | Vision (Image Upload) | Stream | Status |
97 |----------|-------------|--------------|---------------|--------|--------|------|------|
98 |[]( )|No auth required|`g4f.Provider.Local`|✔|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
99 |[ollama.com](https://ollama.com)|No auth required|`g4f.Provider.Ollama`|✔|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
100
101 ---
102 ### Providers MiniMax
103 | Website | API Credentials | Provider | Text Models | Image Models | Vision (Image Upload) | Stream | Status |
104 |----------|-------------|--------------|---------------|--------|--------|------|------|
105 |[hailuo.ai/chat](https://www.hailuo.ai/chat)|[Get API key](https://intl.minimaxi.com/user-center/basic-information/interface-key)|`g4f.Provider.MiniMax`|`MiniMax` _**(1)**_|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
106
107
84 108 ---
85 109 ### Providers Needs Auth
86 110 | Website | API Credentials | Provider | Text Models | Image Models | Vision (Image Upload) | Stream | Status |
@@ -98,13 +122,9 @@ This document provides an overview of various AI providers and models, including
98 122 |[github.com/copilot](https://github.com/copilot)|[Manual cookies](https://github.com/copilot)|`g4f.Provider.GithubCopilot`|✔ _**(4+)**_|❌|❌|❌|![](https://img.shields.io/badge/Active-brightgreen)|
99 123 |[glhf.chat](https://glhf.chat)|[Get API key](https://glhf.chat/user-settings/api)|`g4f.Provider.GlhfChat`|✔ _**(22+)**_|❌|❌|❌|![](https://img.shields.io/badge/Active-brightgreen)|
100 124 |[console.groq.com/playground](https://console.groq.com/playground)|[Get API key](https://console.groq.com/keys)|`g4f.Provider.Groq`|✔ _**(18+)**_|❌|✔|❌|![](https://img.shields.io/badge/Active-brightgreen)|
101 |[huggingface.co/chat](https://huggingface.co/chat)|[Manual cookies](https://huggingface.co/chat)|`g4f.Provider.HuggingChat`|`qwen-2.5-72b, llama-3.3-70b, command-r-plus, deepseek-r1, qwq-32b, nemotron-70b, llama-3.2-11b, mistral-nemo, phi-3.5-mini`|`flux-dev, flux-schnell`|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
102 |[huggingface.co/chat](https://huggingface.co/chat)|[API key / Cookies](https://huggingface.co/settings/tokens)|`g4f.Provider.HuggingFace`|✔ _**(47+)**_|✔ _**(9+)**_|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
103 |[api-inference.huggingface.co](https://api-inference.huggingface.co)|[Get API key](https://huggingface.co/settings/tokens)|`g4f.Provider.HuggingFaceAPI`|✔ _**(9+)**_|✔ _**(2+)**_|✔ _**(1+)**_|❌|![](https://img.shields.io/badge/Active-brightgreen)|✔|
104 125 |[meta.ai](https://www.meta.ai)|[Manual cookies](https://www.meta.ai)|`g4f.Provider.MetaAI`|`meta-ai`|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|✔|
105 126 |[meta.ai](https://www.meta.ai)|[Manual cookies](https://www.meta.ai)|`g4f.Provider.MetaAIAccount`|❌|`meta-ai`|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
106 127 |[designer.microsoft.com](https://designer.microsoft.com)|[Manual cookies](https://designer.microsoft.com)|`g4f.Provider.MicrosoftDesigner`|❌|`dall-e-3`|❌|❌|![](https://img.shields.io/badge/Active-brightgreen)|
107 |[hailuo.ai/chat](https://www.hailuo.ai/chat)|[Get API key](https://intl.minimaxi.com/user-center/basic-information/interface-key)|`g4f.Provider.MiniMax`|`MiniMax` _**(1)**_|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
108 128 |[platform.openai.com](https://platform.openai.com)|[Get API key](https://platform.openai.com/settings/organization/api-keys)|`g4f.Provider.OpenaiAPI`|✔|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
109 129 |[chatgpt.com](https://chatgpt.com)|[Manual cookies](https://chatgpt.com)|`g4f.Provider.OpenaiChat`|`gpt-4o, gpt-4o-mini, gpt-4` _**(8+)**_|✔_**(1)**_|✔_**(8+)**_|✔|![](https://img.shields.io/badge/Active-brightgreen)|
110 130 |[perplexity.ai](https://www.perplexity.ai)|[Get API key](https://www.perplexity.ai/settings/api)|`g4f.Provider.PerplexityApi`|✔ _**(6+)**_|❌|❌|✔|![](https://img.shields.io/badge/Active-brightgreen)|
@@ -121,44 +141,47 @@ This document provides an overview of various AI providers and models, including
121 141 | Model | Base Provider | Providers | Website |
122 142 |-------|---------------|-----------|---------|
123 143 |gpt-4|OpenAI|8+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4-turbo-and-gpt-4)|
124 |gpt-4o|OpenAI|6+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4o)|
144 |gpt-4o|OpenAI|7+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4o)|
125 145 |gpt-4o-mini|OpenAI|7+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4o-mini)|
126 |o1|OpenAI|1+ Providers|[openai.com](https://openai.com/index/introducing-openai-o1-preview/)|
127 |o1-preview|OpenAI|1+ Providers|[openai.com](https://openai.com/index/introducing-openai-o1-preview/)|
128 |o3-mini|OpenAI|2+ Providers|[openai.com](https://openai.com/index/openai-o3-mini/)|
146 |o1|OpenAI|2+ Providers|[openai.com](https://openai.com/index/introducing-openai-o1-preview/)|
147 |o1-mini|OpenAI|1+ Providers|[openai.com](https://openai.com/index/openai-o1-mini-advancing-cost-efficient-reasoning/)|
148 |o3-mini|OpenAI|3+ Providers|[openai.com](https://openai.com/index/openai-o3-mini/)|
129 149 |gigachat|GigaChat|1+ Providers|[developers.sber.ru/gigachat](https://developers.sber.ru/gigachat)|
130 150 |meta-ai|Meta|1+ Providers|[ai.meta.com](https://ai.meta.com/)|
131 151 |llama-2-7b|Meta Llama|1+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Llama-2-7b)|
132 152 |llama-3-8b|Meta Llama|2+ Providers|[ai.meta.com](https://ai.meta.com/blog/meta-llama-3/)|
133 153 |llama-3-70b|Meta Llama|1+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Meta-Llama-3-70B)|
134 154 |llama-3.1-8b|Meta Llama|6+ Providers|[ai.meta.com](https://ai.meta.com/blog/meta-llama-3-1/)|
135 |llama-3.1-70b|Meta Llama|5+ Providers|[ai.meta.com](https://ai.meta.com/blog/meta-llama-3-1/)|
155 |llama-3.1-70b|Meta Llama|3+ Providers|[ai.meta.com](https://ai.meta.com/blog/meta-llama-3-1/)|
136 156 |llama-3.1-405b|Meta Llama|2+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Llama-3.1-405B)|
137 157 |llama-3.2-1b|Meta Llama|1+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Llama-3.2-1B)|
138 158 |llama-3.2-3b|Meta Llama|1+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Llama-3.2-3B)|
139 159 |llama-3.2-11b|Meta Llama|3+ Providers|[ai.meta.com](https://ai.meta.com/blog/llama-3-2-connect-2024-vision-edge-mobile-devices/)|
140 |llama-3.2-90b|Meta Llama|1+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Llama-3.2-90B-Vision)|
141 |llama-3.3-70b|Meta Llama|6+ Providers|[ai.meta.com](https://ai.meta.com/blog/llama-3-3/)|
160 |llama-3.2-90b|Meta Llama|2+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Llama-3.2-90B-Vision)|
161 |llama-3.3-70b|Meta Llama|7+ Providers|[ai.meta.com](https://ai.meta.com/blog/llama-3-3/)|
142 162 |mixtral-8x7b|Mistral|1+ Providers|[mistral.ai](https://mistral.ai/news/mixtral-of-experts/)|
143 163 |mixtral-8x22b|Mistral|1+ Providers|[huggingface.co](https://huggingface.co/mistralai/Mixtral-8x22B-Instruct-v0.1)|
144 164 |mistral-nemo|Mistral|3+ Providers|[huggingface.co](https://huggingface.co/mistralai/Mistral-Nemo-Instruct-2407)|
145 165 |mixtral-small-24b|Mistral|1+ Providers|[huggingface.co](https://huggingface.co/mistralai/Mistral-Small-24B-Instruct-2501)|
146 |mixtral-small-28b|Mistral|3+ Providers|[mistral.ai](https://mistral.ai/news/mixtral-small-28b/)|
166 |mixtral-small-28b|Mistral|2+ Providers|[mistral.ai](https://mistral.ai/news/mixtral-small-28b/)|
147 167 |hermes-2-dpo|NousResearch|1+ Providers|[huggingface.co](https://huggingface.co/NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO)|
148 168 |phi-3.5-mini|Microsoft|1+ Providers|[huggingface.co](https://huggingface.co/microsoft/Phi-3.5-mini-instruct)|
149 |phi-4|Microsoft|1+ Providers|[techcommunity.microsoft.com](https://techcommunity.microsoft.com/blog/aiplatformblog/introducing-phi-4-microsoft%E2%80%99s-newest-small-language-model-specializing-in-comple/4357090)|
169 |phi-4|Microsoft|2+ Providers|[techcommunity.microsoft.com](https://techcommunity.microsoft.com/blog/aiplatformblog/introducing-phi-4-microsoft%E2%80%99s-newest-small-language-model-specializing-in-comple/4357090)|
150 170 |wizardlm-2-7b|Microsoft|1+ Providers|[wizardlm.github.io](https://wizardlm.github.io/WizardLM2/)|
151 171 |wizardlm-2-8x22b|Microsoft|2+ Providers|[wizardlm.github.io](https://wizardlm.github.io/WizardLM2/)|
152 |gemini-2.0|Google DeepMind|1+|[deepmind.google](http://deepmind.google/technologies/gemini/)|
172 |gemini-2.0|Google DeepMind|1+ Providers|[deepmind.google](http://deepmind.google/technologies/gemini/)|
153 173 |gemini-exp|Google DeepMind|1+ Providers|[blog.google](https://blog.google/feed/gemini-exp-1206/)|
154 |gemini-1.5-flash|Google DeepMind|3+ Providers|[deepmind.google](https://deepmind.google/technologies/gemini/flash/)|
155 |gemini-1.5-pro|Google DeepMind|2+ Providers|[deepmind.google](https://deepmind.google/technologies/gemini/pro/)|
156 |gemini-2.0-flash|Google DeepMind|4+ Providers|[deepmind.google](https://deepmind.google/technologies/gemini/flash/)|
174 |gemini-1.5-flash|Google DeepMind|6+ Providers|[deepmind.google](https://deepmind.google/technologies/gemini/flash/)|
175 |gemini-1.5-pro|Google DeepMind|6+ Providers|[deepmind.google](https://deepmind.google/technologies/gemini/pro/)|
176 |gemini-2.0-flash|Google DeepMind|3+ Providers|[deepmind.google](https://deepmind.google/technologies/gemini/flash/)|
157 177 |gemini-2.0-flash-thinking|Google DeepMind|1+ Providers|[ai.google.dev](https://ai.google.dev/gemini-api/docs/thinking-mode)|
178 |gemini-2.0-pro|Google DeepMind|1+ Providers|[deepmind.google](https://deepmind.google/technologies/gemini/flash-thinking/)|
158 179 |claude-3-haiku|Anthropic|2+ Providers|[anthropic.com](https://www.anthropic.com/news/claude-3-haiku)|
159 180 |claude-3-sonnet|Anthropic|1+ Providers|[anthropic.com](https://www.anthropic.com/news/claude-3-family)|
160 181 |claude-3-opus|Anthropic|2+ Providers|[anthropic.com](https://www.anthropic.com/news/claude-3-family)|
161 182 |claude-3.5-sonnet|Anthropic|2+ Providers|[anthropic.com](https://www.anthropic.com/news/claude-3-5-sonnet)|
183 |claude-3.7-sonnet|Anthropic|2+ Providers|[anthropic.com](https://www.anthropic.com/claude/sonnet)|
184 |claude-3.7-sonnet-thinking|Anthropic|1+ Providers|[anthropic.com](https://www.anthropic.com/claude/sonnet)|
162 185 |reka-core|Reka AI|1+ Providers|[reka.ai](https://www.reka.ai/ourmodels)|
163 186 |blackboxai|Blackbox AI|1+ Providers|[docs.blackbox.chat](https://docs.blackbox.chat/blackbox-ai-1)|
164 187 |blackboxai-pro|Blackbox AI|1+ Providers|[docs.blackbox.chat](https://docs.blackbox.chat/blackbox-ai-1)|
@@ -168,17 +191,18 @@ This document provides an overview of various AI providers and models, including
168 191 |qwen-1.5-7b|Qwen|1+ Providers|[huggingface.co](https://huggingface.co/Qwen/Qwen1.5-7B)|
169 192 |qwen-2-72b|Qwen|2+ Providers|[huggingface.co](https://huggingface.co/Qwen/Qwen2-72B)|
170 193 |qwen-2-vl-7b|Qwen|1+ Providers|[huggingface.co](https://huggingface.co/Qwen/Qwen2-VL-7B)|
171 |qwen-2.5-72b|Qwen|2+ Providers|[huggingface.co](https://huggingface.co/Qwen/Qwen2.5-72B-Instruct)|
194 |qwen-2.5-72b|Qwen|1+ Providers|[huggingface.co](https://huggingface.co/Qwen/Qwen2.5-72B-Instruct)|
172 195 |qwen-2.5-coder-32b|Qwen|3+ Providers|[huggingface.co](https://huggingface.co/Qwen/Qwen2.5-Coder-32B)|
173 196 |qwen-2.5-1m-demo|Qwen|1+ Providers|[huggingface.co](https://huggingface.co/Qwen/Qwen2.5-1M-Demo)|
174 197 |qwq-32b|Qwen|3+ Providers|[huggingface.co](https://huggingface.co/Qwen/QwQ-32B-Preview)|
175 198 |qvq-72b|Qwen|1+ Providers|[huggingface.co](https://huggingface.co/Qwen/QVQ-72B-Preview)|
176 199 |pi|Inflection|1+ Providers|[inflection.ai](https://inflection.ai/blog/inflection-2-5)|
177 |deepseek-chat|DeepSeek|3+ Providers|[huggingface.co](https://huggingface.co/deepseek-ai/deepseek-llm-67b-chat)|
200 |deepseek-chat|DeepSeek|2+ Providers|[huggingface.co](https://huggingface.co/deepseek-ai/deepseek-llm-67b-chat)|
178 201 |deepseek-v3|DeepSeek|4+ Providers|[api-docs.deepseek.com](https://api-docs.deepseek.com/news/news250120)|
179 202 |deepseek-r1|DeepSeek|8+ Providers|[api-docs.deepseek.com](https://api-docs.deepseek.com/news/news250120)|
180 |grok-3|x.ai|1+|[x.ai](https://x.ai/blog/grok-3)|
181 |grok-3-r1|x.ai|1+|[x.ai](https://x.ai/blog/grok-3)|
203 |janus-pro-7b|DeepSeek|2+ Providers|[api-docs.deepseek.com](https://api-docs.deepseek.com/docs/janus-pro-7b)|
204 |grok-3|x.ai|1+ Providers|[x.ai](https://x.ai/blog/grok-3)|
205 |grok-3-r1|x.ai|1+ Providers|[x.ai](https://x.ai/blog/grok-3)|
182 206 |sonar|Perplexity AI|1+ Providers|[sonar.perplexity.ai](https://sonar.perplexity.ai/)|
183 207 |sonar-pro|Perplexity AI|1+ Providers|[sonar.perplexity.ai](https://sonar.perplexity.ai/)|
184 208 |sonar-reasoning|Perplexity AI|1+ Providers|[sonar.perplexity.ai](https://sonar.perplexity.ai/)|
Modified g4f/Provider/Blackbox.py +33 -40
@@ -5,6 +5,7 @@ import re
5 5 import json
6 6 import random
7 7 import string
8 import base64
8 9 from pathlib import Path
9 10 from typing import Optional
10 11
@@ -35,32 +36,28 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
35 36 supports_system_message = True
36 37 supports_message_history = True
37 38
38 default_model = "BLACKBOXAI"
39 default_model = "blackboxai"
39 40 default_vision_model = default_model
40 41 default_image_model = 'ImageGeneration'
41 42
42 43 image_models = [default_image_model]
43 vision_models = [default_vision_model, 'GPT-4o', 'o3-mini', 'Gemini-PRO', 'gemini-1.5-flash', 'llama-3.1-8b', 'llama-3.1-70b', 'llama-3.1-405b', 'Gemini-Flash-2.0']
44
45 premium_models = ['GPT-4o', 'o1', 'o3-mini', 'Gemini-PRO', 'Claude-Sonnet-3.5']
44 vision_models = [default_vision_model, 'gpt-4o', 'o1', 'o3-mini', 'gemini-pro', 'gemini-1.5-flash', 'llama-3.1-8b', 'llama-3.1-70b', 'llama-3.1-405b', 'gemini-2.0-flash', 'deepseek-v3']
46 45
47 userSelectedModel = ['DeepSeek-V3', 'DeepSeek-R1', 'BLACKBOXAI-PRO', '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'] + premium_models
46 userSelectedModel = ['gpt-4o', 'o1', 'o3-mini', 'gemini-pro', 'claude-sonnet-3.7', 'deepseek-v3', 'deepseek-r1', 'blackboxai-pro', '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-2.0-flash']
48 47
49 48 agentMode = {
50 'DeepSeek-V3': {'mode': True, 'id': "deepseek-chat", 'name': "DeepSeek-V3"},
51 'DeepSeek-R1': {'mode': True, 'id': "deepseek-reasoner", 'name': "DeepSeek-R1"},
49 'deepseek-v3': {'mode': True, 'id': "deepseek-chat", 'name': "DeepSeek-V3"},
50 'deepseek-r1': {'mode': True, 'id': "deepseek-reasoner", 'name': "DeepSeek-R1"},
52 51 '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"},
53 52 'Mistral-Small-24B-Instruct-2501': {'mode': True, 'id': "mistralai/Mistral-Small-24B-Instruct-2501", 'name': "Mistral-Small-24B-Instruct-2501"},
54 53 'DeepSeek-LLM-Chat-(67B)': {'mode': True, 'id': "deepseek-ai/deepseek-llm-67b-chat", 'name': "DeepSeek-LLM-Chat-(67B)"},
55 'DBRX-Instruct': {'mode': True, 'id': "databricks/dbrx-instruct", 'name': "DBRX-Instruct"},
54 'dbrx-instruct': {'mode': True, 'id': "databricks/dbrx-instruct", 'name': "DBRX-Instruct"},
56 55 'Qwen-QwQ-32B-Preview': {'mode': True, 'id': "Qwen/QwQ-32B-Preview", 'name': "Qwen-QwQ-32B-Preview"},
57 56 'Nous-Hermes-2-Mixtral-8x7B-DPO': {'mode': True, 'id': "NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO", 'name': "Nous-Hermes-2-Mixtral-8x7B-DPO"},
58 'Gemini-Flash-2.0': {'mode': True, 'id': "Gemini/Gemini-Flash-2.0", 'name': "Gemini-Flash-2.0"},
57 'gemini-2.0-flash': {'mode': True, 'id': "Gemini/Gemini-Flash-2.0", 'name': "Gemini-Flash-2.0"},
59 58 }
60 59
61 60 trendingAgentMode = {
62 "o1": {'mode': True, 'id': 'o1'},
63 "o3-mini": {'mode': True, 'id': 'o3-mini'},
64 61 "gemini-1.5-flash": {'mode': True, 'id': 'Gemini'},
65 62 "llama-3.1-8b": {'mode': True, 'id': "llama-3.1-8b"},
66 63 'llama-3.1-70b': {'mode': True, 'id': "llama-3.1-70b"},
@@ -77,7 +74,7 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
77 74 'PyTorch Agent': {'mode': True, 'id': "PyTorch Agent"},
78 75 'React Agent': {'mode': True, 'id': "React Agent"},
79 76 'Xcode Agent': {'mode': True, 'id': "Xcode Agent"},
80 'BLACKBOXAI-PRO': {'mode': True, 'id': "BLACKBOXAI-PRO"},
77 'blackboxai-pro': {'mode': True, 'id': "BLACKBOXAI-PRO"},
81 78 'Heroku Agent': {'mode': True, 'id': "Heroku Agent"},
82 79 'Godot Agent': {'mode': True, 'id': "Godot Agent"},
83 80 'Go Agent': {'mode': True, 'id': "Go Agent"},
@@ -100,38 +97,20 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
100 97 models = list(dict.fromkeys([default_model, *userSelectedModel, *image_models, *list(agentMode.keys()), *list(trendingAgentMode.keys())]))
101 98
102 99 model_aliases = {
103 "blackboxai": "BLACKBOXAI",
104 100 "gemini-1.5-flash": "gemini-1.5-flash",
105 "deepseek-v3": "DeepSeek-V3",
106 "deepseek-r1": "DeepSeek-R1",
101 "gemini-1.5-pro": "gemini-pro",
107 102 "llama-3.3-70b": "Meta-Llama-3.3-70B-Instruct-Turbo",
108 103 "mixtral-small-28b": "Mistral-Small-24B-Instruct-2501",
109 104 "deepseek-chat": "DeepSeek-LLM-Chat-(67B)",
110 "dbrx-instruct": "DBRX-Instruct",
111 105 "qwq-32b": "Qwen-QwQ-32B-Preview",
112 106 "hermes-2-dpo": "Nous-Hermes-2-Mixtral-8x7B-DPO",
113 "gemini-2.0-flash": "Gemini-Flash-2.0",
114 "blackboxai-pro": "BLACKBOXAI-PRO",
107 "claude-3.7-sonnet": "claude-sonnet-3.7",
115 108 "flux": "ImageGeneration",
116 109 }
117
118 @classmethod
119 def get_models(cls) -> list[str]:
120 models = super().get_models()
121 filtered = [m for m in models if m not in cls.premium_models]
122 filtered += [f"{m} (Premium)" for m in cls.premium_models]
123 return filtered
124
125 @classmethod
126 def get_model(cls, model: str, **kwargs) -> str:
127 try:
128 model = super().get_model(model, **kwargs)
129 return model.split(" (Premium)")[0]
130 except ModelNotSupportedError:
131 base_model = model.split(" (Premium)")[0]
132 if base_model in cls.premium_models:
133 return base_model
134 raise
110
111 ENCRYPTED_SESSION = "eyJ1c2VyIjogeyJuYW1lIjogIkJMQUNLQk9YIEFJIiwgImVtYWlsIjogImdpc2VsZUBibGFja2JveC5haSIsICJpbWFnZSI6ICJodHRwczovL3l0My5nb29nbGV1c2VyY29udGVudC5jb20vQjd6RVlVSzUxWnNQYmFSUFVhMF9ZbnQ1WV9URFZoTE4tVjAzdndRSHM0eF96a2g4a1psLXkxcXFxb3hoeFFzcS1wUVBHS0R0WFE9czE2MC1jLWstYzB4MDBmZmZmZmYtbm8tcmoifSwgImV4cGlyZXMiOiBudWxsfQ=="
112 ENCRYPTED_SUBSCRIPTION_CACHE = "eyJzdGF0dXMiOiAiUFJFTUlVTSIsICJleHBpcnlUaW1lc3RhbXAiOiBudWxsLCAibGFzdENoZWNrZWQiOiBudWxsLCAiaXNUcmlhbFN1YnNjcmlwdGlvbiI6IHRydWV9"
113 ENCRYPTED_IS_PREMIUM = "dHJ1ZQ=="
135 114
136 115 @classmethod
137 116 async def fetch_validated(cls, url: str = "https://www.blackbox.ai", force_refresh: bool = False) -> Optional[str]:
@@ -192,7 +171,21 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
192 171 def generate_id(cls, length: int = 7) -> str:
193 172 chars = string.ascii_letters + string.digits
194 173 return ''.join(random.choice(chars) for _ in range(length))
195
174
175 @staticmethod
176 def decrypt_data(encrypted_data):
177 try:
178 return json.loads(base64.b64decode(encrypted_data).decode('utf-8'))
179 except:
180 return None
181
182 @staticmethod
183 def decrypt_bool(encrypted_data):
184 try:
185 return base64.b64decode(encrypted_data).decode('utf-8').lower() == 'true'
186 except:
187 return False
188
196 189 @classmethod
197 190 async def create_async_generator(
198 191 cls,
@@ -308,9 +301,9 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
308 301 "additionalInfo": "",
309 302 "enableNewChats": False
310 303 },
311 "session": None,
312 "isPremium": False,
313 "subscriptionCache": None,
304 "session": cls.decrypt_data(cls.ENCRYPTED_SESSION),
305 "isPremium": cls.decrypt_bool(cls.ENCRYPTED_IS_PREMIUM),
306 "subscriptionCache": cls.decrypt_data(cls.ENCRYPTED_SUBSCRIPTION_CACHE),
314 307 "beastMode": False,
315 308 "webSearchMode": False
316 309 }
Modified g4f/Provider/ChatGptEs.py +101 -34
@@ -2,13 +2,18 @@ from __future__ import annotations
2 2
3 3 import os
4 4 import re
5 import json
5 6
6 from aiohttp import ClientSession
7 try:
8 from curl_cffi.requests import Session
9 has_curl_cffi = True
10 except ImportError:
11 has_curl_cffi = False
7 12
8 13 from ..typing import AsyncResult, Messages
9 from ..requests.raise_for_status import raise_for_status
10 14 from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
11 15 from .helper import format_prompt
16 from ..errors import MissingRequirementsError
12 17
13 18 class ChatGptEs(AsyncGeneratorProvider, ProviderModelMixin):
14 19 url = "https://chatgpt.es"
@@ -23,7 +28,7 @@ class ChatGptEs(AsyncGeneratorProvider, ProviderModelMixin):
23 28 models = ['gpt-4', default_model, 'gpt-4o-mini']
24 29
25 30 SYSTEM_PROMPT = "Your default language is English. Always respond in English unless the user's message is in a different language. If the user's message is not in English, respond in the language of the user's message. Maintain this language behavior throughout the conversation unless explicitly instructed otherwise. User input:"
26
31
27 32 @classmethod
28 33 async def create_async_generator(
29 34 cls,
@@ -32,39 +37,101 @@ class ChatGptEs(AsyncGeneratorProvider, ProviderModelMixin):
32 37 proxy: str = None,
33 38 **kwargs
34 39 ) -> AsyncResult:
40 if not has_curl_cffi:
41 raise MissingRequirementsError('Install or update "curl_cffi" package | pip install -U curl_cffi')
42
35 43 model = cls.get_model(model)
44 prompt = f"{cls.SYSTEM_PROMPT} {format_prompt(messages)}"
36 45
37 headers = {
38 "authority": "chatgpt.es",
39 "accept": "application/json",
46 # Use curl_cffi with automatic Cloudflare bypass
47 session = Session()
48 session.headers.update({
49 "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
50 "referer": cls.url,
40 51 "origin": cls.url,
41 "referer": f"{cls.url}/chat",
42 "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36",
52 "accept": "*/*",
53 "accept-language": "en-US,en;q=0.9",
54 "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
55 "x-requested-with": "XMLHttpRequest",
56 })
57
58 if proxy:
59 session.proxies = {"https": proxy, "http": proxy}
60
61 # First request to get nonce and post_id
62 initial_response = session.get(cls.url, impersonate="chrome110")
63 initial_text = initial_response.text
64
65 # More comprehensive nonce extraction
66 nonce_patterns = [
67 r'<input\s+type=[\'"]hidden[\'"]\s+name=[\'"]_wpnonce[\'"]\s+value=[\'"]([^\'"]+)[\'"]',
68 r'"_wpnonce":"([^"]+)"',
69 r'var\s+wpaicg_nonce\s*=\s*[\'"]([^\'"]+)[\'"]',
70 r'wpaicg_nonce\s*:\s*[\'"]([^\'"]+)[\'"]'
71 ]
72
73 nonce_ = None
74 for pattern in nonce_patterns:
75 match = re.search(pattern, initial_text)
76 if match:
77 nonce_ = match.group(1)
78 break
79
80 if not nonce_:
81 # Try to find any nonce-like pattern as a last resort
82 general_nonce = re.search(r'nonce[\'"]?\s*[=:]\s*[\'"]([a-zA-Z0-9]+)[\'"]', initial_text)
83 if general_nonce:
84 nonce_ = general_nonce.group(1)
85 else:
86 # Fallback, but this likely won't work
87 nonce_ = "8cf9917be2"
88
89 # Look for post_id in HTML
90 post_id_patterns = [
91 r'<input\s+type=[\'"]hidden[\'"]\s+name=[\'"]post_id[\'"]\s+value=[\'"]([^\'"]+)[\'"]',
92 r'"post_id":"([^"]+)"',
93 r'var\s+post_id\s*=\s*[\'"]?(\d+)[\'"]?'
94 ]
95
96 post_id = None
97 for pattern in post_id_patterns:
98 match = re.search(pattern, initial_text)
99 if match:
100 post_id = match.group(1)
101 break
102
103 if not post_id:
104 post_id = "106" # Default from curl example
105
106 client_id = os.urandom(5).hex()
107
108 # Prepare data
109 data = {
110 '_wpnonce': nonce_,
111 'post_id': post_id,
112 'url': cls.url,
113 'action': 'wpaicg_chat_shortcode_message',
114 'message': prompt,
115 'bot_id': '0',
116 'chatbot_identity': 'shortcode',
117 'wpaicg_chat_client_id': client_id,
118 'wpaicg_chat_history': json.dumps([f"Human: {prompt}"])
43 119 }
44 120
45 async with ClientSession(headers=headers) as session:
46 initial_response = await session.get(cls.url)
47 nonce_ = re.findall(r'data-nonce="(.+?)"', await initial_response.text())[0]
48 post_id = re.findall(r'data-post-id="(.+?)"', await initial_response.text())[0]
49
50 prompt = f"{cls.SYSTEM_PROMPT} {format_prompt(messages)}"
51
52 payload = {
53 'check_51710191': '1',
54 '_wpnonce': nonce_,
55 'post_id': post_id,
56 'url': cls.url,
57 'action': 'wpaicg_chat_shortcode_message',
58 'message': prompt,
59 'bot_id': '0',
60 'chatbot_identity': 'shortcode',
61 'wpaicg_chat_client_id': os.urandom(5).hex(),
62 'wpaicg_chat_history': None
63 }
64
65 async with session.post(cls.api_endpoint, headers=headers, data=payload) as response:
66 await raise_for_status(response)
67 result = await response.json()
68 if "Du musst das Kästchen anklicken!" in result['data']:
69 raise ValueError(result['data'])
70 yield result['data']
121 # Execute POST request
122 response = session.post(
123 cls.api_endpoint,
124 data=data,
125 impersonate="chrome110"
126 )
127
128 if response.status_code != 200:
129 raise ValueError(f"Error: {response.status_code} - {response.text}")
130
131 result = response.json()
132 if "data" in result:
133 if isinstance(result['data'], str) and "Du musst das Kästchen anklicken!" in result['data']:
134 raise ValueError(result['data'])
135 yield result['data']
136 else:
137 raise ValueError(f"Unexpected response format: {result}")
Modified g4f/Provider/DeepInfraChat.py +6 -2
@@ -9,16 +9,18 @@ class DeepInfraChat(OpenaiTemplate):
9 9 api_base = "https://api.deepinfra.com/v1/openai"
10 10 working = True
11 11
12 default_model = 'meta-llama/Llama-3.3-70B-Instruct-Turbo'
12 default_model = 'deepseek-ai/DeepSeek-V3-Turbo'
13 13 default_vision_model = 'meta-llama/Llama-3.2-90B-Vision-Instruct'
14 14 vision_models = [default_vision_model, 'openbmb/MiniCPM-Llama3-V-2_5']
15 15 models = [
16 16 'meta-llama/Meta-Llama-3.1-8B-Instruct',
17 default_model,
17 'meta-llama/Llama-3.3-70B-Instruct-Turbo',
18 18 'meta-llama/Llama-3.3-70B-Instruct',
19 19 'deepseek-ai/DeepSeek-V3',
20 default_model,
20 21 'mistralai/Mistral-Small-24B-Instruct-2501',
21 22 'deepseek-ai/DeepSeek-R1',
23 'deepseek-ai/DeepSeek-R1-Turbo',
22 24 'deepseek-ai/DeepSeek-R1-Distill-Llama-70B',
23 25 'deepseek-ai/DeepSeek-R1-Distill-Qwen-32B',
24 26 'microsoft/phi-4',
@@ -40,7 +42,9 @@ class DeepInfraChat(OpenaiTemplate):
40 42 "llama-3.3-70b": "meta-llama/Llama-3.3-70B-Instruct-Turbo",
41 43 "llama-3.3-70b": "meta-llama/Llama-3.3-70B-Instruct",
42 44 "deepseek-v3": "deepseek-ai/DeepSeek-V3",
45 "deepseek-v3": default_model,
43 46 "mixtral-small-28b": "mistralai/Mistral-Small-24B-Instruct-2501",
47 "deepseek-r1": "deepseek-ai/DeepSeek-R1-Turbo",
44 48 "deepseek-r1": "deepseek-ai/DeepSeek-R1",
45 49 "deepseek-r1-distill-llama": "deepseek-ai/DeepSeek-R1-Distill-Llama-70B",
46 50 "deepseek-r1-distill-qwen": "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B",
Modified g4f/Provider/Free2GPT.py +4 -11
@@ -14,10 +14,12 @@ from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
14 14
15 15 class Free2GPT(AsyncGeneratorProvider, ProviderModelMixin):
16 16 url = "https://chat10.free2gpt.xyz"
17
17 18 working = True
18 19 supports_message_history = True
19 default_model = 'mistral-7b'
20 models = [default_model]
20
21 default_model = 'gemini-1.5-pro'
22 models = [default_model, 'gemini-1.5-flash']
21 23
22 24 @classmethod
23 25 async def create_async_generator(
@@ -36,15 +38,6 @@ class Free2GPT(AsyncGeneratorProvider, ProviderModelMixin):
36 38 "Content-Type": "text/plain;charset=UTF-8",
37 39 "Referer": f"{cls.url}/",
38 40 "Origin": cls.url,
39 "Sec-Fetch-Dest": "empty",
40 "Sec-Fetch-Mode": "cors",
41 "Sec-Fetch-Site": "same-origin",
42 "Sec-Ch-Ua": '"Chromium";v="127", "Not)A;Brand";v="99"',
43 "Sec-Ch-Ua-Mobile": "?0",
44 "Sec-Ch-Ua-Platform": '"Linux"',
45 "Cache-Control": "no-cache",
46 "Pragma": "no-cache",
47 "Priority": "u=1, i",
48 41 }
49 42 async with ClientSession(
50 43 connector=get_connector(connector, proxy), headers=headers
Modified g4f/Provider/FreeGpt.py +1 -0
@@ -27,6 +27,7 @@ class FreeGpt(AsyncGeneratorProvider, ProviderModelMixin):
27 27 supports_system_message = True
28 28
29 29 default_model = 'gemini-1.5-pro'
30 models = [default_model, 'gemini-1.5-flash']
30 31
31 32 @classmethod
32 33 async def create_async_generator(
Modified g4f/Provider/Liaobots.py +123 -118
@@ -10,150 +10,96 @@ from .helper import get_connector
10 10 from ..requests import raise_for_status
11 11
12 12 models = {
13 "gpt-4o-mini-free": {
14 "id": "gpt-4o-mini-free",
15 "name": "GPT-4o-Mini-Free",
16 "model": "ChatGPT",
17 "provider": "OpenAI",
18 "maxLength": 31200,
19 "tokenLimit": 7800,
20 "context": "8K",
21 },
22 "grok-3": {
23 "id": "grok-3",
24 "name": "Grok-3",
25 "model": "Grok",
26 "provider": "x.ai",
27 "maxLength": 800000,
28 "tokenLimit": 200000,
29 "context": "200K",
30 },
31 "grok-3-r1": {
32 "id": "grok-3-r1",
33 "name": "Grok-3-Thinking",
34 "model": "Grok",
35 "provider": "x.ai",
13 "claude-3-5-sonnet-20241022": {
14 "id": "claude-3-5-sonnet-20241022",
15 "name": "Claude-3.5-Sonnet-V2",
16 "model": "Claude",
17 "provider": "Anthropic",
36 18 "maxLength": 800000,
37 19 "tokenLimit": 200000,
38 20 "context": "200K",
39 21 },
40 "deepseek-r1": {
41 "id": "deepseek-r1",
42 "name": "DeepSeek-R1",
43 "model": "DeepSeek-R1",
44 "provider": "DeepSeek",
45 "maxLength": 400000,
46 "tokenLimit": 100000,
47 "context": "128K",
48 },
49 "deepseek-r1-distill-llama-70b": {
50 "id": "deepseek-r1-distill-llama-70b",
51 "name": "DeepSeek-R1-70B",
52 "model": "DeepSeek-R1-70B",
53 "provider": "DeepSeek",
54 "maxLength": 400000,
55 "tokenLimit": 100000,
56 "context": "128K",
57 },
58 "deepseek-v3": {
59 "id": "deepseek-v3",
60 "name": "DeepSeek-V3",
61 "model": "DeepSeek-V3",
62 "provider": "DeepSeek",
63 "maxLength": 400000,
64 "tokenLimit": 100000,
65 "context": "128K",
66 },
67 "gpt-4o-2024-11-20": {
68 "id": "gpt-4o-2024-11-20",
69 "name": "GPT-4o",
70 "model": "ChatGPT",
71 "provider": "OpenAI",
72 "maxLength": 260000,
73 "tokenLimit": 126000,
74 "context": "128K",
75 },
76 "gpt-4o-mini-2024-07-18": {
77 "id": "gpt-4o-mini-2024-07-18",
78 "name": "GPT-4o-Mini",
79 "model": "ChatGPT",
80 "provider": "OpenAI",
81 "maxLength": 260000,
82 "tokenLimit": 126000,
83 "context": "128K",
84 },
85 "o3-mini": {
86 "id": "o3-mini",
87 "name": "o3-mini",
88 "model": "o3",
89 "provider": "OpenAI",
90 "maxLength": 400000,
91 "tokenLimit": 100000,
92 "context": "128K",
93 },
94 "o1-preview-2024-09-12": {
95 "id": "o1-preview-2024-09-12",
96 "name": "o1-preview",
97 "model": "o1",
98 "provider": "OpenAI",
99 "maxLength": 400000,
100 "tokenLimit": 100000,
101 "context": "128K",
102 },
103 "claude-3-opus-20240229": {
104 "id": "claude-3-opus-20240229",
105 "name": "Claude-3-Opus",
22 "claude-3-5-sonnet-20241022-t": {
23 "id": "claude-3-5-sonnet-20241022-t",
24 "name": "Claude-3.5-Sonnet-V2-T",
106 25 "model": "Claude",
107 26 "provider": "Anthropic",
108 27 "maxLength": 800000,
109 28 "tokenLimit": 200000,
110 29 "context": "200K",
111 30 },
112 "claude-3-5-sonnet-20240620": {
113 "id": "claude-3-5-sonnet-20240620",
114 "name": "Claude-3.5-Sonnet",
31 "claude-3-7-sonnet-20250219": {
32 "id": "claude-3-7-sonnet-20250219",
33 "name": "Claude-3.7-Sonnet",
115 34 "model": "Claude",
116 35 "provider": "Anthropic",
117 36 "maxLength": 800000,
118 37 "tokenLimit": 200000,
119 38 "context": "200K",
120 39 },
121 "claude-3-5-sonnet-20241022": {
122 "id": "claude-3-5-sonnet-20241022",
123 "name": "Claude-3.5-Sonnet-V2",
40 "claude-3-7-sonnet-20250219-t": {
41 "id": "claude-3-7-sonnet-20250219-t",
42 "name": "Claude-3.7-Sonnet-T",
124 43 "model": "Claude",
125 44 "provider": "Anthropic",
126 45 "maxLength": 800000,
127 46 "tokenLimit": 200000,
128 47 "context": "200K",
129 48 },
130 "claude-3-sonnet-20240229": {
131 "id": "claude-3-sonnet-20240229",
132 "name": "Claude-3-Sonnet",
49 "claude-3-7-sonnet-20250219-thinking": {
50 "id": "claude-3-7-sonnet-20250219-thinking",
51 "name": "Claude-3.7-Sonnet-Thinking",
133 52 "model": "Claude",
134 53 "provider": "Anthropic",
135 54 "maxLength": 800000,
136 55 "tokenLimit": 200000,
137 56 "context": "200K",
138 57 },
139 "claude-3-opus-20240229-t": {
140 "id": "claude-3-opus-20240229-t",
141 "name": "Claude-3-Opus-T",
58 "claude-3-opus-20240229": {
59 "id": "claude-3-opus-20240229",
60 "name": "Claude-3-Opus",
142 61 "model": "Claude",
143 62 "provider": "Anthropic",
144 63 "maxLength": 800000,
145 64 "tokenLimit": 200000,
146 65 "context": "200K",
147 66 },
148 "claude-3-5-sonnet-20241022-t": {
149 "id": "claude-3-5-sonnet-20241022-t",
150 "name": "Claude-3.5-Sonnet-V2-T",
67 "claude-3-sonnet-20240229": {
68 "id": "claude-3-sonnet-20240229",
69 "name": "Claude-3-Sonnet",
151 70 "model": "Claude",
152 71 "provider": "Anthropic",
153 72 "maxLength": 800000,
154 73 "tokenLimit": 200000,
155 74 "context": "200K",
156 75 },
76 "deepseek-r1": {
77 "id": "deepseek-r1",
78 "name": "DeepSeek-R1",
79 "model": "DeepSeek-R1",
80 "provider": "DeepSeek",
81 "maxLength": 400000,
82 "tokenLimit": 100000,
83 "context": "128K",
84 },
85 "deepseek-r1-distill-llama-70b": {
86 "id": "deepseek-r1-distill-llama-70b",
87 "name": "DeepSeek-R1-70B",
88 "model": "DeepSeek-R1-70B",
89 "provider": "DeepSeek",
90 "maxLength": 400000,
91 "tokenLimit": 100000,
92 "context": "128K",
93 },
94 "deepseek-v3": {
95 "id": "deepseek-v3",
96 "name": "DeepSeek-V3",
97 "model": "DeepSeek-V3",
98 "provider": "DeepSeek",
99 "maxLength": 400000,
100 "tokenLimit": 100000,
101 "context": "128K",
102 },
157 103 "gemini-2.0-flash": {
158 104 "id": "gemini-2.0-flash",
159 105 "name": "Gemini-2.0-Flash",
@@ -181,34 +127,93 @@ models = {
181 127 "tokenLimit": 1000000,
182 128 "context": "1024K",
183 129 },
130 "gpt-4o-2024-08-06": {
131 "id": "gpt-4o-2024-08-06",
132 "name": "GPT-4o",
133 "model": "ChatGPT",
134 "provider": "OpenAI",
135 "maxLength": 260000,
136 "tokenLimit": 126000,
137 "context": "128K",
138 },
139 "gpt-4o-mini-2024-07-18": {
140 "id": "gpt-4o-mini-2024-07-18",
141 "name": "GPT-4o-Mini",
142 "model": "ChatGPT",
143 "provider": "OpenAI",
144 "maxLength": 260000,
145 "tokenLimit": 126000,
146 "context": "128K",
147 },
148 "gpt-4o-mini-free": {
149 "id": "gpt-4o-mini-free",
150 "name": "GPT-4o-Mini-Free",
151 "model": "ChatGPT",
152 "provider": "OpenAI",
153 "maxLength": 31200,
154 "tokenLimit": 7800,
155 "context": "8K",
156 },
157 "grok-3": {
158 "id": "grok-3",
159 "name": "Grok-3",
160 "model": "Grok",
161 "provider": "x.ai",
162 "maxLength": 800000,
163 "tokenLimit": 200000,
164 "context": "200K",
165 },
166 "grok-3-r1": {
167 "id": "grok-3-r1",
168 "name": "Grok-3-Thinking",
169 "model": "Grok",
170 "provider": "x.ai",
171 "maxLength": 800000,
172 "tokenLimit": 200000,
173 "context": "200K",
174 },
175 "o3-mini": {
176 "id": "o3-mini",
177 "name": "o3-mini",
178 "model": "o3",
179 "provider": "OpenAI",
180 "maxLength": 400000,
181 "tokenLimit": 100000,
182 "context": "128K",
183 },
184 184 }
185 185
186
186 187 class Liaobots(AsyncGeneratorProvider, ProviderModelMixin):
187 188 url = "https://liaobots.site"
188 189 working = True
189 190 supports_message_history = True
190 191 supports_system_message = True
191 192
192 default_model = "gpt-4o-2024-11-20"
193 default_model = "gpt-4o-2024-08-06"
193 194 models = list(models.keys())
194 195 model_aliases = {
195 "gpt-4o-mini": "gpt-4o-mini-free",
196 "gpt-4o": default_model,
197 "gpt-4o-mini": "gpt-4o-mini-2024-07-18",
198 "gpt-4": default_model,
199
200 "o1-preview": "o1-preview-2024-09-12",
201
202 "deepseek-r1": "deepseek-r1-distill-llama-70b",
203
204 "claude-3-opus": "claude-3-opus-20240229",
205 "claude-3.5-sonnet": "claude-3-5-sonnet-20240620",
196 # Anthropic
206 197 "claude-3.5-sonnet": "claude-3-5-sonnet-20241022",
207 "claude-3-sonnet": "claude-3-sonnet-20240229",
208 "claude-3-opus": "claude-3-opus-20240229-t",
209 198 "claude-3.5-sonnet": "claude-3-5-sonnet-20241022-t",
199 "claude-3.7-sonnet": "claude-3-7-sonnet-20250219",
200 "claude-3.7-sonnet": "claude-3-7-sonnet-20250219-t",
201 "claude-3.7-sonnet-thinking": "claude-3-7-sonnet-20250219-thinking",
202 "claude-3-opus": "claude-3-opus-20240229",
203 "claude-3-sonnet": "claude-3-sonnet-20240229",
210 204
205 # DeepSeek
206 "deepseek-r1": "deepseek-r1-distill-llama-70b",
207
208 # Google
211 209 "gemini-2.0-flash-thinking": "gemini-2.0-flash-thinking-exp",
210 "gemini-2.0-pro": "gemini-2.0-pro-exp",
211
212 # OpenAI
213 "gpt-4": default_model,
214 "gpt-4o": default_model,
215 "gpt-4o-mini": "gpt-4o-mini-2024-07-18",
216 "gpt-4o-mini": "gpt-4o-mini-free",
212 217 }
213 218
214 219 _auth_code = ""
Deleted g4f/Provider/Mhystical.py +0 -49
@@ -1,49 +0,0 @@
1 from __future__ import annotations
2
3 from ..typing import AsyncResult, Messages
4 from .template import OpenaiTemplate
5
6 class Mhystical(OpenaiTemplate):
7 url = "https://mhystical.cc"
8 api_endpoint = "https://api.mhystical.cc/v1/completions"
9 login_url = "https://mhystical.cc/dashboard"
10 api_key = "mhystical"
11
12 working = True
13 supports_stream = False # Set to False, as streaming is not specified in ChatifyAI
14 supports_system_message = False
15
16 default_model = 'gpt-4'
17 models = [default_model]
18
19 @classmethod
20 def get_model(cls, model: str, **kwargs) -> str:
21 cls.last_model = cls.default_model
22 return cls.default_model
23
24 @classmethod
25 def create_async_generator(
26 cls,
27 model: str,
28 messages: Messages,
29 stream: bool = False,
30 api_key: str = None,
31 **kwargs
32 ) -> AsyncResult:
33 headers = {
34 "x-api-key": cls.api_key,
35 "Content-Type": "application/json",
36 "accept": "*/*",
37 "cache-control": "no-cache",
38 "origin": cls.url,
39 "referer": f"{cls.url}/",
40 "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
41 }
42 return super().create_async_generator(
43 model=model,
44 messages=messages,
45 stream=cls.supports_stream,
46 api_endpoint=cls.api_endpoint,
47 headers=headers,
48 **kwargs
49 )
Modified g4f/Provider/PollinationsAI.py +9 -30
@@ -13,7 +13,7 @@ from ..image import to_data_uri
13 13 from ..errors import ModelNotFoundError
14 14 from ..requests.raise_for_status import raise_for_status
15 15 from ..requests.aiohttp import get_connector
16 from ..providers.response import ImageResponse, ImagePreview, FinishReason, Usage, Audio
16 from ..providers.response import ImageResponse, ImagePreview, FinishReason, Usage
17 17 from .. import debug
18 18
19 19 DEFAULT_HEADERS = {
@@ -32,8 +32,7 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
32 32 supports_message_history = True
33 33
34 34 # API endpoints
35 text_api_endpoint = "https://text.pollinations.ai"
36 openai_endpoint = "https://text.pollinations.ai/openai"
35 text_api_endpoint = "https://text.pollinations.ai/openai"
37 36 image_api_endpoint = "https://image.pollinations.ai/"
38 37
39 38 # Models configuration
@@ -44,24 +43,21 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
44 43 image_models = [default_image_model]
45 44 extra_image_models = ["flux-pro", "flux-dev", "flux-schnell", "midjourney", "dall-e-3"]
46 45 vision_models = [default_vision_model, "gpt-4o-mini", "o1-mini"]
47 extra_text_models = ["claude", "claude-email", "deepseek-reasoner", "deepseek-r1"] + vision_models
48 audio_models = {}
46 extra_text_models = vision_models
49 47 _models_loaded = False
50 48 model_aliases = {
51 49 ### Text Models ###
52 50 "gpt-4o-mini": "openai",
53 51 "gpt-4": "openai-large",
54 52 "gpt-4o": "openai-large",
53 "o1-mini": "openai-reasoning",
55 54 "qwen-2.5-coder-32b": "qwen-coder",
56 55 "llama-3.3-70b": "llama",
57 56 "mistral-nemo": "mistral",
58 "gpt-4o": "searchgpt",
59 "deepseek-chat": "claude-hybridspace",
57 "gpt-4o-mini": "searchgpt",
60 58 "llama-3.1-8b": "llamalight",
61 "gpt-4o-vision": "gpt-4o",
62 "gpt-4o-mini-vision": "gpt-4o-mini",
63 "deepseek-chat": "claude-email",
64 "deepseek-r1": "deepseek-reasoner",
59 "llama-3.3-70b": "llama-scaleway",
60 "phi-4": "phi",
65 61 "gemini-2.0": "gemini",
66 62 "gemini-2.0-flash": "gemini",
67 63 "gemini-2.0-flash-thinking": "gemini-thinking",
@@ -92,17 +88,10 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
92 88 # Update of text models
93 89 text_response = requests.get("https://text.pollinations.ai/models")
94 90 text_response.raise_for_status()
95 models = text_response.json()
96 91 original_text_models = [
97 92 model.get("name")
98 for model in models
99 if model.get("type") == "chat"
93 for model in text_response.json()
100 94 ]
101 cls.audio_models = {
102 model.get("name"): model.get("voices")
103 for model in models
104 if model.get("audio")
105 }
106 95
107 96 # Combining text models
108 97 combined_text = (
@@ -273,18 +262,8 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
273 262 "seed": seed,
274 263 "cache": cache
275 264 })
276 if "gemini" in model:
277 data.pop("seed")
278 if model in cls.audio_models:
279 data["voice"] = random.choice(cls.audio_models[model])
280 url = f"{cls.text_api_endpoint}"
281 else:
282 url = cls.openai_endpoint
283 async with session.post(url, json=data) as response:
265 async with session.post(cls.text_api_endpoint, json=data) as response:
284 266 await raise_for_status(response)
285 if response.headers["content-type"] == "audio/mpeg":
286 yield Audio(await response.read())
287 return
288 267 result = await response.json()
289 268 choice = result["choices"][0]
290 269 message = choice.get("message", {})
Modified g4f/Provider/PollinationsImage.py +1 -0
@@ -7,6 +7,7 @@ from ..typing import AsyncResult, Messages
7 7 from .PollinationsAI import PollinationsAI
8 8
9 9 class PollinationsImage(PollinationsAI):
10 label = "PollinationsImage"
10 11 default_model = "flux"
11 12 default_vision_model = None
12 13 default_image_model = default_model
Modified g4f/Provider/TeachAnything.py +4 -12
@@ -12,19 +12,11 @@ from .helper import format_prompt
12 12 class TeachAnything(AsyncGeneratorProvider, ProviderModelMixin):
13 13 url = "https://www.teach-anything.com"
14 14 api_endpoint = "/api/generate"
15
15 16 working = True
16 default_model = "llama-3.1-70b"
17 models = [default_model]
18
19 @classmethod
20 def get_model(cls, model: str) -> str:
21 if model in cls.models:
22 return model
23 elif model in cls.model_aliases:
24 return cls.model_aliases[model]
25 else:
26 return cls.default_model
27
17
18 default_model = 'gemini-1.5-pro'
19 models = [default_model, 'gemini-1.5-flash']
28 20
29 21 @classmethod
30 22 async def create_async_generator(
Modified g4f/Provider/__init__.py +0 -2
@@ -30,14 +30,12 @@ from .Glider import Glider
30 30 from .ImageLabs import ImageLabs
31 31 from .Jmuz import Jmuz
32 32 from .Liaobots import Liaobots
33 from .Mhystical import Mhystical
34 33 from .OIVSCode import OIVSCode
35 34 from .PerplexityLabs import PerplexityLabs
36 35 from .Pi import Pi
37 36 from .Pizzagpt import Pizzagpt
38 37 from .PollinationsAI import PollinationsAI
39 38 from .PollinationsImage import PollinationsImage
40 from .Prodia import Prodia
41 39 from .TeachAnything import TeachAnything
42 40 from .You import You
43 41 from .Yqcloud import Yqcloud
Renamed g4f/Provider/not_working/Prodia.py +5 -4
Modified g4f/Provider/not_working/__init__.py +1 -0
Modified g4f/debug.py +10 -6
Modified g4f/models.py +46 -17
Modified g4f/providers/response.py +127 -56
Modified g4f/tools/run_tools.py +246 -130