webscout 8.3.3__tar.gz → 8.3.4__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 (338) hide show
  1. {webscout-8.3.3/webscout.egg-info → webscout-8.3.4}/PKG-INFO +1 -2
  2. {webscout-8.3.3 → webscout-8.3.4}/changelog.md +0 -0
  3. {webscout-8.3.3 → webscout-8.3.4}/pyproject.toml +0 -1
  4. {webscout-8.3.3 → webscout-8.3.4}/webscout/AIutel.py +221 -4
  5. {webscout-8.3.3 → webscout-8.3.4}/webscout/Bard.py +2 -22
  6. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/AISEARCH/scira_search.py +24 -11
  7. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Deepinfra.py +75 -57
  8. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/ExaChat.py +9 -5
  9. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Flowith.py +1 -1
  10. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/FreeGemini.py +2 -2
  11. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Gemini.py +3 -10
  12. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/GeminiProxy.py +31 -5
  13. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/LambdaChat.py +39 -31
  14. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Netwrck.py +5 -8
  15. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OLLAMA.py +8 -9
  16. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/README.md +1 -1
  17. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/__init__.py +1 -1
  18. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/autoproxy.py +1 -1
  19. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/copilot.py +73 -26
  20. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/deepinfra.py +54 -24
  21. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/exachat.py +9 -5
  22. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/monochat.py +3 -3
  23. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/netwrck.py +4 -7
  24. webscout-8.3.4/webscout/Provider/OPENAI/qodo.py +630 -0
  25. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/scirachat.py +82 -49
  26. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/textpollinations.py +13 -12
  27. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/typegpt.py +3 -3
  28. webscout-8.3.4/webscout/Provider/Qodo.py +454 -0
  29. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/monochat.py +3 -3
  30. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TextPollinationsAI.py +13 -12
  31. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/__init__.py +4 -4
  32. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/copilot.py +58 -61
  33. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/freeaichat.py +64 -55
  34. webscout-8.3.4/webscout/Provider/monochat.py +275 -0
  35. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/scira_chat.py +111 -21
  36. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/typegpt.py +2 -2
  37. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/x0gpt.py +325 -315
  38. {webscout-8.3.3 → webscout-8.3.4}/webscout/__init__.py +7 -2
  39. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/routes.py +20 -3
  40. webscout-8.3.4/webscout/version.py +2 -0
  41. {webscout-8.3.3 → webscout-8.3.4/webscout.egg-info}/PKG-INFO +1 -2
  42. {webscout-8.3.3 → webscout-8.3.4}/webscout.egg-info/SOURCES.txt +6 -6
  43. {webscout-8.3.3 → webscout-8.3.4}/webscout.egg-info/requires.txt +0 -1
  44. webscout-8.3.3/webscout/Provider/AI21.py +0 -177
  45. webscout-8.3.3/webscout/Provider/HuggingFaceChat.py +0 -469
  46. webscout-8.3.3/webscout/Provider/OPENAI/freeaichat.py +0 -363
  47. webscout-8.3.3/webscout/version.py +0 -2
  48. {webscout-8.3.3 → webscout-8.3.4}/LEGAL_NOTICE.md +0 -0
  49. {webscout-8.3.3 → webscout-8.3.4}/LICENSE.md +0 -0
  50. {webscout-8.3.3 → webscout-8.3.4}/MANIFEST.in +0 -0
  51. {webscout-8.3.3 → webscout-8.3.4}/README.md +0 -0
  52. {webscout-8.3.3 → webscout-8.3.4}/setup.cfg +0 -0
  53. {webscout-8.3.3 → webscout-8.3.4}/webscout/AIauto.py +0 -0
  54. {webscout-8.3.3 → webscout-8.3.4}/webscout/AIbase.py +0 -0
  55. {webscout-8.3.3 → webscout-8.3.4}/webscout/Bing_search.py +0 -0
  56. {webscout-8.3.3 → webscout-8.3.4}/webscout/DWEBS.py +0 -0
  57. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/Act.md +0 -0
  58. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/GitToolkit/__init__.py +0 -0
  59. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/GitToolkit/gitapi/README.md +0 -0
  60. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/GitToolkit/gitapi/__init__.py +0 -0
  61. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/GitToolkit/gitapi/repository.py +0 -0
  62. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/GitToolkit/gitapi/user.py +0 -0
  63. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/GitToolkit/gitapi/utils.py +0 -0
  64. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/README.md +0 -0
  65. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/YTdownloader.py +0 -0
  66. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/__init__.py +0 -0
  67. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/transcriber.py +0 -0
  68. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/ytapi/README.md +0 -0
  69. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/ytapi/__init__.py +0 -0
  70. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/ytapi/channel.py +0 -0
  71. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/ytapi/errors.py +0 -0
  72. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/ytapi/extras.py +0 -0
  73. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/ytapi/https.py +0 -0
  74. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/ytapi/patterns.py +0 -0
  75. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/ytapi/playlist.py +0 -0
  76. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/ytapi/pool.py +0 -0
  77. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/ytapi/query.py +0 -0
  78. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/ytapi/stream.py +0 -0
  79. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/ytapi/utils.py +0 -0
  80. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/YTToolkit/ytapi/video.py +0 -0
  81. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/__init__.py +0 -0
  82. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/autocoder/__init__.py +0 -0
  83. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/autocoder/autocoder.py +0 -0
  84. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/autocoder/autocoder_utiles.py +0 -0
  85. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/gguf.md +0 -0
  86. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/gguf.py +0 -0
  87. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/tempmail/README.md +0 -0
  88. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/tempmail/__init__.py +0 -0
  89. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/tempmail/async_utils.py +0 -0
  90. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/tempmail/base.py +0 -0
  91. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/tempmail/cli.py +0 -0
  92. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/tempmail/emailnator.py +0 -0
  93. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/tempmail/mail_tm.py +0 -0
  94. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/tempmail/temp_mail_io.py +0 -0
  95. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/weather.md +0 -0
  96. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/weather.py +0 -0
  97. {webscout-8.3.3 → webscout-8.3.4}/webscout/Extra/weather_ascii.py +0 -0
  98. {webscout-8.3.3 → webscout-8.3.4}/webscout/Litlogger/README.md +0 -0
  99. {webscout-8.3.3 → webscout-8.3.4}/webscout/Litlogger/__init__.py +0 -0
  100. {webscout-8.3.3 → webscout-8.3.4}/webscout/Litlogger/formats.py +0 -0
  101. {webscout-8.3.3 → webscout-8.3.4}/webscout/Litlogger/handlers.py +0 -0
  102. {webscout-8.3.3 → webscout-8.3.4}/webscout/Litlogger/levels.py +0 -0
  103. {webscout-8.3.3 → webscout-8.3.4}/webscout/Litlogger/logger.py +0 -0
  104. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/AISEARCH/DeepFind.py +0 -0
  105. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/AISEARCH/Perplexity.py +0 -0
  106. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/AISEARCH/README.md +0 -0
  107. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/AISEARCH/__init__.py +0 -0
  108. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/AISEARCH/felo_search.py +0 -0
  109. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/AISEARCH/genspark_search.py +0 -0
  110. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/AISEARCH/hika_search.py +0 -0
  111. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/AISEARCH/iask_search.py +0 -0
  112. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/AISEARCH/monica_search.py +0 -0
  113. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/AISEARCH/stellar_search.py +0 -0
  114. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/AISEARCH/webpilotai_search.py +0 -0
  115. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Aitopia.py +0 -0
  116. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/AllenAI.py +0 -0
  117. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Andi.py +0 -0
  118. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Blackboxai.py +0 -0
  119. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/ChatGPTClone.py +0 -0
  120. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/ChatSandbox.py +0 -0
  121. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Cloudflare.py +0 -0
  122. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Cohere.py +0 -0
  123. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/ExaAI.py +0 -0
  124. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/GithubChat.py +0 -0
  125. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/GizAI.py +0 -0
  126. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Glider.py +0 -0
  127. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Groq.py +0 -0
  128. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/HeckAI.py +0 -0
  129. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Hunyuan.py +0 -0
  130. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Jadve.py +0 -0
  131. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Koboldai.py +0 -0
  132. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Llama3.py +0 -0
  133. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/MCPCore.py +0 -0
  134. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Marcus.py +0 -0
  135. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/MiniMax.py +0 -0
  136. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Nemotron.py +0 -0
  137. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/BLACKBOXAI.py +0 -0
  138. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/Cloudflare.py +0 -0
  139. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/FalconH1.py +0 -0
  140. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/FreeGemini.py +0 -0
  141. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/GeminiProxy.py +0 -0
  142. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/MiniMax.py +0 -0
  143. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/NEMOTRON.py +0 -0
  144. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/PI.py +0 -0
  145. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/Qwen3.py +0 -0
  146. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/README_AUTOPROXY.md +0 -0
  147. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/TogetherAI.py +0 -0
  148. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/TwoAI.py +0 -0
  149. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/ai4chat.py +0 -0
  150. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/base.py +0 -0
  151. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/c4ai.py +0 -0
  152. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/chatgpt.py +0 -0
  153. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/chatgptclone.py +0 -0
  154. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/chatsandbox.py +0 -0
  155. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/e2b.py +0 -0
  156. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/exaai.py +0 -0
  157. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/flowith.py +0 -0
  158. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/friendli.py +0 -0
  159. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/glider.py +0 -0
  160. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/groq.py +0 -0
  161. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/heckai.py +0 -0
  162. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/llmchatco.py +0 -0
  163. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/mcpcore.py +0 -0
  164. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/multichat.py +0 -0
  165. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/oivscode.py +0 -0
  166. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/opkfc.py +0 -0
  167. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/pydantic_imports.py +0 -0
  168. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/sonus.py +0 -0
  169. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/standardinput.py +0 -0
  170. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/toolbaz.py +0 -0
  171. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/typefully.py +0 -0
  172. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/uncovrAI.py +0 -0
  173. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/utils.py +0 -0
  174. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/venice.py +0 -0
  175. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/wisecat.py +0 -0
  176. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/writecream.py +0 -0
  177. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/x0gpt.py +0 -0
  178. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/xenai.py +0 -0
  179. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OPENAI/yep.py +0 -0
  180. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/OpenGPT.py +0 -0
  181. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Openai.py +0 -0
  182. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/PI.py +0 -0
  183. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Perplexitylabs.py +0 -0
  184. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/QwenLM.py +0 -0
  185. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Reka.py +0 -0
  186. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/STT/__init__.py +0 -0
  187. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/STT/base.py +0 -0
  188. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/STT/elevenlabs.py +0 -0
  189. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/StandardInput.py +0 -0
  190. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/README.md +0 -0
  191. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/__init__.py +0 -0
  192. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/aiarta.py +0 -0
  193. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/base.py +0 -0
  194. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/bing.py +0 -0
  195. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/gpt1image.py +0 -0
  196. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/imagen.py +0 -0
  197. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/infip.py +0 -0
  198. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/magicstudio.py +0 -0
  199. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/piclumen.py +0 -0
  200. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/pixelmuse.py +0 -0
  201. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/pollinations.py +0 -0
  202. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/together.py +0 -0
  203. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTI/utils.py +0 -0
  204. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTS/README.md +0 -0
  205. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTS/__init__.py +0 -0
  206. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTS/base.py +0 -0
  207. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTS/deepgram.py +0 -0
  208. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTS/elevenlabs.py +0 -0
  209. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTS/freetts.py +0 -0
  210. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTS/gesserit.py +0 -0
  211. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTS/murfai.py +0 -0
  212. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTS/openai_fm.py +0 -0
  213. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTS/parler.py +0 -0
  214. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTS/speechma.py +0 -0
  215. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTS/sthir.py +0 -0
  216. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTS/streamElements.py +0 -0
  217. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TTS/utils.py +0 -0
  218. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TeachAnything.py +0 -0
  219. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TogetherAI.py +0 -0
  220. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TwoAI.py +0 -0
  221. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/TypliAI.py +0 -0
  222. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/UNFINISHED/ChatHub.py +0 -0
  223. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/UNFINISHED/ChutesAI.py +0 -0
  224. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/UNFINISHED/Youchat.py +0 -0
  225. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/UNFINISHED/fetch_together_models.py +0 -0
  226. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/UNFINISHED/liner_api_request.py +0 -0
  227. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/UNFINISHED/puterjs.py +0 -0
  228. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/UNFINISHED/test_lmarena.py +0 -0
  229. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/Venice.py +0 -0
  230. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/VercelAI.py +0 -0
  231. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/WiseCat.py +0 -0
  232. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/WrDoChat.py +0 -0
  233. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/WritingMate.py +0 -0
  234. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/XenAI.py +0 -0
  235. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/ai4chat.py +0 -0
  236. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/akashgpt.py +0 -0
  237. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/asksteve.py +0 -0
  238. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/cerebras.py +0 -0
  239. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/chatglm.py +0 -0
  240. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/cleeai.py +0 -0
  241. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/deepseek_assistant.py +0 -0
  242. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/elmo.py +0 -0
  243. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/geminiapi.py +0 -0
  244. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/granite.py +0 -0
  245. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/hermes.py +0 -0
  246. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/julius.py +0 -0
  247. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/koala.py +0 -0
  248. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/learnfastai.py +0 -0
  249. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/llama3mitril.py +0 -0
  250. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/llmchat.py +0 -0
  251. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/llmchatco.py +0 -0
  252. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/lmarena.py +0 -0
  253. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/meta.py +0 -0
  254. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/multichat.py +0 -0
  255. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/oivscode.py +0 -0
  256. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/samurai.py +0 -0
  257. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/scnet.py +0 -0
  258. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/searchchat.py +0 -0
  259. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/sonus.py +0 -0
  260. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/talkai.py +0 -0
  261. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/toolbaz.py +0 -0
  262. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/turboseek.py +0 -0
  263. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/typefully.py +0 -0
  264. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/uncovr.py +0 -0
  265. {webscout-8.3.3 → webscout-8.3.4}/webscout/Provider/yep.py +0 -0
  266. {webscout-8.3.3 → webscout-8.3.4}/webscout/__main__.py +0 -0
  267. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/__init__.py +0 -0
  268. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/api_key_manager.py +0 -0
  269. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/auth_system.py +0 -0
  270. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/config.py +0 -0
  271. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/database.py +0 -0
  272. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/exceptions.py +0 -0
  273. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/middleware.py +0 -0
  274. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/models.py +0 -0
  275. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/providers.py +0 -0
  276. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/rate_limiter.py +0 -0
  277. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/request_models.py +0 -0
  278. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/request_processing.py +0 -0
  279. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/schemas.py +0 -0
  280. {webscout-8.3.3 → webscout-8.3.4}/webscout/auth/server.py +0 -0
  281. {webscout-8.3.3 → webscout-8.3.4}/webscout/cli.py +0 -0
  282. {webscout-8.3.3 → webscout-8.3.4}/webscout/client.py +0 -0
  283. {webscout-8.3.3 → webscout-8.3.4}/webscout/conversation.py +0 -0
  284. {webscout-8.3.3 → webscout-8.3.4}/webscout/exceptions.py +0 -0
  285. {webscout-8.3.3 → webscout-8.3.4}/webscout/litagent/Readme.md +0 -0
  286. {webscout-8.3.3 → webscout-8.3.4}/webscout/litagent/__init__.py +0 -0
  287. {webscout-8.3.3 → webscout-8.3.4}/webscout/litagent/agent.py +0 -0
  288. {webscout-8.3.3 → webscout-8.3.4}/webscout/litagent/constants.py +0 -0
  289. {webscout-8.3.3 → webscout-8.3.4}/webscout/litprinter/__init__.py +0 -0
  290. {webscout-8.3.3 → webscout-8.3.4}/webscout/models.py +0 -0
  291. {webscout-8.3.3 → webscout-8.3.4}/webscout/optimizers.py +0 -0
  292. {webscout-8.3.3 → webscout-8.3.4}/webscout/prompt_manager.py +0 -0
  293. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/README.md +0 -0
  294. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/__init__.py +0 -0
  295. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/core/__init__.py +0 -0
  296. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/core/crawler.py +0 -0
  297. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/core/scout.py +0 -0
  298. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/core/search_result.py +0 -0
  299. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/core/text_analyzer.py +0 -0
  300. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/core/text_utils.py +0 -0
  301. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/core/web_analyzer.py +0 -0
  302. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/element.py +0 -0
  303. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/parsers/__init__.py +0 -0
  304. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/parsers/html5lib_parser.py +0 -0
  305. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/parsers/html_parser.py +0 -0
  306. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/parsers/lxml_parser.py +0 -0
  307. {webscout-8.3.3 → webscout-8.3.4}/webscout/scout/utils.py +0 -0
  308. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/Readme.md +0 -0
  309. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/__init__.py +0 -0
  310. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/core/__init__.py +0 -0
  311. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/core/cli.py +0 -0
  312. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/core/context.py +0 -0
  313. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/core/group.py +0 -0
  314. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/decorators/__init__.py +0 -0
  315. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/decorators/command.py +0 -0
  316. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/decorators/options.py +0 -0
  317. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/decorators/output.py +0 -0
  318. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/exceptions.py +0 -0
  319. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/plugins/__init__.py +0 -0
  320. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/plugins/base.py +0 -0
  321. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/plugins/manager.py +0 -0
  322. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/utils/__init__.py +0 -0
  323. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/utils/formatting.py +0 -0
  324. {webscout-8.3.3 → webscout-8.3.4}/webscout/swiftcli/utils/parsing.py +0 -0
  325. {webscout-8.3.3 → webscout-8.3.4}/webscout/tempid.py +0 -0
  326. {webscout-8.3.3 → webscout-8.3.4}/webscout/update_checker.py +0 -0
  327. {webscout-8.3.3 → webscout-8.3.4}/webscout/utils.py +0 -0
  328. {webscout-8.3.3 → webscout-8.3.4}/webscout/webscout_search.py +0 -0
  329. {webscout-8.3.3 → webscout-8.3.4}/webscout/webscout_search_async.py +0 -0
  330. {webscout-8.3.3 → webscout-8.3.4}/webscout/yep_search.py +0 -0
  331. {webscout-8.3.3 → webscout-8.3.4}/webscout/zeroart/README.md +0 -0
  332. {webscout-8.3.3 → webscout-8.3.4}/webscout/zeroart/__init__.py +0 -0
  333. {webscout-8.3.3 → webscout-8.3.4}/webscout/zeroart/base.py +0 -0
  334. {webscout-8.3.3 → webscout-8.3.4}/webscout/zeroart/effects.py +0 -0
  335. {webscout-8.3.3 → webscout-8.3.4}/webscout/zeroart/fonts.py +0 -0
  336. {webscout-8.3.3 → webscout-8.3.4}/webscout.egg-info/dependency_links.txt +0 -0
  337. {webscout-8.3.3 → webscout-8.3.4}/webscout.egg-info/entry_points.txt +0 -0
  338. {webscout-8.3.3 → webscout-8.3.4}/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.3
3
+ Version: 8.3.4
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
@@ -50,7 +50,6 @@ Requires-Dist: google-generativeai
50
50
  Requires-Dist: lxml>=5.2.2
51
51
  Requires-Dist: orjson
52
52
  Requires-Dist: PyYAML
53
- Requires-Dist: ollama
54
53
  Requires-Dist: pillow
55
54
  Requires-Dist: bson
56
55
  Requires-Dist: cloudscraper
@@ -61,7 +61,6 @@ dependencies = [
61
61
  "lxml>=5.2.2",
62
62
  "orjson",
63
63
  "PyYAML",
64
- "ollama",
65
64
  "pillow",
66
65
  "bson",
67
66
  "cloudscraper",
@@ -12,6 +12,7 @@ from typing import (
12
12
  List,
13
13
  Literal,
14
14
  Optional,
15
+ Pattern,
15
16
  Union,
16
17
  )
17
18
 
@@ -20,6 +21,36 @@ EncodingType = Literal['utf-8', 'utf-16', 'utf-32', 'ascii', 'latin1', 'cp1252',
20
21
  'iso-8859-2', 'windows-1250', 'windows-1251', 'windows-1252', 'gbk', 'big5',
21
22
  'shift_jis', 'euc-jp', 'euc-kr']
22
23
 
24
+ def _compile_regexes(patterns: Optional[List[Union[str, Pattern[str]]]]) -> Optional[List[Pattern[str]]]:
25
+ """
26
+ Compile regex patterns from strings or return compiled patterns as-is.
27
+
28
+ Args:
29
+ patterns: List of regex patterns as strings or compiled Pattern objects.
30
+
31
+ Returns:
32
+ List of compiled Pattern objects, or None if input is None.
33
+
34
+ Raises:
35
+ ValueError: If any pattern is invalid.
36
+ """
37
+ if not patterns:
38
+ return None
39
+
40
+ compiled_patterns = []
41
+ for i, pattern in enumerate(patterns):
42
+ try:
43
+ if isinstance(pattern, str):
44
+ compiled_patterns.append(re.compile(pattern))
45
+ elif isinstance(pattern, Pattern):
46
+ compiled_patterns.append(pattern)
47
+ else:
48
+ raise ValueError(f"Pattern at index {i} must be a string or compiled regex pattern, got {type(pattern)}")
49
+ except re.error as e:
50
+ raise ValueError(f"Invalid regex pattern at index {i}: '{pattern}' - {str(e)}")
51
+
52
+ return compiled_patterns
53
+
23
54
  def _process_chunk(
24
55
  chunk: str,
25
56
  intro_value: str,
@@ -28,6 +59,8 @@ def _process_chunk(
28
59
  strip_chars: Optional[str],
29
60
  yield_raw_on_error: bool,
30
61
  error_handler: Optional[Callable[[Exception, str], Optional[Any]]] = None,
62
+ skip_regexes: Optional[List[Pattern[str]]] = None,
63
+ extract_regexes: Optional[List[Pattern[str]]] = None,
31
64
  ) -> Union[str, Dict[str, Any], None]:
32
65
  """
33
66
  Sanitizes and potentially parses a single chunk of text.
@@ -36,6 +69,8 @@ def _process_chunk(
36
69
  - Removes a specified prefix (`intro_value`).
37
70
  - Strips leading/trailing characters (`strip_chars`).
38
71
  - Skips chunks matching specific markers (`skip_markers`).
72
+ - Skips chunks matching regex patterns (`skip_regexes`).
73
+ - Extracts content using regex capturing groups (`extract_regexes`).
39
74
  - Optionally parses the chunk as JSON (`to_json`).
40
75
  - Handles JSON parsing errors with an optional callback (`error_handler`).
41
76
 
@@ -48,6 +83,8 @@ def _process_chunk(
48
83
  yield_raw_on_error (bool): If True, returns the raw chunk when JSON parsing fails; otherwise, returns None.
49
84
  error_handler (Optional[Callable[[Exception, str], Optional[Any]]]): An optional callback function that is called when JSON parsing fails.
50
85
  It receives the exception and the sanitized chunk as arguments. It should return a value to yield instead of the raw chunk, or None to ignore.
86
+ skip_regexes (Optional[List[Pattern[str]]]): A list of compiled regex patterns; chunks matching any of these are skipped.
87
+ extract_regexes (Optional[List[Pattern[str]]]): A list of compiled regex patterns for extracting content using capturing groups.
51
88
 
52
89
  """
53
90
  if not isinstance(chunk, str):
@@ -73,6 +110,28 @@ def _process_chunk(
73
110
  if not sanitized_chunk or any(marker == sanitized_chunk for marker in skip_markers):
74
111
  return None
75
112
 
113
+ # Apply regex-based extraction first (if provided)
114
+ if extract_regexes:
115
+ for regex in extract_regexes:
116
+ match = regex.search(sanitized_chunk)
117
+ if match:
118
+ # If there are capturing groups, return the first group or all groups as a tuple
119
+ if match.groups():
120
+ if len(match.groups()) == 1:
121
+ sanitized_chunk = match.group(1)
122
+ else:
123
+ # Multiple groups - return as tuple converted to string for JSON compatibility
124
+ sanitized_chunk = str(match.groups())
125
+ else:
126
+ # No capturing groups, return the full match
127
+ sanitized_chunk = match.group(0)
128
+ break # Use first matching extraction regex
129
+
130
+ # Apply regex-based skipping (after extraction)
131
+ if skip_regexes:
132
+ if any(regex.search(sanitized_chunk) for regex in skip_regexes):
133
+ return None
134
+
76
135
  # JSON parsing with optimized error handling
77
136
  if to_json:
78
137
  try:
@@ -226,13 +285,15 @@ def _sanitize_stream_sync(
226
285
  buffer_size: int = 8192,
227
286
  line_delimiter: Optional[str] = None,
228
287
  error_handler: Optional[Callable[[Exception, str], Optional[Any]]] = None,
288
+ skip_regexes: Optional[List[Union[str, Pattern[str]]]] = None,
289
+ extract_regexes: Optional[List[Union[str, Pattern[str]]]] = None,
229
290
  ) -> Generator[Any, None, None]:
230
291
  """
231
292
  Processes a stream of data (strings or bytes) in real-time, applying various transformations and filtering.
232
293
 
233
294
  This function is designed to handle streaming data, allowing for operations such as
234
- prefix removal, JSON parsing, skipping lines based on markers, and extracting specific content.
235
- It also supports custom error handling for JSON parsing failures.
295
+ prefix removal, JSON parsing, skipping lines based on markers, regex-based filtering,
296
+ and extracting specific content. It also supports custom error handling for JSON parsing failures.
236
297
 
237
298
  Args:
238
299
  data: String, iterable of strings, or iterable of bytes to process.
@@ -251,14 +312,21 @@ def _sanitize_stream_sync(
251
312
  uses ``str.splitlines()``.
252
313
  error_handler: Callback invoked with ``(Exception, str)`` when JSON
253
314
  parsing fails. If the callback returns a value, it is yielded instead of the raw line.
315
+ skip_regexes: List of regex patterns (strings or compiled) for skipping lines that match.
316
+ extract_regexes: List of regex patterns (strings or compiled) for extracting content using capturing groups.
254
317
 
255
318
  Yields:
256
319
  Any: Processed data, which can be a string, a dictionary (if `to_json` is True), or the result of `content_extractor`.
257
320
 
258
321
  Raises:
259
322
  TypeError: If the input `data` is not a string or an iterable.
323
+ ValueError: If any regex pattern is invalid.
260
324
  """
261
325
  effective_skip_markers = skip_markers or []
326
+ # Compile regex patterns
327
+ compiled_skip_regexes = _compile_regexes(skip_regexes)
328
+ compiled_extract_regexes = _compile_regexes(extract_regexes)
329
+
262
330
  processing_active = start_marker is None
263
331
  buffer = ""
264
332
  found_start = False if start_marker else True
@@ -343,6 +411,8 @@ def _sanitize_stream_sync(
343
411
  strip_chars,
344
412
  yield_raw_on_error,
345
413
  error_handler,
414
+ compiled_skip_regexes,
415
+ compiled_extract_regexes,
346
416
  )
347
417
  if result is None:
348
418
  continue
@@ -373,6 +443,8 @@ def _sanitize_stream_sync(
373
443
  strip_chars,
374
444
  yield_raw_on_error,
375
445
  error_handler,
446
+ compiled_skip_regexes,
447
+ compiled_extract_regexes,
376
448
  )
377
449
  if result is None:
378
450
  continue
@@ -408,14 +480,16 @@ async def _sanitize_stream_async(
408
480
  buffer_size: int = 8192,
409
481
  line_delimiter: Optional[str] = None,
410
482
  error_handler: Optional[Callable[[Exception, str], Optional[Any]]] = None,
483
+ skip_regexes: Optional[List[Union[str, Pattern[str]]]] = None,
484
+ extract_regexes: Optional[List[Union[str, Pattern[str]]]] = None,
411
485
  ) -> AsyncGenerator[Any, None]:
412
486
  """
413
487
  Asynchronously processes a stream of data (strings or bytes), applying transformations and filtering.
414
488
 
415
489
  This function is the asynchronous counterpart to `_sanitize_stream_sync`. It handles
416
490
  streaming data, allowing for operations such as prefix removal, JSON parsing,
417
- skipping lines based on markers, and extracting specific content. It also supports
418
- custom error handling for JSON parsing failures.
491
+ skipping lines based on markers, regex-based filtering, and extracting specific content.
492
+ It also supports custom error handling for JSON parsing failures.
419
493
 
420
494
  Args:
421
495
  data: String, iterable of strings, or iterable of bytes to process.
@@ -432,6 +506,8 @@ async def _sanitize_stream_async(
432
506
  buffer_size: Buffer size for byte decoding.
433
507
  line_delimiter: Delimiter used to split incoming text into lines. ``None`` uses ``str.splitlines()``.
434
508
  error_handler: Callback invoked with ``(Exception, str)`` when JSON parsing fails. If the callback returns a value, it is yielded in place of the raw line.
509
+ skip_regexes: List of regex patterns (strings or compiled) for skipping lines that match.
510
+ extract_regexes: List of regex patterns (strings or compiled) for extracting content using capturing groups.
435
511
  """
436
512
  if isinstance(data, str):
437
513
  for item in _sanitize_stream_sync(
@@ -449,6 +525,8 @@ async def _sanitize_stream_async(
449
525
  buffer_size=buffer_size,
450
526
  line_delimiter=line_delimiter,
451
527
  error_handler=error_handler,
528
+ skip_regexes=skip_regexes,
529
+ extract_regexes=extract_regexes,
452
530
  ):
453
531
  yield item
454
532
  return
@@ -470,11 +548,17 @@ async def _sanitize_stream_async(
470
548
  buffer_size=buffer_size,
471
549
  line_delimiter=line_delimiter,
472
550
  error_handler=error_handler,
551
+ skip_regexes=skip_regexes,
552
+ extract_regexes=extract_regexes,
473
553
  ):
474
554
  yield item
475
555
  return
476
556
 
477
557
  effective_skip_markers = skip_markers or []
558
+ # Compile regex patterns
559
+ compiled_skip_regexes = _compile_regexes(skip_regexes)
560
+ compiled_extract_regexes = _compile_regexes(extract_regexes)
561
+
478
562
  processing_active = start_marker is None
479
563
  buffer = ""
480
564
  found_start = False if start_marker else True
@@ -543,6 +627,8 @@ async def _sanitize_stream_async(
543
627
  strip_chars,
544
628
  yield_raw_on_error,
545
629
  error_handler,
630
+ compiled_skip_regexes,
631
+ compiled_extract_regexes,
546
632
  )
547
633
  if result is None:
548
634
  continue
@@ -576,6 +662,8 @@ async def _sanitize_stream_async(
576
662
  strip_chars,
577
663
  yield_raw_on_error,
578
664
  error_handler,
665
+ compiled_skip_regexes,
666
+ compiled_extract_regexes,
579
667
  )
580
668
  if result is None:
581
669
  continue
@@ -621,12 +709,15 @@ def sanitize_stream(
621
709
  buffer_size: int = 8192,
622
710
  line_delimiter: Optional[str] = None,
623
711
  error_handler: Optional[Callable[[Exception, str], Optional[Any]]] = None,
712
+ skip_regexes: Optional[List[Union[str, Pattern[str]]]] = None,
713
+ extract_regexes: Optional[List[Union[str, Pattern[str]]]] = None,
624
714
  object_mode: Literal["as_is", "json", "str"] = "json",
625
715
  raw: bool = False,
626
716
  ) -> Union[Generator[Any, None, None], AsyncGenerator[Any, None]]:
627
717
  """
628
718
  Processes streaming data (strings or bytes) in either synchronous or asynchronous mode.
629
719
  Now supports non-iterable and miscellaneous input types (dict, list, int, float, bool, None).
720
+ Includes regex-based content filtering and extraction capabilities.
630
721
 
631
722
  Args:
632
723
  data: The data to be processed. Can be a string, bytes, a synchronous iterable of strings or bytes,
@@ -648,6 +739,10 @@ def sanitize_stream(
648
739
  error_handler (Optional[Callable[[Exception, str], Optional[Any]]]):
649
740
  Callback invoked with ``(Exception, str)`` when JSON parsing fails.
650
741
  If the callback returns a value, it is yielded in place of the raw line. Defaults to None.
742
+ skip_regexes (Optional[List[Union[str, Pattern[str]]]]): List of regex patterns (strings or compiled)
743
+ for skipping lines that match any pattern. Defaults to None.
744
+ extract_regexes (Optional[List[Union[str, Pattern[str]]]]): List of regex patterns (strings or compiled)
745
+ for extracting content using capturing groups. If multiple groups are captured, they are returned as a tuple string. Defaults to None.
651
746
  object_mode (Literal["as_is", "json", "str"]): How to handle non-string, non-iterable objects.
652
747
  "json" (default) yields as JSON string, "str" yields as str(obj), "as_is" yields the object as-is.
653
748
  raw (bool): If True, yields the raw response as returned by the API, chunk by chunk (no splitting or joining).
@@ -655,6 +750,9 @@ def sanitize_stream(
655
750
  Returns:
656
751
  Union[Generator[Any, None, None], AsyncGenerator[Any, None]]:
657
752
  A generator or an asynchronous generator yielding the processed data, or raw data if raw=True.
753
+
754
+ Raises:
755
+ ValueError: If any regex pattern is invalid.
658
756
  """ # --- RAW MODE: yield each chunk exactly as returned by the API ---
659
757
  if raw:
660
758
  def _raw_passthrough_sync(source_iter):
@@ -713,6 +811,7 @@ def sanitize_stream(
713
811
  payload, intro_value, to_json, skip_markers, strip_chars,
714
812
  start_marker, end_marker, content_extractor, yield_raw_on_error,
715
813
  encoding, encoding_errors, buffer_size, line_delimiter, error_handler,
814
+ skip_regexes, extract_regexes,
716
815
  )
717
816
 
718
817
  # Handle string directly
@@ -721,6 +820,7 @@ def sanitize_stream(
721
820
  data, intro_value, to_json, skip_markers, strip_chars,
722
821
  start_marker, end_marker, content_extractor, yield_raw_on_error,
723
822
  encoding, encoding_errors, buffer_size, line_delimiter, error_handler,
823
+ skip_regexes, extract_regexes,
724
824
  )
725
825
 
726
826
  # Handle dict, list, int, float, bool (non-iterable, non-string/bytes)
@@ -734,6 +834,7 @@ def sanitize_stream(
734
834
  str(data), intro_value, to_json, skip_markers, strip_chars,
735
835
  start_marker, end_marker, content_extractor, yield_raw_on_error,
736
836
  encoding, encoding_errors, buffer_size, line_delimiter, error_handler,
837
+ skip_regexes, extract_regexes,
737
838
  )
738
839
  else: # "json"
739
840
  try:
@@ -744,6 +845,7 @@ def sanitize_stream(
744
845
  json_str, intro_value, to_json, skip_markers, strip_chars,
745
846
  start_marker, end_marker, content_extractor, yield_raw_on_error,
746
847
  encoding, encoding_errors, buffer_size, line_delimiter, error_handler,
848
+ skip_regexes, extract_regexes,
747
849
  )
748
850
 
749
851
  # Handle file-like objects (optional, treat as string if .read exists)
@@ -756,6 +858,7 @@ def sanitize_stream(
756
858
  file_content, intro_value, to_json, skip_markers, strip_chars,
757
859
  start_marker, end_marker, content_extractor, yield_raw_on_error,
758
860
  encoding, encoding_errors, buffer_size, line_delimiter, error_handler,
861
+ skip_regexes, extract_regexes,
759
862
  )
760
863
  except Exception:
761
864
  pass # fallback to next
@@ -767,6 +870,7 @@ def sanitize_stream(
767
870
  payload, intro_value, to_json, skip_markers, strip_chars,
768
871
  start_marker, end_marker, content_extractor, yield_raw_on_error,
769
872
  encoding, encoding_errors, buffer_size, line_delimiter, error_handler,
873
+ skip_regexes, extract_regexes,
770
874
  )
771
875
  elif isinstance(content_attr, bytes):
772
876
  try:
@@ -777,6 +881,7 @@ def sanitize_stream(
777
881
  payload, intro_value, to_json, skip_markers, strip_chars,
778
882
  start_marker, end_marker, content_extractor, yield_raw_on_error,
779
883
  encoding, encoding_errors, buffer_size, line_delimiter, error_handler,
884
+ skip_regexes, extract_regexes,
780
885
  )
781
886
 
782
887
  # Handle async iterables
@@ -785,6 +890,7 @@ def sanitize_stream(
785
890
  data, intro_value, to_json, skip_markers, strip_chars,
786
891
  start_marker, end_marker, content_extractor, yield_raw_on_error,
787
892
  encoding, encoding_errors, buffer_size, line_delimiter, error_handler,
893
+ skip_regexes, extract_regexes,
788
894
  )
789
895
  # Handle sync iterables (but not strings/bytes)
790
896
  if hasattr(data, "__iter__"):
@@ -792,13 +898,124 @@ def sanitize_stream(
792
898
  data, intro_value, to_json, skip_markers, strip_chars,
793
899
  start_marker, end_marker, content_extractor, yield_raw_on_error,
794
900
  encoding, encoding_errors, buffer_size, line_delimiter, error_handler,
901
+ skip_regexes, extract_regexes,
795
902
  )
796
903
  # Fallback: treat as string
797
904
  return _sanitize_stream_sync(
798
905
  str(data), intro_value, to_json, skip_markers, strip_chars,
799
906
  start_marker, end_marker, content_extractor, yield_raw_on_error,
800
907
  encoding, encoding_errors, buffer_size, line_delimiter, error_handler,
908
+ skip_regexes, extract_regexes,
801
909
  )
910
+
911
+ # --- Decorator version of sanitize_stream ---
912
+ import functools
913
+ from typing import overload
914
+
915
+ def _sanitize_stream_decorator(
916
+ _func=None,
917
+ *,
918
+ intro_value: str = "data:",
919
+ to_json: bool = True,
920
+ skip_markers: Optional[List[str]] = None,
921
+ strip_chars: Optional[str] = None,
922
+ start_marker: Optional[str] = None,
923
+ end_marker: Optional[str] = None,
924
+ content_extractor: Optional[Callable[[Union[str, Dict[str, Any]]], Optional[Any]]] = None,
925
+ yield_raw_on_error: bool = True,
926
+ encoding: EncodingType = "utf-8",
927
+ encoding_errors: str = "replace",
928
+ buffer_size: int = 8192,
929
+ line_delimiter: Optional[str] = None,
930
+ error_handler: Optional[Callable[[Exception, str], Optional[Any]]] = None,
931
+ skip_regexes: Optional[List[Union[str, Pattern[str]]]] = None,
932
+ extract_regexes: Optional[List[Union[str, Pattern[str]]]] = None,
933
+ object_mode: Literal["as_is", "json", "str"] = "json",
934
+ raw: bool = False,
935
+ ):
936
+ """
937
+ Decorator for sanitize_stream. Can be used as @sanitize_stream or @sanitize_stream(...).
938
+ All arguments are the same as sanitize_stream().
939
+ """
940
+ def decorator(func):
941
+ if asyncio.iscoroutinefunction(func):
942
+ @functools.wraps(func)
943
+ async def async_wrapper(*args, **kwargs):
944
+ result = await func(*args, **kwargs)
945
+ return sanitize_stream(
946
+ result,
947
+ intro_value=intro_value,
948
+ to_json=to_json,
949
+ skip_markers=skip_markers,
950
+ strip_chars=strip_chars,
951
+ start_marker=start_marker,
952
+ end_marker=end_marker,
953
+ content_extractor=content_extractor,
954
+ yield_raw_on_error=yield_raw_on_error,
955
+ encoding=encoding,
956
+ encoding_errors=encoding_errors,
957
+ buffer_size=buffer_size,
958
+ line_delimiter=line_delimiter,
959
+ error_handler=error_handler,
960
+ skip_regexes=skip_regexes,
961
+ extract_regexes=extract_regexes,
962
+ object_mode=object_mode,
963
+ raw=raw,
964
+ )
965
+ return async_wrapper
966
+ else:
967
+ @functools.wraps(func)
968
+ def sync_wrapper(*args, **kwargs):
969
+ result = func(*args, **kwargs)
970
+ return sanitize_stream(
971
+ result,
972
+ intro_value=intro_value,
973
+ to_json=to_json,
974
+ skip_markers=skip_markers,
975
+ strip_chars=strip_chars,
976
+ start_marker=start_marker,
977
+ end_marker=end_marker,
978
+ content_extractor=content_extractor,
979
+ yield_raw_on_error=yield_raw_on_error,
980
+ encoding=encoding,
981
+ encoding_errors=encoding_errors,
982
+ buffer_size=buffer_size,
983
+ line_delimiter=line_delimiter,
984
+ error_handler=error_handler,
985
+ skip_regexes=skip_regexes,
986
+ extract_regexes=extract_regexes,
987
+ object_mode=object_mode,
988
+ raw=raw,
989
+ )
990
+ return sync_wrapper
991
+ if _func is None:
992
+ return decorator
993
+ else:
994
+ return decorator(_func)
995
+
996
+ # Alias for decorator usage
997
+ LITSTREAM = sanitize_stream
998
+
999
+ # Decorator aliases
1000
+ sanitize_stream_decorator = _sanitize_stream_decorator
1001
+ lit_streamer = _sanitize_stream_decorator
1002
+
1003
+ # Allow @sanitize_stream and @lit_streamer as decorators
1004
+ import asyncio
1005
+ sanitize_stream.__decorator__ = _sanitize_stream_decorator
1006
+ LITSTREAM.__decorator__ = _sanitize_stream_decorator
1007
+ lit_streamer.__decorator__ = _sanitize_stream_decorator
1008
+
1009
+ def __getattr__(name):
1010
+ if name == 'sanitize_stream':
1011
+ return sanitize_stream
1012
+ if name == 'LITSTREAM':
1013
+ return LITSTREAM
1014
+ if name == 'sanitize_stream_decorator':
1015
+ return _sanitize_stream_decorator
1016
+ if name == 'lit_streamer':
1017
+ return _sanitize_stream_decorator
1018
+ raise AttributeError(f"module {__name__} has no attribute {name}")
802
1019
  from .conversation import Conversation # noqa: E402,F401
803
1020
  from .Extra.autocoder import AutoCoder # noqa: E402,F401
804
1021
  from .optimizers import Optimizers # noqa: E402,F401
@@ -81,21 +81,11 @@ class Model(Enum):
81
81
  model_header (dict): Additional headers required for the model.
82
82
  advanced_only (bool): Whether the model is available only for advanced users.
83
83
  """
84
- # Updated model definitions based on reference implementation
84
+ # Only the specified models
85
85
  UNSPECIFIED = ("unspecified", {}, False)
86
- G_2_0_FLASH = (
87
- "gemini-2.0-flash",
88
- {"x-goog-ext-525001261-jspb": '[1,null,null,null,"f299729663a2343f"]'},
89
- False,
90
- )
91
- G_2_0_FLASH_THINKING = (
92
- "gemini-2.0-flash-thinking",
93
- {"x-goog-ext-525001261-jspb": '[null,null,null,null,"7ca48d02d802f20a"]'},
94
- False,
95
- )
96
86
  G_2_5_FLASH = (
97
87
  "gemini-2.5-flash",
98
- {"x-goog-ext-525001261-jspb": '[1,null,null,null,"35609594dbe934d8"]'},
88
+ {"x-goog-ext-525001261-jspb": '[1,null,null,null,"71c2d248d3b102ff"]'},
99
89
  False,
100
90
  )
101
91
  G_2_5_PRO = (
@@ -103,16 +93,6 @@ class Model(Enum):
103
93
  {"x-goog-ext-525001261-jspb": '[1,null,null,null,"2525e3954d185b3c"]'},
104
94
  False,
105
95
  )
106
- G_2_0_EXP_ADVANCED = (
107
- "gemini-2.0-exp-advanced",
108
- {"x-goog-ext-525001261-jspb": '[null,null,null,null,"b1e46a6037e6aa9f"]'},
109
- True,
110
- )
111
- G_2_5_EXP_ADVANCED = (
112
- "gemini-2.5-exp-advanced",
113
- {"x-goog-ext-525001261-jspb": '[null,null,null,null,"203e6bb81620bcfe"]'},
114
- True,
115
- )
116
96
 
117
97
  def __init__(self, name, header, advanced_only):
118
98
  """
@@ -43,17 +43,30 @@ class Scira(AISearch):
43
43
  """
44
44
 
45
45
  AVAILABLE_MODELS = {
46
- "scira-default": "Grok3-mini", # thinking model
47
- "scira-grok-3": "Grok3",
48
- "scira-anthropic": "Claude 4 Sonnet",
49
- "scira-anthropic-thinking": "Claude 4 Sonnet Thinking", # thinking model
50
- "scira-vision" : "Grok2-Vision", # vision model
51
- "scira-4o": "GPT4o",
52
- "scira-qwq": "QWQ-32B",
53
- "scira-o4-mini": "o4-mini",
54
- "scira-google": "gemini 2.5 flash Thinking", # thinking model
55
- "scira-google-pro": "gemini 2.5 pro",
56
- "scira-llama-4": "llama 4 Maverick",
46
+ "scira-default": "grok-3-mini", # thinking model
47
+ "scira-x-fast-mini": "grok-3-mini-fast",
48
+ "scira-x-fast": "grok-3-fast",
49
+ "scira-nano": "gpt-4.1-nano",
50
+ "scira-grok-3": "grok-3",
51
+ "scira-grok-4": "grok-4",
52
+ "scira-vision": "grok-2-vision-1212",
53
+ "scira-g2": "grok-2-latest",
54
+ "scira-4o-mini": "gpt-4o-mini",
55
+ "scira-o4-mini": "o4-mini-2025-04-16",
56
+ "scira-o3": "o3",
57
+ "scira-qwen-32b": "qwen/qwen3-32b",
58
+ "scira-qwen-30b": "qwen3-30b-a3b",
59
+ "scira-deepseek-v3": "deepseek-v3-0324",
60
+ "scira-haiku": "claude-3-5-haiku-20241022",
61
+ "scira-mistral": "mistral-small-latest",
62
+ "scira-google-lite": "gemini-2.5-flash-lite-preview-06-17",
63
+ "scira-google": "gemini-2.5-flash",
64
+ "scira-google-pro": "gemini-2.5-pro",
65
+ "scira-anthropic": "claude-sonnet-4-20250514",
66
+ "scira-anthropic-thinking": "claude-sonnet-4-20250514",
67
+ "scira-opus": "claude-4-opus-20250514",
68
+ "scira-opus-pro": "claude-4-opus-20250514",
69
+ "scira-llama-4": "meta-llama/llama-4-maverick-17b-128e-instruct",
57
70
  }
58
71
  def __init__(
59
72
  self,