webscout 7.0__py3-none-any.whl → 7.2__py3-none-any.whl

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 (147) hide show
  1. webscout/AIauto.py +191 -191
  2. webscout/AIbase.py +122 -122
  3. webscout/AIutel.py +440 -440
  4. webscout/Bard.py +343 -161
  5. webscout/DWEBS.py +489 -492
  6. webscout/Extra/YTToolkit/YTdownloader.py +995 -995
  7. webscout/Extra/YTToolkit/__init__.py +2 -2
  8. webscout/Extra/YTToolkit/transcriber.py +476 -479
  9. webscout/Extra/YTToolkit/ytapi/channel.py +307 -307
  10. webscout/Extra/YTToolkit/ytapi/playlist.py +58 -58
  11. webscout/Extra/YTToolkit/ytapi/pool.py +7 -7
  12. webscout/Extra/YTToolkit/ytapi/utils.py +62 -62
  13. webscout/Extra/YTToolkit/ytapi/video.py +103 -103
  14. webscout/Extra/autocoder/__init__.py +9 -9
  15. webscout/Extra/autocoder/autocoder_utiles.py +199 -199
  16. webscout/Extra/autocoder/rawdog.py +5 -7
  17. webscout/Extra/autollama.py +230 -230
  18. webscout/Extra/gguf.py +3 -3
  19. webscout/Extra/weather.py +171 -171
  20. webscout/LLM.py +442 -442
  21. webscout/Litlogger/__init__.py +67 -681
  22. webscout/Litlogger/core/__init__.py +6 -0
  23. webscout/Litlogger/core/level.py +20 -0
  24. webscout/Litlogger/core/logger.py +123 -0
  25. webscout/Litlogger/handlers/__init__.py +12 -0
  26. webscout/Litlogger/handlers/console.py +50 -0
  27. webscout/Litlogger/handlers/file.py +143 -0
  28. webscout/Litlogger/handlers/network.py +174 -0
  29. webscout/Litlogger/styles/__init__.py +7 -0
  30. webscout/Litlogger/styles/colors.py +231 -0
  31. webscout/Litlogger/styles/formats.py +377 -0
  32. webscout/Litlogger/styles/text.py +87 -0
  33. webscout/Litlogger/utils/__init__.py +6 -0
  34. webscout/Litlogger/utils/detectors.py +154 -0
  35. webscout/Litlogger/utils/formatters.py +200 -0
  36. webscout/Provider/AISEARCH/DeepFind.py +250 -250
  37. webscout/Provider/Blackboxai.py +136 -137
  38. webscout/Provider/ChatGPTGratis.py +226 -0
  39. webscout/Provider/Cloudflare.py +91 -78
  40. webscout/Provider/DeepSeek.py +218 -0
  41. webscout/Provider/Deepinfra.py +59 -35
  42. webscout/Provider/Free2GPT.py +131 -124
  43. webscout/Provider/Gemini.py +100 -115
  44. webscout/Provider/Glider.py +74 -59
  45. webscout/Provider/Groq.py +30 -18
  46. webscout/Provider/Jadve.py +108 -77
  47. webscout/Provider/Llama3.py +117 -94
  48. webscout/Provider/Marcus.py +191 -137
  49. webscout/Provider/Netwrck.py +62 -50
  50. webscout/Provider/PI.py +79 -124
  51. webscout/Provider/PizzaGPT.py +129 -83
  52. webscout/Provider/QwenLM.py +311 -0
  53. webscout/Provider/TTI/AiForce/__init__.py +22 -22
  54. webscout/Provider/TTI/AiForce/async_aiforce.py +257 -257
  55. webscout/Provider/TTI/AiForce/sync_aiforce.py +242 -242
  56. webscout/Provider/TTI/Nexra/__init__.py +22 -22
  57. webscout/Provider/TTI/Nexra/async_nexra.py +286 -286
  58. webscout/Provider/TTI/Nexra/sync_nexra.py +258 -258
  59. webscout/Provider/TTI/PollinationsAI/__init__.py +23 -23
  60. webscout/Provider/TTI/PollinationsAI/async_pollinations.py +330 -330
  61. webscout/Provider/TTI/PollinationsAI/sync_pollinations.py +285 -285
  62. webscout/Provider/TTI/artbit/__init__.py +22 -22
  63. webscout/Provider/TTI/artbit/async_artbit.py +184 -184
  64. webscout/Provider/TTI/artbit/sync_artbit.py +176 -176
  65. webscout/Provider/TTI/blackbox/__init__.py +4 -4
  66. webscout/Provider/TTI/blackbox/async_blackbox.py +212 -212
  67. webscout/Provider/TTI/blackbox/sync_blackbox.py +199 -199
  68. webscout/Provider/TTI/deepinfra/__init__.py +4 -4
  69. webscout/Provider/TTI/deepinfra/async_deepinfra.py +227 -227
  70. webscout/Provider/TTI/deepinfra/sync_deepinfra.py +199 -199
  71. webscout/Provider/TTI/huggingface/__init__.py +22 -22
  72. webscout/Provider/TTI/huggingface/async_huggingface.py +199 -199
  73. webscout/Provider/TTI/huggingface/sync_huggingface.py +195 -195
  74. webscout/Provider/TTI/imgninza/__init__.py +4 -4
  75. webscout/Provider/TTI/imgninza/async_ninza.py +214 -214
  76. webscout/Provider/TTI/imgninza/sync_ninza.py +209 -209
  77. webscout/Provider/TTI/talkai/__init__.py +4 -4
  78. webscout/Provider/TTI/talkai/async_talkai.py +229 -229
  79. webscout/Provider/TTI/talkai/sync_talkai.py +207 -207
  80. webscout/Provider/TTS/deepgram.py +182 -182
  81. webscout/Provider/TTS/elevenlabs.py +136 -136
  82. webscout/Provider/TTS/gesserit.py +150 -150
  83. webscout/Provider/TTS/murfai.py +138 -138
  84. webscout/Provider/TTS/parler.py +133 -134
  85. webscout/Provider/TTS/streamElements.py +360 -360
  86. webscout/Provider/TTS/utils.py +280 -280
  87. webscout/Provider/TTS/voicepod.py +116 -116
  88. webscout/Provider/TextPollinationsAI.py +74 -47
  89. webscout/Provider/WiseCat.py +193 -0
  90. webscout/Provider/__init__.py +144 -136
  91. webscout/Provider/cerebras.py +242 -227
  92. webscout/Provider/chatglm.py +204 -204
  93. webscout/Provider/dgaf.py +67 -39
  94. webscout/Provider/gaurish.py +105 -66
  95. webscout/Provider/geminiapi.py +208 -208
  96. webscout/Provider/granite.py +223 -0
  97. webscout/Provider/hermes.py +218 -218
  98. webscout/Provider/llama3mitril.py +179 -179
  99. webscout/Provider/llamatutor.py +72 -62
  100. webscout/Provider/llmchat.py +60 -35
  101. webscout/Provider/meta.py +794 -794
  102. webscout/Provider/multichat.py +331 -230
  103. webscout/Provider/typegpt.py +359 -356
  104. webscout/Provider/yep.py +5 -5
  105. webscout/__main__.py +5 -5
  106. webscout/cli.py +319 -319
  107. webscout/conversation.py +241 -242
  108. webscout/exceptions.py +328 -328
  109. webscout/litagent/__init__.py +28 -28
  110. webscout/litagent/agent.py +2 -3
  111. webscout/litprinter/__init__.py +0 -58
  112. webscout/scout/__init__.py +8 -8
  113. webscout/scout/core.py +884 -884
  114. webscout/scout/element.py +459 -459
  115. webscout/scout/parsers/__init__.py +69 -69
  116. webscout/scout/parsers/html5lib_parser.py +172 -172
  117. webscout/scout/parsers/html_parser.py +236 -236
  118. webscout/scout/parsers/lxml_parser.py +178 -178
  119. webscout/scout/utils.py +38 -38
  120. webscout/swiftcli/__init__.py +811 -811
  121. webscout/update_checker.py +2 -12
  122. webscout/version.py +1 -1
  123. webscout/webscout_search.py +1142 -1140
  124. webscout/webscout_search_async.py +635 -635
  125. webscout/zeroart/__init__.py +54 -54
  126. webscout/zeroart/base.py +60 -60
  127. webscout/zeroart/effects.py +99 -99
  128. webscout/zeroart/fonts.py +816 -816
  129. {webscout-7.0.dist-info → webscout-7.2.dist-info}/METADATA +21 -28
  130. webscout-7.2.dist-info/RECORD +217 -0
  131. webstoken/__init__.py +30 -30
  132. webstoken/classifier.py +189 -189
  133. webstoken/keywords.py +216 -216
  134. webstoken/language.py +128 -128
  135. webstoken/ner.py +164 -164
  136. webstoken/normalizer.py +35 -35
  137. webstoken/processor.py +77 -77
  138. webstoken/sentiment.py +206 -206
  139. webstoken/stemmer.py +73 -73
  140. webstoken/tagger.py +60 -60
  141. webstoken/tokenizer.py +158 -158
  142. webscout/Provider/RUBIKSAI.py +0 -272
  143. webscout-7.0.dist-info/RECORD +0 -199
  144. {webscout-7.0.dist-info → webscout-7.2.dist-info}/LICENSE.md +0 -0
  145. {webscout-7.0.dist-info → webscout-7.2.dist-info}/WHEEL +0 -0
  146. {webscout-7.0.dist-info → webscout-7.2.dist-info}/entry_points.txt +0 -0
  147. {webscout-7.0.dist-info → webscout-7.2.dist-info}/top_level.txt +0 -0
@@ -1,135 +1,134 @@
1
- import time
2
- from pathlib import Path
3
- from typing import Generator
4
- from playsound import playsound
5
- from webscout import exceptions
6
- from webscout.AIbase import TTSProvider
7
- from webscout.Litlogger import LitLogger, LogFormat, ColorScheme
8
- from gradio_client import Client
9
- import os
10
-
11
-
12
- class ParlerTTS(TTSProvider):
13
- """
14
- A class to interact with the Parler TTS API through Gradio Client.
15
- """
16
-
17
- def __init__(self, timeout: int = 20, proxies: dict = None):
18
- """Initializes the Parler TTS client."""
19
- self.api_endpoint = "/gen_tts"
20
- self.client = Client("parler-tts/parler_tts") # Initialize the Gradio client
21
- self.timeout = timeout
22
- self.audio_cache_dir = Path("./audio_cache")
23
- self.logger = LitLogger(
24
- name="ParlerTTS",
25
- format=LogFormat.MODERN_EMOJI,
26
- color_scheme=ColorScheme.AURORA
27
- )
28
-
29
- def tts(self, text: str, description: str = "", use_large: bool = False, verbose: bool = True) -> str:
30
- """
31
- Converts text to speech using the Parler TTS API.
32
-
33
- Args:
34
- text (str): The text to be converted to speech.
35
- description (str, optional): Description of the desired voice characteristics. Defaults to "".
36
- use_large (bool, optional): Whether to use the large model variant. Defaults to False.
37
- verbose (bool, optional): Whether to log detailed information. Defaults to True.
38
-
39
- Returns:
40
- str: The filename of the saved audio file.
41
-
42
- Raises:
43
- exceptions.FailedToGenerateResponseError: If there is an error generating or saving the audio.
44
- """
45
- filename = self.audio_cache_dir / f"{int(time.time())}.wav"
46
-
47
- try:
48
- if verbose:
49
- self.logger.info(f"Generating TTS with description: {description} 🎙️")
50
-
51
- result = self.client.predict(
52
- text=text,
53
- description=description,
54
- use_large=use_large,
55
- api_name=self.api_endpoint,
56
- )
57
-
58
- if isinstance(result, bytes):
59
- audio_bytes = result
60
- elif isinstance(result, str) and os.path.isfile(result):
61
- with open(result, "rb") as f:
62
- audio_bytes = f.read()
63
- else:
64
- raise ValueError(f"Unexpected response from API: {result}")
65
-
66
- self._save_audio(audio_bytes, filename)
67
-
68
- if verbose:
69
- self.logger.success(f"Audio generated successfully: {filename} 🔊")
70
-
71
- return filename.as_posix()
72
-
73
- except Exception as e:
74
- self.logger.critical(f"Error generating audio: {e} 🚨")
75
- raise exceptions.FailedToGenerateResponseError(
76
- f"Error generating audio after multiple retries: {e}"
77
- ) from e
78
-
79
- def _save_audio(self, audio_data: bytes, filename: Path):
80
- """
81
- Saves the audio data to a WAV file in the audio cache directory.
82
-
83
- Args:
84
- audio_data (bytes): Audio data to save
85
- filename (Path): Path to save the audio file
86
-
87
- Raises:
88
- exceptions.FailedToGenerateResponseError: If there is an error saving the audio.
89
- """
90
- try:
91
- self.audio_cache_dir.mkdir(parents=True, exist_ok=True)
92
- with open(filename, "wb") as f:
93
- f.write(audio_data)
94
- self.logger.debug(f"Audio saved to {filename} 💾")
95
-
96
- except Exception as e:
97
- self.logger.error(f"Error saving audio: {e} 🔇")
98
- raise exceptions.FailedToGenerateResponseError(f"Error saving audio: {e}")
99
-
100
- def play_audio(self, filename: str):
101
- """
102
- Plays an audio file using playsound.
103
-
104
- Args:
105
- filename (str): The path to the audio file.
106
-
107
- Raises:
108
- RuntimeError: If there is an error playing the audio.
109
- """
110
- try:
111
- self.logger.info(f"Playing audio: {filename} 🎵")
112
- playsound(filename)
113
- except Exception as e:
114
- self.logger.error(f"Error playing audio: {e} 🔇")
115
- raise RuntimeError(f"Error playing audio: {e}")
116
-
117
-
118
- # Example usage
119
- if __name__ == "__main__":
120
- parlertts = ParlerTTS()
121
- text = (
122
- "All of the data, pre-processing, training code, and weights are released "
123
- "publicly under a permissive license, enabling the community to build on our work "
124
- "and develop their own powerful models."
125
- )
126
- voice_description = (
127
- "Laura's voice is monotone yet slightly fast in delivery, with a very close "
128
- "recording that almost has no background noise."
129
- )
130
-
131
- parlertts.logger.info("Generating audio...")
132
- audio_file = parlertts.tts(text, description=voice_description, use_large=False)
133
-
134
- parlertts.logger.info("Playing audio...")
1
+ import time
2
+ from pathlib import Path
3
+ from typing import Generator
4
+ from playsound import playsound
5
+ from webscout import exceptions
6
+ from webscout.AIbase import TTSProvider
7
+ from webscout.Litlogger import Logger, LogFormat
8
+ from gradio_client import Client
9
+ import os
10
+
11
+
12
+ class ParlerTTS(TTSProvider):
13
+ """
14
+ A class to interact with the Parler TTS API through Gradio Client.
15
+ """
16
+
17
+ def __init__(self, timeout: int = 20, proxies: dict = None):
18
+ """Initializes the Parler TTS client."""
19
+ self.api_endpoint = "/gen_tts"
20
+ self.client = Client("parler-tts/parler_tts") # Initialize the Gradio client
21
+ self.timeout = timeout
22
+ self.audio_cache_dir = Path("./audio_cache")
23
+ self.logger = Logger(
24
+ name="ParlerTTS",
25
+ format=LogFormat.MODERN_EMOJI,
26
+ )
27
+
28
+ def tts(self, text: str, description: str = "", use_large: bool = False, verbose: bool = True) -> str:
29
+ """
30
+ Converts text to speech using the Parler TTS API.
31
+
32
+ Args:
33
+ text (str): The text to be converted to speech.
34
+ description (str, optional): Description of the desired voice characteristics. Defaults to "".
35
+ use_large (bool, optional): Whether to use the large model variant. Defaults to False.
36
+ verbose (bool, optional): Whether to log detailed information. Defaults to True.
37
+
38
+ Returns:
39
+ str: The filename of the saved audio file.
40
+
41
+ Raises:
42
+ exceptions.FailedToGenerateResponseError: If there is an error generating or saving the audio.
43
+ """
44
+ filename = self.audio_cache_dir / f"{int(time.time())}.wav"
45
+
46
+ try:
47
+ if verbose:
48
+ self.logger.info(f"Generating TTS with description: {description} 🎙️")
49
+
50
+ result = self.client.predict(
51
+ text=text,
52
+ description=description,
53
+ use_large=use_large,
54
+ api_name=self.api_endpoint,
55
+ )
56
+
57
+ if isinstance(result, bytes):
58
+ audio_bytes = result
59
+ elif isinstance(result, str) and os.path.isfile(result):
60
+ with open(result, "rb") as f:
61
+ audio_bytes = f.read()
62
+ else:
63
+ raise ValueError(f"Unexpected response from API: {result}")
64
+
65
+ self._save_audio(audio_bytes, filename)
66
+
67
+ if verbose:
68
+ self.logger.success(f"Audio generated successfully: {filename} 🔊")
69
+
70
+ return filename.as_posix()
71
+
72
+ except Exception as e:
73
+ self.logger.critical(f"Error generating audio: {e} 🚨")
74
+ raise exceptions.FailedToGenerateResponseError(
75
+ f"Error generating audio after multiple retries: {e}"
76
+ ) from e
77
+
78
+ def _save_audio(self, audio_data: bytes, filename: Path):
79
+ """
80
+ Saves the audio data to a WAV file in the audio cache directory.
81
+
82
+ Args:
83
+ audio_data (bytes): Audio data to save
84
+ filename (Path): Path to save the audio file
85
+
86
+ Raises:
87
+ exceptions.FailedToGenerateResponseError: If there is an error saving the audio.
88
+ """
89
+ try:
90
+ self.audio_cache_dir.mkdir(parents=True, exist_ok=True)
91
+ with open(filename, "wb") as f:
92
+ f.write(audio_data)
93
+ self.logger.debug(f"Audio saved to {filename} 💾")
94
+
95
+ except Exception as e:
96
+ self.logger.error(f"Error saving audio: {e} 🔇")
97
+ raise exceptions.FailedToGenerateResponseError(f"Error saving audio: {e}")
98
+
99
+ def play_audio(self, filename: str):
100
+ """
101
+ Plays an audio file using playsound.
102
+
103
+ Args:
104
+ filename (str): The path to the audio file.
105
+
106
+ Raises:
107
+ RuntimeError: If there is an error playing the audio.
108
+ """
109
+ try:
110
+ self.logger.info(f"Playing audio: {filename} 🎵")
111
+ playsound(filename)
112
+ except Exception as e:
113
+ self.logger.error(f"Error playing audio: {e} 🔇")
114
+ raise RuntimeError(f"Error playing audio: {e}")
115
+
116
+
117
+ # Example usage
118
+ if __name__ == "__main__":
119
+ parlertts = ParlerTTS()
120
+ text = (
121
+ "All of the data, pre-processing, training code, and weights are released "
122
+ "publicly under a permissive license, enabling the community to build on our work "
123
+ "and develop their own powerful models."
124
+ )
125
+ voice_description = (
126
+ "Laura's voice is monotone yet slightly fast in delivery, with a very close "
127
+ "recording that almost has no background noise."
128
+ )
129
+
130
+ parlertts.logger.info("Generating audio...")
131
+ audio_file = parlertts.tts(text, description=voice_description, use_large=False)
132
+
133
+ parlertts.logger.info("Playing audio...")
135
134
  parlertts.play_audio(audio_file)