webscout 8.3.4__tar.gz → 8.3.6__tar.gz
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.
Potentially problematic release.
This version of webscout might be problematic. Click here for more details.
- {webscout-8.3.4/webscout.egg-info → webscout-8.3.6}/PKG-INFO +10 -149
- {webscout-8.3.4 → webscout-8.3.6}/README.md +7 -147
- webscout-8.3.6/changelog.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/pyproject.toml +2 -1
- webscout-8.3.6/webscout/AIutel.py +58 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Bard.py +12 -6
- {webscout-8.3.4 → webscout-8.3.6}/webscout/DWEBS.py +66 -57
- webscout-8.3.6/webscout/Provider/AISEARCH/PERPLEXED_search.py +214 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/AISEARCH/__init__.py +11 -10
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/AISEARCH/felo_search.py +7 -3
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/AISEARCH/scira_search.py +2 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/AISEARCH/stellar_search.py +53 -8
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Deepinfra.py +13 -1
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Flowith.py +6 -1
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/GithubChat.py +1 -0
- webscout-8.3.6/webscout/Provider/GptOss.py +207 -0
- webscout-8.3.6/webscout/Provider/Kimi.py +445 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Netwrck.py +3 -6
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/README.md +2 -1
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/TogetherAI.py +12 -8
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/TwoAI.py +94 -1
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/__init__.py +4 -4
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/copilot.py +20 -4
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/deepinfra.py +12 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/e2b.py +60 -8
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/flowith.py +4 -3
- webscout-8.3.6/webscout/Provider/OPENAI/generate_api_key.py +48 -0
- webscout-8.3.6/webscout/Provider/OPENAI/gptoss.py +288 -0
- webscout-8.3.6/webscout/Provider/OPENAI/kimi.py +469 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/netwrck.py +8 -12
- webscout-8.3.6/webscout/Provider/OPENAI/refact.py +274 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/scirachat.py +4 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/textpollinations.py +11 -10
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/toolbaz.py +1 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/venice.py +1 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Perplexitylabs.py +163 -147
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Qodo.py +30 -6
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/__init__.py +1 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/bing.py +14 -2
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/together.py +11 -9
- webscout-8.3.6/webscout/Provider/TTI/venice.py +368 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTS/README.md +0 -1
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTS/__init__.py +0 -1
- webscout-8.3.6/webscout/Provider/TTS/base.py +479 -0
- webscout-8.3.6/webscout/Provider/TTS/deepgram.py +409 -0
- webscout-8.3.6/webscout/Provider/TTS/elevenlabs.py +425 -0
- webscout-8.3.6/webscout/Provider/TTS/freetts.py +317 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTS/gesserit.py +192 -128
- webscout-8.3.6/webscout/Provider/TTS/murfai.py +248 -0
- webscout-8.3.6/webscout/Provider/TTS/openai_fm.py +347 -0
- webscout-8.3.6/webscout/Provider/TTS/speechma.py +620 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TextPollinationsAI.py +11 -10
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TogetherAI.py +12 -4
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TwoAI.py +96 -2
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TypliAI.py +33 -27
- webscout-8.3.6/webscout/Provider/UNFINISHED/VercelAIGateway.py +339 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/UNFINISHED/fetch_together_models.py +6 -11
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Venice.py +1 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/WiseCat.py +18 -20
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/__init__.py +2 -96
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/cerebras.py +83 -33
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/copilot.py +42 -23
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/scira_chat.py +4 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/toolbaz.py +6 -10
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/typefully.py +1 -11
- {webscout-8.3.4 → webscout-8.3.6}/webscout/__init__.py +3 -15
- {webscout-8.3.4 → webscout-8.3.6}/webscout/auth/__init__.py +19 -4
- {webscout-8.3.4 → webscout-8.3.6}/webscout/auth/api_key_manager.py +189 -189
- {webscout-8.3.4 → webscout-8.3.6}/webscout/auth/auth_system.py +25 -40
- webscout-8.3.6/webscout/auth/config.py +175 -0
- webscout-8.3.6/webscout/auth/database.py +755 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/auth/models.py +185 -130
- {webscout-8.3.4 → webscout-8.3.6}/webscout/auth/request_processing.py +175 -11
- {webscout-8.3.4 → webscout-8.3.6}/webscout/auth/routes.py +99 -2
- {webscout-8.3.4 → webscout-8.3.6}/webscout/auth/server.py +9 -2
- webscout-8.3.6/webscout/auth/simple_logger.py +236 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/conversation.py +22 -20
- webscout-8.3.4/webscout/AIutel.py → webscout-8.3.6/webscout/sanitize.py +84 -28
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/README.md +20 -23
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/core/crawler.py +125 -38
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/core/scout.py +26 -5
- webscout-8.3.6/webscout/version.py +2 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/webscout_search.py +13 -6
- {webscout-8.3.4 → webscout-8.3.6}/webscout/webscout_search_async.py +10 -8
- {webscout-8.3.4 → webscout-8.3.6}/webscout/yep_search.py +13 -5
- {webscout-8.3.4 → webscout-8.3.6/webscout.egg-info}/PKG-INFO +10 -149
- {webscout-8.3.4 → webscout-8.3.6}/webscout.egg-info/SOURCES.txt +24 -22
- {webscout-8.3.4 → webscout-8.3.6}/webscout.egg-info/requires.txt +2 -1
- webscout-8.3.4/changelog.md +0 -0
- webscout-8.3.4/webscout/Provider/Glider.py +0 -225
- webscout-8.3.4/webscout/Provider/OPENAI/README_AUTOPROXY.md +0 -238
- webscout-8.3.4/webscout/Provider/OPENAI/c4ai.py +0 -394
- webscout-8.3.4/webscout/Provider/OPENAI/glider.py +0 -330
- webscout-8.3.4/webscout/Provider/OPENAI/typegpt.py +0 -368
- webscout-8.3.4/webscout/Provider/OPENAI/uncovrAI.py +0 -477
- webscout-8.3.4/webscout/Provider/TTS/base.py +0 -159
- webscout-8.3.4/webscout/Provider/TTS/deepgram.py +0 -156
- webscout-8.3.4/webscout/Provider/TTS/elevenlabs.py +0 -111
- webscout-8.3.4/webscout/Provider/TTS/freetts.py +0 -140
- webscout-8.3.4/webscout/Provider/TTS/murfai.py +0 -113
- webscout-8.3.4/webscout/Provider/TTS/openai_fm.py +0 -129
- webscout-8.3.4/webscout/Provider/TTS/speechma.py +0 -586
- webscout-8.3.4/webscout/Provider/TTS/sthir.py +0 -94
- webscout-8.3.4/webscout/Provider/WritingMate.py +0 -273
- webscout-8.3.4/webscout/Provider/typegpt.py +0 -284
- webscout-8.3.4/webscout/Provider/uncovr.py +0 -333
- webscout-8.3.4/webscout/auth/config.py +0 -76
- webscout-8.3.4/webscout/auth/database.py +0 -400
- webscout-8.3.4/webscout/version.py +0 -2
- {webscout-8.3.4 → webscout-8.3.6}/LEGAL_NOTICE.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/LICENSE.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/MANIFEST.in +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/setup.cfg +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/AIauto.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/AIbase.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Bing_search.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/Act.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/GitToolkit/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/GitToolkit/gitapi/README.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/GitToolkit/gitapi/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/GitToolkit/gitapi/repository.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/GitToolkit/gitapi/user.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/GitToolkit/gitapi/utils.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/README.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/YTdownloader.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/transcriber.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/ytapi/README.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/ytapi/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/ytapi/channel.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/ytapi/errors.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/ytapi/extras.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/ytapi/https.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/ytapi/patterns.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/ytapi/playlist.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/ytapi/pool.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/ytapi/query.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/ytapi/stream.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/ytapi/utils.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/YTToolkit/ytapi/video.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/autocoder/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/autocoder/autocoder.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/autocoder/autocoder_utiles.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/gguf.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/gguf.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/tempmail/README.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/tempmail/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/tempmail/async_utils.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/tempmail/base.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/tempmail/cli.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/tempmail/emailnator.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/tempmail/mail_tm.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/tempmail/temp_mail_io.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/weather.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/weather.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Extra/weather_ascii.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Litlogger/README.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Litlogger/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Litlogger/formats.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Litlogger/handlers.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Litlogger/levels.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Litlogger/logger.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/AISEARCH/DeepFind.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/AISEARCH/Perplexity.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/AISEARCH/README.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/AISEARCH/genspark_search.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/AISEARCH/hika_search.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/AISEARCH/iask_search.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/AISEARCH/monica_search.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/AISEARCH/webpilotai_search.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Aitopia.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/AllenAI.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Andi.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Blackboxai.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/ChatGPTClone.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/ChatSandbox.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Cloudflare.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Cohere.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/ExaAI.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/ExaChat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/FreeGemini.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Gemini.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/GeminiProxy.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/GizAI.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Groq.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/HeckAI.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Hunyuan.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Jadve.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Koboldai.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/LambdaChat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Llama3.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/MCPCore.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Marcus.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/MiniMax.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Nemotron.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OLLAMA.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/BLACKBOXAI.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/Cloudflare.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/FalconH1.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/FreeGemini.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/GeminiProxy.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/MiniMax.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/NEMOTRON.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/PI.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/Qwen3.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/ai4chat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/autoproxy.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/base.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/chatgpt.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/chatgptclone.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/chatsandbox.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/exaai.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/exachat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/friendli.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/groq.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/heckai.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/llmchatco.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/mcpcore.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/monochat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/multichat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/oivscode.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/opkfc.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/pydantic_imports.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/qodo.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/sonus.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/standardinput.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/typefully.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/utils.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/wisecat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/writecream.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/x0gpt.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/xenai.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OPENAI/yep.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/OpenGPT.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Openai.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/PI.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/QwenLM.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/Reka.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/STT/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/STT/base.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/STT/elevenlabs.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/StandardInput.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/README.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/aiarta.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/base.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/gpt1image.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/imagen.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/infip.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/magicstudio.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/monochat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/piclumen.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/pixelmuse.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/pollinations.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTI/utils.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTS/parler.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTS/streamElements.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TTS/utils.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/TeachAnything.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/UNFINISHED/ChatHub.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/UNFINISHED/ChutesAI.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/UNFINISHED/Youchat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/UNFINISHED/liner_api_request.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/UNFINISHED/puterjs.py +0 -0
- {webscout-8.3.4/webscout/Provider → webscout-8.3.6/webscout/Provider/UNFINISHED}/samurai.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/UNFINISHED/test_lmarena.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/VercelAI.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/WrDoChat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/XenAI.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/ai4chat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/akashgpt.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/asksteve.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/chatglm.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/cleeai.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/deepseek_assistant.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/elmo.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/freeaichat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/geminiapi.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/granite.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/hermes.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/julius.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/koala.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/learnfastai.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/llama3mitril.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/llmchat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/llmchatco.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/lmarena.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/meta.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/monochat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/multichat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/oivscode.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/scnet.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/searchchat.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/sonus.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/talkai.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/turboseek.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/x0gpt.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/Provider/yep.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/__main__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/auth/exceptions.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/auth/middleware.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/auth/providers.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/auth/rate_limiter.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/auth/request_models.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/auth/schemas.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/cli.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/client.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/exceptions.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/litagent/Readme.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/litagent/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/litagent/agent.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/litagent/constants.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/litprinter/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/models.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/optimizers.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/prompt_manager.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/core/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/core/search_result.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/core/text_analyzer.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/core/text_utils.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/core/web_analyzer.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/element.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/parsers/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/parsers/html5lib_parser.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/parsers/html_parser.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/parsers/lxml_parser.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/scout/utils.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/Readme.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/core/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/core/cli.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/core/context.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/core/group.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/decorators/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/decorators/command.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/decorators/options.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/decorators/output.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/exceptions.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/plugins/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/plugins/base.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/plugins/manager.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/utils/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/utils/formatting.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/swiftcli/utils/parsing.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/tempid.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/update_checker.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/utils.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/zeroart/README.md +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/zeroart/__init__.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/zeroart/base.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/zeroart/effects.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout/zeroart/fonts.py +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout.egg-info/dependency_links.txt +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout.egg-info/entry_points.txt +0 -0
- {webscout-8.3.4 → webscout-8.3.6}/webscout.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: webscout
|
|
3
|
-
Version: 8.3.
|
|
3
|
+
Version: 8.3.6
|
|
4
4
|
Summary: Search for anything using Google, DuckDuckGo, phind.com, Contains AI models, can transcribe yt videos, temporary email and phone number generation, has TTS support, webai (terminal gpt and open interpreter) and offline LLMs and more
|
|
5
5
|
Author-email: OEvortex <helpingai5@gmail.com>
|
|
6
6
|
License: HelpingAI
|
|
@@ -41,7 +41,6 @@ Requires-Dist: nodriver
|
|
|
41
41
|
Requires-Dist: mistune
|
|
42
42
|
Requires-Dist: curl_cffi
|
|
43
43
|
Requires-Dist: nest-asyncio
|
|
44
|
-
Requires-Dist: websocket-client
|
|
45
44
|
Requires-Dist: colorama
|
|
46
45
|
Requires-Dist: rich
|
|
47
46
|
Requires-Dist: markdownify
|
|
@@ -73,6 +72,8 @@ Requires-Dist: python-multipart; extra == "api"
|
|
|
73
72
|
Requires-Dist: tiktoken; extra == "api"
|
|
74
73
|
Requires-Dist: motor; extra == "api"
|
|
75
74
|
Requires-Dist: jinja2; extra == "api"
|
|
75
|
+
Requires-Dist: supabase; extra == "api"
|
|
76
|
+
Requires-Dist: websockets>=11.0; extra == "api"
|
|
76
77
|
Dynamic: license-file
|
|
77
78
|
|
|
78
79
|
<div align="center">
|
|
@@ -105,7 +106,7 @@ Dynamic: license-file
|
|
|
105
106
|
- [🌟 Key Features](#-features)
|
|
106
107
|
- [⚙️ Installation](#️-installation)
|
|
107
108
|
- [🖥️ Command Line Interface](#️-command-line-interface)
|
|
108
|
-
- [🔄 OpenAI-Compatible API Server](
|
|
109
|
+
- [🔄 OpenAI-Compatible API Server](docs/openai-api-server.md)
|
|
109
110
|
- [🔍 Search Engines](#-search-engines)
|
|
110
111
|
- [🦆 DuckDuckGo Search](#-duckduckgo-search-with-webs-and-asyncwebs)
|
|
111
112
|
- [💻 WEBS API Reference](#-webs-api-reference)
|
|
@@ -117,7 +118,7 @@ Dynamic: license-file
|
|
|
117
118
|
|
|
118
119
|
<hr/>
|
|
119
120
|
|
|
120
|
-
> [!IMPORTANT]
|
|
121
|
+
> [!IMPORTANT]
|
|
121
122
|
> **Webscout supports three types of compatibility:**
|
|
122
123
|
>
|
|
123
124
|
> - **Native Compatibility:** Webscout's own native API for maximum flexibility
|
|
@@ -181,6 +182,8 @@ Dynamic: license-file
|
|
|
181
182
|
- **[Scout](webscout/scout/README.md):** Advanced web parsing and crawling library with intelligent HTML/XML parsing
|
|
182
183
|
- **[Inferno](https://github.com/HelpingAI/inferno):** Run local LLMs with an OpenAI-compatible API and interactive CLI (now a standalone package: `pip install inferno-llm`)
|
|
183
184
|
- **[GGUF Conversion](webscout/Extra/gguf.md):** Convert and quantize Hugging Face models to GGUF format
|
|
185
|
+
- **[Utility Decorators](docs/decorators.md):** Easily measure function execution time (`timeIt`) and add retry logic (`retry`) to any function
|
|
186
|
+
- **[Stream Sanitization Utilities](docs/sanitize.md):** Advanced tools for cleaning, decoding, and processing data streams
|
|
184
187
|
</p>
|
|
185
188
|
</details>
|
|
186
189
|
|
|
@@ -381,7 +384,8 @@ For more information, visit the [Inferno GitHub repository](https://github.com/H
|
|
|
381
384
|
</p>
|
|
382
385
|
</details>
|
|
383
386
|
|
|
384
|
-
> [!NOTE]
|
|
387
|
+
> [!NOTE]
|
|
388
|
+
> **Hardware requirements for running models with Inferno:**
|
|
385
389
|
>
|
|
386
390
|
> - Around 2 GB of RAM for 1B models
|
|
387
391
|
> - Around 4 GB of RAM for 3B models
|
|
@@ -390,150 +394,7 @@ For more information, visit the [Inferno GitHub repository](https://github.com/H
|
|
|
390
394
|
> - 32 GB of RAM for 33B models
|
|
391
395
|
> - GPU acceleration is recommended for better performance
|
|
392
396
|
|
|
393
|
-
|
|
394
|
-
<summary><b>🔄 OpenAI-Compatible API Server</b></summary>
|
|
395
|
-
<p>
|
|
396
|
-
|
|
397
|
-
Webscout includes an OpenAI-compatible API server that allows you to use any supported provider with tools and applications designed for OpenAI's API.
|
|
398
|
-
|
|
399
|
-
### Starting the API Server
|
|
400
|
-
|
|
401
|
-
#### From Command Line (Recommended)
|
|
402
|
-
|
|
403
|
-
```bash
|
|
404
|
-
# Start with default settings (port 8000)
|
|
405
|
-
webscout-server
|
|
406
|
-
|
|
407
|
-
# Start with custom port
|
|
408
|
-
webscout-server --port 8080
|
|
409
|
-
|
|
410
|
-
# Start with API key authentication
|
|
411
|
-
webscout-server --api-key "your-secret-key"
|
|
412
|
-
|
|
413
|
-
# Start in no-auth mode using command line flag (no API key required)
|
|
414
|
-
webscout-server --no-auth
|
|
415
|
-
|
|
416
|
-
# Start in no-auth mode using environment variable
|
|
417
|
-
$env:WEBSCOUT_NO_AUTH='true'; webscout-server
|
|
418
|
-
|
|
419
|
-
# Specify a default provider
|
|
420
|
-
webscout-server --default-provider "Claude"
|
|
421
|
-
|
|
422
|
-
# Run in debug mode
|
|
423
|
-
webscout-server --debug
|
|
424
|
-
|
|
425
|
-
# Get help for all options (includes authentication options)
|
|
426
|
-
webscout-server --help
|
|
427
|
-
```
|
|
428
|
-
|
|
429
|
-
#### Alternative Methods
|
|
430
|
-
|
|
431
|
-
```bash
|
|
432
|
-
# Using UV (no installation required)
|
|
433
|
-
uv run --extra api webscout-server
|
|
434
|
-
|
|
435
|
-
# Using Python module
|
|
436
|
-
python -m webscout.auth.server
|
|
437
|
-
```
|
|
438
|
-
|
|
439
|
-
#### Environment Variables
|
|
440
|
-
|
|
441
|
-
Webscout server supports configuration through environment variables:
|
|
442
|
-
|
|
443
|
-
```bash
|
|
444
|
-
# Start server in no-auth mode (no API key required)
|
|
445
|
-
$env:WEBSCOUT_NO_AUTH='true'; webscout-server
|
|
446
|
-
|
|
447
|
-
# Disable rate limiting
|
|
448
|
-
$env:WEBSCOUT_NO_RATE_LIMIT='true'; webscout-server
|
|
449
|
-
|
|
450
|
-
# Start with custom port using environment variable
|
|
451
|
-
$env:WEBSCOUT_PORT='7860'; webscout-server
|
|
452
|
-
```
|
|
453
|
-
|
|
454
|
-
For a complete list of supported environment variables and Docker deployment options, see [DOCKER.md](DOCKER.md).
|
|
455
|
-
|
|
456
|
-
#### From Python Code
|
|
457
|
-
|
|
458
|
-
> **Recommended:**
|
|
459
|
-
> Use `start_server` from `webscout.client` for the simplest programmatic startup.
|
|
460
|
-
> For advanced control (custom host, debug, etc.), use `run_api`.
|
|
461
|
-
|
|
462
|
-
```python
|
|
463
|
-
# Method 1: Using the helper function (recommended)
|
|
464
|
-
from webscout.client import start_server
|
|
465
|
-
|
|
466
|
-
# Start with default settings
|
|
467
|
-
start_server()
|
|
468
|
-
|
|
469
|
-
# Start with custom settings
|
|
470
|
-
start_server(port=8080, api_key="your-secret-key", default_provider="Claude")
|
|
471
|
-
|
|
472
|
-
# Start in no-auth mode (no API key required)
|
|
473
|
-
start_server(no_auth=True)
|
|
474
|
-
|
|
475
|
-
# Method 2: Advanced usage with run_api
|
|
476
|
-
from webscout.client import run_api
|
|
477
|
-
|
|
478
|
-
run_api(
|
|
479
|
-
host="0.0.0.0",
|
|
480
|
-
debug=True
|
|
481
|
-
)
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
### Using the API
|
|
485
|
-
|
|
486
|
-
Once the server is running, you can use it with any OpenAI client library or tool:
|
|
487
|
-
|
|
488
|
-
```python
|
|
489
|
-
# Using the OpenAI Python client
|
|
490
|
-
from openai import OpenAI
|
|
491
|
-
|
|
492
|
-
client = OpenAI(
|
|
493
|
-
api_key="your-secret-key", # Only needed if you set an API key
|
|
494
|
-
base_url="http://localhost:8000/v1" # Point to your local server
|
|
495
|
-
)
|
|
496
|
-
|
|
497
|
-
# Chat completion
|
|
498
|
-
response = client.chat.completions.create(
|
|
499
|
-
model="gpt-4", # This can be any model name registered with Webscout
|
|
500
|
-
messages=[
|
|
501
|
-
{"role": "system", "content": "You are a helpful assistant."},
|
|
502
|
-
{"role": "user", "content": "Hello, how are you?"}
|
|
503
|
-
]
|
|
504
|
-
)
|
|
505
|
-
|
|
506
|
-
print(response.choices[0].message.content)
|
|
507
|
-
```
|
|
508
|
-
|
|
509
|
-
### Using with cURL
|
|
510
|
-
|
|
511
|
-
```bash
|
|
512
|
-
# Basic chat completion request
|
|
513
|
-
curl http://localhost:8000/v1/chat/completions \
|
|
514
|
-
-H "Content-Type: application/json" \
|
|
515
|
-
-H "Authorization: Bearer your-secret-key" \
|
|
516
|
-
-d '{
|
|
517
|
-
"model": "gpt-4",
|
|
518
|
-
"messages": [
|
|
519
|
-
{"role": "system", "content": "You are a helpful assistant."},
|
|
520
|
-
{"role": "user", "content": "Hello, how are you?"}
|
|
521
|
-
]
|
|
522
|
-
}'
|
|
523
|
-
|
|
524
|
-
# List available models
|
|
525
|
-
curl http://localhost:8000/v1/models \
|
|
526
|
-
-H "Authorization: Bearer your-secret-key"
|
|
527
|
-
```
|
|
528
|
-
|
|
529
|
-
### Available Endpoints
|
|
530
|
-
|
|
531
|
-
- `GET /v1/models` - List all available models
|
|
532
|
-
- `GET /v1/models/{model_name}` - Get information about a specific model
|
|
533
|
-
- `POST /v1/chat/completions` - Create a chat completion
|
|
534
|
-
|
|
535
|
-
</p>
|
|
536
|
-
</details>
|
|
397
|
+
For detailed information about the OpenAI-compatible API server, including setup, configuration, and usage examples, see the [OpenAI API Server Documentation](docs/openai-api-server.md).
|
|
537
398
|
|
|
538
399
|
<hr/>
|
|
539
400
|
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
- [🌟 Key Features](#-features)
|
|
29
29
|
- [⚙️ Installation](#️-installation)
|
|
30
30
|
- [🖥️ Command Line Interface](#️-command-line-interface)
|
|
31
|
-
- [🔄 OpenAI-Compatible API Server](
|
|
31
|
+
- [🔄 OpenAI-Compatible API Server](docs/openai-api-server.md)
|
|
32
32
|
- [🔍 Search Engines](#-search-engines)
|
|
33
33
|
- [🦆 DuckDuckGo Search](#-duckduckgo-search-with-webs-and-asyncwebs)
|
|
34
34
|
- [💻 WEBS API Reference](#-webs-api-reference)
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
|
|
41
41
|
<hr/>
|
|
42
42
|
|
|
43
|
-
> [!IMPORTANT]
|
|
43
|
+
> [!IMPORTANT]
|
|
44
44
|
> **Webscout supports three types of compatibility:**
|
|
45
45
|
>
|
|
46
46
|
> - **Native Compatibility:** Webscout's own native API for maximum flexibility
|
|
@@ -104,6 +104,8 @@
|
|
|
104
104
|
- **[Scout](webscout/scout/README.md):** Advanced web parsing and crawling library with intelligent HTML/XML parsing
|
|
105
105
|
- **[Inferno](https://github.com/HelpingAI/inferno):** Run local LLMs with an OpenAI-compatible API and interactive CLI (now a standalone package: `pip install inferno-llm`)
|
|
106
106
|
- **[GGUF Conversion](webscout/Extra/gguf.md):** Convert and quantize Hugging Face models to GGUF format
|
|
107
|
+
- **[Utility Decorators](docs/decorators.md):** Easily measure function execution time (`timeIt`) and add retry logic (`retry`) to any function
|
|
108
|
+
- **[Stream Sanitization Utilities](docs/sanitize.md):** Advanced tools for cleaning, decoding, and processing data streams
|
|
107
109
|
</p>
|
|
108
110
|
</details>
|
|
109
111
|
|
|
@@ -304,7 +306,8 @@ For more information, visit the [Inferno GitHub repository](https://github.com/H
|
|
|
304
306
|
</p>
|
|
305
307
|
</details>
|
|
306
308
|
|
|
307
|
-
> [!NOTE]
|
|
309
|
+
> [!NOTE]
|
|
310
|
+
> **Hardware requirements for running models with Inferno:**
|
|
308
311
|
>
|
|
309
312
|
> - Around 2 GB of RAM for 1B models
|
|
310
313
|
> - Around 4 GB of RAM for 3B models
|
|
@@ -313,150 +316,7 @@ For more information, visit the [Inferno GitHub repository](https://github.com/H
|
|
|
313
316
|
> - 32 GB of RAM for 33B models
|
|
314
317
|
> - GPU acceleration is recommended for better performance
|
|
315
318
|
|
|
316
|
-
|
|
317
|
-
<summary><b>🔄 OpenAI-Compatible API Server</b></summary>
|
|
318
|
-
<p>
|
|
319
|
-
|
|
320
|
-
Webscout includes an OpenAI-compatible API server that allows you to use any supported provider with tools and applications designed for OpenAI's API.
|
|
321
|
-
|
|
322
|
-
### Starting the API Server
|
|
323
|
-
|
|
324
|
-
#### From Command Line (Recommended)
|
|
325
|
-
|
|
326
|
-
```bash
|
|
327
|
-
# Start with default settings (port 8000)
|
|
328
|
-
webscout-server
|
|
329
|
-
|
|
330
|
-
# Start with custom port
|
|
331
|
-
webscout-server --port 8080
|
|
332
|
-
|
|
333
|
-
# Start with API key authentication
|
|
334
|
-
webscout-server --api-key "your-secret-key"
|
|
335
|
-
|
|
336
|
-
# Start in no-auth mode using command line flag (no API key required)
|
|
337
|
-
webscout-server --no-auth
|
|
338
|
-
|
|
339
|
-
# Start in no-auth mode using environment variable
|
|
340
|
-
$env:WEBSCOUT_NO_AUTH='true'; webscout-server
|
|
341
|
-
|
|
342
|
-
# Specify a default provider
|
|
343
|
-
webscout-server --default-provider "Claude"
|
|
344
|
-
|
|
345
|
-
# Run in debug mode
|
|
346
|
-
webscout-server --debug
|
|
347
|
-
|
|
348
|
-
# Get help for all options (includes authentication options)
|
|
349
|
-
webscout-server --help
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
#### Alternative Methods
|
|
353
|
-
|
|
354
|
-
```bash
|
|
355
|
-
# Using UV (no installation required)
|
|
356
|
-
uv run --extra api webscout-server
|
|
357
|
-
|
|
358
|
-
# Using Python module
|
|
359
|
-
python -m webscout.auth.server
|
|
360
|
-
```
|
|
361
|
-
|
|
362
|
-
#### Environment Variables
|
|
363
|
-
|
|
364
|
-
Webscout server supports configuration through environment variables:
|
|
365
|
-
|
|
366
|
-
```bash
|
|
367
|
-
# Start server in no-auth mode (no API key required)
|
|
368
|
-
$env:WEBSCOUT_NO_AUTH='true'; webscout-server
|
|
369
|
-
|
|
370
|
-
# Disable rate limiting
|
|
371
|
-
$env:WEBSCOUT_NO_RATE_LIMIT='true'; webscout-server
|
|
372
|
-
|
|
373
|
-
# Start with custom port using environment variable
|
|
374
|
-
$env:WEBSCOUT_PORT='7860'; webscout-server
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
For a complete list of supported environment variables and Docker deployment options, see [DOCKER.md](DOCKER.md).
|
|
378
|
-
|
|
379
|
-
#### From Python Code
|
|
380
|
-
|
|
381
|
-
> **Recommended:**
|
|
382
|
-
> Use `start_server` from `webscout.client` for the simplest programmatic startup.
|
|
383
|
-
> For advanced control (custom host, debug, etc.), use `run_api`.
|
|
384
|
-
|
|
385
|
-
```python
|
|
386
|
-
# Method 1: Using the helper function (recommended)
|
|
387
|
-
from webscout.client import start_server
|
|
388
|
-
|
|
389
|
-
# Start with default settings
|
|
390
|
-
start_server()
|
|
391
|
-
|
|
392
|
-
# Start with custom settings
|
|
393
|
-
start_server(port=8080, api_key="your-secret-key", default_provider="Claude")
|
|
394
|
-
|
|
395
|
-
# Start in no-auth mode (no API key required)
|
|
396
|
-
start_server(no_auth=True)
|
|
397
|
-
|
|
398
|
-
# Method 2: Advanced usage with run_api
|
|
399
|
-
from webscout.client import run_api
|
|
400
|
-
|
|
401
|
-
run_api(
|
|
402
|
-
host="0.0.0.0",
|
|
403
|
-
debug=True
|
|
404
|
-
)
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
### Using the API
|
|
408
|
-
|
|
409
|
-
Once the server is running, you can use it with any OpenAI client library or tool:
|
|
410
|
-
|
|
411
|
-
```python
|
|
412
|
-
# Using the OpenAI Python client
|
|
413
|
-
from openai import OpenAI
|
|
414
|
-
|
|
415
|
-
client = OpenAI(
|
|
416
|
-
api_key="your-secret-key", # Only needed if you set an API key
|
|
417
|
-
base_url="http://localhost:8000/v1" # Point to your local server
|
|
418
|
-
)
|
|
419
|
-
|
|
420
|
-
# Chat completion
|
|
421
|
-
response = client.chat.completions.create(
|
|
422
|
-
model="gpt-4", # This can be any model name registered with Webscout
|
|
423
|
-
messages=[
|
|
424
|
-
{"role": "system", "content": "You are a helpful assistant."},
|
|
425
|
-
{"role": "user", "content": "Hello, how are you?"}
|
|
426
|
-
]
|
|
427
|
-
)
|
|
428
|
-
|
|
429
|
-
print(response.choices[0].message.content)
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
### Using with cURL
|
|
433
|
-
|
|
434
|
-
```bash
|
|
435
|
-
# Basic chat completion request
|
|
436
|
-
curl http://localhost:8000/v1/chat/completions \
|
|
437
|
-
-H "Content-Type: application/json" \
|
|
438
|
-
-H "Authorization: Bearer your-secret-key" \
|
|
439
|
-
-d '{
|
|
440
|
-
"model": "gpt-4",
|
|
441
|
-
"messages": [
|
|
442
|
-
{"role": "system", "content": "You are a helpful assistant."},
|
|
443
|
-
{"role": "user", "content": "Hello, how are you?"}
|
|
444
|
-
]
|
|
445
|
-
}'
|
|
446
|
-
|
|
447
|
-
# List available models
|
|
448
|
-
curl http://localhost:8000/v1/models \
|
|
449
|
-
-H "Authorization: Bearer your-secret-key"
|
|
450
|
-
```
|
|
451
|
-
|
|
452
|
-
### Available Endpoints
|
|
453
|
-
|
|
454
|
-
- `GET /v1/models` - List all available models
|
|
455
|
-
- `GET /v1/models/{model_name}` - Get information about a specific model
|
|
456
|
-
- `POST /v1/chat/completions` - Create a chat completion
|
|
457
|
-
|
|
458
|
-
</p>
|
|
459
|
-
</details>
|
|
319
|
+
For detailed information about the OpenAI-compatible API server, including setup, configuration, and usage examples, see the [OpenAI API Server Documentation](docs/openai-api-server.md).
|
|
460
320
|
|
|
461
321
|
<hr/>
|
|
462
322
|
|
|
Binary file
|
|
@@ -52,7 +52,6 @@ dependencies = [
|
|
|
52
52
|
"mistune",
|
|
53
53
|
"curl_cffi",
|
|
54
54
|
"nest-asyncio",
|
|
55
|
-
"websocket-client",
|
|
56
55
|
"colorama",
|
|
57
56
|
"rich",
|
|
58
57
|
"markdownify",
|
|
@@ -98,6 +97,8 @@ api = [
|
|
|
98
97
|
"tiktoken", # Added tiktoken for token counting support
|
|
99
98
|
"motor", # MongoDB async driver for enhanced authentication
|
|
100
99
|
"jinja2", # Template engine for custom Swagger UI
|
|
100
|
+
"supabase", # Supabase client for database operations
|
|
101
|
+
"websockets>=11.0", # Ensure websockets.asyncio module is available for Supabase realtime
|
|
101
102
|
]
|
|
102
103
|
|
|
103
104
|
[tool.setuptools]
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
from .sanitize import * # noqa: E402,F401
|
|
2
|
+
from .conversation import Conversation # noqa: E402,F401
|
|
3
|
+
from .Extra.autocoder import AutoCoder # noqa: E402,F401
|
|
4
|
+
from .optimizers import Optimizers # noqa: E402,F401
|
|
5
|
+
from .prompt_manager import AwesomePrompts # noqa: E402,F401
|
|
6
|
+
|
|
7
|
+
# --- Utility Decorators ---
|
|
8
|
+
from typing import Callable
|
|
9
|
+
import time
|
|
10
|
+
import functools
|
|
11
|
+
|
|
12
|
+
def timeIt(func: Callable):
|
|
13
|
+
"""
|
|
14
|
+
Decorator to measure execution time of a function (sync or async).
|
|
15
|
+
Prints: - Execution time for '{func.__name__}' : {elapsed:.6f} Seconds.
|
|
16
|
+
"""
|
|
17
|
+
import asyncio
|
|
18
|
+
GREEN_BOLD = "\033[1;92m"
|
|
19
|
+
RESET = "\033[0m"
|
|
20
|
+
@functools.wraps(func)
|
|
21
|
+
def sync_wrapper(*args, **kwargs):
|
|
22
|
+
start_time = time.time()
|
|
23
|
+
result = func(*args, **kwargs)
|
|
24
|
+
end_time = time.time()
|
|
25
|
+
print(f"{GREEN_BOLD}- Execution time for '{func.__name__}' : {end_time - start_time:.6f} Seconds. {RESET}\n")
|
|
26
|
+
return result
|
|
27
|
+
|
|
28
|
+
@functools.wraps(func)
|
|
29
|
+
async def async_wrapper(*args, **kwargs):
|
|
30
|
+
start_time = time.time()
|
|
31
|
+
result = await func(*args, **kwargs)
|
|
32
|
+
end_time = time.time()
|
|
33
|
+
print(f"{GREEN_BOLD}- Execution time for '{func.__name__}' : {end_time - start_time:.6f} Seconds. {RESET}\n")
|
|
34
|
+
return result
|
|
35
|
+
|
|
36
|
+
if asyncio.iscoroutinefunction(func):
|
|
37
|
+
return async_wrapper
|
|
38
|
+
else:
|
|
39
|
+
return sync_wrapper
|
|
40
|
+
|
|
41
|
+
def retry(retries: int = 3, delay: float = 1) -> Callable:
|
|
42
|
+
"""
|
|
43
|
+
Decorator to retry a function on exception.
|
|
44
|
+
"""
|
|
45
|
+
def decorator(func: Callable):
|
|
46
|
+
@functools.wraps(func)
|
|
47
|
+
def wrapper(*args, **kwargs):
|
|
48
|
+
last_exc = None
|
|
49
|
+
for attempt in range(retries):
|
|
50
|
+
try:
|
|
51
|
+
return func(*args, **kwargs)
|
|
52
|
+
except Exception as exc:
|
|
53
|
+
last_exc = exc
|
|
54
|
+
print(f"Attempt {attempt + 1} failed: {exc}. Retrying in {delay} seconds...")
|
|
55
|
+
time.sleep(delay)
|
|
56
|
+
raise last_exc
|
|
57
|
+
return wrapper
|
|
58
|
+
return decorator
|
|
@@ -8,24 +8,30 @@ import os
|
|
|
8
8
|
import random
|
|
9
9
|
import re
|
|
10
10
|
import string
|
|
11
|
+
from datetime import datetime
|
|
11
12
|
from enum import Enum
|
|
12
13
|
from pathlib import Path
|
|
13
|
-
from
|
|
14
|
-
from typing import Dict, List, Tuple, Union, Optional
|
|
14
|
+
from typing import Dict, List, Optional, Tuple, Union
|
|
15
15
|
|
|
16
16
|
# Use curl_cffi for requests
|
|
17
|
+
# Import trio before curl_cffi to prevent eventlet socket monkey-patching conflicts
|
|
18
|
+
# See: https://github.com/python-trio/trio/issues/3015
|
|
19
|
+
try:
|
|
20
|
+
import trio # noqa: F401
|
|
21
|
+
except ImportError:
|
|
22
|
+
pass # trio is optional, ignore if not available
|
|
17
23
|
from curl_cffi import CurlError
|
|
18
24
|
from curl_cffi.requests import AsyncSession
|
|
19
|
-
# Import common request exceptions (curl_cffi often wraps these)
|
|
20
|
-
from requests.exceptions import RequestException, Timeout, HTTPError
|
|
21
25
|
|
|
22
26
|
# For image models using validation. Adjust based on organization internal pydantic.
|
|
23
27
|
# Updated import for Pydantic V2
|
|
24
28
|
from pydantic import BaseModel, field_validator
|
|
25
29
|
|
|
30
|
+
# Import common request exceptions (curl_cffi often wraps these)
|
|
31
|
+
from requests.exceptions import HTTPError, RequestException, Timeout
|
|
32
|
+
|
|
26
33
|
# Rich is retained for logging within image methods.
|
|
27
34
|
from rich.console import Console
|
|
28
|
-
from rich.markdown import Markdown
|
|
29
35
|
|
|
30
36
|
console = Console()
|
|
31
37
|
|
|
@@ -875,7 +881,7 @@ class Image(BaseModel):
|
|
|
875
881
|
# Generate filename from URL if not provided
|
|
876
882
|
if not filename:
|
|
877
883
|
try:
|
|
878
|
-
from urllib.parse import
|
|
884
|
+
from urllib.parse import unquote, urlparse
|
|
879
885
|
parsed_url = urlparse(self.url)
|
|
880
886
|
base_filename = os.path.basename(unquote(parsed_url.path))
|
|
881
887
|
# Remove invalid characters for filenames
|