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,87 +0,0 @@
|
|
|
1
|
-
import textwrap
|
|
2
|
-
from typing import Optional
|
|
3
|
-
|
|
4
|
-
class TextStyle:
|
|
5
|
-
@staticmethod
|
|
6
|
-
def wrap(text: str, width: int = 80, indent: str = "") -> str:
|
|
7
|
-
"""Wrap text to specified width with optional indentation."""
|
|
8
|
-
return textwrap.fill(text, width=width, initial_indent=indent,
|
|
9
|
-
subsequent_indent=indent)
|
|
10
|
-
|
|
11
|
-
@staticmethod
|
|
12
|
-
def truncate(text: str, max_length: int, suffix: str = "...") -> str:
|
|
13
|
-
"""Truncate text to maximum length with suffix."""
|
|
14
|
-
if len(text) <= max_length:
|
|
15
|
-
return text
|
|
16
|
-
return text[:max_length - len(suffix)] + suffix
|
|
17
|
-
|
|
18
|
-
@staticmethod
|
|
19
|
-
def pad(text: str, width: int, align: str = "left",
|
|
20
|
-
fill_char: str = " ") -> str:
|
|
21
|
-
"""Pad text to specified width with alignment."""
|
|
22
|
-
if align == "left":
|
|
23
|
-
return text.ljust(width, fill_char)
|
|
24
|
-
elif align == "right":
|
|
25
|
-
return text.rjust(width, fill_char)
|
|
26
|
-
elif align == "center":
|
|
27
|
-
return text.center(width, fill_char)
|
|
28
|
-
raise ValueError(f"Invalid alignment: {align}")
|
|
29
|
-
|
|
30
|
-
@staticmethod
|
|
31
|
-
def indent(text: str, prefix: str = " ", predicate: Optional[callable] = None) -> str:
|
|
32
|
-
"""Indent text lines with prefix based on optional predicate."""
|
|
33
|
-
lines = text.splitlines(True)
|
|
34
|
-
if predicate is None:
|
|
35
|
-
predicate = bool
|
|
36
|
-
|
|
37
|
-
def should_indent(line):
|
|
38
|
-
return predicate(line)
|
|
39
|
-
|
|
40
|
-
return "".join(prefix + line if should_indent(line) else line
|
|
41
|
-
for line in lines)
|
|
42
|
-
|
|
43
|
-
@staticmethod
|
|
44
|
-
def highlight(text: str, substring: str, color: str) -> str:
|
|
45
|
-
"""Highlight substring within text using ANSI color codes."""
|
|
46
|
-
from ..styles.colors import LogColors
|
|
47
|
-
if not substring:
|
|
48
|
-
return text
|
|
49
|
-
|
|
50
|
-
parts = text.split(substring)
|
|
51
|
-
highlighted = f"{color}{substring}{LogColors.RESET}"
|
|
52
|
-
return highlighted.join(parts)
|
|
53
|
-
|
|
54
|
-
@staticmethod
|
|
55
|
-
def table(headers: list, rows: list, padding: int = 1) -> str:
|
|
56
|
-
"""Create a formatted table with headers and rows."""
|
|
57
|
-
if not rows:
|
|
58
|
-
return ""
|
|
59
|
-
|
|
60
|
-
# Calculate column widths
|
|
61
|
-
widths = [max(len(str(row[i])) for row in [headers] + rows)
|
|
62
|
-
for i in range(len(headers))]
|
|
63
|
-
|
|
64
|
-
# Create separator line
|
|
65
|
-
separator = "+" + "+".join("-" * (w + 2 * padding) for w in widths) + "+"
|
|
66
|
-
|
|
67
|
-
# Format header
|
|
68
|
-
header = "|" + "|".join(
|
|
69
|
-
str(h).center(w + 2 * padding) for h, w in zip(headers, widths)
|
|
70
|
-
) + "|"
|
|
71
|
-
|
|
72
|
-
# Format rows
|
|
73
|
-
formatted_rows = []
|
|
74
|
-
for row in rows:
|
|
75
|
-
formatted_row = "|" + "|".join(
|
|
76
|
-
str(cell).ljust(w + 2 * padding) for cell, w in zip(row, widths)
|
|
77
|
-
) + "|"
|
|
78
|
-
formatted_rows.append(formatted_row)
|
|
79
|
-
|
|
80
|
-
# Combine all parts
|
|
81
|
-
return "\n".join([
|
|
82
|
-
separator,
|
|
83
|
-
header,
|
|
84
|
-
separator,
|
|
85
|
-
*formatted_rows,
|
|
86
|
-
separator
|
|
87
|
-
])
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import re
|
|
2
|
-
import sys
|
|
3
|
-
from typing import Optional
|
|
4
|
-
from ..core.level import LogLevel
|
|
5
|
-
|
|
6
|
-
class LevelDetector:
|
|
7
|
-
"""Utility class for intelligent log level detection."""
|
|
8
|
-
|
|
9
|
-
# Common patterns indicating error conditions
|
|
10
|
-
ERROR_PATTERNS = [
|
|
11
|
-
r"error",
|
|
12
|
-
r"exception",
|
|
13
|
-
r"failed",
|
|
14
|
-
r"failure",
|
|
15
|
-
r"traceback",
|
|
16
|
-
r"crash",
|
|
17
|
-
r"fatal",
|
|
18
|
-
]
|
|
19
|
-
|
|
20
|
-
# Common patterns indicating warning conditions
|
|
21
|
-
WARNING_PATTERNS = [
|
|
22
|
-
r"warning",
|
|
23
|
-
r"warn",
|
|
24
|
-
r"deprecated",
|
|
25
|
-
r"might",
|
|
26
|
-
r"consider",
|
|
27
|
-
r"attention",
|
|
28
|
-
]
|
|
29
|
-
|
|
30
|
-
# Common patterns indicating debug information
|
|
31
|
-
DEBUG_PATTERNS = [
|
|
32
|
-
r"debug",
|
|
33
|
-
r"trace",
|
|
34
|
-
r"verbose",
|
|
35
|
-
r"detail",
|
|
36
|
-
]
|
|
37
|
-
|
|
38
|
-
@classmethod
|
|
39
|
-
def detect_level(cls, message: str, exception: Optional[Exception] = None) -> LogLevel:
|
|
40
|
-
"""
|
|
41
|
-
Detect appropriate log level from message content and context.
|
|
42
|
-
|
|
43
|
-
Args:
|
|
44
|
-
message: Log message to analyze
|
|
45
|
-
exception: Optional exception object
|
|
46
|
-
|
|
47
|
-
Returns:
|
|
48
|
-
Detected LogLevel
|
|
49
|
-
"""
|
|
50
|
-
# If there's an exception, it's at least ERROR
|
|
51
|
-
if exception is not None:
|
|
52
|
-
if isinstance(exception, (SystemExit, KeyboardInterrupt)):
|
|
53
|
-
return LogLevel.CRITICAL
|
|
54
|
-
return LogLevel.ERROR
|
|
55
|
-
|
|
56
|
-
# Convert to lowercase for pattern matching
|
|
57
|
-
message_lower = message.lower()
|
|
58
|
-
|
|
59
|
-
# Check for error patterns
|
|
60
|
-
for pattern in cls.ERROR_PATTERNS:
|
|
61
|
-
if re.search(pattern, message_lower):
|
|
62
|
-
return LogLevel.ERROR
|
|
63
|
-
|
|
64
|
-
# Check for warning patterns
|
|
65
|
-
for pattern in cls.WARNING_PATTERNS:
|
|
66
|
-
if re.search(pattern, message_lower):
|
|
67
|
-
return LogLevel.WARNING
|
|
68
|
-
|
|
69
|
-
# Check for debug patterns
|
|
70
|
-
for pattern in cls.DEBUG_PATTERNS:
|
|
71
|
-
if re.search(pattern, message_lower):
|
|
72
|
-
return LogLevel.DEBUG
|
|
73
|
-
|
|
74
|
-
# Default to INFO
|
|
75
|
-
return LogLevel.INFO
|
|
76
|
-
|
|
77
|
-
@classmethod
|
|
78
|
-
def detect_level_from_exception(cls, exc_type, exc_value, exc_tb) -> LogLevel:
|
|
79
|
-
"""
|
|
80
|
-
Detect log level from exception information.
|
|
81
|
-
|
|
82
|
-
Args:
|
|
83
|
-
exc_type: Exception type
|
|
84
|
-
exc_value: Exception value
|
|
85
|
-
exc_tb: Exception traceback
|
|
86
|
-
|
|
87
|
-
Returns:
|
|
88
|
-
Detected LogLevel
|
|
89
|
-
"""
|
|
90
|
-
# Critical errors that should terminate execution
|
|
91
|
-
if exc_type in (SystemExit, KeyboardInterrupt, MemoryError):
|
|
92
|
-
return LogLevel.CRITICAL
|
|
93
|
-
|
|
94
|
-
# Built-in exceptions that indicate programming errors
|
|
95
|
-
if exc_type in (
|
|
96
|
-
SyntaxError,
|
|
97
|
-
IndentationError,
|
|
98
|
-
NameError,
|
|
99
|
-
TypeError,
|
|
100
|
-
AttributeError
|
|
101
|
-
):
|
|
102
|
-
return LogLevel.ERROR
|
|
103
|
-
|
|
104
|
-
# Runtime errors that might be recoverable
|
|
105
|
-
if exc_type in (
|
|
106
|
-
ValueError,
|
|
107
|
-
KeyError,
|
|
108
|
-
IOError,
|
|
109
|
-
OSError,
|
|
110
|
-
ConnectionError
|
|
111
|
-
):
|
|
112
|
-
return LogLevel.WARNING
|
|
113
|
-
|
|
114
|
-
# Default to ERROR for unknown exception types
|
|
115
|
-
return LogLevel.ERROR
|
|
116
|
-
|
|
117
|
-
@classmethod
|
|
118
|
-
def detect_level_from_frame(cls, frame_depth: int = 1) -> LogLevel:
|
|
119
|
-
"""
|
|
120
|
-
Detect log level by analyzing the call stack.
|
|
121
|
-
|
|
122
|
-
Args:
|
|
123
|
-
frame_depth: How many frames up to look (1 = caller's frame)
|
|
124
|
-
|
|
125
|
-
Returns:
|
|
126
|
-
Detected LogLevel
|
|
127
|
-
"""
|
|
128
|
-
try:
|
|
129
|
-
frame = sys._getframe(frame_depth)
|
|
130
|
-
|
|
131
|
-
# Check function/method name
|
|
132
|
-
code = frame.f_code
|
|
133
|
-
func_name = code.co_name.lower()
|
|
134
|
-
|
|
135
|
-
if any(p in func_name for p in ["error", "fail", "crash"]):
|
|
136
|
-
return LogLevel.ERROR
|
|
137
|
-
if any(p in func_name for p in ["warn"]):
|
|
138
|
-
return LogLevel.WARNING
|
|
139
|
-
if any(p in func_name for p in ["debug", "trace"]):
|
|
140
|
-
return LogLevel.DEBUG
|
|
141
|
-
|
|
142
|
-
# Check local variables for exceptions
|
|
143
|
-
locals_dict = frame.f_locals
|
|
144
|
-
for value in locals_dict.values():
|
|
145
|
-
if isinstance(value, Exception):
|
|
146
|
-
return cls.detect_level_from_exception(
|
|
147
|
-
type(value), value, value.__traceback__
|
|
148
|
-
)
|
|
149
|
-
|
|
150
|
-
return LogLevel.INFO
|
|
151
|
-
|
|
152
|
-
except Exception:
|
|
153
|
-
return LogLevel.INFO # Default if detection fails
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
import re
|
|
3
|
-
import traceback
|
|
4
|
-
from datetime import datetime
|
|
5
|
-
from typing import Any, Dict, Optional, Union
|
|
6
|
-
|
|
7
|
-
class MessageFormatter:
|
|
8
|
-
"""Utility class for formatting log messages."""
|
|
9
|
-
|
|
10
|
-
@staticmethod
|
|
11
|
-
def format_exception(exc_info: tuple) -> str:
|
|
12
|
-
"""
|
|
13
|
-
Format exception information into a readable string.
|
|
14
|
-
|
|
15
|
-
Args:
|
|
16
|
-
exc_info: Tuple of (type, value, traceback)
|
|
17
|
-
|
|
18
|
-
Returns:
|
|
19
|
-
Formatted exception string
|
|
20
|
-
"""
|
|
21
|
-
return "".join(traceback.format_exception(*exc_info))
|
|
22
|
-
|
|
23
|
-
@staticmethod
|
|
24
|
-
def format_dict(data: Dict[str, Any], indent: int = 2) -> str:
|
|
25
|
-
"""
|
|
26
|
-
Format dictionary into pretty-printed string.
|
|
27
|
-
|
|
28
|
-
Args:
|
|
29
|
-
data: Dictionary to format
|
|
30
|
-
indent: Number of spaces for indentation
|
|
31
|
-
|
|
32
|
-
Returns:
|
|
33
|
-
Formatted string representation
|
|
34
|
-
"""
|
|
35
|
-
return json.dumps(data, indent=indent, default=str, ensure_ascii=False)
|
|
36
|
-
|
|
37
|
-
@staticmethod
|
|
38
|
-
def format_object(obj: Any) -> str:
|
|
39
|
-
"""
|
|
40
|
-
Format any object into a string representation.
|
|
41
|
-
|
|
42
|
-
Args:
|
|
43
|
-
obj: Object to format
|
|
44
|
-
|
|
45
|
-
Returns:
|
|
46
|
-
String representation of object
|
|
47
|
-
"""
|
|
48
|
-
if hasattr(obj, "to_dict"):
|
|
49
|
-
return MessageFormatter.format_dict(obj.to_dict())
|
|
50
|
-
if hasattr(obj, "__dict__"):
|
|
51
|
-
return MessageFormatter.format_dict(obj.__dict__)
|
|
52
|
-
return str(obj)
|
|
53
|
-
|
|
54
|
-
@staticmethod
|
|
55
|
-
def truncate(message: str, max_length: int = 1000, suffix: str = "...") -> str:
|
|
56
|
-
"""
|
|
57
|
-
Truncate message to maximum length.
|
|
58
|
-
|
|
59
|
-
Args:
|
|
60
|
-
message: Message to truncate
|
|
61
|
-
max_length: Maximum length
|
|
62
|
-
suffix: String to append when truncated
|
|
63
|
-
|
|
64
|
-
Returns:
|
|
65
|
-
Truncated message
|
|
66
|
-
"""
|
|
67
|
-
if len(message) <= max_length:
|
|
68
|
-
return message
|
|
69
|
-
return message[:max_length - len(suffix)] + suffix
|
|
70
|
-
|
|
71
|
-
@staticmethod
|
|
72
|
-
def mask_sensitive(message: str, patterns: Dict[str, str]) -> str:
|
|
73
|
-
"""
|
|
74
|
-
Mask sensitive information in message.
|
|
75
|
-
|
|
76
|
-
Args:
|
|
77
|
-
message: Message to process
|
|
78
|
-
patterns: Dictionary of {pattern: mask}
|
|
79
|
-
|
|
80
|
-
Returns:
|
|
81
|
-
Message with sensitive info masked
|
|
82
|
-
"""
|
|
83
|
-
result = message
|
|
84
|
-
for pattern, mask in patterns.items():
|
|
85
|
-
result = re.sub(pattern, mask, result)
|
|
86
|
-
return result
|
|
87
|
-
|
|
88
|
-
@staticmethod
|
|
89
|
-
def format_context(context: Dict[str, Any]) -> str:
|
|
90
|
-
"""
|
|
91
|
-
Format context dictionary into readable string.
|
|
92
|
-
|
|
93
|
-
Args:
|
|
94
|
-
context: Context dictionary
|
|
95
|
-
|
|
96
|
-
Returns:
|
|
97
|
-
Formatted context string
|
|
98
|
-
"""
|
|
99
|
-
parts = []
|
|
100
|
-
for key, value in sorted(context.items()):
|
|
101
|
-
formatted_value = (
|
|
102
|
-
MessageFormatter.format_object(value)
|
|
103
|
-
if isinstance(value, (dict, list, tuple))
|
|
104
|
-
else str(value)
|
|
105
|
-
)
|
|
106
|
-
parts.append(f"{key}={formatted_value}")
|
|
107
|
-
return " ".join(parts)
|
|
108
|
-
|
|
109
|
-
@staticmethod
|
|
110
|
-
def format_metrics(metrics: Dict[str, Union[int, float]]) -> str:
|
|
111
|
-
"""
|
|
112
|
-
Format performance metrics into readable string.
|
|
113
|
-
|
|
114
|
-
Args:
|
|
115
|
-
metrics: Dictionary of metric names and values
|
|
116
|
-
|
|
117
|
-
Returns:
|
|
118
|
-
Formatted metrics string
|
|
119
|
-
"""
|
|
120
|
-
parts = []
|
|
121
|
-
for key, value in sorted(metrics.items()):
|
|
122
|
-
if isinstance(value, float):
|
|
123
|
-
formatted = f"{value:.3f}"
|
|
124
|
-
else:
|
|
125
|
-
formatted = str(value)
|
|
126
|
-
parts.append(f"{key}={formatted}")
|
|
127
|
-
return " ".join(parts)
|
|
128
|
-
|
|
129
|
-
@staticmethod
|
|
130
|
-
def format_timestamp(
|
|
131
|
-
timestamp: Optional[datetime] = None,
|
|
132
|
-
format: str = "%Y-%m-%d %H:%M:%S.%f"
|
|
133
|
-
) -> str:
|
|
134
|
-
"""
|
|
135
|
-
Format timestamp into string.
|
|
136
|
-
|
|
137
|
-
Args:
|
|
138
|
-
timestamp: Datetime object (uses current time if None)
|
|
139
|
-
format: strftime format string
|
|
140
|
-
|
|
141
|
-
Returns:
|
|
142
|
-
Formatted timestamp string
|
|
143
|
-
"""
|
|
144
|
-
if timestamp is None:
|
|
145
|
-
timestamp = datetime.now()
|
|
146
|
-
return timestamp.strftime(format)
|
|
147
|
-
|
|
148
|
-
@classmethod
|
|
149
|
-
def format_message(
|
|
150
|
-
cls,
|
|
151
|
-
message: str,
|
|
152
|
-
context: Optional[Dict[str, Any]] = None,
|
|
153
|
-
metrics: Optional[Dict[str, Union[int, float]]] = None,
|
|
154
|
-
max_length: Optional[int] = None,
|
|
155
|
-
mask_patterns: Optional[Dict[str, str]] = None,
|
|
156
|
-
timestamp_format: Optional[str] = None
|
|
157
|
-
) -> str:
|
|
158
|
-
"""
|
|
159
|
-
Format complete log message with all options.
|
|
160
|
-
|
|
161
|
-
Args:
|
|
162
|
-
message: Base message
|
|
163
|
-
context: Optional context dictionary
|
|
164
|
-
metrics: Optional performance metrics
|
|
165
|
-
max_length: Optional maximum length
|
|
166
|
-
mask_patterns: Optional sensitive data patterns
|
|
167
|
-
timestamp_format: Optional timestamp format
|
|
168
|
-
|
|
169
|
-
Returns:
|
|
170
|
-
Formatted complete message
|
|
171
|
-
"""
|
|
172
|
-
parts = []
|
|
173
|
-
|
|
174
|
-
# Add timestamp
|
|
175
|
-
if timestamp_format:
|
|
176
|
-
parts.append(cls.format_timestamp(format=timestamp_format))
|
|
177
|
-
|
|
178
|
-
# Add main message
|
|
179
|
-
parts.append(message)
|
|
180
|
-
|
|
181
|
-
# Add context if present
|
|
182
|
-
if context:
|
|
183
|
-
parts.append(cls.format_context(context))
|
|
184
|
-
|
|
185
|
-
# Add metrics if present
|
|
186
|
-
if metrics:
|
|
187
|
-
parts.append(cls.format_metrics(metrics))
|
|
188
|
-
|
|
189
|
-
# Join all parts
|
|
190
|
-
result = " ".join(parts)
|
|
191
|
-
|
|
192
|
-
# Apply masking if needed
|
|
193
|
-
if mask_patterns:
|
|
194
|
-
result = cls.mask_sensitive(result, mask_patterns)
|
|
195
|
-
|
|
196
|
-
# Apply length limit if needed
|
|
197
|
-
if max_length:
|
|
198
|
-
result = cls.truncate(result, max_length)
|
|
199
|
-
|
|
200
|
-
return result
|
webscout/Local/__init__.py
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Webscout.Local - A llama-cpp-python based LLM serving tool with Ollama-compatible API
|
|
3
|
-
"""
|
|
4
|
-
from webscout.version import __version__
|
|
5
|
-
|
|
6
|
-
# Import main components for easier access
|
|
7
|
-
from .llm import LLMInterface
|
|
8
|
-
from .model_manager import ModelManager
|
|
9
|
-
from .server import start_server
|
|
10
|
-
|
|
11
|
-
# Define what's available when using `from webscout.Local import *`
|
|
12
|
-
__all__ = ["LLMInterface", "ModelManager", "start_server"]
|