webscout 7.1__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/AIauto.py +191 -191
- webscout/AIbase.py +122 -122
- webscout/AIutel.py +440 -440
- webscout/Bard.py +343 -161
- webscout/DWEBS.py +489 -492
- webscout/Extra/YTToolkit/YTdownloader.py +995 -995
- webscout/Extra/YTToolkit/__init__.py +2 -2
- webscout/Extra/YTToolkit/transcriber.py +476 -479
- webscout/Extra/YTToolkit/ytapi/channel.py +307 -307
- webscout/Extra/YTToolkit/ytapi/playlist.py +58 -58
- webscout/Extra/YTToolkit/ytapi/pool.py +7 -7
- webscout/Extra/YTToolkit/ytapi/utils.py +62 -62
- webscout/Extra/YTToolkit/ytapi/video.py +103 -103
- webscout/Extra/autocoder/__init__.py +9 -9
- webscout/Extra/autocoder/autocoder_utiles.py +199 -199
- webscout/Extra/autocoder/rawdog.py +5 -7
- webscout/Extra/autollama.py +230 -230
- webscout/Extra/gguf.py +3 -3
- webscout/Extra/weather.py +171 -171
- webscout/LLM.py +442 -442
- webscout/Litlogger/__init__.py +67 -681
- webscout/Litlogger/core/__init__.py +6 -0
- webscout/Litlogger/core/level.py +23 -0
- webscout/Litlogger/core/logger.py +166 -0
- webscout/Litlogger/handlers/__init__.py +12 -0
- webscout/Litlogger/handlers/console.py +33 -0
- webscout/Litlogger/handlers/file.py +143 -0
- webscout/Litlogger/handlers/network.py +173 -0
- webscout/Litlogger/styles/__init__.py +7 -0
- webscout/Litlogger/styles/colors.py +249 -0
- webscout/Litlogger/styles/formats.py +460 -0
- webscout/Litlogger/styles/text.py +87 -0
- webscout/Litlogger/utils/__init__.py +6 -0
- webscout/Litlogger/utils/detectors.py +154 -0
- webscout/Litlogger/utils/formatters.py +200 -0
- webscout/Provider/AISEARCH/DeepFind.py +250 -250
- webscout/Provider/AISEARCH/ISou.py +277 -0
- webscout/Provider/AISEARCH/__init__.py +2 -1
- webscout/Provider/Blackboxai.py +3 -3
- webscout/Provider/ChatGPTGratis.py +226 -0
- webscout/Provider/Cloudflare.py +3 -4
- webscout/Provider/DeepSeek.py +218 -0
- webscout/Provider/Deepinfra.py +40 -24
- webscout/Provider/Free2GPT.py +131 -124
- webscout/Provider/Gemini.py +100 -115
- webscout/Provider/Glider.py +3 -3
- webscout/Provider/Groq.py +5 -1
- webscout/Provider/Jadve.py +3 -3
- webscout/Provider/Marcus.py +191 -192
- webscout/Provider/Netwrck.py +3 -3
- webscout/Provider/PI.py +2 -2
- webscout/Provider/PizzaGPT.py +2 -3
- webscout/Provider/QwenLM.py +311 -0
- webscout/Provider/TTI/AiForce/__init__.py +22 -22
- webscout/Provider/TTI/AiForce/async_aiforce.py +257 -257
- webscout/Provider/TTI/AiForce/sync_aiforce.py +242 -242
- webscout/Provider/TTI/FreeAIPlayground/__init__.py +9 -0
- webscout/Provider/TTI/FreeAIPlayground/async_freeaiplayground.py +206 -0
- webscout/Provider/TTI/FreeAIPlayground/sync_freeaiplayground.py +192 -0
- webscout/Provider/TTI/Nexra/__init__.py +22 -22
- webscout/Provider/TTI/Nexra/async_nexra.py +286 -286
- webscout/Provider/TTI/Nexra/sync_nexra.py +258 -258
- webscout/Provider/TTI/PollinationsAI/__init__.py +23 -23
- webscout/Provider/TTI/PollinationsAI/async_pollinations.py +330 -330
- webscout/Provider/TTI/PollinationsAI/sync_pollinations.py +285 -285
- webscout/Provider/TTI/__init__.py +2 -1
- webscout/Provider/TTI/artbit/__init__.py +22 -22
- webscout/Provider/TTI/artbit/async_artbit.py +184 -184
- webscout/Provider/TTI/artbit/sync_artbit.py +176 -176
- webscout/Provider/TTI/blackbox/__init__.py +4 -4
- webscout/Provider/TTI/blackbox/async_blackbox.py +212 -212
- webscout/Provider/TTI/blackbox/sync_blackbox.py +199 -199
- webscout/Provider/TTI/deepinfra/__init__.py +4 -4
- webscout/Provider/TTI/deepinfra/async_deepinfra.py +227 -227
- webscout/Provider/TTI/deepinfra/sync_deepinfra.py +199 -199
- webscout/Provider/TTI/huggingface/__init__.py +22 -22
- webscout/Provider/TTI/huggingface/async_huggingface.py +199 -199
- webscout/Provider/TTI/huggingface/sync_huggingface.py +195 -195
- webscout/Provider/TTI/imgninza/__init__.py +4 -4
- webscout/Provider/TTI/imgninza/async_ninza.py +214 -214
- webscout/Provider/TTI/imgninza/sync_ninza.py +209 -209
- webscout/Provider/TTI/talkai/__init__.py +4 -4
- webscout/Provider/TTI/talkai/async_talkai.py +229 -229
- webscout/Provider/TTI/talkai/sync_talkai.py +207 -207
- webscout/Provider/TTS/deepgram.py +182 -182
- webscout/Provider/TTS/elevenlabs.py +136 -136
- webscout/Provider/TTS/gesserit.py +150 -150
- webscout/Provider/TTS/murfai.py +138 -138
- webscout/Provider/TTS/parler.py +133 -134
- webscout/Provider/TTS/streamElements.py +360 -360
- webscout/Provider/TTS/utils.py +280 -280
- webscout/Provider/TTS/voicepod.py +116 -116
- webscout/Provider/TextPollinationsAI.py +28 -8
- webscout/Provider/WiseCat.py +193 -0
- webscout/Provider/__init__.py +146 -134
- webscout/Provider/cerebras.py +242 -227
- webscout/Provider/chatglm.py +204 -204
- webscout/Provider/dgaf.py +2 -3
- webscout/Provider/freeaichat.py +221 -0
- webscout/Provider/gaurish.py +2 -3
- webscout/Provider/geminiapi.py +208 -208
- webscout/Provider/granite.py +223 -0
- webscout/Provider/hermes.py +218 -218
- webscout/Provider/llama3mitril.py +179 -179
- webscout/Provider/llamatutor.py +3 -3
- webscout/Provider/llmchat.py +2 -3
- webscout/Provider/meta.py +794 -794
- webscout/Provider/multichat.py +331 -331
- webscout/Provider/typegpt.py +359 -359
- webscout/Provider/yep.py +3 -3
- webscout/__init__.py +1 -0
- webscout/__main__.py +5 -5
- webscout/cli.py +319 -319
- webscout/conversation.py +241 -242
- webscout/exceptions.py +328 -328
- webscout/litagent/__init__.py +28 -28
- webscout/litagent/agent.py +2 -3
- webscout/litprinter/__init__.py +0 -58
- webscout/scout/__init__.py +8 -8
- webscout/scout/core.py +884 -884
- webscout/scout/element.py +459 -459
- webscout/scout/parsers/__init__.py +69 -69
- webscout/scout/parsers/html5lib_parser.py +172 -172
- webscout/scout/parsers/html_parser.py +236 -236
- webscout/scout/parsers/lxml_parser.py +178 -178
- webscout/scout/utils.py +38 -38
- webscout/swiftcli/__init__.py +811 -811
- webscout/update_checker.py +2 -12
- webscout/version.py +1 -1
- webscout/webscout_search.py +87 -6
- webscout/webscout_search_async.py +58 -1
- webscout/yep_search.py +297 -0
- webscout/zeroart/__init__.py +54 -54
- webscout/zeroart/base.py +60 -60
- webscout/zeroart/effects.py +99 -99
- webscout/zeroart/fonts.py +816 -816
- {webscout-7.1.dist-info → webscout-7.3.dist-info}/METADATA +62 -22
- webscout-7.3.dist-info/RECORD +223 -0
- {webscout-7.1.dist-info → webscout-7.3.dist-info}/WHEEL +1 -1
- webstoken/__init__.py +30 -30
- webstoken/classifier.py +189 -189
- webstoken/keywords.py +216 -216
- webstoken/language.py +128 -128
- webstoken/ner.py +164 -164
- webstoken/normalizer.py +35 -35
- webstoken/processor.py +77 -77
- webstoken/sentiment.py +206 -206
- webstoken/stemmer.py +73 -73
- webstoken/tagger.py +60 -60
- webstoken/tokenizer.py +158 -158
- webscout-7.1.dist-info/RECORD +0 -198
- {webscout-7.1.dist-info → webscout-7.3.dist-info}/LICENSE.md +0 -0
- {webscout-7.1.dist-info → webscout-7.3.dist-info}/entry_points.txt +0 -0
- {webscout-7.1.dist-info → webscout-7.3.dist-info}/top_level.txt +0 -0
webscout/Provider/Glider.py
CHANGED
|
@@ -5,7 +5,7 @@ from typing import Any, Dict, Generator, Optional
|
|
|
5
5
|
from webscout.AIutel import Optimizers, Conversation, AwesomePrompts
|
|
6
6
|
from webscout.AIbase import Provider
|
|
7
7
|
from webscout import exceptions
|
|
8
|
-
from webscout.Litlogger import
|
|
8
|
+
from webscout.Litlogger import Logger, LogFormat
|
|
9
9
|
from webscout import LitAgent as Lit
|
|
10
10
|
|
|
11
11
|
class GliderAI(Provider):
|
|
@@ -39,10 +39,10 @@ class GliderAI(Provider):
|
|
|
39
39
|
if model not in self.AVAILABLE_MODELS:
|
|
40
40
|
raise ValueError(f"Invalid model: {model}. Choose from: {', '.join(self.AVAILABLE_MODELS)}")
|
|
41
41
|
|
|
42
|
-
self.logger =
|
|
42
|
+
self.logger = Logger(
|
|
43
43
|
name="GliderAI",
|
|
44
44
|
format=LogFormat.MODERN_EMOJI,
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
) if logging else None
|
|
47
47
|
|
|
48
48
|
if self.logger:
|
webscout/Provider/Groq.py
CHANGED
|
@@ -18,12 +18,16 @@ class GROQ(Provider):
|
|
|
18
18
|
AVAILABLE_MODELS = [
|
|
19
19
|
# "whisper-large-v3",
|
|
20
20
|
"llama3-70b-8192",
|
|
21
|
+
"qwen-2.5-32b",
|
|
22
|
+
"qwen-2.5-coder-32b",
|
|
23
|
+
"deepseek-r1-distill-qwen-32b",
|
|
24
|
+
"deepseek-r1-distill-llama-70b",
|
|
21
25
|
"llama-3.2-3b-preview",
|
|
22
26
|
"gemma2-9b-it",
|
|
23
27
|
"llama-3.2-11b-vision-preview",
|
|
24
28
|
"llama3-8b-8192",
|
|
25
29
|
"llama-3.3-70b-versatile",
|
|
26
|
-
"
|
|
30
|
+
"llama-3.2-11b-vision-preview",
|
|
27
31
|
# "distil-whisper-large-v3-en",
|
|
28
32
|
"mixtral-8x7b-32768",
|
|
29
33
|
"llama-3.3-70b-specdec",
|
webscout/Provider/Jadve.py
CHANGED
|
@@ -8,7 +8,7 @@ from webscout.AIutel import Optimizers, Conversation, AwesomePrompts
|
|
|
8
8
|
from webscout.AIbase import Provider
|
|
9
9
|
from webscout import exceptions
|
|
10
10
|
from webscout.litagent import LitAgent
|
|
11
|
-
from webscout.Litlogger import
|
|
11
|
+
from webscout.Litlogger import Logger, LogFormat
|
|
12
12
|
|
|
13
13
|
class JadveOpenAI(Provider):
|
|
14
14
|
"""
|
|
@@ -53,10 +53,10 @@ class JadveOpenAI(Provider):
|
|
|
53
53
|
if model not in self.AVAILABLE_MODELS:
|
|
54
54
|
raise ValueError(f"Invalid model: {model}. Choose from: {self.AVAILABLE_MODELS}")
|
|
55
55
|
|
|
56
|
-
self.logger =
|
|
56
|
+
self.logger = Logger(
|
|
57
57
|
name="JadveOpenAI",
|
|
58
58
|
format=LogFormat.MODERN_EMOJI,
|
|
59
|
-
|
|
59
|
+
|
|
60
60
|
) if logging else None
|
|
61
61
|
|
|
62
62
|
if self.logger:
|
webscout/Provider/Marcus.py
CHANGED
|
@@ -1,192 +1,191 @@
|
|
|
1
|
-
import requests
|
|
2
|
-
import json
|
|
3
|
-
from typing import Any, Dict, Optional, Generator
|
|
4
|
-
|
|
5
|
-
from webscout.AIutel import Optimizers
|
|
6
|
-
from webscout.AIutel import Conversation
|
|
7
|
-
from webscout.AIutel import AwesomePrompts
|
|
8
|
-
from webscout.AIbase import Provider
|
|
9
|
-
from webscout import exceptions
|
|
10
|
-
from webscout.Litlogger import
|
|
11
|
-
from webscout import LitAgent as Lit
|
|
12
|
-
|
|
13
|
-
class Marcus(Provider):
|
|
14
|
-
"""
|
|
15
|
-
This class provides methods for interacting with the AskMarcus API.
|
|
16
|
-
Improved to match webscout provider standards with comprehensive logging.
|
|
17
|
-
"""
|
|
18
|
-
|
|
19
|
-
def __init__(
|
|
20
|
-
self,
|
|
21
|
-
is_conversation: bool = True,
|
|
22
|
-
max_tokens: int = 2048,
|
|
23
|
-
timeout: int = 30,
|
|
24
|
-
intro: str = None,
|
|
25
|
-
filepath: str = None,
|
|
26
|
-
update_file: bool = True,
|
|
27
|
-
proxies: dict = {},
|
|
28
|
-
history_offset: int = 10250,
|
|
29
|
-
act: str = None,
|
|
30
|
-
logging: bool = False
|
|
31
|
-
):
|
|
32
|
-
"""Initializes the Marcus API with logging capabilities."""
|
|
33
|
-
self.logger =
|
|
34
|
-
name="Marcus",
|
|
35
|
-
format=LogFormat.MODERN_EMOJI,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
self.
|
|
43
|
-
self.
|
|
44
|
-
self.
|
|
45
|
-
self.
|
|
46
|
-
self.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
'
|
|
51
|
-
'
|
|
52
|
-
'
|
|
53
|
-
'
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
method
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
self.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
self.logger.debug(f"
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
self.
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
)
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
"
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
print(chunk, end="", flush=True)
|
|
1
|
+
import requests
|
|
2
|
+
import json
|
|
3
|
+
from typing import Any, Dict, Optional, Generator
|
|
4
|
+
|
|
5
|
+
from webscout.AIutel import Optimizers
|
|
6
|
+
from webscout.AIutel import Conversation
|
|
7
|
+
from webscout.AIutel import AwesomePrompts
|
|
8
|
+
from webscout.AIbase import Provider
|
|
9
|
+
from webscout import exceptions
|
|
10
|
+
from webscout.Litlogger import Logger, LogFormat
|
|
11
|
+
from webscout import LitAgent as Lit
|
|
12
|
+
|
|
13
|
+
class Marcus(Provider):
|
|
14
|
+
"""
|
|
15
|
+
This class provides methods for interacting with the AskMarcus API.
|
|
16
|
+
Improved to match webscout provider standards with comprehensive logging.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
def __init__(
|
|
20
|
+
self,
|
|
21
|
+
is_conversation: bool = True,
|
|
22
|
+
max_tokens: int = 2048,
|
|
23
|
+
timeout: int = 30,
|
|
24
|
+
intro: str = None,
|
|
25
|
+
filepath: str = None,
|
|
26
|
+
update_file: bool = True,
|
|
27
|
+
proxies: dict = {},
|
|
28
|
+
history_offset: int = 10250,
|
|
29
|
+
act: str = None,
|
|
30
|
+
logging: bool = False
|
|
31
|
+
):
|
|
32
|
+
"""Initializes the Marcus API with logging capabilities."""
|
|
33
|
+
self.logger = Logger(
|
|
34
|
+
name="Marcus",
|
|
35
|
+
format=LogFormat.MODERN_EMOJI,
|
|
36
|
+
) if logging else None
|
|
37
|
+
|
|
38
|
+
if self.logger:
|
|
39
|
+
self.logger.info("Initializing Marcus API")
|
|
40
|
+
|
|
41
|
+
self.session = requests.Session()
|
|
42
|
+
self.is_conversation = is_conversation
|
|
43
|
+
self.max_tokens_to_sample = max_tokens
|
|
44
|
+
self.api_endpoint = "https://www.askmarcus.app/api/response"
|
|
45
|
+
self.timeout = timeout
|
|
46
|
+
self.last_response = {}
|
|
47
|
+
|
|
48
|
+
self.headers = {
|
|
49
|
+
'content-type': 'application/json',
|
|
50
|
+
'accept': '*/*',
|
|
51
|
+
'origin': 'https://www.askmarcus.app',
|
|
52
|
+
'referer': 'https://www.askmarcus.app/chat',
|
|
53
|
+
'user-agent': Lit().random(),
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
self.__available_optimizers = (
|
|
57
|
+
method
|
|
58
|
+
for method in dir(Optimizers)
|
|
59
|
+
if callable(getattr(Optimizers, method)) and not method.startswith("__")
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
Conversation.intro = (
|
|
63
|
+
AwesomePrompts().get_act(
|
|
64
|
+
act, raise_not_found=True, default=None, case_insensitive=True
|
|
65
|
+
)
|
|
66
|
+
if act
|
|
67
|
+
else intro or Conversation.intro
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
self.conversation = Conversation(
|
|
71
|
+
is_conversation, self.max_tokens_to_sample, filepath, update_file
|
|
72
|
+
)
|
|
73
|
+
self.conversation.history_offset = history_offset
|
|
74
|
+
self.session.proxies = proxies
|
|
75
|
+
|
|
76
|
+
if self.logger:
|
|
77
|
+
self.logger.info("Marcus API initialized successfully")
|
|
78
|
+
|
|
79
|
+
def ask(
|
|
80
|
+
self,
|
|
81
|
+
prompt: str,
|
|
82
|
+
stream: bool = False,
|
|
83
|
+
raw: bool = False,
|
|
84
|
+
optimizer: str = None,
|
|
85
|
+
conversationally: bool = False,
|
|
86
|
+
) -> Dict[str, Any] | Generator[str, None, None]:
|
|
87
|
+
"""Sends a prompt to the AskMarcus API and returns the response with logging."""
|
|
88
|
+
if self.logger:
|
|
89
|
+
self.logger.debug(f"Processing request - Prompt: {prompt[:50]}...")
|
|
90
|
+
self.logger.debug(f"Stream: {stream}, Optimizer: {optimizer}")
|
|
91
|
+
|
|
92
|
+
conversation_prompt = self.conversation.gen_complete_prompt(prompt)
|
|
93
|
+
if optimizer:
|
|
94
|
+
if optimizer in self.__available_optimizers:
|
|
95
|
+
conversation_prompt = getattr(Optimizers, optimizer)(
|
|
96
|
+
conversation_prompt if conversationally else prompt
|
|
97
|
+
)
|
|
98
|
+
if self.logger:
|
|
99
|
+
self.logger.debug(f"Applied optimizer: {optimizer}")
|
|
100
|
+
else:
|
|
101
|
+
if self.logger:
|
|
102
|
+
self.logger.error(f"Invalid optimizer requested: {optimizer}")
|
|
103
|
+
raise exceptions.FailedToGenerateResponseError(
|
|
104
|
+
f"Optimizer is not one of {self.__available_optimizers}"
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
data = {"message": conversation_prompt}
|
|
108
|
+
|
|
109
|
+
def for_stream():
|
|
110
|
+
try:
|
|
111
|
+
if self.logger:
|
|
112
|
+
self.logger.debug("Initiating streaming request to API")
|
|
113
|
+
|
|
114
|
+
with requests.post(
|
|
115
|
+
self.api_endpoint,
|
|
116
|
+
headers=self.headers,
|
|
117
|
+
json=data,
|
|
118
|
+
stream=True,
|
|
119
|
+
timeout=self.timeout
|
|
120
|
+
) as response:
|
|
121
|
+
response.raise_for_status()
|
|
122
|
+
|
|
123
|
+
if self.logger:
|
|
124
|
+
self.logger.info(f"API connection established successfully. Status: {response.status_code}")
|
|
125
|
+
|
|
126
|
+
for line in response.iter_lines():
|
|
127
|
+
if line:
|
|
128
|
+
yield line.decode('utf-8')
|
|
129
|
+
|
|
130
|
+
self.conversation.update_chat_history(
|
|
131
|
+
prompt, self.get_message(self.last_response)
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
except requests.exceptions.RequestException as e:
|
|
135
|
+
if self.logger:
|
|
136
|
+
self.logger.error(f"API request failed: {str(e)}")
|
|
137
|
+
raise exceptions.ProviderConnectionError(f"Error connecting to Marcus: {str(e)}")
|
|
138
|
+
|
|
139
|
+
def for_non_stream():
|
|
140
|
+
if self.logger:
|
|
141
|
+
self.logger.debug("Processing non-streaming request")
|
|
142
|
+
|
|
143
|
+
full_response = ""
|
|
144
|
+
for line in for_stream():
|
|
145
|
+
full_response += line
|
|
146
|
+
self.last_response = {"text": full_response}
|
|
147
|
+
|
|
148
|
+
if self.logger:
|
|
149
|
+
self.logger.debug("Response processing completed")
|
|
150
|
+
|
|
151
|
+
return self.last_response
|
|
152
|
+
|
|
153
|
+
return for_stream() if stream else for_non_stream()
|
|
154
|
+
|
|
155
|
+
def chat(
|
|
156
|
+
self,
|
|
157
|
+
prompt: str,
|
|
158
|
+
stream: bool = False,
|
|
159
|
+
optimizer: str = None,
|
|
160
|
+
conversationally: bool = False,
|
|
161
|
+
) -> str | Generator[str, None, None]:
|
|
162
|
+
"""Generates a response from the AskMarcus API with logging."""
|
|
163
|
+
if self.logger:
|
|
164
|
+
self.logger.debug(f"Chat request initiated - Prompt: {prompt[:50]}...")
|
|
165
|
+
|
|
166
|
+
def for_stream():
|
|
167
|
+
for response_chunk in self.ask(
|
|
168
|
+
prompt, stream=True, optimizer=optimizer, conversationally=conversationally
|
|
169
|
+
):
|
|
170
|
+
yield response_chunk
|
|
171
|
+
|
|
172
|
+
def for_non_stream():
|
|
173
|
+
response = self.ask(
|
|
174
|
+
prompt, stream=False, optimizer=optimizer, conversationally=conversationally
|
|
175
|
+
)
|
|
176
|
+
return self.get_message(response)
|
|
177
|
+
|
|
178
|
+
return for_stream() if stream else for_non_stream()
|
|
179
|
+
|
|
180
|
+
def get_message(self, response: Dict[str, Any]) -> str:
|
|
181
|
+
"""Extracts the message from the API response."""
|
|
182
|
+
assert isinstance(response, dict), "Response should be of dict data-type only"
|
|
183
|
+
return response.get("text", "")
|
|
184
|
+
|
|
185
|
+
if __name__ == "__main__":
|
|
186
|
+
from rich import print
|
|
187
|
+
# Enable logging for testing
|
|
188
|
+
ai = Marcus(logging=True)
|
|
189
|
+
response = ai.chat(input(">>> "), stream=True)
|
|
190
|
+
for chunk in response:
|
|
191
|
+
print(chunk, end="", flush=True)
|
webscout/Provider/Netwrck.py
CHANGED
|
@@ -8,7 +8,7 @@ from datetime import date
|
|
|
8
8
|
from webscout.AIutel import Optimizers, Conversation, AwesomePrompts
|
|
9
9
|
from webscout.AIbase import Provider
|
|
10
10
|
from webscout import exceptions
|
|
11
|
-
from webscout.Litlogger import
|
|
11
|
+
from webscout.Litlogger import Logger, LogFormat
|
|
12
12
|
from webscout.litagent import LitAgent
|
|
13
13
|
|
|
14
14
|
class Netwrck(Provider):
|
|
@@ -49,10 +49,10 @@ class Netwrck(Provider):
|
|
|
49
49
|
):
|
|
50
50
|
"""Initializes the Netwrck API client."""
|
|
51
51
|
# Initialize logger first for initialization logging
|
|
52
|
-
self.logger =
|
|
52
|
+
self.logger = Logger(
|
|
53
53
|
name="Netwrck",
|
|
54
54
|
format=LogFormat.MODERN_EMOJI,
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
) if logging else None
|
|
57
57
|
|
|
58
58
|
if model not in self.AVAILABLE_MODELS:
|
webscout/Provider/PI.py
CHANGED
|
@@ -10,7 +10,7 @@ from webscout.AIutel import AwesomePrompts
|
|
|
10
10
|
from webscout.AIbase import Provider
|
|
11
11
|
from typing import Dict, Union, Any, Optional
|
|
12
12
|
from webscout import LitAgent
|
|
13
|
-
from webscout.Litlogger import
|
|
13
|
+
from webscout.Litlogger import Logger, LogFormat
|
|
14
14
|
|
|
15
15
|
class PiAI(Provider):
|
|
16
16
|
"""
|
|
@@ -96,7 +96,7 @@ class PiAI(Provider):
|
|
|
96
96
|
self.conversation.history_offset = history_offset
|
|
97
97
|
self.session.proxies = proxies
|
|
98
98
|
|
|
99
|
-
self.logger =
|
|
99
|
+
self.logger = Logger(name="PiAI", format=LogFormat.MODERN_EMOJI) if logging else None
|
|
100
100
|
|
|
101
101
|
self.knowledge_cutoff = "December 2023"
|
|
102
102
|
|
webscout/Provider/PizzaGPT.py
CHANGED
|
@@ -6,7 +6,7 @@ from webscout.AIutel import Optimizers, Conversation, AwesomePrompts
|
|
|
6
6
|
from webscout.AIbase import Provider
|
|
7
7
|
from webscout import exceptions
|
|
8
8
|
from webscout import LitAgent as Lit
|
|
9
|
-
from webscout.Litlogger import
|
|
9
|
+
from webscout.Litlogger import Logger, LogFormat
|
|
10
10
|
|
|
11
11
|
class PIZZAGPT(Provider):
|
|
12
12
|
"""
|
|
@@ -68,10 +68,9 @@ class PIZZAGPT(Provider):
|
|
|
68
68
|
self.conversation.history_offset = history_offset
|
|
69
69
|
self.session.proxies = proxies
|
|
70
70
|
|
|
71
|
-
self.logger =
|
|
71
|
+
self.logger = Logger(
|
|
72
72
|
name="PIZZAGPT",
|
|
73
73
|
format=LogFormat.MODERN_EMOJI,
|
|
74
|
-
color_scheme=ColorScheme.CYBERPUNK
|
|
75
74
|
) if logging else None
|
|
76
75
|
|
|
77
76
|
if self.logger:
|