webscout 8.3.4__tar.gz → 8.3.5__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 (342) hide show
  1. {webscout-8.3.4/webscout.egg-info → webscout-8.3.5}/PKG-INFO +9 -149
  2. {webscout-8.3.4 → webscout-8.3.5}/README.md +7 -147
  3. webscout-8.3.5/changelog.md +0 -0
  4. {webscout-8.3.4 → webscout-8.3.5}/pyproject.toml +1 -1
  5. webscout-8.3.5/webscout/AIutel.py +58 -0
  6. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/AISEARCH/__init__.py +11 -10
  7. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/AISEARCH/felo_search.py +7 -3
  8. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/AISEARCH/scira_search.py +2 -0
  9. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/AISEARCH/stellar_search.py +53 -8
  10. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Deepinfra.py +7 -1
  11. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/TogetherAI.py +57 -48
  12. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/TwoAI.py +94 -1
  13. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/__init__.py +0 -2
  14. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/deepinfra.py +6 -0
  15. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/scirachat.py +4 -0
  16. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/textpollinations.py +11 -7
  17. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/venice.py +1 -0
  18. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Perplexitylabs.py +163 -147
  19. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Qodo.py +30 -6
  20. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/__init__.py +1 -0
  21. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/together.py +7 -6
  22. webscout-8.3.5/webscout/Provider/TTI/venice.py +368 -0
  23. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TextPollinationsAI.py +11 -7
  24. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TogetherAI.py +57 -44
  25. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TwoAI.py +96 -2
  26. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TypliAI.py +33 -27
  27. webscout-8.3.5/webscout/Provider/UNFINISHED/PERPLEXED_search.py +254 -0
  28. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/UNFINISHED/fetch_together_models.py +6 -11
  29. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Venice.py +1 -0
  30. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/WiseCat.py +18 -20
  31. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/__init__.py +0 -6
  32. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/scira_chat.py +4 -0
  33. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/toolbaz.py +5 -10
  34. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/typefully.py +1 -11
  35. {webscout-8.3.4 → webscout-8.3.5}/webscout/__init__.py +3 -15
  36. {webscout-8.3.4 → webscout-8.3.5}/webscout/auth/__init__.py +19 -4
  37. {webscout-8.3.4 → webscout-8.3.5}/webscout/auth/api_key_manager.py +189 -189
  38. {webscout-8.3.4 → webscout-8.3.5}/webscout/auth/auth_system.py +25 -40
  39. webscout-8.3.5/webscout/auth/config.py +175 -0
  40. webscout-8.3.5/webscout/auth/database.py +755 -0
  41. {webscout-8.3.4 → webscout-8.3.5}/webscout/auth/models.py +185 -130
  42. {webscout-8.3.4 → webscout-8.3.5}/webscout/auth/request_processing.py +175 -11
  43. {webscout-8.3.4 → webscout-8.3.5}/webscout/auth/routes.py +99 -2
  44. {webscout-8.3.4 → webscout-8.3.5}/webscout/auth/server.py +9 -2
  45. webscout-8.3.5/webscout/auth/simple_logger.py +236 -0
  46. webscout-8.3.4/webscout/AIutel.py → webscout-8.3.5/webscout/sanitize.py +71 -19
  47. webscout-8.3.5/webscout/version.py +2 -0
  48. {webscout-8.3.4 → webscout-8.3.5/webscout.egg-info}/PKG-INFO +9 -149
  49. {webscout-8.3.4 → webscout-8.3.5}/webscout.egg-info/SOURCES.txt +8 -12
  50. {webscout-8.3.4 → webscout-8.3.5}/webscout.egg-info/requires.txt +1 -1
  51. webscout-8.3.4/changelog.md +0 -0
  52. webscout-8.3.4/webscout/Provider/OPENAI/README_AUTOPROXY.md +0 -238
  53. webscout-8.3.4/webscout/Provider/OPENAI/typegpt.py +0 -368
  54. webscout-8.3.4/webscout/Provider/OPENAI/uncovrAI.py +0 -477
  55. webscout-8.3.4/webscout/Provider/WritingMate.py +0 -273
  56. webscout-8.3.4/webscout/Provider/typegpt.py +0 -284
  57. webscout-8.3.4/webscout/Provider/uncovr.py +0 -333
  58. webscout-8.3.4/webscout/auth/config.py +0 -76
  59. webscout-8.3.4/webscout/auth/database.py +0 -400
  60. webscout-8.3.4/webscout/version.py +0 -2
  61. {webscout-8.3.4 → webscout-8.3.5}/LEGAL_NOTICE.md +0 -0
  62. {webscout-8.3.4 → webscout-8.3.5}/LICENSE.md +0 -0
  63. {webscout-8.3.4 → webscout-8.3.5}/MANIFEST.in +0 -0
  64. {webscout-8.3.4 → webscout-8.3.5}/setup.cfg +0 -0
  65. {webscout-8.3.4 → webscout-8.3.5}/webscout/AIauto.py +0 -0
  66. {webscout-8.3.4 → webscout-8.3.5}/webscout/AIbase.py +0 -0
  67. {webscout-8.3.4 → webscout-8.3.5}/webscout/Bard.py +0 -0
  68. {webscout-8.3.4 → webscout-8.3.5}/webscout/Bing_search.py +0 -0
  69. {webscout-8.3.4 → webscout-8.3.5}/webscout/DWEBS.py +0 -0
  70. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/Act.md +0 -0
  71. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/GitToolkit/__init__.py +0 -0
  72. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/GitToolkit/gitapi/README.md +0 -0
  73. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/GitToolkit/gitapi/__init__.py +0 -0
  74. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/GitToolkit/gitapi/repository.py +0 -0
  75. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/GitToolkit/gitapi/user.py +0 -0
  76. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/GitToolkit/gitapi/utils.py +0 -0
  77. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/README.md +0 -0
  78. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/YTdownloader.py +0 -0
  79. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/__init__.py +0 -0
  80. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/transcriber.py +0 -0
  81. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/ytapi/README.md +0 -0
  82. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/ytapi/__init__.py +0 -0
  83. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/ytapi/channel.py +0 -0
  84. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/ytapi/errors.py +0 -0
  85. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/ytapi/extras.py +0 -0
  86. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/ytapi/https.py +0 -0
  87. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/ytapi/patterns.py +0 -0
  88. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/ytapi/playlist.py +0 -0
  89. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/ytapi/pool.py +0 -0
  90. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/ytapi/query.py +0 -0
  91. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/ytapi/stream.py +0 -0
  92. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/ytapi/utils.py +0 -0
  93. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/YTToolkit/ytapi/video.py +0 -0
  94. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/__init__.py +0 -0
  95. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/autocoder/__init__.py +0 -0
  96. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/autocoder/autocoder.py +0 -0
  97. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/autocoder/autocoder_utiles.py +0 -0
  98. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/gguf.md +0 -0
  99. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/gguf.py +0 -0
  100. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/tempmail/README.md +0 -0
  101. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/tempmail/__init__.py +0 -0
  102. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/tempmail/async_utils.py +0 -0
  103. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/tempmail/base.py +0 -0
  104. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/tempmail/cli.py +0 -0
  105. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/tempmail/emailnator.py +0 -0
  106. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/tempmail/mail_tm.py +0 -0
  107. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/tempmail/temp_mail_io.py +0 -0
  108. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/weather.md +0 -0
  109. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/weather.py +0 -0
  110. {webscout-8.3.4 → webscout-8.3.5}/webscout/Extra/weather_ascii.py +0 -0
  111. {webscout-8.3.4 → webscout-8.3.5}/webscout/Litlogger/README.md +0 -0
  112. {webscout-8.3.4 → webscout-8.3.5}/webscout/Litlogger/__init__.py +0 -0
  113. {webscout-8.3.4 → webscout-8.3.5}/webscout/Litlogger/formats.py +0 -0
  114. {webscout-8.3.4 → webscout-8.3.5}/webscout/Litlogger/handlers.py +0 -0
  115. {webscout-8.3.4 → webscout-8.3.5}/webscout/Litlogger/levels.py +0 -0
  116. {webscout-8.3.4 → webscout-8.3.5}/webscout/Litlogger/logger.py +0 -0
  117. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/AISEARCH/DeepFind.py +0 -0
  118. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/AISEARCH/Perplexity.py +0 -0
  119. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/AISEARCH/README.md +0 -0
  120. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/AISEARCH/genspark_search.py +0 -0
  121. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/AISEARCH/hika_search.py +0 -0
  122. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/AISEARCH/iask_search.py +0 -0
  123. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/AISEARCH/monica_search.py +0 -0
  124. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/AISEARCH/webpilotai_search.py +0 -0
  125. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Aitopia.py +0 -0
  126. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/AllenAI.py +0 -0
  127. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Andi.py +0 -0
  128. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Blackboxai.py +0 -0
  129. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/ChatGPTClone.py +0 -0
  130. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/ChatSandbox.py +0 -0
  131. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Cloudflare.py +0 -0
  132. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Cohere.py +0 -0
  133. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/ExaAI.py +0 -0
  134. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/ExaChat.py +0 -0
  135. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Flowith.py +0 -0
  136. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/FreeGemini.py +0 -0
  137. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Gemini.py +0 -0
  138. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/GeminiProxy.py +0 -0
  139. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/GithubChat.py +0 -0
  140. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/GizAI.py +0 -0
  141. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Glider.py +0 -0
  142. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Groq.py +0 -0
  143. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/HeckAI.py +0 -0
  144. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Hunyuan.py +0 -0
  145. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Jadve.py +0 -0
  146. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Koboldai.py +0 -0
  147. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/LambdaChat.py +0 -0
  148. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Llama3.py +0 -0
  149. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/MCPCore.py +0 -0
  150. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Marcus.py +0 -0
  151. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/MiniMax.py +0 -0
  152. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Nemotron.py +0 -0
  153. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Netwrck.py +0 -0
  154. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OLLAMA.py +0 -0
  155. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/BLACKBOXAI.py +0 -0
  156. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/Cloudflare.py +0 -0
  157. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/FalconH1.py +0 -0
  158. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/FreeGemini.py +0 -0
  159. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/GeminiProxy.py +0 -0
  160. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/MiniMax.py +0 -0
  161. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/NEMOTRON.py +0 -0
  162. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/PI.py +0 -0
  163. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/Qwen3.py +0 -0
  164. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/README.md +0 -0
  165. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/ai4chat.py +0 -0
  166. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/autoproxy.py +0 -0
  167. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/base.py +0 -0
  168. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/c4ai.py +0 -0
  169. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/chatgpt.py +0 -0
  170. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/chatgptclone.py +0 -0
  171. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/chatsandbox.py +0 -0
  172. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/copilot.py +0 -0
  173. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/e2b.py +0 -0
  174. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/exaai.py +0 -0
  175. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/exachat.py +0 -0
  176. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/flowith.py +0 -0
  177. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/friendli.py +0 -0
  178. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/glider.py +0 -0
  179. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/groq.py +0 -0
  180. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/heckai.py +0 -0
  181. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/llmchatco.py +0 -0
  182. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/mcpcore.py +0 -0
  183. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/monochat.py +0 -0
  184. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/multichat.py +0 -0
  185. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/netwrck.py +0 -0
  186. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/oivscode.py +0 -0
  187. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/opkfc.py +0 -0
  188. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/pydantic_imports.py +0 -0
  189. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/qodo.py +0 -0
  190. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/sonus.py +0 -0
  191. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/standardinput.py +0 -0
  192. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/toolbaz.py +0 -0
  193. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/typefully.py +0 -0
  194. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/utils.py +0 -0
  195. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/wisecat.py +0 -0
  196. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/writecream.py +0 -0
  197. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/x0gpt.py +0 -0
  198. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/xenai.py +0 -0
  199. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OPENAI/yep.py +0 -0
  200. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/OpenGPT.py +0 -0
  201. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Openai.py +0 -0
  202. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/PI.py +0 -0
  203. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/QwenLM.py +0 -0
  204. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/Reka.py +0 -0
  205. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/STT/__init__.py +0 -0
  206. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/STT/base.py +0 -0
  207. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/STT/elevenlabs.py +0 -0
  208. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/StandardInput.py +0 -0
  209. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/README.md +0 -0
  210. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/aiarta.py +0 -0
  211. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/base.py +0 -0
  212. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/bing.py +0 -0
  213. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/gpt1image.py +0 -0
  214. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/imagen.py +0 -0
  215. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/infip.py +0 -0
  216. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/magicstudio.py +0 -0
  217. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/monochat.py +0 -0
  218. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/piclumen.py +0 -0
  219. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/pixelmuse.py +0 -0
  220. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/pollinations.py +0 -0
  221. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTI/utils.py +0 -0
  222. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTS/README.md +0 -0
  223. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTS/__init__.py +0 -0
  224. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTS/base.py +0 -0
  225. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTS/deepgram.py +0 -0
  226. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTS/elevenlabs.py +0 -0
  227. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTS/freetts.py +0 -0
  228. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTS/gesserit.py +0 -0
  229. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTS/murfai.py +0 -0
  230. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTS/openai_fm.py +0 -0
  231. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTS/parler.py +0 -0
  232. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTS/speechma.py +0 -0
  233. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTS/sthir.py +0 -0
  234. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTS/streamElements.py +0 -0
  235. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TTS/utils.py +0 -0
  236. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/TeachAnything.py +0 -0
  237. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/UNFINISHED/ChatHub.py +0 -0
  238. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/UNFINISHED/ChutesAI.py +0 -0
  239. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/UNFINISHED/Youchat.py +0 -0
  240. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/UNFINISHED/liner_api_request.py +0 -0
  241. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/UNFINISHED/puterjs.py +0 -0
  242. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/UNFINISHED/test_lmarena.py +0 -0
  243. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/VercelAI.py +0 -0
  244. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/WrDoChat.py +0 -0
  245. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/XenAI.py +0 -0
  246. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/ai4chat.py +0 -0
  247. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/akashgpt.py +0 -0
  248. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/asksteve.py +0 -0
  249. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/cerebras.py +0 -0
  250. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/chatglm.py +0 -0
  251. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/cleeai.py +0 -0
  252. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/copilot.py +0 -0
  253. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/deepseek_assistant.py +0 -0
  254. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/elmo.py +0 -0
  255. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/freeaichat.py +0 -0
  256. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/geminiapi.py +0 -0
  257. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/granite.py +0 -0
  258. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/hermes.py +0 -0
  259. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/julius.py +0 -0
  260. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/koala.py +0 -0
  261. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/learnfastai.py +0 -0
  262. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/llama3mitril.py +0 -0
  263. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/llmchat.py +0 -0
  264. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/llmchatco.py +0 -0
  265. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/lmarena.py +0 -0
  266. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/meta.py +0 -0
  267. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/monochat.py +0 -0
  268. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/multichat.py +0 -0
  269. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/oivscode.py +0 -0
  270. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/samurai.py +0 -0
  271. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/scnet.py +0 -0
  272. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/searchchat.py +0 -0
  273. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/sonus.py +0 -0
  274. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/talkai.py +0 -0
  275. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/turboseek.py +0 -0
  276. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/x0gpt.py +0 -0
  277. {webscout-8.3.4 → webscout-8.3.5}/webscout/Provider/yep.py +0 -0
  278. {webscout-8.3.4 → webscout-8.3.5}/webscout/__main__.py +0 -0
  279. {webscout-8.3.4 → webscout-8.3.5}/webscout/auth/exceptions.py +0 -0
  280. {webscout-8.3.4 → webscout-8.3.5}/webscout/auth/middleware.py +0 -0
  281. {webscout-8.3.4 → webscout-8.3.5}/webscout/auth/providers.py +0 -0
  282. {webscout-8.3.4 → webscout-8.3.5}/webscout/auth/rate_limiter.py +0 -0
  283. {webscout-8.3.4 → webscout-8.3.5}/webscout/auth/request_models.py +0 -0
  284. {webscout-8.3.4 → webscout-8.3.5}/webscout/auth/schemas.py +0 -0
  285. {webscout-8.3.4 → webscout-8.3.5}/webscout/cli.py +0 -0
  286. {webscout-8.3.4 → webscout-8.3.5}/webscout/client.py +0 -0
  287. {webscout-8.3.4 → webscout-8.3.5}/webscout/conversation.py +0 -0
  288. {webscout-8.3.4 → webscout-8.3.5}/webscout/exceptions.py +0 -0
  289. {webscout-8.3.4 → webscout-8.3.5}/webscout/litagent/Readme.md +0 -0
  290. {webscout-8.3.4 → webscout-8.3.5}/webscout/litagent/__init__.py +0 -0
  291. {webscout-8.3.4 → webscout-8.3.5}/webscout/litagent/agent.py +0 -0
  292. {webscout-8.3.4 → webscout-8.3.5}/webscout/litagent/constants.py +0 -0
  293. {webscout-8.3.4 → webscout-8.3.5}/webscout/litprinter/__init__.py +0 -0
  294. {webscout-8.3.4 → webscout-8.3.5}/webscout/models.py +0 -0
  295. {webscout-8.3.4 → webscout-8.3.5}/webscout/optimizers.py +0 -0
  296. {webscout-8.3.4 → webscout-8.3.5}/webscout/prompt_manager.py +0 -0
  297. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/README.md +0 -0
  298. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/__init__.py +0 -0
  299. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/core/__init__.py +0 -0
  300. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/core/crawler.py +0 -0
  301. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/core/scout.py +0 -0
  302. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/core/search_result.py +0 -0
  303. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/core/text_analyzer.py +0 -0
  304. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/core/text_utils.py +0 -0
  305. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/core/web_analyzer.py +0 -0
  306. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/element.py +0 -0
  307. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/parsers/__init__.py +0 -0
  308. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/parsers/html5lib_parser.py +0 -0
  309. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/parsers/html_parser.py +0 -0
  310. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/parsers/lxml_parser.py +0 -0
  311. {webscout-8.3.4 → webscout-8.3.5}/webscout/scout/utils.py +0 -0
  312. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/Readme.md +0 -0
  313. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/__init__.py +0 -0
  314. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/core/__init__.py +0 -0
  315. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/core/cli.py +0 -0
  316. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/core/context.py +0 -0
  317. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/core/group.py +0 -0
  318. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/decorators/__init__.py +0 -0
  319. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/decorators/command.py +0 -0
  320. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/decorators/options.py +0 -0
  321. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/decorators/output.py +0 -0
  322. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/exceptions.py +0 -0
  323. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/plugins/__init__.py +0 -0
  324. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/plugins/base.py +0 -0
  325. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/plugins/manager.py +0 -0
  326. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/utils/__init__.py +0 -0
  327. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/utils/formatting.py +0 -0
  328. {webscout-8.3.4 → webscout-8.3.5}/webscout/swiftcli/utils/parsing.py +0 -0
  329. {webscout-8.3.4 → webscout-8.3.5}/webscout/tempid.py +0 -0
  330. {webscout-8.3.4 → webscout-8.3.5}/webscout/update_checker.py +0 -0
  331. {webscout-8.3.4 → webscout-8.3.5}/webscout/utils.py +0 -0
  332. {webscout-8.3.4 → webscout-8.3.5}/webscout/webscout_search.py +0 -0
  333. {webscout-8.3.4 → webscout-8.3.5}/webscout/webscout_search_async.py +0 -0
  334. {webscout-8.3.4 → webscout-8.3.5}/webscout/yep_search.py +0 -0
  335. {webscout-8.3.4 → webscout-8.3.5}/webscout/zeroart/README.md +0 -0
  336. {webscout-8.3.4 → webscout-8.3.5}/webscout/zeroart/__init__.py +0 -0
  337. {webscout-8.3.4 → webscout-8.3.5}/webscout/zeroart/base.py +0 -0
  338. {webscout-8.3.4 → webscout-8.3.5}/webscout/zeroart/effects.py +0 -0
  339. {webscout-8.3.4 → webscout-8.3.5}/webscout/zeroart/fonts.py +0 -0
  340. {webscout-8.3.4 → webscout-8.3.5}/webscout.egg-info/dependency_links.txt +0 -0
  341. {webscout-8.3.4 → webscout-8.3.5}/webscout.egg-info/entry_points.txt +0 -0
  342. {webscout-8.3.4 → webscout-8.3.5}/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.5
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,7 @@ 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
76
  Dynamic: license-file
77
77
 
78
78
  <div align="center">
@@ -105,7 +105,7 @@ Dynamic: license-file
105
105
  - [🌟 Key Features](#-features)
106
106
  - [⚙️ Installation](#️-installation)
107
107
  - [🖥️ Command Line Interface](#️-command-line-interface)
108
- - [🔄 OpenAI-Compatible API Server](#-openai-compatible-api-server)
108
+ - [🔄 OpenAI-Compatible API Server](docs/openai-api-server.md)
109
109
  - [🔍 Search Engines](#-search-engines)
110
110
  - [🦆 DuckDuckGo Search](#-duckduckgo-search-with-webs-and-asyncwebs)
111
111
  - [💻 WEBS API Reference](#-webs-api-reference)
@@ -117,7 +117,7 @@ Dynamic: license-file
117
117
 
118
118
  <hr/>
119
119
 
120
- > [!IMPORTANT] >
120
+ > [!IMPORTANT]
121
121
  > **Webscout supports three types of compatibility:**
122
122
  >
123
123
  > - **Native Compatibility:** Webscout's own native API for maximum flexibility
@@ -181,6 +181,8 @@ Dynamic: license-file
181
181
  - **[Scout](webscout/scout/README.md):** Advanced web parsing and crawling library with intelligent HTML/XML parsing
182
182
  - **[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
183
  - **[GGUF Conversion](webscout/Extra/gguf.md):** Convert and quantize Hugging Face models to GGUF format
184
+ - **[Utility Decorators](docs/decorators.md):** Easily measure function execution time (`timeIt`) and add retry logic (`retry`) to any function
185
+ - **[Stream Sanitization Utilities](docs/sanitize.md):** Advanced tools for cleaning, decoding, and processing data streams
184
186
  </p>
185
187
  </details>
186
188
 
@@ -381,7 +383,8 @@ For more information, visit the [Inferno GitHub repository](https://github.com/H
381
383
  </p>
382
384
  </details>
383
385
 
384
- > [!NOTE] > **Hardware requirements for running models with Inferno:**
386
+ > [!NOTE]
387
+ > **Hardware requirements for running models with Inferno:**
385
388
  >
386
389
  > - Around 2 GB of RAM for 1B models
387
390
  > - Around 4 GB of RAM for 3B models
@@ -390,150 +393,7 @@ For more information, visit the [Inferno GitHub repository](https://github.com/H
390
393
  > - 32 GB of RAM for 33B models
391
394
  > - GPU acceleration is recommended for better performance
392
395
 
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>
396
+ 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
397
 
538
398
  <hr/>
539
399
 
@@ -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,7 @@ 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
101
  ]
102
102
 
103
103
  [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
@@ -1,10 +1,11 @@
1
- from .stellar_search import *
2
- from .felo_search import *
3
- from .DeepFind import *
4
- from .genspark_search import *
5
- from .monica_search import *
6
- from .webpilotai_search import *
7
- from .hika_search import *
8
- from .scira_search import *
9
- from .iask_search import *
10
- from .Perplexity import *
1
+ from .stellar_search import *
2
+ from .felo_search import *
3
+ from .DeepFind import *
4
+ from .genspark_search import *
5
+ from .monica_search import *
6
+ from .webpilotai_search import *
7
+ from .hika_search import *
8
+ from .scira_search import *
9
+ from .iask_search import *
10
+ from .Perplexity import *
11
+ # from .PERPLEXED_search import *
@@ -69,7 +69,7 @@ class Felo(AISearch):
69
69
  "accept-encoding": "gzip, deflate, br, zstd",
70
70
  "accept-language": "en-US,en;q=0.9,en-IN;q=0.8",
71
71
  "content-type": "application/json",
72
- "cookie": "_clck=1gifk45%7C2%7Cfoa%7C0%7C1686; _clsk=1g5lv07%7C1723558310439%7C1%7C1%7Cu.clarity.ms%2Fcollect; _ga=GA1.1.877307181.1723558313; _ga_8SZPRV97HV=GS1.1.1723558313.1.1.1723558341.0.0.0; _ga_Q9Q1E734CC=GS1.1.1723558313.1.1.1723558341.0.0.0",
72
+ # "cookie": "_clck=1gifk45%7C2%7Cfoa%7C0%7C1686; _clsk=1g5lv07%7C1723558310439%7C1%7C1%7Cu.clarity.ms%2Fcollect; _ga=GA1.1.877307181.1723558313; _ga_8SZPRV97HV=GS1.1.1723558313.1.1.1723558341.0.0.0; _ga_Q9Q1E734CC=GS1.1.1723558313.1.1.1723558341.0.0.0",
73
73
  "dnt": "1",
74
74
  "origin": "https://felo.ai",
75
75
  "referer": "https://felo.ai/",
@@ -141,10 +141,14 @@ class Felo(AISearch):
141
141
  "lang": "",
142
142
  "agent_lang": "en",
143
143
  "search_options": {
144
- "langcode": "en-US"
144
+ "langcode": "en-US",
145
+ "search_image": True,
146
+ "search_video": True,
145
147
  },
146
148
  "search_video": True,
147
- "contexts_from": "google"
149
+ "model": "",
150
+ "contexts_from": "google",
151
+ "auto_routing": True,
148
152
  }
149
153
 
150
154
  def for_stream():
@@ -67,6 +67,8 @@ class Scira(AISearch):
67
67
  "scira-opus": "claude-4-opus-20250514",
68
68
  "scira-opus-pro": "claude-4-opus-20250514",
69
69
  "scira-llama-4": "meta-llama/llama-4-maverick-17b-128e-instruct",
70
+ "scira-kimi-k2": "kimi-k2-instruct",
71
+ "kimi-k2-instruct": "scira-kimi-k2",
70
72
  }
71
73
  def __init__(
72
74
  self,
@@ -53,7 +53,12 @@ class Stellar(AISearch):
53
53
 
54
54
  @staticmethod
55
55
  def _stellar_extractor(chunk: Union[str, bytes, Dict[str, Any]]) -> Optional[str]:
56
- """Extracts content from the Stellar stream format with hex keys and diff arrays. Handles both str and bytes input."""
56
+ """
57
+ Extracts content from the Stellar stream format with focused pattern matching.
58
+
59
+ Prioritizes the primary diff pattern to avoid duplication and focuses on
60
+ incremental content building from stellar.chatastra.ai streaming response.
61
+ """
57
62
  if isinstance(chunk, bytes):
58
63
  try:
59
64
  chunk = chunk.decode('utf-8', errors='replace')
@@ -61,14 +66,54 @@ class Stellar(AISearch):
61
66
  return None
62
67
  if not isinstance(chunk, str):
63
68
  return None
64
- # Match patterns like 6e:{"diff":[0," empathy"],"next":"$@6f"}
65
- pattern = r'[0-9a-f]+:\{"diff":\[0,"([^"\\]*)"\]'
66
- matches = re.findall(pattern, chunk)
67
- if matches:
68
- extracted_text = ''.join(matches)
69
- # Fix escaped newlines
70
- extracted_text = extracted_text.replace('\\n', '\n').replace('\\n\\n', '\n\n')
69
+
70
+ # Primary pattern: Hex key diff format (most reliable for streaming)
71
+ # Matches: 16:{"diff":[0,"AI"],"next":"$@18"}
72
+ primary_pattern = r'[0-9a-f]+:\{"diff":\[0,"([^"]*?)"\]'
73
+ primary_matches = re.findall(primary_pattern, chunk)
74
+
75
+ if primary_matches:
76
+ # Join the matches and clean up
77
+ extracted_text = ''.join(primary_matches)
78
+
79
+ # Handle escape sequences properly
80
+ extracted_text = extracted_text.replace('\\n', '\n')
81
+ extracted_text = extracted_text.replace('\\r', '\r')
82
+ extracted_text = extracted_text.replace('\\"', '"')
83
+ extracted_text = extracted_text.replace('\\t', '\t')
84
+ extracted_text = extracted_text.replace('\\/', '/')
85
+ extracted_text = extracted_text.replace('\\\\', '\\')
86
+
87
+ # Clean up markdown formatting
88
+ extracted_text = extracted_text.replace('\\*', '*')
89
+ extracted_text = extracted_text.replace('\\#', '#')
90
+ extracted_text = extracted_text.replace('\\[', '[')
91
+ extracted_text = extracted_text.replace('\\]', ']')
92
+ extracted_text = extracted_text.replace('\\(', '(')
93
+ extracted_text = extracted_text.replace('\\)', ')')
94
+
71
95
  return extracted_text if extracted_text.strip() else None
96
+
97
+ # # Fallback: Look for Ta24 content blocks (complete responses)
98
+ # if ':Ta24,' in chunk:
99
+ # ta24_pattern = r':Ta24,([^}]*?)(?:\d+:|$)'
100
+ # ta24_matches = re.findall(ta24_pattern, chunk)
101
+ # if ta24_matches:
102
+ # extracted_text = ''.join(ta24_matches)
103
+ # # Basic cleanup
104
+ # extracted_text = extracted_text.replace('\\n', '\n')
105
+ # extracted_text = extracted_text.replace('\\"', '"')
106
+ # return extracted_text.strip() if extracted_text.strip() else None
107
+
108
+ # # Secondary fallback: Direct diff patterns without hex prefix
109
+ # fallback_pattern = r'\{"diff":\[0,"([^"]*?)"\]'
110
+ # fallback_matches = re.findall(fallback_pattern, chunk)
111
+ # if fallback_matches:
112
+ # extracted_text = ''.join(fallback_matches)
113
+ # extracted_text = extracted_text.replace('\\n', '\n')
114
+ # extracted_text = extracted_text.replace('\\"', '"')
115
+ # return extracted_text if extracted_text.strip() else None
116
+
72
117
  return None
73
118
 
74
119
  def search(self, prompt: str, stream: bool = False, raw: bool = False) -> Union[SearchResponse, Generator[Union[Dict[str, str], SearchResponse, str], None, None]]:
@@ -18,8 +18,13 @@ class DeepInfra(Provider):
18
18
 
19
19
  AVAILABLE_MODELS = [
20
20
  "anthropic/claude-4-opus",
21
+ "moonshotai/Kimi-K2-Instruct",
21
22
  "anthropic/claude-4-sonnet",
22
23
  "deepseek-ai/DeepSeek-R1-0528-Turbo",
24
+ "Qwen/Qwen3-235B-A22B-Thinking-2507",
25
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct",
26
+ "Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo",
27
+ "Qwen/Qwen3-235B-A22B-Instruct-2507",
23
28
  "Qwen/Qwen3-235B-A22B",
24
29
  "Qwen/Qwen3-30B-A3B",
25
30
  "Qwen/Qwen3-32B",
@@ -71,6 +76,7 @@ class DeepInfra(Provider):
71
76
  "meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo",
72
77
  "microsoft/WizardLM-2-8x22B",
73
78
  "mistralai/Devstral-Small-2505",
79
+ "mistralai/Devstral-Small-2507",
74
80
  "mistralai/Mistral-7B-Instruct-v0.3",
75
81
  "mistralai/Mistral-Nemo-Instruct-2407",
76
82
  "mistralai/Mistral-Small-24B-Instruct-2501",
@@ -339,7 +345,7 @@ if __name__ == "__main__":
339
345
 
340
346
  for model in DeepInfra.AVAILABLE_MODELS:
341
347
  try:
342
- test_ai = DeepInfra(model=model, timeout=60, api_key="jwt:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJnaDoxNTg5ODg0NzgiLCJleHAiOjE3NTI3NDI5NDV9.qM93p6bPZYi_ejaOo1Dbe4UjYXrFiM7XvBLN4-9BWag")
348
+ test_ai = DeepInfra(model=model, timeout=60,)
343
349
  response = test_ai.chat("Say 'Hello' in one word", stream=True)
344
350
  response_text = ""
345
351
  for chunk in response: