webscout 6.8__tar.gz → 7.0__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 (211) hide show
  1. {webscout-6.8/webscout.egg-info → webscout-7.0}/PKG-INFO +18 -34
  2. {webscout-6.8 → webscout-7.0}/README.md +2 -32
  3. {webscout-6.8 → webscout-7.0}/setup.py +3 -1
  4. {webscout-6.8 → webscout-7.0}/webscout/AIbase.py +12 -2
  5. {webscout-6.8 → webscout-7.0}/webscout/DWEBS.py +38 -22
  6. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/YTdownloader.py +7 -2
  7. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/ytapi/channel.py +1 -1
  8. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/ytapi/query.py +3 -0
  9. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/ytapi/stream.py +3 -0
  10. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/ytapi/video.py +3 -1
  11. {webscout-6.8 → webscout-7.0}/webscout/Extra/autocoder/autocoder_utiles.py +68 -7
  12. {webscout-6.8 → webscout-7.0}/webscout/Extra/autollama.py +0 -16
  13. {webscout-6.8 → webscout-7.0}/webscout/Extra/gguf.py +0 -13
  14. webscout-7.0/webscout/Provider/AISEARCH/DeepFind.py +251 -0
  15. webscout-7.0/webscout/Provider/AISEARCH/__init__.py +2 -0
  16. webscout-7.0/webscout/Provider/AISEARCH/felo_search.py +229 -0
  17. {webscout-6.8 → webscout-7.0}/webscout/Provider/Blackboxai.py +1 -1
  18. webscout-7.0/webscout/Provider/Glider.py +207 -0
  19. webscout-7.0/webscout/Provider/HF_space/__init__.py +0 -0
  20. webscout-7.0/webscout/Provider/HF_space/qwen_qwen2.py +206 -0
  21. webscout-7.0/webscout/Provider/TextPollinationsAI.py +201 -0
  22. {webscout-6.8 → webscout-7.0}/webscout/Provider/Youchat.py +28 -22
  23. {webscout-6.8 → webscout-7.0}/webscout/Provider/__init__.py +11 -3
  24. {webscout-6.8 → webscout-7.0}/webscout/Provider/askmyai.py +2 -2
  25. {webscout-6.8 → webscout-7.0}/webscout/Provider/cerebras.py +3 -3
  26. webscout-7.0/webscout/Provider/chatglm.py +205 -0
  27. webscout-7.0/webscout/Provider/dgaf.py +186 -0
  28. webscout-7.0/webscout/Provider/hermes.py +219 -0
  29. {webscout-6.8 → webscout-7.0}/webscout/Provider/llmchat.py +1 -0
  30. {webscout-6.8 → webscout-7.0}/webscout/__init__.py +0 -1
  31. webscout-7.0/webscout/litagent/__init__.py +29 -0
  32. webscout-6.8/webscout/litagent/__init__.py → webscout-7.0/webscout/litagent/agent.py +120 -172
  33. webscout-7.0/webscout/litagent/constants.py +31 -0
  34. {webscout-6.8 → webscout-7.0}/webscout/swiftcli/__init__.py +1 -0
  35. {webscout-6.8 → webscout-7.0}/webscout/tempid.py +0 -4
  36. {webscout-6.8 → webscout-7.0}/webscout/version.py +1 -1
  37. {webscout-6.8 → webscout-7.0}/webscout/webscout_search.py +1140 -1104
  38. webscout-7.0/webscout/webscout_search_async.py +636 -0
  39. {webscout-6.8 → webscout-7.0/webscout.egg-info}/PKG-INFO +18 -34
  40. {webscout-6.8 → webscout-7.0}/webscout.egg-info/SOURCES.txt +10 -4
  41. {webscout-6.8 → webscout-7.0}/webscout.egg-info/requires.txt +3 -0
  42. webscout-6.8/webscout/Extra/markdownlite/__init__.py +0 -862
  43. webscout-6.8/webscout/Provider/AISEARCH/__init__.py +0 -2
  44. webscout-6.8/webscout/Provider/AISEARCH/felo_search.py +0 -180
  45. webscout-6.8/webscout/Provider/AISEARCH/ooai.py +0 -155
  46. webscout-6.8/webscout/Provider/Deepseek.py +0 -227
  47. webscout-6.8/webscout/webscout_search_async.py +0 -362
  48. webscout-6.8/webscout/zerodir/__init__.py +0 -225
  49. {webscout-6.8 → webscout-7.0}/LICENSE.md +0 -0
  50. {webscout-6.8 → webscout-7.0}/setup.cfg +0 -0
  51. {webscout-6.8 → webscout-7.0}/webscout/AIauto.py +0 -0
  52. {webscout-6.8 → webscout-7.0}/webscout/AIutel.py +0 -0
  53. {webscout-6.8 → webscout-7.0}/webscout/Bard.py +0 -0
  54. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/__init__.py +0 -0
  55. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/transcriber.py +0 -0
  56. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/ytapi/__init__.py +0 -0
  57. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/ytapi/errors.py +0 -0
  58. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/ytapi/extras.py +0 -0
  59. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/ytapi/https.py +0 -0
  60. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/ytapi/patterns.py +0 -0
  61. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/ytapi/playlist.py +0 -0
  62. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/ytapi/pool.py +0 -0
  63. {webscout-6.8 → webscout-7.0}/webscout/Extra/YTToolkit/ytapi/utils.py +0 -0
  64. {webscout-6.8 → webscout-7.0}/webscout/Extra/__init__.py +0 -0
  65. {webscout-6.8 → webscout-7.0}/webscout/Extra/autocoder/__init__.py +0 -0
  66. {webscout-6.8 → webscout-7.0}/webscout/Extra/autocoder/rawdog.py +0 -0
  67. {webscout-6.8 → webscout-7.0}/webscout/Extra/weather.py +0 -0
  68. {webscout-6.8 → webscout-7.0}/webscout/Extra/weather_ascii.py +0 -0
  69. {webscout-6.8 → webscout-7.0}/webscout/LLM.py +0 -0
  70. {webscout-6.8 → webscout-7.0}/webscout/Litlogger/__init__.py +0 -0
  71. {webscout-6.8 → webscout-7.0}/webscout/Local/__init__.py +0 -0
  72. {webscout-6.8 → webscout-7.0}/webscout/Local/_version.py +0 -0
  73. {webscout-6.8 → webscout-7.0}/webscout/Local/formats.py +0 -0
  74. {webscout-6.8 → webscout-7.0}/webscout/Local/model.py +0 -0
  75. {webscout-6.8 → webscout-7.0}/webscout/Local/samplers.py +0 -0
  76. {webscout-6.8 → webscout-7.0}/webscout/Local/thread.py +0 -0
  77. {webscout-6.8 → webscout-7.0}/webscout/Local/ui.py +0 -0
  78. {webscout-6.8 → webscout-7.0}/webscout/Local/utils.py +0 -0
  79. {webscout-6.8 → webscout-7.0}/webscout/Provider/AI21.py +0 -0
  80. {webscout-6.8 → webscout-7.0}/webscout/Provider/Amigo.py +0 -0
  81. {webscout-6.8 → webscout-7.0}/webscout/Provider/Andi.py +0 -0
  82. {webscout-6.8 → webscout-7.0}/webscout/Provider/Bing.py +0 -0
  83. {webscout-6.8 → webscout-7.0}/webscout/Provider/ChatGPTES.py +0 -0
  84. {webscout-6.8 → webscout-7.0}/webscout/Provider/Chatify.py +0 -0
  85. {webscout-6.8 → webscout-7.0}/webscout/Provider/Cloudflare.py +0 -0
  86. {webscout-6.8 → webscout-7.0}/webscout/Provider/Cohere.py +0 -0
  87. {webscout-6.8 → webscout-7.0}/webscout/Provider/DARKAI.py +0 -0
  88. {webscout-6.8 → webscout-7.0}/webscout/Provider/Deepinfra.py +0 -0
  89. {webscout-6.8 → webscout-7.0}/webscout/Provider/DiscordRocks.py +0 -0
  90. {webscout-6.8 → webscout-7.0}/webscout/Provider/EDITEE.py +0 -0
  91. {webscout-6.8 → webscout-7.0}/webscout/Provider/Free2GPT.py +0 -0
  92. {webscout-6.8 → webscout-7.0}/webscout/Provider/GPTWeb.py +0 -0
  93. {webscout-6.8 → webscout-7.0}/webscout/Provider/Gemini.py +0 -0
  94. {webscout-6.8 → webscout-7.0}/webscout/Provider/Groq.py +0 -0
  95. {webscout-6.8 → webscout-7.0}/webscout/Provider/Jadve.py +0 -0
  96. {webscout-6.8 → webscout-7.0}/webscout/Provider/Koboldai.py +0 -0
  97. {webscout-6.8 → webscout-7.0}/webscout/Provider/Llama.py +0 -0
  98. {webscout-6.8 → webscout-7.0}/webscout/Provider/Llama3.py +0 -0
  99. {webscout-6.8 → webscout-7.0}/webscout/Provider/Marcus.py +0 -0
  100. {webscout-6.8 → webscout-7.0}/webscout/Provider/Netwrck.py +0 -0
  101. {webscout-6.8 → webscout-7.0}/webscout/Provider/OLLAMA.py +0 -0
  102. {webscout-6.8 → webscout-7.0}/webscout/Provider/Openai.py +0 -0
  103. {webscout-6.8 → webscout-7.0}/webscout/Provider/PI.py +0 -0
  104. {webscout-6.8 → webscout-7.0}/webscout/Provider/Phind.py +0 -0
  105. {webscout-6.8 → webscout-7.0}/webscout/Provider/PizzaGPT.py +0 -0
  106. {webscout-6.8 → webscout-7.0}/webscout/Provider/RUBIKSAI.py +0 -0
  107. {webscout-6.8 → webscout-7.0}/webscout/Provider/Reka.py +0 -0
  108. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/AiForce/__init__.py +0 -0
  109. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/AiForce/async_aiforce.py +0 -0
  110. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/AiForce/sync_aiforce.py +0 -0
  111. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/Nexra/__init__.py +0 -0
  112. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/Nexra/async_nexra.py +0 -0
  113. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/Nexra/sync_nexra.py +0 -0
  114. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/PollinationsAI/__init__.py +0 -0
  115. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/PollinationsAI/async_pollinations.py +0 -0
  116. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/PollinationsAI/sync_pollinations.py +0 -0
  117. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/__init__.py +0 -0
  118. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/artbit/__init__.py +0 -0
  119. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/artbit/async_artbit.py +0 -0
  120. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/artbit/sync_artbit.py +0 -0
  121. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/blackbox/__init__.py +0 -0
  122. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/blackbox/async_blackbox.py +0 -0
  123. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/blackbox/sync_blackbox.py +0 -0
  124. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/deepinfra/__init__.py +0 -0
  125. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/deepinfra/async_deepinfra.py +0 -0
  126. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/deepinfra/sync_deepinfra.py +0 -0
  127. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/huggingface/__init__.py +0 -0
  128. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/huggingface/async_huggingface.py +0 -0
  129. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/huggingface/sync_huggingface.py +0 -0
  130. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/imgninza/__init__.py +0 -0
  131. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/imgninza/async_ninza.py +0 -0
  132. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/imgninza/sync_ninza.py +0 -0
  133. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/talkai/__init__.py +0 -0
  134. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/talkai/async_talkai.py +0 -0
  135. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTI/talkai/sync_talkai.py +0 -0
  136. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTS/__init__.py +0 -0
  137. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTS/deepgram.py +0 -0
  138. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTS/elevenlabs.py +0 -0
  139. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTS/gesserit.py +0 -0
  140. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTS/murfai.py +0 -0
  141. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTS/parler.py +0 -0
  142. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTS/streamElements.py +0 -0
  143. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTS/utils.py +0 -0
  144. {webscout-6.8 → webscout-7.0}/webscout/Provider/TTS/voicepod.py +0 -0
  145. {webscout-6.8 → webscout-7.0}/webscout/Provider/TeachAnything.py +0 -0
  146. {webscout-6.8 → webscout-7.0}/webscout/Provider/ai4chat.py +0 -0
  147. {webscout-6.8 → webscout-7.0}/webscout/Provider/aimathgpt.py +0 -0
  148. {webscout-6.8 → webscout-7.0}/webscout/Provider/bagoodex.py +0 -0
  149. {webscout-6.8 → webscout-7.0}/webscout/Provider/cleeai.py +0 -0
  150. {webscout-6.8 → webscout-7.0}/webscout/Provider/elmo.py +0 -0
  151. {webscout-6.8 → webscout-7.0}/webscout/Provider/gaurish.py +0 -0
  152. {webscout-6.8 → webscout-7.0}/webscout/Provider/geminiapi.py +0 -0
  153. {webscout-6.8 → webscout-7.0}/webscout/Provider/geminiprorealtime.py +0 -0
  154. {webscout-6.8 → webscout-7.0}/webscout/Provider/julius.py +0 -0
  155. {webscout-6.8 → webscout-7.0}/webscout/Provider/koala.py +0 -0
  156. {webscout-6.8 → webscout-7.0}/webscout/Provider/learnfastai.py +0 -0
  157. {webscout-6.8 → webscout-7.0}/webscout/Provider/lepton.py +0 -0
  158. {webscout-6.8 → webscout-7.0}/webscout/Provider/llama3mitril.py +0 -0
  159. {webscout-6.8 → webscout-7.0}/webscout/Provider/llamatutor.py +0 -0
  160. {webscout-6.8 → webscout-7.0}/webscout/Provider/meta.py +0 -0
  161. {webscout-6.8 → webscout-7.0}/webscout/Provider/multichat.py +0 -0
  162. {webscout-6.8 → webscout-7.0}/webscout/Provider/promptrefine.py +0 -0
  163. {webscout-6.8 → webscout-7.0}/webscout/Provider/talkai.py +0 -0
  164. {webscout-6.8 → webscout-7.0}/webscout/Provider/turboseek.py +0 -0
  165. {webscout-6.8 → webscout-7.0}/webscout/Provider/tutorai.py +0 -0
  166. {webscout-6.8 → webscout-7.0}/webscout/Provider/typegpt.py +0 -0
  167. {webscout-6.8 → webscout-7.0}/webscout/Provider/x0gpt.py +0 -0
  168. {webscout-6.8 → webscout-7.0}/webscout/Provider/yep.py +0 -0
  169. {webscout-6.8 → webscout-7.0}/webscout/__main__.py +0 -0
  170. {webscout-6.8 → webscout-7.0}/webscout/cli.py +0 -0
  171. {webscout-6.8 → webscout-7.0}/webscout/conversation.py +0 -0
  172. {webscout-6.8 → webscout-7.0}/webscout/exceptions.py +0 -0
  173. {webscout-6.8 → webscout-7.0}/webscout/litprinter/__init__.py +0 -0
  174. {webscout-6.8 → webscout-7.0}/webscout/litprinter/colors.py +0 -0
  175. {webscout-6.8 → webscout-7.0}/webscout/optimizers.py +0 -0
  176. {webscout-6.8 → webscout-7.0}/webscout/prompt_manager.py +0 -0
  177. {webscout-6.8 → webscout-7.0}/webscout/scout/__init__.py +0 -0
  178. {webscout-6.8 → webscout-7.0}/webscout/scout/core/__init__.py +0 -0
  179. {webscout-6.8 → webscout-7.0}/webscout/scout/core/crawler.py +0 -0
  180. {webscout-6.8 → webscout-7.0}/webscout/scout/core/scout.py +0 -0
  181. {webscout-6.8 → webscout-7.0}/webscout/scout/core/search_result.py +0 -0
  182. {webscout-6.8 → webscout-7.0}/webscout/scout/core/text_analyzer.py +0 -0
  183. {webscout-6.8 → webscout-7.0}/webscout/scout/core/text_utils.py +0 -0
  184. {webscout-6.8 → webscout-7.0}/webscout/scout/core/web_analyzer.py +0 -0
  185. {webscout-6.8 → webscout-7.0}/webscout/scout/core.py +0 -0
  186. {webscout-6.8 → webscout-7.0}/webscout/scout/element.py +0 -0
  187. {webscout-6.8 → webscout-7.0}/webscout/scout/parsers/__init__.py +0 -0
  188. {webscout-6.8 → webscout-7.0}/webscout/scout/parsers/html5lib_parser.py +0 -0
  189. {webscout-6.8 → webscout-7.0}/webscout/scout/parsers/html_parser.py +0 -0
  190. {webscout-6.8 → webscout-7.0}/webscout/scout/parsers/lxml_parser.py +0 -0
  191. {webscout-6.8 → webscout-7.0}/webscout/scout/utils.py +0 -0
  192. {webscout-6.8 → webscout-7.0}/webscout/update_checker.py +0 -0
  193. {webscout-6.8 → webscout-7.0}/webscout/utils.py +0 -0
  194. {webscout-6.8 → webscout-7.0}/webscout/zeroart/__init__.py +0 -0
  195. {webscout-6.8 → webscout-7.0}/webscout/zeroart/base.py +0 -0
  196. {webscout-6.8 → webscout-7.0}/webscout/zeroart/effects.py +0 -0
  197. {webscout-6.8 → webscout-7.0}/webscout/zeroart/fonts.py +0 -0
  198. {webscout-6.8 → webscout-7.0}/webscout.egg-info/dependency_links.txt +0 -0
  199. {webscout-6.8 → webscout-7.0}/webscout.egg-info/entry_points.txt +0 -0
  200. {webscout-6.8 → webscout-7.0}/webscout.egg-info/top_level.txt +0 -0
  201. {webscout-6.8 → webscout-7.0}/webstoken/__init__.py +0 -0
  202. {webscout-6.8 → webscout-7.0}/webstoken/classifier.py +0 -0
  203. {webscout-6.8 → webscout-7.0}/webstoken/keywords.py +0 -0
  204. {webscout-6.8 → webscout-7.0}/webstoken/language.py +0 -0
  205. {webscout-6.8 → webscout-7.0}/webstoken/ner.py +0 -0
  206. {webscout-6.8 → webscout-7.0}/webstoken/normalizer.py +0 -0
  207. {webscout-6.8 → webscout-7.0}/webstoken/processor.py +0 -0
  208. {webscout-6.8 → webscout-7.0}/webstoken/sentiment.py +0 -0
  209. {webscout-6.8 → webscout-7.0}/webstoken/stemmer.py +0 -0
  210. {webscout-6.8 → webscout-7.0}/webstoken/tagger.py +0 -0
  211. {webscout-6.8 → webscout-7.0}/webstoken/tokenizer.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: webscout
3
- Version: 6.8
3
+ Version: 7.0
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: OEvortex
6
6
  Author-email: helpingai5@gmail.com
@@ -46,6 +46,8 @@ Requires-Dist: ollama
46
46
  Requires-Dist: pillow
47
47
  Requires-Dist: bson
48
48
  Requires-Dist: cloudscraper
49
+ Requires-Dist: html5lib
50
+ Requires-Dist: aiofiles
49
51
  Requires-Dist: emoji
50
52
  Requires-Dist: openai
51
53
  Requires-Dist: prompt-toolkit
@@ -54,6 +56,7 @@ Requires-Dist: pyreqwest_impersonate
54
56
  Requires-Dist: gradio_client
55
57
  Requires-Dist: psutil
56
58
  Requires-Dist: yaspin
59
+ Requires-Dist: pygetwindow
57
60
  Provides-Extra: dev
58
61
  Requires-Dist: ruff>=0.1.6; extra == "dev"
59
62
  Requires-Dist: pytest>=7.4.2; extra == "dev"
@@ -63,6 +66,17 @@ Requires-Dist: colorama; extra == "local"
63
66
  Requires-Dist: numpy; extra == "local"
64
67
  Requires-Dist: huggingface_hub[cli]; extra == "local"
65
68
  Requires-Dist: unicorn; extra == "local"
69
+ Dynamic: author
70
+ Dynamic: author-email
71
+ Dynamic: classifier
72
+ Dynamic: description
73
+ Dynamic: description-content-type
74
+ Dynamic: license
75
+ Dynamic: project-url
76
+ Dynamic: provides-extra
77
+ Dynamic: requires-dist
78
+ Dynamic: requires-python
79
+ Dynamic: summary
66
80
 
67
81
  <div align="center">
68
82
  <!-- Replace `#` with your actual links -->
@@ -107,9 +121,8 @@ Requires-Dist: unicorn; extra == "local"
107
121
  * **Tempmail & Temp Number:** Generate temporary email addresses and phone numbers for enhanced privacy.
108
122
  * **[Text-to-Speech (TTS)](webscout/Provider/TTS/README.md):** Convert text into natural-sounding speech using multiple AI-powered providers like ElevenLabs, StreamElements, and Voicepods.
109
123
  * **Offline LLMs:** Utilize powerful language models offline with GGUF support.
110
- * **Extensive Provider Ecosystem:** Explore a vast collection of providers, including BasedGPT, DeepSeek, and many others.
124
+ * **Extensive Provider Ecosystem:** Explore a vast collection of AI providers
111
125
  * **Local LLM Execution:** Run GGUF models locally with minimal configuration.
112
- * **Rawdog Scripting:** Execute Python scripts directly within your terminal using the `rawdog` feature.
113
126
  * **GGUF Conversion & Quantization:** Convert and quantize Hugging Face models to GGUF format.
114
127
  * **Autollama:** Download Hugging Face models and automatically convert them for Ollama compatibility.
115
128
  * **[SwiftCLI](webscout/swiftcli/Readme.md):** A powerful and elegant CLI framework that makes it easy to create beautiful command-line interfaces.
@@ -117,7 +130,6 @@ Requires-Dist: unicorn; extra == "local"
117
130
  * **[LitLogger](webscout/litlogger/Readme.md):** Simplifies logging with customizable formats and color schemes
118
131
  * **[LitAgent](webscout/litagent/Readme.md):** Powerful and modern user agent generator that keeps your requests fresh and undetectable
119
132
  * **[Text-to-Image](webscout/Provider/TTI/README.md):** Generate high-quality images using a wide range of AI art providers
120
- * **[MarkdownLite](webscout/Extra/markdownlite/README.md):** Powerful HTML to Markdown conversion library with advanced parsing and structured output
121
133
  * **[Scout](webscout/scout/README.md):** Advanced web parsing and crawling library with intelligent HTML/XML parsing, web crawling, and Markdown conversion
122
134
 
123
135
  ## ⚙️ Installation
@@ -967,34 +979,6 @@ response_str = a.chat(prompt)
967
979
  print(response_str)
968
980
  ```
969
981
 
970
- ### `DeepSeek` - Chat with DeepSeek
971
-
972
- ```python
973
- from webscout import DeepSeek
974
- from rich import print
975
-
976
- ai = DeepSeek(
977
- is_conversation=True,
978
- api_key='cookie',
979
- max_tokens=800,
980
- timeout=30,
981
- intro=None,
982
- filepath=None,
983
- update_file=True,
984
- proxies={},
985
- history_offset=10250,
986
- act=None,
987
- model="deepseek_chat"
988
- )
989
-
990
-
991
- # Define a prompt to send to the AI
992
- prompt = "Tell me about india"
993
- # Use the 'chat' method to send the prompt and receive a response
994
- r = ai.chat(prompt)
995
- print(r)
996
- ```
997
-
998
982
  ### `Deepinfra`
999
983
 
1000
984
  ```python
@@ -1131,7 +1115,7 @@ print(a.chat("HelpingAI-9B"))
1131
1115
  ```
1132
1116
 
1133
1117
 
1134
- ### LLAMA3, pizzagpt, RUBIKSAI, Koala, Darkai, AI4Chat, Farfalle, PIAI, Felo, Julius, YouChat, YEPCHAT, Cloudflare, TurboSeek, Editee, AI21, Chatify, Cerebras, X0GPT, Lepton, GEMINIAPI, Cleeai, Elmo, Free2GPT, Bing, DiscordRocks, GPTWeb, LlamaTutor, PromptRefine, TutorAI, ChatGPTES, Bagoodex, ChatHub, AmigoChat, AIMathGPT, GaurishCerebras, NinjaChat, GeminiPro, Talkai, LLMChat, AskMyAI, Llama3Mitril, Marcus, TypeGPT, Mhystical, Netwrck, MultiChatAI, JadveOpenAI, OOAi
1118
+ ### LLAMA3, pizzagpt, RUBIKSAI, Koala, Darkai, AI4Chat, Farfalle, PIAI, Felo, Julius, YouChat, YEPCHAT, Cloudflare, TurboSeek, Editee, AI21, Chatify, Cerebras, X0GPT, Lepton, GEMINIAPI, Cleeai, Elmo, Free2GPT, Bing, DiscordRocks, GPTWeb, LlamaTutor, PromptRefine, TutorAI, ChatGPTES, Bagoodex, ChatHub, AmigoChat, AIMathGPT, GaurishCerebras, NinjaChat, GeminiPro, Talkai, LLMChat, AskMyAI, Llama3Mitril, Marcus, TypeGPT, Mhystical, Netwrck, MultiChatAI, JadveOpenAI, ChatGLM, Deepfind, NousHermes, TextPollinationsAI, GliderAI, DGAFAI
1135
1119
 
1136
1120
  Code is similar to other providers.
1137
1121
 
@@ -41,9 +41,8 @@
41
41
  * **Tempmail & Temp Number:** Generate temporary email addresses and phone numbers for enhanced privacy.
42
42
  * **[Text-to-Speech (TTS)](webscout/Provider/TTS/README.md):** Convert text into natural-sounding speech using multiple AI-powered providers like ElevenLabs, StreamElements, and Voicepods.
43
43
  * **Offline LLMs:** Utilize powerful language models offline with GGUF support.
44
- * **Extensive Provider Ecosystem:** Explore a vast collection of providers, including BasedGPT, DeepSeek, and many others.
44
+ * **Extensive Provider Ecosystem:** Explore a vast collection of AI providers
45
45
  * **Local LLM Execution:** Run GGUF models locally with minimal configuration.
46
- * **Rawdog Scripting:** Execute Python scripts directly within your terminal using the `rawdog` feature.
47
46
  * **GGUF Conversion & Quantization:** Convert and quantize Hugging Face models to GGUF format.
48
47
  * **Autollama:** Download Hugging Face models and automatically convert them for Ollama compatibility.
49
48
  * **[SwiftCLI](webscout/swiftcli/Readme.md):** A powerful and elegant CLI framework that makes it easy to create beautiful command-line interfaces.
@@ -51,7 +50,6 @@
51
50
  * **[LitLogger](webscout/litlogger/Readme.md):** Simplifies logging with customizable formats and color schemes
52
51
  * **[LitAgent](webscout/litagent/Readme.md):** Powerful and modern user agent generator that keeps your requests fresh and undetectable
53
52
  * **[Text-to-Image](webscout/Provider/TTI/README.md):** Generate high-quality images using a wide range of AI art providers
54
- * **[MarkdownLite](webscout/Extra/markdownlite/README.md):** Powerful HTML to Markdown conversion library with advanced parsing and structured output
55
53
  * **[Scout](webscout/scout/README.md):** Advanced web parsing and crawling library with intelligent HTML/XML parsing, web crawling, and Markdown conversion
56
54
 
57
55
  ## ⚙️ Installation
@@ -901,34 +899,6 @@ response_str = a.chat(prompt)
901
899
  print(response_str)
902
900
  ```
903
901
 
904
- ### `DeepSeek` - Chat with DeepSeek
905
-
906
- ```python
907
- from webscout import DeepSeek
908
- from rich import print
909
-
910
- ai = DeepSeek(
911
- is_conversation=True,
912
- api_key='cookie',
913
- max_tokens=800,
914
- timeout=30,
915
- intro=None,
916
- filepath=None,
917
- update_file=True,
918
- proxies={},
919
- history_offset=10250,
920
- act=None,
921
- model="deepseek_chat"
922
- )
923
-
924
-
925
- # Define a prompt to send to the AI
926
- prompt = "Tell me about india"
927
- # Use the 'chat' method to send the prompt and receive a response
928
- r = ai.chat(prompt)
929
- print(r)
930
- ```
931
-
932
902
  ### `Deepinfra`
933
903
 
934
904
  ```python
@@ -1065,7 +1035,7 @@ print(a.chat("HelpingAI-9B"))
1065
1035
  ```
1066
1036
 
1067
1037
 
1068
- ### LLAMA3, pizzagpt, RUBIKSAI, Koala, Darkai, AI4Chat, Farfalle, PIAI, Felo, Julius, YouChat, YEPCHAT, Cloudflare, TurboSeek, Editee, AI21, Chatify, Cerebras, X0GPT, Lepton, GEMINIAPI, Cleeai, Elmo, Free2GPT, Bing, DiscordRocks, GPTWeb, LlamaTutor, PromptRefine, TutorAI, ChatGPTES, Bagoodex, ChatHub, AmigoChat, AIMathGPT, GaurishCerebras, NinjaChat, GeminiPro, Talkai, LLMChat, AskMyAI, Llama3Mitril, Marcus, TypeGPT, Mhystical, Netwrck, MultiChatAI, JadveOpenAI, OOAi
1038
+ ### LLAMA3, pizzagpt, RUBIKSAI, Koala, Darkai, AI4Chat, Farfalle, PIAI, Felo, Julius, YouChat, YEPCHAT, Cloudflare, TurboSeek, Editee, AI21, Chatify, Cerebras, X0GPT, Lepton, GEMINIAPI, Cleeai, Elmo, Free2GPT, Bing, DiscordRocks, GPTWeb, LlamaTutor, PromptRefine, TutorAI, ChatGPTES, Bagoodex, ChatHub, AmigoChat, AIMathGPT, GaurishCerebras, NinjaChat, GeminiPro, Talkai, LLMChat, AskMyAI, Llama3Mitril, Marcus, TypeGPT, Mhystical, Netwrck, MultiChatAI, JadveOpenAI, ChatGLM, Deepfind, NousHermes, TextPollinationsAI, GliderAI, DGAFAI
1069
1039
 
1070
1040
  Code is similar to other providers.
1071
1041
 
@@ -52,6 +52,8 @@ setup(
52
52
  "pillow",
53
53
  "bson",
54
54
  "cloudscraper",
55
+ "html5lib",
56
+ "aiofiles",
55
57
  "emoji",
56
58
  "openai",
57
59
  "prompt-toolkit",
@@ -60,7 +62,7 @@ setup(
60
62
  "gradio_client",
61
63
  "psutil",
62
64
  "yaspin",
63
- # "cerebras_cloud_sdk",
65
+ "pygetwindow",
64
66
  ],
65
67
 
66
68
  entry_points={
@@ -1,5 +1,4 @@
1
- from abc import ABC
2
- from abc import abstractmethod
1
+ from abc import ABC, abstractmethod
3
2
  from pathlib import Path
4
3
  from typing import AsyncGenerator, List, Union, Generator, Optional
5
4
  from typing_extensions import TypeAlias
@@ -110,4 +109,15 @@ class AsyncImageProvider(ABC):
110
109
  name: Optional[str] = None,
111
110
  dir: Optional[Union[str, Path]] = None
112
111
  ) -> List[str]:
112
+ raise NotImplementedError("Method needs to be implemented in subclass")
113
+
114
+ class AISearch(ABC):
115
+
116
+ @abstractmethod
117
+ def search(
118
+ self,
119
+ prompt: str,
120
+ stream: bool = False,
121
+ raw: bool = False,
122
+ ) -> Response:
113
123
  raise NotImplementedError("Method needs to be implemented in subclass")
@@ -109,7 +109,7 @@ class GoogleS:
109
109
  timeout: Optional[int] = 10,
110
110
  max_workers: int = 20,
111
111
  cache_dir: Optional[str] = None,
112
- rate_limit: float = 0.01,
112
+ rate_limit: float = 2.0,
113
113
  use_litlogger: bool = False
114
114
  ):
115
115
  """
@@ -152,7 +152,10 @@ class GoogleS:
152
152
  current_time = time.time()
153
153
  time_since_last = current_time - self.last_request_time
154
154
  if time_since_last < self.rate_limit:
155
- time.sleep(self.rate_limit - time_since_last)
155
+ sleep_time = self.rate_limit - time_since_last
156
+ if self.use_litlogger:
157
+ self.logger.debug(f"Rate limiting: Waiting {sleep_time:.2f} seconds")
158
+ time.sleep(sleep_time)
156
159
  self.last_request_time = time.time()
157
160
 
158
161
  def _get_url(self, method: str, url: str, params: Optional[Dict[str, str]] = None,
@@ -170,31 +173,44 @@ class GoogleS:
170
173
  Returns:
171
174
  bytes: Response content
172
175
  """
173
- self._respect_rate_limit()
176
+ retry_count = 0
177
+ base_delay = 5 # Base delay in seconds
174
178
 
175
- for attempt in range(max_retries):
179
+ while retry_count < max_retries:
176
180
  try:
177
- if self.use_litlogger:
178
- self.logger.debug(f"Making {method} request to {url} (Attempt {attempt + 1})")
181
+ self._respect_rate_limit()
182
+ response = self.client.request(
183
+ method=method,
184
+ url=url,
185
+ params=params,
186
+ data=data,
187
+ timeout=self.timeout
188
+ )
179
189
 
180
- resp = self.client.request(method, url, params=params, data=data, timeout=self.timeout)
181
- resp.raise_for_status()
190
+ if response.status_code == 429:
191
+ retry_delay = base_delay * (2 ** retry_count) # Exponential backoff
192
+ if self.use_litlogger:
193
+ self.logger.warning(f"Rate limited by Google. Waiting {retry_delay} seconds before retry...")
194
+ time.sleep(retry_delay)
195
+ retry_count += 1
196
+ continue
197
+
198
+ response.raise_for_status()
199
+ return response.content
182
200
 
183
- if self.use_litlogger:
184
- self.logger.success(f"Request successful: {resp.status_code}")
201
+ except requests.exceptions.RequestException as e:
202
+ if retry_count == max_retries - 1:
203
+ if self.use_litlogger:
204
+ self.logger.error(f"Max retries reached. Last error: {str(e)}")
205
+ raise
185
206
 
186
- return resp.content
187
-
188
- except requests.exceptions.RequestException as ex:
207
+ retry_delay = base_delay * (2 ** retry_count)
189
208
  if self.use_litlogger:
190
- self.logger.error(f"Request failed: {url} - {str(ex)}")
209
+ self.logger.warning(f"Request failed. Retrying in {retry_delay} seconds... Error: {str(e)}")
210
+ time.sleep(retry_delay)
211
+ retry_count += 1
191
212
 
192
- # Exponential backoff
193
- if attempt < max_retries - 1:
194
- wait_time = (2 ** attempt) + random.random()
195
- time.sleep(wait_time)
196
- else:
197
- raise
213
+ raise Exception("Max retries reached")
198
214
 
199
215
  @lru_cache(maxsize=100)
200
216
  def _cache_key(self, query: str, **kwargs) -> str:
@@ -471,7 +487,7 @@ class GoogleS:
471
487
 
472
488
  if __name__ == "__main__":
473
489
  from rich import print
474
- searcher = GoogleS()
475
- results = searcher.search("HelpingAI-9B", max_results=200, extract_text=False, max_text_length=200)
490
+ searcher = GoogleS(rate_limit=3.0, use_litlogger=True)
491
+ results = searcher.search("HelpingAI-9B", max_results=5, extract_text=False, max_text_length=200)
476
492
  for result in results:
477
493
  print(result)
@@ -12,10 +12,15 @@ from sys import stdout
12
12
  import os
13
13
  import subprocess
14
14
  import sys
15
+ import tempfile
15
16
  from webscout.version import __prog__, __version__
16
- from webscout.zerodir import user_cache_dir
17
17
  from webscout.swiftcli import CLI, option, argument, group
18
18
 
19
+ # Define cache directory using tempfile
20
+ user_cache_dir = os.path.join(tempfile.gettempdir(), 'webscout')
21
+ if not os.path.exists(user_cache_dir):
22
+ os.makedirs(user_cache_dir)
23
+
19
24
  logging = LitLogger(name="YTDownloader")
20
25
 
21
26
  session = requests.session()
@@ -32,7 +37,7 @@ session.headers.update(headers)
32
37
 
33
38
  get_excep = lambda e: e.args[1] if len(e.args) > 1 else e
34
39
 
35
- appdir = user_cache_dir(__prog__, __prog__)
40
+ appdir = user_cache_dir
36
41
 
37
42
  if not path.isdir(appdir):
38
43
  try:
@@ -304,4 +304,4 @@ class Channel:
304
304
  List[str] | None
305
305
  The ids of all playlists or None
306
306
  """
307
- return dup_filter(Patterns.playlists.findall(channel_playlists(self._target_url)))
307
+ return dup_filter(Patterns.playlists.findall(channel_playlists(self._target_url)))
@@ -35,3 +35,6 @@ class Search:
35
35
  @staticmethod
36
36
  def playlists(keywords: str, limit: int = 20) -> Optional[List[str]]:
37
37
  return dup_filter(Patterns.playlist_id.findall(find_playlists(keywords)), limit)
38
+
39
+ if __name__ == "__main__":
40
+ print(Search.videos("java"))
@@ -58,3 +58,6 @@ class Video:
58
58
  'tags': data[7].split(',') if data[7] else None,
59
59
  'description': data[8].replace('\\n', '\n') if data[8] else None
60
60
  }
61
+
62
+ if __name__ == '__main__':
63
+ print(Video('https://www.youtube.com/watch?v=9bZkp7q19f0').metadata)
@@ -99,4 +99,6 @@ class Video:
99
99
  data['genre'] = genre_pattern.search(self._video_data).group(1)
100
100
  except AttributeError:
101
101
  data['genre'] = None
102
- return data
102
+ return data
103
+ if __name__ == '__main__':
104
+ print(Video('https://www.youtube.com/watch?v=9bZkp7q19f0').metadata)
@@ -8,14 +8,71 @@ import sys
8
8
  from typing import List, Optional
9
9
 
10
10
  from webscout.optimizers import Optimizers
11
-
11
+ import os
12
+ import platform
13
+ import subprocess
12
14
 
13
15
  def get_current_app() -> str:
14
- """Get the current active application name."""
15
- try:
16
- active_window: Optional[gw.Window] = gw.getActiveWindow()
17
- return f"{active_window.title if active_window else 'Unknown'}"
18
- except Exception as e:
16
+ """
17
+ Get the current active application or window title in a cross-platform manner.
18
+
19
+ On Windows, uses the win32gui module from pywin32.
20
+ On macOS, uses AppKit to access the active application info.
21
+ On Linux, uses xprop to get the active window details.
22
+
23
+ Returns:
24
+ A string containing the title of the active application/window, or "Unknown" if it cannot be determined.
25
+ """
26
+ system_name = platform.system()
27
+
28
+ if system_name == "Windows":
29
+ try:
30
+ import win32gui # pywin32 must be installed
31
+ window_handle = win32gui.GetForegroundWindow()
32
+ title = win32gui.GetWindowText(window_handle)
33
+ return title if title else "Unknown"
34
+ except Exception:
35
+ return "Unknown"
36
+
37
+ elif system_name == "Darwin": # macOS
38
+ try:
39
+ from AppKit import NSWorkspace # type: ignore
40
+ active_app = NSWorkspace.sharedWorkspace().activeApplication()
41
+ title = active_app.get('NSApplicationName')
42
+ return title if title else "Unknown"
43
+ except Exception:
44
+ return "Unknown"
45
+
46
+ elif system_name == "Linux":
47
+ try:
48
+ # Get the active window id using xprop
49
+ result = subprocess.run(
50
+ ["xprop", "-root", "_NET_ACTIVE_WINDOW"],
51
+ stdout=subprocess.PIPE,
52
+ stderr=subprocess.PIPE,
53
+ text=True
54
+ )
55
+ if result.returncode == 0 and result.stdout:
56
+ # Expected format: _NET_ACTIVE_WINDOW(WINDOW): window id # 0x1400007
57
+ parts = result.stdout.strip().split()
58
+ window_id = parts[-1]
59
+ if window_id != "0x0":
60
+ title_result = subprocess.run(
61
+ ["xprop", "-id", window_id, "WM_NAME"],
62
+ stdout=subprocess.PIPE,
63
+ stderr=subprocess.PIPE,
64
+ text=True
65
+ )
66
+ if title_result.returncode == 0 and title_result.stdout:
67
+ # Expected format: WM_NAME(STRING) = "Terminal"
68
+ title_parts = title_result.stdout.split(" = ", 1)
69
+ if len(title_parts) == 2:
70
+ title = title_parts[1].strip().strip('"')
71
+ return title if title else "Unknown"
72
+ except Exception:
73
+ pass
74
+ return "Unknown"
75
+ else:
19
76
  return "Unknown"
20
77
 
21
78
 
@@ -136,4 +193,8 @@ EXAMPLES: str = """
136
193
  </rawdog_response>
137
194
  </example>
138
195
  </examples>
139
- """
196
+ """
197
+
198
+ if __name__ == "__main__":
199
+ # Simple test harness to print the current active window title.
200
+ print("Current Active Window/Application: ", get_current_app())
@@ -1,21 +1,5 @@
1
1
  """
2
- Yo fam! 🔥 Welcome to AutoLlama - your go-to tool for downloading and setting up HelpingAI models! 💪
3
-
4
- Created by the legendary Abhay Koul, this script's got your back when it comes to:
5
- - Downloading models straight from HuggingFace Hub 🚀
6
- - Setting up Ollama with zero hassle 💯
7
- - Getting your AI assistant ready to vibe with you! ⚡
8
-
9
- Usage:
10
2
  >>> python -m webscout.Extra.autollama download -m "OEvortex/HelpingAI-Lite-1.5T" -g "HelpingAI-Lite-1.5T.q4_k_m.gguf"
11
-
12
- Features:
13
- - Smart model management 🧠
14
- - Automatic dependency installation 📦
15
- - Progress tracking that keeps it real 📈
16
- - Error handling that's got your back 💪
17
-
18
- Join the squad on Discord and level up your AI game! 🎮
19
3
  """
20
4
 
21
5
  import warnings
@@ -1,22 +1,9 @@
1
1
  """
2
- Yo fam! 🔥 Welcome to GGUF Converter - your ultimate tool for converting models to GGUF format! 💪
3
2
 
4
- - Converting HuggingFace models to GGUF format 🚀
5
- - Multiple quantization methods for different needs 🎯
6
- - Easy upload back to HuggingFace Hub 📤
7
-
8
- Usage:
9
3
  >>> python -m webscout.Extra.gguf convert -m "OEvortex/HelpingAI-Lite-1.5T" -q "q4_k_m,q5_k_m"
10
4
  >>> # With upload options:
11
5
  >>> python -m webscout.Extra.gguf convert -m "your-model" -u "username" -t "token" -q "q4_k_m"
12
6
 
13
- Features:
14
- - Smart dependency checking 🔍
15
- - CUDA support detection ⚡
16
- - Progress tracking that keeps it real 📈
17
- - Multiple quantization options 🎮
18
-
19
- Join the squad on Discord and level up your AI game! 🎮
20
7
  """
21
8
 
22
9
  import subprocess