webscout 8.2.2__py3-none-any.whl → 2026.1.19__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- webscout/AIauto.py +524 -143
- webscout/AIbase.py +247 -123
- webscout/AIutel.py +68 -132
- webscout/Bard.py +1072 -535
- webscout/Extra/GitToolkit/__init__.py +2 -2
- webscout/Extra/GitToolkit/gitapi/__init__.py +20 -12
- webscout/Extra/GitToolkit/gitapi/gist.py +142 -0
- webscout/Extra/GitToolkit/gitapi/organization.py +91 -0
- webscout/Extra/GitToolkit/gitapi/repository.py +308 -195
- webscout/Extra/GitToolkit/gitapi/search.py +162 -0
- webscout/Extra/GitToolkit/gitapi/trending.py +236 -0
- webscout/Extra/GitToolkit/gitapi/user.py +128 -96
- webscout/Extra/GitToolkit/gitapi/utils.py +82 -62
- webscout/Extra/YTToolkit/README.md +443 -0
- webscout/Extra/YTToolkit/YTdownloader.py +953 -957
- webscout/Extra/YTToolkit/__init__.py +3 -3
- webscout/Extra/YTToolkit/transcriber.py +595 -476
- webscout/Extra/YTToolkit/ytapi/README.md +230 -0
- webscout/Extra/YTToolkit/ytapi/__init__.py +22 -6
- webscout/Extra/YTToolkit/ytapi/captions.py +190 -0
- webscout/Extra/YTToolkit/ytapi/channel.py +302 -307
- webscout/Extra/YTToolkit/ytapi/errors.py +13 -13
- webscout/Extra/YTToolkit/ytapi/extras.py +178 -45
- webscout/Extra/YTToolkit/ytapi/hashtag.py +120 -0
- webscout/Extra/YTToolkit/ytapi/https.py +89 -88
- webscout/Extra/YTToolkit/ytapi/patterns.py +61 -61
- webscout/Extra/YTToolkit/ytapi/playlist.py +59 -59
- webscout/Extra/YTToolkit/ytapi/pool.py +8 -8
- webscout/Extra/YTToolkit/ytapi/query.py +143 -40
- webscout/Extra/YTToolkit/ytapi/shorts.py +122 -0
- webscout/Extra/YTToolkit/ytapi/stream.py +68 -63
- webscout/Extra/YTToolkit/ytapi/suggestions.py +97 -0
- webscout/Extra/YTToolkit/ytapi/utils.py +66 -62
- webscout/Extra/YTToolkit/ytapi/video.py +189 -18
- webscout/Extra/__init__.py +2 -3
- webscout/Extra/gguf.py +1298 -682
- webscout/Extra/tempmail/README.md +488 -0
- webscout/Extra/tempmail/__init__.py +28 -28
- webscout/Extra/tempmail/async_utils.py +143 -141
- webscout/Extra/tempmail/base.py +172 -161
- webscout/Extra/tempmail/cli.py +191 -187
- webscout/Extra/tempmail/emailnator.py +88 -84
- webscout/Extra/tempmail/mail_tm.py +378 -361
- webscout/Extra/tempmail/temp_mail_io.py +304 -292
- webscout/Extra/weather.py +196 -194
- webscout/Extra/weather_ascii.py +17 -15
- webscout/Provider/AISEARCH/PERPLEXED_search.py +175 -0
- webscout/Provider/AISEARCH/Perplexity.py +237 -304
- webscout/Provider/AISEARCH/README.md +106 -0
- webscout/Provider/AISEARCH/__init__.py +16 -10
- webscout/Provider/AISEARCH/brave_search.py +298 -0
- webscout/Provider/AISEARCH/iask_search.py +130 -209
- webscout/Provider/AISEARCH/monica_search.py +200 -246
- webscout/Provider/AISEARCH/webpilotai_search.py +242 -281
- webscout/Provider/Algion.py +413 -0
- webscout/Provider/Andi.py +74 -69
- webscout/Provider/Apriel.py +313 -0
- webscout/Provider/Ayle.py +323 -0
- webscout/Provider/ChatSandbox.py +329 -0
- webscout/Provider/ClaudeOnline.py +365 -0
- webscout/Provider/Cohere.py +232 -208
- webscout/Provider/DeepAI.py +367 -0
- webscout/Provider/Deepinfra.py +343 -173
- webscout/Provider/EssentialAI.py +217 -0
- webscout/Provider/ExaAI.py +274 -261
- webscout/Provider/Gemini.py +60 -54
- webscout/Provider/GithubChat.py +385 -367
- webscout/Provider/Gradient.py +286 -0
- webscout/Provider/Groq.py +556 -670
- webscout/Provider/HadadXYZ.py +323 -0
- webscout/Provider/HeckAI.py +392 -233
- webscout/Provider/HuggingFace.py +387 -0
- webscout/Provider/IBM.py +340 -0
- webscout/Provider/Jadve.py +317 -266
- webscout/Provider/K2Think.py +306 -0
- webscout/Provider/Koboldai.py +221 -381
- webscout/Provider/Netwrck.py +273 -228
- webscout/Provider/Nvidia.py +310 -0
- webscout/Provider/OPENAI/DeepAI.py +489 -0
- webscout/Provider/OPENAI/K2Think.py +423 -0
- webscout/Provider/OPENAI/PI.py +463 -0
- webscout/Provider/OPENAI/README.md +890 -0
- webscout/Provider/OPENAI/TogetherAI.py +405 -0
- webscout/Provider/OPENAI/TwoAI.py +255 -0
- webscout/Provider/OPENAI/__init__.py +148 -25
- webscout/Provider/OPENAI/ai4chat.py +348 -0
- webscout/Provider/OPENAI/akashgpt.py +436 -0
- webscout/Provider/OPENAI/algion.py +303 -0
- webscout/Provider/OPENAI/ayle.py +365 -0
- webscout/Provider/OPENAI/base.py +253 -46
- webscout/Provider/OPENAI/cerebras.py +296 -0
- webscout/Provider/OPENAI/chatgpt.py +514 -193
- webscout/Provider/OPENAI/chatsandbox.py +233 -0
- webscout/Provider/OPENAI/deepinfra.py +403 -272
- webscout/Provider/OPENAI/e2b.py +2370 -1350
- webscout/Provider/OPENAI/elmo.py +278 -0
- webscout/Provider/OPENAI/exaai.py +186 -138
- webscout/Provider/OPENAI/freeassist.py +446 -0
- webscout/Provider/OPENAI/gradient.py +448 -0
- webscout/Provider/OPENAI/groq.py +380 -0
- webscout/Provider/OPENAI/hadadxyz.py +292 -0
- webscout/Provider/OPENAI/heckai.py +100 -104
- webscout/Provider/OPENAI/huggingface.py +321 -0
- webscout/Provider/OPENAI/ibm.py +425 -0
- webscout/Provider/OPENAI/llmchat.py +253 -0
- webscout/Provider/OPENAI/llmchatco.py +378 -327
- webscout/Provider/OPENAI/meta.py +541 -0
- webscout/Provider/OPENAI/netwrck.py +110 -84
- webscout/Provider/OPENAI/nvidia.py +317 -0
- webscout/Provider/OPENAI/oivscode.py +348 -0
- webscout/Provider/OPENAI/openrouter.py +328 -0
- webscout/Provider/OPENAI/pydantic_imports.py +1 -0
- webscout/Provider/OPENAI/sambanova.py +397 -0
- webscout/Provider/OPENAI/sonus.py +126 -115
- webscout/Provider/OPENAI/textpollinations.py +218 -133
- webscout/Provider/OPENAI/toolbaz.py +136 -166
- webscout/Provider/OPENAI/typefully.py +419 -0
- webscout/Provider/OPENAI/typliai.py +279 -0
- webscout/Provider/OPENAI/utils.py +314 -211
- webscout/Provider/OPENAI/wisecat.py +103 -125
- webscout/Provider/OPENAI/writecream.py +185 -156
- webscout/Provider/OPENAI/x0gpt.py +227 -136
- webscout/Provider/OPENAI/zenmux.py +380 -0
- webscout/Provider/OpenRouter.py +386 -0
- webscout/Provider/Openai.py +337 -496
- webscout/Provider/PI.py +443 -344
- webscout/Provider/QwenLM.py +346 -254
- webscout/Provider/STT/__init__.py +28 -0
- webscout/Provider/STT/base.py +303 -0
- webscout/Provider/STT/elevenlabs.py +264 -0
- webscout/Provider/Sambanova.py +317 -0
- webscout/Provider/TTI/README.md +69 -0
- webscout/Provider/TTI/__init__.py +37 -12
- webscout/Provider/TTI/base.py +147 -0
- webscout/Provider/TTI/claudeonline.py +393 -0
- webscout/Provider/TTI/magicstudio.py +292 -0
- webscout/Provider/TTI/miragic.py +180 -0
- webscout/Provider/TTI/pollinations.py +331 -0
- webscout/Provider/TTI/together.py +334 -0
- webscout/Provider/TTI/utils.py +14 -0
- webscout/Provider/TTS/README.md +186 -0
- webscout/Provider/TTS/__init__.py +43 -7
- webscout/Provider/TTS/base.py +523 -0
- webscout/Provider/TTS/deepgram.py +286 -156
- webscout/Provider/TTS/elevenlabs.py +189 -111
- webscout/Provider/TTS/freetts.py +218 -0
- webscout/Provider/TTS/murfai.py +288 -113
- webscout/Provider/TTS/openai_fm.py +364 -0
- webscout/Provider/TTS/parler.py +203 -111
- webscout/Provider/TTS/qwen.py +334 -0
- webscout/Provider/TTS/sherpa.py +286 -0
- webscout/Provider/TTS/speechma.py +693 -180
- webscout/Provider/TTS/streamElements.py +275 -333
- webscout/Provider/TTS/utils.py +280 -280
- webscout/Provider/TextPollinationsAI.py +221 -121
- webscout/Provider/TogetherAI.py +450 -0
- webscout/Provider/TwoAI.py +309 -199
- webscout/Provider/TypliAI.py +311 -0
- webscout/Provider/UNFINISHED/ChatHub.py +219 -0
- webscout/Provider/{OPENAI/glider.py → UNFINISHED/ChutesAI.py} +160 -145
- webscout/Provider/UNFINISHED/GizAI.py +300 -0
- webscout/Provider/UNFINISHED/Marcus.py +218 -0
- webscout/Provider/UNFINISHED/Qodo.py +481 -0
- webscout/Provider/UNFINISHED/XenAI.py +330 -0
- webscout/Provider/{Youchat.py → UNFINISHED/Youchat.py} +64 -47
- webscout/Provider/UNFINISHED/aihumanizer.py +41 -0
- webscout/Provider/UNFINISHED/grammerchecker.py +37 -0
- webscout/Provider/UNFINISHED/liner.py +342 -0
- webscout/Provider/UNFINISHED/liner_api_request.py +246 -0
- webscout/Provider/UNFINISHED/samurai.py +231 -0
- webscout/Provider/WiseCat.py +256 -196
- webscout/Provider/WrDoChat.py +390 -0
- webscout/Provider/__init__.py +115 -198
- webscout/Provider/ai4chat.py +181 -202
- webscout/Provider/akashgpt.py +330 -342
- webscout/Provider/cerebras.py +397 -242
- webscout/Provider/cleeai.py +236 -213
- webscout/Provider/elmo.py +291 -234
- webscout/Provider/geminiapi.py +343 -208
- webscout/Provider/julius.py +245 -223
- webscout/Provider/learnfastai.py +333 -266
- webscout/Provider/llama3mitril.py +230 -180
- webscout/Provider/llmchat.py +308 -213
- webscout/Provider/llmchatco.py +321 -311
- webscout/Provider/meta.py +996 -794
- webscout/Provider/oivscode.py +332 -0
- webscout/Provider/searchchat.py +316 -293
- webscout/Provider/sonus.py +264 -208
- webscout/Provider/toolbaz.py +359 -320
- webscout/Provider/turboseek.py +332 -219
- webscout/Provider/typefully.py +262 -280
- webscout/Provider/x0gpt.py +332 -256
- webscout/__init__.py +31 -38
- webscout/__main__.py +5 -5
- webscout/cli.py +585 -293
- webscout/client.py +1497 -0
- webscout/conversation.py +140 -565
- webscout/exceptions.py +383 -339
- webscout/litagent/__init__.py +29 -29
- webscout/litagent/agent.py +492 -455
- webscout/litagent/constants.py +60 -60
- webscout/models.py +505 -181
- webscout/optimizers.py +32 -378
- webscout/prompt_manager.py +376 -274
- webscout/sanitize.py +1514 -0
- webscout/scout/README.md +452 -0
- webscout/scout/__init__.py +8 -8
- webscout/scout/core/__init__.py +7 -7
- webscout/scout/core/crawler.py +330 -140
- webscout/scout/core/scout.py +800 -568
- webscout/scout/core/search_result.py +51 -96
- webscout/scout/core/text_analyzer.py +64 -63
- webscout/scout/core/text_utils.py +412 -277
- webscout/scout/core/web_analyzer.py +54 -52
- webscout/scout/element.py +872 -460
- webscout/scout/parsers/__init__.py +70 -69
- webscout/scout/parsers/html5lib_parser.py +182 -172
- webscout/scout/parsers/html_parser.py +238 -236
- webscout/scout/parsers/lxml_parser.py +203 -178
- webscout/scout/utils.py +38 -37
- webscout/search/__init__.py +47 -0
- webscout/search/base.py +201 -0
- webscout/search/bing_main.py +45 -0
- webscout/search/brave_main.py +92 -0
- webscout/search/duckduckgo_main.py +57 -0
- webscout/search/engines/__init__.py +127 -0
- webscout/search/engines/bing/__init__.py +15 -0
- webscout/search/engines/bing/base.py +35 -0
- webscout/search/engines/bing/images.py +114 -0
- webscout/search/engines/bing/news.py +96 -0
- webscout/search/engines/bing/suggestions.py +36 -0
- webscout/search/engines/bing/text.py +109 -0
- webscout/search/engines/brave/__init__.py +19 -0
- webscout/search/engines/brave/base.py +47 -0
- webscout/search/engines/brave/images.py +213 -0
- webscout/search/engines/brave/news.py +353 -0
- webscout/search/engines/brave/suggestions.py +318 -0
- webscout/search/engines/brave/text.py +167 -0
- webscout/search/engines/brave/videos.py +364 -0
- webscout/search/engines/duckduckgo/__init__.py +25 -0
- webscout/search/engines/duckduckgo/answers.py +80 -0
- webscout/search/engines/duckduckgo/base.py +189 -0
- webscout/search/engines/duckduckgo/images.py +100 -0
- webscout/search/engines/duckduckgo/maps.py +183 -0
- webscout/search/engines/duckduckgo/news.py +70 -0
- webscout/search/engines/duckduckgo/suggestions.py +22 -0
- webscout/search/engines/duckduckgo/text.py +221 -0
- webscout/search/engines/duckduckgo/translate.py +48 -0
- webscout/search/engines/duckduckgo/videos.py +80 -0
- webscout/search/engines/duckduckgo/weather.py +84 -0
- webscout/search/engines/mojeek.py +61 -0
- webscout/search/engines/wikipedia.py +77 -0
- webscout/search/engines/yahoo/__init__.py +41 -0
- webscout/search/engines/yahoo/answers.py +19 -0
- webscout/search/engines/yahoo/base.py +34 -0
- webscout/search/engines/yahoo/images.py +323 -0
- webscout/search/engines/yahoo/maps.py +19 -0
- webscout/search/engines/yahoo/news.py +258 -0
- webscout/search/engines/yahoo/suggestions.py +140 -0
- webscout/search/engines/yahoo/text.py +273 -0
- webscout/search/engines/yahoo/translate.py +19 -0
- webscout/search/engines/yahoo/videos.py +302 -0
- webscout/search/engines/yahoo/weather.py +220 -0
- webscout/search/engines/yandex.py +67 -0
- webscout/search/engines/yep/__init__.py +13 -0
- webscout/search/engines/yep/base.py +34 -0
- webscout/search/engines/yep/images.py +101 -0
- webscout/search/engines/yep/suggestions.py +38 -0
- webscout/search/engines/yep/text.py +99 -0
- webscout/search/http_client.py +172 -0
- webscout/search/results.py +141 -0
- webscout/search/yahoo_main.py +57 -0
- webscout/search/yep_main.py +48 -0
- webscout/server/__init__.py +48 -0
- webscout/server/config.py +78 -0
- webscout/server/exceptions.py +69 -0
- webscout/server/providers.py +286 -0
- webscout/server/request_models.py +131 -0
- webscout/server/request_processing.py +404 -0
- webscout/server/routes.py +642 -0
- webscout/server/server.py +351 -0
- webscout/server/ui_templates.py +1171 -0
- webscout/swiftcli/__init__.py +79 -809
- webscout/swiftcli/core/__init__.py +7 -0
- webscout/swiftcli/core/cli.py +574 -0
- webscout/swiftcli/core/context.py +98 -0
- webscout/swiftcli/core/group.py +268 -0
- webscout/swiftcli/decorators/__init__.py +28 -0
- webscout/swiftcli/decorators/command.py +243 -0
- webscout/swiftcli/decorators/options.py +247 -0
- webscout/swiftcli/decorators/output.py +392 -0
- webscout/swiftcli/exceptions.py +21 -0
- webscout/swiftcli/plugins/__init__.py +9 -0
- webscout/swiftcli/plugins/base.py +134 -0
- webscout/swiftcli/plugins/manager.py +269 -0
- webscout/swiftcli/utils/__init__.py +58 -0
- webscout/swiftcli/utils/formatting.py +251 -0
- webscout/swiftcli/utils/parsing.py +368 -0
- webscout/update_checker.py +280 -136
- webscout/utils.py +28 -14
- webscout/version.py +2 -1
- webscout/version.py.bak +3 -0
- webscout/zeroart/__init__.py +218 -55
- webscout/zeroart/base.py +70 -60
- webscout/zeroart/effects.py +155 -99
- webscout/zeroart/fonts.py +1799 -816
- webscout-2026.1.19.dist-info/METADATA +638 -0
- webscout-2026.1.19.dist-info/RECORD +312 -0
- {webscout-8.2.2.dist-info → webscout-2026.1.19.dist-info}/WHEEL +1 -1
- webscout-2026.1.19.dist-info/entry_points.txt +4 -0
- webscout-2026.1.19.dist-info/top_level.txt +1 -0
- inferno/__init__.py +0 -6
- inferno/__main__.py +0 -9
- inferno/cli.py +0 -6
- webscout/DWEBS.py +0 -477
- webscout/Extra/autocoder/__init__.py +0 -9
- webscout/Extra/autocoder/autocoder.py +0 -849
- webscout/Extra/autocoder/autocoder_utiles.py +0 -332
- webscout/LLM.py +0 -442
- webscout/Litlogger/__init__.py +0 -67
- webscout/Litlogger/core/__init__.py +0 -6
- webscout/Litlogger/core/level.py +0 -23
- webscout/Litlogger/core/logger.py +0 -165
- webscout/Litlogger/handlers/__init__.py +0 -12
- webscout/Litlogger/handlers/console.py +0 -33
- webscout/Litlogger/handlers/file.py +0 -143
- webscout/Litlogger/handlers/network.py +0 -173
- webscout/Litlogger/styles/__init__.py +0 -7
- webscout/Litlogger/styles/colors.py +0 -249
- webscout/Litlogger/styles/formats.py +0 -458
- webscout/Litlogger/styles/text.py +0 -87
- webscout/Litlogger/utils/__init__.py +0 -6
- webscout/Litlogger/utils/detectors.py +0 -153
- webscout/Litlogger/utils/formatters.py +0 -200
- webscout/Local/__init__.py +0 -12
- webscout/Local/__main__.py +0 -9
- webscout/Local/api.py +0 -576
- webscout/Local/cli.py +0 -516
- webscout/Local/config.py +0 -75
- webscout/Local/llm.py +0 -287
- webscout/Local/model_manager.py +0 -253
- webscout/Local/server.py +0 -721
- webscout/Local/utils.py +0 -93
- webscout/Provider/AI21.py +0 -177
- webscout/Provider/AISEARCH/DeepFind.py +0 -250
- webscout/Provider/AISEARCH/ISou.py +0 -256
- webscout/Provider/AISEARCH/felo_search.py +0 -228
- webscout/Provider/AISEARCH/genspark_search.py +0 -208
- webscout/Provider/AISEARCH/hika_search.py +0 -194
- webscout/Provider/AISEARCH/scira_search.py +0 -324
- webscout/Provider/Aitopia.py +0 -292
- webscout/Provider/AllenAI.py +0 -413
- webscout/Provider/Blackboxai.py +0 -229
- webscout/Provider/C4ai.py +0 -432
- webscout/Provider/ChatGPTClone.py +0 -226
- webscout/Provider/ChatGPTES.py +0 -237
- webscout/Provider/ChatGPTGratis.py +0 -194
- webscout/Provider/Chatify.py +0 -175
- webscout/Provider/Cloudflare.py +0 -273
- webscout/Provider/DeepSeek.py +0 -196
- webscout/Provider/ElectronHub.py +0 -709
- webscout/Provider/ExaChat.py +0 -342
- webscout/Provider/Free2GPT.py +0 -241
- webscout/Provider/GPTWeb.py +0 -193
- webscout/Provider/Glider.py +0 -211
- webscout/Provider/HF_space/__init__.py +0 -0
- webscout/Provider/HF_space/qwen_qwen2.py +0 -206
- webscout/Provider/HuggingFaceChat.py +0 -462
- webscout/Provider/Hunyuan.py +0 -272
- webscout/Provider/LambdaChat.py +0 -392
- webscout/Provider/Llama.py +0 -200
- webscout/Provider/Llama3.py +0 -204
- webscout/Provider/Marcus.py +0 -148
- webscout/Provider/OLLAMA.py +0 -396
- webscout/Provider/OPENAI/c4ai.py +0 -367
- webscout/Provider/OPENAI/chatgptclone.py +0 -460
- webscout/Provider/OPENAI/exachat.py +0 -433
- webscout/Provider/OPENAI/freeaichat.py +0 -352
- webscout/Provider/OPENAI/opkfc.py +0 -488
- webscout/Provider/OPENAI/scirachat.py +0 -463
- webscout/Provider/OPENAI/standardinput.py +0 -425
- webscout/Provider/OPENAI/typegpt.py +0 -346
- webscout/Provider/OPENAI/uncovrAI.py +0 -455
- webscout/Provider/OPENAI/venice.py +0 -413
- webscout/Provider/OPENAI/yep.py +0 -327
- webscout/Provider/OpenGPT.py +0 -199
- webscout/Provider/Perplexitylabs.py +0 -415
- webscout/Provider/Phind.py +0 -535
- webscout/Provider/PizzaGPT.py +0 -198
- webscout/Provider/Reka.py +0 -214
- webscout/Provider/StandardInput.py +0 -278
- webscout/Provider/TTI/AiForce/__init__.py +0 -22
- webscout/Provider/TTI/AiForce/async_aiforce.py +0 -224
- webscout/Provider/TTI/AiForce/sync_aiforce.py +0 -245
- webscout/Provider/TTI/FreeAIPlayground/__init__.py +0 -9
- webscout/Provider/TTI/FreeAIPlayground/async_freeaiplayground.py +0 -181
- webscout/Provider/TTI/FreeAIPlayground/sync_freeaiplayground.py +0 -180
- webscout/Provider/TTI/ImgSys/__init__.py +0 -23
- webscout/Provider/TTI/ImgSys/async_imgsys.py +0 -202
- webscout/Provider/TTI/ImgSys/sync_imgsys.py +0 -195
- webscout/Provider/TTI/MagicStudio/__init__.py +0 -2
- webscout/Provider/TTI/MagicStudio/async_magicstudio.py +0 -111
- webscout/Provider/TTI/MagicStudio/sync_magicstudio.py +0 -109
- webscout/Provider/TTI/Nexra/__init__.py +0 -22
- webscout/Provider/TTI/Nexra/async_nexra.py +0 -286
- webscout/Provider/TTI/Nexra/sync_nexra.py +0 -258
- webscout/Provider/TTI/PollinationsAI/__init__.py +0 -23
- webscout/Provider/TTI/PollinationsAI/async_pollinations.py +0 -311
- webscout/Provider/TTI/PollinationsAI/sync_pollinations.py +0 -265
- webscout/Provider/TTI/aiarta/__init__.py +0 -2
- webscout/Provider/TTI/aiarta/async_aiarta.py +0 -482
- webscout/Provider/TTI/aiarta/sync_aiarta.py +0 -440
- webscout/Provider/TTI/artbit/__init__.py +0 -22
- webscout/Provider/TTI/artbit/async_artbit.py +0 -155
- webscout/Provider/TTI/artbit/sync_artbit.py +0 -148
- webscout/Provider/TTI/fastflux/__init__.py +0 -22
- webscout/Provider/TTI/fastflux/async_fastflux.py +0 -261
- webscout/Provider/TTI/fastflux/sync_fastflux.py +0 -252
- webscout/Provider/TTI/huggingface/__init__.py +0 -22
- webscout/Provider/TTI/huggingface/async_huggingface.py +0 -199
- webscout/Provider/TTI/huggingface/sync_huggingface.py +0 -195
- webscout/Provider/TTI/piclumen/__init__.py +0 -23
- webscout/Provider/TTI/piclumen/async_piclumen.py +0 -268
- webscout/Provider/TTI/piclumen/sync_piclumen.py +0 -233
- webscout/Provider/TTI/pixelmuse/__init__.py +0 -4
- webscout/Provider/TTI/pixelmuse/async_pixelmuse.py +0 -249
- webscout/Provider/TTI/pixelmuse/sync_pixelmuse.py +0 -182
- webscout/Provider/TTI/talkai/__init__.py +0 -4
- webscout/Provider/TTI/talkai/async_talkai.py +0 -229
- webscout/Provider/TTI/talkai/sync_talkai.py +0 -207
- webscout/Provider/TTS/gesserit.py +0 -127
- webscout/Provider/TeachAnything.py +0 -187
- webscout/Provider/Venice.py +0 -219
- webscout/Provider/VercelAI.py +0 -234
- webscout/Provider/WebSim.py +0 -228
- webscout/Provider/Writecream.py +0 -211
- webscout/Provider/WritingMate.py +0 -197
- webscout/Provider/aimathgpt.py +0 -189
- webscout/Provider/askmyai.py +0 -158
- webscout/Provider/asksteve.py +0 -203
- webscout/Provider/bagoodex.py +0 -145
- webscout/Provider/chatglm.py +0 -205
- webscout/Provider/copilot.py +0 -428
- webscout/Provider/freeaichat.py +0 -271
- webscout/Provider/gaurish.py +0 -244
- webscout/Provider/geminiprorealtime.py +0 -160
- webscout/Provider/granite.py +0 -187
- webscout/Provider/hermes.py +0 -219
- webscout/Provider/koala.py +0 -268
- webscout/Provider/labyrinth.py +0 -340
- webscout/Provider/lepton.py +0 -194
- webscout/Provider/llamatutor.py +0 -192
- webscout/Provider/multichat.py +0 -325
- webscout/Provider/promptrefine.py +0 -193
- webscout/Provider/scira_chat.py +0 -277
- webscout/Provider/scnet.py +0 -187
- webscout/Provider/talkai.py +0 -194
- webscout/Provider/tutorai.py +0 -252
- webscout/Provider/typegpt.py +0 -232
- webscout/Provider/uncovr.py +0 -312
- webscout/Provider/yep.py +0 -376
- webscout/litprinter/__init__.py +0 -59
- webscout/scout/core.py +0 -881
- webscout/tempid.py +0 -128
- webscout/webscout_search.py +0 -1346
- webscout/webscout_search_async.py +0 -877
- webscout/yep_search.py +0 -297
- webscout-8.2.2.dist-info/METADATA +0 -734
- webscout-8.2.2.dist-info/RECORD +0 -309
- webscout-8.2.2.dist-info/entry_points.txt +0 -5
- webscout-8.2.2.dist-info/top_level.txt +0 -3
- webstoken/__init__.py +0 -30
- webstoken/classifier.py +0 -189
- webstoken/keywords.py +0 -216
- webstoken/language.py +0 -128
- webstoken/ner.py +0 -164
- webstoken/normalizer.py +0 -35
- webstoken/processor.py +0 -77
- webstoken/sentiment.py +0 -206
- webstoken/stemmer.py +0 -73
- webstoken/tagger.py +0 -60
- webstoken/tokenizer.py +0 -158
- {webscout-8.2.2.dist-info → webscout-2026.1.19.dist-info/licenses}/LICENSE.md +0 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from typing import Any, Dict, Generator, Iterator, List, Optional, Union, cast
|
|
3
|
+
|
|
4
|
+
from curl_cffi import CurlError
|
|
5
|
+
from curl_cffi.requests import Session
|
|
6
|
+
|
|
7
|
+
from webscout import exceptions
|
|
8
|
+
from webscout.AIbase import Provider, Response
|
|
9
|
+
from webscout.AIutel import AwesomePrompts, Conversation, Optimizers
|
|
10
|
+
from webscout.litagent import LitAgent
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class DeepAI(Provider):
|
|
14
|
+
"""
|
|
15
|
+
DeepAI Chat Provider
|
|
16
|
+
|
|
17
|
+
A provider for DeepAI's chat functionality, supporting both streaming and non-streaming responses.
|
|
18
|
+
Structured similarly to other providers like DeepInfra and X0GPT.
|
|
19
|
+
"""
|
|
20
|
+
required_auth = True
|
|
21
|
+
AVAILABLE_MODELS = [
|
|
22
|
+
"standard",
|
|
23
|
+
"genius",
|
|
24
|
+
"online",
|
|
25
|
+
"supergenius",
|
|
26
|
+
"onlinegenius",
|
|
27
|
+
"deepseek-v3.2",
|
|
28
|
+
"gemini-2.5-flash-lite",
|
|
29
|
+
"qwen3-30b-a3b",
|
|
30
|
+
"gpt-5-nano",
|
|
31
|
+
"gpt-oss-120b",
|
|
32
|
+
"gpt-5-chat-latest",
|
|
33
|
+
"claude-opus-4-1",
|
|
34
|
+
"llama-4-scout",
|
|
35
|
+
"claude-4.5-sonnet",
|
|
36
|
+
"deepseek-v3.1-terminus",
|
|
37
|
+
"llama-3.3-70b-instruct",
|
|
38
|
+
"grok-4",
|
|
39
|
+
"claude-sonnet-4",
|
|
40
|
+
"qwen3-coder",
|
|
41
|
+
"gpt-5",
|
|
42
|
+
"kimi-k2-0905",
|
|
43
|
+
"claude-opus-4",
|
|
44
|
+
"gpt-5-mini",
|
|
45
|
+
"gemini-2.5-pro",
|
|
46
|
+
"grok-code-fast-1",
|
|
47
|
+
"gpt-4.1",
|
|
48
|
+
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
def __init__(
|
|
52
|
+
self,
|
|
53
|
+
api_key: str = "tryit-53926507126-2c8a2543c7b5638ca6b92b6e53ef2d2b",
|
|
54
|
+
timeout: int = 30,
|
|
55
|
+
proxies: Optional[Dict[str, str]] = None,
|
|
56
|
+
model: str = "standard",
|
|
57
|
+
chat_style: str = "chat",
|
|
58
|
+
enabled_tools: Optional[List[str]] = None,
|
|
59
|
+
is_conversation: bool = True,
|
|
60
|
+
max_tokens: int = 2048,
|
|
61
|
+
intro: Optional[str] = None,
|
|
62
|
+
filepath: Optional[str] = None,
|
|
63
|
+
update_file: bool = True,
|
|
64
|
+
history_offset: int = 10250,
|
|
65
|
+
act: Optional[str] = None,
|
|
66
|
+
system_prompt: str = "You are a helpful assistant.",
|
|
67
|
+
browser: str = "chrome",
|
|
68
|
+
**kwargs
|
|
69
|
+
):
|
|
70
|
+
"""
|
|
71
|
+
Initialize the DeepAI provider.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
api_key: API key for authentication (trial key provided by default)
|
|
75
|
+
timeout: Request timeout in seconds
|
|
76
|
+
proxies: Proxy configuration
|
|
77
|
+
model: Model to use (default: "standard")
|
|
78
|
+
chat_style: Chat style (default: "chat")
|
|
79
|
+
enabled_tools: List of enabled tools (default: ["image_generator"])
|
|
80
|
+
is_conversation: Whether to maintain conversation history
|
|
81
|
+
max_tokens: Maximum tokens for conversation
|
|
82
|
+
intro: Introduction prompt
|
|
83
|
+
filepath: Path to conversation history file
|
|
84
|
+
update_file: Whether to update history file
|
|
85
|
+
history_offset: History offset for truncation
|
|
86
|
+
act: Act prompt from AwesomePrompts
|
|
87
|
+
system_prompt: System prompt for the AI
|
|
88
|
+
browser: Browser type for fingerprinting
|
|
89
|
+
**kwargs: Additional arguments
|
|
90
|
+
"""
|
|
91
|
+
if model not in self.AVAILABLE_MODELS:
|
|
92
|
+
raise ValueError(f"Invalid model: {model}. Choose from: {self.AVAILABLE_MODELS}")
|
|
93
|
+
|
|
94
|
+
self.url = "https://api.deepai.org/hacking_is_a_serious_crime"
|
|
95
|
+
self.api_key = api_key
|
|
96
|
+
self.proxies = proxies or {}
|
|
97
|
+
self.model = model
|
|
98
|
+
self.chat_style = chat_style
|
|
99
|
+
self.enabled_tools = enabled_tools or ["image_generator"]
|
|
100
|
+
self.system_prompt = system_prompt
|
|
101
|
+
self.is_conversation = is_conversation
|
|
102
|
+
self.max_tokens_to_sample = max_tokens
|
|
103
|
+
self.timeout = timeout
|
|
104
|
+
self.last_response = {}
|
|
105
|
+
|
|
106
|
+
# LitAgent for fingerprinting
|
|
107
|
+
self.agent = LitAgent()
|
|
108
|
+
self.fingerprint = self.agent.generate_fingerprint(browser)
|
|
109
|
+
|
|
110
|
+
# Setup headers similar to other providers
|
|
111
|
+
self.headers = {
|
|
112
|
+
"User-Agent": self.fingerprint.get("user_agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"),
|
|
113
|
+
"Accept": "*/*",
|
|
114
|
+
"Accept-Language": self.fingerprint.get("accept_language", "en-US,en;q=0.9"),
|
|
115
|
+
"Origin": "https://deepai.org",
|
|
116
|
+
"Referer": "https://deepai.org/",
|
|
117
|
+
"Sec-CH-UA": self.fingerprint.get("sec_ch_ua", '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"'),
|
|
118
|
+
"Sec-CH-UA-Mobile": "?0",
|
|
119
|
+
"Sec-CH-UA-Platform": f'"{self.fingerprint.get("platform", "Windows")}"',
|
|
120
|
+
"api-key": self.api_key
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
# Setup session
|
|
124
|
+
self.session = Session()
|
|
125
|
+
self.session.headers.update(self.headers)
|
|
126
|
+
if self.proxies:
|
|
127
|
+
self.session.proxies = self.proxies # type: ignore
|
|
128
|
+
|
|
129
|
+
# Optimizers
|
|
130
|
+
self.__available_optimizers = (
|
|
131
|
+
method
|
|
132
|
+
for method in dir(Optimizers)
|
|
133
|
+
if callable(getattr(Optimizers, method)) and not method.startswith("__")
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
# Conversation setup similar to other providers
|
|
137
|
+
self.conversation = Conversation(
|
|
138
|
+
is_conversation, self.max_tokens_to_sample, filepath, update_file
|
|
139
|
+
)
|
|
140
|
+
self.conversation.history_offset = history_offset
|
|
141
|
+
|
|
142
|
+
act_prompt = (
|
|
143
|
+
AwesomePrompts().get_act(cast(Union[str, int], act), default=None, case_insensitive=True
|
|
144
|
+
)
|
|
145
|
+
if act
|
|
146
|
+
else intro
|
|
147
|
+
)
|
|
148
|
+
if act_prompt:
|
|
149
|
+
self.conversation.intro = act_prompt
|
|
150
|
+
|
|
151
|
+
def refresh_identity(self, browser: Optional[str] = None):
|
|
152
|
+
"""
|
|
153
|
+
Refreshes the browser identity fingerprint.
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
browser: Specific browser to use for the new fingerprint
|
|
157
|
+
"""
|
|
158
|
+
browser = browser or self.fingerprint.get("browser_type", "chrome")
|
|
159
|
+
self.fingerprint = self.agent.generate_fingerprint(browser)
|
|
160
|
+
|
|
161
|
+
# Update relevant headers
|
|
162
|
+
self.headers.update({
|
|
163
|
+
"User-Agent": str(self.fingerprint.get("user_agent", "")),
|
|
164
|
+
"Accept-Language": str(self.fingerprint.get("accept_language", "")),
|
|
165
|
+
"Sec-CH-UA": str(self.fingerprint.get("sec_ch_ua", "")),
|
|
166
|
+
"Sec-CH-UA-Platform": f'"{self.fingerprint.get("platform", "")}"',
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
self.session.headers.update(self.headers)
|
|
170
|
+
return self.fingerprint
|
|
171
|
+
|
|
172
|
+
def ask(
|
|
173
|
+
self,
|
|
174
|
+
prompt: str,
|
|
175
|
+
stream: bool = False,
|
|
176
|
+
raw: bool = False,
|
|
177
|
+
optimizer: Optional[str] = None,
|
|
178
|
+
conversationally: bool = False,
|
|
179
|
+
**kwargs: Any,
|
|
180
|
+
) -> Response:
|
|
181
|
+
"""
|
|
182
|
+
Send a prompt to DeepAI and get the response.
|
|
183
|
+
|
|
184
|
+
Args:
|
|
185
|
+
prompt: The prompt to send
|
|
186
|
+
stream: Whether to stream the response (fake streaming: yields full response in one chunk)
|
|
187
|
+
raw: Whether to return raw response
|
|
188
|
+
optimizer: Optimizer to use
|
|
189
|
+
conversationally: Whether to apply optimizer to full conversation
|
|
190
|
+
**kwargs: Additional arguments
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
Response dictionary with the AI response or generator for streaming
|
|
194
|
+
"""
|
|
195
|
+
# Generate conversation prompt similar to other providers
|
|
196
|
+
conversation_prompt = self.conversation.gen_complete_prompt(prompt)
|
|
197
|
+
|
|
198
|
+
if optimizer:
|
|
199
|
+
if optimizer in self.__available_optimizers:
|
|
200
|
+
conversation_prompt = getattr(Optimizers, optimizer)(
|
|
201
|
+
conversation_prompt if conversationally else prompt
|
|
202
|
+
)
|
|
203
|
+
else:
|
|
204
|
+
raise Exception(f"Optimizer is not one of {list(self.__available_optimizers)}")
|
|
205
|
+
|
|
206
|
+
# Prepare form data
|
|
207
|
+
# Use conversation_prompt as user content in chatHistory
|
|
208
|
+
chat_history = [
|
|
209
|
+
{"role": "system", "content": self.system_prompt},
|
|
210
|
+
{"role": "user", "content": conversation_prompt}
|
|
211
|
+
]
|
|
212
|
+
data = {
|
|
213
|
+
"chat_style": self.chat_style,
|
|
214
|
+
"chatHistory": json.dumps(chat_history),
|
|
215
|
+
"model": self.model,
|
|
216
|
+
"hacker_is_stinky": "very_stinky",
|
|
217
|
+
"enabled_tools": json.dumps(self.enabled_tools)
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
# Always perform non-streaming request
|
|
221
|
+
try:
|
|
222
|
+
# Make request with curl_cffi
|
|
223
|
+
response = self.session.post(
|
|
224
|
+
self.url,
|
|
225
|
+
data=data,
|
|
226
|
+
timeout=self.timeout,
|
|
227
|
+
impersonate="chrome110"
|
|
228
|
+
)
|
|
229
|
+
response.raise_for_status()
|
|
230
|
+
|
|
231
|
+
# Get response text
|
|
232
|
+
result = response.text.strip()
|
|
233
|
+
|
|
234
|
+
# Update last response and conversation history
|
|
235
|
+
self.last_response = {"text": result}
|
|
236
|
+
self.conversation.update_chat_history(prompt, result)
|
|
237
|
+
|
|
238
|
+
if stream:
|
|
239
|
+
# Fake streaming: yield the full response in one chunk
|
|
240
|
+
if raw:
|
|
241
|
+
yield result
|
|
242
|
+
else:
|
|
243
|
+
yield self.last_response
|
|
244
|
+
else:
|
|
245
|
+
return self.last_response if not raw else result
|
|
246
|
+
|
|
247
|
+
except CurlError as e:
|
|
248
|
+
raise exceptions.FailedToGenerateResponseError(f"DeepAI API request failed (CurlError): {str(e)}")
|
|
249
|
+
except Exception as e:
|
|
250
|
+
raise exceptions.FailedToGenerateResponseError(f"DeepAI API request failed ({type(e).__name__}): {str(e)}")
|
|
251
|
+
|
|
252
|
+
def chat(
|
|
253
|
+
self,
|
|
254
|
+
prompt: str,
|
|
255
|
+
stream: bool = False,
|
|
256
|
+
optimizer: Optional[str] = None,
|
|
257
|
+
conversationally: bool = False,
|
|
258
|
+
raw: bool = False,
|
|
259
|
+
**kwargs: Any,
|
|
260
|
+
) -> Union[str, Generator[str, None, None]]:
|
|
261
|
+
"""
|
|
262
|
+
Send a chat message to DeepAI and get the response.
|
|
263
|
+
|
|
264
|
+
Args:
|
|
265
|
+
prompt: The prompt to send
|
|
266
|
+
stream: Whether to stream the response (fake streaming: yields full response in one chunk)
|
|
267
|
+
optimizer: Optimizer to use
|
|
268
|
+
conversationally: Whether to apply optimizer to full conversation
|
|
269
|
+
raw: Whether to return raw response
|
|
270
|
+
**kwargs: Additional arguments
|
|
271
|
+
|
|
272
|
+
Returns:
|
|
273
|
+
The AI response as a string or generator for streaming
|
|
274
|
+
"""
|
|
275
|
+
if stream:
|
|
276
|
+
for resp in self.ask(
|
|
277
|
+
prompt=prompt,
|
|
278
|
+
stream=True,
|
|
279
|
+
raw=raw,
|
|
280
|
+
optimizer=optimizer,
|
|
281
|
+
conversationally=conversationally,
|
|
282
|
+
**kwargs
|
|
283
|
+
):
|
|
284
|
+
if raw:
|
|
285
|
+
yield resp
|
|
286
|
+
else:
|
|
287
|
+
yield self.get_message(resp)
|
|
288
|
+
else:
|
|
289
|
+
response = self.ask(
|
|
290
|
+
prompt=prompt,
|
|
291
|
+
stream=False,
|
|
292
|
+
raw=raw,
|
|
293
|
+
optimizer=optimizer,
|
|
294
|
+
conversationally=conversationally,
|
|
295
|
+
**kwargs
|
|
296
|
+
)
|
|
297
|
+
if raw:
|
|
298
|
+
return response
|
|
299
|
+
else:
|
|
300
|
+
return self.get_message(response)
|
|
301
|
+
|
|
302
|
+
def get_message(self, response: Response) -> str:
|
|
303
|
+
"""
|
|
304
|
+
Extract the message from the response.
|
|
305
|
+
|
|
306
|
+
Args:
|
|
307
|
+
response: Response obtained from ask method
|
|
308
|
+
|
|
309
|
+
Returns:
|
|
310
|
+
The message text
|
|
311
|
+
"""
|
|
312
|
+
if isinstance(response, dict):
|
|
313
|
+
return cast(Dict[str, Any], response).get("text", "")
|
|
314
|
+
elif isinstance(response, str):
|
|
315
|
+
return response
|
|
316
|
+
else:
|
|
317
|
+
return str(response)
|
|
318
|
+
|
|
319
|
+
@classmethod
|
|
320
|
+
def get_models(cls) -> List[str]:
|
|
321
|
+
"""
|
|
322
|
+
Get available models.
|
|
323
|
+
|
|
324
|
+
Returns:
|
|
325
|
+
List of available model names
|
|
326
|
+
"""
|
|
327
|
+
return cls.AVAILABLE_MODELS
|
|
328
|
+
|
|
329
|
+
@classmethod
|
|
330
|
+
def get_chat_styles(cls) -> List[str]:
|
|
331
|
+
"""
|
|
332
|
+
Get available chat styles.
|
|
333
|
+
|
|
334
|
+
Returns:
|
|
335
|
+
List of available chat styles
|
|
336
|
+
"""
|
|
337
|
+
return ["chat"]
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
if __name__ == "__main__":
|
|
341
|
+
# Test similar to other providers, using stream=True for consistency
|
|
342
|
+
print("-" * 80)
|
|
343
|
+
print(f"{'Model':<50} {'Status':<10} {'Response'}")
|
|
344
|
+
print("-" * 80)
|
|
345
|
+
|
|
346
|
+
for model in DeepAI.AVAILABLE_MODELS:
|
|
347
|
+
try:
|
|
348
|
+
test_ai = DeepAI(model=model, timeout=60)
|
|
349
|
+
response = test_ai.chat("Say 'Hello' in one word", stream=True)
|
|
350
|
+
response_text = ""
|
|
351
|
+
if hasattr(response, "__iter__") and not isinstance(response, (str, bytes)):
|
|
352
|
+
for chunk in response:
|
|
353
|
+
response_text += chunk
|
|
354
|
+
else:
|
|
355
|
+
response_text = str(response)
|
|
356
|
+
|
|
357
|
+
if response_text and len(response_text.strip()) > 0:
|
|
358
|
+
status = "✓"
|
|
359
|
+
# Clean and truncate response
|
|
360
|
+
clean_text = response_text.strip().encode('utf-8', errors='ignore').decode('utf-8')
|
|
361
|
+
display_text = clean_text[:50] + "..." if len(clean_text) > 50 else clean_text
|
|
362
|
+
else:
|
|
363
|
+
status = "✗"
|
|
364
|
+
display_text = "Empty or invalid response"
|
|
365
|
+
print(f"{model:<50} {status:<10} {display_text}")
|
|
366
|
+
except Exception as e:
|
|
367
|
+
print(f"{model:<50} {'✗':<10} {str(e)}")
|