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.

Files changed (80) hide show
  1. webscout/Extra/gguf.py +2 -0
  2. webscout/Provider/AISEARCH/scira_search.py +2 -5
  3. webscout/Provider/Aitopia.py +75 -51
  4. webscout/Provider/AllenAI.py +64 -67
  5. webscout/Provider/ChatGPTClone.py +33 -34
  6. webscout/Provider/ChatSandbox.py +342 -0
  7. webscout/Provider/Cloudflare.py +79 -32
  8. webscout/Provider/Deepinfra.py +69 -56
  9. webscout/Provider/ElectronHub.py +48 -39
  10. webscout/Provider/ExaChat.py +36 -20
  11. webscout/Provider/GPTWeb.py +24 -18
  12. webscout/Provider/GithubChat.py +52 -49
  13. webscout/Provider/GizAI.py +283 -0
  14. webscout/Provider/Glider.py +39 -28
  15. webscout/Provider/Groq.py +48 -20
  16. webscout/Provider/HeckAI.py +18 -36
  17. webscout/Provider/Jadve.py +30 -37
  18. webscout/Provider/LambdaChat.py +36 -59
  19. webscout/Provider/MCPCore.py +18 -21
  20. webscout/Provider/Marcus.py +23 -14
  21. webscout/Provider/Netwrck.py +35 -26
  22. webscout/Provider/OPENAI/__init__.py +1 -1
  23. webscout/Provider/OPENAI/exachat.py +4 -0
  24. webscout/Provider/OPENAI/scirachat.py +2 -4
  25. webscout/Provider/OPENAI/textpollinations.py +20 -22
  26. webscout/Provider/OPENAI/toolbaz.py +1 -0
  27. webscout/Provider/PI.py +22 -13
  28. webscout/Provider/StandardInput.py +42 -30
  29. webscout/Provider/TeachAnything.py +16 -7
  30. webscout/Provider/TextPollinationsAI.py +78 -76
  31. webscout/Provider/TwoAI.py +120 -88
  32. webscout/Provider/TypliAI.py +305 -0
  33. webscout/Provider/Venice.py +24 -22
  34. webscout/Provider/VercelAI.py +31 -12
  35. webscout/Provider/__init__.py +7 -7
  36. webscout/Provider/asksteve.py +53 -44
  37. webscout/Provider/cerebras.py +77 -31
  38. webscout/Provider/chatglm.py +47 -37
  39. webscout/Provider/elmo.py +38 -32
  40. webscout/Provider/granite.py +24 -21
  41. webscout/Provider/hermes.py +27 -20
  42. webscout/Provider/learnfastai.py +25 -20
  43. webscout/Provider/llmchatco.py +48 -78
  44. webscout/Provider/multichat.py +13 -3
  45. webscout/Provider/scira_chat.py +49 -30
  46. webscout/Provider/scnet.py +23 -20
  47. webscout/Provider/searchchat.py +16 -24
  48. webscout/Provider/sonus.py +37 -39
  49. webscout/Provider/toolbaz.py +24 -46
  50. webscout/Provider/turboseek.py +37 -41
  51. webscout/Provider/typefully.py +30 -22
  52. webscout/Provider/typegpt.py +47 -51
  53. webscout/Provider/uncovr.py +46 -40
  54. webscout/cli.py +256 -0
  55. webscout/conversation.py +0 -2
  56. webscout/exceptions.py +3 -0
  57. webscout/version.py +1 -1
  58. {webscout-8.2.4.dist-info → webscout-8.2.5.dist-info}/METADATA +166 -45
  59. {webscout-8.2.4.dist-info → webscout-8.2.5.dist-info}/RECORD +63 -76
  60. {webscout-8.2.4.dist-info → webscout-8.2.5.dist-info}/WHEEL +1 -1
  61. webscout-8.2.5.dist-info/entry_points.txt +3 -0
  62. {webscout-8.2.4.dist-info → webscout-8.2.5.dist-info}/top_level.txt +0 -1
  63. inferno/__init__.py +0 -6
  64. inferno/__main__.py +0 -9
  65. inferno/cli.py +0 -6
  66. inferno/lol.py +0 -589
  67. webscout/Local/__init__.py +0 -12
  68. webscout/Local/__main__.py +0 -9
  69. webscout/Local/api.py +0 -576
  70. webscout/Local/cli.py +0 -516
  71. webscout/Local/config.py +0 -75
  72. webscout/Local/llm.py +0 -287
  73. webscout/Local/model_manager.py +0 -253
  74. webscout/Local/server.py +0 -721
  75. webscout/Local/utils.py +0 -93
  76. webscout/Provider/Chatify.py +0 -175
  77. webscout/Provider/askmyai.py +0 -158
  78. webscout/Provider/gaurish.py +0 -244
  79. webscout-8.2.4.dist-info/entry_points.txt +0 -5
  80. {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.4"
1
+ __version__ = "8.2.5"
2
2
  __prog__ = "webscout"