webscout 8.2.8__py3-none-any.whl → 8.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/AIauto.py +34 -16
- webscout/AIbase.py +96 -37
- webscout/AIutel.py +491 -87
- webscout/Bard.py +441 -323
- webscout/Extra/GitToolkit/__init__.py +10 -10
- webscout/Extra/YTToolkit/ytapi/video.py +232 -232
- webscout/Litlogger/README.md +10 -0
- webscout/Litlogger/__init__.py +7 -59
- webscout/Litlogger/formats.py +4 -0
- webscout/Litlogger/handlers.py +103 -0
- webscout/Litlogger/levels.py +13 -0
- webscout/Litlogger/logger.py +92 -0
- webscout/Provider/AISEARCH/Perplexity.py +332 -358
- webscout/Provider/AISEARCH/felo_search.py +9 -35
- webscout/Provider/AISEARCH/genspark_search.py +30 -56
- webscout/Provider/AISEARCH/hika_search.py +4 -16
- webscout/Provider/AISEARCH/iask_search.py +410 -436
- webscout/Provider/AISEARCH/monica_search.py +4 -30
- webscout/Provider/AISEARCH/scira_search.py +6 -32
- webscout/Provider/AISEARCH/webpilotai_search.py +38 -64
- webscout/Provider/Blackboxai.py +155 -35
- webscout/Provider/ChatSandbox.py +2 -1
- webscout/Provider/Deepinfra.py +339 -339
- webscout/Provider/ExaChat.py +358 -358
- webscout/Provider/Gemini.py +169 -169
- webscout/Provider/GithubChat.py +1 -2
- webscout/Provider/Glider.py +3 -3
- webscout/Provider/HeckAI.py +172 -82
- webscout/Provider/LambdaChat.py +1 -0
- webscout/Provider/MCPCore.py +7 -3
- webscout/Provider/OPENAI/BLACKBOXAI.py +421 -139
- webscout/Provider/OPENAI/Cloudflare.py +38 -21
- webscout/Provider/OPENAI/FalconH1.py +457 -0
- webscout/Provider/OPENAI/FreeGemini.py +35 -18
- webscout/Provider/OPENAI/NEMOTRON.py +34 -34
- webscout/Provider/OPENAI/PI.py +427 -0
- webscout/Provider/OPENAI/Qwen3.py +304 -0
- webscout/Provider/OPENAI/README.md +952 -1253
- webscout/Provider/OPENAI/TwoAI.py +374 -0
- webscout/Provider/OPENAI/__init__.py +7 -1
- webscout/Provider/OPENAI/ai4chat.py +73 -63
- webscout/Provider/OPENAI/api.py +869 -644
- webscout/Provider/OPENAI/base.py +2 -0
- webscout/Provider/OPENAI/c4ai.py +34 -13
- webscout/Provider/OPENAI/chatgpt.py +575 -556
- webscout/Provider/OPENAI/chatgptclone.py +512 -487
- webscout/Provider/OPENAI/chatsandbox.py +11 -6
- webscout/Provider/OPENAI/copilot.py +258 -0
- webscout/Provider/OPENAI/deepinfra.py +327 -318
- webscout/Provider/OPENAI/e2b.py +140 -104
- webscout/Provider/OPENAI/exaai.py +420 -411
- webscout/Provider/OPENAI/exachat.py +448 -443
- webscout/Provider/OPENAI/flowith.py +7 -3
- webscout/Provider/OPENAI/freeaichat.py +12 -8
- webscout/Provider/OPENAI/glider.py +15 -8
- webscout/Provider/OPENAI/groq.py +5 -2
- webscout/Provider/OPENAI/heckai.py +311 -307
- webscout/Provider/OPENAI/llmchatco.py +9 -7
- webscout/Provider/OPENAI/mcpcore.py +18 -9
- webscout/Provider/OPENAI/multichat.py +7 -5
- webscout/Provider/OPENAI/netwrck.py +16 -11
- webscout/Provider/OPENAI/oivscode.py +290 -0
- webscout/Provider/OPENAI/opkfc.py +507 -496
- webscout/Provider/OPENAI/pydantic_imports.py +172 -0
- webscout/Provider/OPENAI/scirachat.py +29 -17
- webscout/Provider/OPENAI/sonus.py +308 -303
- webscout/Provider/OPENAI/standardinput.py +442 -433
- webscout/Provider/OPENAI/textpollinations.py +18 -11
- webscout/Provider/OPENAI/toolbaz.py +419 -413
- webscout/Provider/OPENAI/typefully.py +17 -10
- webscout/Provider/OPENAI/typegpt.py +21 -11
- webscout/Provider/OPENAI/uncovrAI.py +477 -462
- webscout/Provider/OPENAI/utils.py +90 -79
- webscout/Provider/OPENAI/venice.py +435 -425
- webscout/Provider/OPENAI/wisecat.py +387 -381
- webscout/Provider/OPENAI/writecream.py +166 -163
- webscout/Provider/OPENAI/x0gpt.py +26 -37
- webscout/Provider/OPENAI/yep.py +384 -356
- webscout/Provider/PI.py +2 -1
- webscout/Provider/TTI/README.md +55 -101
- webscout/Provider/TTI/__init__.py +4 -9
- webscout/Provider/TTI/aiarta.py +365 -0
- webscout/Provider/TTI/artbit.py +0 -0
- webscout/Provider/TTI/base.py +64 -0
- webscout/Provider/TTI/fastflux.py +200 -0
- webscout/Provider/TTI/magicstudio.py +201 -0
- webscout/Provider/TTI/piclumen.py +203 -0
- webscout/Provider/TTI/pixelmuse.py +225 -0
- webscout/Provider/TTI/pollinations.py +221 -0
- webscout/Provider/TTI/utils.py +11 -0
- webscout/Provider/TTS/__init__.py +2 -1
- webscout/Provider/TTS/base.py +159 -159
- webscout/Provider/TTS/openai_fm.py +129 -0
- webscout/Provider/TextPollinationsAI.py +308 -308
- webscout/Provider/TwoAI.py +239 -44
- webscout/Provider/UNFINISHED/Youchat.py +330 -330
- webscout/Provider/UNFINISHED/puterjs.py +635 -0
- webscout/Provider/UNFINISHED/test_lmarena.py +119 -119
- webscout/Provider/Writecream.py +246 -246
- webscout/Provider/__init__.py +2 -2
- webscout/Provider/ai4chat.py +33 -8
- webscout/Provider/granite.py +41 -6
- webscout/Provider/koala.py +169 -169
- webscout/Provider/oivscode.py +309 -0
- webscout/Provider/samurai.py +3 -2
- webscout/Provider/scnet.py +1 -0
- webscout/Provider/typegpt.py +3 -3
- webscout/Provider/uncovr.py +368 -368
- webscout/client.py +70 -0
- webscout/litprinter/__init__.py +58 -58
- webscout/optimizers.py +419 -419
- webscout/scout/README.md +3 -1
- webscout/scout/core/crawler.py +134 -64
- webscout/scout/core/scout.py +148 -109
- webscout/scout/element.py +106 -88
- webscout/swiftcli/Readme.md +323 -323
- webscout/swiftcli/plugins/manager.py +9 -2
- webscout/version.py +1 -1
- webscout/zeroart/__init__.py +134 -134
- webscout/zeroart/effects.py +100 -100
- webscout/zeroart/fonts.py +1238 -1238
- {webscout-8.2.8.dist-info → webscout-8.3.dist-info}/METADATA +160 -35
- webscout-8.3.dist-info/RECORD +290 -0
- {webscout-8.2.8.dist-info → webscout-8.3.dist-info}/WHEEL +1 -1
- {webscout-8.2.8.dist-info → webscout-8.3.dist-info}/entry_points.txt +1 -0
- webscout/Litlogger/Readme.md +0 -175
- webscout/Litlogger/core/__init__.py +0 -6
- webscout/Litlogger/core/level.py +0 -23
- webscout/Litlogger/core/logger.py +0 -165
- webscout/Litlogger/handlers/__init__.py +0 -12
- webscout/Litlogger/handlers/console.py +0 -33
- webscout/Litlogger/handlers/file.py +0 -143
- webscout/Litlogger/handlers/network.py +0 -173
- webscout/Litlogger/styles/__init__.py +0 -7
- webscout/Litlogger/styles/colors.py +0 -249
- webscout/Litlogger/styles/formats.py +0 -458
- webscout/Litlogger/styles/text.py +0 -87
- webscout/Litlogger/utils/__init__.py +0 -6
- webscout/Litlogger/utils/detectors.py +0 -153
- webscout/Litlogger/utils/formatters.py +0 -200
- webscout/Provider/ChatGPTGratis.py +0 -194
- webscout/Provider/TTI/AiForce/README.md +0 -159
- webscout/Provider/TTI/AiForce/__init__.py +0 -22
- webscout/Provider/TTI/AiForce/async_aiforce.py +0 -224
- webscout/Provider/TTI/AiForce/sync_aiforce.py +0 -245
- webscout/Provider/TTI/FreeAIPlayground/README.md +0 -99
- webscout/Provider/TTI/FreeAIPlayground/__init__.py +0 -9
- webscout/Provider/TTI/FreeAIPlayground/async_freeaiplayground.py +0 -181
- webscout/Provider/TTI/FreeAIPlayground/sync_freeaiplayground.py +0 -180
- webscout/Provider/TTI/ImgSys/README.md +0 -174
- webscout/Provider/TTI/ImgSys/__init__.py +0 -23
- webscout/Provider/TTI/ImgSys/async_imgsys.py +0 -202
- webscout/Provider/TTI/ImgSys/sync_imgsys.py +0 -195
- webscout/Provider/TTI/MagicStudio/README.md +0 -101
- webscout/Provider/TTI/MagicStudio/__init__.py +0 -2
- webscout/Provider/TTI/MagicStudio/async_magicstudio.py +0 -111
- webscout/Provider/TTI/MagicStudio/sync_magicstudio.py +0 -109
- webscout/Provider/TTI/Nexra/README.md +0 -155
- webscout/Provider/TTI/Nexra/__init__.py +0 -22
- webscout/Provider/TTI/Nexra/async_nexra.py +0 -286
- webscout/Provider/TTI/Nexra/sync_nexra.py +0 -258
- webscout/Provider/TTI/PollinationsAI/README.md +0 -146
- webscout/Provider/TTI/PollinationsAI/__init__.py +0 -23
- webscout/Provider/TTI/PollinationsAI/async_pollinations.py +0 -311
- webscout/Provider/TTI/PollinationsAI/sync_pollinations.py +0 -265
- webscout/Provider/TTI/aiarta/README.md +0 -134
- webscout/Provider/TTI/aiarta/__init__.py +0 -2
- webscout/Provider/TTI/aiarta/async_aiarta.py +0 -482
- webscout/Provider/TTI/aiarta/sync_aiarta.py +0 -440
- webscout/Provider/TTI/artbit/README.md +0 -100
- webscout/Provider/TTI/artbit/__init__.py +0 -22
- webscout/Provider/TTI/artbit/async_artbit.py +0 -155
- webscout/Provider/TTI/artbit/sync_artbit.py +0 -148
- webscout/Provider/TTI/fastflux/README.md +0 -129
- webscout/Provider/TTI/fastflux/__init__.py +0 -22
- webscout/Provider/TTI/fastflux/async_fastflux.py +0 -261
- webscout/Provider/TTI/fastflux/sync_fastflux.py +0 -252
- webscout/Provider/TTI/huggingface/README.md +0 -114
- webscout/Provider/TTI/huggingface/__init__.py +0 -22
- webscout/Provider/TTI/huggingface/async_huggingface.py +0 -199
- webscout/Provider/TTI/huggingface/sync_huggingface.py +0 -195
- webscout/Provider/TTI/piclumen/README.md +0 -161
- webscout/Provider/TTI/piclumen/__init__.py +0 -23
- webscout/Provider/TTI/piclumen/async_piclumen.py +0 -268
- webscout/Provider/TTI/piclumen/sync_piclumen.py +0 -233
- webscout/Provider/TTI/pixelmuse/README.md +0 -79
- webscout/Provider/TTI/pixelmuse/__init__.py +0 -4
- webscout/Provider/TTI/pixelmuse/async_pixelmuse.py +0 -249
- webscout/Provider/TTI/pixelmuse/sync_pixelmuse.py +0 -182
- webscout/Provider/TTI/talkai/README.md +0 -139
- webscout/Provider/TTI/talkai/__init__.py +0 -4
- webscout/Provider/TTI/talkai/async_talkai.py +0 -229
- webscout/Provider/TTI/talkai/sync_talkai.py +0 -207
- webscout/Provider/UNFINISHED/oivscode.py +0 -351
- webscout-8.2.8.dist-info/RECORD +0 -334
- {webscout-8.2.8.dist-info → webscout-8.3.dist-info}/licenses/LICENSE.md +0 -0
- {webscout-8.2.8.dist-info → webscout-8.3.dist-info}/top_level.txt +0 -0
|
@@ -37,6 +37,8 @@ class Completions(BaseCompletions):
|
|
|
37
37
|
stream: bool = False,
|
|
38
38
|
temperature: Optional[float] = None,
|
|
39
39
|
top_p: Optional[float] = None,
|
|
40
|
+
timeout: Optional[int] = None,
|
|
41
|
+
proxies: Optional[Dict[str, str]] = None,
|
|
40
42
|
**kwargs: Any
|
|
41
43
|
) -> Union[ChatCompletion, Generator[ChatCompletionChunk, None, None]]:
|
|
42
44
|
"""
|
|
@@ -76,7 +78,8 @@ class Completions(BaseCompletions):
|
|
|
76
78
|
url,
|
|
77
79
|
json=payload,
|
|
78
80
|
stream=True,
|
|
79
|
-
timeout=30
|
|
81
|
+
timeout=timeout or 30,
|
|
82
|
+
proxies=proxies
|
|
80
83
|
)
|
|
81
84
|
print(f"[DEBUG] Response status: {response.status_code}")
|
|
82
85
|
response.raise_for_status()
|
|
@@ -105,7 +108,8 @@ class Completions(BaseCompletions):
|
|
|
105
108
|
response = session.post(
|
|
106
109
|
url,
|
|
107
110
|
json=payload,
|
|
108
|
-
timeout=30
|
|
111
|
+
timeout=timeout or 30,
|
|
112
|
+
proxies=proxies
|
|
109
113
|
)
|
|
110
114
|
print(f"[DEBUG] Response status: {response.status_code}")
|
|
111
115
|
response.raise_for_status()
|
|
@@ -159,4 +163,4 @@ class Flowith(OpenAICompatibleProvider):
|
|
|
159
163
|
class _ModelList:
|
|
160
164
|
def list(inner_self):
|
|
161
165
|
return type(self).AVAILABLE_MODELS
|
|
162
|
-
return _ModelList()
|
|
166
|
+
return _ModelList()
|
|
@@ -8,7 +8,7 @@ from typing import List, Dict, Optional, Union, Generator, Any
|
|
|
8
8
|
from .base import OpenAICompatibleProvider, BaseChat, BaseCompletions
|
|
9
9
|
from .utils import (
|
|
10
10
|
ChatCompletionChunk, ChatCompletion, Choice, ChoiceDelta,
|
|
11
|
-
ChatCompletionMessage, CompletionUsage
|
|
11
|
+
ChatCompletionMessage, CompletionUsage, count_tokens
|
|
12
12
|
)
|
|
13
13
|
|
|
14
14
|
# Attempt to import LitAgent, fallback if not available
|
|
@@ -32,6 +32,8 @@ class Completions(BaseCompletions):
|
|
|
32
32
|
stream: bool = False,
|
|
33
33
|
temperature: Optional[float] = None,
|
|
34
34
|
top_p: Optional[float] = None,
|
|
35
|
+
timeout: Optional[int] = None,
|
|
36
|
+
proxies: Optional[Dict[str, str]] = None,
|
|
35
37
|
**kwargs: Any
|
|
36
38
|
) -> Union[ChatCompletion, Generator[ChatCompletionChunk, None, None]]:
|
|
37
39
|
"""
|
|
@@ -55,12 +57,12 @@ class Completions(BaseCompletions):
|
|
|
55
57
|
created_time = int(time.time())
|
|
56
58
|
|
|
57
59
|
if stream:
|
|
58
|
-
return self._create_stream(request_id, created_time, model, payload)
|
|
60
|
+
return self._create_stream(request_id, created_time, model, payload, timeout, proxies)
|
|
59
61
|
else:
|
|
60
|
-
return self._create_non_stream(request_id, created_time, model, payload)
|
|
62
|
+
return self._create_non_stream(request_id, created_time, model, payload, timeout, proxies)
|
|
61
63
|
|
|
62
64
|
def _create_stream(
|
|
63
|
-
self, request_id: str, created_time: int, model: str, payload: Dict[str, Any]
|
|
65
|
+
self, request_id: str, created_time: int, model: str, payload: Dict[str, Any], timeout: Optional[int] = None, proxies: Optional[Dict[str, str]] = None
|
|
64
66
|
) -> Generator[ChatCompletionChunk, None, None]:
|
|
65
67
|
try:
|
|
66
68
|
response = self._client.session.post(
|
|
@@ -68,7 +70,8 @@ class Completions(BaseCompletions):
|
|
|
68
70
|
headers=self._client.headers,
|
|
69
71
|
json=payload,
|
|
70
72
|
stream=True,
|
|
71
|
-
timeout=self._client.timeout
|
|
73
|
+
timeout=timeout or self._client.timeout,
|
|
74
|
+
proxies=proxies or getattr(self._client, "proxies", None)
|
|
72
75
|
)
|
|
73
76
|
|
|
74
77
|
# Handle non-200 responses
|
|
@@ -84,7 +87,7 @@ class Completions(BaseCompletions):
|
|
|
84
87
|
|
|
85
88
|
# Estimate prompt tokens based on message length
|
|
86
89
|
for msg in payload.get("messages", []):
|
|
87
|
-
prompt_tokens +=
|
|
90
|
+
prompt_tokens += count_tokens(msg.get("content", ""))
|
|
88
91
|
|
|
89
92
|
for line in response.iter_lines():
|
|
90
93
|
if not line:
|
|
@@ -169,14 +172,15 @@ class Completions(BaseCompletions):
|
|
|
169
172
|
raise IOError(f"FreeAIChat request failed: {e}") from e
|
|
170
173
|
|
|
171
174
|
def _create_non_stream(
|
|
172
|
-
self, request_id: str, created_time: int, model: str, payload: Dict[str, Any]
|
|
175
|
+
self, request_id: str, created_time: int, model: str, payload: Dict[str, Any], timeout: Optional[int] = None, proxies: Optional[Dict[str, str]] = None
|
|
173
176
|
) -> ChatCompletion:
|
|
174
177
|
try:
|
|
175
178
|
response = self._client.session.post(
|
|
176
179
|
self._client.api_endpoint,
|
|
177
180
|
headers=self._client.headers,
|
|
178
181
|
json=payload,
|
|
179
|
-
timeout=self._client.timeout
|
|
182
|
+
timeout=timeout or self._client.timeout,
|
|
183
|
+
proxies=proxies or getattr(self._client, "proxies", None)
|
|
180
184
|
)
|
|
181
185
|
|
|
182
186
|
# Handle non-200 responses
|
|
@@ -44,6 +44,8 @@ class Completions(BaseCompletions):
|
|
|
44
44
|
stream: bool = False,
|
|
45
45
|
temperature: Optional[float] = None,
|
|
46
46
|
top_p: Optional[float] = None,
|
|
47
|
+
timeout: Optional[int] = None,
|
|
48
|
+
proxies: Optional[Dict[str, str]] = None,
|
|
47
49
|
**kwargs: Any
|
|
48
50
|
) -> Union[ChatCompletion, Generator[ChatCompletionChunk, None, None]]:
|
|
49
51
|
"""
|
|
@@ -73,12 +75,12 @@ class Completions(BaseCompletions):
|
|
|
73
75
|
created_time = int(time.time())
|
|
74
76
|
|
|
75
77
|
if stream:
|
|
76
|
-
return self._create_stream(request_id, created_time, model, payload)
|
|
78
|
+
return self._create_stream(request_id, created_time, model, payload, timeout, proxies)
|
|
77
79
|
else:
|
|
78
|
-
return self._create_non_stream(request_id, created_time, model, payload)
|
|
80
|
+
return self._create_non_stream(request_id, created_time, model, payload, timeout, proxies)
|
|
79
81
|
|
|
80
82
|
def _create_stream(
|
|
81
|
-
self, request_id: str, created_time: int, model: str, payload: Dict[str, Any]
|
|
83
|
+
self, request_id: str, created_time: int, model: str, payload: Dict[str, Any], timeout: Optional[int] = None, proxies: Optional[Dict[str, str]] = None
|
|
82
84
|
) -> Generator[ChatCompletionChunk, None, None]:
|
|
83
85
|
try:
|
|
84
86
|
response = self._client.session.post(
|
|
@@ -86,7 +88,8 @@ class Completions(BaseCompletions):
|
|
|
86
88
|
headers=self._client.headers,
|
|
87
89
|
json=payload,
|
|
88
90
|
stream=True,
|
|
89
|
-
timeout=self._client.timeout
|
|
91
|
+
timeout=timeout or self._client.timeout,
|
|
92
|
+
proxies=proxies or getattr(self._client, "proxies", None)
|
|
90
93
|
)
|
|
91
94
|
response.raise_for_status()
|
|
92
95
|
|
|
@@ -143,8 +146,11 @@ class Completions(BaseCompletions):
|
|
|
143
146
|
system_fingerprint=data.get('system_fingerprint')
|
|
144
147
|
)
|
|
145
148
|
|
|
146
|
-
# Convert to dict
|
|
147
|
-
|
|
149
|
+
# Convert chunk to dict using Pydantic's API
|
|
150
|
+
if hasattr(chunk, "model_dump"):
|
|
151
|
+
chunk_dict = chunk.model_dump(exclude_none=True)
|
|
152
|
+
else:
|
|
153
|
+
chunk_dict = chunk.dict(exclude_none=True)
|
|
148
154
|
|
|
149
155
|
# Add usage information to match OpenAI format
|
|
150
156
|
# Even if we don't have real token counts, include estimated usage
|
|
@@ -183,14 +189,15 @@ class Completions(BaseCompletions):
|
|
|
183
189
|
raise
|
|
184
190
|
|
|
185
191
|
def _create_non_stream(
|
|
186
|
-
self, request_id: str, created_time: int, model: str, payload: Dict[str, Any]
|
|
192
|
+
self, request_id: str, created_time: int, model: str, payload: Dict[str, Any], timeout: Optional[int] = None, proxies: Optional[Dict[str, str]] = None
|
|
187
193
|
) -> ChatCompletion:
|
|
188
194
|
try:
|
|
189
195
|
response = self._client.session.post(
|
|
190
196
|
self._client.api_endpoint,
|
|
191
197
|
headers=self._client.headers,
|
|
192
198
|
json=payload,
|
|
193
|
-
timeout=self._client.timeout
|
|
199
|
+
timeout=timeout or self._client.timeout,
|
|
200
|
+
proxies=proxies or getattr(self._client, "proxies", None)
|
|
194
201
|
)
|
|
195
202
|
response.raise_for_status()
|
|
196
203
|
data = response.json()
|
webscout/Provider/OPENAI/groq.py
CHANGED
|
@@ -137,8 +137,11 @@ class Completions(BaseCompletions):
|
|
|
137
137
|
system_fingerprint=data.get('system_fingerprint')
|
|
138
138
|
)
|
|
139
139
|
|
|
140
|
-
# Convert to dict
|
|
141
|
-
|
|
140
|
+
# Convert chunk to dict using Pydantic's API
|
|
141
|
+
if hasattr(chunk, "model_dump"):
|
|
142
|
+
chunk_dict = chunk.model_dump(exclude_none=True)
|
|
143
|
+
else:
|
|
144
|
+
chunk_dict = chunk.dict(exclude_none=True)
|
|
142
145
|
|
|
143
146
|
# Add usage information to match OpenAI format
|
|
144
147
|
usage_dict = {
|