webscout 8.3.1__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 (77) hide show
  1. webscout/AIutel.py +46 -53
  2. webscout/Bing_search.py +418 -0
  3. webscout/Extra/gguf.py +706 -177
  4. webscout/Provider/AISEARCH/genspark_search.py +7 -7
  5. webscout/Provider/GeminiProxy.py +140 -0
  6. webscout/Provider/MCPCore.py +78 -75
  7. webscout/Provider/OPENAI/BLACKBOXAI.py +1 -4
  8. webscout/Provider/OPENAI/GeminiProxy.py +328 -0
  9. webscout/Provider/OPENAI/README.md +2 -0
  10. webscout/Provider/OPENAI/README_AUTOPROXY.md +238 -0
  11. webscout/Provider/OPENAI/__init__.py +15 -1
  12. webscout/Provider/OPENAI/autoproxy.py +332 -39
  13. webscout/Provider/OPENAI/base.py +15 -5
  14. webscout/Provider/OPENAI/e2b.py +0 -1
  15. webscout/Provider/OPENAI/mcpcore.py +109 -70
  16. webscout/Provider/OPENAI/scirachat.py +59 -51
  17. webscout/Provider/OPENAI/toolbaz.py +2 -9
  18. webscout/Provider/OPENAI/xenai.py +514 -0
  19. webscout/Provider/OPENAI/yep.py +8 -2
  20. webscout/Provider/TTI/__init__.py +1 -0
  21. webscout/Provider/TTI/bing.py +231 -0
  22. webscout/Provider/TTS/speechma.py +45 -39
  23. webscout/Provider/TogetherAI.py +366 -0
  24. webscout/Provider/XenAI.py +324 -0
  25. webscout/Provider/__init__.py +8 -3
  26. webscout/Provider/deepseek_assistant.py +378 -0
  27. webscout/auth/__init__.py +44 -0
  28. webscout/auth/api_key_manager.py +189 -0
  29. webscout/auth/auth_system.py +100 -0
  30. webscout/auth/config.py +76 -0
  31. webscout/auth/database.py +400 -0
  32. webscout/auth/exceptions.py +67 -0
  33. webscout/auth/middleware.py +248 -0
  34. webscout/auth/models.py +130 -0
  35. webscout/auth/providers.py +257 -0
  36. webscout/auth/rate_limiter.py +254 -0
  37. webscout/auth/request_models.py +127 -0
  38. webscout/auth/request_processing.py +226 -0
  39. webscout/auth/routes.py +526 -0
  40. webscout/auth/schemas.py +103 -0
  41. webscout/auth/server.py +312 -0
  42. webscout/auth/static/favicon.svg +11 -0
  43. webscout/auth/swagger_ui.py +203 -0
  44. webscout/auth/templates/components/authentication.html +237 -0
  45. webscout/auth/templates/components/base.html +103 -0
  46. webscout/auth/templates/components/endpoints.html +750 -0
  47. webscout/auth/templates/components/examples.html +491 -0
  48. webscout/auth/templates/components/footer.html +75 -0
  49. webscout/auth/templates/components/header.html +27 -0
  50. webscout/auth/templates/components/models.html +286 -0
  51. webscout/auth/templates/components/navigation.html +70 -0
  52. webscout/auth/templates/static/api.js +455 -0
  53. webscout/auth/templates/static/icons.js +168 -0
  54. webscout/auth/templates/static/main.js +784 -0
  55. webscout/auth/templates/static/particles.js +201 -0
  56. webscout/auth/templates/static/styles.css +3353 -0
  57. webscout/auth/templates/static/ui.js +374 -0
  58. webscout/auth/templates/swagger_ui.html +170 -0
  59. webscout/client.py +49 -3
  60. webscout/scout/core/scout.py +104 -26
  61. webscout/scout/element.py +139 -18
  62. webscout/swiftcli/core/cli.py +14 -3
  63. webscout/swiftcli/decorators/output.py +59 -9
  64. webscout/update_checker.py +31 -49
  65. webscout/version.py +1 -1
  66. webscout/webscout_search.py +4 -12
  67. webscout/webscout_search_async.py +3 -10
  68. webscout/yep_search.py +2 -11
  69. {webscout-8.3.1.dist-info → webscout-8.3.2.dist-info}/METADATA +41 -11
  70. {webscout-8.3.1.dist-info → webscout-8.3.2.dist-info}/RECORD +74 -36
  71. {webscout-8.3.1.dist-info → webscout-8.3.2.dist-info}/entry_points.txt +1 -1
  72. webscout/Provider/HF_space/__init__.py +0 -0
  73. webscout/Provider/HF_space/qwen_qwen2.py +0 -206
  74. webscout/Provider/OPENAI/api.py +0 -1320
  75. {webscout-8.3.1.dist-info → webscout-8.3.2.dist-info}/WHEEL +0 -0
  76. {webscout-8.3.1.dist-info → webscout-8.3.2.dist-info}/licenses/LICENSE.md +0 -0
  77. {webscout-8.3.1.dist-info → webscout-8.3.2.dist-info}/top_level.txt +0 -0
@@ -16,6 +16,8 @@ from lxml.etree import _Element
16
16
  from lxml.html import HTMLParser as LHTMLParser
17
17
  from lxml.html import document_fromstring
18
18
 
19
+ from webscout.litagent.agent import LitAgent
20
+
19
21
  from .exceptions import ConversationLimitException, RatelimitE, TimeoutE, WebscoutE
20
22
  from .utils import (
21
23
  _expand_proxy_tb_alias,
@@ -74,16 +76,7 @@ class AsyncWEBS:
74
76
  self.proxy = proxies.get("http") or proxies.get("https") if isinstance(proxies, dict) else proxies
75
77
 
76
78
  default_headers = {
77
- "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
78
- "Accept-Language": "en-US,en;q=0.5",
79
- "Accept-Encoding": "gzip, deflate, br",
80
- "DNT": "1",
81
- "Connection": "keep-alive",
82
- "Upgrade-Insecure-Requests": "1",
83
- "Sec-Fetch-Dest": "document",
84
- "Sec-Fetch-Mode": "navigate",
85
- "Sec-Fetch-Site": "none",
86
- "Sec-Fetch-User": "?1",
79
+ **LitAgent().generate_fingerprint(),
87
80
  "Referer": "https://duckduckgo.com/",
88
81
  }
89
82
 
webscout/yep_search.py CHANGED
@@ -35,20 +35,11 @@ class YepSearch:
35
35
  timeout=timeout # Set timeout directly in session
36
36
  )
37
37
  self.session.headers.update({
38
- "Accept": "*/*",
39
- "Accept-Language": "en-US,en;q=0.9,en-IN;q=0.8",
40
- "DNT": "1",
38
+ **LitAgent().generate_fingerprint(),
41
39
  "Origin": "https://yep.com",
42
40
  "Referer": "https://yep.com/",
43
- # Sec-Ch-Ua headers are often handled by impersonate, but keeping them might be safer
44
- "Sec-Ch-Ua": '"Not(A:Brand";v="99", "Microsoft Edge";v="133", "Chromium";v="133"',
45
- "Sec-Ch-Ua-Mobile": "?0",
46
- "Sec-Ch-Ua-Platform": '"Windows"',
47
- "Sec-Fetch-Dest": "empty",
48
- "Sec-Fetch-Mode": "cors",
49
- "Sec-Fetch-Site": "same-site",
50
- "User-Agent": LitAgent().random() # Keep custom User-Agent or rely on impersonate
51
41
  })
42
+
52
43
  # Proxies and verify are handled by the Session constructor now
53
44
 
54
45
  def _remove_html_tags(self, text: str) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: webscout
3
- Version: 8.3.1
3
+ Version: 8.3.2
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-email: OEvortex <helpingai5@gmail.com>
6
6
  License: HelpingAI
@@ -71,6 +71,8 @@ Requires-Dist: uvicorn[standard]; extra == "api"
71
71
  Requires-Dist: pydantic; extra == "api"
72
72
  Requires-Dist: python-multipart; extra == "api"
73
73
  Requires-Dist: tiktoken; extra == "api"
74
+ Requires-Dist: motor; extra == "api"
75
+ Requires-Dist: jinja2; extra == "api"
74
76
  Dynamic: license-file
75
77
 
76
78
  <div align="center">
@@ -227,14 +229,14 @@ uv add "webscout[api]"
227
229
  uv run webscout --help
228
230
 
229
231
  # Run with API dependencies
230
- uv run --extra api webscout-server
232
+ uv run webscout --extra api webscout-server
231
233
 
232
234
  # Install as a UV tool for global access
233
235
  uv tool install webscout
234
236
 
235
237
  # Use UV tool commands
236
238
  webscout --help
237
- webscout-server --help
239
+ webscout-server
238
240
  ```
239
241
 
240
242
  ### 🔧 Development Installation
@@ -308,7 +310,7 @@ uv run --extra api webscout-server
308
310
  ```bash
309
311
  # Traditional Python module execution
310
312
  python -m webscout --help
311
- python -m webscout.client # Start API server
313
+ python -m webscout-server
312
314
  ```
313
315
 
314
316
  <details open>
@@ -403,13 +405,19 @@ webscout-server --port 8080
403
405
  # Start with API key authentication
404
406
  webscout-server --api-key "your-secret-key"
405
407
 
408
+ # Start in no-auth mode using command line flag (no API key required)
409
+ webscout-server --no-auth
410
+
411
+ # Start in no-auth mode using environment variable
412
+ $env:WEBSCOUT_NO_AUTH='true'; webscout-server
413
+
406
414
  # Specify a default provider
407
415
  webscout-server --default-provider "Claude"
408
416
 
409
417
  # Run in debug mode
410
418
  webscout-server --debug
411
419
 
412
- # Get help for all options
420
+ # Get help for all options (includes authentication options)
413
421
  webscout-server --help
414
422
  ```
415
423
 
@@ -420,17 +428,36 @@ webscout-server --help
420
428
  uv run --extra api webscout-server
421
429
 
422
430
  # Using Python module
423
- python -m webscout.client
431
+ python -m webscout.auth.server
432
+ ```
433
+
434
+ #### Environment Variables
435
+
436
+ Webscout server supports configuration through environment variables:
424
437
 
425
- # Legacy method (still supported)
426
- python -m webscout.Provider.OPENAI.api
438
+ ```bash
439
+ # Start server in no-auth mode (no API key required)
440
+ $env:WEBSCOUT_NO_AUTH='true'; webscout-server
441
+
442
+ # Disable rate limiting
443
+ $env:WEBSCOUT_NO_RATE_LIMIT='true'; webscout-server
444
+
445
+ # Start with custom port using environment variable
446
+ $env:WEBSCOUT_PORT='7860'; webscout-server
427
447
  ```
428
448
 
449
+ For a complete list of supported environment variables and Docker deployment options, see [DOCKER.md](DOCKER.md).
450
+
451
+
429
452
  #### From Python Code
430
453
 
454
+ > **Recommended:**
455
+ > Use `start_server` from `webscout.client` for the simplest programmatic startup.
456
+ > For advanced control (custom host, debug, etc.), use `run_api`.
457
+
431
458
  ```python
432
- # Method 1: Using the helper function
433
- from webscout.client import start_server # <--- Now recommended
459
+ # Method 1: Using the helper function (recommended)
460
+ from webscout.client import start_server
434
461
 
435
462
  # Start with default settings
436
463
  start_server()
@@ -438,7 +465,10 @@ start_server()
438
465
  # Start with custom settings
439
466
  start_server(port=8080, api_key="your-secret-key", default_provider="Claude")
440
467
 
441
- # Method 2: Using the run_api function for more control
468
+ # Start in no-auth mode (no API key required)
469
+ start_server(no_auth=True)
470
+
471
+ # Method 2: Advanced usage with run_api
442
472
  from webscout.client import run_api
443
473
 
444
474
  run_api(
@@ -1,28 +1,29 @@
1
1
  webscout/AIauto.py,sha256=zRQcmNzQCCPOD6ancQlRlSRqEM24rtb-Xlpqg6bt5Pg,10557
2
2
  webscout/AIbase.py,sha256=MbtLlwMNrRu1nKJkj-4ZYUL8YVzDzLdboIAA_7yextM,14529
3
- webscout/AIutel.py,sha256=U_U2ccopCLRjAKyRQiibr3FF4oTls8xHOfFZpWSkcaI,30709
3
+ webscout/AIutel.py,sha256=7aUbn_gbIVnv1yRbnkjeWjY6EPVOJ8qVj4QWymwbaV0,30947
4
4
  webscout/Bard.py,sha256=VTvnSapEleBnw-O6CM_-4PiijhsLFx_B7gauknV58p4,45280
5
+ webscout/Bing_search.py,sha256=bcw6VFwlOV742yZS5havsi3f9vmrYubAOYdlK9TBmYc,16391
5
6
  webscout/DWEBS.py,sha256=OnoKtIkrlNtYlGL_CCPsLet8cj2wKxqquFB8RdBxXfk,18621
6
7
  webscout/__init__.py,sha256=AVG0wCun0afiuNnWoF8BJ46nCpT3ax2ecOjVqcUAxJk,1142
7
8
  webscout/__main__.py,sha256=qtkMZK5jzQ79ZkFAuZBxMgayuhmw3aRDj1F8Pt06NW4,108
8
9
  webscout/cli.py,sha256=_ZeVKRKw6ZX0RScC5BeKNK81gak89qkik168FqB9BH8,20239
9
- webscout/client.py,sha256=qPO3zmCGB_GE3G8SyOV0ELy5qWPcy7G9hHQqlMaf9qQ,3464
10
+ webscout/client.py,sha256=SFH-2IKFECDI7hxFXftbb9KTqoKUQGtVf9eslQ1ZnfE,5480
10
11
  webscout/conversation.py,sha256=6U6MepqYlYFev-HR2ZSqCKYhoU816E00jmxtYhYUQ2I,16955
11
12
  webscout/exceptions.py,sha256=cj0BDCZhB46g_vJ0r2PH0U_T35dqZro-rWu6tvtIZ3c,12833
12
13
  webscout/models.py,sha256=C7QY-KDkqFCI698t9pvTHQ27rYadPIvwaYHJ3-AOCJI,6566
13
14
  webscout/optimizers.py,sha256=lwIV6c7fKW4rFbZZdhBi7RTJig8KtmziA4979_GByCk,10373
14
15
  webscout/prompt_manager.py,sha256=j4MLYx3SpeeTxzsbgUGAHWLtJ1HAF6eaWOzJCAiGND4,10090
15
16
  webscout/tempid.py,sha256=lqTTOjVSwDMmC0UoThdyshFyIAxTikVaN613-6K3g_s,4968
16
- webscout/update_checker.py,sha256=5FCr6p1zLVASXcXkxKEgR7bFvICbpzJdgRTr3teKFCs,4217
17
+ webscout/update_checker.py,sha256=vZKTk4HkDED8x5cujKK0Bjq3UjncyESWM7nNm4LR1fg,3825
17
18
  webscout/utils.py,sha256=o2hU3qaVPk25sog3e4cyVZO3l8xwaZpYRziZPotEzNo,3075
18
- webscout/version.py,sha256=2Z7WrVXlxxW2DjGGMtHTC7flp1v74Vs5xckcsMq0lfg,46
19
- webscout/webscout_search.py,sha256=PfkBjaIKwTkL3JmpLz8Z1FNdQIqwvCMeSSMLi2tI9Jg,48185
20
- webscout/webscout_search_async.py,sha256=rf2dAWw8z78M-UN6CQU-vbW8IXYLdCGyO6R7jVSkQck,27502
21
- webscout/yep_search.py,sha256=gCXleUK_1Gy6B6fMPZ8MurwboPiMmbft3bhk1qISCdQ,12295
19
+ webscout/version.py,sha256=RjZSJtbPTmeSVF0Iuri6xhKitGhGcWZfRDcI58hPcv4,46
20
+ webscout/webscout_search.py,sha256=e8n03H11N_6Eaey99SvdD9rYEwMERnurNwwrX8ORGVs,47825
21
+ webscout/webscout_search_async.py,sha256=xjwSPpQSbeemwRfJYZJA8pJ8WqEHj93Nm4ouH_JddLc,27110
22
+ webscout/yep_search.py,sha256=WwdbHtHjgrqc4j9vChf601UB-6ShVcd0iuWem-9qi_8,11730
22
23
  webscout/Extra/Act.md,sha256=Mn1AsEOJnVzeNU727o92qwDlGkxfDk9f4ugkI2T2cW4,19261
23
24
  webscout/Extra/__init__.py,sha256=KvJRsRBRO-fZp2jSCl6KQnPppi93hriA6O_U1O1s31c,177
24
25
  webscout/Extra/gguf.md,sha256=Q6Cc8FPq_vlywTGiHTw7xkkwlPZdDYrVUy1lpKGyUYk,12864
25
- webscout/Extra/gguf.py,sha256=NhtgQnx9Sz3maRxQdYCOaCgpQXVXRLA8bBR3li1HN9U,29279
26
+ webscout/Extra/gguf.py,sha256=wmS_par39HshZYM3crtyRFhqTsPpFtSvfG-2u1QUHhA,56896
26
27
  webscout/Extra/weather.md,sha256=4eV07wV3-hkEnvF-cBRL91N4-QF5qOmaV-1I6TDPBLY,10062
27
28
  webscout/Extra/weather.py,sha256=Xfxzt43U5m7qpK3h4pzQ55Zh9JVu5HS6XUeLJccASkE,7841
28
29
  webscout/Extra/weather_ascii.py,sha256=k6U0F9w5xXPvYK-Wq3pjUh7W0gGJG4e_YhxeUI65Vpk,2612
@@ -81,6 +82,7 @@ webscout/Provider/ExaChat.py,sha256=us5sOKwGR7a36Oe24yinXvszLd5IKHMa93QgmeZwV60,
81
82
  webscout/Provider/Flowith.py,sha256=w5rpUmRkoAL-WqrKMyRrsTTDmsPN2Cc5zyRBy7_48mY,8605
82
83
  webscout/Provider/FreeGemini.py,sha256=lpsTlkzk7kcTfTODFKZFayQox9DmOM4Az7zTMV5bla0,11004
83
84
  webscout/Provider/Gemini.py,sha256=sM25PD6AxOFmiIab3ASbnrb-mbVHYJJ9Dc6bo1L4PJo,6806
85
+ webscout/Provider/GeminiProxy.py,sha256=7Lo9ffAqoHcSrMnBcnICuQmY0YOi_1F8oamPVfxPm1I,5589
84
86
  webscout/Provider/GithubChat.py,sha256=vBPjsLchav-kuond0D2kaIo8_QsrYDPYNwKF-D4yKPs,14662
85
87
  webscout/Provider/GizAI.py,sha256=o8liIlSPz0MDTqLLGwtLiX3iSAsEuJfX1Cl8UNGOpfQ,10865
86
88
  webscout/Provider/Glider.py,sha256=MbgKflBwSrvsOKW3Ya-ijKc3Hxh_L6LnD6tfUSFKsoQ,9342
@@ -92,7 +94,7 @@ webscout/Provider/Jadve.py,sha256=oJEdqchuS6a8FquVc26fxM_OJEPzWSMmjwRcHpw_18g,13
92
94
  webscout/Provider/Koboldai.py,sha256=K_bAuRMYRkHzN1Qjh0hP6N3oWN_2KoqHpucROmoyLUY,15363
93
95
  webscout/Provider/LambdaChat.py,sha256=jtlvMBQ2BSA2Cgcf2p3e7TZhOwWyH7wVo9q-WA9Fyco,18881
94
96
  webscout/Provider/Llama3.py,sha256=9f-7ha23OdvUthKUqLwBpSBBZzWPmadJPESyDOUKbC0,10770
95
- webscout/Provider/MCPCore.py,sha256=xdcmCvWlt5tA8jqdVbaDfChSLi2zroZiUY555X1zieE,12748
97
+ webscout/Provider/MCPCore.py,sha256=EFykzoDvifeLAiW6HJ-dtjPnaBB8EvxTGhPHi_uix8E,13070
96
98
  webscout/Provider/Marcus.py,sha256=JDjjpmimsWCgrRqZFPGxuHIZ5M98d2ijFzMie86CZvs,8352
97
99
  webscout/Provider/Nemotron.py,sha256=_hCFLNhynRX-rMtKXKRpKzrKKFzyWGlQ8uQC-8v0l6w,7948
98
100
  webscout/Provider/Netwrck.py,sha256=Fstf8bK5dnE4fRLKDumbdFsiF0EIW147AEgsbzezM6A,11812
@@ -106,6 +108,7 @@ webscout/Provider/Reka.py,sha256=dWw4vX91nJhAn-X1SXK72gttRaTqWNGUBFaeRJobTJg,851
106
108
  webscout/Provider/StandardInput.py,sha256=N9sgXqXxI9DlsIpHji5VTf8ryAKGTR2rCLOB0BuKBBY,14177
107
109
  webscout/Provider/TeachAnything.py,sha256=vFPTEJRk-P7PdYZF2-_h6_61P12dBCIx5MWu4elkYyM,9990
108
110
  webscout/Provider/TextPollinationsAI.py,sha256=p-N9HkaSGAoVfJi3ME1DXXzh10LoxGsUN01u9wU6Cxk,12826
111
+ webscout/Provider/TogetherAI.py,sha256=-UjR2v1-qthI7DFE1tQYWjM7ind2ZrOPDnq3f-ABgr4,14844
109
112
  webscout/Provider/TwoAI.py,sha256=T7EVecu9QnuESmDYTyxikOIJiMsfpPKtx4hp4CZ7tps,19951
110
113
  webscout/Provider/TypliAI.py,sha256=lfOyX2mGZBsmqqB4GafAzAhiV0U0C9RJf9I--hTw9Ik,11919
111
114
  webscout/Provider/Venice.py,sha256=Ggo2lAp4soViM6Z_LU9d9_cbadcpfrzOZ-3KreTEFxA,11044
@@ -114,7 +117,8 @@ webscout/Provider/WiseCat.py,sha256=TgsGFi6nSTls1_9yuGY-iITB5y2LobHoi5zvWZ8yWlY,
114
117
  webscout/Provider/WrDoChat.py,sha256=Idjrg0IEmeRU6V2qm8SGuqkNowSh5iVsC9N3krPP-l4,13902
115
118
  webscout/Provider/Writecream.py,sha256=_uNU1EcGpv80Xo47fye40FbQVuIWAUd6m9OUYZ3Khcc,9332
116
119
  webscout/Provider/WritingMate.py,sha256=fOZ5Tu1A-PKFpl10ekheEy0h0qclSoO__KkBrci_aiI,12332
117
- webscout/Provider/__init__.py,sha256=hEobtPoClYTVXlV5gC3dKm4F2ob_4WaFX8l2jBXo3jE,3866
120
+ webscout/Provider/XenAI.py,sha256=GZL9J_1yGc3ft2Uo3eq7jS2cZy0ytIPgQ6eNyEN1MAM,13514
121
+ webscout/Provider/__init__.py,sha256=l7yu0Cl8PKp250N9oojbEhlkpZCgfxQOd0jMfarFKhA,4050
118
122
  webscout/Provider/ai4chat.py,sha256=4PvQxPAWlaDgSyo5Dg1W6BVIUDTHq0rFK0H7rcBiCOI,6845
119
123
  webscout/Provider/akashgpt.py,sha256=iJke-aCmTT_8RmrJbSAZayhtIimum1h680diJwBxdOI,13045
120
124
  webscout/Provider/asksteve.py,sha256=qDRe4X6EmgOkhzRz8AAMYUSQFuO5k_84jwgPWKFkjGY,8985
@@ -122,6 +126,7 @@ webscout/Provider/cerebras.py,sha256=1A89aUVgMcwKPrSoQw1vHA1gQfsWxYbxV-MZ4EzwvqQ
122
126
  webscout/Provider/chatglm.py,sha256=CBiRhxe1yznhvyOaQPDf9Qu0SSfFvJ6LhTJCtHxsS0Q,8737
123
127
  webscout/Provider/cleeai.py,sha256=lgIBs5JpNaY-gfwUBorZdSeA_Q7tawfTvkWWTg7EfuI,7981
124
128
  webscout/Provider/copilot.py,sha256=MhDpo1ZHs-Uf-CEIYDB6J3t2rPeI9pP6QDCGffsBoIg,18844
129
+ webscout/Provider/deepseek_assistant.py,sha256=KdQ_Ldg_7jUpSIWmxgz6tXS-uOmE5rPKmJhjbeE6fUs,14557
125
130
  webscout/Provider/elmo.py,sha256=PiiRLwkyHsPmAY8uydd_TuWe2qVXbs_wfW5u4Ytbqp8,12875
126
131
  webscout/Provider/freeaichat.py,sha256=yKTGYYrv_v3xoOcsXc83F0qTBv5rjFKPuZQLX-vRhIQ,9963
127
132
  webscout/Provider/geminiapi.py,sha256=-_QbDBF_IiYyOJ0_uAIcE-gfzIs8H86nA5VWX52SRoY,8505
@@ -155,36 +160,35 @@ webscout/Provider/AISEARCH/Perplexity.py,sha256=AcKqelQfjR5TULqCSA7s6U5-T3zv4HXv
155
160
  webscout/Provider/AISEARCH/README.md,sha256=3WlTa-icOdDyyJpHsgmL0mfJ2BV_ViIC-hlMlRwbZYI,9693
156
161
  webscout/Provider/AISEARCH/__init__.py,sha256=wifrJ_94dA8eoD4fZplo4fPU2CvaJdjvmCPgPTTN_ls,261
157
162
  webscout/Provider/AISEARCH/felo_search.py,sha256=UPr6pOAoVIsEfqf_w9c10qv7HWtqHeXia0WMJEb8VMY,8408
158
- webscout/Provider/AISEARCH/genspark_search.py,sha256=GAsWWCY0ETTSCkD3u8lD-jDIASKXrA2cvYunkF0YZuc,16698
163
+ webscout/Provider/AISEARCH/genspark_search.py,sha256=dsTaopBuuiK09uo_Dw5yQQTkB3jL4UHdy60nPZmryoA,16670
159
164
  webscout/Provider/AISEARCH/hika_search.py,sha256=puGSf65CCVCj9w-C1lh2wPgNFlWr9TCNVjxO4WSj3O4,6757
160
165
  webscout/Provider/AISEARCH/iask_search.py,sha256=48f5z7hV_y_hAYH4J3Ywsj-sPG_7UHjsSbs90AUDKZA,17629
161
166
  webscout/Provider/AISEARCH/monica_search.py,sha256=5-6XHPCXw7eNyJt5WHosqegCAN39aGZauz4AEmuCdP0,8614
162
167
  webscout/Provider/AISEARCH/scira_search.py,sha256=OoozAGcyB4--XkohCltgdgBK1aNw4lEVTWQJI3D_0Z4,11371
163
168
  webscout/Provider/AISEARCH/webpilotai_search.py,sha256=eBjfuXB_HNkTL5Z_--JyrwH8e4cJ52hcwrB-rV0_KQU,11511
164
- webscout/Provider/HF_space/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
- webscout/Provider/HF_space/qwen_qwen2.py,sha256=IulE7bAMSbR530pFTanWzMFb4UJ9qF_NKoGiHkXxcjc,7612
166
- webscout/Provider/OPENAI/BLACKBOXAI.py,sha256=BVP9jwAWAq2Y76DqKQ0dgYfNA1fLg5V3FEGIFylPe3E,48145
169
+ webscout/Provider/OPENAI/BLACKBOXAI.py,sha256=NKH_iztuizDvT4aLugSgApZJdMLs26RFf5LiSafpkD8,48010
167
170
  webscout/Provider/OPENAI/Cloudflare.py,sha256=jGvB6iInA2U1hjZ5TVy_Pt3U47u0zEgyZireNYQVHIY,14765
168
171
  webscout/Provider/OPENAI/FalconH1.py,sha256=ISWDHCuR7hKZbmWesxG83n5ihq1v3a8HTWs_0gktse0,22454
169
172
  webscout/Provider/OPENAI/FreeGemini.py,sha256=8QNiVs4s9eh0g-lKSL4Y3J35C3P47GIe5MhuEmsI6Vw,11227
173
+ webscout/Provider/OPENAI/GeminiProxy.py,sha256=9_6VHFylM3-ct0m5XDvxfZ1tmd70RnyZl5HT-qv1g4E,11266
170
174
  webscout/Provider/OPENAI/NEMOTRON.py,sha256=ZwBgNe3b466zkJ7JYtzLvobQte-Gppk1_YOBGGk6Mc8,9731
171
175
  webscout/Provider/OPENAI/PI.py,sha256=MHkX7wsXJIdItwOfMMGEo8OzlZXIaolopBda7b_SpfQ,15185
172
176
  webscout/Provider/OPENAI/Qwen3.py,sha256=91wKmXhM8gXyP6pat7fspr1XW0clN91Spx_Cq8WBL7o,16073
173
- webscout/Provider/OPENAI/README.md,sha256=NSpBxRJsDyIR4S4wANIalhamNQpQGrCOBI8fZD97Nag,25085
177
+ webscout/Provider/OPENAI/README.md,sha256=Euuu_O5OMn52i6CPLWJLht_11LoFH2V7ygHun40e72o,25109
178
+ webscout/Provider/OPENAI/README_AUTOPROXY.md,sha256=EqZ8MJOg8LPdH5wzNHvvu40bUNYwqtozXaT7BL-NbEo,6244
174
179
  webscout/Provider/OPENAI/TogetherAI.py,sha256=i4XhBnYiS9t05qjUJMks8auMfnXAXmk1DrCVMsVaubM,14507
175
180
  webscout/Provider/OPENAI/TwoAI.py,sha256=seRAKgp10vg5ilacJ6f5kfXytVshM1Bx4b1VJvVNk34,14590
176
- webscout/Provider/OPENAI/__init__.py,sha256=JRYZiHQHQLxivyu77yr0Y451be6w-gl8VTfHh2yIY38,1243
181
+ webscout/Provider/OPENAI/__init__.py,sha256=wTeN_8MbB1upR0C4P6laA4asqOEM5OyofPT0ukDB-do,1590
177
182
  webscout/Provider/OPENAI/ai4chat.py,sha256=I0o7ZnGzG_2-PZfDDEbTMPh5OCx-4LfqfNcUFFdZAGY,11273
178
- webscout/Provider/OPENAI/api.py,sha256=BXsycY9f-oolfANKFko21tVapXNchji9_GV6eDIhe18,61555
179
- webscout/Provider/OPENAI/autoproxy.py,sha256=qPjrwpzSf3YFhaaoqXiasHznK2NQEgaJf90JfImeWQA,1228
180
- webscout/Provider/OPENAI/base.py,sha256=ZJv7l4ZcbDshes6cslhkiyrMdIbG8yiCxrIUv9jHBlg,13456
183
+ webscout/Provider/OPENAI/autoproxy.py,sha256=cuV_BkfN7lSRrNBceNaHi0zD_-ptdmrSY129kTPo_To,9910
184
+ webscout/Provider/OPENAI/base.py,sha256=RFWLMYVCpg1XtHvVAFrm2by0ZQAf7CMNXZ0vDlmNmE4,13820
181
185
  webscout/Provider/OPENAI/c4ai.py,sha256=f0rzU1a5B3NJDNfOjvFoyTlDdmwuwL_3NfFr2uKqkxY,15636
182
186
  webscout/Provider/OPENAI/chatgpt.py,sha256=z2R7GmsI-xVSrzVjnwmSXqm-SBuZAt9UE0DNvYXlPlc,20787
183
187
  webscout/Provider/OPENAI/chatgptclone.py,sha256=XHrp4lw9AD3wr9MW2Aar9H-6Aw8l-TgmCLXM9OiH8fE,20423
184
188
  webscout/Provider/OPENAI/chatsandbox.py,sha256=nmFQdZaj6puw28Hux57f-E8UYqNQnaMnQBOdhnd-ZQY,6999
185
189
  webscout/Provider/OPENAI/copilot.py,sha256=6I6BsRTRfYehZxraTf5r0flWUl3-QBwLMVFuc6XWe-Y,9395
186
190
  webscout/Provider/OPENAI/deepinfra.py,sha256=_P0ugEOVF1FffMXsa_SIQesXciqpOe3MMziK9jF3cM4,14684
187
- webscout/Provider/OPENAI/e2b.py,sha256=vgpb6A4vPEAeEogM2pjynbs2fc0HWpMAILuwVde4CnM,71440
191
+ webscout/Provider/OPENAI/e2b.py,sha256=sgLJ5FF-thlY8SYW0pqzFfQltiQfH6QwZqELydtUPFo,71438
188
192
  webscout/Provider/OPENAI/exaai.py,sha256=D7i2zpxQhjo_LRnO0nzAU651aOWgXM_9_AQjcRX2IY0,15066
189
193
  webscout/Provider/OPENAI/exachat.py,sha256=z95aqrunxVNlF_y_REGz_hhxirQP18DrBrGYlabiMlA,15632
190
194
  webscout/Provider/OPENAI/flowith.py,sha256=x9pZBfD_RLI1WhSmM8DitkGgcWSbbXzaC18nQUwBh9M,6481
@@ -193,17 +197,17 @@ webscout/Provider/OPENAI/glider.py,sha256=DpVOvgZZQXCuaHJPKGqrvis4EkVlXxX5s207nD
193
197
  webscout/Provider/OPENAI/groq.py,sha256=if3RBZmFwqSKtYPwlVzK_YGGGlFv4dRxw2obGs8MvRE,14564
194
198
  webscout/Provider/OPENAI/heckai.py,sha256=br0Zj_rvOCL1w_N3SVltiVlQQQhlCwAb-WOhaFaEwh4,11709
195
199
  webscout/Provider/OPENAI/llmchatco.py,sha256=CUcFgZuuV4njk9HEocnCGnLg7zcTB1k1awRJSHX5NFA,15371
196
- webscout/Provider/OPENAI/mcpcore.py,sha256=9cIelx-TjiFk3fiKVWSFuyyQkJqogKhWveoQ-PmIov8,17313
200
+ webscout/Provider/OPENAI/mcpcore.py,sha256=UsIAKXiO9F3p6m5yptjslAo60NJa5AmtcaQOqzDD3EU,18939
197
201
  webscout/Provider/OPENAI/multichat.py,sha256=r65SxO4GxolYCs5Phoys_1xZtIEqolyW-I539Zj_mXM,13989
198
202
  webscout/Provider/OPENAI/netwrck.py,sha256=vWeh8T3VdC4EdD6Rd-9PrdPOFQnl4RRqlBuXlSenvfE,13287
199
203
  webscout/Provider/OPENAI/oivscode.py,sha256=Gjw2SETSIkIGREk5BfdEkkQL_RjnI8jFcwxLmUvlzOE,11875
200
204
  webscout/Provider/OPENAI/opkfc.py,sha256=2YdpcNxMn2p3w9Z7mQ7g0dFJ17zzAgvnIM4UwCgynpM,21877
201
205
  webscout/Provider/OPENAI/pydantic_imports.py,sha256=Sg4zmm4xHWGZSsVwtUG9eS24JQLRECNjZLmrwce8ADc,3362
202
- webscout/Provider/OPENAI/scirachat.py,sha256=bAvM9pJW6cBPxaNQL6NPxLQYZO55depckW_xh88MFTM,19530
206
+ webscout/Provider/OPENAI/scirachat.py,sha256=T9C04sjdqV3wgjcqufuhxXoIicMG2bOu00FJ88Uvvt0,19173
203
207
  webscout/Provider/OPENAI/sonus.py,sha256=nRUJkK0T08Ao1WLF5ySmCpfH4x9C8wUXjezW4mygqJo,11159
204
208
  webscout/Provider/OPENAI/standardinput.py,sha256=xBHWMRZcPwDJZaQvszaZmKwFzV3wCpwnoynSvsIqhTQ,19547
205
209
  webscout/Provider/OPENAI/textpollinations.py,sha256=6KHxk41zvqPqhDNPSASHO-_QzpKPCM6KL4tpchgW3yw,13134
206
- webscout/Provider/OPENAI/toolbaz.py,sha256=J6Ao5swTj7aoVktlv2OgULOzKenQFq1svTzw9Ai6fNI,14601
210
+ webscout/Provider/OPENAI/toolbaz.py,sha256=jshJ8CY8K2pT3Lzl1dsoprjmiGlp5VxGU3hnHr4RSDk,14248
207
211
  webscout/Provider/OPENAI/typefully.py,sha256=yuOf1Idb6LCkK_YT4c9ABnjTuwRzSzffX-OAumSqrJQ,13004
208
212
  webscout/Provider/OPENAI/typegpt.py,sha256=AmujoLfxQnBt-2C_aWOnF6ra-xn5WKCASKTRuVjTv8k,14147
209
213
  webscout/Provider/OPENAI/uncovrAI.py,sha256=3a6h1ixmLZGglRuPVV1rhoDRgNkxTCVTuklegJ-6JY4,18333
@@ -212,14 +216,16 @@ webscout/Provider/OPENAI/venice.py,sha256=OLexvhEDEBe0r9mHiclwzDovU8OStQqouUUyeJ
212
216
  webscout/Provider/OPENAI/wisecat.py,sha256=fvD_Lz1wIpHiWTG2zdA5lr53vR3biHtMJ-1WZbkNnJQ,14071
213
217
  webscout/Provider/OPENAI/writecream.py,sha256=kiOJ-9iT5RNR1LDyZ_XoQCeVXZuPPnO_CdvEuZdk1s4,6529
214
218
  webscout/Provider/OPENAI/x0gpt.py,sha256=hPxmALMfGfOfkVBvMLYtImmlWXpHOW2adSbmvfKppx8,13043
215
- webscout/Provider/OPENAI/yep.py,sha256=dcNo8TgpWZqviK-aVrkTuDtmZr81LMeuJ-Mu7DMRC34,15888
219
+ webscout/Provider/OPENAI/xenai.py,sha256=wPXB9uam_igQ9iOjXBARmYBzD4hzRKy4vxGh8BosPEc,22531
220
+ webscout/Provider/OPENAI/yep.py,sha256=ksuKhFSbVw6_50pdg5Uf2qKjV-ND1WRkonLZuG2oBrk,16261
216
221
  webscout/Provider/STT/__init__.py,sha256=BWYNyzX5tgt68dL_WO6fQIZ8H6NpRJz-JQcEPXCy7Uc,98
217
222
  webscout/Provider/STT/base.py,sha256=Xue1mo6Lj00rRxU1lRsv_zQ7_igU7hLON7lHkw_Li28,8404
218
223
  webscout/Provider/STT/elevenlabs.py,sha256=lZs3HwGrnJ3jY81WeV1H7yJTVulitTE1lI2Lhkx42HA,9168
219
224
  webscout/Provider/TTI/README.md,sha256=v76lwYPMMKKsFyE6IAWISlQ06ergXFIUZrKeKk-RXa0,3040
220
- webscout/Provider/TTI/__init__.py,sha256=Mt_F5eNaTcJX-EG5LdUodUoHFKFKJ3v6KKBJ1Z7K6a8,230
225
+ webscout/Provider/TTI/__init__.py,sha256=4dwSFRz0LbmD1s6GZZkJAXkdDohIwQXVySWvSIhxT9M,251
221
226
  webscout/Provider/TTI/aiarta.py,sha256=0EA7HDOOl_IB-hLY8ythuxmJF0DSEEUSghoMfHV53hs,15962
222
227
  webscout/Provider/TTI/base.py,sha256=DCf8UfTM64D93DToY9Dc8KA-VgNIDFWVM-_nHp-wN5Q,5224
228
+ webscout/Provider/TTI/bing.py,sha256=OvB76EYAjNU3hsDZ76YqI-LpinCzFO4mWk3GXMIjG1A,10551
223
229
  webscout/Provider/TTI/fastflux.py,sha256=-Qqg-BTCb9JBI86abttQ55UtWbIud-lPi6Z6U7aHlN0,9674
224
230
  webscout/Provider/TTI/gpt1image.py,sha256=4xE5MFfjuKMc3lO3QCsEYvgidyoDhmvF7J1_sBqzmoU,4980
225
231
  webscout/Provider/TTI/imagen.py,sha256=1qoyUeoqrzbQ660P5TFIJQVuZnwZQL65tCNEIXjD7CY,6684
@@ -239,7 +245,7 @@ webscout/Provider/TTS/gesserit.py,sha256=v4ybdEMbux8J21Y7PSp3_axL3W2Naru5P_pmwP1
239
245
  webscout/Provider/TTS/murfai.py,sha256=9WA7_4n1p4OXbZY3WxwxDRTvsWN2ohDxKGqgYrZol84,4910
240
246
  webscout/Provider/TTS/openai_fm.py,sha256=WAbkBdGd0q_9QgXBm5hllSCr8TEmXEY2voaDjjbUfxI,5210
241
247
  webscout/Provider/TTS/parler.py,sha256=-JbH01Kq_sLVahu6PoJwq6c7JY_JtQOi8YmU1cLFZqU,4144
242
- webscout/Provider/TTS/speechma.py,sha256=v7o1NBMIsQDHVi3HaJOrVFjVsiYYo1v1QehM-LfwocU,28078
248
+ webscout/Provider/TTS/speechma.py,sha256=KOB56mmXNRG4_Dw1pjQnA25L4o_lvG-5Rh0anLp0Sf8,28605
243
249
  webscout/Provider/TTS/sthir.py,sha256=vEYmu4faOIeTcSfdSedUYVD3Vp3zu8-voq-g5aaMAog,3704
244
250
  webscout/Provider/TTS/streamElements.py,sha256=RowMh1VktGD9W_lGBqVJon_Bq8Ee2PRZNeUCDtDN8FU,10238
245
251
  webscout/Provider/TTS/utils.py,sha256=pO3GsBmIZ7CHywjOGyrdpHdvch40QMvfAfvAeRBp-O0,10886
@@ -250,6 +256,38 @@ webscout/Provider/UNFINISHED/fetch_together_models.py,sha256=IkGppAIbwIfvJRwzpyi
250
256
  webscout/Provider/UNFINISHED/liner_api_request.py,sha256=yTVXbqZMTyo5oOPX_FO95fO56TT5hkbt8r4PK7ahFqw,10558
251
257
  webscout/Provider/UNFINISHED/puterjs.py,sha256=Hhtz9PS8wSuG2BDUbPp2qLS5AQSAZzQ2viqC_-F-9yM,28225
252
258
  webscout/Provider/UNFINISHED/test_lmarena.py,sha256=-BfHfe14HbozIkYUNl2RqI5Ih2VdSXv6DInBlUfvMZk,3853
259
+ webscout/auth/__init__.py,sha256=vkti-hxpT_1iLcXAELbnLezy7TT3YI60QRt-fJjHyNs,1089
260
+ webscout/auth/api_key_manager.py,sha256=a3F4d2r7h3GqV-wxNj2vNLkU9o0-ld-XU9udt_CQL0g,6954
261
+ webscout/auth/auth_system.py,sha256=LPMtrqpi7EQhqdbWQ5RKu4nIhsT4CShvIEaF9Zo-khc,3171
262
+ webscout/auth/config.py,sha256=PLg6RS59DKdP0BMU71LbnikBuR9eZBouvzUsRQH3Ff4,2911
263
+ webscout/auth/database.py,sha256=OPZTkXtC75cwZkflHc2gheOANqDXrbUdKjfvNHNpWuQ,15455
264
+ webscout/auth/exceptions.py,sha256=FGqNLQmjv2i3Jk_P3csJzT4qkmVdBMdH7vFkM37Xa3Y,2048
265
+ webscout/auth/middleware.py,sha256=zSQBIt0LacbeyNjwRIfnO-tdE7-p0w77UkPd7aUTri0,9863
266
+ webscout/auth/models.py,sha256=zlHiAkOoXu5LdpOwVxsYmHXrxIu5DQb0Xli86800vaE,5018
267
+ webscout/auth/providers.py,sha256=1GMnqzSJ3J2EchMXdCvxVjxULlUCcxARcdjxKSpgi3I,10636
268
+ webscout/auth/rate_limiter.py,sha256=8l1CpUY5YkY8SPHvZxL2SejAkO93uNklwQeSbjRxU5A,9925
269
+ webscout/auth/request_models.py,sha256=hgo0AZ5CknEWCmZ4KBMs8T0xjmtlecbk645yU622Ujs,5804
270
+ webscout/auth/request_processing.py,sha256=1fs-sfiNAR04B5Rj4ui5EEjgPsBCXMqf73li6mQpDEU,10569
271
+ webscout/auth/routes.py,sha256=XCfRlOrz9qWFalVw0Qwb8jZVvPRAAUZOII7_uENWgSQ,24732
272
+ webscout/auth/schemas.py,sha256=fu3-V9F0n5AZ65A-fGGiBiuQcwk1Ec3urO7N30Nv90o,4577
273
+ webscout/auth/server.py,sha256=8ookrUYm7LEJZ-t4WmWfQ_qR-Si-VN9YeLlVaC50Cbk,12145
274
+ webscout/auth/swagger_ui.py,sha256=TQUt0y0A-TUrBfOH0RCrRCkbq-7fDMlfaeaij-fkRxA,8659
275
+ webscout/auth/static/favicon.svg,sha256=d1vxz4TLRKt2oV9W3gaoQuw1ydKg-Wk3mgQSK0uk8_w,548
276
+ webscout/auth/templates/swagger_ui.html,sha256=2_8rKou9WfqbeeWqfCFQLo9DpNpkpbR-E8qhdIkBQxg,6713
277
+ webscout/auth/templates/components/authentication.html,sha256=UXx2ixnsxdgkeWOoPT6ozYNNxw3lgNqcuqWozS8v-74,11495
278
+ webscout/auth/templates/components/base.html,sha256=R7I7v4s9Vuvl3qg-Peq6lVmU8mErc_uwQZvuycBby7c,4086
279
+ webscout/auth/templates/components/endpoints.html,sha256=631YiwacqNWZSnADBPcMzZD5SzTIdGa72Xap2Ak6twc,36921
280
+ webscout/auth/templates/components/examples.html,sha256=Lu60kvAknIytLcyLxihiTt1ottl_otTpv0Jnr3jA85A,16113
281
+ webscout/auth/templates/components/footer.html,sha256=l7XlPkhgQsCeaP_LkfuZ8C20w2ew28Xc_Yhc5NtM3Hc,3951
282
+ webscout/auth/templates/components/header.html,sha256=sbpcieP4l9yJR8DvxgKdIlIiRN9OSkBjfKkTv1IgN1w,1293
283
+ webscout/auth/templates/components/models.html,sha256=nym-1NzJv0LPh23vO2H-0M730y3D4d9tfB-ptt3eFVE,12311
284
+ webscout/auth/templates/components/navigation.html,sha256=wZOqiu-udzFntp_bs1EvbHD7hXwzf6A1fXXINYio-ho,2299
285
+ webscout/auth/templates/static/api.js,sha256=ds4LXqMnMyZkJOA2PdQbwtPhuabnlrUB5FokEk9fTK8,15738
286
+ webscout/auth/templates/static/icons.js,sha256=JFLe3fMNf7VD0GgXkJpud-LLpXZDso_sB0A1C0hB6to,7907
287
+ webscout/auth/templates/static/main.js,sha256=zRK6KuzZ5a5ZUu0O29mv9CBYbFzJUL25z5D75XmZSBY,29770
288
+ webscout/auth/templates/static/particles.js,sha256=xxcAEXq-D9jii7qMkTCAAr_mx1BHJfI6RekNKo6yZ_M,6748
289
+ webscout/auth/templates/static/styles.css,sha256=34rk8MiJCH4wxjP8Y44iFlbkT4hpU2B3ZhgvJ1nrUxI,79258
290
+ webscout/auth/templates/static/ui.js,sha256=h13Bl0Hm6AzEJpygUJNLCdWi5_ggIrqU5spidI5Wbls,13461
253
291
  webscout/litagent/Readme.md,sha256=UKBFkbJV8KXitJ6fievY9iUvZknS-it35xUu8A3hIO8,7806
254
292
  webscout/litagent/__init__.py,sha256=2HydGSdDVBZ7SRNgGzXX-TJiuol1sxzNJBw7wVAFueo,882
255
293
  webscout/litagent/agent.py,sha256=KSNLzfhM0XOoE_CuzsOPGf8Gg1pXoNcEnGwSes0vM4k,20548
@@ -257,11 +295,11 @@ webscout/litagent/constants.py,sha256=3_3tWXhmyZ2dFIO8f0YWL4CRkoFoL18h0_jNttTN7m
257
295
  webscout/litprinter/__init__.py,sha256=dEsi76uca5Art7tOc3ps240PPrWEVOdTLgR2pim1u9I,2510
258
296
  webscout/scout/README.md,sha256=vMMB_XT1F63YfZHpjisgfsuHE3uyT92EAiACCkjRxpE,12487
259
297
  webscout/scout/__init__.py,sha256=1dy8mhj4d-X_RDnb3Ip2LKC-2fqgP5zRsHkhdQjAGzE,333
260
- webscout/scout/element.py,sha256=D1BAPZrXttkYVMWsVoO7cgsyBWuZZxbi1YV3ua-1fgs,15475
298
+ webscout/scout/element.py,sha256=wLqfBhE2aQjvFEeTK_Qiy3ci-jR9rRrCskqgEo4gzUE,20068
261
299
  webscout/scout/utils.py,sha256=flBUjqjUZbzMDT8PJYMPxqXFpm1NlpIJHdhFC2ApnZ0,1006
262
300
  webscout/scout/core/__init__.py,sha256=ncF9MkM3iO1B2Ew_nOwzLQeeJ1xkCdoJ77CCZADD974,296
263
301
  webscout/scout/core/crawler.py,sha256=YPGUxHymAry_-WW9HM1SoYXjCYkUOvfGJNGpUsnTjPM,7802
264
- webscout/scout/core/scout.py,sha256=ve6IiF1D0qPLqOK8iMxyPz9cfPyF2WttmXJVbrwQNhU,20103
302
+ webscout/scout/core/scout.py,sha256=zbpm9H352HHItsQMrgzBWFILvDbAAjbF40EPt8XRBEE,23484
265
303
  webscout/scout/core/search_result.py,sha256=I5pmOhczAqY2wPgwx9lrZoeD4eHLn2VHlFCicaLXORI,2957
266
304
  webscout/scout/core/text_analyzer.py,sha256=gm30VZAnAH5DPgt6OhYd4bOriK-sSwgtEBqrx4NWm6o,1846
267
305
  webscout/scout/core/text_utils.py,sha256=vo5dVgtcMARWfHdH6NC5gAArBo4HYpqFsHKZYfkE7Jk,10813
@@ -274,13 +312,13 @@ webscout/swiftcli/Readme.md,sha256=KinBRfIqSBhxkKZOqlxxImiB4WGYsB0P1S1qspacQ4E,7
274
312
  webscout/swiftcli/__init__.py,sha256=FAC7D0Yu4KN2WGSpNSIVgGSJ9DlAVzqFLjbyUpxCwmc,1864
275
313
  webscout/swiftcli/exceptions.py,sha256=yd50TpIjxjL4pzgnEIJUThh6F6brI-jmajjuxqgH9EE,529
276
314
  webscout/swiftcli/core/__init__.py,sha256=IZfEWpDaV7_Lo5T0_ryp4ZRrH6egXrCJgdO3g1hGx5k,161
277
- webscout/swiftcli/core/cli.py,sha256=sNBdF8lmkuMrW_MijUYQI4TUv4BMZ6OXuFUn12b287Q,10030
315
+ webscout/swiftcli/core/cli.py,sha256=E9OS3RmG90Nc59nHTnnw2XvZDNnYhqo7qgVhzfrm1Tk,10518
278
316
  webscout/swiftcli/core/context.py,sha256=QTPkxk1HOZ128OFYC7W99ey1GoNi3n4YqjkqCjBjjiY,3043
279
317
  webscout/swiftcli/core/group.py,sha256=moOcP7ec0u80cxpw1bKW9eBti4sgwjJVmGLiU1OwKz0,7605
280
318
  webscout/swiftcli/decorators/__init__.py,sha256=YHsLyXnh4Rvn_hwg28y9lkTq2Hh4QVx4ohHfY3r-Wbw,648
281
319
  webscout/swiftcli/decorators/command.py,sha256=W-LFpXVOB2xbVg8f36phFxCoQFtQ7cwjqeaJ60OsVk8,6291
282
320
  webscout/swiftcli/decorators/options.py,sha256=6K6Ea8EoP98sDO-ia7Kx4GoK5OmRkFfsMPFIJxveByY,6608
283
- webscout/swiftcli/decorators/output.py,sha256=ZoX_Sb97cYiSvyGnNfllmahEya2HOxWkCugF5vkG2kU,7756
321
+ webscout/swiftcli/decorators/output.py,sha256=irVblWEZLq_-SqxcPBNbnPt_8Uev1QjT9FRjTJvcA98,9300
284
322
  webscout/swiftcli/plugins/__init__.py,sha256=1lKYyhzaZuOEwFiA4SjV8tnaxD2MuegkeR0LV0xKGmI,153
285
323
  webscout/swiftcli/plugins/base.py,sha256=mnyEfMD_Cqa_nWuHWZZ9F5YEZgSZK3yiCCRbl93c5Eg,3754
286
324
  webscout/swiftcli/plugins/manager.py,sha256=XtWnPA3pjQetCboAJqGE6M-hdZ12P3dKlawNtkOKYcw,8977
@@ -292,9 +330,9 @@ webscout/zeroart/__init__.py,sha256=3reMOf41PFtYVhq2wjFpJbIIHWRcy63efeUpolWm1P0,
292
330
  webscout/zeroart/base.py,sha256=nkf3WAE3YxKIpOFJ4Xf01T7dyWlbi98F1mIYo6vDux8,2365
293
331
  webscout/zeroart/effects.py,sha256=DOMPCNk-IwhnUrXsYSx5oSWeYQ6KN7T_jZOYdEofyMg,3345
294
332
  webscout/zeroart/fonts.py,sha256=ZiyQqA0BFN2IH5Ldijqe93rTiROmqPgxpeDtUNmmeRw,38812
295
- webscout-8.3.1.dist-info/licenses/LICENSE.md,sha256=hyfFlVn7pWcrvuvs-piB8k4J8DlXdOsYje9RyPxc6Ik,7543
296
- webscout-8.3.1.dist-info/METADATA,sha256=fJRF70KN5yz-7uSRu-n-eOp9es89VmEVLna4kgZYVJA,33998
297
- webscout-8.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
298
- webscout-8.3.1.dist-info/entry_points.txt,sha256=vNBz7_evRXZsauyv4kgW3oXUKS3r_yvMa_YP9-FLD8U,119
299
- webscout-8.3.1.dist-info/top_level.txt,sha256=nYIw7OKBQDr_Z33IzZUKidRD3zQEo8jOJYkMVMeN334,9
300
- webscout-8.3.1.dist-info/RECORD,,
333
+ webscout-8.3.2.dist-info/licenses/LICENSE.md,sha256=hyfFlVn7pWcrvuvs-piB8k4J8DlXdOsYje9RyPxc6Ik,7543
334
+ webscout-8.3.2.dist-info/METADATA,sha256=gG1bT7ToPX7-4l2JoSsDT2uldu7613AjdDO8BGOvGw4,34966
335
+ webscout-8.3.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
336
+ webscout-8.3.2.dist-info/entry_points.txt,sha256=WooZuMBei-kQl5qByoRMkc2cHsaDL1Jd2_tSYsNiUGg,116
337
+ webscout-8.3.2.dist-info/top_level.txt,sha256=nYIw7OKBQDr_Z33IzZUKidRD3zQEo8jOJYkMVMeN334,9
338
+ webscout-8.3.2.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  [console_scripts]
2
2
  WEBS = webscout.cli:main
3
3
  webscout = webscout.cli:main
4
- webscout-server = webscout.client:start_server
4
+ webscout-server = webscout.auth.server:main
File without changes
@@ -1,206 +0,0 @@
1
- from dataclasses import dataclass
2
- from enum import Enum
3
- import requests
4
- import json
5
- import re
6
- import uuid
7
- from typing import Union, List, Dict, Generator, Optional, Any, TypedDict, Final
8
-
9
- # Type definitions
10
- class Role(Enum):
11
- SYSTEM = "system"
12
- USER = "user"
13
- ASSISTANT = "assistant"
14
-
15
- class Message(TypedDict):
16
- role: str
17
- content: str
18
-
19
- class APIResponse(TypedDict):
20
- event_id: str
21
- fn_index: int
22
- data: List[Any]
23
-
24
- class StreamData(TypedDict):
25
- msg: str
26
- output: Dict[str, Any]
27
-
28
- @dataclass
29
- class APIConfig:
30
- url: Final[str] = "https://qwen-qwen2-72b-instruct.hf.space"
31
- api_endpoint: Final[str] = "https://qwen-qwen2-72b-instruct.hf.space/queue/join?"
32
-
33
- @dataclass
34
- class RequestHeaders:
35
- join: Dict[str, str]
36
- data: Dict[str, str]
37
-
38
- @classmethod
39
- def create_default(cls, base_url: str) -> 'RequestHeaders':
40
- common_headers = {
41
- 'accept-language': 'en-US,en;q=0.9',
42
- 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
43
- }
44
-
45
- return cls(
46
- join={
47
- **common_headers,
48
- 'accept': '*/*',
49
- 'content-type': 'application/json',
50
- 'origin': base_url,
51
- 'referer': f'{base_url}/',
52
- },
53
- data={
54
- **common_headers,
55
- 'accept': 'text/event-stream',
56
- 'referer': f'{base_url}/',
57
- }
58
- )
59
-
60
- class QwenAPI:
61
- def __init__(self, config: APIConfig = APIConfig()):
62
- self.config = config
63
- self.headers = RequestHeaders.create_default(config.url)
64
-
65
- @staticmethod
66
- def generate_session_hash() -> str:
67
- """Generate a unique session hash."""
68
- return str(uuid.uuid4()).replace('-', '')[:12]
69
-
70
- @staticmethod
71
- def format_prompt(messages: List[Message]) -> str:
72
- """
73
- Formats a list of messages into a single prompt string.
74
-
75
- Args:
76
- messages: A list of message dictionaries with "role" and "content" keys.
77
-
78
- Returns:
79
- str: The formatted prompt.
80
- """
81
- return "\n".join(f"{message['role']}: {message['content']}" for message in messages)
82
-
83
- def create_sync_generator(
84
- self,
85
- model: str,
86
- messages: List[Message],
87
- proxy: Optional[str] = None,
88
- **kwargs: Any
89
- ) -> Generator[str, None, None]:
90
- """
91
- Synchronously streams responses from the Qwen_Qwen2_72B_Instruct API.
92
-
93
- Args:
94
- model: The model to use for the request.
95
- messages: A list of message dictionaries with "role" and "content" keys.
96
- proxy: Optional proxy URL for the request.
97
- **kwargs: Additional keyword arguments.
98
-
99
- Yields:
100
- str: Text chunks from the API response.
101
-
102
- Raises:
103
- requests.exceptions.RequestException: If the API request fails.
104
- json.JSONDecodeError: If the response cannot be parsed as JSON.
105
- """
106
- session_hash: str = self.generate_session_hash()
107
-
108
- # Prepare the prompt
109
- system_messages: List[str] = [
110
- message["content"]
111
- for message in messages
112
- if message["role"] == Role.SYSTEM.value
113
- ]
114
- system_prompt: str = "\n".join(system_messages)
115
-
116
- user_messages: List[Message] = [
117
- message
118
- for message in messages
119
- if message["role"] != Role.SYSTEM.value
120
- ]
121
- prompt: str = self.format_prompt(user_messages)
122
-
123
- payload_join: Dict[str, Any] = {
124
- "data": [prompt, [], system_prompt],
125
- "event_data": None,
126
- "fn_index": 0,
127
- "trigger_id": 11,
128
- "session_hash": session_hash
129
- }
130
-
131
- with requests.Session() as session:
132
- # Send join request
133
- response = session.post(
134
- self.config.api_endpoint,
135
- headers=self.headers.join,
136
- json=payload_join
137
- )
138
- response.raise_for_status()
139
- event_data: APIResponse = response.json()
140
-
141
- # Prepare data stream request
142
- url_data: str = f'{self.config.url}/queue/data'
143
- params_data: Dict[str, str] = {'session_hash': session_hash}
144
-
145
- # Send data stream request
146
- full_response: str = ""
147
- final_full_response: str = ""
148
-
149
- with session.get(
150
- url_data,
151
- headers=self.headers.data,
152
- params=params_data,
153
- stream=True
154
- ) as response:
155
- response.raise_for_status()
156
-
157
- for line in response.iter_lines():
158
- if line:
159
- decoded_line: str = line.decode('utf-8')
160
- if decoded_line.startswith('data: '):
161
- try:
162
- json_data: StreamData = json.loads(decoded_line[6:])
163
-
164
- if json_data.get('msg') == 'process_generating':
165
- if 'output' in json_data and 'data' in json_data['output']:
166
- output_data: List[Any] = json_data['output']['data']
167
- if len(output_data) > 1 and len(output_data[1]) > 0:
168
- for item in output_data[1]:
169
- if isinstance(item, list) and len(item) > 1:
170
- fragment: str = str(item[1])
171
- if not re.match(r'^\[.*\]$', fragment) and not full_response.endswith(fragment):
172
- full_response += fragment
173
- yield fragment
174
-
175
- if json_data.get('msg') == 'process_completed':
176
- if 'output' in json_data and 'data' in json_data['output']:
177
- output_data = json_data['output']['data']
178
- if len(output_data) > 1 and len(output_data[1]) > 0:
179
- final_full_response = output_data[1][0][1]
180
-
181
- if final_full_response.startswith(full_response):
182
- final_full_response = final_full_response[len(full_response):]
183
-
184
- if final_full_response:
185
- yield final_full_response
186
- break
187
-
188
- except json.JSONDecodeError as e:
189
- print(f"Could not parse JSON: {decoded_line}")
190
- raise e
191
-
192
-
193
- def main() -> None:
194
- messages: List[Message] = [
195
- {"role": Role.SYSTEM.value, "content": "You are a helpful assistant."},
196
- {"role": Role.USER.value, "content": "LOL"}
197
- ]
198
-
199
- api = QwenAPI()
200
- for text in api.create_sync_generator("qwen-qwen2-72b-instruct", messages):
201
- print(text, end="", flush=True)
202
- print("\n---\n")
203
-
204
-
205
- if __name__ == "__main__":
206
- main()