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.

Files changed (349) hide show
  1. {webscout-2025.10.18/webscout.egg-info → webscout-2025.10.19}/PKG-INFO +1 -1
  2. webscout-2025.10.19/webscout/Provider/DeepAI.py +362 -0
  3. webscout-2025.10.19/webscout/Provider/OPENAI/DeepAI.py +300 -0
  4. webscout-2025.10.19/webscout/version.py +2 -0
  5. {webscout-2025.10.18 → webscout-2025.10.19/webscout.egg-info}/PKG-INFO +1 -1
  6. {webscout-2025.10.18 → webscout-2025.10.19}/webscout.egg-info/SOURCES.txt +4 -0
  7. webscout-2025.10.18/webscout/version.py.bak +0 -2
  8. {webscout-2025.10.18 → webscout-2025.10.19}/LEGAL_NOTICE.md +0 -0
  9. {webscout-2025.10.18 → webscout-2025.10.19}/LICENSE.md +0 -0
  10. {webscout-2025.10.18 → webscout-2025.10.19}/MANIFEST.in +0 -0
  11. {webscout-2025.10.18 → webscout-2025.10.19}/README.md +0 -0
  12. {webscout-2025.10.18 → webscout-2025.10.19}/changelog.md +0 -0
  13. {webscout-2025.10.18 → webscout-2025.10.19}/pyproject.toml +0 -0
  14. {webscout-2025.10.18 → webscout-2025.10.19}/setup.cfg +0 -0
  15. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/AIauto.py +0 -0
  16. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/AIbase.py +0 -0
  17. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/AIutel.py +0 -0
  18. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Bard.py +0 -0
  19. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/Act.md +0 -0
  20. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/GitToolkit/__init__.py +0 -0
  21. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/GitToolkit/gitapi/README.md +0 -0
  22. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/GitToolkit/gitapi/__init__.py +0 -0
  23. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/GitToolkit/gitapi/repository.py +0 -0
  24. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/GitToolkit/gitapi/user.py +0 -0
  25. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/GitToolkit/gitapi/utils.py +0 -0
  26. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/README.md +0 -0
  27. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/YTdownloader.py +0 -0
  28. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/__init__.py +0 -0
  29. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/transcriber.py +0 -0
  30. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/README.md +0 -0
  31. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/__init__.py +0 -0
  32. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/channel.py +0 -0
  33. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/errors.py +0 -0
  34. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/extras.py +0 -0
  35. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/https.py +0 -0
  36. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/patterns.py +0 -0
  37. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/playlist.py +0 -0
  38. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/pool.py +0 -0
  39. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/query.py +0 -0
  40. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/stream.py +0 -0
  41. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/utils.py +0 -0
  42. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/YTToolkit/ytapi/video.py +0 -0
  43. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/__init__.py +0 -0
  44. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/autocoder/__init__.py +0 -0
  45. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/autocoder/autocoder.py +0 -0
  46. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/autocoder/autocoder_utiles.py +0 -0
  47. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/gguf.md +0 -0
  48. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/gguf.py +0 -0
  49. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/README.md +0 -0
  50. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/__init__.py +0 -0
  51. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/async_utils.py +0 -0
  52. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/base.py +0 -0
  53. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/cli.py +0 -0
  54. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/emailnator.py +0 -0
  55. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/mail_tm.py +0 -0
  56. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/tempmail/temp_mail_io.py +0 -0
  57. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/weather.py +0 -0
  58. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Extra/weather_ascii.py +0 -0
  59. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Litlogger/README.md +0 -0
  60. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Litlogger/__init__.py +0 -0
  61. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Litlogger/formats.py +0 -0
  62. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Litlogger/handlers.py +0 -0
  63. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Litlogger/levels.py +0 -0
  64. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Litlogger/logger.py +0 -0
  65. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/PERPLEXED_search.py +0 -0
  66. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/Perplexity.py +0 -0
  67. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/README.md +0 -0
  68. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/__init__.py +0 -0
  69. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/felo_search.py +0 -0
  70. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/genspark_search.py +0 -0
  71. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/hika_search.py +0 -0
  72. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/iask_search.py +0 -0
  73. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/monica_search.py +0 -0
  74. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/scira_search.py +0 -0
  75. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/stellar_search.py +0 -0
  76. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/AISEARCH/webpilotai_search.py +0 -0
  77. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Aitopia.py +0 -0
  78. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Andi.py +0 -0
  79. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Apriel.py +0 -0
  80. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/ChatGPTClone.py +0 -0
  81. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/ChatSandbox.py +0 -0
  82. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/ClaudeOnline.py +0 -0
  83. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Cloudflare.py +0 -0
  84. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Cohere.py +0 -0
  85. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Deepinfra.py +0 -0
  86. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/ExaAI.py +0 -0
  87. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/ExaChat.py +0 -0
  88. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Flowith.py +0 -0
  89. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/GMI.py +0 -0
  90. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Gemini.py +0 -0
  91. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/GeminiProxy.py +0 -0
  92. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/GithubChat.py +0 -0
  93. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Gradient.py +0 -0
  94. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Groq.py +0 -0
  95. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/HeckAI.py +0 -0
  96. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Jadve.py +0 -0
  97. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/K2Think.py +0 -0
  98. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Koboldai.py +0 -0
  99. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/LambdaChat.py +0 -0
  100. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Nemotron.py +0 -0
  101. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Netwrck.py +0 -0
  102. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OLLAMA.py +0 -0
  103. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/Cloudflare.py +0 -0
  104. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/FalconH1.py +0 -0
  105. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/FreeGemini.py +0 -0
  106. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/GeminiProxy.py +0 -0
  107. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/K2Think.py +0 -0
  108. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/NEMOTRON.py +0 -0
  109. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/PI.py +0 -0
  110. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/README.md +0 -0
  111. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/TogetherAI.py +0 -0
  112. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/TwoAI.py +0 -0
  113. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/__init__.py +0 -0
  114. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/ai4chat.py +0 -0
  115. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/base.py +0 -0
  116. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/chatglm.py +0 -0
  117. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/chatgpt.py +0 -0
  118. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/chatgptclone.py +0 -0
  119. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/chatsandbox.py +0 -0
  120. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/deepinfra.py +0 -0
  121. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/e2b.py +0 -0
  122. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/exaai.py +0 -0
  123. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/exachat.py +0 -0
  124. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/flowith.py +0 -0
  125. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/friendli.py +0 -0
  126. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/generate_api_key.py +0 -0
  127. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/gmi.py +0 -0
  128. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/groq.py +0 -0
  129. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/heckai.py +0 -0
  130. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/llmchatco.py +0 -0
  131. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/netwrck.py +0 -0
  132. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/oivscode.py +0 -0
  133. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/opkfc.py +0 -0
  134. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/pydantic_imports.py +0 -0
  135. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/scirachat.py +0 -0
  136. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/sonus.py +0 -0
  137. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/standardinput.py +0 -0
  138. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/textpollinations.py +0 -0
  139. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/toolbaz.py +0 -0
  140. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/typefully.py +0 -0
  141. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/utils.py +0 -0
  142. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/venice.py +0 -0
  143. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/wisecat.py +0 -0
  144. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/writecream.py +0 -0
  145. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/x0gpt.py +0 -0
  146. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OPENAI/yep.py +0 -0
  147. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/OpenGPT.py +0 -0
  148. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Openai.py +0 -0
  149. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/PI.py +0 -0
  150. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Perplexitylabs.py +0 -0
  151. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/QwenLM.py +0 -0
  152. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/STT/__init__.py +0 -0
  153. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/STT/base.py +0 -0
  154. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/STT/elevenlabs.py +0 -0
  155. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Sambanova.py +0 -0
  156. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/StandardInput.py +0 -0
  157. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/README.md +0 -0
  158. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/__init__.py +0 -0
  159. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/aiarta.py +0 -0
  160. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/base.py +0 -0
  161. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/bing.py +0 -0
  162. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/claudeonline.py +0 -0
  163. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/gpt1image.py +0 -0
  164. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/imagen.py +0 -0
  165. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/infip.py +0 -0
  166. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/magicstudio.py +0 -0
  167. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/monochat.py +0 -0
  168. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/piclumen.py +0 -0
  169. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/pixelmuse.py +0 -0
  170. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/pollinations.py +0 -0
  171. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/together.py +0 -0
  172. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/utils.py +0 -0
  173. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTI/venice.py +0 -0
  174. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/README.md +0 -0
  175. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/__init__.py +0 -0
  176. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/base.py +0 -0
  177. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/deepgram.py +0 -0
  178. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/elevenlabs.py +0 -0
  179. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/freetts.py +0 -0
  180. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/gesserit.py +0 -0
  181. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/murfai.py +0 -0
  182. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/openai_fm.py +0 -0
  183. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/parler.py +0 -0
  184. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/speechma.py +0 -0
  185. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/streamElements.py +0 -0
  186. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TTS/utils.py +0 -0
  187. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TeachAnything.py +0 -0
  188. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TextPollinationsAI.py +0 -0
  189. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TogetherAI.py +0 -0
  190. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TwoAI.py +0 -0
  191. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/TypliAI.py +0 -0
  192. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/ChatHub.py +0 -0
  193. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/ChutesAI.py +0 -0
  194. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/GizAI.py +0 -0
  195. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/Marcus.py +0 -0
  196. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/Qodo.py +0 -0
  197. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/VercelAIGateway.py +0 -0
  198. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/XenAI.py +0 -0
  199. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/Youchat.py +0 -0
  200. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/liner.py +0 -0
  201. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/liner_api_request.py +0 -0
  202. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/puterjs.py +0 -0
  203. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/samurai.py +0 -0
  204. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/UNFINISHED/test_lmarena.py +0 -0
  205. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/Venice.py +0 -0
  206. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/VercelAI.py +0 -0
  207. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/WiseCat.py +0 -0
  208. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/WrDoChat.py +0 -0
  209. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/__init__.py +0 -0
  210. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/ai4chat.py +0 -0
  211. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/akashgpt.py +0 -0
  212. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/cerebras.py +0 -0
  213. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/chatglm.py +0 -0
  214. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/cleeai.py +0 -0
  215. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/deepseek_assistant.py +0 -0
  216. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/elmo.py +0 -0
  217. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/geminiapi.py +0 -0
  218. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/granite.py +0 -0
  219. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/hermes.py +0 -0
  220. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/julius.py +0 -0
  221. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/learnfastai.py +0 -0
  222. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/llama3mitril.py +0 -0
  223. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/llmchat.py +0 -0
  224. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/llmchatco.py +0 -0
  225. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/meta.py +0 -0
  226. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/oivscode.py +0 -0
  227. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/scira_chat.py +0 -0
  228. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/searchchat.py +0 -0
  229. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/sonus.py +0 -0
  230. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/toolbaz.py +0 -0
  231. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/turboseek.py +0 -0
  232. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/typefully.py +0 -0
  233. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/x0gpt.py +0 -0
  234. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/Provider/yep.py +0 -0
  235. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/__init__.py +0 -0
  236. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/__main__.py +0 -0
  237. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/cli.py +0 -0
  238. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/client.py +0 -0
  239. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/conversation.py +0 -0
  240. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/exceptions.py +0 -0
  241. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/litagent/Readme.md +0 -0
  242. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/litagent/__init__.py +0 -0
  243. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/litagent/agent.py +0 -0
  244. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/litagent/constants.py +0 -0
  245. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/litprinter/__init__.py +0 -0
  246. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/models.py +0 -0
  247. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/optimizers.py +0 -0
  248. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/prompt_manager.py +0 -0
  249. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/sanitize.py +0 -0
  250. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/README.md +0 -0
  251. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/__init__.py +0 -0
  252. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/core/__init__.py +0 -0
  253. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/core/crawler.py +0 -0
  254. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/core/scout.py +0 -0
  255. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/core/search_result.py +0 -0
  256. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/core/text_analyzer.py +0 -0
  257. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/core/text_utils.py +0 -0
  258. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/core/web_analyzer.py +0 -0
  259. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/element.py +0 -0
  260. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/parsers/__init__.py +0 -0
  261. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/parsers/html5lib_parser.py +0 -0
  262. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/parsers/html_parser.py +0 -0
  263. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/parsers/lxml_parser.py +0 -0
  264. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/scout/utils.py +0 -0
  265. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/__init__.py +0 -0
  266. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/base.py +0 -0
  267. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/bing_main.py +0 -0
  268. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/duckduckgo_main.py +0 -0
  269. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/__init__.py +0 -0
  270. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/bing/__init__.py +0 -0
  271. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/bing/base.py +0 -0
  272. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/bing/images.py +0 -0
  273. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/bing/news.py +0 -0
  274. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/bing/suggestions.py +0 -0
  275. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/bing/text.py +0 -0
  276. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/brave.py +0 -0
  277. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/__init__.py +0 -0
  278. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/answers.py +0 -0
  279. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/base.py +0 -0
  280. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/images.py +0 -0
  281. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/maps.py +0 -0
  282. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/news.py +0 -0
  283. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/suggestions.py +0 -0
  284. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/text.py +0 -0
  285. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/translate.py +0 -0
  286. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/videos.py +0 -0
  287. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/duckduckgo/weather.py +0 -0
  288. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/mojeek.py +0 -0
  289. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/wikipedia.py +0 -0
  290. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/__init__.py +0 -0
  291. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/answers.py +0 -0
  292. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/base.py +0 -0
  293. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/images.py +0 -0
  294. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/maps.py +0 -0
  295. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/news.py +0 -0
  296. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/suggestions.py +0 -0
  297. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/text.py +0 -0
  298. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/translate.py +0 -0
  299. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/videos.py +0 -0
  300. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yahoo/weather.py +0 -0
  301. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yandex.py +0 -0
  302. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yep/__init__.py +0 -0
  303. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yep/base.py +0 -0
  304. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yep/images.py +0 -0
  305. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yep/suggestions.py +0 -0
  306. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/engines/yep/text.py +0 -0
  307. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/http_client.py +0 -0
  308. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/results.py +0 -0
  309. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/yahoo_main.py +0 -0
  310. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/search/yep_main.py +0 -0
  311. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/__init__.py +0 -0
  312. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/config.py +0 -0
  313. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/exceptions.py +0 -0
  314. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/providers.py +0 -0
  315. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/request_models.py +0 -0
  316. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/request_processing.py +0 -0
  317. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/routes.py +0 -0
  318. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/schemas.py +0 -0
  319. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/server.py +0 -0
  320. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/server/simple_logger.py +0 -0
  321. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/Readme.md +0 -0
  322. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/__init__.py +0 -0
  323. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/core/__init__.py +0 -0
  324. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/core/cli.py +0 -0
  325. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/core/context.py +0 -0
  326. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/core/group.py +0 -0
  327. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/decorators/__init__.py +0 -0
  328. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/decorators/command.py +0 -0
  329. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/decorators/options.py +0 -0
  330. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/decorators/output.py +0 -0
  331. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/exceptions.py +0 -0
  332. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/plugins/__init__.py +0 -0
  333. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/plugins/base.py +0 -0
  334. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/plugins/manager.py +0 -0
  335. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/utils/__init__.py +0 -0
  336. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/utils/formatting.py +0 -0
  337. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/swiftcli/utils/parsing.py +0 -0
  338. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/update_checker.py +0 -0
  339. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/utils.py +0 -0
  340. /webscout-2025.10.18/webscout/version.py → /webscout-2025.10.19/webscout/version.py.bak +0 -0
  341. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/zeroart/README.md +0 -0
  342. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/zeroart/__init__.py +0 -0
  343. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/zeroart/base.py +0 -0
  344. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/zeroart/effects.py +0 -0
  345. {webscout-2025.10.18 → webscout-2025.10.19}/webscout/zeroart/fonts.py +0 -0
  346. {webscout-2025.10.18 → webscout-2025.10.19}/webscout.egg-info/dependency_links.txt +0 -0
  347. {webscout-2025.10.18 → webscout-2025.10.19}/webscout.egg-info/entry_points.txt +0 -0
  348. {webscout-2025.10.18 → webscout-2025.10.19}/webscout.egg-info/requires.txt +0 -0
  349. {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.18
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)
@@ -0,0 +1,2 @@
1
+ __version__ = "2025.10.19"
2
+ __prog__ = "webscout"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: webscout
3
- Version: 2025.10.18
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