webscout 7.2__tar.gz → 7.3__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 (231) hide show
  1. {webscout-7.2/webscout.egg-info → webscout-7.3}/PKG-INFO +55 -56
  2. {webscout-7.2 → webscout-7.3}/README.md +52 -2
  3. {webscout-7.2 → webscout-7.3}/webscout/Bard.py +2 -2
  4. {webscout-7.2 → webscout-7.3}/webscout/Litlogger/core/level.py +3 -0
  5. webscout-7.3/webscout/Litlogger/core/logger.py +166 -0
  6. webscout-7.3/webscout/Litlogger/handlers/console.py +33 -0
  7. {webscout-7.2 → webscout-7.3}/webscout/Litlogger/handlers/network.py +16 -17
  8. {webscout-7.2 → webscout-7.3}/webscout/Litlogger/styles/colors.py +81 -63
  9. {webscout-7.2 → webscout-7.3}/webscout/Litlogger/styles/formats.py +163 -80
  10. webscout-7.3/webscout/Provider/AISEARCH/ISou.py +277 -0
  11. webscout-7.3/webscout/Provider/AISEARCH/__init__.py +3 -0
  12. {webscout-7.2 → webscout-7.3}/webscout/Provider/Deepinfra.py +40 -24
  13. webscout-7.3/webscout/Provider/TTI/FreeAIPlayground/__init__.py +9 -0
  14. webscout-7.3/webscout/Provider/TTI/FreeAIPlayground/async_freeaiplayground.py +206 -0
  15. webscout-7.3/webscout/Provider/TTI/FreeAIPlayground/sync_freeaiplayground.py +192 -0
  16. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/__init__.py +2 -1
  17. {webscout-7.2 → webscout-7.3}/webscout/Provider/TextPollinationsAI.py +26 -5
  18. {webscout-7.2 → webscout-7.3}/webscout/Provider/__init__.py +2 -0
  19. webscout-7.3/webscout/Provider/freeaichat.py +221 -0
  20. {webscout-7.2 → webscout-7.3}/webscout/Provider/yep.py +1 -1
  21. {webscout-7.2 → webscout-7.3}/webscout/__init__.py +1 -0
  22. {webscout-7.2 → webscout-7.3}/webscout/version.py +1 -1
  23. {webscout-7.2 → webscout-7.3}/webscout/webscout_search.py +82 -2
  24. {webscout-7.2 → webscout-7.3}/webscout/webscout_search_async.py +58 -1
  25. webscout-7.3/webscout/yep_search.py +297 -0
  26. {webscout-7.2 → webscout-7.3/webscout.egg-info}/PKG-INFO +55 -56
  27. {webscout-7.2 → webscout-7.3}/webscout.egg-info/SOURCES.txt +6 -0
  28. webscout-7.2/webscout/Litlogger/core/logger.py +0 -123
  29. webscout-7.2/webscout/Litlogger/handlers/console.py +0 -50
  30. webscout-7.2/webscout/Provider/AISEARCH/__init__.py +0 -2
  31. {webscout-7.2 → webscout-7.3}/LICENSE.md +0 -0
  32. {webscout-7.2 → webscout-7.3}/setup.cfg +0 -0
  33. {webscout-7.2 → webscout-7.3}/setup.py +0 -0
  34. {webscout-7.2 → webscout-7.3}/webscout/AIauto.py +0 -0
  35. {webscout-7.2 → webscout-7.3}/webscout/AIbase.py +0 -0
  36. {webscout-7.2 → webscout-7.3}/webscout/AIutel.py +0 -0
  37. {webscout-7.2 → webscout-7.3}/webscout/DWEBS.py +0 -0
  38. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/YTdownloader.py +0 -0
  39. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/__init__.py +0 -0
  40. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/transcriber.py +0 -0
  41. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/__init__.py +0 -0
  42. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/channel.py +0 -0
  43. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/errors.py +0 -0
  44. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/extras.py +0 -0
  45. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/https.py +0 -0
  46. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/patterns.py +0 -0
  47. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/playlist.py +0 -0
  48. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/pool.py +0 -0
  49. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/query.py +0 -0
  50. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/stream.py +0 -0
  51. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/utils.py +0 -0
  52. {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/video.py +0 -0
  53. {webscout-7.2 → webscout-7.3}/webscout/Extra/__init__.py +0 -0
  54. {webscout-7.2 → webscout-7.3}/webscout/Extra/autocoder/__init__.py +0 -0
  55. {webscout-7.2 → webscout-7.3}/webscout/Extra/autocoder/autocoder_utiles.py +0 -0
  56. {webscout-7.2 → webscout-7.3}/webscout/Extra/autocoder/rawdog.py +0 -0
  57. {webscout-7.2 → webscout-7.3}/webscout/Extra/autollama.py +0 -0
  58. {webscout-7.2 → webscout-7.3}/webscout/Extra/gguf.py +0 -0
  59. {webscout-7.2 → webscout-7.3}/webscout/Extra/weather.py +0 -0
  60. {webscout-7.2 → webscout-7.3}/webscout/Extra/weather_ascii.py +0 -0
  61. {webscout-7.2 → webscout-7.3}/webscout/LLM.py +0 -0
  62. {webscout-7.2 → webscout-7.3}/webscout/Litlogger/__init__.py +0 -0
  63. {webscout-7.2 → webscout-7.3}/webscout/Litlogger/core/__init__.py +0 -0
  64. {webscout-7.2 → webscout-7.3}/webscout/Litlogger/handlers/__init__.py +0 -0
  65. {webscout-7.2 → webscout-7.3}/webscout/Litlogger/handlers/file.py +0 -0
  66. {webscout-7.2 → webscout-7.3}/webscout/Litlogger/styles/__init__.py +0 -0
  67. {webscout-7.2 → webscout-7.3}/webscout/Litlogger/styles/text.py +0 -0
  68. {webscout-7.2 → webscout-7.3}/webscout/Litlogger/utils/__init__.py +0 -0
  69. {webscout-7.2 → webscout-7.3}/webscout/Litlogger/utils/detectors.py +0 -0
  70. {webscout-7.2 → webscout-7.3}/webscout/Litlogger/utils/formatters.py +0 -0
  71. {webscout-7.2 → webscout-7.3}/webscout/Local/__init__.py +0 -0
  72. {webscout-7.2 → webscout-7.3}/webscout/Local/_version.py +0 -0
  73. {webscout-7.2 → webscout-7.3}/webscout/Local/formats.py +0 -0
  74. {webscout-7.2 → webscout-7.3}/webscout/Local/model.py +0 -0
  75. {webscout-7.2 → webscout-7.3}/webscout/Local/samplers.py +0 -0
  76. {webscout-7.2 → webscout-7.3}/webscout/Local/thread.py +0 -0
  77. {webscout-7.2 → webscout-7.3}/webscout/Local/ui.py +0 -0
  78. {webscout-7.2 → webscout-7.3}/webscout/Local/utils.py +0 -0
  79. {webscout-7.2 → webscout-7.3}/webscout/Provider/AI21.py +0 -0
  80. {webscout-7.2 → webscout-7.3}/webscout/Provider/AISEARCH/DeepFind.py +0 -0
  81. {webscout-7.2 → webscout-7.3}/webscout/Provider/AISEARCH/felo_search.py +0 -0
  82. {webscout-7.2 → webscout-7.3}/webscout/Provider/Amigo.py +0 -0
  83. {webscout-7.2 → webscout-7.3}/webscout/Provider/Andi.py +0 -0
  84. {webscout-7.2 → webscout-7.3}/webscout/Provider/Bing.py +0 -0
  85. {webscout-7.2 → webscout-7.3}/webscout/Provider/Blackboxai.py +0 -0
  86. {webscout-7.2 → webscout-7.3}/webscout/Provider/ChatGPTES.py +0 -0
  87. {webscout-7.2 → webscout-7.3}/webscout/Provider/ChatGPTGratis.py +0 -0
  88. {webscout-7.2 → webscout-7.3}/webscout/Provider/Chatify.py +0 -0
  89. {webscout-7.2 → webscout-7.3}/webscout/Provider/Cloudflare.py +0 -0
  90. {webscout-7.2 → webscout-7.3}/webscout/Provider/Cohere.py +0 -0
  91. {webscout-7.2 → webscout-7.3}/webscout/Provider/DARKAI.py +0 -0
  92. {webscout-7.2 → webscout-7.3}/webscout/Provider/DeepSeek.py +0 -0
  93. {webscout-7.2 → webscout-7.3}/webscout/Provider/DiscordRocks.py +0 -0
  94. {webscout-7.2 → webscout-7.3}/webscout/Provider/EDITEE.py +0 -0
  95. {webscout-7.2 → webscout-7.3}/webscout/Provider/Free2GPT.py +0 -0
  96. {webscout-7.2 → webscout-7.3}/webscout/Provider/GPTWeb.py +0 -0
  97. {webscout-7.2 → webscout-7.3}/webscout/Provider/Gemini.py +0 -0
  98. {webscout-7.2 → webscout-7.3}/webscout/Provider/Glider.py +0 -0
  99. {webscout-7.2 → webscout-7.3}/webscout/Provider/Groq.py +0 -0
  100. {webscout-7.2 → webscout-7.3}/webscout/Provider/HF_space/__init__.py +0 -0
  101. {webscout-7.2 → webscout-7.3}/webscout/Provider/HF_space/qwen_qwen2.py +0 -0
  102. {webscout-7.2 → webscout-7.3}/webscout/Provider/Jadve.py +0 -0
  103. {webscout-7.2 → webscout-7.3}/webscout/Provider/Koboldai.py +0 -0
  104. {webscout-7.2 → webscout-7.3}/webscout/Provider/Llama.py +0 -0
  105. {webscout-7.2 → webscout-7.3}/webscout/Provider/Llama3.py +0 -0
  106. {webscout-7.2 → webscout-7.3}/webscout/Provider/Marcus.py +0 -0
  107. {webscout-7.2 → webscout-7.3}/webscout/Provider/Netwrck.py +0 -0
  108. {webscout-7.2 → webscout-7.3}/webscout/Provider/OLLAMA.py +0 -0
  109. {webscout-7.2 → webscout-7.3}/webscout/Provider/Openai.py +0 -0
  110. {webscout-7.2 → webscout-7.3}/webscout/Provider/PI.py +0 -0
  111. {webscout-7.2 → webscout-7.3}/webscout/Provider/Phind.py +0 -0
  112. {webscout-7.2 → webscout-7.3}/webscout/Provider/PizzaGPT.py +0 -0
  113. {webscout-7.2 → webscout-7.3}/webscout/Provider/QwenLM.py +0 -0
  114. {webscout-7.2 → webscout-7.3}/webscout/Provider/Reka.py +0 -0
  115. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/AiForce/__init__.py +0 -0
  116. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/AiForce/async_aiforce.py +0 -0
  117. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/AiForce/sync_aiforce.py +0 -0
  118. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/Nexra/__init__.py +0 -0
  119. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/Nexra/async_nexra.py +0 -0
  120. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/Nexra/sync_nexra.py +0 -0
  121. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/PollinationsAI/__init__.py +0 -0
  122. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/PollinationsAI/async_pollinations.py +0 -0
  123. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/PollinationsAI/sync_pollinations.py +0 -0
  124. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/artbit/__init__.py +0 -0
  125. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/artbit/async_artbit.py +0 -0
  126. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/artbit/sync_artbit.py +0 -0
  127. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/blackbox/__init__.py +0 -0
  128. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/blackbox/async_blackbox.py +0 -0
  129. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/blackbox/sync_blackbox.py +0 -0
  130. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/deepinfra/__init__.py +0 -0
  131. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/deepinfra/async_deepinfra.py +0 -0
  132. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/deepinfra/sync_deepinfra.py +0 -0
  133. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/huggingface/__init__.py +0 -0
  134. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/huggingface/async_huggingface.py +0 -0
  135. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/huggingface/sync_huggingface.py +0 -0
  136. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/imgninza/__init__.py +0 -0
  137. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/imgninza/async_ninza.py +0 -0
  138. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/imgninza/sync_ninza.py +0 -0
  139. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/talkai/__init__.py +0 -0
  140. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/talkai/async_talkai.py +0 -0
  141. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/talkai/sync_talkai.py +0 -0
  142. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/__init__.py +0 -0
  143. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/deepgram.py +0 -0
  144. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/elevenlabs.py +0 -0
  145. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/gesserit.py +0 -0
  146. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/murfai.py +0 -0
  147. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/parler.py +0 -0
  148. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/streamElements.py +0 -0
  149. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/utils.py +0 -0
  150. {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/voicepod.py +0 -0
  151. {webscout-7.2 → webscout-7.3}/webscout/Provider/TeachAnything.py +0 -0
  152. {webscout-7.2 → webscout-7.3}/webscout/Provider/WiseCat.py +0 -0
  153. {webscout-7.2 → webscout-7.3}/webscout/Provider/Youchat.py +0 -0
  154. {webscout-7.2 → webscout-7.3}/webscout/Provider/ai4chat.py +0 -0
  155. {webscout-7.2 → webscout-7.3}/webscout/Provider/aimathgpt.py +0 -0
  156. {webscout-7.2 → webscout-7.3}/webscout/Provider/askmyai.py +0 -0
  157. {webscout-7.2 → webscout-7.3}/webscout/Provider/bagoodex.py +0 -0
  158. {webscout-7.2 → webscout-7.3}/webscout/Provider/cerebras.py +0 -0
  159. {webscout-7.2 → webscout-7.3}/webscout/Provider/chatglm.py +0 -0
  160. {webscout-7.2 → webscout-7.3}/webscout/Provider/cleeai.py +0 -0
  161. {webscout-7.2 → webscout-7.3}/webscout/Provider/dgaf.py +0 -0
  162. {webscout-7.2 → webscout-7.3}/webscout/Provider/elmo.py +0 -0
  163. {webscout-7.2 → webscout-7.3}/webscout/Provider/gaurish.py +0 -0
  164. {webscout-7.2 → webscout-7.3}/webscout/Provider/geminiapi.py +0 -0
  165. {webscout-7.2 → webscout-7.3}/webscout/Provider/geminiprorealtime.py +0 -0
  166. {webscout-7.2 → webscout-7.3}/webscout/Provider/granite.py +0 -0
  167. {webscout-7.2 → webscout-7.3}/webscout/Provider/hermes.py +0 -0
  168. {webscout-7.2 → webscout-7.3}/webscout/Provider/julius.py +0 -0
  169. {webscout-7.2 → webscout-7.3}/webscout/Provider/koala.py +0 -0
  170. {webscout-7.2 → webscout-7.3}/webscout/Provider/learnfastai.py +0 -0
  171. {webscout-7.2 → webscout-7.3}/webscout/Provider/lepton.py +0 -0
  172. {webscout-7.2 → webscout-7.3}/webscout/Provider/llama3mitril.py +0 -0
  173. {webscout-7.2 → webscout-7.3}/webscout/Provider/llamatutor.py +0 -0
  174. {webscout-7.2 → webscout-7.3}/webscout/Provider/llmchat.py +0 -0
  175. {webscout-7.2 → webscout-7.3}/webscout/Provider/meta.py +0 -0
  176. {webscout-7.2 → webscout-7.3}/webscout/Provider/multichat.py +0 -0
  177. {webscout-7.2 → webscout-7.3}/webscout/Provider/promptrefine.py +0 -0
  178. {webscout-7.2 → webscout-7.3}/webscout/Provider/talkai.py +0 -0
  179. {webscout-7.2 → webscout-7.3}/webscout/Provider/turboseek.py +0 -0
  180. {webscout-7.2 → webscout-7.3}/webscout/Provider/tutorai.py +0 -0
  181. {webscout-7.2 → webscout-7.3}/webscout/Provider/typegpt.py +0 -0
  182. {webscout-7.2 → webscout-7.3}/webscout/Provider/x0gpt.py +0 -0
  183. {webscout-7.2 → webscout-7.3}/webscout/__main__.py +0 -0
  184. {webscout-7.2 → webscout-7.3}/webscout/cli.py +0 -0
  185. {webscout-7.2 → webscout-7.3}/webscout/conversation.py +0 -0
  186. {webscout-7.2 → webscout-7.3}/webscout/exceptions.py +0 -0
  187. {webscout-7.2 → webscout-7.3}/webscout/litagent/__init__.py +0 -0
  188. {webscout-7.2 → webscout-7.3}/webscout/litagent/agent.py +0 -0
  189. {webscout-7.2 → webscout-7.3}/webscout/litagent/constants.py +0 -0
  190. {webscout-7.2 → webscout-7.3}/webscout/litprinter/__init__.py +0 -0
  191. {webscout-7.2 → webscout-7.3}/webscout/litprinter/colors.py +0 -0
  192. {webscout-7.2 → webscout-7.3}/webscout/optimizers.py +0 -0
  193. {webscout-7.2 → webscout-7.3}/webscout/prompt_manager.py +0 -0
  194. {webscout-7.2 → webscout-7.3}/webscout/scout/__init__.py +0 -0
  195. {webscout-7.2 → webscout-7.3}/webscout/scout/core/__init__.py +0 -0
  196. {webscout-7.2 → webscout-7.3}/webscout/scout/core/crawler.py +0 -0
  197. {webscout-7.2 → webscout-7.3}/webscout/scout/core/scout.py +0 -0
  198. {webscout-7.2 → webscout-7.3}/webscout/scout/core/search_result.py +0 -0
  199. {webscout-7.2 → webscout-7.3}/webscout/scout/core/text_analyzer.py +0 -0
  200. {webscout-7.2 → webscout-7.3}/webscout/scout/core/text_utils.py +0 -0
  201. {webscout-7.2 → webscout-7.3}/webscout/scout/core/web_analyzer.py +0 -0
  202. {webscout-7.2 → webscout-7.3}/webscout/scout/core.py +0 -0
  203. {webscout-7.2 → webscout-7.3}/webscout/scout/element.py +0 -0
  204. {webscout-7.2 → webscout-7.3}/webscout/scout/parsers/__init__.py +0 -0
  205. {webscout-7.2 → webscout-7.3}/webscout/scout/parsers/html5lib_parser.py +0 -0
  206. {webscout-7.2 → webscout-7.3}/webscout/scout/parsers/html_parser.py +0 -0
  207. {webscout-7.2 → webscout-7.3}/webscout/scout/parsers/lxml_parser.py +0 -0
  208. {webscout-7.2 → webscout-7.3}/webscout/scout/utils.py +0 -0
  209. {webscout-7.2 → webscout-7.3}/webscout/swiftcli/__init__.py +0 -0
  210. {webscout-7.2 → webscout-7.3}/webscout/tempid.py +0 -0
  211. {webscout-7.2 → webscout-7.3}/webscout/update_checker.py +0 -0
  212. {webscout-7.2 → webscout-7.3}/webscout/utils.py +0 -0
  213. {webscout-7.2 → webscout-7.3}/webscout/zeroart/__init__.py +0 -0
  214. {webscout-7.2 → webscout-7.3}/webscout/zeroart/base.py +0 -0
  215. {webscout-7.2 → webscout-7.3}/webscout/zeroart/effects.py +0 -0
  216. {webscout-7.2 → webscout-7.3}/webscout/zeroart/fonts.py +0 -0
  217. {webscout-7.2 → webscout-7.3}/webscout.egg-info/dependency_links.txt +0 -0
  218. {webscout-7.2 → webscout-7.3}/webscout.egg-info/entry_points.txt +0 -0
  219. {webscout-7.2 → webscout-7.3}/webscout.egg-info/requires.txt +0 -0
  220. {webscout-7.2 → webscout-7.3}/webscout.egg-info/top_level.txt +0 -0
  221. {webscout-7.2 → webscout-7.3}/webstoken/__init__.py +0 -0
  222. {webscout-7.2 → webscout-7.3}/webstoken/classifier.py +0 -0
  223. {webscout-7.2 → webscout-7.3}/webstoken/keywords.py +0 -0
  224. {webscout-7.2 → webscout-7.3}/webstoken/language.py +0 -0
  225. {webscout-7.2 → webscout-7.3}/webstoken/ner.py +0 -0
  226. {webscout-7.2 → webscout-7.3}/webstoken/normalizer.py +0 -0
  227. {webscout-7.2 → webscout-7.3}/webstoken/processor.py +0 -0
  228. {webscout-7.2 → webscout-7.3}/webstoken/sentiment.py +0 -0
  229. {webscout-7.2 → webscout-7.3}/webstoken/stemmer.py +0 -0
  230. {webscout-7.2 → webscout-7.3}/webstoken/tagger.py +0 -0
  231. {webscout-7.2 → webscout-7.3}/webstoken/tokenizer.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.1
2
2
  Name: webscout
3
- Version: 7.2
3
+ Version: 7.3
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
@@ -23,60 +23,9 @@ Classifier: Topic :: Internet :: WWW/HTTP :: Indexing/Search
23
23
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
24
  Requires-Python: >=3.7
25
25
  Description-Content-Type: text/markdown
26
- License-File: LICENSE.md
27
- Requires-Dist: setuptools
28
- Requires-Dist: wheel
29
- Requires-Dist: pip
30
- Requires-Dist: mistune
31
- Requires-Dist: tenacity
32
- Requires-Dist: curl_cffi
33
- Requires-Dist: nest-asyncio
34
- Requires-Dist: rich
35
- Requires-Dist: markdownify
36
- Requires-Dist: requests
37
- Requires-Dist: google-generativeai
38
- Requires-Dist: lxml>=5.2.2
39
- Requires-Dist: termcolor
40
- Requires-Dist: orjson
41
- Requires-Dist: PyYAML
42
- Requires-Dist: tls_client
43
- Requires-Dist: clipman
44
- Requires-Dist: playsound==1.2.2
45
- Requires-Dist: ollama
46
- Requires-Dist: pillow
47
- Requires-Dist: bson
48
- Requires-Dist: cloudscraper
49
- Requires-Dist: html5lib
50
- Requires-Dist: aiofiles
51
- Requires-Dist: emoji
52
- Requires-Dist: openai
53
- Requires-Dist: prompt-toolkit
54
- Requires-Dist: primp
55
- Requires-Dist: pyreqwest_impersonate
56
- Requires-Dist: gradio_client
57
- Requires-Dist: psutil
58
- Requires-Dist: pygetwindow
59
- Requires-Dist: aiohttp
60
26
  Provides-Extra: dev
61
- Requires-Dist: ruff>=0.1.6; extra == "dev"
62
- Requires-Dist: pytest>=7.4.2; extra == "dev"
63
27
  Provides-Extra: local
64
- Requires-Dist: llama-cpp-python; extra == "local"
65
- Requires-Dist: colorama; extra == "local"
66
- Requires-Dist: numpy; extra == "local"
67
- Requires-Dist: huggingface_hub[cli]; extra == "local"
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
28
+ License-File: LICENSE.md
80
29
 
81
30
 
82
31
  [![Telegram](https://img.shields.io/badge/Telegram-2CA5E0?style=for-the-badge&logo=telegram&logoColor=white)](https://t.me/official_helpingai)
@@ -96,7 +45,7 @@ Dynamic: summary
96
45
  <p align="center">
97
46
  <strong>Webscout</strong> is the all-in-one search and AI toolkit you need.
98
47
  <br>
99
- Discover insights with Google, DuckDuckGo, and Phind; access cutting-edge AI models; transcribe YouTube videos; generate temporary emails and phone numbers; perform text-to-speech conversions; run offline language models; and much more!
48
+ Discover insights with Yep.com, DuckDuckGo, and Phind; access cutting-edge AI models; transcribe YouTube videos; generate temporary emails and phone numbers; perform text-to-speech conversions; run offline language models; and much more!
100
49
  </p>
101
50
 
102
51
  <div align="center">
@@ -285,7 +234,43 @@ if __name__ == "__main__":
285
234
  asyncio.run(main())
286
235
  ```
287
236
 
237
+ ...
238
+
239
+ ### 🔍 `YepSearch` - Search using Yep.com
288
240
 
241
+ ```python
242
+ from webscout import YepSearch
243
+
244
+ # Initialize YepSearch
245
+ yep = YepSearch(
246
+ timeout=20, # Optional: Set custom timeout
247
+ proxies=None, # Optional: Use proxies
248
+ verify=True # Optional: SSL verification
249
+ )
250
+
251
+ # Text Search
252
+ text_results = yep.text(
253
+ keywords="artificial intelligence",
254
+ region="all", # Optional: Region for results
255
+ safesearch="moderate", # Optional: "on", "moderate", "off"
256
+ max_results=10 # Optional: Limit number of results
257
+ )
258
+ print(text_results)
259
+
260
+ # Image Search
261
+ image_results = yep.images(
262
+ keywords="nature photography",
263
+ region="all",
264
+ safesearch="moderate",
265
+ max_results=10
266
+ )
267
+ print(image_results)
268
+
269
+
270
+ # Suggestions
271
+ suggestions = yep.suggestions("hist")
272
+ print(suggestions)
273
+ ```
289
274
 
290
275
  ## 🔍 GoogleS (formerly DWEBS)
291
276
 
@@ -517,8 +502,21 @@ with WEBS() as WEBS:
517
502
  print(r)
518
503
  ```
519
504
 
505
+ ### 9. `weather()` - Weather Information by DuckDuckGo.com
506
+
507
+ ```python
508
+ from webscout import WEBS
509
+
510
+ # Get weather information for a location using DuckDuckGo.com
511
+ with WEBS() as webs:
512
+ weather_data = webs.weather("New York")
513
+ print(weather_data)
514
+
515
+ ```
516
+
520
517
 
521
- ## 🎭 ALL Acts
518
+
519
+ ## ALL Acts
522
520
 
523
521
  <details>
524
522
  <summary>Expand</summary>
@@ -1332,3 +1330,4 @@ Contributions are welcome! If you'd like to contribute to Webscout, please follo
1332
1330
 
1333
1331
  * All the amazing developers who have contributed to the project!
1334
1332
  * The open-source community for their support and inspiration.
1333
+
@@ -16,7 +16,7 @@
16
16
  <p align="center">
17
17
  <strong>Webscout</strong> is the all-in-one search and AI toolkit you need.
18
18
  <br>
19
- Discover insights with Google, DuckDuckGo, and Phind; access cutting-edge AI models; transcribe YouTube videos; generate temporary emails and phone numbers; perform text-to-speech conversions; run offline language models; and much more!
19
+ Discover insights with Yep.com, DuckDuckGo, and Phind; access cutting-edge AI models; transcribe YouTube videos; generate temporary emails and phone numbers; perform text-to-speech conversions; run offline language models; and much more!
20
20
  </p>
21
21
 
22
22
  <div align="center">
@@ -205,7 +205,43 @@ if __name__ == "__main__":
205
205
  asyncio.run(main())
206
206
  ```
207
207
 
208
+ ...
208
209
 
210
+ ### 🔍 `YepSearch` - Search using Yep.com
211
+
212
+ ```python
213
+ from webscout import YepSearch
214
+
215
+ # Initialize YepSearch
216
+ yep = YepSearch(
217
+ timeout=20, # Optional: Set custom timeout
218
+ proxies=None, # Optional: Use proxies
219
+ verify=True # Optional: SSL verification
220
+ )
221
+
222
+ # Text Search
223
+ text_results = yep.text(
224
+ keywords="artificial intelligence",
225
+ region="all", # Optional: Region for results
226
+ safesearch="moderate", # Optional: "on", "moderate", "off"
227
+ max_results=10 # Optional: Limit number of results
228
+ )
229
+ print(text_results)
230
+
231
+ # Image Search
232
+ image_results = yep.images(
233
+ keywords="nature photography",
234
+ region="all",
235
+ safesearch="moderate",
236
+ max_results=10
237
+ )
238
+ print(image_results)
239
+
240
+
241
+ # Suggestions
242
+ suggestions = yep.suggestions("hist")
243
+ print(suggestions)
244
+ ```
209
245
 
210
246
  ## 🔍 GoogleS (formerly DWEBS)
211
247
 
@@ -437,8 +473,21 @@ with WEBS() as WEBS:
437
473
  print(r)
438
474
  ```
439
475
 
476
+ ### 9. `weather()` - Weather Information by DuckDuckGo.com
440
477
 
441
- ## 🎭 ALL Acts
478
+ ```python
479
+ from webscout import WEBS
480
+
481
+ # Get weather information for a location using DuckDuckGo.com
482
+ with WEBS() as webs:
483
+ weather_data = webs.weather("New York")
484
+ print(weather_data)
485
+
486
+ ```
487
+
488
+
489
+
490
+ ## ALL Acts
442
491
 
443
492
  <details>
444
493
  <summary>Expand</summary>
@@ -1252,3 +1301,4 @@ Contributions are welcome! If you'd like to contribute to Webscout, please follo
1252
1301
 
1253
1302
  * All the amazing developers who have contributed to the project!
1254
1303
  * The open-source community for their support and inspiration.
1304
+
@@ -16,7 +16,7 @@ import httpx
16
16
  from httpx import AsyncClient, HTTPStatusError
17
17
 
18
18
  # For image models using validation. Adjust based on organization internal pydantic.
19
- from pydantic import BaseModel, field_validator
19
+ from pydantic import BaseModel, validator
20
20
 
21
21
  # Rich is retained for logging within image methods.
22
22
  from rich.console import Console
@@ -463,7 +463,7 @@ class GeneratedImage(Image):
463
463
  """
464
464
  cookies: Dict[str, str]
465
465
 
466
- @field_validator("cookies")
466
+ @validator("cookies")
467
467
  def validate_cookies(cls, v):
468
468
  if not v:
469
469
  raise ValueError("GeneratedImage requires cookies from GeminiClient.")
@@ -1,6 +1,7 @@
1
1
  from enum import Enum
2
2
 
3
3
  class LogLevel(Enum):
4
+ NOTSET = 0
4
5
  DEBUG = 10
5
6
  INFO = 20
6
7
  WARNING = 30
@@ -9,6 +10,8 @@ class LogLevel(Enum):
9
10
 
10
11
  @staticmethod
11
12
  def get_level(level_str: str) -> 'LogLevel':
13
+ if not level_str:
14
+ return LogLevel.NOTSET
12
15
  try:
13
16
  return LogLevel[level_str.upper()]
14
17
  except KeyError:
@@ -0,0 +1,166 @@
1
+
2
+ import asyncio
3
+ import sys
4
+ import threading
5
+ import traceback
6
+ from datetime import datetime
7
+ from typing import Any, Dict, List, Optional, Union
8
+
9
+ from ..core.level import LogLevel
10
+ from ..styles.formats import LogFormat
11
+ from ..styles.colors import LogColors
12
+
13
+ class Logger:
14
+ # Emoji mappings for different log levels
15
+ LEVEL_EMOJIS = {
16
+ LogLevel.DEBUG: "🔍",
17
+ LogLevel.INFO: "ℹ️",
18
+ LogLevel.WARNING: "⚠️",
19
+ LogLevel.ERROR: "❌",
20
+ LogLevel.CRITICAL: "🔥"
21
+ }
22
+
23
+ def __init__(
24
+ self,
25
+ name: str = "LitLogger",
26
+ level: Union[str, LogLevel, None] = None,
27
+ format: Union[str, LogFormat] = LogFormat.MODERN_EMOJI,
28
+ handlers: List = None,
29
+ enable_colors: bool = True,
30
+ async_mode: bool = False,
31
+ show_thread: bool = True,
32
+ show_context: bool = True
33
+ ):
34
+ self.name = name
35
+ self.level = LogLevel.NOTSET if level is None else (
36
+ LogLevel.get_level(level) if isinstance(level, str) else level
37
+ )
38
+ self.format = format
39
+ self.enable_colors = enable_colors
40
+ self.async_mode = async_mode
41
+ self.show_thread = show_thread
42
+ self.show_context = show_context
43
+ self._context_data = {}
44
+
45
+ # Initialize with default console handler if none provided
46
+ if handlers is None:
47
+ from ..handlers.console import ConsoleHandler
48
+ self.handlers = [ConsoleHandler(level=self.level)]
49
+ else:
50
+ self.handlers = handlers
51
+
52
+ def _format_message(self, level: LogLevel, message: str, **kwargs) -> str:
53
+ now = datetime.now()
54
+ emoji = self.LEVEL_EMOJIS.get(level, "") if self.enable_colors else ""
55
+
56
+ log_data = {
57
+ "timestamp": now.strftime("%H:%M:%S"),
58
+ "level": level.name,
59
+ "name": self.name,
60
+ "message": str(message),
61
+ "emoji": emoji,
62
+ "thread": threading.current_thread().name if self.show_thread else "",
63
+ }
64
+
65
+ # Add context data
66
+ if self.show_context and self._context_data:
67
+ log_data.update(self._context_data)
68
+
69
+ # Add extra kwargs
70
+ log_data.update(kwargs)
71
+
72
+ # Format exception if present
73
+ if 'exc_info' in kwargs:
74
+ exc_info = kwargs['exc_info']
75
+ if exc_info:
76
+ exception_text = ''.join(traceback.format_exception(*exc_info))
77
+ log_data['message'] = f"{message}\n{exception_text}"
78
+
79
+ try:
80
+ base_message = f"{emoji} [{log_data['timestamp']}] {level.name} {log_data['message']}"
81
+ return base_message
82
+ except Exception as e:
83
+ return f"[{log_data['timestamp']}] {level.name}: {message}"
84
+
85
+ def _log(self, level: LogLevel, message: str, **kwargs):
86
+ if self.async_mode:
87
+ loop = asyncio.get_event_loop()
88
+ if loop.is_running():
89
+ return asyncio.create_task(self._async_log(level, message, **kwargs))
90
+ else:
91
+ return loop.run_until_complete(self._async_log(level, message, **kwargs))
92
+ return self._sync_log(level, message, **kwargs)
93
+
94
+ def debug(self, message: str, **kwargs):
95
+ self._log(LogLevel.DEBUG, message, **kwargs)
96
+
97
+ def info(self, message: str, **kwargs):
98
+ self._log(LogLevel.INFO, message, **kwargs)
99
+
100
+ def warning(self, message: str, **kwargs):
101
+ self._log(LogLevel.WARNING, message, **kwargs)
102
+
103
+ def error(self, message: str, **kwargs):
104
+ self._log(LogLevel.ERROR, message, **kwargs)
105
+
106
+ def critical(self, message: str, **kwargs):
107
+ self._log(LogLevel.CRITICAL, message, **kwargs)
108
+
109
+ def exception(self, message: str, exc_info=True, **kwargs):
110
+ """
111
+ Log an exception with traceback.
112
+
113
+ Args:
114
+ message: The message to log
115
+ exc_info: If True, adds exception info to the message. Can also be a tuple (type, value, traceback)
116
+ **kwargs: Additional key-value pairs to log
117
+ """
118
+ if exc_info:
119
+ if not isinstance(exc_info, tuple):
120
+ exc_info = sys.exc_info()
121
+ kwargs['exc_info'] = exc_info
122
+ self.error(message, **kwargs)
123
+
124
+ def _sync_log(self, level: LogLevel, message: str, **kwargs):
125
+ if self._should_log(level):
126
+ formatted_message = self._format_message(level, message, **kwargs)
127
+ for handler in self.handlers:
128
+ if handler.level == LogLevel.NOTSET or level.value >= handler.level.value:
129
+ handler.emit(formatted_message, level)
130
+
131
+ async def _async_log(self, level: LogLevel, message: str, **kwargs):
132
+ if self._should_log(level):
133
+ formatted_message = self._format_message(level, message, **kwargs)
134
+ tasks = []
135
+ for handler in self.handlers:
136
+ if handler.level == LogLevel.NOTSET or level.value >= handler.level.value:
137
+ if hasattr(handler, 'async_emit'):
138
+ tasks.append(handler.async_emit(formatted_message, level))
139
+ else:
140
+ tasks.append(asyncio.to_thread(handler.emit, formatted_message, level))
141
+ await asyncio.gather(*tasks)
142
+
143
+ def _should_log(self, level: LogLevel) -> bool:
144
+ return self.level == LogLevel.NOTSET or level.value >= self.level.value
145
+
146
+ def set_context(self, **kwargs):
147
+ self._context_data.update(kwargs)
148
+
149
+ def clear_context(self):
150
+ self._context_data.clear()
151
+
152
+ def set_style(self, style: str):
153
+ """Set logger style format."""
154
+ if style in LogFormat.TEMPLATES:
155
+ self.format = LogFormat.TEMPLATES[style]
156
+ else:
157
+ raise ValueError(f"Unknown style: {style}")
158
+
159
+ def __enter__(self):
160
+ return self
161
+
162
+ def __exit__(self, exc_type, exc_val, exc_tb):
163
+ if exc_type is not None:
164
+ self.error(f"Context exited with error: {exc_val}")
165
+ return False
166
+ return True
@@ -0,0 +1,33 @@
1
+ import sys
2
+ from ..core.level import LogLevel
3
+ from ..styles.colors import LogColors
4
+
5
+ class ConsoleHandler:
6
+ def __init__(self, level: LogLevel = LogLevel.DEBUG, stream=sys.stdout):
7
+ self.level = level
8
+ self.stream = stream
9
+ self.colors = LogColors()
10
+
11
+ def emit(self, message: str, level: LogLevel):
12
+ """Write the colored message to the console."""
13
+ try:
14
+ # Apply color based on log level
15
+ color = LogColors.LEVEL_COLORS.get(level, LogColors.RESET)
16
+ colored_message = f"{color}{message}{LogColors.RESET}"
17
+ print(colored_message, file=self.stream, flush=True)
18
+ except Exception as e:
19
+ # Fallback to plain printing if coloring fails
20
+ print(message, file=self.stream, flush=True)
21
+
22
+ async def async_emit(self, message: str, level: LogLevel):
23
+ """
24
+ Asynchronously write log message to console.
25
+ Just calls emit() since console output is generally fast enough.
26
+ """
27
+ self.emit(message, level)
28
+
29
+ class ErrorConsoleHandler(ConsoleHandler):
30
+ """Specialized handler that writes to stderr."""
31
+
32
+ def __init__(self, level: LogLevel = LogLevel.ERROR):
33
+ super().__init__(stream=sys.stderr, level=level)
@@ -125,25 +125,24 @@ class NetworkHandler:
125
125
 
126
126
  async def async_emit(self, message: str, level: LogLevel):
127
127
  """Asynchronously send log message to remote server."""
128
- if level.value < self.level.value:
129
- return
128
+ # Fix: Allow all messages if level is NOTSET
129
+ if self.level == LogLevel.NOTSET or level.value >= self.level.value:
130
+ log_data = {
131
+ "message": message,
132
+ "level": level.name,
133
+ **self.custom_fields
134
+ }
130
135
 
131
- log_data = {
132
- "message": message,
133
- "level": level.name,
134
- **self.custom_fields
135
- }
136
-
137
- if self.batch_size > 0:
138
- self._batch.append(log_data)
139
- if len(self._batch) >= self.batch_size:
140
- await self._send_batch()
141
- else:
142
- if self.protocol in ["http", "https"]:
143
- await self._send_http(log_data)
136
+ if self.batch_size > 0:
137
+ self._batch.append(log_data)
138
+ if len(self._batch) >= self.batch_size:
139
+ await self._send_batch()
144
140
  else:
145
- await self._send_tcp(log_data)
146
-
141
+ if self.protocol in ["http", "https"]:
142
+ await self._send_http(log_data)
143
+ else:
144
+ await self._send_tcp(log_data)
145
+
147
146
  async def _send_batch(self):
148
147
  """Send batched log messages."""
149
148
  if not self._batch: