webscout 8.3__py3-none-any.whl → 8.3.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 (120) hide show
  1. webscout/AIauto.py +4 -4
  2. webscout/AIbase.py +61 -1
  3. webscout/AIutel.py +46 -53
  4. webscout/Bing_search.py +418 -0
  5. webscout/Extra/YTToolkit/ytapi/patterns.py +45 -45
  6. webscout/Extra/YTToolkit/ytapi/stream.py +1 -1
  7. webscout/Extra/YTToolkit/ytapi/video.py +10 -10
  8. webscout/Extra/autocoder/autocoder_utiles.py +1 -1
  9. webscout/Extra/gguf.py +706 -177
  10. webscout/Litlogger/formats.py +9 -0
  11. webscout/Litlogger/handlers.py +18 -0
  12. webscout/Litlogger/logger.py +43 -1
  13. webscout/Provider/AISEARCH/genspark_search.py +7 -7
  14. webscout/Provider/AISEARCH/scira_search.py +3 -2
  15. webscout/Provider/GeminiProxy.py +140 -0
  16. webscout/Provider/LambdaChat.py +7 -1
  17. webscout/Provider/MCPCore.py +78 -75
  18. webscout/Provider/OPENAI/BLACKBOXAI.py +1046 -1017
  19. webscout/Provider/OPENAI/GeminiProxy.py +328 -0
  20. webscout/Provider/OPENAI/Qwen3.py +303 -303
  21. webscout/Provider/OPENAI/README.md +5 -0
  22. webscout/Provider/OPENAI/README_AUTOPROXY.md +238 -0
  23. webscout/Provider/OPENAI/TogetherAI.py +355 -0
  24. webscout/Provider/OPENAI/__init__.py +16 -1
  25. webscout/Provider/OPENAI/autoproxy.py +332 -0
  26. webscout/Provider/OPENAI/base.py +101 -14
  27. webscout/Provider/OPENAI/chatgpt.py +15 -2
  28. webscout/Provider/OPENAI/chatgptclone.py +14 -3
  29. webscout/Provider/OPENAI/deepinfra.py +339 -328
  30. webscout/Provider/OPENAI/e2b.py +295 -74
  31. webscout/Provider/OPENAI/mcpcore.py +109 -70
  32. webscout/Provider/OPENAI/opkfc.py +18 -6
  33. webscout/Provider/OPENAI/scirachat.py +59 -50
  34. webscout/Provider/OPENAI/toolbaz.py +2 -10
  35. webscout/Provider/OPENAI/writecream.py +166 -166
  36. webscout/Provider/OPENAI/x0gpt.py +367 -367
  37. webscout/Provider/OPENAI/xenai.py +514 -0
  38. webscout/Provider/OPENAI/yep.py +389 -383
  39. webscout/Provider/STT/__init__.py +3 -0
  40. webscout/Provider/STT/base.py +281 -0
  41. webscout/Provider/STT/elevenlabs.py +265 -0
  42. webscout/Provider/TTI/__init__.py +4 -1
  43. webscout/Provider/TTI/aiarta.py +399 -365
  44. webscout/Provider/TTI/base.py +74 -2
  45. webscout/Provider/TTI/bing.py +231 -0
  46. webscout/Provider/TTI/fastflux.py +63 -30
  47. webscout/Provider/TTI/gpt1image.py +149 -0
  48. webscout/Provider/TTI/imagen.py +196 -0
  49. webscout/Provider/TTI/magicstudio.py +60 -29
  50. webscout/Provider/TTI/piclumen.py +43 -32
  51. webscout/Provider/TTI/pixelmuse.py +232 -225
  52. webscout/Provider/TTI/pollinations.py +43 -32
  53. webscout/Provider/TTI/together.py +287 -0
  54. webscout/Provider/TTI/utils.py +2 -1
  55. webscout/Provider/TTS/README.md +1 -0
  56. webscout/Provider/TTS/__init__.py +2 -1
  57. webscout/Provider/TTS/freetts.py +140 -0
  58. webscout/Provider/TTS/speechma.py +45 -39
  59. webscout/Provider/TogetherAI.py +366 -0
  60. webscout/Provider/UNFINISHED/ChutesAI.py +314 -0
  61. webscout/Provider/UNFINISHED/fetch_together_models.py +95 -0
  62. webscout/Provider/XenAI.py +324 -0
  63. webscout/Provider/__init__.py +8 -0
  64. webscout/Provider/deepseek_assistant.py +378 -0
  65. webscout/Provider/scira_chat.py +3 -2
  66. webscout/Provider/toolbaz.py +0 -1
  67. webscout/auth/__init__.py +44 -0
  68. webscout/auth/api_key_manager.py +189 -0
  69. webscout/auth/auth_system.py +100 -0
  70. webscout/auth/config.py +76 -0
  71. webscout/auth/database.py +400 -0
  72. webscout/auth/exceptions.py +67 -0
  73. webscout/auth/middleware.py +248 -0
  74. webscout/auth/models.py +130 -0
  75. webscout/auth/providers.py +257 -0
  76. webscout/auth/rate_limiter.py +254 -0
  77. webscout/auth/request_models.py +127 -0
  78. webscout/auth/request_processing.py +226 -0
  79. webscout/auth/routes.py +526 -0
  80. webscout/auth/schemas.py +103 -0
  81. webscout/auth/server.py +312 -0
  82. webscout/auth/static/favicon.svg +11 -0
  83. webscout/auth/swagger_ui.py +203 -0
  84. webscout/auth/templates/components/authentication.html +237 -0
  85. webscout/auth/templates/components/base.html +103 -0
  86. webscout/auth/templates/components/endpoints.html +750 -0
  87. webscout/auth/templates/components/examples.html +491 -0
  88. webscout/auth/templates/components/footer.html +75 -0
  89. webscout/auth/templates/components/header.html +27 -0
  90. webscout/auth/templates/components/models.html +286 -0
  91. webscout/auth/templates/components/navigation.html +70 -0
  92. webscout/auth/templates/static/api.js +455 -0
  93. webscout/auth/templates/static/icons.js +168 -0
  94. webscout/auth/templates/static/main.js +784 -0
  95. webscout/auth/templates/static/particles.js +201 -0
  96. webscout/auth/templates/static/styles.css +3353 -0
  97. webscout/auth/templates/static/ui.js +374 -0
  98. webscout/auth/templates/swagger_ui.html +170 -0
  99. webscout/client.py +49 -3
  100. webscout/litagent/Readme.md +12 -3
  101. webscout/litagent/agent.py +99 -62
  102. webscout/scout/core/scout.py +104 -26
  103. webscout/scout/element.py +139 -18
  104. webscout/swiftcli/core/cli.py +14 -3
  105. webscout/swiftcli/decorators/output.py +59 -9
  106. webscout/update_checker.py +31 -49
  107. webscout/version.py +1 -1
  108. webscout/webscout_search.py +4 -12
  109. webscout/webscout_search_async.py +3 -10
  110. webscout/yep_search.py +2 -11
  111. {webscout-8.3.dist-info → webscout-8.3.2.dist-info}/METADATA +41 -11
  112. {webscout-8.3.dist-info → webscout-8.3.2.dist-info}/RECORD +116 -68
  113. {webscout-8.3.dist-info → webscout-8.3.2.dist-info}/entry_points.txt +1 -1
  114. webscout/Provider/HF_space/__init__.py +0 -0
  115. webscout/Provider/HF_space/qwen_qwen2.py +0 -206
  116. webscout/Provider/OPENAI/api.py +0 -1035
  117. webscout/Provider/TTI/artbit.py +0 -0
  118. {webscout-8.3.dist-info → webscout-8.3.2.dist-info}/WHEEL +0 -0
  119. {webscout-8.3.dist-info → webscout-8.3.2.dist-info}/licenses/LICENSE.md +0 -0
  120. {webscout-8.3.dist-info → webscout-8.3.2.dist-info}/top_level.txt +0 -0
@@ -2,60 +2,60 @@ import re
2
2
 
3
3
 
4
4
  class _ChannelPatterns:
5
- name = re.compile('channelMetadataRenderer\":{\"title\":\"(.*?)\"')
6
- id = re.compile('channelId\":\"(.*?)\"')
7
- verified = re.compile('"label":"Verified"')
8
- check_live = re.compile('{"text":"LIVE"}')
9
- live = re.compile("thumbnailOverlays\":\[(.*?)]")
10
- video_id = re.compile('videoId\":\"(.*?)\"')
11
- uploads = re.compile("gridVideoRenderer\":{\"videoId\":\"(.*?)\"")
12
- subscribers = re.compile("\"subscriberCountText\":{\"accessibility\":(.*?),")
13
- views = re.compile("viewCountText\":{\"simpleText\":\"(.*?)\"}")
14
- creation = re.compile("{\"text\":\"Joined \"},{\"text\":\"(.*?)\"}")
15
- country = re.compile("country\":{\"simpleText\":\"(.*?)\"}")
16
- custom_url = re.compile("canonicalChannelUrl\":\"(.*?)\"")
17
- description = re.compile("{\"description\":{\"simpleText\":\"(.*?)\"}")
18
- avatar = re.compile("height\":88},{\"url\":\"(.*?)\"")
19
- banner = re.compile("width\":1280,\"height\":351},{\"url\":\"(.*?)\"")
20
- playlists = re.compile("{\"url\":\"/playlist\\?list=(.*?)\"")
21
- video_count = re.compile("videoCountText\":{\"runs\":\[{\"text\":(.*?)}")
22
- socials = re.compile("q=https%3A%2F%2F(.*?)\"")
23
- upload_ids = re.compile("videoId\":\"(.*?)\"")
24
- stream_ids = re.compile("videoId\":\"(.*?)\"")
25
- upload_chunk = re.compile("gridVideoRenderer\":{(.*?)\"navigationEndpoint")
26
- upload_chunk_fl_1 = re.compile("simpleText\":\"Streamed")
27
- upload_chunk_fl_2 = re.compile("default_live.")
28
- upcoming_check = re.compile("\"title\":\"Upcoming live streams\"")
29
- upcoming = re.compile("gridVideoRenderer\":{\"videoId\":\"(.*?)\"")
5
+ name = re.compile(r'channelMetadataRenderer\":{\"title\":\"(.*?)\"')
6
+ id = re.compile(r'channelId\":\"(.*?)\"')
7
+ verified = re.compile(r'"label":"Verified"')
8
+ check_live = re.compile(r'{"text":"LIVE"}')
9
+ live = re.compile(r"thumbnailOverlays\":\[(.*?)]")
10
+ video_id = re.compile(r'videoId\":\"(.*?)\"')
11
+ uploads = re.compile(r"gridVideoRenderer\":{\"videoId\":\"(.*?)\"")
12
+ subscribers = re.compile(r"\"subscriberCountText\":{\"accessibility\":(.*?),")
13
+ views = re.compile(r"viewCountText\":{\"simpleText\":\"(.*?)\"}")
14
+ creation = re.compile(r"{\"text\":\"Joined \"},{\"text\":\"(.*?)\"}")
15
+ country = re.compile(r"country\":{\"simpleText\":\"(.*?)\"}")
16
+ custom_url = re.compile(r"canonicalChannelUrl\":\"(.*?)\"")
17
+ description = re.compile(r"{\"description\":{\"simpleText\":\"(.*?)\"}")
18
+ avatar = re.compile(r"height\":88},{\"url\":\"(.*?)\"")
19
+ banner = re.compile(r"width\":1280,\"height\":351},{\"url\":\"(.*?)\"")
20
+ playlists = re.compile(r"{\"url\":\"/playlist\?list=(.*?)\"")
21
+ video_count = re.compile(r"videoCountText\":{\"runs\":\[{\"text\":(.*?)}")
22
+ socials = re.compile(r"q=https%3A%2F%2F(.*?)\"")
23
+ upload_ids = re.compile(r"videoId\":\"(.*?)\"")
24
+ stream_ids = re.compile(r"videoId\":\"(.*?)\"")
25
+ upload_chunk = re.compile(r"gridVideoRenderer\":{(.*?)\"navigationEndpoint")
26
+ upload_chunk_fl_1 = re.compile(r"simpleText\":\"Streamed")
27
+ upload_chunk_fl_2 = re.compile(r"default_live.")
28
+ upcoming_check = re.compile(r"\"title\":\"Upcoming live streams\"")
29
+ upcoming = re.compile(r"gridVideoRenderer\":{\"videoId\":\"(.*?)\"")
30
30
 
31
31
 
32
32
  class _VideoPatterns:
33
- video_id = re.compile('videoId\":\"(.*?)\"')
34
- title = re.compile("title\":\"(.*?)\"")
35
- duration = re.compile("approxDurationMs\":\"(.*?)\"")
36
- upload_date = re.compile("uploadDate\":\"(.*?)\"")
37
- author_id = re.compile("channelIds\":\[\"(.*?)\"")
38
- description = re.compile("shortDescription\":\"(.*)\",\"isCrawlable")
39
- tags = re.compile("<meta name=\"keywords\" content=\"(.*?)\">")
40
- is_streamed = re.compile("simpleText\":\"Streamed live")
41
- is_premiered = re.compile("dateText\":{\"simpleText\":\"Premiered")
42
- views = re.compile("videoViewCountRenderer\":{\"viewCount\":{\"simpleText\":\"(.*?)\"")
43
- likes = re.compile("toggledText\":{\"accessibility\":{\"accessibilityData\":{\"label\":\"(.*?) ")
44
- thumbnail = re.compile("playerMicroformatRenderer\":{\"thumbnail\":{\"thumbnails\":\[{\"url\":\"(.*?)\"")
33
+ video_id = re.compile(r'videoId\":\"(.*?)\"')
34
+ title = re.compile(r"title\":\"(.*?)\"")
35
+ duration = re.compile(r"approxDurationMs\":\"(.*?)\"")
36
+ upload_date = re.compile(r"uploadDate\":\"(.*?)\"")
37
+ author_id = re.compile(r"channelIds\":\[\"(.*?)\"")
38
+ description = re.compile(r"shortDescription\":\"(.*)\",\"isCrawlable")
39
+ tags = re.compile(r"<meta name=\"keywords\" content=\"(.*?)\">")
40
+ is_streamed = re.compile(r"simpleText\":\"Streamed live")
41
+ is_premiered = re.compile(r"dateText\":{\"simpleText\":\"Premiered")
42
+ views = re.compile(r"videoViewCountRenderer\":{\"viewCount\":{\"simpleText\":\"(.*?)\"")
43
+ likes = re.compile(r"toggledText\":{\"accessibility\":{\"accessibilityData\":{\"label\":\"(.*?) ")
44
+ thumbnail = re.compile(r"playerMicroformatRenderer\":{\"thumbnail\":{\"thumbnails\":\[{\"url\":\"(.*?)\"")
45
45
 
46
46
 
47
47
  class _PlaylistPatterns:
48
- name = re.compile("{\"title\":\"(.*?)\"")
49
- video_count = re.compile("stats\":\[{\"runs\":\[{\"text\":\"(.*?)\"")
50
- video_id = re.compile("videoId\":\"(.*?)\"")
51
- thumbnail = re.compile("og:image\" content=\"(.*?)\?")
48
+ name = re.compile(r"{\"title\":\"(.*?)\"")
49
+ video_count = re.compile(r"stats\":\[{\"runs\":\[{\"text\":\"(.*?)\"")
50
+ video_id = re.compile(r"videoId\":\"(.*?)\"")
51
+ thumbnail = re.compile(r"og:image\" content=\"(.*?)\?")
52
52
 
53
53
 
54
54
  class _ExtraPatterns:
55
- video_id = re.compile("videoId\":\"(.*?)\"")
55
+ video_id = re.compile(r"videoId\":\"(.*?)\"")
56
56
 
57
57
 
58
58
  class _QueryPatterns:
59
- channel_id = re.compile("channelId\":\"(.*?)\"")
60
- video_id = re.compile("videoId\":\"(.*?)\"")
61
- playlist_id = re.compile("playlistId\":\"(.*?)\"")
59
+ channel_id = re.compile(r"channelId\":\"(.*?)\"")
60
+ video_id = re.compile(r"videoId\":\"(.*?)\"")
61
+ playlist_id = re.compile(r"playlistId\":\"(.*?)\"")
@@ -11,7 +11,7 @@ class Video:
11
11
  _HEAD = 'https://www.youtube.com/watch?v='
12
12
 
13
13
  def __init__(self, video_id: str):
14
- pattern = re.compile('.be/(.*?)$|=(.*?)$|^(\w{11})$') # noqa
14
+ pattern = re.compile(r'.be/(.*?)$|=(.*?)$|^(\w{11})$') # noqa
15
15
  self._matched_id = (
16
16
  pattern.search(video_id).group(1)
17
17
  or pattern.search(video_id).group(2)
@@ -17,7 +17,7 @@ class Video:
17
17
  video_id : str
18
18
  The id or url of the video
19
19
  """
20
- pattern = re.compile('.be/(.*?)$|=(.*?)$|^(\w{11})$') # noqa
20
+ pattern = re.compile(r'.be/(.*?)$|=(.*?)$|^(\w{11})$') # noqa
21
21
  match = pattern.search(video_id)
22
22
 
23
23
  if not match:
@@ -33,7 +33,7 @@ class Video:
33
33
  self._url = self._HEAD + self._matched_id
34
34
  self._video_data = video_data(self._matched_id)
35
35
  # Extract basic info for fallback
36
- title_match = re.search('<title>(.*?) - YouTube</title>', self._video_data)
36
+ title_match = re.search(r'<title>(.*?) - YouTube</title>', self._video_data)
37
37
  self.title = title_match.group(1) if title_match else None
38
38
  self.id = self._matched_id
39
39
  else:
@@ -55,19 +55,19 @@ class Video:
55
55
  """
56
56
  # Multiple patterns to try for video details extraction for robustness
57
57
  details_patterns = [
58
- re.compile('videoDetails\":(.*?)\"isLiveContent\":.*?}'),
59
- re.compile('videoDetails\":(.*?),\"playerConfig'),
60
- re.compile('videoDetails\":(.*?),\"playabilityStatus')
58
+ re.compile(r'videoDetails\":(.*?)\"isLiveContent\":.*?}'),
59
+ re.compile(r'videoDetails\":(.*?),\"playerConfig'),
60
+ re.compile(r'videoDetails\":(.*?),\"playabilityStatus')
61
61
  ]
62
62
 
63
63
  # Other metadata patterns
64
- upload_date_pattern = re.compile("<meta itemprop=\"uploadDate\" content=\"(.*?)\">")
65
- genre_pattern = re.compile("<meta itemprop=\"genre\" content=\"(.*?)\">")
64
+ upload_date_pattern = re.compile(r"<meta itemprop=\"uploadDate\" content=\"(.*?)\">")
65
+ genre_pattern = re.compile(r"<meta itemprop=\"genre\" content=\"(.*?)\">")
66
66
  like_count_patterns = [
67
- re.compile("iconType\":\"LIKE\"},\"defaultText\":(.*?)}"),
68
- re.compile('\"likeCount\":\"(\\d+)\"')
67
+ re.compile(r"iconType\":\"LIKE\"},\"defaultText\":(.*?)}"),
68
+ re.compile(r'\"likeCount\":\"(\d+)\"')
69
69
  ]
70
- channel_name_pattern = re.compile('"ownerChannelName":"(.*?)"')
70
+ channel_name_pattern = re.compile(r'"ownerChannelName":"(.*?)"')
71
71
 
72
72
  # Try each pattern for video details
73
73
  raw_details_match = None
@@ -131,7 +131,7 @@ def get_intro_prompt(name: str = "Vortex") -> str:
131
131
  - Actively clean up any temporary processes or files you use.
132
132
  - When looking through files, use git as available to skip files, and skip hidden files (.env, .git, etc) by default.
133
133
  - You can plot anything with matplotlib using Python code.
134
- - **IMPORTANT**: ALWAYS Return your SCRIPT inside of a single pair of \`\`\` delimiters. This SCRIPT can be a mix of Python code and `!`-prefixed shell commands. Only the console output from this SCRIPT (Python prints or `!` command stdout/stderr) is visible to the user, so ensure it's complete.
134
+ - **IMPORTANT**: ALWAYS Return your SCRIPT inside of a single pair of ``` delimiters. This SCRIPT can be a mix of Python code and `!`-prefixed shell commands. Only the console output from this SCRIPT (Python prints or `!` command stdout/stderr) is visible to the user, so ensure it's complete.
135
135
  </conventions>
136
136
 
137
137
  <examples>