返回提交历史
Modified
docs/providers-and-models.md
+42
-34
Modified
g4f/Provider/Blackbox.py
+55
-57
Modified
g4f/Provider/DeepInfraChat.py
+1
-1
Added
g4f/Provider/Glider.py
+120
-0
Modified
g4f/Provider/PerplexityLabs.py
+0
-4
Modified
g4f/Provider/PollinationsAI.py
+28
-29
Modified
g4f/Provider/__init__.py
+1
-3
Renamed
g4f/Provider/not_working/AIChatFree.py
+6
-6
Renamed
g4f/Provider/not_working/AIUncensored.py
+6
-6
Renamed
g4f/Provider/not_working/AutonomousAI.py
+5
-5
Modified
g4f/Provider/not_working/__init__.py
+3
-0
Modified
g4f/gui/client/static/css/style.css
+43
-0
Modified
g4f/gui/client/static/js/chat.v1.js
+44
-12
Modified
g4f/models.py
+36
-39
XFEstudio/gpt4free
Added new models and providers, improved interface components, improved providers (#2646)
* Fix conflict g4f/gui/client/static/css/style.css g4f/gui/client/static/js/chat.v1.js g4f/models.py g4f/Provider/. * Update g4f/Provider/Blackbox.py * Update g4f/Provider/PollinationsAI.py * Update docs/providers-and-models.md * Disabled provider 'AIUncensored' * Two providers 'AIChatFree, AutonomousAI' are disabled --------- Co-authored-by: kqlio67 <>
3b091647
代码差异
14 个文件
+390
-196
@@ -38,7 +38,6 @@ This document provides an overview of various AI providers and models, including
38
38
| Website | API Credentials | Provider | Text Models | Image Models | Vision (Image Upload) | Stream | Status |
39
39
|----------|-------------|--------------|---------------|--------|--------|------|------|
40
40
|[aichatfree.info](https://aichatfree.info)|No auth required|`g4f.Provider.AIChatFree`|`gemini-1.5-pro` _**(1+)**_|❌|❌|✔||
41
|[aiuncensored.info/ai_uncensored](https://www.aiuncensored.info/ai_uncensored)|Optional API key|`g4f.Provider.AIUncensored`|`hermes-3`|❌|❌|✔||
42
41
|[autonomous.ai](https://www.autonomous.ai/anon/)|No auth required|`g4f.Provider.AutonomousAI`|`llama-3.3-70b, qwen-2.5-coder-32b, hermes-3, llama-3.2-90b, llama-3.3-70b, llama-3-2-70b`|✔|❌|✔||
43
42
|[blackbox.ai](https://www.blackbox.ai)|No auth required|`g4f.Provider.Blackbox`|`blackboxai, gpt-4, gpt-4o, gemini-1.5-flash, gemini-1.5-pro, claude-3.5-sonnet, blackboxai-pro, llama-3.1-8b, llama-3.1-70b, llama-3-1-405b, llama-3.3-70b, mixtral-7b, deepseek-chat, dbrx-instruct, qwq-32b, hermes-2-dpo, deepseek-r1` _**(+31)**_|`flux`|`blackboxai, gpt-4o, gemini-1.5-pro, gemini-1.5-flash, llama-3.1-8b, llama-3.1-70b, llama-3.1-405b`|✔||
44
43
|[cablyai.com](https://cablyai.com)|No auth required|`g4f.Provider.CablyAI`|`cably-80b`|❌|❌|✔||
@@ -54,7 +53,9 @@ This document provides an overview of various AI providers and models, including
54
53
|[chat10.free2gpt.xyz](https://chat10.free2gpt.xyz)|No auth required|`g4f.Provider.Free2GPT`|`mistral-7b`|❌|❌|✔||
55
54
|[freegptsnav.aifree.site](https://freegptsnav.aifree.site)|No auth required|`g4f.Provider.FreeGpt`|`gemini-1.5-pro`|❌|❌|✔||
56
55
|[app.giz.ai/assistant](https://app.giz.ai/assistant)|No auth required|`g4f.Provider.GizAI`|`gemini-1.5-flash`|❌|❌|✔||
56
|[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`|❌|❌|✔||
57
57
|[gprochat.com](https://gprochat.com)|No auth required|`g4f.Provider.GPROChat`|`gemini-1.5-pro`|❌|❌|✔||
58
|[hailuo.ai](https://www.hailuo.ai)|No auth required|`g4f.Provider.HailuoAI`|`MiniMax` _**(1)**_|❌|❌|✔||
58
59
|[editor.imagelabs.net](https://editor.imagelabs.net)|No auth required|`g4f.Provider.ImageLabs`|`gemini-1.5-pro`|❌|❌|✔||
59
60
|[editor.imagelabs.net](editor.imagelabs.net)|No auth required|`g4f.Provider.ImageLabs`|❌|`sdxl-turbo`|❌|✔||
60
61
|[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`|❌|✔||
@@ -78,7 +79,9 @@ This document provides an overview of various AI providers and models, including
78
79
|[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`|❌|✔||
79
80
|[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`|❌|✔||
80
81
|[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`|❌|❌|✔||
82
|[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`|✔|✔|❌|✔||
81
83
|[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`|❌|❌|✔||
84
|[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`|❌|❌|✔||
82
85
|[qwen-qwen2-72b-instruct.hf.space](https://qwen-qwen2-72b-instruct.hf.space)|[Get API key](https://huggingface.co/settings/tokens)|`g4f.Provider.Qwen_Qwen_2_72B_Instruct`|`qwen-2-72b`|❌|❌|✔||
83
86
|[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`|❌|✔||
84
87
|[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`|❌|✔||
@@ -105,6 +108,7 @@ This document provides an overview of various AI providers and models, including
105
108
|[meta.ai](https://www.meta.ai)|[Manual cookies](https://www.meta.ai)|`g4f.Provider.MetaAI`|`meta-ai`|❌|❌|✔||✔|
106
109
|[meta.ai](https://www.meta.ai)|[Manual cookies](https://www.meta.ai)|`g4f.Provider.MetaAIAccount`|❌|`meta-ai`|❌|✔||
107
110
|[designer.microsoft.com](https://designer.microsoft.com)|[Manual cookies](https://designer.microsoft.com)|`g4f.Provider.MicrosoftDesigner`|❌|`dall-e-3`|❌|❌||
111
|[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)**_|❌|❌|✔||
108
112
|[platform.openai.com](https://platform.openai.com)|[Get API key](https://platform.openai.com/settings/organization/api-keys)|`g4f.Provider.OpenaiAPI`|✔|❌|❌|✔||
109
113
|[chatgpt.com](https://chatgpt.com)|[Manual cookies](https://chatgpt.com)|`g4f.Provider.OpenaiChat`|`gpt-4o, gpt-4o-mini, gpt-4` _**(8+)**_|✔_**(1)**_|✔_**(8+)**_|✔||
110
114
|[perplexity.ai](https://www.perplexity.ai)|[Get API key](https://www.perplexity.ai/settings/api)|`g4f.Provider.PerplexityApi`|✔ _**(6+)**_|❌|❌|✔||
@@ -120,41 +124,40 @@ This document provides an overview of various AI providers and models, including
120
124
### Text Models
121
125
| Model | Base Provider | Providers | Website |
122
126
|-------|---------------|-----------|---------|
123
|gpt-3|OpenAI|2+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-3-5-turbo)|
124
|gpt-3.5-turbo|OpenAI|2+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-3-5-turbo)|
125
|gpt-4|OpenAI|10+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4-turbo-and-gpt-4)|
126
|gpt-4o|OpenAI|10+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4o)|
127
|gpt-4o-mini|OpenAI|9+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4o-mini)|
128
|o1|OpenAI|1+ Providers|[platform.openai.com](https://openai.com/index/introducing-openai-o1-preview/)|
129
|o1-preview|OpenAI|1+ Providers|[platform.openai.com](https://openai.com/index/introducing-openai-o1-preview/)|
130
|o1-mini|OpenAI|1+ Providers|[platform.openai.com](https://openai.com/index/openai-o1-mini-advancing-cost-efficient-reasoning/)|
131
|gigachat|1+ Providers|[developers.sber.ru/gigachat](https://developers.sber.ru/gigachat)|
127
|gpt-3|OpenAI|1+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-3-5-turbo)|
128
|gpt-3.5-turbo|OpenAI|1+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-3-5-turbo)|
129
|gpt-4|OpenAI|11+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4-turbo-and-gpt-4)|
130
|gpt-4o|OpenAI|9+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4o)|
131
|gpt-4o-mini|OpenAI|8+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4o-mini)|
132
|o1|OpenAI|1+ Providers|[openai.com](https://openai.com/index/introducing-openai-o1-preview/)|
133
|o1-preview|OpenAI|1+ Providers|[openai.com](https://openai.com/index/introducing-openai-o1-preview/)|
134
|o1-mini|OpenAI|1+ Providers|[openai.com](https://openai.com/index/openai-o1-mini-advancing-cost-efficient-reasoning/)|
135
|gigachat|GigaChat|1+ Providers|[developers.sber.ru/gigachat](https://developers.sber.ru/gigachat)|
132
136
|meta-ai|Meta|1+ Providers|[ai.meta.com](https://ai.meta.com/)|
133
|llama-2-7b|Meta Llama|2+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Llama-2-7b)|
137
|llama-2-7b|Meta Llama|1+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Llama-2-7b)|
134
138
|llama-3-8b|Meta Llama|2+ Providers|[ai.meta.com](https://ai.meta.com/blog/meta-llama-3/)|
135
139
|llama-3-70b|Meta Llama|1+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Meta-Llama-3-70B)|
136
140
|llama-3.1-8b|Meta Llama|6+ Providers|[ai.meta.com](https://ai.meta.com/blog/meta-llama-3-1/)|
137
141
|llama-3.1-70b|Meta Llama|6+ Providers|[ai.meta.com](https://ai.meta.com/blog/meta-llama-3-1/)|
138
142
|llama-3.1-405b|Meta Llama|2+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Llama-3.1-405B)|
139
143
|llama-3.2-1b|Meta Llama|1+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Llama-3.2-1B)|
144
|llama-3.2-3b|Meta Llama|1+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Llama-3.2-3B)|
140
145
|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/)|
141
|llama-3.2-70b|Meta Llama|1+ Providers|[ai.meta.com](https://ai.meta.com/blog/llama-3-2-connect-2024-vision-edge-mobile-devices/)|
142
|llama-3.2-90b|Meta Llama|2+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Llama-3.2-90B-Vision)|
143
|llama-3.3-70b|Meta Llama|8+ Providers|[]( )|
144
|mixtral-7b|Mistral AI|1+ Providers|[mistral.ai](https://mistral.ai/news/mixtral-of-experts/)|
145
|mixtral-8x7b|Mistral AI|2+ Providers|[mistral.ai](https://mistral.ai/news/mixtral-of-experts/)|
146
|mistral-nemo|Mistral AI|3+ Providers|[huggingface.co](https://huggingface.co/mistralai/Mistral-Nemo-Instruct-2407)|
147
|hermes-2-dpo|NousResearch|2+ Providers|[huggingface.co](https://huggingface.co/NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO)|
148
|hermes-3|NousResearch|2+ Providers|[nousresearch.com](https://nousresearch.com/hermes3/)|
146
|llama-3.2-90b|Meta Llama|1+ Providers|[huggingface.co](https://huggingface.co/meta-llama/Llama-3.2-90B-Vision)|
147
|llama-3.3-70b|Meta Llama|6+ Providers|[ai.meta.com](https://ai.meta.com/blog/llama-3-3/)|
148
|mixtral-7b|Mistral|1+|[mistral.ai](https://mistral.ai/news/mixtral-of-experts/)|
149
|mixtral-8x7b|Mistral|2+ Providers|[mistral.ai](https://mistral.ai/news/mixtral-of-experts/)|
150
|mistral-nemo|Mistral|3+ Providers|[huggingface.co](https://huggingface.co/mistralai/Mistral-Nemo-Instruct-2407)|
151
|hermes-2-dpo|NousResearch|1+ Providers|[huggingface.co](https://huggingface.co/NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO)|
149
152
|phi-3.5-mini|Microsoft|1+ Providers|[huggingface.co](https://huggingface.co/microsoft/Phi-3.5-mini-instruct)|
150
153
|wizardlm-2-7b|Microsoft|1+ Providers|[wizardlm.github.io](https://wizardlm.github.io/WizardLM2/)|
151
154
|wizardlm-2-8x22b|Microsoft|2+ Providers|[wizardlm.github.io](https://wizardlm.github.io/WizardLM2/)|
152
|gemini|Google DeepMind|1+ Providers|[deepmind.google](http://deepmind.google/technologies/gemini/)|
155
|gemini|Google DeepMind|1+|[deepmind.google](http://deepmind.google/technologies/gemini/)|
153
156
|gemini-exp|Google DeepMind|1+ Providers|[blog.google](https://blog.google/feed/gemini-exp-1206/)|
154
157
|gemini-1.5-flash|Google DeepMind|5+ Providers|[deepmind.google](https://deepmind.google/technologies/gemini/flash/)|
155
|gemini-1.5-pro|Google DeepMind|7+ Providers|[deepmind.google](https://deepmind.google/technologies/gemini/pro/)|
158
|gemini-1.5-pro|Google DeepMind|6+ Providers|[deepmind.google](https://deepmind.google/technologies/gemini/pro/)|
156
159
|gemini-2.0-flash|Google DeepMind|2+ Providers|[deepmind.google](https://deepmind.google/technologies/gemini/flash/)|
157
|gemini-2.0-flash-thinking|Google DeepMind|1+ Providers|[deepmind.google](https://ai.google.dev/gemini-api/docs/thinking-mode)|
160
|gemini-2.0-flash-thinking|Google DeepMind|1+ Providers|[ai.google.dev](https://ai.google.dev/gemini-api/docs/thinking-mode)|
158
161
|claude-3-haiku|Anthropic|2+ Providers|[anthropic.com](https://www.anthropic.com/news/claude-3-haiku)|
159
162
|claude-3-sonnet|Anthropic|1+ Providers|[anthropic.com](https://www.anthropic.com/news/claude-3-family)|
160
163
|claude-3-opus|Anthropic|2+ Providers|[anthropic.com](https://www.anthropic.com/news/claude-3-family)|
@@ -162,36 +165,41 @@ This document provides an overview of various AI providers and models, including
162
165
|reka-core|Reka AI|1+ Providers|[reka.ai](https://www.reka.ai/ourmodels)|
163
166
|blackboxai|Blackbox AI|1+ Providers|[docs.blackbox.chat](https://docs.blackbox.chat/blackbox-ai-1)|
164
167
|blackboxai-pro|Blackbox AI|1+ Providers|[docs.blackbox.chat](https://docs.blackbox.chat/blackbox-ai-1)|
165
|command-r|CohereForAI|1+ Providers|[docs.cohere.com](https://docs.cohere.com/docs/command-r-plus)
166
|command-r-plus|CohereForAI|2+ Providers|[docs.cohere.com](https://docs.cohere.com/docs/command-r-plus)
168
|command-r|CohereForAI|1+ Providers|[docs.cohere.com](https://docs.cohere.com/docs/command-r-plus)|
169
|command-r-plus|CohereForAI|2+ Providers|[docs.cohere.com](https://docs.cohere.com/docs/command-r-plus)|
167
170
|command-r7b|CohereForAI|1+ Providers|[huggingface.co](https://huggingface.co/CohereForAI/c4ai-command-r7b-12-2024)|
168
171
|qwen-1.5-7b|Qwen|1+ Providers|[huggingface.co](https://huggingface.co/Qwen/Qwen1.5-7B)|
169
172
|qwen-2-72b|Qwen|1+ Providers|[huggingface.co](https://huggingface.co/Qwen/Qwen2-72B)|
173
|qwen-2-vl-7b|Qwen|1+ Providers|[huggingface.co](https://huggingface.co/Qwen/Qwen2-VL-7B)|
170
174
|qwen-2.5-72b|Qwen|3+ Providers|[huggingface.co](https://huggingface.co/Qwen/Qwen2.5-72B-Instruct)|
171
|qwen-2.5-coder-32b|Qwen|5+ Providers|[huggingface.co](https://huggingface.co/Qwen/Qwen2.5-Coder-32B)|
175
|qwen-2.5-coder-32b|Qwen|4+ Providers|[huggingface.co](https://huggingface.co/Qwen/Qwen2.5-Coder-32B)|
176
|qwen-2.5-1m-demo|Qwen|1+ Providers|[huggingface.co](https://huggingface.co/Qwen/Qwen2.5-1M-Demo)|
172
177
|qwq-32b|Qwen|4+ Providers|[huggingface.co](https://huggingface.co/Qwen/QwQ-32B-Preview)|
173
178
|qvq-72b|Qwen|1+ Providers|[huggingface.co](https://huggingface.co/Qwen/QVQ-72B-Preview)|
174
179
|pi|Inflection|1+ Providers|[inflection.ai](https://inflection.ai/blog/inflection-2-5)|
175
|deepseek-chat|DeepSeek|4+ Providers|[huggingface.co](https://huggingface.co/deepseek-ai/deepseek-llm-67b-chat)|
176
|deepseek-r1|DeepSeek|5+ Providers|[api-docs.deepseek.com](https://api-docs.deepseek.com/news/news250120)|
177
|grok-2|x.ai|1+ Providers|[x.ai](https://x.ai/blog/grok-2)|
178
|sonar-online|Perplexity AI|1+ Providers|[docs.perplexity.ai](https://docs.perplexity.ai/)|
179
|sonar-chat|Perplexity AI|1+ Providers|[docs.perplexity.ai](https://docs.perplexity.ai/)|
180
|deepseek-chat|DeepSeek|3+ Providers|[huggingface.co](https://huggingface.co/deepseek-ai/deepseek-llm-67b-chat)|
181
|deepseek-v3|DeepSeek|2+ Providers|[api-docs.deepseek.com](https://api-docs.deepseek.com/news/news250120)|
182
|deepseek-r1|DeepSeek|6+ Providers|[api-docs.deepseek.com](https://api-docs.deepseek.com/news/news250120)|
183
|grok-2|x.ai|1+|[x.ai](https://x.ai/blog/grok-2)|
184
|sonar|Perplexity AI|1+ Providers|[docs.perplexity.ai](https://docs.perplexity.ai/)|
185
|sonar-pro|Perplexity AI|1+ Providers|[docs.perplexity.ai](https://docs.perplexity.ai/)|
186
|sonar-reasoning|Perplexity AI|1+ Providers|[docs.perplexity.ai](https://docs.perplexity.ai/)|
180
187
|nemotron-70b|Nvidia|3+ Providers|[build.nvidia.com](https://build.nvidia.com/nvidia/llama-3_1-nemotron-70b-instruct)|
181
|lfm-40b|Liquid|1+ Providers|[liquid.ai](https://www.liquid.ai/liquid-foundation-models)|
182
188
|dbrx-instruct|Databricks|1+ Providers|[huggingface.co](https://huggingface.co/databricks/dbrx-instruct)|
189
|p1|PollinationsAI|1+ Providers|[pollinations.ai](https://pollinations.ai/)|
183
190
|cably-80b|CablyAI|1+ Providers|[cablyai.com](https://cablyai.com)|
184
191
|glm-4|THUDM|1+ Providers|[github.com/THUDM](https://github.com/THUDM/GLM-4)|
185
|evil|Evil Mode - Experimental|1+ Providers|[]( )|
186
192
|mini_max|MiniMax|1+ Providers|[hailuo.ai](https://www.hailuo.ai/)|
193
|evil|Evil Mode - Experimental|1+ Providers||
187
194
188
195
---
196
189
197
### Image Models
190
198
| Model | Base Provider | Providers | Website |
191
199
|-------|---------------|-----------|---------|
192
200
|sdxl-turbo|Stability AI|2+ Providers|[huggingface.co](https://huggingface.co/stabilityai/sdxl-turbo)|
193
201
|sd-3.5|Stability AI|1+ Providers|[huggingface.co](https://huggingface.co/stabilityai/stable-diffusion-3.5-large)|
194
|flux|Black Forest Labs|2+ Providers|[github.com/black-forest-labs/flux](https://github.com/black-forest-labs/flux)|
202
|flux|Black Forest Labs|3+ Providers|[github.com/black-forest-labs/flux](https://github.com/black-forest-labs/flux)|
195
203
|flux-pro|Black Forest Labs|1+ Providers|[huggingface.co](https://huggingface.co/enhanceaiteam/FLUX.1-Pro)|
196
204
|flux-dev|Black Forest Labs|3+ Providers|[huggingface.co](https://huggingface.co/black-forest-labs/FLUX.1-dev)|
197
205
|flux-schnell|Black Forest Labs|3+ Providers|[huggingface.co](https://huggingface.co/black-forest-labs/FLUX.1-schnell)|
@@ -1,12 +1,13 @@
1
1
from __future__ import annotations
2
2
3
3
from aiohttp import ClientSession
4
5
4
import re
6
5
import json
7
6
import random
8
7
import string
9
8
from pathlib import Path
9
from typing import Optional
10
from datetime import datetime, timezone
10
11
11
12
from ..typing import AsyncResult, Messages, ImagesType
12
13
from ..requests.raise_for_status import raise_for_status
@@ -14,7 +15,7 @@ from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
14
15
from ..image import ImageResponse, to_data_uri
15
16
from ..cookies import get_cookies_dir
16
17
from .helper import format_prompt, format_image_prompt
17
from ..providers.response import FinishReason, JsonConversation, Reasoning
18
from ..providers.response import JsonConversation, Reasoning
18
19
19
20
class Conversation(JsonConversation):
20
21
validated_value: str = None
@@ -38,13 +39,13 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
38
39
default_vision_model = default_model
39
40
default_image_model = 'ImageGeneration'
40
41
image_models = [default_image_model, "ImageGeneration2"]
41
vision_models = [default_vision_model, 'gpt-4o', 'gemini-pro', 'gemini-1.5-flash', 'llama-3.1-8b', 'llama-3.1-70b', 'llama-3.1-405b']
42
vision_models = [default_vision_model, 'gpt-4o', 'gemini-pro', 'deepseek-v3', 'gemini-1.5-flash', 'llama-3.1-8b', 'llama-3.1-70b', 'llama-3.1-405b']
43
reasoning_models = ['deepseek-r1']
42
44
43
45
userSelectedModel = ['gpt-4o', 'gemini-pro', 'claude-sonnet-3.5', 'deepseek-r1', 'deepseek-v3', 'blackboxai-pro']
44
46
45
47
agentMode = {
46
48
'ImageGeneration': {'mode': True, 'id': "ImageGenerationLV45LJp", 'name': "Image Generation"},
47
#
48
49
'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"},
49
50
'Mistral-(7B)-Instruct-v0.2': {'mode': True, 'id': "mistralai/Mistral-7B-Instruct-v0.2", 'name': "Mistral-(7B)-Instruct-v0.2"},
50
51
'DeepSeek-LLM-Chat-(67B)': {'mode': True, 'id': "deepseek-ai/deepseek-llm-67b-chat", 'name': "DeepSeek-LLM-Chat-(67B)"},
@@ -58,7 +59,6 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
58
59
"llama-3.1-8b": {'mode': True, 'id': "llama-3.1-8b"},
59
60
'llama-3.1-70b': {'mode': True, 'id': "llama-3.1-70b"},
60
61
'llama-3.1-405b': {'mode': True, 'id': "llama-3.1-405"},
61
#
62
62
'Python Agent': {'mode': True, 'id': "Python Agent"},
63
63
'Java Agent': {'mode': True, 'id': "Java Agent"},
64
64
'JavaScript Agent': {'mode': True, 'id': "JavaScript Agent"},
@@ -72,11 +72,8 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
72
72
'React Agent': {'mode': True, 'id': "React Agent"},
73
73
'Xcode Agent': {'mode': True, 'id': "Xcode Agent"},
74
74
'AngularJS Agent': {'mode': True, 'id': "AngularJS Agent"},
75
#
76
75
'blackboxai-pro': {'mode': True, 'id': "BLACKBOXAI-PRO"},
77
#
78
76
'repomap': {'mode': True, 'id': "repomap"},
79
#
80
77
'Heroku Agent': {'mode': True, 'id': "Heroku Agent"},
81
78
'Godot Agent': {'mode': True, 'id': "Godot Agent"},
82
79
'Go Agent': {'mode': True, 'id': "Go Agent"},
@@ -96,10 +93,9 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
96
93
'builder Agent': {'mode': True, 'id': "builder Agent"},
97
94
}
98
95
99
models = list(dict.fromkeys([default_model, *userSelectedModel, *image_models, *list(agentMode.keys()), *list(trendingAgentMode.keys())]))
96
models = list(dict.fromkeys([default_model, *userSelectedModel, *reasoning_models, *image_models, *list(agentMode.keys()), *list(trendingAgentMode.keys())]))
100
97
101
98
model_aliases = {
102
### chat ###
103
99
"gpt-4": "gpt-4o",
104
100
"gemini-1.5-flash": "gemini-1.5-flash",
105
101
"gemini-1.5-pro": "gemini-pro",
@@ -110,22 +106,11 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
110
106
"dbrx-instruct": "DBRX-Instruct",
111
107
"qwq-32b": "Qwen-QwQ-32B-Preview",
112
108
"hermes-2-dpo": "Nous-Hermes-2-Mixtral-8x7B-DPO",
113
"deepseek-chat": "deepseek-v3",
114
115
### image ###
116
109
"flux": "ImageGeneration",
117
"flux": "ImageGeneration2",
118
110
}
119
111
120
112
@classmethod
121
async def fetch_validated(
122
cls,
123
url: str = "https://www.blackbox.ai",
124
force_refresh: bool = False
125
) -> Optional[str]:
126
"""
127
Asynchronously retrieves the validated_value from the specified URL.
128
"""
113
async def fetch_validated(cls, url: str = "https://www.blackbox.ai", force_refresh: bool = False) -> Optional[str]:
129
114
cache_file = Path(get_cookies_dir()) / 'blackbox.json'
130
115
131
116
if not force_refresh and cache_file.exists():
@@ -141,14 +126,12 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
141
126
uuid_pattern = r'["\']([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})["\']'
142
127
143
128
def is_valid_context(text: str) -> bool:
144
"""Checks if the context is valid."""
145
129
return any(char + '=' in text for char in 'abcdefghijklmnopqrstuvwxyz')
146
130
147
131
async with ClientSession() as session:
148
132
try:
149
133
async with session.get(url) as response:
150
134
if response.status != 200:
151
print("Failed to load the page.")
152
135
return None
153
136
154
137
page_content = await response.text()
@@ -167,7 +150,6 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
167
150
if is_valid_context(context):
168
151
validated_value = match.group(1)
169
152
170
# Save to cache
171
153
cache_file.parent.mkdir(exist_ok=True)
172
154
try:
173
155
with open(cache_file, 'w') as f:
@@ -183,10 +165,9 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
183
165
return None
184
166
185
167
@classmethod
186
def generate_chat_id(cls) -> str:
187
"""Generate a random chat ID"""
168
def generate_id(cls, length: int = 7) -> str:
188
169
chars = string.ascii_letters + string.digits
189
return ''.join(random.choice(chars) for _ in range(7))
170
return ''.join(random.choice(chars) for _ in range(length))
190
171
191
172
@classmethod
192
173
async def create_async_generator(
@@ -216,6 +197,7 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
216
197
217
198
async with ClientSession(headers=headers) as session:
218
199
if model == "ImageGeneration2":
200
prompt = format_image_prompt(messages, prompt)
219
201
data = {
220
202
"query": format_image_prompt(messages, prompt),
221
203
"agentMode": True
@@ -235,18 +217,28 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
235
217
image_url_match = re.search(r'!\[.*?\]\((.*?)\)', response_json["markdown"])
236
218
if image_url_match:
237
219
image_url = image_url_match.group(1)
238
yield ImageResponse(images=[image_url], alt=prompt)
220
yield ImageResponse(images=[image_url], alt=format_image_prompt(messages, prompt))
239
221
return
240
222
241
223
if conversation is None or not hasattr(conversation, "chat_id"):
242
224
conversation = Conversation(model)
243
225
conversation.validated_value = await cls.fetch_validated()
244
conversation.chat_id = cls.generate_chat_id()
226
conversation.chat_id = cls.generate_id()
245
227
conversation.message_history = []
246
247
current_messages = [{"id": conversation.chat_id, "content": format_prompt(messages), "role": "user"}]
248
conversation.message_history.extend(messages)
249
228
229
current_messages = []
230
for i, msg in enumerate(messages):
231
msg_id = conversation.chat_id if i == 0 and msg["role"] == "user" else cls.generate_id()
232
current_msg = {
233
"id": msg_id,
234
"content": msg["content"],
235
"role": msg["role"]
236
}
237
if msg["role"] == "assistant" and i == len(messages)-1:
238
current_time = datetime.now(timezone.utc).isoformat(timespec='milliseconds').replace('+00:00', 'Z')
239
current_msg["createdAt"] = current_time
240
current_messages.append(current_msg)
241
250
242
if images is not None:
251
243
current_messages[-1]['data'] = {
252
244
"imagesData": [
@@ -279,6 +271,7 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
279
271
"clickedAnswer3": False,
280
272
"clickedForceWebSearch": False,
281
273
"visitFromDelta": False,
274
"isMemoryEnabled": False,
282
275
"mobileClient": False,
283
276
"userSelectedModel": model if model in cls.userSelectedModel else None,
284
277
"validated": conversation.validated_value,
@@ -288,6 +281,7 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
288
281
"domains": None,
289
282
"vscodeClient": False,
290
283
"codeInterpreterMode": False,
284
"customProfile": {"name": "", "occupation": "", "traits": [], "additionalInfo": "", "enableNewChats": False},
291
285
"webSearchMode": web_search
292
286
}
293
287
@@ -300,21 +294,36 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
300
294
if not text_to_yield or text_to_yield.isspace():
301
295
return
302
296
303
full_response = ""
304
305
297
if model in cls.image_models:
306
298
image_url_match = re.search(r'!\[.*?\]\((.*?)\)', text_to_yield)
307
299
if image_url_match:
308
300
image_url = image_url_match.group(1)
309
yield ImageResponse(image_url, format_image_prompt(messages, prompt))
301
prompt = format_image_prompt(messages, prompt)
302
yield ImageResponse(images=[image_url], alt=prompt)
310
303
else:
311
if "<think>" in text_to_yield and "</think>" in text_to_yield:
312
parts = text_to_yield.split('<think>', 1)
313
yield parts[0]
314
reasoning_parts = parts[1].split('</think>', 1)
315
yield Reasoning(f"<think>{reasoning_parts[0]}</think>")
316
yield reasoning_parts[1]
317
full_response = text_to_yield
304
if model in cls.reasoning_models and "\n\n\n" in text_to_yield:
305
think_split = text_to_yield.split("\n\n\n", 1)
306
if len(think_split) > 1:
307
think_content, answer = think_split[0].strip(), think_split[1].strip()
308
yield Reasoning(status=think_content)
309
yield answer
310
else:
311
yield text_to_yield
312
elif "<think>" in text_to_yield:
313
pre_think, rest = text_to_yield.split('<think>', 1)
314
think_content, post_think = rest.split('</think>', 1)
315
316
pre_think = pre_think.strip()
317
think_content = think_content.strip()
318
post_think = post_think.strip()
319
320
if pre_think:
321
yield pre_think
322
if think_content:
323
yield Reasoning(status=think_content)
324
if post_think:
325
yield post_think
326
318
327
elif "Generated by BLACKBOX.AI" in text_to_yield:
319
328
conversation.validated_value = await cls.fetch_validated(force_refresh=True)
320
329
if conversation.validated_value:
@@ -327,24 +336,13 @@ class Blackbox(AsyncGeneratorProvider, ProviderModelMixin):
327
336
328
337
if new_text and not new_text.isspace():
329
338
yield new_text
330
full_response = new_text
331
339
else:
332
340
if text_to_yield and not text_to_yield.isspace():
333
341
yield text_to_yield
334
full_response = text_to_yield
335
342
else:
336
343
if text_to_yield and not text_to_yield.isspace():
337
344
yield text_to_yield
338
full_response = text_to_yield
339
345
340
if full_response:
341
if max_tokens and len(full_response) >= max_tokens:
342
reason = "length"
343
else:
344
reason = "stop"
345
346
if return_conversation:
347
conversation.message_history.append({"role": "assistant", "content": full_response})
348
yield conversation
349
350
yield FinishReason(reason)
346
if return_conversation:
347
conversation.message_history.append({"role": "assistant", "content": text_to_yield})
348
yield conversation
@@ -27,7 +27,7 @@ class DeepInfraChat(OpenaiTemplate):
27
27
"llama-3.1-8b": "meta-llama/Meta-Llama-3.1-8B-Instruct",
28
28
"llama-3.3-70b": "meta-llama/Llama-3.3-70B-Instruct-Turbo",
29
29
"llama-3.1-70b": "meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo",
30
"deepseek-chat": "deepseek-ai/DeepSeek-V3",
30
"deepseek-v3": "deepseek-ai/DeepSeek-V3",
31
31
"qwq-32b": "Qwen/QwQ-32B-Preview",
32
32
"wizardlm-2-8x22b": "microsoft/WizardLM-2-8x22B",
33
33
"wizardlm-2-7b": "microsoft/WizardLM-2-7B",
@@ -0,0 +1,120 @@
1
from __future__ import annotations
2
import json
3
from aiohttp import ClientSession
4
5
from ..typing import AsyncResult, Messages
6
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
7
from ..requests.raise_for_status import raise_for_status
8
from ..providers.response import FinishReason, Reasoning
9
from .helper import format_prompt
10
11
class Glider(AsyncGeneratorProvider, ProviderModelMixin):
12
label = "Glider"
13
url = "https://glider.so"
14
api_endpoint = "https://glider.so/api/chat"
15
16
working = True
17
needs_auth = False
18
supports_stream = True
19
supports_system_message = True
20
supports_message_history = True
21
22
default_model = 'chat-llama-3-1-70b'
23
reasoning_models = ['deepseek-ai/DeepSeek-R1']
24
models = [
25
'chat-llama-3-1-70b',
26
'chat-llama-3-1-8b',
27
'chat-llama-3-2-3b',
28
] + reasoning_models
29
30
model_aliases = {
31
"llama-3.1-70b": "chat-llama-3-1-70b",
32
"llama-3.1-8b": "chat-llama-3-1-8b",
33
"llama-3.2-3b": "chat-llama-3-2-3b",
34
"deepseek-r1": "deepseek-ai/DeepSeek-R1",
35
}
36
37
@classmethod
38
async def create_async_generator(
39
cls,
40
model: str,
41
messages: Messages,
42
proxy: str = None,
43
**kwargs
44
) -> AsyncResult:
45
model = cls.get_model(model)
46
47
headers = {
48
"accept": "*/*",
49
"accept-language": "en-US,en;q=0.9",
50
"content-type": "application/json",
51
"origin": cls.url,
52
"referer": f"{cls.url}/",
53
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
54
}
55
56
async with ClientSession(headers=headers) as session:
57
data = {
58
"messages": [{
59
"role": "user",
60
"content": format_prompt(messages),
61
"id": "",
62
"chatId": "",
63
"createdOn": "",
64
"model": None
65
}],
66
"model": model
67
}
68
69
async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
70
await raise_for_status(response)
71
72
is_reasoning = False
73
current_reasoning = ""
74
75
async for chunk in response.content:
76
if not chunk:
77
continue
78
79
text = chunk.decode(errors="ignore")
80
81
if not text.startswith("data: "):
82
continue
83
84
if "[DONE]" in text:
85
if is_reasoning and current_reasoning:
86
yield Reasoning(status=current_reasoning.strip())
87
yield FinishReason("stop")
88
return
89
90
try:
91
json_data = json.loads(text[6:])
92
content = json_data["choices"][0].get("delta", {}).get("content", "")
93
94
if model in cls.reasoning_models:
95
if "<think>" in content:
96
content = content.replace("<think>", "")
97
is_reasoning = True
98
current_reasoning = content
99
continue
100
101
if "</think>" in content:
102
content = content.replace("</think>", "")
103
is_reasoning = False
104
current_reasoning += content
105
yield Reasoning(status=current_reasoning.strip())
106
current_reasoning = ""
107
continue
108
109
if is_reasoning:
110
current_reasoning += content
111
continue
112
113
if content:
114
yield content
115
116
except json.JSONDecodeError:
117
continue
118
except Exception:
119
yield FinishReason("error")
120
return
@@ -21,10 +21,6 @@ class PerplexityLabs(AsyncGeneratorProvider, ProviderModelMixin):
21
21
"sonar",
22
22
"sonar-reasoning",
23
23
]
24
model_aliases = {
25
"sonar-online": default_model,
26
"sonar-chat": default_model,
27
}
28
24
29
25
@classmethod
30
26
async def create_async_generator(
@@ -13,7 +13,7 @@ from ..typing import AsyncResult, Messages, ImagesType
13
13
from ..image import to_data_uri
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, FinishReason, Usage
16
from ..providers.response import ImageResponse, FinishReason, Usage, Reasoning
17
17
18
18
DEFAULT_HEADERS = {
19
19
'Accept': '*/*',
@@ -40,7 +40,8 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
40
40
default_vision_model = "gpt-4o"
41
41
extra_image_models = ["midjourney", "dall-e-3", "flux-pro"]
42
42
vision_models = [default_vision_model, "gpt-4o-mini"]
43
extra_text_models = ["claude", "claude-email", "deepseek-reasoner", "p1"] + vision_models
43
reasoning_models = ['deepseek-reasoner', 'deepseek-r1']
44
extra_text_models = ["claude", "claude-email", "p1"] + vision_models + reasoning_models
44
45
model_aliases = {
45
46
### Text Models ###
46
47
"gpt-4o-mini": "openai",
@@ -50,11 +51,8 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
50
51
"qwen-2.5-coder-32b": "qwen-coder",
51
52
"llama-3.3-70b": "llama",
52
53
"mistral-nemo": "mistral",
53
#"mistral-nemo": "unity", # bug with image url response
54
#"gpt-4o-mini": "midijourney", # bug with the answer
55
54
"gpt-4o-mini": "rtist",
56
55
"gpt-4o": "searchgpt",
57
#"mistral-nemo": "evil",
58
56
"gpt-4o-mini": "p1",
59
57
"deepseek-chat": "deepseek",
60
58
"deepseek-chat": "claude-hybridspace",
@@ -72,24 +70,25 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
72
70
73
71
@classmethod
74
72
def get_models(cls, **kwargs):
75
# Fetch image models if not cached
76
73
if not cls.image_models:
77
74
url = "https://image.pollinations.ai/models"
78
75
response = requests.get(url)
79
76
raise_for_status(response)
80
77
cls.image_models = response.json()
81
cls.image_models.extend(cls.extra_image_models)
82
83
# Fetch text models if not cached
78
cls.image_models = list(dict.fromkeys([*cls.image_models, *cls.extra_image_models]))
79
84
80
if not cls.text_models:
85
81
url = "https://text.pollinations.ai/models"
86
82
response = requests.get(url)
87
83
raise_for_status(response)
88
cls.text_models = [model.get("name") for model in response.json()]
89
cls.text_models.extend(cls.extra_text_models)
90
91
# Return combined models
92
return cls.text_models + cls.image_models
84
original_text_models = [model.get("name") for model in response.json()]
85
combined_text = cls.extra_text_models + [
86
model for model in original_text_models
87
if model not in cls.extra_text_models
88
]
89
cls.text_models = list(dict.fromkeys(combined_text))
90
91
return list(dict.fromkeys([*cls.text_models, *cls.image_models]))
93
92
94
93
@classmethod
95
94
async def create_async_generator(
@@ -97,7 +96,6 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
97
96
model: str,
98
97
messages: Messages,
99
98
proxy: str = None,
100
# Image specific parameters
101
99
prompt: str = None,
102
100
width: int = 1024,
103
101
height: int = 1024,
@@ -106,7 +104,6 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
106
104
private: bool = False,
107
105
enhance: bool = False,
108
106
safe: bool = False,
109
# Text specific parameters
110
107
images: ImagesType = None,
111
108
temperature: float = None,
112
109
presence_penalty: float = None,
@@ -122,8 +119,6 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
122
119
if not cache and seed is None:
123
120
seed = random.randint(0, 100000)
124
121
125
# Check if models
126
# Image generation
127
122
if model in cls.image_models:
128
123
yield await cls._generate_image(
129
124
model=model,
@@ -138,7 +133,6 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
138
133
safe=safe
139
134
)
140
135
else:
141
# Text generation
142
136
async for result in cls._generate_text(
143
137
model=model,
144
138
messages=messages,
@@ -227,7 +221,7 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
227
221
"top_p": top_p,
228
222
"frequency_penalty": frequency_penalty,
229
223
"jsonMode": jsonMode,
230
"stream": False, # To get more informations like Usage and FinishReason
224
"stream": False,
231
225
"seed": seed,
232
226
"cache": cache
233
227
}
@@ -235,24 +229,29 @@ class PollinationsAI(AsyncGeneratorProvider, ProviderModelMixin):
235
229
await raise_for_status(response)
236
230
async for line in response.content:
237
231
decoded_chunk = line.decode(errors="replace")
238
# If [DONE].
239
232
if "data: [DONE]" in decoded_chunk:
240
233
break
241
# Processing JSON format
242
234
try:
243
# Remove the prefix “data: “ and parse JSON
244
235
json_str = decoded_chunk.replace("data:", "").strip()
245
236
data = json.loads(json_str)
246
237
choice = data["choices"][0]
238
message = choice.get("message") or choice.get("delta", {})
239
240
# Handle reasoning content
241
if model in cls.reasoning_models:
242
if "reasoning_content" in message:
243
yield Reasoning(status=message["reasoning_content"].strip())
244
247
245
if "usage" in data:
248
246
yield Usage(**data["usage"])
249
if "message" in choice and "content" in choice["message"] and choice["message"]["content"]:
250
yield choice["message"]["content"].replace("\\(", "(").replace("\\)", ")")
251
elif "delta" in choice and "content" in choice["delta"] and choice["delta"]["content"]:
252
yield choice["delta"]["content"].replace("\\(", "(").replace("\\)", ")")
253
if "finish_reason" in choice and choice["finish_reason"] is not None:
247
content = message.get("content", "")
248
if content:
249
yield content.replace("\\(", "(").replace("\\)", ")")
250
if "finish_reason" in choice and choice["finish_reason"]:
254
251
yield FinishReason(choice["finish_reason"])
255
252
break
256
253
except json.JSONDecodeError:
257
254
yield decoded_chunk.strip()
258
continue
255
except Exception as e:
256
yield FinishReason("error")
257
break
@@ -14,9 +14,6 @@ from .hf_space import HuggingSpace
14
14
from .mini_max import HailuoAI, MiniMax
15
15
from .template import OpenaiTemplate, BackendApi
16
16
17
from .AIChatFree import AIChatFree
18
from .AIUncensored import AIUncensored
19
from .AutonomousAI import AutonomousAI
20
17
from .Blackbox import Blackbox
21
18
from .CablyAI import CablyAI
22
19
from .ChatGLM import ChatGLM
@@ -31,6 +28,7 @@ from .DeepInfraChat import DeepInfraChat
31
28
from .Free2GPT import Free2GPT
32
29
from .FreeGpt import FreeGpt
33
30
from .GizAI import GizAI
31
from .Glider import Glider
34
32
from .GPROChat import GPROChat
35
33
from .ImageLabs import ImageLabs
36
34
from .Jmuz import Jmuz
@@ -5,17 +5,17 @@ from hashlib import sha256
5
5
6
6
from aiohttp import BaseConnector, ClientSession
7
7
8
from ..errors import RateLimitError
9
from ..requests import raise_for_status
10
from ..requests.aiohttp import get_connector
11
from ..typing import AsyncResult, Messages
12
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
8
from ...errors import RateLimitError
9
from ...requests import raise_for_status
10
from ...requests.aiohttp import get_connector
11
from ...typing import AsyncResult, Messages
12
from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
13
13
14
14
15
15
class AIChatFree(AsyncGeneratorProvider, ProviderModelMixin):
16
16
url = "https://aichatfree.info"
17
17
18
working = True
18
working = False
19
19
supports_stream = True
20
20
supports_message_history = True
21
21
@@ -7,17 +7,17 @@ import hashlib
7
7
import json
8
8
import random
9
9
10
from ..typing import AsyncResult, Messages
11
from ..requests.raise_for_status import raise_for_status
12
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
13
from .helper import format_prompt
14
from ..providers.response import FinishReason
10
from ...typing import AsyncResult, Messages
11
from ...requests.raise_for_status import raise_for_status
12
from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
13
from ..helper import format_prompt
14
from ...providers.response import FinishReason
15
15
16
16
class AIUncensored(AsyncGeneratorProvider, ProviderModelMixin):
17
17
url = "https://www.aiuncensored.info/ai_uncensored"
18
18
api_key = "62852b00cb9e44bca86f0ec7e7455dc6"
19
19
20
working = True
20
working = False
21
21
supports_stream = True
22
22
supports_system_message = True
23
23
supports_message_history = True
@@ -4,10 +4,10 @@ from aiohttp import ClientSession
4
4
import base64
5
5
import json
6
6
7
from ..typing import AsyncResult, Messages
8
from ..requests.raise_for_status import raise_for_status
9
from ..providers.response import FinishReason
10
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
7
from ...typing import AsyncResult, Messages
8
from ...requests.raise_for_status import raise_for_status
9
from ...providers.response import FinishReason
10
from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
11
11
12
12
class AutonomousAI(AsyncGeneratorProvider, ProviderModelMixin):
13
13
url = "https://www.autonomous.ai/anon/"
@@ -19,7 +19,7 @@ class AutonomousAI(AsyncGeneratorProvider, ProviderModelMixin):
19
19
"summary": "https://chatgpt.autonomous.ai/api/v1/ai/summary"
20
20
}
21
21
22
working = True
22
working = False
23
23
supports_stream = True
24
24
supports_system_message = True
25
25
supports_message_history = True
@@ -1,7 +1,10 @@
1
1
from .AI365VIP import AI365VIP
2
from .AIChatFree import AIChatFree
2
3
from .AiChatOnline import AiChatOnline
3
4
from .AiChats import AiChats
4
5
from .Airforce import Airforce
6
from .AutonomousAI import AutonomousAI
7
from .AIUncensored import AIUncensored
5
8
from .AmigoChat import AmigoChat
6
9
from .Aura import Aura
7
10
from .Chatgpt4o import Chatgpt4o
@@ -1413,6 +1413,49 @@ form .field.saved .fa-xmark {
1413
1413
line-height: 30px;
1414
1414
}
1415
1415
1416
.collapsible {
1417
border: 1px solid var(--blur-border);
1418
border-radius: var(--border-radius-1);
1419
overflow: hidden;
1420
margin-bottom: 10px;
1421
}
1422
1423
.collapsible-header {
1424
padding: 10px;
1425
cursor: pointer;
1426
display: flex;
1427
justify-content: space-between;
1428
align-items: center;
1429
background-color: var(--blur-bg);
1430
}
1431
1432
.collapsible-header:hover {
1433
background-color: var(--button-hover);
1434
}
1435
1436
.collapsible-content {
1437
padding: 10px;
1438
}
1439
1440
.collapsible-content.hidden {
1441
display: none;
1442
}
1443
1444
.provider-item {
1445
padding: 5px 0;
1446
display: flex;
1447
justify-content: space-between;
1448
align-items: center;
1449
}
1450
1451
.fa-chevron-down {
1452
transition: transform 0.3s ease;
1453
}
1454
1455
.collapsible-header.active .fa-chevron-down {
1456
transform: rotate(180deg);
1457
}
1458
1416
1459
::-webkit-scrollbar-track {
1417
1460
background: var(--scrollbar);
1418
1461
}