webscout 1.2.8__tar.gz → 1.3.0__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.
- {webscout-1.2.8 → webscout-1.3.0}/PKG-INFO +29 -11
- {webscout-1.2.8 → webscout-1.3.0}/README.md +28 -10
- {webscout-1.2.8 → webscout-1.3.0}/setup.py +1 -1
- {webscout-1.2.8 → webscout-1.3.0}/webscout/__init__.py +1 -1
- {webscout-1.2.8 → webscout-1.3.0}/webscout/transcriber.py +496 -496
- webscout-1.3.0/webscout/version.py +2 -0
- webscout-1.3.0/webscout/voice.py +27 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout.egg-info/PKG-INFO +29 -11
- {webscout-1.2.8 → webscout-1.3.0}/webscout.egg-info/SOURCES.txt +1 -0
- webscout-1.2.8/webscout/version.py +0 -2
- {webscout-1.2.8 → webscout-1.3.0}/DeepWEBS/__init__.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/DeepWEBS/documents/__init__.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/DeepWEBS/documents/query_results_extractor.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/DeepWEBS/documents/webpage_content_extractor.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/DeepWEBS/networks/__init__.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/DeepWEBS/networks/filepath_converter.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/DeepWEBS/networks/google_searcher.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/DeepWEBS/networks/network_configs.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/DeepWEBS/networks/webpage_fetcher.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/DeepWEBS/utilsdw/__init__.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/DeepWEBS/utilsdw/enver.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/DeepWEBS/utilsdw/logger.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/LICENSE.md +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/setup.cfg +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout/AI.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout/AIbase.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout/AIutel.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout/DWEBS.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout/HelpingAI.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout/LLM.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout/__main__.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout/cli.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout/exceptions.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout/models.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout/utils.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout/webscout_search.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout/webscout_search_async.py +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout.egg-info/dependency_links.txt +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout.egg-info/entry_points.txt +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout.egg-info/requires.txt +0 -0
- {webscout-1.2.8 → webscout-1.3.0}/webscout.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: webscout
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.0
|
|
4
4
|
Summary: Search for words, documents, images, videos, news, maps and text translation using the Google, DuckDuckGo.com, yep.com, phind.com, you.com, etc Also containes AI models and now can transcribe yt videos
|
|
5
5
|
Author: OEvortex
|
|
6
6
|
Author-email: helpingai5@gmail.com
|
|
@@ -72,6 +72,9 @@ Search for words, documents, images, videos, news, maps and text translation usi
|
|
|
72
72
|
- [Activating DeepWEBS](#activating-deepwebs)
|
|
73
73
|
- [Point to remember before using `DeepWEBS`](#point-to-remember-before-using-deepwebs)
|
|
74
74
|
- [Usage Example](#usage-example)
|
|
75
|
+
- [Text-to-Speech:](#text-to-speech)
|
|
76
|
+
- [Available TTS Voices:](#available-tts-voices)
|
|
77
|
+
- [ALL voices:](#all-voices)
|
|
75
78
|
- [WEBS and AsyncWEBS classes](#webs-and-asyncwebs-classes)
|
|
76
79
|
- [Exceptions](#exceptions)
|
|
77
80
|
- [usage of webscout](#usage-of-webscout)
|
|
@@ -337,6 +340,23 @@ if __name__ == "__main__":
|
|
|
337
340
|
main()
|
|
338
341
|
|
|
339
342
|
```
|
|
343
|
+
## Text-to-Speech:
|
|
344
|
+
```python
|
|
345
|
+
from webscout import play_audio
|
|
346
|
+
|
|
347
|
+
message = "This is an example of text-to-speech."
|
|
348
|
+
audio_content = play_audio(message, voice="Brian")
|
|
349
|
+
|
|
350
|
+
# Save the audio to a file
|
|
351
|
+
with open("output.mp3", "wb") as f:
|
|
352
|
+
f.write(audio_content)
|
|
353
|
+
```
|
|
354
|
+
### Available TTS Voices:
|
|
355
|
+
You can choose from a wide range of voices, including:
|
|
356
|
+
- Filiz, Astrid, Tatyana, Maxim, Carmen, Ines, Cristiano, Vitoria, Ricardo, Maja, Jan, Jacek, Ewa, Ruben, Lotte, Liv, Seoyeon, Takumi, Mizuki, Giorgio, Carla, Bianca, Karl, Dora, Mathieu, Celine, Chantal, Penelope, Miguel, Mia, Enrique, Conchita, Geraint, Salli, Matthew, Kimberly, Kendra, Justin, Joey, Joanna, Ivy, Raveena, Aditi, Emma, Brian, Amy, Russell, Nicole, Vicki, Marlene, Hans, Naja, Mads, Gwyneth, Zhiyu
|
|
357
|
+
- Standard and WaveNet voices for various languages (e.g., en-US, es-ES, ja-JP, etc.)
|
|
358
|
+
### ALL voices:
|
|
359
|
+
[Filiz, Astrid, Tatyana, Maxim, Carmen, Ines, Cristiano, Vitoria, Ricardo, Maja, Jan, Jacek, Ewa, Ruben, Lotte, Liv, Seoyeon, Takumi, Mizuki, Giorgio, Carla, Bianca, Karl, Dora, Mathieu, Celine, Chantal, Penelope, Miguel, Mia, Enrique, Conchita, Geraint, Salli, Matthew, Kimberly, Kendra, Justin, Joey, Joanna, Ivy, Raveena, Aditi, Emma, Brian, Amy, Russell, Nicole, Vicki, Marlene, Hans, Naja, Mads, Gwyneth, Zhiyu, es-ES-Standard-A, it-IT-Standard-A, it-IT-Wavenet-A, ja-JP-Standard-A, ja-JP-Wavenet-A, ko-KR-Standard-A, ko-KR-Wavenet-A, pt-BR-Standard-A, tr-TR-Standard-A, sv-SE-Standard-A, nl-NL-Standard-A, nl-NL-Wavenet-A, en-US-Wavenet-A, en-US-Wavenet-B, en-US-Wavenet-C, en-US-Wavenet-D, en-US-Wavenet-E, en-US-Wavenet-F, en-GB-Standard-A, en-GB-Standard-B, en-GB-Standard-C, en-GB-Standard-D, en-GB-Wavenet-A, en-GB-Wavenet-B, en-GB-Wavenet-C, en-GB-Wavenet-D, en-US-Standard-B, en-US-Standard-C, en-US-Standard-D, en-US-Standard-E, de-DE-Standard-A, de-DE-Standard-B, de-DE-Wavenet-A, de-DE-Wavenet-B, de-DE-Wavenet-C, de-DE-Wavenet-D, en-AU-Standard-A, en-AU-Standard-B, en-AU-Wavenet-A, en-AU-Wavenet-B, en-AU-Wavenet-C, en-AU-Wavenet-D, en-AU-Standard-C, en-AU-Standard-D, fr-CA-Standard-A, fr-CA-Standard-B, fr-CA-Standard-C, fr-CA-Standard-D, fr-FR-Standard-C, fr-FR-Standard-D, fr-FR-Wavenet-A, fr-FR-Wavenet-B, fr-FR-Wavenet-C, fr-FR-Wavenet-D, da-DK-Wavenet-A, pl-PL-Wavenet-A, pl-PL-Wavenet-B, pl-PL-Wavenet-C, pl-PL-Wavenet-D, pt-PT-Wavenet-A, pt-PT-Wavenet-B, pt-PT-Wavenet-C, pt-PT-Wavenet-D, ru-RU-Wavenet-A, ru-RU-Wavenet-B, ru-RU-Wavenet-C, ru-RU-Wavenet-D, sk-SK-Wavenet-A, tr-TR-Wavenet-A, tr-TR-Wavenet-B, tr-TR-Wavenet-C, tr-TR-Wavenet-D, tr-TR-Wavenet-E, uk-UA-Wavenet-A, ar-XA-Wavenet-A, ar-XA-Wavenet-B, ar-XA-Wavenet-C, cs-CZ-Wavenet-A, nl-NL-Wavenet-B, nl-NL-Wavenet-C, nl-NL-Wavenet-D, nl-NL-Wavenet-E, en-IN-Wavenet-A, en-IN-Wavenet-B, en-IN-Wavenet-C, fil-PH-Wavenet-A, fi-FI-Wavenet-A, el-GR-Wavenet-A, hi-IN-Wavenet-A, hi-IN-Wavenet-B, hi-IN-Wavenet-C, hu-HU-Wavenet-A, id-ID-Wavenet-A, id-ID-Wavenet-B, id-ID-Wavenet-C, it-IT-Wavenet-B, it-IT-Wavenet-C, it-IT-Wavenet-D, ja-JP-Wavenet-B, ja-JP-Wavenet-C, ja-JP-Wavenet-D, cmn-CN-Wavenet-A, cmn-CN-Wavenet-B, cmn-CN-Wavenet-C, cmn-CN-Wavenet-D, nb-no-Wavenet-E, nb-no-Wavenet-A, nb-no-Wavenet-B, nb-no-Wavenet-C, nb-no-Wavenet-D, vi-VN-Wavenet-A, vi-VN-Wavenet-B, vi-VN-Wavenet-C, vi-VN-Wavenet-D, sr-rs-Standard-A, lv-lv-Standard-A, is-is-Standard-A, bg-bg-Standard-A, af-ZA-Standard-A, Tracy, Danny, Huihui, Yaoyao, Kangkang, HanHan, Zhiwei, Asaf, An, Stefanos, Filip, Ivan, Heidi, Herena, Kalpana, Hemant, Matej, Andika, Rizwan, Lado, Valluvar, Linda, Heather, Sean, Michael, Karsten, Guillaume, Pattara, Jakub, Szabolcs, Hoda, Naayf]
|
|
340
360
|
## WEBS and AsyncWEBS classes
|
|
341
361
|
|
|
342
362
|
The WEBS and AsyncWEBS classes are used to retrieve search results from DuckDuckGo.com and yep.com periodically.
|
|
@@ -357,11 +377,12 @@ import logging
|
|
|
357
377
|
import sys
|
|
358
378
|
from itertools import chain
|
|
359
379
|
from random import shuffle
|
|
360
|
-
|
|
361
380
|
import requests
|
|
362
381
|
from webscout import AsyncWEBS
|
|
363
382
|
|
|
364
|
-
#
|
|
383
|
+
# If you have proxies, define them here
|
|
384
|
+
proxies = None
|
|
385
|
+
|
|
365
386
|
if sys.platform.lower().startswith("win"):
|
|
366
387
|
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
|
|
367
388
|
|
|
@@ -373,24 +394,21 @@ def get_words():
|
|
|
373
394
|
|
|
374
395
|
async def aget_results(word):
|
|
375
396
|
async with AsyncWEBS(proxies=proxies) as WEBS:
|
|
376
|
-
results =
|
|
397
|
+
results = await WEBS.text(word, max_results=None)
|
|
377
398
|
return results
|
|
378
399
|
|
|
379
400
|
async def main():
|
|
380
401
|
words = get_words()
|
|
381
402
|
shuffle(words)
|
|
382
|
-
tasks = []
|
|
383
|
-
for word in words[:10]:
|
|
384
|
-
tasks.append(aget_results(word))
|
|
403
|
+
tasks = [aget_results(word) for word in words[:10]]
|
|
385
404
|
results = await asyncio.gather(*tasks)
|
|
386
405
|
print(f"Done")
|
|
387
406
|
for r in chain.from_iterable(results):
|
|
388
407
|
print(r)
|
|
389
|
-
|
|
390
408
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
409
|
+
logging.basicConfig(level=logging.DEBUG)
|
|
410
|
+
|
|
411
|
+
await main()
|
|
394
412
|
```
|
|
395
413
|
It is important to note that the WEBS and AsyncWEBS classes should always be used as a context manager (with statement).
|
|
396
414
|
This ensures proper resource management and cleanup, as the context manager will automatically handle opening and closing the HTTP client connection.
|
|
@@ -20,6 +20,9 @@ Search for words, documents, images, videos, news, maps and text translation usi
|
|
|
20
20
|
- [Activating DeepWEBS](#activating-deepwebs)
|
|
21
21
|
- [Point to remember before using `DeepWEBS`](#point-to-remember-before-using-deepwebs)
|
|
22
22
|
- [Usage Example](#usage-example)
|
|
23
|
+
- [Text-to-Speech:](#text-to-speech)
|
|
24
|
+
- [Available TTS Voices:](#available-tts-voices)
|
|
25
|
+
- [ALL voices:](#all-voices)
|
|
23
26
|
- [WEBS and AsyncWEBS classes](#webs-and-asyncwebs-classes)
|
|
24
27
|
- [Exceptions](#exceptions)
|
|
25
28
|
- [usage of webscout](#usage-of-webscout)
|
|
@@ -285,6 +288,23 @@ if __name__ == "__main__":
|
|
|
285
288
|
main()
|
|
286
289
|
|
|
287
290
|
```
|
|
291
|
+
## Text-to-Speech:
|
|
292
|
+
```python
|
|
293
|
+
from webscout import play_audio
|
|
294
|
+
|
|
295
|
+
message = "This is an example of text-to-speech."
|
|
296
|
+
audio_content = play_audio(message, voice="Brian")
|
|
297
|
+
|
|
298
|
+
# Save the audio to a file
|
|
299
|
+
with open("output.mp3", "wb") as f:
|
|
300
|
+
f.write(audio_content)
|
|
301
|
+
```
|
|
302
|
+
### Available TTS Voices:
|
|
303
|
+
You can choose from a wide range of voices, including:
|
|
304
|
+
- Filiz, Astrid, Tatyana, Maxim, Carmen, Ines, Cristiano, Vitoria, Ricardo, Maja, Jan, Jacek, Ewa, Ruben, Lotte, Liv, Seoyeon, Takumi, Mizuki, Giorgio, Carla, Bianca, Karl, Dora, Mathieu, Celine, Chantal, Penelope, Miguel, Mia, Enrique, Conchita, Geraint, Salli, Matthew, Kimberly, Kendra, Justin, Joey, Joanna, Ivy, Raveena, Aditi, Emma, Brian, Amy, Russell, Nicole, Vicki, Marlene, Hans, Naja, Mads, Gwyneth, Zhiyu
|
|
305
|
+
- Standard and WaveNet voices for various languages (e.g., en-US, es-ES, ja-JP, etc.)
|
|
306
|
+
### ALL voices:
|
|
307
|
+
[Filiz, Astrid, Tatyana, Maxim, Carmen, Ines, Cristiano, Vitoria, Ricardo, Maja, Jan, Jacek, Ewa, Ruben, Lotte, Liv, Seoyeon, Takumi, Mizuki, Giorgio, Carla, Bianca, Karl, Dora, Mathieu, Celine, Chantal, Penelope, Miguel, Mia, Enrique, Conchita, Geraint, Salli, Matthew, Kimberly, Kendra, Justin, Joey, Joanna, Ivy, Raveena, Aditi, Emma, Brian, Amy, Russell, Nicole, Vicki, Marlene, Hans, Naja, Mads, Gwyneth, Zhiyu, es-ES-Standard-A, it-IT-Standard-A, it-IT-Wavenet-A, ja-JP-Standard-A, ja-JP-Wavenet-A, ko-KR-Standard-A, ko-KR-Wavenet-A, pt-BR-Standard-A, tr-TR-Standard-A, sv-SE-Standard-A, nl-NL-Standard-A, nl-NL-Wavenet-A, en-US-Wavenet-A, en-US-Wavenet-B, en-US-Wavenet-C, en-US-Wavenet-D, en-US-Wavenet-E, en-US-Wavenet-F, en-GB-Standard-A, en-GB-Standard-B, en-GB-Standard-C, en-GB-Standard-D, en-GB-Wavenet-A, en-GB-Wavenet-B, en-GB-Wavenet-C, en-GB-Wavenet-D, en-US-Standard-B, en-US-Standard-C, en-US-Standard-D, en-US-Standard-E, de-DE-Standard-A, de-DE-Standard-B, de-DE-Wavenet-A, de-DE-Wavenet-B, de-DE-Wavenet-C, de-DE-Wavenet-D, en-AU-Standard-A, en-AU-Standard-B, en-AU-Wavenet-A, en-AU-Wavenet-B, en-AU-Wavenet-C, en-AU-Wavenet-D, en-AU-Standard-C, en-AU-Standard-D, fr-CA-Standard-A, fr-CA-Standard-B, fr-CA-Standard-C, fr-CA-Standard-D, fr-FR-Standard-C, fr-FR-Standard-D, fr-FR-Wavenet-A, fr-FR-Wavenet-B, fr-FR-Wavenet-C, fr-FR-Wavenet-D, da-DK-Wavenet-A, pl-PL-Wavenet-A, pl-PL-Wavenet-B, pl-PL-Wavenet-C, pl-PL-Wavenet-D, pt-PT-Wavenet-A, pt-PT-Wavenet-B, pt-PT-Wavenet-C, pt-PT-Wavenet-D, ru-RU-Wavenet-A, ru-RU-Wavenet-B, ru-RU-Wavenet-C, ru-RU-Wavenet-D, sk-SK-Wavenet-A, tr-TR-Wavenet-A, tr-TR-Wavenet-B, tr-TR-Wavenet-C, tr-TR-Wavenet-D, tr-TR-Wavenet-E, uk-UA-Wavenet-A, ar-XA-Wavenet-A, ar-XA-Wavenet-B, ar-XA-Wavenet-C, cs-CZ-Wavenet-A, nl-NL-Wavenet-B, nl-NL-Wavenet-C, nl-NL-Wavenet-D, nl-NL-Wavenet-E, en-IN-Wavenet-A, en-IN-Wavenet-B, en-IN-Wavenet-C, fil-PH-Wavenet-A, fi-FI-Wavenet-A, el-GR-Wavenet-A, hi-IN-Wavenet-A, hi-IN-Wavenet-B, hi-IN-Wavenet-C, hu-HU-Wavenet-A, id-ID-Wavenet-A, id-ID-Wavenet-B, id-ID-Wavenet-C, it-IT-Wavenet-B, it-IT-Wavenet-C, it-IT-Wavenet-D, ja-JP-Wavenet-B, ja-JP-Wavenet-C, ja-JP-Wavenet-D, cmn-CN-Wavenet-A, cmn-CN-Wavenet-B, cmn-CN-Wavenet-C, cmn-CN-Wavenet-D, nb-no-Wavenet-E, nb-no-Wavenet-A, nb-no-Wavenet-B, nb-no-Wavenet-C, nb-no-Wavenet-D, vi-VN-Wavenet-A, vi-VN-Wavenet-B, vi-VN-Wavenet-C, vi-VN-Wavenet-D, sr-rs-Standard-A, lv-lv-Standard-A, is-is-Standard-A, bg-bg-Standard-A, af-ZA-Standard-A, Tracy, Danny, Huihui, Yaoyao, Kangkang, HanHan, Zhiwei, Asaf, An, Stefanos, Filip, Ivan, Heidi, Herena, Kalpana, Hemant, Matej, Andika, Rizwan, Lado, Valluvar, Linda, Heather, Sean, Michael, Karsten, Guillaume, Pattara, Jakub, Szabolcs, Hoda, Naayf]
|
|
288
308
|
## WEBS and AsyncWEBS classes
|
|
289
309
|
|
|
290
310
|
The WEBS and AsyncWEBS classes are used to retrieve search results from DuckDuckGo.com and yep.com periodically.
|
|
@@ -305,11 +325,12 @@ import logging
|
|
|
305
325
|
import sys
|
|
306
326
|
from itertools import chain
|
|
307
327
|
from random import shuffle
|
|
308
|
-
|
|
309
328
|
import requests
|
|
310
329
|
from webscout import AsyncWEBS
|
|
311
330
|
|
|
312
|
-
#
|
|
331
|
+
# If you have proxies, define them here
|
|
332
|
+
proxies = None
|
|
333
|
+
|
|
313
334
|
if sys.platform.lower().startswith("win"):
|
|
314
335
|
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
|
|
315
336
|
|
|
@@ -321,24 +342,21 @@ def get_words():
|
|
|
321
342
|
|
|
322
343
|
async def aget_results(word):
|
|
323
344
|
async with AsyncWEBS(proxies=proxies) as WEBS:
|
|
324
|
-
results =
|
|
345
|
+
results = await WEBS.text(word, max_results=None)
|
|
325
346
|
return results
|
|
326
347
|
|
|
327
348
|
async def main():
|
|
328
349
|
words = get_words()
|
|
329
350
|
shuffle(words)
|
|
330
|
-
tasks = []
|
|
331
|
-
for word in words[:10]:
|
|
332
|
-
tasks.append(aget_results(word))
|
|
351
|
+
tasks = [aget_results(word) for word in words[:10]]
|
|
333
352
|
results = await asyncio.gather(*tasks)
|
|
334
353
|
print(f"Done")
|
|
335
354
|
for r in chain.from_iterable(results):
|
|
336
355
|
print(r)
|
|
337
|
-
|
|
338
356
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
357
|
+
logging.basicConfig(level=logging.DEBUG)
|
|
358
|
+
|
|
359
|
+
await main()
|
|
342
360
|
```
|
|
343
361
|
It is important to note that the WEBS and AsyncWEBS classes should always be used as a context manager (with statement).
|
|
344
362
|
This ensures proper resource management and cleanup, as the context manager will automatically handle opening and closing the HTTP client connection.
|
|
@@ -9,7 +9,7 @@ with open("README.md", encoding="utf-8") as f:
|
|
|
9
9
|
|
|
10
10
|
setup(
|
|
11
11
|
name="webscout",
|
|
12
|
-
version="1.
|
|
12
|
+
version="1.3.0",
|
|
13
13
|
description="Search for words, documents, images, videos, news, maps and text translation using the Google, DuckDuckGo.com, yep.com, phind.com, you.com, etc Also containes AI models and now can transcribe yt videos",
|
|
14
14
|
long_description=README,
|
|
15
15
|
long_description_content_type="text/markdown",
|
|
@@ -9,8 +9,8 @@ from .webscout_search import WEBS
|
|
|
9
9
|
from .webscout_search_async import AsyncWEBS
|
|
10
10
|
from .version import __version__
|
|
11
11
|
from .DWEBS import DeepWEBS
|
|
12
|
-
from .AIutel import appdir
|
|
13
12
|
from .transcriber import transcriber
|
|
13
|
+
from .voice import play_audio
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
__all__ = ["WEBS", "AsyncWEBS", "__version__", "cli"]
|