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
|
@@ -1,39 +1,35 @@
|
|
|
1
|
+
import re
|
|
1
2
|
import time
|
|
2
3
|
import uuid
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
from typing import List, Dict, Optional, Union, Generator, Any
|
|
4
|
+
from typing import Any, Dict, Generator, List, Optional, Union, cast
|
|
5
|
+
|
|
6
|
+
from curl_cffi.requests import Session
|
|
7
7
|
|
|
8
8
|
# Import base classes and utility structures
|
|
9
|
-
from .base import
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
from webscout.Provider.OPENAI.base import (
|
|
10
|
+
BaseChat,
|
|
11
|
+
BaseCompletions,
|
|
12
|
+
OpenAICompatibleProvider,
|
|
13
|
+
SimpleModelList,
|
|
14
|
+
)
|
|
15
|
+
from webscout.Provider.OPENAI.utils import (
|
|
16
|
+
ChatCompletion,
|
|
17
|
+
ChatCompletionChunk,
|
|
18
|
+
ChatCompletionMessage,
|
|
19
|
+
Choice,
|
|
20
|
+
ChoiceDelta,
|
|
21
|
+
CompletionUsage,
|
|
22
|
+
count_tokens,
|
|
13
23
|
)
|
|
14
24
|
|
|
15
25
|
# Attempt to import LitAgent, fallback if not available
|
|
16
|
-
|
|
17
|
-
from webscout.litagent import LitAgent
|
|
18
|
-
except ImportError:
|
|
19
|
-
# Define a dummy LitAgent if webscout is not installed or accessible
|
|
20
|
-
class LitAgent:
|
|
21
|
-
def generate_fingerprint(self, browser: str = "chrome") -> Dict[str, Any]:
|
|
22
|
-
# Return minimal default headers if LitAgent is unavailable
|
|
23
|
-
print("Warning: LitAgent not found. Using default minimal headers.")
|
|
24
|
-
return {
|
|
25
|
-
"accept": "*/*",
|
|
26
|
-
"accept_language": "en-US,en;q=0.9",
|
|
27
|
-
"platform": "Windows",
|
|
28
|
-
"sec_ch_ua": '"Not/A)Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
|
|
29
|
-
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
|
|
30
|
-
"browser_type": browser,
|
|
31
|
-
}
|
|
26
|
+
from ...litagent import LitAgent
|
|
32
27
|
|
|
33
28
|
# --- WiseCat Client ---
|
|
34
29
|
|
|
30
|
+
|
|
35
31
|
class Completions(BaseCompletions):
|
|
36
|
-
def __init__(self, client:
|
|
32
|
+
def __init__(self, client: "WiseCat"):
|
|
37
33
|
self._client = client
|
|
38
34
|
|
|
39
35
|
def create(
|
|
@@ -45,7 +41,7 @@ class Completions(BaseCompletions):
|
|
|
45
41
|
stream: bool = False,
|
|
46
42
|
temperature: Optional[float] = None,
|
|
47
43
|
top_p: Optional[float] = None,
|
|
48
|
-
**kwargs: Any
|
|
44
|
+
**kwargs: Any,
|
|
49
45
|
) -> Union[ChatCompletion, Generator[ChatCompletionChunk, None, None]]:
|
|
50
46
|
"""
|
|
51
47
|
Creates a model response for the given chat conversation.
|
|
@@ -55,7 +51,7 @@ class Completions(BaseCompletions):
|
|
|
55
51
|
payload = {
|
|
56
52
|
"id": "ephemeral",
|
|
57
53
|
"messages": messages,
|
|
58
|
-
"selectedChatModel": self._client.convert_model_name(model)
|
|
54
|
+
"selectedChatModel": self._client.convert_model_name(model),
|
|
59
55
|
}
|
|
60
56
|
|
|
61
57
|
# Add optional parameters if provided
|
|
@@ -88,11 +84,12 @@ class Completions(BaseCompletions):
|
|
|
88
84
|
headers=self._client.headers,
|
|
89
85
|
json=payload,
|
|
90
86
|
stream=True,
|
|
91
|
-
timeout=self._client.timeout
|
|
87
|
+
timeout=self._client.timeout,
|
|
88
|
+
impersonate="chrome120",
|
|
92
89
|
)
|
|
93
90
|
|
|
94
91
|
# Handle non-200 responses
|
|
95
|
-
if
|
|
92
|
+
if response.status_code != 200:
|
|
96
93
|
raise IOError(
|
|
97
94
|
f"Failed to generate response - ({response.status_code}, {response.reason}) - {response.text}"
|
|
98
95
|
)
|
|
@@ -104,18 +101,18 @@ class Completions(BaseCompletions):
|
|
|
104
101
|
|
|
105
102
|
# Estimate prompt tokens based on message length
|
|
106
103
|
for msg in payload.get("messages", []):
|
|
107
|
-
prompt_tokens +=
|
|
104
|
+
prompt_tokens += count_tokens(msg.get("content", ""))
|
|
108
105
|
|
|
109
106
|
for line in response.iter_lines():
|
|
110
107
|
if line:
|
|
111
|
-
decoded_line = line.decode(
|
|
108
|
+
decoded_line = line.decode("utf-8").strip()
|
|
112
109
|
|
|
113
110
|
# WiseCat uses a different format, so we need to extract the content
|
|
114
111
|
match = re.search(r'0:"(.*?)"', decoded_line)
|
|
115
112
|
if match:
|
|
116
113
|
content = match.group(1)
|
|
117
114
|
|
|
118
|
-
# Format the content (replace escaped newlines)
|
|
115
|
+
# Format the content (replace escaped newlines and unicode escapes)
|
|
119
116
|
content = self._client.format_text(content)
|
|
120
117
|
|
|
121
118
|
# Update token counts
|
|
@@ -123,19 +120,10 @@ class Completions(BaseCompletions):
|
|
|
123
120
|
total_tokens = prompt_tokens + completion_tokens
|
|
124
121
|
|
|
125
122
|
# Create the delta object
|
|
126
|
-
delta = ChoiceDelta(
|
|
127
|
-
content=content,
|
|
128
|
-
role="assistant",
|
|
129
|
-
tool_calls=None
|
|
130
|
-
)
|
|
123
|
+
delta = ChoiceDelta(content=content, role="assistant", tool_calls=None)
|
|
131
124
|
|
|
132
125
|
# Create the choice object
|
|
133
|
-
choice = Choice(
|
|
134
|
-
index=0,
|
|
135
|
-
delta=delta,
|
|
136
|
-
finish_reason=None,
|
|
137
|
-
logprobs=None
|
|
138
|
-
)
|
|
126
|
+
choice = Choice(index=0, delta=delta, finish_reason=None, logprobs=None)
|
|
139
127
|
|
|
140
128
|
# Create the chunk object
|
|
141
129
|
chunk = ChatCompletionChunk(
|
|
@@ -143,18 +131,21 @@ class Completions(BaseCompletions):
|
|
|
143
131
|
choices=[choice],
|
|
144
132
|
created=created_time,
|
|
145
133
|
model=model,
|
|
146
|
-
system_fingerprint=None
|
|
134
|
+
system_fingerprint=None,
|
|
147
135
|
)
|
|
148
136
|
|
|
149
|
-
# Convert to dict
|
|
150
|
-
|
|
137
|
+
# Convert chunk to dict using Pydantic's API
|
|
138
|
+
if hasattr(chunk, "model_dump"):
|
|
139
|
+
chunk_dict = chunk.model_dump(exclude_none=True)
|
|
140
|
+
else:
|
|
141
|
+
chunk_dict = chunk.dict(exclude_none=True)
|
|
151
142
|
|
|
152
143
|
# Add usage information to match OpenAI format
|
|
153
144
|
usage_dict = {
|
|
154
145
|
"prompt_tokens": prompt_tokens,
|
|
155
146
|
"completion_tokens": completion_tokens,
|
|
156
147
|
"total_tokens": total_tokens,
|
|
157
|
-
"estimated_cost": None
|
|
148
|
+
"estimated_cost": None,
|
|
158
149
|
}
|
|
159
150
|
|
|
160
151
|
chunk_dict["usage"] = usage_dict
|
|
@@ -163,33 +154,27 @@ class Completions(BaseCompletions):
|
|
|
163
154
|
yield chunk
|
|
164
155
|
|
|
165
156
|
# Final chunk with finish_reason="stop"
|
|
166
|
-
delta = ChoiceDelta(
|
|
167
|
-
content=None,
|
|
168
|
-
role=None,
|
|
169
|
-
tool_calls=None
|
|
170
|
-
)
|
|
157
|
+
delta = ChoiceDelta(content=None, role=None, tool_calls=None)
|
|
171
158
|
|
|
172
|
-
choice = Choice(
|
|
173
|
-
index=0,
|
|
174
|
-
delta=delta,
|
|
175
|
-
finish_reason="stop",
|
|
176
|
-
logprobs=None
|
|
177
|
-
)
|
|
159
|
+
choice = Choice(index=0, delta=delta, finish_reason="stop", logprobs=None)
|
|
178
160
|
|
|
179
161
|
chunk = ChatCompletionChunk(
|
|
180
162
|
id=request_id,
|
|
181
163
|
choices=[choice],
|
|
182
164
|
created=created_time,
|
|
183
165
|
model=model,
|
|
184
|
-
system_fingerprint=None
|
|
166
|
+
system_fingerprint=None,
|
|
185
167
|
)
|
|
186
168
|
|
|
187
|
-
|
|
169
|
+
if hasattr(chunk, "model_dump"):
|
|
170
|
+
chunk_dict = chunk.model_dump(exclude_none=True)
|
|
171
|
+
else:
|
|
172
|
+
chunk_dict = chunk.dict(exclude_none=True)
|
|
188
173
|
chunk_dict["usage"] = {
|
|
189
174
|
"prompt_tokens": prompt_tokens,
|
|
190
175
|
"completion_tokens": completion_tokens,
|
|
191
176
|
"total_tokens": total_tokens,
|
|
192
|
-
"estimated_cost": None
|
|
177
|
+
"estimated_cost": None,
|
|
193
178
|
}
|
|
194
179
|
|
|
195
180
|
yield chunk
|
|
@@ -208,20 +193,22 @@ class Completions(BaseCompletions):
|
|
|
208
193
|
headers=self._client.headers,
|
|
209
194
|
json=payload,
|
|
210
195
|
stream=True,
|
|
211
|
-
timeout=self._client.timeout
|
|
196
|
+
timeout=self._client.timeout,
|
|
197
|
+
impersonate="chrome120",
|
|
212
198
|
)
|
|
213
199
|
|
|
214
200
|
# Handle non-200 responses
|
|
215
|
-
if
|
|
201
|
+
if response.status_code != 200:
|
|
216
202
|
raise IOError(
|
|
217
203
|
f"Failed to generate response - ({response.status_code}, {response.reason}) - {response.text}"
|
|
218
204
|
)
|
|
219
205
|
|
|
220
206
|
# Collect the full response
|
|
221
207
|
full_text = ""
|
|
222
|
-
for line in response.iter_lines(
|
|
208
|
+
for line in response.iter_lines():
|
|
223
209
|
if line:
|
|
224
|
-
|
|
210
|
+
decoded_line = line.decode("utf-8").strip()
|
|
211
|
+
match = re.search(r'0:"(.*?)"', decoded_line)
|
|
225
212
|
if match:
|
|
226
213
|
content = match.group(1)
|
|
227
214
|
full_text += content
|
|
@@ -232,29 +219,22 @@ class Completions(BaseCompletions):
|
|
|
232
219
|
# Estimate token counts
|
|
233
220
|
prompt_tokens = 0
|
|
234
221
|
for msg in payload.get("messages", []):
|
|
235
|
-
prompt_tokens +=
|
|
222
|
+
prompt_tokens += count_tokens(msg.get("content", ""))
|
|
236
223
|
|
|
237
|
-
completion_tokens =
|
|
224
|
+
completion_tokens = count_tokens(full_text)
|
|
238
225
|
total_tokens = prompt_tokens + completion_tokens
|
|
239
226
|
|
|
240
227
|
# Create the message object
|
|
241
|
-
message = ChatCompletionMessage(
|
|
242
|
-
role="assistant",
|
|
243
|
-
content=full_text
|
|
244
|
-
)
|
|
228
|
+
message = ChatCompletionMessage(role="assistant", content=full_text)
|
|
245
229
|
|
|
246
230
|
# Create the choice object
|
|
247
|
-
choice = Choice(
|
|
248
|
-
index=0,
|
|
249
|
-
message=message,
|
|
250
|
-
finish_reason="stop"
|
|
251
|
-
)
|
|
231
|
+
choice = Choice(index=0, message=message, finish_reason="stop")
|
|
252
232
|
|
|
253
233
|
# Create the usage object
|
|
254
234
|
usage = CompletionUsage(
|
|
255
235
|
prompt_tokens=prompt_tokens,
|
|
256
236
|
completion_tokens=completion_tokens,
|
|
257
|
-
total_tokens=total_tokens
|
|
237
|
+
total_tokens=total_tokens,
|
|
258
238
|
)
|
|
259
239
|
|
|
260
240
|
# Create the completion object
|
|
@@ -272,10 +252,12 @@ class Completions(BaseCompletions):
|
|
|
272
252
|
print(f"Error during WiseCat non-stream request: {e}")
|
|
273
253
|
raise IOError(f"WiseCat request failed: {e}") from e
|
|
274
254
|
|
|
255
|
+
|
|
275
256
|
class Chat(BaseChat):
|
|
276
|
-
def __init__(self, client:
|
|
257
|
+
def __init__(self, client: "WiseCat"):
|
|
277
258
|
self.completions = Completions(client)
|
|
278
259
|
|
|
260
|
+
|
|
279
261
|
class WiseCat(OpenAICompatibleProvider):
|
|
280
262
|
"""
|
|
281
263
|
OpenAI-compatible client for WiseCat API.
|
|
@@ -288,19 +270,14 @@ class WiseCat(OpenAICompatibleProvider):
|
|
|
288
270
|
)
|
|
289
271
|
"""
|
|
290
272
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
273
|
+
required_auth = False
|
|
274
|
+
_base_models = ["chat-model-small", "chat-model-large", "chat-model-reasoning"]
|
|
275
|
+
# Create AVAILABLE_MODELS as a list with the format "WiseCat/model"
|
|
276
|
+
AVAILABLE_MODELS = [f"WiseCat/{model}" for model in _base_models]
|
|
277
|
+
# Create a mapping dictionary for internal use
|
|
278
|
+
_model_mapping = {model: f"WiseCat/{model}" for model in _base_models}
|
|
296
279
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
def __init__(
|
|
300
|
-
self,
|
|
301
|
-
timeout: Optional[int] = None,
|
|
302
|
-
browser: str = "chrome"
|
|
303
|
-
):
|
|
280
|
+
def __init__(self, timeout: Optional[int] = None, browser: str = "chrome"):
|
|
304
281
|
"""
|
|
305
282
|
Initialize the WiseCat client.
|
|
306
283
|
|
|
@@ -310,7 +287,7 @@ class WiseCat(OpenAICompatibleProvider):
|
|
|
310
287
|
"""
|
|
311
288
|
self.timeout = timeout
|
|
312
289
|
self.api_endpoint = "https://wise-cat-groq.vercel.app/api/chat"
|
|
313
|
-
self.session =
|
|
290
|
+
self.session = Session()
|
|
314
291
|
|
|
315
292
|
# Initialize LitAgent for user agent generation
|
|
316
293
|
agent = LitAgent()
|
|
@@ -334,29 +311,16 @@ class WiseCat(OpenAICompatibleProvider):
|
|
|
334
311
|
Returns:
|
|
335
312
|
Formatted text
|
|
336
313
|
"""
|
|
337
|
-
# Use a more comprehensive approach to handle all escape sequences
|
|
338
314
|
try:
|
|
339
|
-
#
|
|
340
|
-
text = text.
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
text =
|
|
345
|
-
text =
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
# Handle any remaining escape sequences using JSON decoding
|
|
350
|
-
# This is a fallback in case there are other escape sequences
|
|
351
|
-
try:
|
|
352
|
-
# Add quotes to make it a valid JSON string
|
|
353
|
-
json_str = f'"{text}"'
|
|
354
|
-
# Use json module to decode all escape sequences
|
|
355
|
-
decoded = json.loads(json_str)
|
|
356
|
-
return decoded
|
|
357
|
-
except json.JSONDecodeError:
|
|
358
|
-
# If JSON decoding fails, return the text with the replacements we've already done
|
|
359
|
-
return text
|
|
315
|
+
# Handle unicode escaping and quote unescaping
|
|
316
|
+
text = text.encode().decode("unicode_escape")
|
|
317
|
+
text = text.replace("\\\\", "\\").replace('\\"', '"')
|
|
318
|
+
|
|
319
|
+
# Remove timing information
|
|
320
|
+
text = re.sub(r"\(\d+\.?\d*s\)", "", text)
|
|
321
|
+
text = re.sub(r"\(\d+\.?\d*ms\)", "", text)
|
|
322
|
+
|
|
323
|
+
return text
|
|
360
324
|
except Exception as e:
|
|
361
325
|
# If any error occurs, return the original text
|
|
362
326
|
print(f"Warning: Error formatting text: {e}")
|
|
@@ -364,18 +328,32 @@ class WiseCat(OpenAICompatibleProvider):
|
|
|
364
328
|
|
|
365
329
|
def convert_model_name(self, model: str) -> str:
|
|
366
330
|
"""
|
|
367
|
-
Convert model names to ones supported by WiseCat.
|
|
368
|
-
|
|
369
|
-
Args:
|
|
370
|
-
model: Model name to convert
|
|
371
|
-
|
|
372
|
-
Returns:
|
|
373
|
-
WiseCat model name
|
|
331
|
+
Convert model names to ones supported by WiseCat. Accepts both 'WiseCat/model' and raw model names.
|
|
374
332
|
"""
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
333
|
+
if model.startswith("WiseCat/"):
|
|
334
|
+
model_raw = model.replace("WiseCat/", "", 1)
|
|
335
|
+
else:
|
|
336
|
+
model_raw = model
|
|
337
|
+
if f"WiseCat/{model_raw}" in self.AVAILABLE_MODELS:
|
|
338
|
+
return model_raw
|
|
380
339
|
print(f"Warning: Unknown model '{model}'. Using 'chat-model-large' instead.")
|
|
381
340
|
return "chat-model-large"
|
|
341
|
+
|
|
342
|
+
@property
|
|
343
|
+
def models(self) -> SimpleModelList:
|
|
344
|
+
return SimpleModelList(type(self).AVAILABLE_MODELS)
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
if __name__ == "__main__":
|
|
348
|
+
# Test the provider
|
|
349
|
+
client = WiseCat()
|
|
350
|
+
response = client.chat.completions.create(
|
|
351
|
+
model="chat-model-small",
|
|
352
|
+
messages=[
|
|
353
|
+
{"role": "system", "content": "You are a helpful assistant."},
|
|
354
|
+
{"role": "user", "content": "Hello! How are you today?"},
|
|
355
|
+
],
|
|
356
|
+
)
|
|
357
|
+
if isinstance(response, ChatCompletion):
|
|
358
|
+
if response.choices[0].message and response.choices[0].message.content:
|
|
359
|
+
print(response.choices[0].message.content)
|