webscout 8.3.4__tar.gz → 8.3.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of webscout might be problematic. Click here for more details.

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