webscout 2025.10.18__tar.gz → 2025.10.19__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-2025.10.18/webscout.egg-info → webscout-2025.10.19}/PKG-INFO +1 -1
- webscout-2025.10.19/webscout/Provider/DeepAI.py +362 -0
- webscout-2025.10.19/webscout/Provider/OPENAI/DeepAI.py +300 -0
- webscout-2025.10.19/webscout/version.py +2 -0
- {webscout-2025.10.18 → webscout-2025.10.19/webscout.egg-info}/PKG-INFO +1 -1
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout.egg-info/SOURCES.txt +4 -0
- webscout-2025.10.18/webscout/version.py.bak +0 -2
- {webscout-2025.10.18 → webscout-2025.10.19}/LEGAL_NOTICE.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/LICENSE.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/MANIFEST.in +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/README.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/changelog.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/pyproject.toml +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/setup.cfg +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/AIauto.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/AIbase.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/AIutel.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Bard.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/Act.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/GitToolkit/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/GitToolkit/gitapi/README.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/GitToolkit/gitapi/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/GitToolkit/gitapi/repository.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/GitToolkit/gitapi/user.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/GitToolkit/gitapi/utils.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/README.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/YTdownloader.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/transcriber.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/README.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/channel.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/errors.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/extras.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/https.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/patterns.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/playlist.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/pool.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/query.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/stream.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/utils.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/video.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/autocoder/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/autocoder/autocoder.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/autocoder/autocoder_utiles.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/gguf.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/gguf.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/README.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/async_utils.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/base.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/cli.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/emailnator.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/mail_tm.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/temp_mail_io.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/weather.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/weather_ascii.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Litlogger/README.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Litlogger/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Litlogger/formats.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Litlogger/handlers.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Litlogger/levels.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Litlogger/logger.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/PERPLEXED_search.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/Perplexity.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/README.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/felo_search.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/genspark_search.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/hika_search.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/iask_search.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/monica_search.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/scira_search.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/stellar_search.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/webpilotai_search.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Aitopia.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Andi.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Apriel.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/ChatGPTClone.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/ChatSandbox.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/ClaudeOnline.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Cloudflare.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Cohere.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Deepinfra.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/ExaAI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/ExaChat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Flowith.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/GMI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Gemini.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/GeminiProxy.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/GithubChat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Gradient.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Groq.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/HeckAI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Jadve.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/K2Think.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Koboldai.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/LambdaChat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Nemotron.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Netwrck.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OLLAMA.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/Cloudflare.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/FalconH1.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/FreeGemini.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/GeminiProxy.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/K2Think.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/NEMOTRON.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/PI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/README.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/TogetherAI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/TwoAI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/ai4chat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/base.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/chatglm.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/chatgpt.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/chatgptclone.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/chatsandbox.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/deepinfra.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/e2b.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/exaai.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/exachat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/flowith.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/friendli.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/generate_api_key.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/gmi.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/groq.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/heckai.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/llmchatco.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/netwrck.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/oivscode.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/opkfc.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/pydantic_imports.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/scirachat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/sonus.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/standardinput.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/textpollinations.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/toolbaz.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/typefully.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/utils.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/venice.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/wisecat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/writecream.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/x0gpt.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/yep.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OpenGPT.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Openai.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/PI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Perplexitylabs.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/QwenLM.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/STT/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/STT/base.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/STT/elevenlabs.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Sambanova.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/StandardInput.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/README.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/aiarta.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/base.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/bing.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/claudeonline.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/gpt1image.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/imagen.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/infip.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/magicstudio.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/monochat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/piclumen.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/pixelmuse.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/pollinations.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/together.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/utils.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/venice.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/README.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/base.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/deepgram.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/elevenlabs.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/freetts.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/gesserit.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/murfai.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/openai_fm.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/parler.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/speechma.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/streamElements.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/utils.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TeachAnything.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TextPollinationsAI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TogetherAI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TwoAI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TypliAI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/ChatHub.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/ChutesAI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/GizAI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/Marcus.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/Qodo.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/VercelAIGateway.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/XenAI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/Youchat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/liner.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/liner_api_request.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/puterjs.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/samurai.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/test_lmarena.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Venice.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/VercelAI.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/WiseCat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/WrDoChat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/ai4chat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/akashgpt.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/cerebras.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/chatglm.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/cleeai.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/deepseek_assistant.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/elmo.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/geminiapi.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/granite.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/hermes.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/julius.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/learnfastai.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/llama3mitril.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/llmchat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/llmchatco.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/meta.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/oivscode.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/scira_chat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/searchchat.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/sonus.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/toolbaz.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/turboseek.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/typefully.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/x0gpt.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/yep.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/__main__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/cli.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/client.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/conversation.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/exceptions.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/litagent/Readme.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/litagent/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/litagent/agent.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/litagent/constants.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/litprinter/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/models.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/optimizers.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/prompt_manager.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/sanitize.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/README.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/core/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/core/crawler.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/core/scout.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/core/search_result.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/core/text_analyzer.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/core/text_utils.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/core/web_analyzer.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/element.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/parsers/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/parsers/html5lib_parser.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/parsers/html_parser.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/parsers/lxml_parser.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/utils.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/base.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/bing_main.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/duckduckgo_main.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/bing/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/bing/base.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/bing/images.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/bing/news.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/bing/suggestions.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/bing/text.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/brave.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/answers.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/base.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/images.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/maps.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/news.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/suggestions.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/text.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/translate.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/videos.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/weather.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/mojeek.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/wikipedia.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/answers.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/base.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/images.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/maps.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/news.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/suggestions.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/text.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/translate.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/videos.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/weather.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yandex.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yep/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yep/base.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yep/images.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yep/suggestions.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yep/text.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/http_client.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/results.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/yahoo_main.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/yep_main.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/config.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/exceptions.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/providers.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/request_models.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/request_processing.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/routes.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/schemas.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/server.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/simple_logger.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/Readme.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/core/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/core/cli.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/core/context.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/core/group.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/decorators/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/decorators/command.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/decorators/options.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/decorators/output.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/exceptions.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/plugins/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/plugins/base.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/plugins/manager.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/utils/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/utils/formatting.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/utils/parsing.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/update_checker.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/utils.py +0 -0
- /webscout-2025.10.18/webscout/version.py → /webscout-2025.10.19/webscout/version.py.bak +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/zeroart/README.md +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/zeroart/__init__.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/zeroart/base.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/zeroart/effects.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout/zeroart/fonts.py +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout.egg-info/dependency_links.txt +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout.egg-info/entry_points.txt +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout.egg-info/requires.txt +0 -0
- {webscout-2025.10.18 → webscout-2025.10.19}/webscout.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: webscout
|
|
3
|
-
Version: 2025.10.
|
|
3
|
+
Version: 2025.10.19
|
|
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
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
from curl_cffi.requests import Session
|
|
2
|
+
from curl_cffi import CurlError
|
|
3
|
+
import json
|
|
4
|
+
from typing import Any, Dict, List, Optional, Union, Iterator
|
|
5
|
+
|
|
6
|
+
from webscout.AIutel import Optimizers
|
|
7
|
+
from webscout.AIutel import Conversation
|
|
8
|
+
from webscout.AIutel import AwesomePrompts
|
|
9
|
+
from webscout.AIbase import Provider
|
|
10
|
+
from webscout import exceptions
|
|
11
|
+
from webscout.litagent import LitAgent
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class DeepAI(Provider):
|
|
15
|
+
"""
|
|
16
|
+
DeepAI Chat Provider
|
|
17
|
+
|
|
18
|
+
A provider for DeepAI's chat functionality, supporting both streaming and non-streaming responses.
|
|
19
|
+
Structured similarly to other providers like DeepInfra and X0GPT.
|
|
20
|
+
"""
|
|
21
|
+
required_auth = False
|
|
22
|
+
AVAILABLE_MODELS = [
|
|
23
|
+
"standard",
|
|
24
|
+
"genius",
|
|
25
|
+
"online",
|
|
26
|
+
"supergenius",
|
|
27
|
+
"onlinegenius",
|
|
28
|
+
"deepseek-v3.2",
|
|
29
|
+
"gemini-2.5-flash-lite",
|
|
30
|
+
"qwen3-30b-a3b",
|
|
31
|
+
"gpt-5-nano",
|
|
32
|
+
"gpt-oss-120b",
|
|
33
|
+
"gpt-5-chat-latest",
|
|
34
|
+
"claude-opus-4-1",
|
|
35
|
+
"llama-4-scout",
|
|
36
|
+
"claude-4.5-sonnet",
|
|
37
|
+
"deepseek-v3.1-terminus",
|
|
38
|
+
"llama-3.3-70b-instruct",
|
|
39
|
+
"grok-4",
|
|
40
|
+
"claude-sonnet-4",
|
|
41
|
+
"qwen3-coder",
|
|
42
|
+
"gpt-5",
|
|
43
|
+
"kimi-k2-0905",
|
|
44
|
+
"claude-opus-4",
|
|
45
|
+
"gpt-5-mini",
|
|
46
|
+
"gemini-2.5-pro",
|
|
47
|
+
"grok-code-fast-1",
|
|
48
|
+
"gpt-4.1",
|
|
49
|
+
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
def __init__(
|
|
53
|
+
self,
|
|
54
|
+
api_key: str = "tryit-53926507126-2c8a2543c7b5638ca6b92b6e53ef2d2b",
|
|
55
|
+
timeout: int = 30,
|
|
56
|
+
proxies: Optional[Dict[str, str]] = None,
|
|
57
|
+
model: str = "standard",
|
|
58
|
+
chat_style: str = "chat",
|
|
59
|
+
enabled_tools: Optional[List[str]] = None,
|
|
60
|
+
is_conversation: bool = True,
|
|
61
|
+
max_tokens: int = 2048,
|
|
62
|
+
intro: Optional[str] = None,
|
|
63
|
+
filepath: Optional[str] = None,
|
|
64
|
+
update_file: bool = True,
|
|
65
|
+
history_offset: int = 10250,
|
|
66
|
+
act: Optional[str] = None,
|
|
67
|
+
system_prompt: str = "You are a helpful assistant.",
|
|
68
|
+
browser: str = "chrome",
|
|
69
|
+
**kwargs
|
|
70
|
+
):
|
|
71
|
+
"""
|
|
72
|
+
Initialize the DeepAI provider.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
api_key: API key for authentication (trial key provided by default)
|
|
76
|
+
timeout: Request timeout in seconds
|
|
77
|
+
proxies: Proxy configuration
|
|
78
|
+
model: Model to use (default: "standard")
|
|
79
|
+
chat_style: Chat style (default: "chat")
|
|
80
|
+
enabled_tools: List of enabled tools (default: ["image_generator"])
|
|
81
|
+
is_conversation: Whether to maintain conversation history
|
|
82
|
+
max_tokens: Maximum tokens for conversation
|
|
83
|
+
intro: Introduction prompt
|
|
84
|
+
filepath: Path to conversation history file
|
|
85
|
+
update_file: Whether to update history file
|
|
86
|
+
history_offset: History offset for truncation
|
|
87
|
+
act: Act prompt from AwesomePrompts
|
|
88
|
+
system_prompt: System prompt for the AI
|
|
89
|
+
browser: Browser type for fingerprinting
|
|
90
|
+
**kwargs: Additional arguments
|
|
91
|
+
"""
|
|
92
|
+
if model not in self.AVAILABLE_MODELS:
|
|
93
|
+
raise ValueError(f"Invalid model: {model}. Choose from: {self.AVAILABLE_MODELS}")
|
|
94
|
+
|
|
95
|
+
self.url = "https://api.deepai.org/hacking_is_a_serious_crime"
|
|
96
|
+
self.api_key = api_key
|
|
97
|
+
self.proxies = proxies or {}
|
|
98
|
+
self.model = model
|
|
99
|
+
self.chat_style = chat_style
|
|
100
|
+
self.enabled_tools = enabled_tools or ["image_generator"]
|
|
101
|
+
self.system_prompt = system_prompt
|
|
102
|
+
self.is_conversation = is_conversation
|
|
103
|
+
self.max_tokens_to_sample = max_tokens
|
|
104
|
+
self.timeout = timeout
|
|
105
|
+
self.last_response = {}
|
|
106
|
+
|
|
107
|
+
# LitAgent for fingerprinting
|
|
108
|
+
self.agent = LitAgent()
|
|
109
|
+
self.fingerprint = self.agent.generate_fingerprint(browser)
|
|
110
|
+
|
|
111
|
+
# Setup headers similar to other providers
|
|
112
|
+
self.headers = {
|
|
113
|
+
"User-Agent": self.fingerprint.get("user_agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"),
|
|
114
|
+
"Accept": "*/*",
|
|
115
|
+
"Accept-Language": self.fingerprint.get("accept_language", "en-US,en;q=0.9"),
|
|
116
|
+
"Origin": "https://deepai.org",
|
|
117
|
+
"Referer": "https://deepai.org/",
|
|
118
|
+
"Sec-CH-UA": self.fingerprint.get("sec_ch_ua", '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"'),
|
|
119
|
+
"Sec-CH-UA-Mobile": "?0",
|
|
120
|
+
"Sec-CH-UA-Platform": f'"{self.fingerprint.get("platform", "Windows")}"',
|
|
121
|
+
"api-key": self.api_key
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
# Setup session
|
|
125
|
+
self.session = Session()
|
|
126
|
+
self.session.headers.update(self.headers)
|
|
127
|
+
self.session.proxies = self.proxies
|
|
128
|
+
|
|
129
|
+
# Optimizers
|
|
130
|
+
self.__available_optimizers = (
|
|
131
|
+
method
|
|
132
|
+
for method in dir(Optimizers)
|
|
133
|
+
if callable(getattr(Optimizers, method)) and not method.startswith("__")
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
# Conversation setup similar to other providers
|
|
137
|
+
Conversation.intro = (
|
|
138
|
+
AwesomePrompts().get_act(
|
|
139
|
+
act, raise_not_found=True, default=None, case_insensitive=True
|
|
140
|
+
)
|
|
141
|
+
if act
|
|
142
|
+
else intro or Conversation.intro
|
|
143
|
+
)
|
|
144
|
+
self.conversation = Conversation(
|
|
145
|
+
is_conversation, self.max_tokens_to_sample, filepath, update_file
|
|
146
|
+
)
|
|
147
|
+
self.conversation.history_offset = history_offset
|
|
148
|
+
|
|
149
|
+
def refresh_identity(self, browser: str = None):
|
|
150
|
+
"""
|
|
151
|
+
Refreshes the browser identity fingerprint.
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
browser: Specific browser to use for the new fingerprint
|
|
155
|
+
"""
|
|
156
|
+
browser = browser or self.fingerprint.get("browser_type", "chrome")
|
|
157
|
+
self.fingerprint = self.agent.generate_fingerprint(browser)
|
|
158
|
+
|
|
159
|
+
# Update relevant headers
|
|
160
|
+
self.headers.update({
|
|
161
|
+
"User-Agent": self.fingerprint.get("user_agent"),
|
|
162
|
+
"Accept-Language": self.fingerprint.get("accept_language"),
|
|
163
|
+
"Sec-CH-UA": self.fingerprint.get("sec_ch_ua"),
|
|
164
|
+
"Sec-CH-UA-Platform": f'"{self.fingerprint.get("platform")}"',
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
self.session.headers.update(self.headers)
|
|
168
|
+
return self.fingerprint
|
|
169
|
+
|
|
170
|
+
def ask(
|
|
171
|
+
self,
|
|
172
|
+
prompt: str,
|
|
173
|
+
stream: bool = False,
|
|
174
|
+
raw: bool = False,
|
|
175
|
+
optimizer: Optional[str] = None,
|
|
176
|
+
conversationally: bool = False,
|
|
177
|
+
**kwargs
|
|
178
|
+
) -> Union[Dict[str, Any], Iterator[Dict[str, Any]]]:
|
|
179
|
+
"""
|
|
180
|
+
Send a prompt to DeepAI and get the response.
|
|
181
|
+
|
|
182
|
+
Args:
|
|
183
|
+
prompt: The prompt to send
|
|
184
|
+
stream: Whether to stream the response (fake streaming: yields full response in one chunk)
|
|
185
|
+
raw: Whether to return raw response
|
|
186
|
+
optimizer: Optimizer to use
|
|
187
|
+
conversationally: Whether to apply optimizer to full conversation
|
|
188
|
+
**kwargs: Additional arguments
|
|
189
|
+
|
|
190
|
+
Returns:
|
|
191
|
+
Response dictionary with the AI response or generator for streaming
|
|
192
|
+
"""
|
|
193
|
+
# Generate conversation prompt similar to other providers
|
|
194
|
+
conversation_prompt = self.conversation.gen_complete_prompt(prompt)
|
|
195
|
+
|
|
196
|
+
if optimizer:
|
|
197
|
+
if optimizer in self.__available_optimizers:
|
|
198
|
+
conversation_prompt = getattr(Optimizers, optimizer)(
|
|
199
|
+
conversation_prompt if conversationally else prompt
|
|
200
|
+
)
|
|
201
|
+
else:
|
|
202
|
+
raise Exception(f"Optimizer is not one of {list(self.__available_optimizers)}")
|
|
203
|
+
|
|
204
|
+
# Prepare form data
|
|
205
|
+
# Use conversation_prompt as user content in chatHistory
|
|
206
|
+
chat_history = [
|
|
207
|
+
{"role": "system", "content": self.system_prompt},
|
|
208
|
+
{"role": "user", "content": conversation_prompt}
|
|
209
|
+
]
|
|
210
|
+
data = {
|
|
211
|
+
"chat_style": self.chat_style,
|
|
212
|
+
"chatHistory": json.dumps(chat_history),
|
|
213
|
+
"model": self.model,
|
|
214
|
+
"hacker_is_stinky": "very_stinky",
|
|
215
|
+
"enabled_tools": json.dumps(self.enabled_tools)
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
# Always perform non-streaming request
|
|
219
|
+
try:
|
|
220
|
+
# Make request with curl_cffi
|
|
221
|
+
response = self.session.post(
|
|
222
|
+
self.url,
|
|
223
|
+
data=data,
|
|
224
|
+
timeout=self.timeout,
|
|
225
|
+
impersonate="chrome110"
|
|
226
|
+
)
|
|
227
|
+
response.raise_for_status()
|
|
228
|
+
|
|
229
|
+
# Get response text
|
|
230
|
+
result = response.text.strip()
|
|
231
|
+
|
|
232
|
+
# Update last response and conversation history
|
|
233
|
+
self.last_response = {"text": result}
|
|
234
|
+
self.conversation.update_chat_history(prompt, result)
|
|
235
|
+
|
|
236
|
+
if stream:
|
|
237
|
+
# Fake streaming: yield the full response in one chunk
|
|
238
|
+
if raw:
|
|
239
|
+
yield result
|
|
240
|
+
else:
|
|
241
|
+
yield self.last_response
|
|
242
|
+
else:
|
|
243
|
+
return self.last_response if not raw else result
|
|
244
|
+
|
|
245
|
+
except CurlError as e:
|
|
246
|
+
raise exceptions.FailedToGenerateResponseError(f"DeepAI API request failed (CurlError): {str(e)}")
|
|
247
|
+
except Exception as e:
|
|
248
|
+
raise exceptions.FailedToGenerateResponseError(f"DeepAI API request failed ({type(e).__name__}): {str(e)}")
|
|
249
|
+
|
|
250
|
+
def chat(
|
|
251
|
+
self,
|
|
252
|
+
prompt: str,
|
|
253
|
+
stream: bool = False,
|
|
254
|
+
optimizer: Optional[str] = None,
|
|
255
|
+
conversationally: bool = False,
|
|
256
|
+
raw: bool = False,
|
|
257
|
+
**kwargs
|
|
258
|
+
) -> Union[str, Iterator[str]]:
|
|
259
|
+
"""
|
|
260
|
+
Send a chat message to DeepAI and get the response.
|
|
261
|
+
|
|
262
|
+
Args:
|
|
263
|
+
prompt: The prompt to send
|
|
264
|
+
stream: Whether to stream the response (fake streaming: yields full response in one chunk)
|
|
265
|
+
optimizer: Optimizer to use
|
|
266
|
+
conversationally: Whether to apply optimizer to full conversation
|
|
267
|
+
raw: Whether to return raw response
|
|
268
|
+
**kwargs: Additional arguments
|
|
269
|
+
|
|
270
|
+
Returns:
|
|
271
|
+
The AI response as a string or generator for streaming
|
|
272
|
+
"""
|
|
273
|
+
if stream:
|
|
274
|
+
for resp in self.ask(
|
|
275
|
+
prompt=prompt,
|
|
276
|
+
stream=True,
|
|
277
|
+
raw=raw,
|
|
278
|
+
optimizer=optimizer,
|
|
279
|
+
conversationally=conversationally,
|
|
280
|
+
**kwargs
|
|
281
|
+
):
|
|
282
|
+
if raw:
|
|
283
|
+
yield resp
|
|
284
|
+
else:
|
|
285
|
+
yield self.get_message(resp)
|
|
286
|
+
else:
|
|
287
|
+
response = self.ask(
|
|
288
|
+
prompt=prompt,
|
|
289
|
+
stream=False,
|
|
290
|
+
raw=raw,
|
|
291
|
+
optimizer=optimizer,
|
|
292
|
+
conversationally=conversationally,
|
|
293
|
+
**kwargs
|
|
294
|
+
)
|
|
295
|
+
if raw:
|
|
296
|
+
return response
|
|
297
|
+
else:
|
|
298
|
+
return self.get_message(response)
|
|
299
|
+
|
|
300
|
+
def get_message(self, response: Union[Dict[str, Any], str]) -> str:
|
|
301
|
+
"""
|
|
302
|
+
Extract the message from the response.
|
|
303
|
+
|
|
304
|
+
Args:
|
|
305
|
+
response: Response dictionary from ask method or str if raw
|
|
306
|
+
|
|
307
|
+
Returns:
|
|
308
|
+
The message text
|
|
309
|
+
"""
|
|
310
|
+
if isinstance(response, dict):
|
|
311
|
+
return response.get("text", "")
|
|
312
|
+
elif isinstance(response, str):
|
|
313
|
+
return response
|
|
314
|
+
else:
|
|
315
|
+
raise ValueError(f"Unexpected response type: {type(response)}")
|
|
316
|
+
|
|
317
|
+
@classmethod
|
|
318
|
+
def get_models(cls) -> List[str]:
|
|
319
|
+
"""
|
|
320
|
+
Get available models.
|
|
321
|
+
|
|
322
|
+
Returns:
|
|
323
|
+
List of available model names
|
|
324
|
+
"""
|
|
325
|
+
return cls.AVAILABLE_MODELS
|
|
326
|
+
|
|
327
|
+
@classmethod
|
|
328
|
+
def get_chat_styles(cls) -> List[str]:
|
|
329
|
+
"""
|
|
330
|
+
Get available chat styles.
|
|
331
|
+
|
|
332
|
+
Returns:
|
|
333
|
+
List of available chat styles
|
|
334
|
+
"""
|
|
335
|
+
return ["chat"]
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
if __name__ == "__main__":
|
|
339
|
+
# Test similar to other providers, using stream=True for consistency
|
|
340
|
+
print("-" * 80)
|
|
341
|
+
print(f"{'Model':<50} {'Status':<10} {'Response'}")
|
|
342
|
+
print("-" * 80)
|
|
343
|
+
|
|
344
|
+
for model in DeepAI.AVAILABLE_MODELS:
|
|
345
|
+
try:
|
|
346
|
+
test_ai = DeepAI(model=model, timeout=60)
|
|
347
|
+
response = test_ai.chat("Say 'Hello' in one word", stream=True)
|
|
348
|
+
response_text = ""
|
|
349
|
+
for chunk in response:
|
|
350
|
+
response_text += chunk
|
|
351
|
+
|
|
352
|
+
if response_text and len(response_text.strip()) > 0:
|
|
353
|
+
status = "✓"
|
|
354
|
+
# Clean and truncate response
|
|
355
|
+
clean_text = response_text.strip().encode('utf-8', errors='ignore').decode('utf-8')
|
|
356
|
+
display_text = clean_text[:50] + "..." if len(clean_text) > 50 else clean_text
|
|
357
|
+
else:
|
|
358
|
+
status = "✗"
|
|
359
|
+
display_text = "Empty or invalid response"
|
|
360
|
+
print(f"{model:<50} {status:<10} {display_text}")
|
|
361
|
+
except Exception as e:
|
|
362
|
+
print(f"{model:<50} {'✗':<10} {str(e)}")
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
"""
|
|
2
|
+
DeepAI Chat Provider for webscout
|
|
3
|
+
|
|
4
|
+
This provider implements the DeepAI chat API discovered through reverse engineering.
|
|
5
|
+
The API uses a POST endpoint with multipart/form-data containing chat history and parameters.
|
|
6
|
+
|
|
7
|
+
API Details:
|
|
8
|
+
- Endpoint: https://api.deepai.org/hacking_is_a_serious_crime
|
|
9
|
+
- Method: POST
|
|
10
|
+
- Authentication: api-key header (trial key provided)
|
|
11
|
+
- Content-Type: multipart/form-data
|
|
12
|
+
- Response: Plain text AI response
|
|
13
|
+
|
|
14
|
+
Features:
|
|
15
|
+
- Streaming and non-streaming support
|
|
16
|
+
- Conversation history management
|
|
17
|
+
- Error handling and retries
|
|
18
|
+
- Configurable model and chat style
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from typing import List, Dict, Optional, Union, Generator, Any
|
|
22
|
+
|
|
23
|
+
# Import requests for HTTP requests
|
|
24
|
+
import requests
|
|
25
|
+
|
|
26
|
+
# Standard library imports
|
|
27
|
+
import json
|
|
28
|
+
import time
|
|
29
|
+
import uuid
|
|
30
|
+
|
|
31
|
+
# Import base classes and utility structures
|
|
32
|
+
from .base import OpenAICompatibleProvider, BaseChat, BaseCompletions
|
|
33
|
+
from .utils import (
|
|
34
|
+
ChatCompletionChunk, ChatCompletion, Choice, ChoiceDelta,
|
|
35
|
+
ChatCompletionMessage, CompletionUsage
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# Attempt to import LitAgent, fallback if not available
|
|
39
|
+
try:
|
|
40
|
+
from webscout.litagent import LitAgent
|
|
41
|
+
except ImportError:
|
|
42
|
+
LitAgent = None
|
|
43
|
+
|
|
44
|
+
# --- DeepAI Client ---
|
|
45
|
+
|
|
46
|
+
class Completions(BaseCompletions):
|
|
47
|
+
def __init__(self, client: 'DeepAI'):
|
|
48
|
+
self._client = client
|
|
49
|
+
|
|
50
|
+
def create(
|
|
51
|
+
self,
|
|
52
|
+
*,
|
|
53
|
+
model: str,
|
|
54
|
+
messages: List[Dict[str, str]],
|
|
55
|
+
max_tokens: Optional[int] = 2049,
|
|
56
|
+
stream: bool = False,
|
|
57
|
+
temperature: Optional[float] = None,
|
|
58
|
+
top_p: Optional[float] = None,
|
|
59
|
+
tools: Optional[List[Union[Dict[str, Any], Any]]] = None,
|
|
60
|
+
tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
|
|
61
|
+
timeout: Optional[int] = None,
|
|
62
|
+
proxies: Optional[Dict[str, str]] = None,
|
|
63
|
+
**kwargs: Any
|
|
64
|
+
) -> Union[ChatCompletion, Generator[ChatCompletionChunk, None, None]]:
|
|
65
|
+
"""
|
|
66
|
+
Creates a model response for the given chat conversation.
|
|
67
|
+
Mimics openai.chat.completions.create
|
|
68
|
+
"""
|
|
69
|
+
payload = {
|
|
70
|
+
"chat_style": self._client.chat_style,
|
|
71
|
+
"chatHistory": json.dumps(messages),
|
|
72
|
+
"model": model,
|
|
73
|
+
"hacker_is_stinky": "very_stinky",
|
|
74
|
+
"enabled_tools": json.dumps(self._client.enabled_tools)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
# Add optional parameters if provided
|
|
78
|
+
if max_tokens is not None and max_tokens > 0:
|
|
79
|
+
payload["max_tokens"] = max_tokens
|
|
80
|
+
|
|
81
|
+
if temperature is not None:
|
|
82
|
+
payload["temperature"] = temperature
|
|
83
|
+
|
|
84
|
+
if top_p is not None:
|
|
85
|
+
payload["top_p"] = top_p
|
|
86
|
+
|
|
87
|
+
# Add any additional parameters
|
|
88
|
+
payload.update(kwargs)
|
|
89
|
+
|
|
90
|
+
request_id = f"chatcmpl-{uuid.uuid4()}"
|
|
91
|
+
created_time = int(time.time())
|
|
92
|
+
|
|
93
|
+
if stream:
|
|
94
|
+
return self._create_stream(request_id, created_time, model, payload)
|
|
95
|
+
else:
|
|
96
|
+
return self._create_non_stream(request_id, created_time, model, payload)
|
|
97
|
+
|
|
98
|
+
def _create_stream(
|
|
99
|
+
self, request_id: str, created_time: int, model: str, payload: Dict[str, Any]
|
|
100
|
+
) -> Generator[ChatCompletionChunk, None, None]:
|
|
101
|
+
# DeepAI doesn't actually support streaming, but we'll implement it for compatibility
|
|
102
|
+
# For now, just yield the non-stream response as a single chunk
|
|
103
|
+
try:
|
|
104
|
+
response = self._client.session.post(
|
|
105
|
+
"https://api.deepai.org/hacking_is_a_serious_crime",
|
|
106
|
+
data=payload,
|
|
107
|
+
timeout=self._client.timeout,
|
|
108
|
+
impersonate="chrome110" # Use impersonate for better compatibility
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
if response.status_code != 200:
|
|
112
|
+
raise IOError(f"DeepAI request failed with status code {response.status_code}: {response.text}")
|
|
113
|
+
|
|
114
|
+
# Get response text
|
|
115
|
+
content = response.text.strip()
|
|
116
|
+
|
|
117
|
+
# Create the delta object
|
|
118
|
+
delta = ChoiceDelta(
|
|
119
|
+
content=content,
|
|
120
|
+
role="assistant",
|
|
121
|
+
tool_calls=None
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
# Create the choice object
|
|
125
|
+
choice = Choice(
|
|
126
|
+
index=0,
|
|
127
|
+
delta=delta,
|
|
128
|
+
finish_reason="stop",
|
|
129
|
+
logprobs=None
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
# Create the chunk object
|
|
133
|
+
chunk = ChatCompletionChunk(
|
|
134
|
+
id=request_id,
|
|
135
|
+
choices=[choice],
|
|
136
|
+
created=created_time,
|
|
137
|
+
model=model,
|
|
138
|
+
system_fingerprint=None
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
# Set usage directly on the chunk object (estimated)
|
|
142
|
+
chunk.usage = {
|
|
143
|
+
"prompt_tokens": len(json.dumps(payload.get("chatHistory", []))),
|
|
144
|
+
"completion_tokens": len(content),
|
|
145
|
+
"total_tokens": len(json.dumps(payload.get("chatHistory", []))) + len(content),
|
|
146
|
+
"estimated_cost": None
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
yield chunk
|
|
150
|
+
|
|
151
|
+
except Exception as e:
|
|
152
|
+
print(f"Error during DeepAI stream request: {e}")
|
|
153
|
+
raise IOError(f"DeepAI request failed: {e}") from e
|
|
154
|
+
|
|
155
|
+
def _create_non_stream(
|
|
156
|
+
self, request_id: str, created_time: int, model: str, payload: Dict[str, Any]
|
|
157
|
+
) -> ChatCompletion:
|
|
158
|
+
try:
|
|
159
|
+
response = self._client.session.post(
|
|
160
|
+
"https://api.deepai.org/hacking_is_a_serious_crime",
|
|
161
|
+
data=payload,
|
|
162
|
+
timeout=self._client.timeout,
|
|
163
|
+
impersonate="chrome110" # Use impersonate for better compatibility
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
if response.status_code != 200:
|
|
167
|
+
raise IOError(f"DeepAI request failed with status code {response.status_code}: {response.text}")
|
|
168
|
+
|
|
169
|
+
# Get response text
|
|
170
|
+
content = response.text.strip()
|
|
171
|
+
|
|
172
|
+
# Create the message object
|
|
173
|
+
message = ChatCompletionMessage(
|
|
174
|
+
role="assistant",
|
|
175
|
+
content=content
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
# Create the choice object
|
|
179
|
+
choice = Choice(
|
|
180
|
+
index=0,
|
|
181
|
+
message=message,
|
|
182
|
+
finish_reason="stop"
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
# Create the usage object (estimated)
|
|
186
|
+
usage = CompletionUsage(
|
|
187
|
+
prompt_tokens=len(json.dumps(payload.get("chatHistory", []))),
|
|
188
|
+
completion_tokens=len(content),
|
|
189
|
+
total_tokens=len(json.dumps(payload.get("chatHistory", []))) + len(content)
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
# Create the completion object
|
|
193
|
+
completion = ChatCompletion(
|
|
194
|
+
id=request_id,
|
|
195
|
+
choices=[choice],
|
|
196
|
+
created=created_time,
|
|
197
|
+
model=model,
|
|
198
|
+
usage=usage,
|
|
199
|
+
)
|
|
200
|
+
return completion
|
|
201
|
+
|
|
202
|
+
except Exception as e:
|
|
203
|
+
print(f"Error during DeepAI non-stream request: {e}")
|
|
204
|
+
raise IOError(f"DeepAI request failed: {e}") from e
|
|
205
|
+
|
|
206
|
+
class Chat(BaseChat):
|
|
207
|
+
def __init__(self, client: 'DeepAI'):
|
|
208
|
+
self.completions = Completions(client)
|
|
209
|
+
|
|
210
|
+
class DeepAI(OpenAICompatibleProvider):
|
|
211
|
+
AVAILABLE_MODELS = [
|
|
212
|
+
"standard",
|
|
213
|
+
"genius",
|
|
214
|
+
"online",
|
|
215
|
+
"supergenius",
|
|
216
|
+
"onlinegenius",
|
|
217
|
+
"deepseek-v3.2",
|
|
218
|
+
"gemini-2.5-flash-lite",
|
|
219
|
+
"qwen3-30b-a3b",
|
|
220
|
+
"gpt-5-nano",
|
|
221
|
+
"gpt-oss-120b",
|
|
222
|
+
"gpt-5-chat-latest",
|
|
223
|
+
"claude-opus-4-1",
|
|
224
|
+
"llama-4-scout",
|
|
225
|
+
"claude-4.5-sonnet",
|
|
226
|
+
"deepseek-v3.1-terminus",
|
|
227
|
+
"llama-3.3-70b-instruct",
|
|
228
|
+
"grok-4",
|
|
229
|
+
"claude-sonnet-4",
|
|
230
|
+
"qwen3-coder",
|
|
231
|
+
"gpt-5",
|
|
232
|
+
"kimi-k2-0905",
|
|
233
|
+
"claude-opus-4",
|
|
234
|
+
"gpt-5-mini",
|
|
235
|
+
"gemini-2.5-pro",
|
|
236
|
+
"grok-code-fast-1",
|
|
237
|
+
"gpt-4.1",
|
|
238
|
+
|
|
239
|
+
]
|
|
240
|
+
|
|
241
|
+
def __init__(
|
|
242
|
+
self,
|
|
243
|
+
api_key: str = "tryit-53926507126-2c8a2543c7b5638ca6b92b6e53ef2d2b",
|
|
244
|
+
timeout: Optional[int] = 30,
|
|
245
|
+
browser: str = "chrome",
|
|
246
|
+
model: str = "standard",
|
|
247
|
+
chat_style: str = "chat",
|
|
248
|
+
enabled_tools: Optional[List[str]] = None,
|
|
249
|
+
**kwargs
|
|
250
|
+
):
|
|
251
|
+
self.timeout = timeout
|
|
252
|
+
self.api_key = api_key
|
|
253
|
+
self.model = model
|
|
254
|
+
self.chat_style = chat_style
|
|
255
|
+
self.enabled_tools = enabled_tools or ["image_generator"]
|
|
256
|
+
|
|
257
|
+
# Initialize requests Session
|
|
258
|
+
self.session = requests.Session()
|
|
259
|
+
|
|
260
|
+
# Set up headers with API key
|
|
261
|
+
self.headers = {
|
|
262
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
263
|
+
"api-key": self.api_key,
|
|
264
|
+
"Accept": "text/plain, */*",
|
|
265
|
+
"Accept-Encoding": "gzip, deflate, br",
|
|
266
|
+
"Accept-Language": "en-US,en;q=0.9",
|
|
267
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
# Update session headers
|
|
271
|
+
self.session.headers.update(self.headers) # Initialize chat interface
|
|
272
|
+
self.chat = Chat(self)
|
|
273
|
+
|
|
274
|
+
@classmethod
|
|
275
|
+
def get_models(cls, api_key: str = None):
|
|
276
|
+
"""Fetch available models from DeepAI API.
|
|
277
|
+
|
|
278
|
+
Args:
|
|
279
|
+
api_key (str, optional): DeepAI API key. If not provided, returns default models.
|
|
280
|
+
|
|
281
|
+
Returns:
|
|
282
|
+
list: List of available model IDs
|
|
283
|
+
"""
|
|
284
|
+
return cls.AVAILABLE_MODELS
|
|
285
|
+
|
|
286
|
+
@property
|
|
287
|
+
def models(self):
|
|
288
|
+
class _ModelList:
|
|
289
|
+
def list(inner_self):
|
|
290
|
+
return type(self).AVAILABLE_MODELS
|
|
291
|
+
return _ModelList()
|
|
292
|
+
|
|
293
|
+
if __name__ == "__main__":
|
|
294
|
+
client = DeepAI()
|
|
295
|
+
response = client.chat.completions.create(
|
|
296
|
+
model="standard",
|
|
297
|
+
messages=[{"role": "user", "content": "Hello!"}],
|
|
298
|
+
stream=False
|
|
299
|
+
)
|
|
300
|
+
print(response.choices[0].message.content)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: webscout
|
|
3
|
-
Version: 2025.10.
|
|
3
|
+
Version: 2025.10.19
|
|
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
|