webscout 7.2__py3-none-any.whl → 7.3__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.

webscout/yep_search.py ADDED
@@ -0,0 +1,297 @@
1
+ import cloudscraper
2
+ from urllib.parse import urlencode
3
+ from webscout.litagent import LitAgent
4
+ from typing import List, Dict, Optional, Tuple
5
+ from concurrent.futures import ThreadPoolExecutor
6
+ import json
7
+ class YepSearch:
8
+ """Yep.com search class to get search results."""
9
+
10
+ _executor: ThreadPoolExecutor = ThreadPoolExecutor()
11
+
12
+ def __init__(
13
+ self,
14
+ timeout: int = 20,
15
+ proxies: Dict[str, str] | None = None,
16
+ verify: bool = True,
17
+ ):
18
+ """Initialize YepSearch.
19
+
20
+ Args:
21
+ timeout: Timeout value for the HTTP client. Defaults to 20.
22
+ proxies: Proxy configuration for requests. Defaults to None.
23
+ verify: Verify SSL certificates. Defaults to True.
24
+ """
25
+ self.base_url = "https://api.yep.com/fs/2/search"
26
+ self.timeout = timeout
27
+ self.session = cloudscraper.create_scraper()
28
+ self.session.headers.update({
29
+ "Accept": "*/*",
30
+ "Accept-Language": "en-US,en;q=0.9,en-IN;q=0.8",
31
+ "DNT": "1",
32
+ "Origin": "https://yep.com",
33
+ "Referer": "https://yep.com/",
34
+ "Sec-Ch-Ua": '"Not(A:Brand";v="99", "Microsoft Edge";v="133", "Chromium";v="133"',
35
+ "Sec-Ch-Ua-Mobile": "?0",
36
+ "Sec-Ch-Ua-Platform": '"Windows"',
37
+ "Sec-Fetch-Dest": "empty",
38
+ "Sec-Fetch-Mode": "cors",
39
+ "Sec-Fetch-Site": "same-site",
40
+ "User-Agent": LitAgent().random()
41
+ })
42
+ if proxies:
43
+ self.session.proxies.update(proxies)
44
+ self.session.verify = verify
45
+
46
+ def _remove_html_tags(self, text: str) -> str:
47
+ """Remove HTML tags from text using simple string manipulation.
48
+
49
+ Args:
50
+ text: String containing HTML tags
51
+
52
+ Returns:
53
+ Clean text without HTML tags
54
+ """
55
+ result = ""
56
+ in_tag = False
57
+
58
+ for char in text:
59
+ if char == '<':
60
+ in_tag = True
61
+ elif char == '>':
62
+ in_tag = False
63
+ elif not in_tag:
64
+ result += char
65
+
66
+ # Replace common HTML entities
67
+ replacements = {
68
+ '&nbsp;': ' ',
69
+ '&amp;': '&',
70
+ '&lt;': '<',
71
+ '&gt;': '>',
72
+ '&quot;': '"',
73
+ '&apos;': "'",
74
+ }
75
+
76
+ for entity, replacement in replacements.items():
77
+ result = result.replace(entity, replacement)
78
+
79
+ return result.strip()
80
+
81
+ def format_results(self, raw_results: dict) -> List[Dict]:
82
+ """Format raw API results into a consistent structure."""
83
+ formatted_results = []
84
+
85
+ if not raw_results or len(raw_results) < 2:
86
+ return formatted_results
87
+
88
+ results = raw_results[1].get('results', [])
89
+
90
+ for result in results:
91
+ formatted_result = {
92
+ "title": self._remove_html_tags(result.get("title", "")),
93
+ "href": result.get("url", ""),
94
+ "body": self._remove_html_tags(result.get("snippet", "")),
95
+ "source": result.get("visual_url", ""),
96
+ "position": len(formatted_results) + 1,
97
+ "type": result.get("type", "organic"),
98
+ "first_seen": result.get("first_seen", None)
99
+ }
100
+
101
+ # Add sitelinks if they exist
102
+ if "sitelinks" in result:
103
+ sitelinks = []
104
+ if "full" in result["sitelinks"]:
105
+ sitelinks.extend(result["sitelinks"]["full"])
106
+ if "short" in result["sitelinks"]:
107
+ sitelinks.extend(result["sitelinks"]["short"])
108
+
109
+ if sitelinks:
110
+ formatted_result["sitelinks"] = [
111
+ {
112
+ "title": self._remove_html_tags(link.get("title", "")),
113
+ "href": link.get("url", "")
114
+ }
115
+ for link in sitelinks
116
+ ]
117
+
118
+ formatted_results.append(formatted_result)
119
+
120
+ return formatted_results
121
+
122
+ def text(
123
+ self,
124
+ keywords: str,
125
+ region: str = "all",
126
+ safesearch: str = "moderate",
127
+ max_results: Optional[int] = None,
128
+ ) -> List[Dict[str, str]]:
129
+ """Yep.com text search.
130
+
131
+ Args:
132
+ keywords: Search query string.
133
+ region: Region for search results. Defaults to "all".
134
+ safesearch: SafeSearch setting ("on", "moderate", "off"). Defaults to "moderate".
135
+ max_results: Maximum number of results to return. Defaults to None.
136
+
137
+ Returns:
138
+ List of dictionaries containing search results.
139
+ """
140
+ # Convert safesearch parameter
141
+ safe_search_map = {
142
+ "on": "on",
143
+ "moderate": "moderate",
144
+ "off": "off"
145
+ }
146
+ safe_setting = safe_search_map.get(safesearch.lower(), "moderate")
147
+
148
+ params = {
149
+ "client": "web",
150
+ "gl": region,
151
+ "limit": str(max_results) if max_results else "10",
152
+ "no_correct": "false",
153
+ "q": keywords,
154
+ "safeSearch": safe_setting,
155
+ "type": "web"
156
+ }
157
+
158
+ url = f"{self.base_url}?{urlencode(params)}"
159
+ try:
160
+ response = self.session.get(url, timeout=self.timeout)
161
+ response.raise_for_status()
162
+ raw_results = response.json()
163
+
164
+ formatted_results = self.format_results(raw_results)
165
+
166
+ if max_results:
167
+ return formatted_results[:max_results]
168
+ return formatted_results
169
+ except Exception as e:
170
+ raise Exception(f"Yep search failed: {str(e)}")
171
+
172
+ def images(
173
+ self,
174
+ keywords: str,
175
+ region: str = "all",
176
+ safesearch: str = "moderate",
177
+ max_results: Optional[int] = None,
178
+ ) -> List[Dict[str, str]]:
179
+ """Yep.com image search.
180
+
181
+ Args:
182
+ keywords: Search query string.
183
+ region: Region for search results. Defaults to "all".
184
+ safesearch: SafeSearch setting ("on", "moderate", "off"). Defaults to "moderate".
185
+ max_results: Maximum number of results to return. Defaults to None.
186
+
187
+ Returns:
188
+ List of dictionaries containing image search results with keys:
189
+ - title: Image title
190
+ - image: Full resolution image URL
191
+ - thumbnail: Thumbnail image URL
192
+ - url: Source page URL
193
+ - height: Image height
194
+ - width: Image width
195
+ - source: Source website domain
196
+ """
197
+ safe_search_map = {
198
+ "on": "on",
199
+ "moderate": "moderate",
200
+ "off": "off"
201
+ }
202
+ safe_setting = safe_search_map.get(safesearch.lower(), "moderate")
203
+
204
+ params = {
205
+ "client": "web",
206
+ "gl": region,
207
+ "limit": str(max_results) if max_results else "10",
208
+ "no_correct": "false",
209
+ "q": keywords,
210
+ "safeSearch": safe_setting,
211
+ "type": "images"
212
+ }
213
+
214
+ url = f"{self.base_url}?{urlencode(params)}"
215
+ try:
216
+ response = self.session.get(url, timeout=self.timeout)
217
+ response.raise_for_status()
218
+ raw_results = response.json()
219
+
220
+ if not raw_results or len(raw_results) < 2:
221
+ return []
222
+
223
+ formatted_results = []
224
+ results = raw_results[1].get('results', [])
225
+
226
+ for result in results:
227
+ if result.get("type") != "Image":
228
+ continue
229
+
230
+ formatted_result = {
231
+ "title": self._remove_html_tags(result.get("title", "")),
232
+ "image": result.get("image_id", ""),
233
+ "thumbnail": result.get("src", ""),
234
+ "url": result.get("host_page", ""),
235
+ "height": result.get("height", 0),
236
+ "width": result.get("width", 0),
237
+ "source": result.get("visual_url", "")
238
+ }
239
+
240
+ # Add high-res thumbnail if available
241
+ if "srcset" in result:
242
+ formatted_result["thumbnail_hd"] = result["srcset"].split(",")[1].strip().split(" ")[0]
243
+
244
+ formatted_results.append(formatted_result)
245
+
246
+ if max_results:
247
+ return formatted_results[:max_results]
248
+ return formatted_results
249
+
250
+ except Exception as e:
251
+ raise Exception(f"Yep image search failed: {str(e)}")
252
+
253
+ def suggestions(
254
+ self,
255
+ query: str,
256
+ region: str = "all",
257
+ ) -> List[str]:
258
+ """Get search suggestions from Yep.com autocomplete API.
259
+
260
+ Args:
261
+ query: Search query string to get suggestions for.
262
+ region: Region for suggestions. Defaults to "all".
263
+
264
+ Returns:
265
+ List of suggestion strings.
266
+
267
+ Example:
268
+ >>> yep = YepSearch()
269
+ >>> suggestions = yep.suggestions("ca")
270
+ >>> print(suggestions)
271
+ ['capital one', 'car wash', 'carmax', 'cafe', ...]
272
+ """
273
+ params = {
274
+ "query": query,
275
+ "type": "web",
276
+ "gl": region
277
+ }
278
+
279
+ url = f"https://api.yep.com/ac/?{urlencode(params)}"
280
+
281
+ try:
282
+ response = self.session.get(url, timeout=self.timeout)
283
+ response.raise_for_status()
284
+ data = response.json()
285
+ # Return suggestions list if response format is valid
286
+ if isinstance(data, list) and len(data) > 1 and isinstance(data[1], list):
287
+ return data[1]
288
+ return []
289
+
290
+ except Exception as e:
291
+ raise Exception(f"Yep suggestions failed: {str(e)}")
292
+
293
+
294
+ if __name__ == "__main__":
295
+ yep = YepSearch()
296
+ r = yep.suggestions("hi", region="all")
297
+ print(r)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.1
2
2
  Name: webscout
3
- Version: 7.2
3
+ Version: 7.3
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: OEvortex
6
6
  Author-email: helpingai5@gmail.com
@@ -29,7 +29,7 @@ Requires-Dist: wheel
29
29
  Requires-Dist: pip
30
30
  Requires-Dist: mistune
31
31
  Requires-Dist: tenacity
32
- Requires-Dist: curl_cffi
32
+ Requires-Dist: curl-cffi
33
33
  Requires-Dist: nest-asyncio
34
34
  Requires-Dist: rich
35
35
  Requires-Dist: markdownify
@@ -39,7 +39,7 @@ Requires-Dist: lxml>=5.2.2
39
39
  Requires-Dist: termcolor
40
40
  Requires-Dist: orjson
41
41
  Requires-Dist: PyYAML
42
- Requires-Dist: tls_client
42
+ Requires-Dist: tls-client
43
43
  Requires-Dist: clipman
44
44
  Requires-Dist: playsound==1.2.2
45
45
  Requires-Dist: ollama
@@ -52,8 +52,8 @@ Requires-Dist: emoji
52
52
  Requires-Dist: openai
53
53
  Requires-Dist: prompt-toolkit
54
54
  Requires-Dist: primp
55
- Requires-Dist: pyreqwest_impersonate
56
- Requires-Dist: gradio_client
55
+ Requires-Dist: pyreqwest-impersonate
56
+ Requires-Dist: gradio-client
57
57
  Requires-Dist: psutil
58
58
  Requires-Dist: pygetwindow
59
59
  Requires-Dist: aiohttp
@@ -64,19 +64,8 @@ Provides-Extra: local
64
64
  Requires-Dist: llama-cpp-python; extra == "local"
65
65
  Requires-Dist: colorama; extra == "local"
66
66
  Requires-Dist: numpy; extra == "local"
67
- Requires-Dist: huggingface_hub[cli]; extra == "local"
67
+ Requires-Dist: huggingface-hub[cli]; extra == "local"
68
68
  Requires-Dist: unicorn; extra == "local"
69
- Dynamic: author
70
- Dynamic: author-email
71
- Dynamic: classifier
72
- Dynamic: description
73
- Dynamic: description-content-type
74
- Dynamic: license
75
- Dynamic: project-url
76
- Dynamic: provides-extra
77
- Dynamic: requires-dist
78
- Dynamic: requires-python
79
- Dynamic: summary
80
69
 
81
70
 
82
71
  [![Telegram](https://img.shields.io/badge/Telegram-2CA5E0?style=for-the-badge&logo=telegram&logoColor=white)](https://t.me/official_helpingai)
@@ -96,7 +85,7 @@ Dynamic: summary
96
85
  <p align="center">
97
86
  <strong>Webscout</strong> is the all-in-one search and AI toolkit you need.
98
87
  <br>
99
- Discover insights with Google, DuckDuckGo, and Phind; access cutting-edge AI models; transcribe YouTube videos; generate temporary emails and phone numbers; perform text-to-speech conversions; run offline language models; and much more!
88
+ Discover insights with Yep.com, DuckDuckGo, and Phind; access cutting-edge AI models; transcribe YouTube videos; generate temporary emails and phone numbers; perform text-to-speech conversions; run offline language models; and much more!
100
89
  </p>
101
90
 
102
91
  <div align="center">
@@ -285,7 +274,43 @@ if __name__ == "__main__":
285
274
  asyncio.run(main())
286
275
  ```
287
276
 
277
+ ...
288
278
 
279
+ ### 🔍 `YepSearch` - Search using Yep.com
280
+
281
+ ```python
282
+ from webscout import YepSearch
283
+
284
+ # Initialize YepSearch
285
+ yep = YepSearch(
286
+ timeout=20, # Optional: Set custom timeout
287
+ proxies=None, # Optional: Use proxies
288
+ verify=True # Optional: SSL verification
289
+ )
290
+
291
+ # Text Search
292
+ text_results = yep.text(
293
+ keywords="artificial intelligence",
294
+ region="all", # Optional: Region for results
295
+ safesearch="moderate", # Optional: "on", "moderate", "off"
296
+ max_results=10 # Optional: Limit number of results
297
+ )
298
+ print(text_results)
299
+
300
+ # Image Search
301
+ image_results = yep.images(
302
+ keywords="nature photography",
303
+ region="all",
304
+ safesearch="moderate",
305
+ max_results=10
306
+ )
307
+ print(image_results)
308
+
309
+
310
+ # Suggestions
311
+ suggestions = yep.suggestions("hist")
312
+ print(suggestions)
313
+ ```
289
314
 
290
315
  ## 🔍 GoogleS (formerly DWEBS)
291
316
 
@@ -517,8 +542,21 @@ with WEBS() as WEBS:
517
542
  print(r)
518
543
  ```
519
544
 
545
+ ### 9. `weather()` - Weather Information by DuckDuckGo.com
520
546
 
521
- ## 🎭 ALL Acts
547
+ ```python
548
+ from webscout import WEBS
549
+
550
+ # Get weather information for a location using DuckDuckGo.com
551
+ with WEBS() as webs:
552
+ weather_data = webs.weather("New York")
553
+ print(weather_data)
554
+
555
+ ```
556
+
557
+
558
+
559
+ ## ALL Acts
522
560
 
523
561
  <details>
524
562
  <summary>Expand</summary>
@@ -1332,3 +1370,4 @@ Contributions are welcome! If you'd like to contribute to Webscout, please follo
1332
1370
 
1333
1371
  * All the amazing developers who have contributed to the project!
1334
1372
  * The open-source community for their support and inspiration.
1373
+
@@ -1,10 +1,10 @@
1
1
  webscout/AIauto.py,sha256=h8bz7FeYMbSXlNvIynn4e2aqydVcFjrONPckaJ3j_b4,7185
2
2
  webscout/AIbase.py,sha256=gksLU3cxp_GnbUqD4mX58tlr4-e6_rqdwVhTUXmJncM,3762
3
3
  webscout/AIutel.py,sha256=0AP3yGTVc04QqqfZSm50jgL87_ot9i44XCe9j9DaHLY,12460
4
- webscout/Bard.py,sha256=kPfn36bC_0y9AAhv_kXEfAA6bNiD4BfDY9c-CV8_9e8,21144
4
+ webscout/Bard.py,sha256=uQHFd9ryRTXTyT_1OrVmW4jDMxEmHGIwJflLwjcSFPI,21132
5
5
  webscout/DWEBS.py,sha256=AG3_nATzHRDjYZclYuk0jdUNHlOwNkH9jMqEiWaxR3s,19674
6
6
  webscout/LLM.py,sha256=p8Zq5P8lCcg98R1b6YQeUIzmf0b6pJDX_QDjwOXl870,16788
7
- webscout/__init__.py,sha256=ABIIQ5KBftowGxWHkHoPK1VOQlExJcDypTwbyiUsifM,840
7
+ webscout/__init__.py,sha256=XQR6yIGHMTyoBtvRRYXfzngzVCNFYl9DCF6cp__7_Xk,867
8
8
  webscout/__main__.py,sha256=qtkMZK5jzQ79ZkFAuZBxMgayuhmw3aRDj1F8Pt06NW4,108
9
9
  webscout/cli.py,sha256=VBGdH1ns8WjLDwppZ9b6I2rGtaIWG6oORW-4K-syEWI,12313
10
10
  webscout/conversation.py,sha256=hj-T6ja2EtaB69KTXyCB5srmA9ym6ejeyI5qntvfR6I,8946
@@ -14,9 +14,10 @@ webscout/prompt_manager.py,sha256=Jc0demWN6M6QcwRp14aHZR05r_PVPOaG8PnQkO7pDZ4,98
14
14
  webscout/tempid.py,sha256=hxzPVBjxAa5GLBQ9fE6ob5ixJpQeU-mgdfTzh33EHvE,4926
15
15
  webscout/update_checker.py,sha256=DuibA_i2if47V40luhPBY0AeVEo8RjkDFzPElRISQn4,4867
16
16
  webscout/utils.py,sha256=LVW7U0XcGYqigqxV6D5YXeGMrc_mt7PnNG_YnKf9bBM,3059
17
- webscout/version.py,sha256=6iGNblRylnkOtzxoMKyv4zjcI8c0UyTbv1sF3-lL0ps,44
18
- webscout/webscout_search.py,sha256=tVj64sFzSG-b984TWOkU_csyZr5tWMxeWy4d4nH8fVY,46028
19
- webscout/webscout_search_async.py,sha256=DvfFPs6BETDmCc6w99930XMdXE6WqbmVOwZr7HXeuGg,25301
17
+ webscout/version.py,sha256=kKKm_FMq1BEUlhgB9Hiu2knTjWKWohNgyXQpzMzIeAA,44
18
+ webscout/webscout_search.py,sha256=Kl2gDj03xZeg4g-szln7R_f8oAbZ4_tjKtrXVgBfG1U,49854
19
+ webscout/webscout_search_async.py,sha256=wlLv4vn8UP54R76vsTwvnUgpP0a6nPAPDdX2Cz8F_Dg,27310
20
+ webscout/yep_search.py,sha256=IuuhtTN6_H__EwtMpXs_o_0SEeujV68hfAS2teAgoZc,10132
20
21
  webscout/Extra/__init__.py,sha256=FbDnwI3zZdoQFosA5Q2bIYpJlHUKFWiFmFKvnk9xWKY,153
21
22
  webscout/Extra/autollama.py,sha256=Y8ruE8KI6gr49PLU30yvDcmgfYBBJSN5yOjJLts_UwM,7795
22
23
  webscout/Extra/gguf.py,sha256=YmqDA8ljxM6VIRDi6YX7Gea26RXXv7vdiry6lVz6eps,15512
@@ -42,15 +43,15 @@ webscout/Extra/autocoder/autocoder_utiles.py,sha256=I7pugVx5BjLjbNj59-0m880Er0TL
42
43
  webscout/Extra/autocoder/rawdog.py,sha256=VA5DpdiLd5Eqc_7Is_QoPpfLh_658rV4D1tKDmysTaw,25617
43
44
  webscout/Litlogger/__init__.py,sha256=0lHzxdl5CpGBAABvW4YqVb1-FOibEvTe4SOx8ORHmzs,1568
44
45
  webscout/Litlogger/core/__init__.py,sha256=zgZvP-lBrspukBu8LhQb7SUkSIh9HdsVbzpoZyaq110,130
45
- webscout/Litlogger/core/level.py,sha256=MkW_4L6u9DzWqtR9bAV2dBLtjv5Q9itjE4y41vw17IA,505
46
- webscout/Litlogger/core/logger.py,sha256=hEFIFQ9mCUGVEseeUjS8aqVmAVAqksLnLABLaQCLcFA,4222
46
+ webscout/Litlogger/core/level.py,sha256=fe0Lz5G-gMpsKAzoLgTUJ53IaFaa5ruXiw4q1ritGI4,584
47
+ webscout/Litlogger/core/logger.py,sha256=WwN3ot9_bnhPRKhC8EKwCjL8r8Tyq6ii-H7CTDmLC3s,6196
47
48
  webscout/Litlogger/handlers/__init__.py,sha256=a6ZQUE6IZud9gUNnubPwUPJGOGcL648Tl_w3FT85wTQ,294
48
- webscout/Litlogger/handlers/console.py,sha256=sj1NM_GyrbV3I44JZflOIGyppsYsv1ITiCi1naTPsyQ,1699
49
+ webscout/Litlogger/handlers/console.py,sha256=iM1O8j6h2Z78volyOdFzOnysoYfePnYeyEeYU299qnE,1287
49
50
  webscout/Litlogger/handlers/file.py,sha256=FTHyxOOSFNl7Oamq1ASenJSEq1yDB5k1eokCMxfnjXE,5077
50
- webscout/Litlogger/handlers/network.py,sha256=TGwAAHhK-8-jMVDRGWzrIvJFuxcM5EI33J54YeiG7JM,6117
51
+ webscout/Litlogger/handlers/network.py,sha256=27jJvM5hzhk994jcUO_o7r409Tukr5CwEgRy32-9Aa0,6235
51
52
  webscout/Litlogger/styles/__init__.py,sha256=Cla8fPBziCs0JcJgMVAd9CJl5eMEUDUT6JQ6R_u_T_w,188
52
- webscout/Litlogger/styles/colors.py,sha256=IS2LpiIxIUZW6Mi_jADsqaIHNEGF_qygwofzZKNtSko,8665
53
- webscout/Litlogger/styles/formats.py,sha256=uzfbHyOEHAcGS8LDu2V9t6VmqFnQIEj7Mbea2EUUaKA,10103
53
+ webscout/Litlogger/styles/colors.py,sha256=PtcJXfvAZUx4vt2nneHDEaehUOrO4citSr65DZUdm3E,9321
54
+ webscout/Litlogger/styles/formats.py,sha256=IV8ahZRE8yDmhvCT4voe-ZI-5dTS4YI7_h1Hw69i4H8,13272
54
55
  webscout/Litlogger/styles/text.py,sha256=JLz1oUve9cHCxiHA8mj1cnvFKvQkvvPZgawHBYPWaiU,3135
55
56
  webscout/Litlogger/utils/__init__.py,sha256=G9WTxWGbDMt07Sh6OyLf4rrjjFKiaWTfZBKM8QZGtuI,206
56
57
  webscout/Litlogger/utils/detectors.py,sha256=nOogjO2eu22PpIAq20qyoBQFNXdiJc2lI7l-XqVDltY,4785
@@ -75,7 +76,7 @@ webscout/Provider/Cloudflare.py,sha256=DgIYvYMZpuolh6JTFWiJEKL-WRWF6fBdmpMg0LmkY
75
76
  webscout/Provider/Cohere.py,sha256=oL9kAv--RSkEQxwkPTq1Wi57Wkgg0WNvL82CpTj22YY,8264
76
77
  webscout/Provider/DARKAI.py,sha256=kVElPYVh_VchfGylR4YzC3orrPJPyPoOpSolc62b5eY,8944
77
78
  webscout/Provider/DeepSeek.py,sha256=xa_ct5ux6K7GGoaruKWUdykNpMQQvnkMWAl5BhWvj1A,8435
78
- webscout/Provider/Deepinfra.py,sha256=3EhVFJF7CDjEtOgosIDK4arRqxjch81jQL1Xaaa2vbM,8220
79
+ webscout/Provider/Deepinfra.py,sha256=EjnRLeQCogC6DUVFSaYRVHAOeOvgQkOloScheRbSo7Q,8871
79
80
  webscout/Provider/DiscordRocks.py,sha256=fRkVBCyDMZf0SoaNPK7KXAsh8mQj0JWDb7ifYpL9PQQ,11372
80
81
  webscout/Provider/EDITEE.py,sha256=9rq7c84XoIoRBqd0qgW-Ebu3lyffhicSOtUvMtAjO0s,7742
81
82
  webscout/Provider/Free2GPT.py,sha256=3c1tLsYhYCBdjBStLfQvUII3Vojw9-DZpgjyK_T13a4,9197
@@ -97,10 +98,10 @@ webscout/Provider/PizzaGPT.py,sha256=sYijGNHFKry1Uai4CPcsaBl2UQ_rB3lksIdAvpqW6FA
97
98
  webscout/Provider/QwenLM.py,sha256=_iV84_jCIhnoqFwjLtSFBCRL_JNZeEKCNCgkO-LE5eY,13056
98
99
  webscout/Provider/Reka.py,sha256=dWw4vX91nJhAn-X1SXK72gttRaTqWNGUBFaeRJobTJg,8519
99
100
  webscout/Provider/TeachAnything.py,sha256=6scp1tzcc5z_TKUALArQ4APCNElHJ7SzsJoiB71o0V0,7169
100
- webscout/Provider/TextPollinationsAI.py,sha256=4msd-aJOB4Ke90T0TZlU_W3kQbJsN52MtvSfsC1KiG0,8750
101
+ webscout/Provider/TextPollinationsAI.py,sha256=xsq4ZMyfN3zaiDfZO9_dey5U9QM0Dxzb5K3HB6w-NFE,9774
101
102
  webscout/Provider/WiseCat.py,sha256=lZeOCd_eyhzXlEYIkLc3vqSO0SuCdCqhXd2rJ5iCaj8,6598
102
103
  webscout/Provider/Youchat.py,sha256=LmPskUWaOJlJSYsGeHsu5riD1X6Rp6pFmdApZh_t98I,10205
103
- webscout/Provider/__init__.py,sha256=btcvXQN-Kcs6tee7WkZv6dvOdj_VEr8sgvLzxLlIna0,3064
104
+ webscout/Provider/__init__.py,sha256=X1aL5SbXjfKArLKTll79_N74paSgINYiM0WDhwFLB0c,3119
104
105
  webscout/Provider/ai4chat.py,sha256=av96iS4QPt9IzhcswowmDY2F8IUSLl1YVHZ4bAbfO-s,8140
105
106
  webscout/Provider/aimathgpt.py,sha256=BdXNxEHQP11p6m0wl2Q-uben46A6lMKOg89utV1S7aI,7320
106
107
  webscout/Provider/askmyai.py,sha256=MX3883xxpMe5GUahyQOwR4ZR_Oa_zAg4N7ksZ4zhB9s,5904
@@ -110,6 +111,7 @@ webscout/Provider/chatglm.py,sha256=Ls-HFp7tcWYJwwniyu6yw75DarqD97DMTA9ND5skCts,
110
111
  webscout/Provider/cleeai.py,sha256=ZIPm2dT8H8BxGSLHsgp6aDWn3DVOxAOcFfkMNH1UK0I,7979
111
112
  webscout/Provider/dgaf.py,sha256=KMzeAnKR12cGWcqQGZi56VoN6JChIrryCBOYSB0aQOE,8881
112
113
  webscout/Provider/elmo.py,sha256=I7qq2YvKht28Z2KFTxj3wNyekJM6gAJCExilB-_UkzQ,9308
114
+ webscout/Provider/freeaichat.py,sha256=tMkJne0aOIrdgqwvHRPtrzNMRoFuQ0jzrpBbyMhhgZY,8266
113
115
  webscout/Provider/gaurish.py,sha256=-eZapN28Fsp9SPwF2KpakaB8mPChQDsEWHYMKwPovEc,10079
114
116
  webscout/Provider/geminiapi.py,sha256=-_QbDBF_IiYyOJ0_uAIcE-gfzIs8H86nA5VWX52SRoY,8505
115
117
  webscout/Provider/geminiprorealtime.py,sha256=DQdChZRryg9bvXiKpos7wFlu0Q6QNq9lYkbb-FJubWk,5766
@@ -130,16 +132,20 @@ webscout/Provider/turboseek.py,sha256=uEoL5eJFvnpDCymTufrC8O9Ni3i8acb0GBy4JweFeI
130
132
  webscout/Provider/tutorai.py,sha256=hgjYrI1zqNRhHEoi8t1OU8m9i80EQCay5UtmKqbNS9w,11205
131
133
  webscout/Provider/typegpt.py,sha256=UYczMtQD3iJa4681O3aIt_oZ-8tjws69CFx_65mMC0E,13630
132
134
  webscout/Provider/x0gpt.py,sha256=eKDEbUIkY1Cc8mCad-CFA4ZgBXOmR7T7rKf89lh16-8,9383
133
- webscout/Provider/yep.py,sha256=Z0JayKFhXOLhI-QgajIQq7k1GvTqQvcPVzY0boEWm_c,9899
135
+ webscout/Provider/yep.py,sha256=DdI6SmXOo07eBRIB_0hMVZbbm_pEO6GP9iT2G81yibg,9929
134
136
  webscout/Provider/AISEARCH/DeepFind.py,sha256=u7jendlE27jY3H_PRB5I5ne_z2oZCeEVBTbXkQ7Msn0,10293
135
- webscout/Provider/AISEARCH/__init__.py,sha256=oSGWYCOsLGXxBLUN6R_x_ohElenwWlvKGK5BFsja1PM,61
137
+ webscout/Provider/AISEARCH/ISou.py,sha256=Gpud30sMwoLGngkIvi6YH0rXcWiAAFTemZnIW4Zdtbc,10720
138
+ webscout/Provider/AISEARCH/__init__.py,sha256=Tsq-ahinnpRfn9IeVzij5Akk4NC_MJh8ldnyfNrqPtc,85
136
139
  webscout/Provider/AISEARCH/felo_search.py,sha256=uR89JwDXH5HB_EHdVwHC6CMpPeLvHFYmi6PO-YQmAyw,8879
137
140
  webscout/Provider/HF_space/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
141
  webscout/Provider/HF_space/qwen_qwen2.py,sha256=KP7KiPa_OavNh_dF4B2qAv6sX5O6LgD6FeEep5wRNM4,7627
139
- webscout/Provider/TTI/__init__.py,sha256=9Hu_y-z6Ev2SQL5-IF_B4UDetoOl7hVclka1RatQ6_M,225
142
+ webscout/Provider/TTI/__init__.py,sha256=M66QrPySUL8kCeu7eA6LWkUN5xLT68VYDum6ottlvak,260
140
143
  webscout/Provider/TTI/AiForce/__init__.py,sha256=R8r6XYBUoGB_26jSyjGwHpw8GtZ0wbnkBoHxu26T_QU,685
141
144
  webscout/Provider/TTI/AiForce/async_aiforce.py,sha256=Soq-h0BK20nVU1IcRrg4Sb8a4XAJ7_DDQMdFYP5_4Tg,9847
142
145
  webscout/Provider/TTI/AiForce/sync_aiforce.py,sha256=eGAveKtkp-h5kSZ-bQo4b2LlNSGpFyGklPm80ECwsto,8859
146
+ webscout/Provider/TTI/FreeAIPlayground/__init__.py,sha256=MmjKj2U1glmn0HDfMkCE64WKA4fsMbqphK5v-E3Sphs,277
147
+ webscout/Provider/TTI/FreeAIPlayground/async_freeaiplayground.py,sha256=1j_0SRBnvqK78rS9QQeQDj6bejWa2-7h4P8ctYooOjk,7808
148
+ webscout/Provider/TTI/FreeAIPlayground/sync_freeaiplayground.py,sha256=7iQX8QxMHRV5_IfRIdtMiqWb_SsxKvRc6SrK0ChbINk,6706
143
149
  webscout/Provider/TTI/Nexra/__init__.py,sha256=0mO8r6eLnilf3tZchmdyN13OaNoUt-fg5rCNXgWdt5Q,663
144
150
  webscout/Provider/TTI/Nexra/async_nexra.py,sha256=fDY-5rRyzauTXE78yglTnE2yWfBfYGUQhBxr-xmK5Sk,11240
145
151
  webscout/Provider/TTI/Nexra/sync_nexra.py,sha256=VjzetIdyl8Tmcoyii1fvNJNvfEAQQBrycm6IBmlUjfI,9570
@@ -209,9 +215,9 @@ webstoken/sentiment.py,sha256=yHtaHXJNS_sH1UTHZsOIgyhdijr8oi1pMlg_QE2wtxw,8202
209
215
  webstoken/stemmer.py,sha256=VXWkBpPaH328WEQxw9e9ff-p2e27xDdbpVSy0nTnXYE,2624
210
216
  webstoken/tagger.py,sha256=p4ScFnxn5sShYDVRoHK5pn_mzaDTsEtx3EHRvuvOlfE,2306
211
217
  webstoken/tokenizer.py,sha256=XJ-d1MFRp0Trw6gtOtZ8_wAcaSQidnSCHLNpV1-OFJc,6016
212
- webscout-7.2.dist-info/LICENSE.md,sha256=5mkWS6cgjGxJClmN7n--h0beF3uFAOV_Ngr1YTK33Tk,9203
213
- webscout-7.2.dist-info/METADATA,sha256=22WDpinr4hYgXAhzogmwd_Rhk318r_8JuN-lHg8HZ6A,40096
214
- webscout-7.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
215
- webscout-7.2.dist-info/entry_points.txt,sha256=7thMsVUoHiXGoIH1NeoocKpxlszWflNsNyrnDqGzvO0,70
216
- webscout-7.2.dist-info/top_level.txt,sha256=KQtbgkA3gxcsADB0hIIx-heydmEYXpAY7xn3LjwDx0E,19
217
- webscout-7.2.dist-info/RECORD,,
218
+ webscout-7.3.dist-info/LICENSE.md,sha256=5mkWS6cgjGxJClmN7n--h0beF3uFAOV_Ngr1YTK33Tk,9203
219
+ webscout-7.3.dist-info/METADATA,sha256=6ou5WJQmz1eIXHdvajeNGRJ-u5dUxg5YEOfJY7Xc8Tc,40951
220
+ webscout-7.3.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
221
+ webscout-7.3.dist-info/entry_points.txt,sha256=7thMsVUoHiXGoIH1NeoocKpxlszWflNsNyrnDqGzvO0,70
222
+ webscout-7.3.dist-info/top_level.txt,sha256=KQtbgkA3gxcsADB0hIIx-heydmEYXpAY7xn3LjwDx0E,19
223
+ webscout-7.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: bdist_wheel (0.45.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5