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,25 +1,148 @@
|
|
|
1
|
-
# This file marks the directory as a Python package.
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
from .
|
|
6
|
-
from .
|
|
7
|
-
from .
|
|
8
|
-
from .
|
|
9
|
-
from .
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
from .
|
|
20
|
-
from .
|
|
21
|
-
from .
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
from .
|
|
25
|
-
from .
|
|
1
|
+
# This file marks the directory as a Python package.
|
|
2
|
+
# Static imports for all OPENAI provider modules
|
|
3
|
+
|
|
4
|
+
# Base classes and utilities
|
|
5
|
+
from webscout.Provider.OPENAI.ai4chat import AI4Chat
|
|
6
|
+
from webscout.Provider.OPENAI.akashgpt import AkashGPT
|
|
7
|
+
from webscout.Provider.OPENAI.algion import Algion
|
|
8
|
+
from webscout.Provider.OPENAI.ayle import Ayle
|
|
9
|
+
from webscout.Provider.OPENAI.base import (
|
|
10
|
+
BaseChat,
|
|
11
|
+
BaseCompletions,
|
|
12
|
+
FunctionDefinition,
|
|
13
|
+
FunctionParameters,
|
|
14
|
+
OpenAICompatibleProvider,
|
|
15
|
+
SimpleModelList,
|
|
16
|
+
Tool,
|
|
17
|
+
ToolDefinition,
|
|
18
|
+
)
|
|
19
|
+
from webscout.Provider.OPENAI.cerebras import Cerebras
|
|
20
|
+
from webscout.Provider.OPENAI.chatgpt import ChatGPT, ChatGPTReversed
|
|
21
|
+
from webscout.Provider.OPENAI.chatsandbox import ChatSandbox
|
|
22
|
+
|
|
23
|
+
# Provider implementations
|
|
24
|
+
from webscout.Provider.OPENAI.DeepAI import DeepAI
|
|
25
|
+
from webscout.Provider.OPENAI.deepinfra import DeepInfra
|
|
26
|
+
from webscout.Provider.OPENAI.e2b import E2B
|
|
27
|
+
from webscout.Provider.OPENAI.elmo import Elmo
|
|
28
|
+
from webscout.Provider.OPENAI.exaai import ExaAI
|
|
29
|
+
from webscout.Provider.OPENAI.freeassist import FreeAssist
|
|
30
|
+
from webscout.Provider.OPENAI.gradient import Gradient
|
|
31
|
+
from webscout.Provider.OPENAI.groq import Groq
|
|
32
|
+
from webscout.Provider.OPENAI.hadadxyz import HadadXYZ
|
|
33
|
+
from webscout.Provider.OPENAI.heckai import HeckAI
|
|
34
|
+
from webscout.Provider.OPENAI.huggingface import HuggingFace
|
|
35
|
+
from webscout.Provider.OPENAI.ibm import IBM
|
|
36
|
+
from webscout.Provider.OPENAI.K2Think import K2Think
|
|
37
|
+
from webscout.Provider.OPENAI.llmchat import LLMChat
|
|
38
|
+
from webscout.Provider.OPENAI.llmchatco import LLMChatCo
|
|
39
|
+
from webscout.Provider.OPENAI.meta import Meta
|
|
40
|
+
from webscout.Provider.OPENAI.netwrck import Netwrck
|
|
41
|
+
from webscout.Provider.OPENAI.nvidia import Nvidia
|
|
42
|
+
from webscout.Provider.OPENAI.oivscode import oivscode
|
|
43
|
+
from webscout.Provider.OPENAI.openrouter import OpenRouter
|
|
44
|
+
from webscout.Provider.OPENAI.PI import PiAI
|
|
45
|
+
from webscout.Provider.OPENAI.sambanova import Sambanova
|
|
46
|
+
from webscout.Provider.OPENAI.sonus import SonusAI
|
|
47
|
+
from webscout.Provider.OPENAI.textpollinations import TextPollinations
|
|
48
|
+
from webscout.Provider.OPENAI.TogetherAI import TogetherAI
|
|
49
|
+
from webscout.Provider.OPENAI.toolbaz import Toolbaz
|
|
50
|
+
from webscout.Provider.OPENAI.TwoAI import TwoAI
|
|
51
|
+
from webscout.Provider.OPENAI.typefully import TypefullyAI
|
|
52
|
+
from webscout.Provider.OPENAI.typliai import TypliAI
|
|
53
|
+
from webscout.Provider.OPENAI.utils import (
|
|
54
|
+
ChatCompletion,
|
|
55
|
+
ChatCompletionChunk,
|
|
56
|
+
ChatCompletionMessage,
|
|
57
|
+
Choice,
|
|
58
|
+
ChoiceDelta,
|
|
59
|
+
CompletionUsage,
|
|
60
|
+
FunctionCall,
|
|
61
|
+
ModelData,
|
|
62
|
+
ModelList,
|
|
63
|
+
ToolCall,
|
|
64
|
+
ToolCallType,
|
|
65
|
+
ToolFunction,
|
|
66
|
+
count_tokens,
|
|
67
|
+
format_prompt,
|
|
68
|
+
get_last_user_message,
|
|
69
|
+
get_system_prompt,
|
|
70
|
+
)
|
|
71
|
+
from webscout.Provider.OPENAI.wisecat import WiseCat
|
|
72
|
+
from webscout.Provider.OPENAI.writecream import Writecream
|
|
73
|
+
from webscout.Provider.OPENAI.x0gpt import X0GPT
|
|
74
|
+
from webscout.Provider.OPENAI.zenmux import Zenmux
|
|
75
|
+
|
|
76
|
+
# List of all exported names
|
|
77
|
+
__all__ = [
|
|
78
|
+
# Base classes and utilities
|
|
79
|
+
"OpenAICompatibleProvider",
|
|
80
|
+
"SimpleModelList",
|
|
81
|
+
"BaseChat",
|
|
82
|
+
"BaseCompletions",
|
|
83
|
+
"Tool",
|
|
84
|
+
"ToolDefinition",
|
|
85
|
+
"FunctionParameters",
|
|
86
|
+
"FunctionDefinition",
|
|
87
|
+
# Utils
|
|
88
|
+
"ChatCompletion",
|
|
89
|
+
"ChatCompletionChunk",
|
|
90
|
+
"Choice",
|
|
91
|
+
"ChoiceDelta",
|
|
92
|
+
"ChatCompletionMessage",
|
|
93
|
+
"CompletionUsage",
|
|
94
|
+
"ToolCall",
|
|
95
|
+
"ToolFunction",
|
|
96
|
+
"FunctionCall",
|
|
97
|
+
"ToolCallType",
|
|
98
|
+
"ModelData",
|
|
99
|
+
"ModelList",
|
|
100
|
+
"format_prompt",
|
|
101
|
+
"get_system_prompt",
|
|
102
|
+
"get_last_user_message",
|
|
103
|
+
"count_tokens",
|
|
104
|
+
# Provider implementations
|
|
105
|
+
"DeepAI",
|
|
106
|
+
"HadadXYZ",
|
|
107
|
+
"K2Think",
|
|
108
|
+
"PiAI",
|
|
109
|
+
"TogetherAI",
|
|
110
|
+
"TwoAI",
|
|
111
|
+
"AI4Chat",
|
|
112
|
+
"AkashGPT",
|
|
113
|
+
"Algion",
|
|
114
|
+
"Cerebras",
|
|
115
|
+
"ChatGPT",
|
|
116
|
+
"ChatGPTReversed",
|
|
117
|
+
"ChatSandbox",
|
|
118
|
+
"DeepInfra",
|
|
119
|
+
"E2B",
|
|
120
|
+
"Elmo",
|
|
121
|
+
"ExaAI",
|
|
122
|
+
"FreeAssist",
|
|
123
|
+
"Ayle",
|
|
124
|
+
"HuggingFace",
|
|
125
|
+
"oivscode",
|
|
126
|
+
"Groq",
|
|
127
|
+
"HeckAI",
|
|
128
|
+
"IBM",
|
|
129
|
+
"LLMChat",
|
|
130
|
+
"LLMChatCo",
|
|
131
|
+
"Netwrck",
|
|
132
|
+
"Nvidia",
|
|
133
|
+
"OpenRouter",
|
|
134
|
+
"oivscode",
|
|
135
|
+
"SonusAI",
|
|
136
|
+
"TextPollinations",
|
|
137
|
+
"Toolbaz",
|
|
138
|
+
"TypefullyAI",
|
|
139
|
+
"WiseCat",
|
|
140
|
+
"Writecream",
|
|
141
|
+
"X0GPT",
|
|
142
|
+
"YEPCHAT",
|
|
143
|
+
"Zenmux",
|
|
144
|
+
"Gradient",
|
|
145
|
+
"Sambanova",
|
|
146
|
+
"Meta",
|
|
147
|
+
"TypliAI",
|
|
148
|
+
]
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import time
|
|
2
|
+
import urllib.parse
|
|
3
|
+
import uuid
|
|
4
|
+
from typing import Any, Dict, Generator, List, Optional, Union, cast
|
|
5
|
+
|
|
6
|
+
from curl_cffi.requests import RequestsError
|
|
7
|
+
|
|
8
|
+
# Import base classes and utility structures
|
|
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,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
# --- AI4Chat Client ---
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class Completions(BaseCompletions):
|
|
29
|
+
def __init__(self, client: "AI4Chat"):
|
|
30
|
+
self._client = client
|
|
31
|
+
|
|
32
|
+
def create(
|
|
33
|
+
self,
|
|
34
|
+
*,
|
|
35
|
+
model: str,
|
|
36
|
+
messages: List[Dict[str, str]],
|
|
37
|
+
max_tokens: Optional[int] = None,
|
|
38
|
+
stream: bool = False,
|
|
39
|
+
temperature: Optional[float] = None,
|
|
40
|
+
top_p: Optional[float] = None,
|
|
41
|
+
timeout: Optional[int] = None,
|
|
42
|
+
proxies: Optional[dict] = None,
|
|
43
|
+
**kwargs: Any,
|
|
44
|
+
) -> Union[ChatCompletion, Generator[ChatCompletionChunk, None, None]]:
|
|
45
|
+
"""
|
|
46
|
+
Creates a model response for the given chat conversation.
|
|
47
|
+
Mimics openai.chat.completions.create
|
|
48
|
+
"""
|
|
49
|
+
# Use the format_prompt utility to format the conversation
|
|
50
|
+
from webscout.Provider.OPENAI.utils import format_prompt
|
|
51
|
+
|
|
52
|
+
# Format the messages into a single string
|
|
53
|
+
conversation_prompt = format_prompt(messages, add_special_tokens=True, include_system=True)
|
|
54
|
+
|
|
55
|
+
# Set up request parameters
|
|
56
|
+
country_param = kwargs.get("country", self._client.country)
|
|
57
|
+
user_id_param = kwargs.get("user_id", self._client.user_id)
|
|
58
|
+
|
|
59
|
+
# Generate request ID and timestamp
|
|
60
|
+
request_id = f"chatcmpl-{uuid.uuid4()}"
|
|
61
|
+
created_time = int(time.time())
|
|
62
|
+
|
|
63
|
+
# AI4Chat doesn't support streaming, so we'll simulate it if requested
|
|
64
|
+
if stream:
|
|
65
|
+
return self._create_stream(
|
|
66
|
+
request_id,
|
|
67
|
+
created_time,
|
|
68
|
+
model,
|
|
69
|
+
conversation_prompt,
|
|
70
|
+
country_param,
|
|
71
|
+
user_id_param,
|
|
72
|
+
timeout=timeout,
|
|
73
|
+
proxies=proxies,
|
|
74
|
+
)
|
|
75
|
+
else:
|
|
76
|
+
return self._create_non_stream(
|
|
77
|
+
request_id,
|
|
78
|
+
created_time,
|
|
79
|
+
model,
|
|
80
|
+
conversation_prompt,
|
|
81
|
+
country_param,
|
|
82
|
+
user_id_param,
|
|
83
|
+
timeout=timeout,
|
|
84
|
+
proxies=proxies,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
def _create_stream(
|
|
88
|
+
self,
|
|
89
|
+
request_id: str,
|
|
90
|
+
created_time: int,
|
|
91
|
+
model: str,
|
|
92
|
+
conversation_prompt: str,
|
|
93
|
+
country: str,
|
|
94
|
+
user_id: str,
|
|
95
|
+
timeout: Optional[int] = None,
|
|
96
|
+
proxies: Optional[dict] = None,
|
|
97
|
+
) -> Generator[ChatCompletionChunk, None, None]:
|
|
98
|
+
"""Simulate streaming by breaking up the full response into fixed-size character chunks."""
|
|
99
|
+
try:
|
|
100
|
+
# Get the full response first
|
|
101
|
+
full_response = self._get_ai4chat_response(
|
|
102
|
+
conversation_prompt, country, user_id, timeout=timeout, proxies=proxies
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
# Track token usage
|
|
106
|
+
count_tokens(conversation_prompt)
|
|
107
|
+
completion_tokens = 0
|
|
108
|
+
|
|
109
|
+
# Stream fixed-size character chunks (e.g., 48 chars)
|
|
110
|
+
buffer = full_response
|
|
111
|
+
chunk_size = 48
|
|
112
|
+
while buffer:
|
|
113
|
+
chunk_text = buffer[:chunk_size]
|
|
114
|
+
buffer = buffer[chunk_size:]
|
|
115
|
+
completion_tokens += count_tokens(chunk_text)
|
|
116
|
+
|
|
117
|
+
if chunk_text.strip():
|
|
118
|
+
# Create the delta object
|
|
119
|
+
delta = ChoiceDelta(content=chunk_text, role="assistant", tool_calls=None)
|
|
120
|
+
|
|
121
|
+
# Create the choice object
|
|
122
|
+
choice = Choice(index=0, delta=delta, finish_reason=None, logprobs=None)
|
|
123
|
+
|
|
124
|
+
# Create the chunk object
|
|
125
|
+
chunk = ChatCompletionChunk(
|
|
126
|
+
id=request_id,
|
|
127
|
+
choices=[choice],
|
|
128
|
+
created=created_time,
|
|
129
|
+
model=model,
|
|
130
|
+
system_fingerprint=None,
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
yield chunk
|
|
134
|
+
|
|
135
|
+
# Final chunk with finish_reason="stop"
|
|
136
|
+
delta = ChoiceDelta(content=None, role=None, tool_calls=None)
|
|
137
|
+
|
|
138
|
+
choice = Choice(index=0, delta=delta, finish_reason="stop", logprobs=None)
|
|
139
|
+
|
|
140
|
+
chunk = ChatCompletionChunk(
|
|
141
|
+
id=request_id,
|
|
142
|
+
choices=[choice],
|
|
143
|
+
created=created_time,
|
|
144
|
+
model=model,
|
|
145
|
+
system_fingerprint=None,
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
yield chunk
|
|
149
|
+
|
|
150
|
+
except RequestsError as e:
|
|
151
|
+
print(f"Error during AI4Chat stream request: {e}")
|
|
152
|
+
raise IOError(f"AI4Chat request failed: {e}") from e
|
|
153
|
+
except Exception as e:
|
|
154
|
+
print(f"Unexpected error during AI4Chat stream request: {e}")
|
|
155
|
+
raise IOError(f"AI4Chat request failed: {e}") from e
|
|
156
|
+
|
|
157
|
+
def _create_non_stream(
|
|
158
|
+
self,
|
|
159
|
+
request_id: str,
|
|
160
|
+
created_time: int,
|
|
161
|
+
model: str,
|
|
162
|
+
conversation_prompt: str,
|
|
163
|
+
country: str,
|
|
164
|
+
user_id: str,
|
|
165
|
+
timeout: Optional[int] = None,
|
|
166
|
+
proxies: Optional[dict] = None,
|
|
167
|
+
) -> ChatCompletion:
|
|
168
|
+
"""Get a complete response from AI4Chat."""
|
|
169
|
+
try:
|
|
170
|
+
# Get the full response
|
|
171
|
+
full_response = self._get_ai4chat_response(
|
|
172
|
+
conversation_prompt, country, user_id, timeout=timeout, proxies=proxies
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
# Estimate token counts
|
|
176
|
+
prompt_tokens = count_tokens(conversation_prompt)
|
|
177
|
+
completion_tokens = count_tokens(full_response)
|
|
178
|
+
total_tokens = prompt_tokens + completion_tokens
|
|
179
|
+
|
|
180
|
+
# Create the message object
|
|
181
|
+
message = ChatCompletionMessage(role="assistant", content=full_response)
|
|
182
|
+
|
|
183
|
+
# Create the choice object
|
|
184
|
+
choice = Choice(index=0, message=message, finish_reason="stop")
|
|
185
|
+
|
|
186
|
+
# Create the usage object
|
|
187
|
+
usage = CompletionUsage(
|
|
188
|
+
prompt_tokens=prompt_tokens,
|
|
189
|
+
completion_tokens=completion_tokens,
|
|
190
|
+
total_tokens=total_tokens,
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
# Create the completion object
|
|
194
|
+
completion = ChatCompletion(
|
|
195
|
+
id=request_id,
|
|
196
|
+
choices=[choice],
|
|
197
|
+
created=created_time,
|
|
198
|
+
model=model,
|
|
199
|
+
usage=usage,
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
return completion
|
|
203
|
+
|
|
204
|
+
except RequestsError as e:
|
|
205
|
+
print(f"Error during AI4Chat non-stream request: {e}")
|
|
206
|
+
raise IOError(f"AI4Chat request failed: {e}") from e
|
|
207
|
+
except Exception as e:
|
|
208
|
+
print(f"Unexpected error during AI4Chat non-stream request: {e}")
|
|
209
|
+
raise IOError(f"AI4Chat request failed: {e}") from e
|
|
210
|
+
|
|
211
|
+
def _get_ai4chat_response(
|
|
212
|
+
self,
|
|
213
|
+
prompt: str,
|
|
214
|
+
country: str,
|
|
215
|
+
user_id: str,
|
|
216
|
+
timeout: Optional[int] = None,
|
|
217
|
+
proxies: Optional[dict] = None,
|
|
218
|
+
) -> str:
|
|
219
|
+
"""Make the actual API request to AI4Chat."""
|
|
220
|
+
timeout_val = timeout if timeout is not None else self._client.timeout
|
|
221
|
+
original_proxies = dict(self._client.session.proxies)
|
|
222
|
+
if proxies is not None:
|
|
223
|
+
self._client.session.proxies.update(cast(Any, proxies))
|
|
224
|
+
|
|
225
|
+
try:
|
|
226
|
+
# URL encode parameters
|
|
227
|
+
encoded_text = urllib.parse.quote(prompt)
|
|
228
|
+
encoded_country = urllib.parse.quote(country)
|
|
229
|
+
encoded_user_id = urllib.parse.quote(user_id)
|
|
230
|
+
|
|
231
|
+
# Construct the API URL
|
|
232
|
+
url = f"{self._client.api_endpoint}?text={encoded_text}&country={encoded_country}&user_id={encoded_user_id}"
|
|
233
|
+
|
|
234
|
+
# Make the request
|
|
235
|
+
response = self._client.session.get(
|
|
236
|
+
url, headers=self._client.headers, timeout=timeout_val
|
|
237
|
+
)
|
|
238
|
+
response.raise_for_status()
|
|
239
|
+
except RequestsError as e:
|
|
240
|
+
raise IOError(f"Failed to generate response: {e}")
|
|
241
|
+
finally:
|
|
242
|
+
if proxies is not None:
|
|
243
|
+
self._client.session.proxies.clear()
|
|
244
|
+
self._client.session.proxies.update(cast(Any, original_proxies))
|
|
245
|
+
|
|
246
|
+
# Process the response text
|
|
247
|
+
response_text = response.text
|
|
248
|
+
|
|
249
|
+
# Remove surrounding quotes if present
|
|
250
|
+
if response_text.startswith('"'):
|
|
251
|
+
response_text = response_text[1:]
|
|
252
|
+
if response_text.endswith('"'):
|
|
253
|
+
response_text = response_text[:-1]
|
|
254
|
+
|
|
255
|
+
# Replace escaped newlines
|
|
256
|
+
response_text = response_text.replace("\\n", "\n").replace("\\n\\n", "\n\n")
|
|
257
|
+
|
|
258
|
+
return response_text
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
class Chat(BaseChat):
|
|
262
|
+
def __init__(self, client: "AI4Chat"):
|
|
263
|
+
self.completions = Completions(client)
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
class AI4Chat(OpenAICompatibleProvider):
|
|
267
|
+
"""
|
|
268
|
+
OpenAI-compatible client for AI4Chat API.
|
|
269
|
+
|
|
270
|
+
Usage:
|
|
271
|
+
client = AI4Chat()
|
|
272
|
+
response = client.chat.completions.create(
|
|
273
|
+
model="default",
|
|
274
|
+
messages=[{"role": "user", "content": "Hello!"}]
|
|
275
|
+
)
|
|
276
|
+
print(response.choices[0].message.content)
|
|
277
|
+
"""
|
|
278
|
+
|
|
279
|
+
required_auth = False
|
|
280
|
+
AVAILABLE_MODELS = ["default"]
|
|
281
|
+
|
|
282
|
+
def __init__(
|
|
283
|
+
self,
|
|
284
|
+
system_prompt: str = "You are a helpful and informative AI assistant.",
|
|
285
|
+
country: str = "Asia",
|
|
286
|
+
user_id: str = "usersmjb2oaz7y",
|
|
287
|
+
proxies: Optional[Dict[str, str]] = None,
|
|
288
|
+
):
|
|
289
|
+
"""
|
|
290
|
+
Initialize the AI4Chat client.
|
|
291
|
+
|
|
292
|
+
Args:
|
|
293
|
+
system_prompt: System prompt to guide the AI's behavior
|
|
294
|
+
country: Country parameter for API
|
|
295
|
+
user_id: User ID for API
|
|
296
|
+
proxies: Proxy configuration
|
|
297
|
+
"""
|
|
298
|
+
super().__init__(proxies=proxies)
|
|
299
|
+
self.timeout = 30
|
|
300
|
+
self.system_prompt = system_prompt
|
|
301
|
+
self.country = country
|
|
302
|
+
self.user_id = user_id
|
|
303
|
+
|
|
304
|
+
# API endpoint
|
|
305
|
+
self.api_endpoint = (
|
|
306
|
+
"https://yw85opafq6.execute-api.us-east-1.amazonaws.com/default/boss_mode_15aug"
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
# Set headers
|
|
310
|
+
self.headers = {
|
|
311
|
+
"Accept": "*/*",
|
|
312
|
+
"Accept-Language": "id-ID,id;q=0.9",
|
|
313
|
+
"Origin": "https://www.ai4chat.co",
|
|
314
|
+
"Priority": "u=1, i",
|
|
315
|
+
"Referer": "https://www.ai4chat.co/",
|
|
316
|
+
"Sec-CH-UA": '"Chromium";v="131", "Not_A Brand";v="24", "Microsoft Edge Simulate";v="131", "Lemur";v="131"',
|
|
317
|
+
"Sec-CH-UA-Mobile": "?1",
|
|
318
|
+
"Sec-CH-UA-Platform": '"Android"',
|
|
319
|
+
"Sec-Fetch-Dest": "empty",
|
|
320
|
+
"Sec-Fetch-Mode": "cors",
|
|
321
|
+
"Sec-Fetch-Site": "cross-site",
|
|
322
|
+
"User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36",
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
# Update session headers
|
|
326
|
+
self.session.headers.update(self.headers)
|
|
327
|
+
|
|
328
|
+
# Initialize chat interface
|
|
329
|
+
self.chat = Chat(self)
|
|
330
|
+
|
|
331
|
+
@property
|
|
332
|
+
def models(self) -> SimpleModelList:
|
|
333
|
+
return SimpleModelList(type(self).AVAILABLE_MODELS)
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
if __name__ == "__main__":
|
|
337
|
+
# Example usage
|
|
338
|
+
client = AI4Chat()
|
|
339
|
+
response = client.chat.completions.create(
|
|
340
|
+
model="default",
|
|
341
|
+
messages=[
|
|
342
|
+
{"role": "system", "content": client.system_prompt},
|
|
343
|
+
{"role": "user", "content": "Hello, how are you?"},
|
|
344
|
+
],
|
|
345
|
+
)
|
|
346
|
+
if isinstance(response, ChatCompletion):
|
|
347
|
+
if response.choices[0].message and response.choices[0].message.content:
|
|
348
|
+
print(response.choices[0].message.content)
|