webscout 8.2.9__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 -251
- webscout/AIbase.py +247 -319
- webscout/AIutel.py +68 -703
- webscout/Bard.py +1072 -1026
- webscout/Extra/GitToolkit/__init__.py +10 -10
- 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 -375
- 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 -44
- 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 -118
- 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 +403 -232
- webscout/Extra/__init__.py +2 -3
- webscout/Extra/gguf.py +1298 -684
- webscout/Extra/tempmail/README.md +487 -487
- 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 +292 -333
- webscout/Provider/AISEARCH/README.md +106 -279
- webscout/Provider/AISEARCH/__init__.py +16 -9
- webscout/Provider/AISEARCH/brave_search.py +298 -0
- webscout/Provider/AISEARCH/iask_search.py +357 -410
- webscout/Provider/AISEARCH/monica_search.py +200 -220
- webscout/Provider/AISEARCH/webpilotai_search.py +242 -255
- 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 -342
- webscout/Provider/ClaudeOnline.py +365 -0
- webscout/Provider/Cohere.py +232 -208
- webscout/Provider/DeepAI.py +367 -0
- webscout/Provider/Deepinfra.py +467 -340
- webscout/Provider/EssentialAI.py +217 -0
- webscout/Provider/ExaAI.py +274 -261
- webscout/Provider/Gemini.py +175 -169
- webscout/Provider/GithubChat.py +385 -369
- webscout/Provider/Gradient.py +286 -0
- webscout/Provider/Groq.py +556 -801
- webscout/Provider/HadadXYZ.py +323 -0
- webscout/Provider/HeckAI.py +392 -375
- webscout/Provider/HuggingFace.py +387 -0
- webscout/Provider/IBM.py +340 -0
- webscout/Provider/Jadve.py +317 -291
- webscout/Provider/K2Think.py +306 -0
- webscout/Provider/Koboldai.py +221 -384
- webscout/Provider/Netwrck.py +273 -270
- 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 -952
- webscout/Provider/OPENAI/TogetherAI.py +405 -0
- webscout/Provider/OPENAI/TwoAI.py +255 -357
- webscout/Provider/OPENAI/__init__.py +148 -40
- webscout/Provider/OPENAI/ai4chat.py +348 -293
- webscout/Provider/OPENAI/akashgpt.py +436 -0
- webscout/Provider/OPENAI/algion.py +303 -0
- webscout/Provider/OPENAI/{exachat.py → ayle.py} +365 -444
- webscout/Provider/OPENAI/base.py +253 -249
- webscout/Provider/OPENAI/cerebras.py +296 -0
- webscout/Provider/OPENAI/chatgpt.py +870 -556
- webscout/Provider/OPENAI/chatsandbox.py +233 -173
- webscout/Provider/OPENAI/deepinfra.py +403 -322
- webscout/Provider/OPENAI/e2b.py +2370 -1414
- webscout/Provider/OPENAI/elmo.py +278 -0
- webscout/Provider/OPENAI/exaai.py +452 -417
- webscout/Provider/OPENAI/freeassist.py +446 -0
- webscout/Provider/OPENAI/gradient.py +448 -0
- webscout/Provider/OPENAI/groq.py +380 -364
- webscout/Provider/OPENAI/hadadxyz.py +292 -0
- webscout/Provider/OPENAI/heckai.py +333 -308
- 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 -335
- webscout/Provider/OPENAI/meta.py +541 -0
- webscout/Provider/OPENAI/netwrck.py +374 -357
- webscout/Provider/OPENAI/nvidia.py +317 -0
- webscout/Provider/OPENAI/oivscode.py +348 -287
- webscout/Provider/OPENAI/openrouter.py +328 -0
- webscout/Provider/OPENAI/pydantic_imports.py +1 -172
- webscout/Provider/OPENAI/sambanova.py +397 -0
- webscout/Provider/OPENAI/sonus.py +305 -304
- webscout/Provider/OPENAI/textpollinations.py +370 -339
- webscout/Provider/OPENAI/toolbaz.py +375 -413
- webscout/Provider/OPENAI/typefully.py +419 -355
- webscout/Provider/OPENAI/typliai.py +279 -0
- webscout/Provider/OPENAI/utils.py +314 -318
- webscout/Provider/OPENAI/wisecat.py +359 -387
- webscout/Provider/OPENAI/writecream.py +185 -163
- webscout/Provider/OPENAI/x0gpt.py +462 -365
- webscout/Provider/OPENAI/zenmux.py +380 -0
- webscout/Provider/OpenRouter.py +386 -0
- webscout/Provider/Openai.py +337 -496
- webscout/Provider/PI.py +443 -429
- 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 -82
- webscout/Provider/TTI/__init__.py +37 -7
- webscout/Provider/TTI/base.py +147 -64
- webscout/Provider/TTI/claudeonline.py +393 -0
- webscout/Provider/TTI/magicstudio.py +292 -201
- webscout/Provider/TTI/miragic.py +180 -0
- webscout/Provider/TTI/pollinations.py +331 -221
- webscout/Provider/TTI/together.py +334 -0
- webscout/Provider/TTI/utils.py +14 -11
- webscout/Provider/TTS/README.md +186 -192
- webscout/Provider/TTS/__init__.py +43 -10
- webscout/Provider/TTS/base.py +523 -159
- 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 -129
- 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 -580
- webscout/Provider/TTS/streamElements.py +275 -333
- webscout/Provider/TTS/utils.py +280 -280
- webscout/Provider/TextPollinationsAI.py +331 -308
- webscout/Provider/TogetherAI.py +450 -0
- webscout/Provider/TwoAI.py +309 -475
- webscout/Provider/TypliAI.py +311 -305
- webscout/Provider/UNFINISHED/ChatHub.py +219 -209
- webscout/Provider/{OPENAI/glider.py → UNFINISHED/ChutesAI.py} +331 -326
- webscout/Provider/{GizAI.py → UNFINISHED/GizAI.py} +300 -295
- webscout/Provider/{Marcus.py → UNFINISHED/Marcus.py} +218 -198
- webscout/Provider/UNFINISHED/Qodo.py +481 -0
- webscout/Provider/{MCPCore.py → UNFINISHED/XenAI.py} +330 -315
- webscout/Provider/UNFINISHED/Youchat.py +347 -330
- 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 -263
- webscout/Provider/{samurai.py → UNFINISHED/samurai.py} +231 -224
- webscout/Provider/WiseCat.py +256 -233
- webscout/Provider/WrDoChat.py +390 -370
- webscout/Provider/__init__.py +115 -174
- webscout/Provider/ai4chat.py +181 -174
- webscout/Provider/akashgpt.py +330 -335
- webscout/Provider/cerebras.py +397 -290
- webscout/Provider/cleeai.py +236 -213
- webscout/Provider/elmo.py +291 -283
- webscout/Provider/geminiapi.py +343 -208
- webscout/Provider/julius.py +245 -223
- webscout/Provider/learnfastai.py +333 -325
- webscout/Provider/llama3mitril.py +230 -215
- webscout/Provider/llmchat.py +308 -258
- webscout/Provider/llmchatco.py +321 -306
- webscout/Provider/meta.py +996 -801
- webscout/Provider/oivscode.py +332 -309
- webscout/Provider/searchchat.py +316 -292
- webscout/Provider/sonus.py +264 -258
- webscout/Provider/toolbaz.py +359 -353
- webscout/Provider/turboseek.py +332 -266
- webscout/Provider/typefully.py +262 -202
- webscout/Provider/x0gpt.py +332 -299
- webscout/__init__.py +31 -39
- webscout/__main__.py +5 -5
- webscout/cli.py +585 -524
- webscout/client.py +1497 -70
- webscout/conversation.py +140 -436
- webscout/exceptions.py +383 -362
- 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 +74 -420
- webscout/prompt_manager.py +376 -288
- webscout/sanitize.py +1514 -0
- webscout/scout/README.md +452 -404
- webscout/scout/__init__.py +8 -8
- webscout/scout/core/__init__.py +7 -7
- webscout/scout/core/crawler.py +330 -210
- webscout/scout/core/scout.py +800 -607
- 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 -478
- 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 -95
- webscout/swiftcli/core/__init__.py +7 -7
- webscout/swiftcli/core/cli.py +574 -297
- webscout/swiftcli/core/context.py +98 -104
- webscout/swiftcli/core/group.py +268 -241
- webscout/swiftcli/decorators/__init__.py +28 -28
- webscout/swiftcli/decorators/command.py +243 -221
- webscout/swiftcli/decorators/options.py +247 -220
- webscout/swiftcli/decorators/output.py +392 -252
- webscout/swiftcli/exceptions.py +21 -21
- webscout/swiftcli/plugins/__init__.py +9 -9
- webscout/swiftcli/plugins/base.py +134 -135
- webscout/swiftcli/plugins/manager.py +269 -269
- webscout/swiftcli/utils/__init__.py +58 -59
- webscout/swiftcli/utils/formatting.py +251 -252
- webscout/swiftcli/utils/parsing.py +368 -267
- 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 -135
- webscout/zeroart/base.py +70 -66
- webscout/zeroart/effects.py +155 -101
- webscout/zeroart/fonts.py +1799 -1239
- webscout-2026.1.19.dist-info/METADATA +638 -0
- webscout-2026.1.19.dist-info/RECORD +312 -0
- {webscout-8.2.9.dist-info → webscout-2026.1.19.dist-info}/WHEEL +1 -1
- {webscout-8.2.9.dist-info → webscout-2026.1.19.dist-info}/entry_points.txt +1 -1
- webscout/DWEBS.py +0 -520
- webscout/Extra/Act.md +0 -309
- webscout/Extra/GitToolkit/gitapi/README.md +0 -110
- webscout/Extra/autocoder/__init__.py +0 -9
- webscout/Extra/autocoder/autocoder.py +0 -1105
- webscout/Extra/autocoder/autocoder_utiles.py +0 -332
- webscout/Extra/gguf.md +0 -430
- webscout/Extra/weather.md +0 -281
- webscout/Litlogger/README.md +0 -10
- webscout/Litlogger/__init__.py +0 -15
- webscout/Litlogger/formats.py +0 -4
- webscout/Litlogger/handlers.py +0 -103
- webscout/Litlogger/levels.py +0 -13
- webscout/Litlogger/logger.py +0 -92
- webscout/Provider/AI21.py +0 -177
- webscout/Provider/AISEARCH/DeepFind.py +0 -254
- webscout/Provider/AISEARCH/felo_search.py +0 -202
- webscout/Provider/AISEARCH/genspark_search.py +0 -324
- webscout/Provider/AISEARCH/hika_search.py +0 -186
- webscout/Provider/AISEARCH/scira_search.py +0 -298
- webscout/Provider/Aitopia.py +0 -316
- webscout/Provider/AllenAI.py +0 -440
- webscout/Provider/Blackboxai.py +0 -791
- webscout/Provider/ChatGPTClone.py +0 -237
- webscout/Provider/ChatGPTGratis.py +0 -194
- webscout/Provider/Cloudflare.py +0 -324
- webscout/Provider/ExaChat.py +0 -358
- webscout/Provider/Flowith.py +0 -217
- webscout/Provider/FreeGemini.py +0 -250
- webscout/Provider/Glider.py +0 -225
- webscout/Provider/HF_space/__init__.py +0 -0
- webscout/Provider/HF_space/qwen_qwen2.py +0 -206
- webscout/Provider/HuggingFaceChat.py +0 -469
- webscout/Provider/Hunyuan.py +0 -283
- webscout/Provider/LambdaChat.py +0 -411
- webscout/Provider/Llama3.py +0 -259
- webscout/Provider/Nemotron.py +0 -218
- webscout/Provider/OLLAMA.py +0 -396
- webscout/Provider/OPENAI/BLACKBOXAI.py +0 -766
- webscout/Provider/OPENAI/Cloudflare.py +0 -378
- webscout/Provider/OPENAI/FreeGemini.py +0 -283
- webscout/Provider/OPENAI/NEMOTRON.py +0 -232
- webscout/Provider/OPENAI/Qwen3.py +0 -283
- webscout/Provider/OPENAI/api.py +0 -969
- webscout/Provider/OPENAI/c4ai.py +0 -373
- webscout/Provider/OPENAI/chatgptclone.py +0 -494
- webscout/Provider/OPENAI/copilot.py +0 -242
- webscout/Provider/OPENAI/flowith.py +0 -162
- webscout/Provider/OPENAI/freeaichat.py +0 -359
- webscout/Provider/OPENAI/mcpcore.py +0 -389
- webscout/Provider/OPENAI/multichat.py +0 -376
- webscout/Provider/OPENAI/opkfc.py +0 -496
- webscout/Provider/OPENAI/scirachat.py +0 -477
- webscout/Provider/OPENAI/standardinput.py +0 -433
- webscout/Provider/OPENAI/typegpt.py +0 -364
- webscout/Provider/OPENAI/uncovrAI.py +0 -463
- webscout/Provider/OPENAI/venice.py +0 -431
- webscout/Provider/OPENAI/yep.py +0 -382
- webscout/Provider/OpenGPT.py +0 -209
- webscout/Provider/Perplexitylabs.py +0 -415
- webscout/Provider/Reka.py +0 -214
- webscout/Provider/StandardInput.py +0 -290
- webscout/Provider/TTI/aiarta.py +0 -365
- webscout/Provider/TTI/artbit.py +0 -0
- webscout/Provider/TTI/fastflux.py +0 -200
- webscout/Provider/TTI/piclumen.py +0 -203
- webscout/Provider/TTI/pixelmuse.py +0 -225
- webscout/Provider/TTS/gesserit.py +0 -128
- webscout/Provider/TTS/sthir.py +0 -94
- webscout/Provider/TeachAnything.py +0 -229
- webscout/Provider/UNFINISHED/puterjs.py +0 -635
- webscout/Provider/UNFINISHED/test_lmarena.py +0 -119
- webscout/Provider/Venice.py +0 -258
- webscout/Provider/VercelAI.py +0 -253
- webscout/Provider/Writecream.py +0 -246
- webscout/Provider/WritingMate.py +0 -269
- webscout/Provider/asksteve.py +0 -220
- webscout/Provider/chatglm.py +0 -215
- webscout/Provider/copilot.py +0 -425
- webscout/Provider/freeaichat.py +0 -285
- webscout/Provider/granite.py +0 -235
- webscout/Provider/hermes.py +0 -266
- webscout/Provider/koala.py +0 -170
- webscout/Provider/lmarena.py +0 -198
- webscout/Provider/multichat.py +0 -364
- webscout/Provider/scira_chat.py +0 -299
- webscout/Provider/scnet.py +0 -243
- webscout/Provider/talkai.py +0 -194
- webscout/Provider/typegpt.py +0 -289
- webscout/Provider/uncovr.py +0 -368
- webscout/Provider/yep.py +0 -389
- webscout/litagent/Readme.md +0 -276
- webscout/litprinter/__init__.py +0 -59
- webscout/swiftcli/Readme.md +0 -323
- webscout/tempid.py +0 -128
- webscout/webscout_search.py +0 -1184
- webscout/webscout_search_async.py +0 -654
- webscout/yep_search.py +0 -347
- webscout/zeroart/README.md +0 -89
- webscout-8.2.9.dist-info/METADATA +0 -1033
- webscout-8.2.9.dist-info/RECORD +0 -289
- {webscout-8.2.9.dist-info → webscout-2026.1.19.dist-info}/licenses/LICENSE.md +0 -0
- {webscout-8.2.9.dist-info → webscout-2026.1.19.dist-info}/top_level.txt +0 -0
webscout/Provider/__init__.py
CHANGED
|
@@ -1,174 +1,115 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
from .
|
|
4
|
-
from .
|
|
5
|
-
from .
|
|
6
|
-
from .
|
|
7
|
-
from .
|
|
8
|
-
from .
|
|
9
|
-
from .
|
|
10
|
-
from .
|
|
11
|
-
from .
|
|
12
|
-
from .
|
|
13
|
-
from .
|
|
14
|
-
from .
|
|
15
|
-
from .
|
|
16
|
-
from .
|
|
17
|
-
from .
|
|
18
|
-
from .
|
|
19
|
-
from .
|
|
20
|
-
from .
|
|
21
|
-
from .
|
|
22
|
-
from .
|
|
23
|
-
from .
|
|
24
|
-
from .
|
|
25
|
-
from .
|
|
26
|
-
from .
|
|
27
|
-
from .
|
|
28
|
-
from .
|
|
29
|
-
from .
|
|
30
|
-
from .
|
|
31
|
-
from .
|
|
32
|
-
from .
|
|
33
|
-
from .
|
|
34
|
-
from .
|
|
35
|
-
from .
|
|
36
|
-
from .
|
|
37
|
-
from .
|
|
38
|
-
from .
|
|
39
|
-
from .
|
|
40
|
-
from .
|
|
41
|
-
from .
|
|
42
|
-
from .
|
|
43
|
-
from .
|
|
44
|
-
from .
|
|
45
|
-
from .
|
|
46
|
-
from .
|
|
47
|
-
from .
|
|
48
|
-
from .
|
|
49
|
-
from .
|
|
50
|
-
from .
|
|
51
|
-
from .
|
|
52
|
-
from .
|
|
53
|
-
from .
|
|
54
|
-
from .
|
|
55
|
-
from .
|
|
56
|
-
|
|
57
|
-
from .
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
'TextPollinationsAI',
|
|
117
|
-
'GliderAI',
|
|
118
|
-
'Cohere',
|
|
119
|
-
'REKA',
|
|
120
|
-
'GROQ',
|
|
121
|
-
'AsyncGROQ',
|
|
122
|
-
'OPENAI',
|
|
123
|
-
'AsyncOPENAI',
|
|
124
|
-
'KOBOLDAI',
|
|
125
|
-
'AsyncKOBOLDAI',
|
|
126
|
-
'BLACKBOXAI',
|
|
127
|
-
'GEMINI',
|
|
128
|
-
'DeepInfra',
|
|
129
|
-
'AI4Chat',
|
|
130
|
-
'OLLAMA',
|
|
131
|
-
'AndiSearch',
|
|
132
|
-
'Sambanova',
|
|
133
|
-
'KOALA',
|
|
134
|
-
'Meta',
|
|
135
|
-
'PiAI',
|
|
136
|
-
'Julius',
|
|
137
|
-
'YEPCHAT',
|
|
138
|
-
'Cloudflare',
|
|
139
|
-
'TurboSeek',
|
|
140
|
-
'TeachAnything',
|
|
141
|
-
'AI21',
|
|
142
|
-
'X0GPT',
|
|
143
|
-
'Cerebras',
|
|
144
|
-
'GEMINIAPI',
|
|
145
|
-
'SonusAI',
|
|
146
|
-
'Cleeai',
|
|
147
|
-
'Elmo',
|
|
148
|
-
'ChatGPTClone',
|
|
149
|
-
'TypefullyAI',
|
|
150
|
-
'Netwrck',
|
|
151
|
-
'LLMChat',
|
|
152
|
-
'LLMChatCo',
|
|
153
|
-
'Talkai',
|
|
154
|
-
'Llama3Mitril',
|
|
155
|
-
'Marcus',
|
|
156
|
-
'TypeGPT',
|
|
157
|
-
'Netwrck',
|
|
158
|
-
'MultiChatAI',
|
|
159
|
-
'JadveOpenAI',
|
|
160
|
-
'ChatGLM',
|
|
161
|
-
'NousHermes',
|
|
162
|
-
'FreeAIChat',
|
|
163
|
-
'GithubChat',
|
|
164
|
-
'UncovrAI',
|
|
165
|
-
'VercelAI',
|
|
166
|
-
'ExaChat',
|
|
167
|
-
'AskSteve',
|
|
168
|
-
'Aitopia',
|
|
169
|
-
'SearchChatAI',
|
|
170
|
-
'Writecream',
|
|
171
|
-
'Toolbaz',
|
|
172
|
-
'MCPCore',
|
|
173
|
-
'TypliAI',
|
|
174
|
-
]
|
|
1
|
+
# This file marks the directory as a Python package.
|
|
2
|
+
# Static imports for all Provider modules
|
|
3
|
+
from webscout.Provider.ai4chat import AI4Chat
|
|
4
|
+
from webscout.Provider.akashgpt import AkashGPT
|
|
5
|
+
from webscout.Provider.Algion import Algion
|
|
6
|
+
from webscout.Provider.Andi import AndiSearch
|
|
7
|
+
from webscout.Provider.Apriel import Apriel
|
|
8
|
+
from webscout.Provider.Ayle import Ayle
|
|
9
|
+
from webscout.Provider.cerebras import Cerebras
|
|
10
|
+
from webscout.Provider.ChatSandbox import ChatSandbox
|
|
11
|
+
from webscout.Provider.ClaudeOnline import ClaudeOnline
|
|
12
|
+
from webscout.Provider.cleeai import Cleeai
|
|
13
|
+
from webscout.Provider.Cohere import Cohere
|
|
14
|
+
from webscout.Provider.DeepAI import DeepAI
|
|
15
|
+
from webscout.Provider.Deepinfra import DeepInfra
|
|
16
|
+
from webscout.Provider.elmo import Elmo
|
|
17
|
+
from webscout.Provider.EssentialAI import EssentialAI
|
|
18
|
+
from webscout.Provider.ExaAI import ExaAI
|
|
19
|
+
from webscout.Provider.Gemini import GEMINI
|
|
20
|
+
from webscout.Provider.geminiapi import GEMINIAPI
|
|
21
|
+
from webscout.Provider.GithubChat import GithubChat
|
|
22
|
+
from webscout.Provider.Gradient import Gradient
|
|
23
|
+
from webscout.Provider.Groq import GROQ
|
|
24
|
+
from webscout.Provider.HadadXYZ import HadadXYZ
|
|
25
|
+
from webscout.Provider.HeckAI import HeckAI
|
|
26
|
+
from webscout.Provider.HuggingFace import HuggingFace
|
|
27
|
+
from webscout.Provider.IBM import IBM
|
|
28
|
+
from webscout.Provider.Jadve import JadveOpenAI
|
|
29
|
+
from webscout.Provider.julius import Julius
|
|
30
|
+
from webscout.Provider.K2Think import K2Think
|
|
31
|
+
from webscout.Provider.Koboldai import KOBOLDAI
|
|
32
|
+
from webscout.Provider.learnfastai import LearnFast
|
|
33
|
+
from webscout.Provider.llama3mitril import Llama3Mitril
|
|
34
|
+
from webscout.Provider.llmchat import LLMChat
|
|
35
|
+
from webscout.Provider.llmchatco import LLMChatCo
|
|
36
|
+
from webscout.Provider.meta import Meta
|
|
37
|
+
from webscout.Provider.Netwrck import Netwrck
|
|
38
|
+
from webscout.Provider.Nvidia import Nvidia
|
|
39
|
+
from webscout.Provider.oivscode import oivscode
|
|
40
|
+
from webscout.Provider.OpenRouter import OpenRouter
|
|
41
|
+
from webscout.Provider.PI import PiAI
|
|
42
|
+
from webscout.Provider.QwenLM import QwenLM
|
|
43
|
+
from webscout.Provider.Sambanova import Sambanova
|
|
44
|
+
from webscout.Provider.searchchat import SearchChatAI
|
|
45
|
+
from webscout.Provider.sonus import SonusAI
|
|
46
|
+
from webscout.Provider.TextPollinationsAI import TextPollinationsAI
|
|
47
|
+
from webscout.Provider.TogetherAI import TogetherAI
|
|
48
|
+
from webscout.Provider.toolbaz import Toolbaz
|
|
49
|
+
from webscout.Provider.turboseek import TurboSeek
|
|
50
|
+
from webscout.Provider.TwoAI import TwoAI
|
|
51
|
+
from webscout.Provider.typefully import TypefullyAI
|
|
52
|
+
from webscout.Provider.TypliAI import TypliAI
|
|
53
|
+
from webscout.Provider.WiseCat import WiseCat
|
|
54
|
+
from webscout.Provider.WrDoChat import WrDoChat
|
|
55
|
+
from webscout.Provider.x0gpt import X0GPT
|
|
56
|
+
|
|
57
|
+
from .Openai import OpenAI
|
|
58
|
+
|
|
59
|
+
# List of all exported names
|
|
60
|
+
__all__ = [
|
|
61
|
+
"OpenAI",
|
|
62
|
+
"TypliAI",
|
|
63
|
+
"AI4Chat",
|
|
64
|
+
"AkashGPT",
|
|
65
|
+
"Algion",
|
|
66
|
+
"AndiSearch",
|
|
67
|
+
"Apriel",
|
|
68
|
+
"Cerebras",
|
|
69
|
+
"ChatSandbox",
|
|
70
|
+
"ClaudeOnline",
|
|
71
|
+
"Cleeai",
|
|
72
|
+
"Cohere",
|
|
73
|
+
"DeepAI",
|
|
74
|
+
"DeepInfra",
|
|
75
|
+
"Elmo",
|
|
76
|
+
"EssentialAI",
|
|
77
|
+
"ExaAI",
|
|
78
|
+
"Ayle",
|
|
79
|
+
"GEMINI",
|
|
80
|
+
"GEMINIAPI",
|
|
81
|
+
"GithubChat",
|
|
82
|
+
"HadadXYZ",
|
|
83
|
+
"Gradient",
|
|
84
|
+
"GROQ",
|
|
85
|
+
"HeckAI",
|
|
86
|
+
"HuggingFace",
|
|
87
|
+
"IBM",
|
|
88
|
+
"JadveOpenAI",
|
|
89
|
+
"Julius",
|
|
90
|
+
"K2Think",
|
|
91
|
+
"KOBOLDAI",
|
|
92
|
+
"LearnFast",
|
|
93
|
+
"Llama3Mitril",
|
|
94
|
+
"LLMChat",
|
|
95
|
+
"LLMChatCo",
|
|
96
|
+
"Meta",
|
|
97
|
+
"Netwrck",
|
|
98
|
+
"Nvidia",
|
|
99
|
+
"OpenRouter",
|
|
100
|
+
"oivscode",
|
|
101
|
+
"PiAI",
|
|
102
|
+
"QwenLM",
|
|
103
|
+
"Sambanova",
|
|
104
|
+
"SearchChatAI",
|
|
105
|
+
"SonusAI",
|
|
106
|
+
"TextPollinationsAI",
|
|
107
|
+
"TogetherAI",
|
|
108
|
+
"Toolbaz",
|
|
109
|
+
"TurboSeek",
|
|
110
|
+
"TwoAI",
|
|
111
|
+
"TypefullyAI",
|
|
112
|
+
"WiseCat",
|
|
113
|
+
"WrDoChat",
|
|
114
|
+
"X0GPT",
|
|
115
|
+
]
|
webscout/Provider/ai4chat.py
CHANGED
|
@@ -1,174 +1,181 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
from webscout.
|
|
7
|
-
from webscout.AIutel import AwesomePrompts
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class AI4Chat(Provider):
|
|
11
|
-
"""
|
|
12
|
-
A class to interact with the AI4Chat Riddle API.
|
|
13
|
-
"""
|
|
14
|
-
|
|
15
|
-
def __init__(
|
|
16
|
-
self,
|
|
17
|
-
is_conversation: bool = True,
|
|
18
|
-
max_tokens: int = 600,
|
|
19
|
-
timeout: int = 30,
|
|
20
|
-
intro: str = None,
|
|
21
|
-
filepath: str = None,
|
|
22
|
-
update_file: bool = True,
|
|
23
|
-
proxies: dict = {},
|
|
24
|
-
history_offset: int = 10250,
|
|
25
|
-
act: str = None,
|
|
26
|
-
system_prompt: str = "You are a helpful and informative AI assistant.",
|
|
27
|
-
country: str = "Asia",
|
|
28
|
-
user_id: str = "usersmjb2oaz7y"
|
|
29
|
-
) -> None:
|
|
30
|
-
|
|
31
|
-
self.
|
|
32
|
-
self.
|
|
33
|
-
self.
|
|
34
|
-
self.
|
|
35
|
-
self.
|
|
36
|
-
self.
|
|
37
|
-
self.
|
|
38
|
-
self.
|
|
39
|
-
|
|
40
|
-
"Accept
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"Sec-CH-UA
|
|
46
|
-
"Sec-CH-UA-
|
|
47
|
-
"Sec-
|
|
48
|
-
"Sec-Fetch-
|
|
49
|
-
"Sec-Fetch-
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
)
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
raise Exception(f"Failed to generate response: {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
if response_text.
|
|
110
|
-
response_text = response_text[
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
"""
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
self.
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
if
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
1
|
+
import urllib.parse
|
|
2
|
+
from typing import Any, Generator, Optional, Union
|
|
3
|
+
|
|
4
|
+
from curl_cffi.requests import RequestsError, Session
|
|
5
|
+
|
|
6
|
+
from webscout.AIbase import Provider, Response
|
|
7
|
+
from webscout.AIutel import AwesomePrompts, Conversation, Optimizers
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class AI4Chat(Provider):
|
|
11
|
+
"""
|
|
12
|
+
A class to interact with the AI4Chat Riddle API.
|
|
13
|
+
"""
|
|
14
|
+
required_auth = False
|
|
15
|
+
def __init__(
|
|
16
|
+
self,
|
|
17
|
+
is_conversation: bool = True,
|
|
18
|
+
max_tokens: int = 600,
|
|
19
|
+
timeout: int = 30,
|
|
20
|
+
intro: Optional[str] = None,
|
|
21
|
+
filepath: Optional[str] = None,
|
|
22
|
+
update_file: bool = True,
|
|
23
|
+
proxies: dict = {},
|
|
24
|
+
history_offset: int = 10250,
|
|
25
|
+
act: Optional[str] = None,
|
|
26
|
+
system_prompt: str = "You are a helpful and informative AI assistant.",
|
|
27
|
+
country: str = "Asia",
|
|
28
|
+
user_id: str = "usersmjb2oaz7y"
|
|
29
|
+
) -> None:
|
|
30
|
+
from typing import cast
|
|
31
|
+
self.session = Session(timeout=timeout, proxies=cast(Any, proxies))
|
|
32
|
+
self.is_conversation = is_conversation
|
|
33
|
+
self.max_tokens_to_sample = max_tokens
|
|
34
|
+
self.api_endpoint = "https://yw85opafq6.execute-api.us-east-1.amazonaws.com/default/boss_mode_15aug"
|
|
35
|
+
self.timeout = timeout
|
|
36
|
+
self.last_response = {}
|
|
37
|
+
self.country = country
|
|
38
|
+
self.user_id = user_id
|
|
39
|
+
self.headers = {
|
|
40
|
+
"Accept": "*/*",
|
|
41
|
+
"Accept-Language": "id-ID,id;q=0.9",
|
|
42
|
+
"Origin": "https://www.ai4chat.co",
|
|
43
|
+
"Priority": "u=1, i",
|
|
44
|
+
"Referer": "https://www.ai4chat.co/",
|
|
45
|
+
"Sec-CH-UA": '"Chromium";v="131", "Not_A Brand";v="24", "Microsoft Edge Simulate";v="131", "Lemur";v="131"',
|
|
46
|
+
"Sec-CH-UA-Mobile": "?1",
|
|
47
|
+
"Sec-CH-UA-Platform": '"Android"',
|
|
48
|
+
"Sec-Fetch-Dest": "empty",
|
|
49
|
+
"Sec-Fetch-Mode": "cors",
|
|
50
|
+
"Sec-Fetch-Site": "cross-site",
|
|
51
|
+
"User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36"
|
|
52
|
+
}
|
|
53
|
+
self.__available_optimizers = tuple(
|
|
54
|
+
method for method in dir(Optimizers)
|
|
55
|
+
if callable(getattr(Optimizers, method)) and not method.startswith("__")
|
|
56
|
+
)
|
|
57
|
+
self.session.headers.update(self.headers)
|
|
58
|
+
self.conversation = Conversation(
|
|
59
|
+
is_conversation, self.max_tokens_to_sample, filepath, update_file
|
|
60
|
+
)
|
|
61
|
+
self.conversation.history_offset = history_offset
|
|
62
|
+
|
|
63
|
+
if act:
|
|
64
|
+
self.conversation.intro = AwesomePrompts().get_act(cast(Union[str, int], act), default=self.conversation.intro, case_insensitive=True
|
|
65
|
+
) or self.conversation.intro
|
|
66
|
+
elif intro:
|
|
67
|
+
self.conversation.intro = intro
|
|
68
|
+
|
|
69
|
+
self.system_prompt = system_prompt
|
|
70
|
+
|
|
71
|
+
def ask(
|
|
72
|
+
self,
|
|
73
|
+
prompt: str,
|
|
74
|
+
stream: bool = False,
|
|
75
|
+
raw: bool = False,
|
|
76
|
+
optimizer: Optional[str] = None,
|
|
77
|
+
conversationally: bool = False,
|
|
78
|
+
country: Optional[str] = None,
|
|
79
|
+
user_id: Optional[str] = None,
|
|
80
|
+
**kwargs: Any,
|
|
81
|
+
) -> Response:
|
|
82
|
+
"""
|
|
83
|
+
Sends a prompt to the AI4Chat API and returns the response.
|
|
84
|
+
If stream=True, yields small chunks of the response (simulated streaming).
|
|
85
|
+
"""
|
|
86
|
+
conversation_prompt = self.conversation.gen_complete_prompt(prompt)
|
|
87
|
+
if optimizer:
|
|
88
|
+
if optimizer in self.__available_optimizers:
|
|
89
|
+
conversation_prompt = getattr(Optimizers, optimizer)(
|
|
90
|
+
conversation_prompt if conversationally else prompt
|
|
91
|
+
)
|
|
92
|
+
else:
|
|
93
|
+
raise Exception(
|
|
94
|
+
f"Optimizer is not one of {self.__available_optimizers}"
|
|
95
|
+
)
|
|
96
|
+
country_param = country or self.country
|
|
97
|
+
user_id_param = user_id or self.user_id
|
|
98
|
+
encoded_text = urllib.parse.quote(conversation_prompt)
|
|
99
|
+
encoded_country = urllib.parse.quote(country_param)
|
|
100
|
+
encoded_user_id = urllib.parse.quote(user_id_param)
|
|
101
|
+
url = f"{self.api_endpoint}?text={encoded_text}&country={encoded_country}&user_id={encoded_user_id}"
|
|
102
|
+
try:
|
|
103
|
+
response = self.session.get(url, headers=self.headers, timeout=self.timeout)
|
|
104
|
+
except RequestsError as e:
|
|
105
|
+
raise Exception(f"Failed to generate response: {e}")
|
|
106
|
+
if not response.ok:
|
|
107
|
+
raise Exception(f"Failed to generate response: {response.status_code} - {response.reason}")
|
|
108
|
+
response_text = response.text
|
|
109
|
+
if response_text.startswith('"'):
|
|
110
|
+
response_text = response_text[1:]
|
|
111
|
+
if response_text.endswith('"'):
|
|
112
|
+
response_text = response_text[:-1]
|
|
113
|
+
response_text = response_text.replace('\\n', '\n').replace('\\n\\n', '\n\n')
|
|
114
|
+
self.last_response.update(dict(text=response_text))
|
|
115
|
+
self.conversation.update_chat_history(prompt, response_text)
|
|
116
|
+
if stream:
|
|
117
|
+
# Simulate streaming by yielding fixed-size character chunks (e.g., 48 chars)
|
|
118
|
+
buffer = response_text
|
|
119
|
+
chunk_size = 48
|
|
120
|
+
while buffer:
|
|
121
|
+
chunk = buffer[:chunk_size]
|
|
122
|
+
buffer = buffer[chunk_size:]
|
|
123
|
+
if chunk.strip():
|
|
124
|
+
yield {"text": chunk}
|
|
125
|
+
else:
|
|
126
|
+
return self.last_response
|
|
127
|
+
|
|
128
|
+
def chat(
|
|
129
|
+
self,
|
|
130
|
+
prompt: str,
|
|
131
|
+
stream: bool = False,
|
|
132
|
+
optimizer: Optional[str] = None,
|
|
133
|
+
conversationally: bool = False,
|
|
134
|
+
country: Optional[str] = None,
|
|
135
|
+
user_id: Optional[str] = None,
|
|
136
|
+
**kwargs: Any,
|
|
137
|
+
) -> Union[str, Generator[str, None, None]]:
|
|
138
|
+
"""
|
|
139
|
+
Generates a response from the AI4Chat API.
|
|
140
|
+
If stream=True, yields each chunk as a string.
|
|
141
|
+
"""
|
|
142
|
+
if stream:
|
|
143
|
+
for chunk in self.ask(
|
|
144
|
+
prompt,
|
|
145
|
+
stream=True,
|
|
146
|
+
optimizer=optimizer,
|
|
147
|
+
conversationally=conversationally,
|
|
148
|
+
country=country,
|
|
149
|
+
user_id=user_id,
|
|
150
|
+
):
|
|
151
|
+
yield self.get_message(chunk)
|
|
152
|
+
else:
|
|
153
|
+
return self.get_message(
|
|
154
|
+
self.ask(
|
|
155
|
+
prompt,
|
|
156
|
+
optimizer=optimizer,
|
|
157
|
+
conversationally=conversationally,
|
|
158
|
+
country=country,
|
|
159
|
+
user_id=user_id,
|
|
160
|
+
)
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
def get_message(self, response: Response) -> str:
|
|
164
|
+
"""
|
|
165
|
+
Retrieves message only from response
|
|
166
|
+
"""
|
|
167
|
+
if isinstance(response, str):
|
|
168
|
+
return response.replace('\\n', '\n').replace('\\n\\n', '\n\n')
|
|
169
|
+
if not isinstance(response, dict):
|
|
170
|
+
return str(response)
|
|
171
|
+
return response["text"].replace('\\n', '\n').replace('\\n\\n', '\n\n')
|
|
172
|
+
|
|
173
|
+
if __name__ == "__main__":
|
|
174
|
+
from rich import print
|
|
175
|
+
ai = AI4Chat()
|
|
176
|
+
response = ai.chat("Tell me about humans in points", stream=True)
|
|
177
|
+
if hasattr(response, "__iter__") and not isinstance(response, (str, bytes)):
|
|
178
|
+
for c in response:
|
|
179
|
+
print(c, end="")
|
|
180
|
+
else:
|
|
181
|
+
print(response)
|