webscout 8.2.4__py3-none-any.whl → 8.2.5__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/Extra/gguf.py +2 -0
- webscout/Provider/AISEARCH/scira_search.py +2 -5
- webscout/Provider/Aitopia.py +75 -51
- webscout/Provider/AllenAI.py +64 -67
- webscout/Provider/ChatGPTClone.py +33 -34
- webscout/Provider/ChatSandbox.py +342 -0
- webscout/Provider/Cloudflare.py +79 -32
- webscout/Provider/Deepinfra.py +69 -56
- webscout/Provider/ElectronHub.py +48 -39
- webscout/Provider/ExaChat.py +36 -20
- webscout/Provider/GPTWeb.py +24 -18
- webscout/Provider/GithubChat.py +52 -49
- webscout/Provider/GizAI.py +283 -0
- webscout/Provider/Glider.py +39 -28
- webscout/Provider/Groq.py +48 -20
- webscout/Provider/HeckAI.py +18 -36
- webscout/Provider/Jadve.py +30 -37
- webscout/Provider/LambdaChat.py +36 -59
- webscout/Provider/MCPCore.py +18 -21
- webscout/Provider/Marcus.py +23 -14
- webscout/Provider/Netwrck.py +35 -26
- webscout/Provider/OPENAI/__init__.py +1 -1
- webscout/Provider/OPENAI/exachat.py +4 -0
- webscout/Provider/OPENAI/scirachat.py +2 -4
- webscout/Provider/OPENAI/textpollinations.py +20 -22
- webscout/Provider/OPENAI/toolbaz.py +1 -0
- webscout/Provider/PI.py +22 -13
- webscout/Provider/StandardInput.py +42 -30
- webscout/Provider/TeachAnything.py +16 -7
- webscout/Provider/TextPollinationsAI.py +78 -76
- webscout/Provider/TwoAI.py +120 -88
- webscout/Provider/TypliAI.py +305 -0
- webscout/Provider/Venice.py +24 -22
- webscout/Provider/VercelAI.py +31 -12
- webscout/Provider/__init__.py +7 -7
- webscout/Provider/asksteve.py +53 -44
- webscout/Provider/cerebras.py +77 -31
- webscout/Provider/chatglm.py +47 -37
- webscout/Provider/elmo.py +38 -32
- webscout/Provider/granite.py +24 -21
- webscout/Provider/hermes.py +27 -20
- webscout/Provider/learnfastai.py +25 -20
- webscout/Provider/llmchatco.py +48 -78
- webscout/Provider/multichat.py +13 -3
- webscout/Provider/scira_chat.py +49 -30
- webscout/Provider/scnet.py +23 -20
- webscout/Provider/searchchat.py +16 -24
- webscout/Provider/sonus.py +37 -39
- webscout/Provider/toolbaz.py +24 -46
- webscout/Provider/turboseek.py +37 -41
- webscout/Provider/typefully.py +30 -22
- webscout/Provider/typegpt.py +47 -51
- webscout/Provider/uncovr.py +46 -40
- webscout/cli.py +256 -0
- webscout/conversation.py +0 -2
- webscout/exceptions.py +3 -0
- webscout/version.py +1 -1
- {webscout-8.2.4.dist-info → webscout-8.2.5.dist-info}/METADATA +166 -45
- {webscout-8.2.4.dist-info → webscout-8.2.5.dist-info}/RECORD +63 -76
- {webscout-8.2.4.dist-info → webscout-8.2.5.dist-info}/WHEEL +1 -1
- webscout-8.2.5.dist-info/entry_points.txt +3 -0
- {webscout-8.2.4.dist-info → webscout-8.2.5.dist-info}/top_level.txt +0 -1
- inferno/__init__.py +0 -6
- inferno/__main__.py +0 -9
- inferno/cli.py +0 -6
- inferno/lol.py +0 -589
- webscout/Local/__init__.py +0 -12
- webscout/Local/__main__.py +0 -9
- webscout/Local/api.py +0 -576
- webscout/Local/cli.py +0 -516
- webscout/Local/config.py +0 -75
- webscout/Local/llm.py +0 -287
- webscout/Local/model_manager.py +0 -253
- webscout/Local/server.py +0 -721
- webscout/Local/utils.py +0 -93
- webscout/Provider/Chatify.py +0 -175
- webscout/Provider/askmyai.py +0 -158
- webscout/Provider/gaurish.py +0 -244
- webscout-8.2.4.dist-info/entry_points.txt +0 -5
- {webscout-8.2.4.dist-info → webscout-8.2.5.dist-info}/licenses/LICENSE.md +0 -0
webscout/cli.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import sys
|
|
2
2
|
from .swiftcli import CLI, option
|
|
3
3
|
from .webscout_search import WEBS
|
|
4
|
+
from .DWEBS import GoogleSearch # Import GoogleSearch from DWEBS
|
|
5
|
+
from .yep_search import YepSearch # Import YepSearch from yep_search
|
|
4
6
|
from .version import __version__
|
|
5
7
|
|
|
6
8
|
|
|
@@ -282,6 +284,260 @@ def weather(location: str, language: str, proxy: str = None, timeout: int = 10):
|
|
|
282
284
|
except Exception as e:
|
|
283
285
|
raise e
|
|
284
286
|
|
|
287
|
+
@app.command()
|
|
288
|
+
@option("--keywords", "-k", help="Search keywords", required=True)
|
|
289
|
+
@option("--region", "-r", help="Region for search results (ISO country code)", default="all")
|
|
290
|
+
@option("--safesearch", "-s", help="SafeSearch setting (on, moderate, off)", default="moderate")
|
|
291
|
+
@option("--max-results", "-m", help="Maximum number of results", type=int, default=10)
|
|
292
|
+
@option("--start-num", "-start", help="Starting position for pagination", type=int, default=0)
|
|
293
|
+
@option("--unique", "-u", help="Filter duplicate results", type=bool, default=True)
|
|
294
|
+
@option("--timeout", "-timeout", help="Timeout value for requests", type=int, default=10)
|
|
295
|
+
@option("--proxy", "-p", help="Proxy URL to use for requests")
|
|
296
|
+
@option("--impersonate", "-i", help="Browser to impersonate", default="chrome110")
|
|
297
|
+
def google_text(
|
|
298
|
+
keywords: str,
|
|
299
|
+
region: str,
|
|
300
|
+
safesearch: str,
|
|
301
|
+
max_results: int,
|
|
302
|
+
start_num: int,
|
|
303
|
+
unique: bool,
|
|
304
|
+
timeout: int = 10,
|
|
305
|
+
proxy: str = None,
|
|
306
|
+
impersonate: str = "chrome110"
|
|
307
|
+
):
|
|
308
|
+
"""Perform a text search using Google Search."""
|
|
309
|
+
google = GoogleSearch(
|
|
310
|
+
timeout=timeout,
|
|
311
|
+
proxies={"https": proxy, "http": proxy} if proxy else None,
|
|
312
|
+
verify=True,
|
|
313
|
+
lang="en",
|
|
314
|
+
sleep_interval=0.0,
|
|
315
|
+
impersonate=impersonate
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
try:
|
|
319
|
+
results = google.text(
|
|
320
|
+
keywords=keywords,
|
|
321
|
+
region=region,
|
|
322
|
+
safesearch=safesearch,
|
|
323
|
+
max_results=max_results,
|
|
324
|
+
start_num=start_num,
|
|
325
|
+
unique=unique
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
# Convert SearchResult objects to dictionaries for printing
|
|
329
|
+
formatted_results = []
|
|
330
|
+
for result in results:
|
|
331
|
+
result_dict = {
|
|
332
|
+
"title": result.title,
|
|
333
|
+
"url": result.url,
|
|
334
|
+
"description": result.description,
|
|
335
|
+
}
|
|
336
|
+
# Add any metadata to the result dictionary
|
|
337
|
+
for k, v in result.metadata.items():
|
|
338
|
+
result_dict[k] = v
|
|
339
|
+
|
|
340
|
+
formatted_results.append(result_dict)
|
|
341
|
+
|
|
342
|
+
_print_data(formatted_results)
|
|
343
|
+
except Exception as e:
|
|
344
|
+
raise e
|
|
345
|
+
|
|
346
|
+
@app.command()
|
|
347
|
+
@option("--keywords", "-k", help="Search keywords", required=True)
|
|
348
|
+
@option("--region", "-r", help="Region for search results (ISO country code)", default="all")
|
|
349
|
+
@option("--safesearch", "-s", help="SafeSearch setting (on, moderate, off)", default="moderate")
|
|
350
|
+
@option("--max-results", "-m", help="Maximum number of results", type=int, default=10)
|
|
351
|
+
@option("--timeout", "-timeout", help="Timeout value for requests", type=int, default=10)
|
|
352
|
+
@option("--proxy", "-p", help="Proxy URL to use for requests")
|
|
353
|
+
@option("--impersonate", "-i", help="Browser to impersonate", default="chrome110")
|
|
354
|
+
def google_news(
|
|
355
|
+
keywords: str,
|
|
356
|
+
region: str,
|
|
357
|
+
safesearch: str,
|
|
358
|
+
max_results: int,
|
|
359
|
+
timeout: int = 10,
|
|
360
|
+
proxy: str = None,
|
|
361
|
+
impersonate: str = "chrome110"
|
|
362
|
+
):
|
|
363
|
+
"""Perform a news search using Google Search."""
|
|
364
|
+
google = GoogleSearch(
|
|
365
|
+
timeout=timeout,
|
|
366
|
+
proxies={"https": proxy, "http": proxy} if proxy else None,
|
|
367
|
+
verify=True,
|
|
368
|
+
lang="en",
|
|
369
|
+
sleep_interval=0.0,
|
|
370
|
+
impersonate=impersonate
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
try:
|
|
374
|
+
results = google.news(
|
|
375
|
+
keywords=keywords,
|
|
376
|
+
region=region,
|
|
377
|
+
safesearch=safesearch,
|
|
378
|
+
max_results=max_results
|
|
379
|
+
)
|
|
380
|
+
|
|
381
|
+
# Convert SearchResult objects to dictionaries for printing
|
|
382
|
+
formatted_results = []
|
|
383
|
+
for result in results:
|
|
384
|
+
result_dict = {
|
|
385
|
+
"title": result.title,
|
|
386
|
+
"url": result.url,
|
|
387
|
+
"description": result.description,
|
|
388
|
+
}
|
|
389
|
+
# Add any metadata to the result dictionary
|
|
390
|
+
for k, v in result.metadata.items():
|
|
391
|
+
result_dict[k] = v
|
|
392
|
+
|
|
393
|
+
formatted_results.append(result_dict)
|
|
394
|
+
|
|
395
|
+
_print_data(formatted_results)
|
|
396
|
+
except Exception as e:
|
|
397
|
+
raise e
|
|
398
|
+
|
|
399
|
+
@app.command()
|
|
400
|
+
@option("--query", "-q", help="Search query", required=True)
|
|
401
|
+
@option("--region", "-r", help="Region for suggestions (ISO country code)", default="all")
|
|
402
|
+
@option("--timeout", "-timeout", help="Timeout value for requests", type=int, default=10)
|
|
403
|
+
@option("--proxy", "-p", help="Proxy URL to use for requests")
|
|
404
|
+
@option("--impersonate", "-i", help="Browser to impersonate", default="chrome110")
|
|
405
|
+
def google_suggestions(
|
|
406
|
+
query: str,
|
|
407
|
+
region: str,
|
|
408
|
+
timeout: int = 10,
|
|
409
|
+
proxy: str = None,
|
|
410
|
+
impersonate: str = "chrome110"
|
|
411
|
+
):
|
|
412
|
+
"""Get search suggestions from Google Search."""
|
|
413
|
+
google = GoogleSearch(
|
|
414
|
+
timeout=timeout,
|
|
415
|
+
proxies={"https": proxy, "http": proxy} if proxy else None,
|
|
416
|
+
verify=True,
|
|
417
|
+
lang="en",
|
|
418
|
+
sleep_interval=0.0,
|
|
419
|
+
impersonate=impersonate
|
|
420
|
+
)
|
|
421
|
+
|
|
422
|
+
try:
|
|
423
|
+
results = google.suggestions(query=query, region=region)
|
|
424
|
+
|
|
425
|
+
# Format suggestions for printing
|
|
426
|
+
formatted_results = []
|
|
427
|
+
for i, suggestion in enumerate(results, 1):
|
|
428
|
+
formatted_results.append({"position": i, "suggestion": suggestion})
|
|
429
|
+
|
|
430
|
+
_print_data(formatted_results)
|
|
431
|
+
except Exception as e:
|
|
432
|
+
raise e
|
|
433
|
+
|
|
434
|
+
@app.command()
|
|
435
|
+
@option("--keywords", "-k", help="Search keywords", required=True)
|
|
436
|
+
@option("--region", "-r", help="Region for search results", default="all")
|
|
437
|
+
@option("--safesearch", "-s", help="SafeSearch setting (on, moderate, off)", default="moderate")
|
|
438
|
+
@option("--max-results", "-m", help="Maximum number of results", type=int, default=10)
|
|
439
|
+
@option("--timeout", "-timeout", help="Timeout value for requests", type=int, default=20)
|
|
440
|
+
@option("--proxy", "-p", help="Proxy URL to use for requests")
|
|
441
|
+
@option("--impersonate", "-i", help="Browser to impersonate", default="chrome110")
|
|
442
|
+
def yep_text(
|
|
443
|
+
keywords: str,
|
|
444
|
+
region: str,
|
|
445
|
+
safesearch: str,
|
|
446
|
+
max_results: int,
|
|
447
|
+
timeout: int = 20,
|
|
448
|
+
proxy: str = None,
|
|
449
|
+
impersonate: str = "chrome110"
|
|
450
|
+
):
|
|
451
|
+
"""Perform a text search using Yep Search."""
|
|
452
|
+
yep = YepSearch(
|
|
453
|
+
timeout=timeout,
|
|
454
|
+
proxies={"https": proxy, "http": proxy} if proxy else None,
|
|
455
|
+
verify=True,
|
|
456
|
+
impersonate=impersonate
|
|
457
|
+
)
|
|
458
|
+
|
|
459
|
+
try:
|
|
460
|
+
results = yep.text(
|
|
461
|
+
keywords=keywords,
|
|
462
|
+
region=region,
|
|
463
|
+
safesearch=safesearch,
|
|
464
|
+
max_results=max_results
|
|
465
|
+
)
|
|
466
|
+
|
|
467
|
+
_print_data(results)
|
|
468
|
+
except Exception as e:
|
|
469
|
+
raise e
|
|
470
|
+
|
|
471
|
+
@app.command()
|
|
472
|
+
@option("--keywords", "-k", help="Search keywords", required=True)
|
|
473
|
+
@option("--region", "-r", help="Region for search results", default="all")
|
|
474
|
+
@option("--safesearch", "-s", help="SafeSearch setting (on, moderate, off)", default="moderate")
|
|
475
|
+
@option("--max-results", "-m", help="Maximum number of results", type=int, default=10)
|
|
476
|
+
@option("--timeout", "-timeout", help="Timeout value for requests", type=int, default=20)
|
|
477
|
+
@option("--proxy", "-p", help="Proxy URL to use for requests")
|
|
478
|
+
@option("--impersonate", "-i", help="Browser to impersonate", default="chrome110")
|
|
479
|
+
def yep_images(
|
|
480
|
+
keywords: str,
|
|
481
|
+
region: str,
|
|
482
|
+
safesearch: str,
|
|
483
|
+
max_results: int,
|
|
484
|
+
timeout: int = 20,
|
|
485
|
+
proxy: str = None,
|
|
486
|
+
impersonate: str = "chrome110"
|
|
487
|
+
):
|
|
488
|
+
"""Perform an image search using Yep Search."""
|
|
489
|
+
yep = YepSearch(
|
|
490
|
+
timeout=timeout,
|
|
491
|
+
proxies={"https": proxy, "http": proxy} if proxy else None,
|
|
492
|
+
verify=True,
|
|
493
|
+
impersonate=impersonate
|
|
494
|
+
)
|
|
495
|
+
|
|
496
|
+
try:
|
|
497
|
+
results = yep.images(
|
|
498
|
+
keywords=keywords,
|
|
499
|
+
region=region,
|
|
500
|
+
safesearch=safesearch,
|
|
501
|
+
max_results=max_results
|
|
502
|
+
)
|
|
503
|
+
|
|
504
|
+
_print_data(results)
|
|
505
|
+
except Exception as e:
|
|
506
|
+
raise e
|
|
507
|
+
|
|
508
|
+
@app.command()
|
|
509
|
+
@option("--query", "-q", help="Search query", required=True)
|
|
510
|
+
@option("--region", "-r", help="Region for suggestions", default="all")
|
|
511
|
+
@option("--timeout", "-timeout", help="Timeout value for requests", type=int, default=20)
|
|
512
|
+
@option("--proxy", "-p", help="Proxy URL to use for requests")
|
|
513
|
+
@option("--impersonate", "-i", help="Browser to impersonate", default="chrome110")
|
|
514
|
+
def yep_suggestions(
|
|
515
|
+
query: str,
|
|
516
|
+
region: str,
|
|
517
|
+
timeout: int = 20,
|
|
518
|
+
proxy: str = None,
|
|
519
|
+
impersonate: str = "chrome110"
|
|
520
|
+
):
|
|
521
|
+
"""Get search suggestions from Yep Search."""
|
|
522
|
+
yep = YepSearch(
|
|
523
|
+
timeout=timeout,
|
|
524
|
+
proxies={"https": proxy, "http": proxy} if proxy else None,
|
|
525
|
+
verify=True,
|
|
526
|
+
impersonate=impersonate
|
|
527
|
+
)
|
|
528
|
+
|
|
529
|
+
try:
|
|
530
|
+
results = yep.suggestions(query=query, region=region)
|
|
531
|
+
|
|
532
|
+
# Format suggestions for printing
|
|
533
|
+
formatted_results = []
|
|
534
|
+
for i, suggestion in enumerate(results, 1):
|
|
535
|
+
formatted_results.append({"position": i, "suggestion": suggestion})
|
|
536
|
+
|
|
537
|
+
_print_data(formatted_results)
|
|
538
|
+
except Exception as e:
|
|
539
|
+
raise e
|
|
540
|
+
|
|
285
541
|
def main():
|
|
286
542
|
"""Main entry point for the CLI."""
|
|
287
543
|
try:
|
webscout/conversation.py
CHANGED
|
@@ -375,8 +375,6 @@ Your goal is to assist the user effectively. Analyze each query and choose one o
|
|
|
375
375
|
else:
|
|
376
376
|
raise ValueError(f"Invalid role: {role}. Must be one of {list(role_formats.keys())}")
|
|
377
377
|
|
|
378
|
-
# ... (logging remains the same) ...
|
|
379
|
-
|
|
380
378
|
def validate_message(self, role: str, content: str) -> bool:
|
|
381
379
|
"""Validate the message role and content."""
|
|
382
380
|
# Updated valid roles
|
webscout/exceptions.py
CHANGED
|
@@ -90,6 +90,9 @@ class FailedToGenerateResponseError(WebscoutE):
|
|
|
90
90
|
"""
|
|
91
91
|
pass
|
|
92
92
|
|
|
93
|
+
class InvalidAuthenticationError(Exception):
|
|
94
|
+
"""Custom exception for authentication errors (e.g., invalid API key, cookies)."""
|
|
95
|
+
pass
|
|
93
96
|
|
|
94
97
|
class AllProvidersFailure(WebscoutE):
|
|
95
98
|
"""
|
webscout/version.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
__version__ = "8.2.
|
|
1
|
+
__version__ = "8.2.5"
|
|
2
2
|
__prog__ = "webscout"
|