webscout 6.5__py3-none-any.whl → 6.7__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 (70) hide show
  1. webscout/Extra/autocoder/autocoder_utiles.py +119 -101
  2. webscout/Extra/weather.py +5 -5
  3. webscout/Provider/AISEARCH/__init__.py +2 -0
  4. webscout/Provider/AISEARCH/ooai.py +155 -0
  5. webscout/Provider/Amigo.py +70 -85
  6. webscout/Provider/{prefind.py → Jadve.py} +72 -70
  7. webscout/Provider/Netwrck.py +239 -0
  8. webscout/Provider/Openai.py +4 -3
  9. webscout/Provider/PI.py +2 -2
  10. webscout/Provider/PizzaGPT.py +3 -3
  11. webscout/Provider/TeachAnything.py +15 -2
  12. webscout/Provider/Youchat.py +42 -8
  13. webscout/Provider/__init__.py +134 -147
  14. webscout/Provider/meta.py +1 -1
  15. webscout/Provider/multichat.py +230 -0
  16. webscout/Provider/promptrefine.py +2 -2
  17. webscout/Provider/talkai.py +10 -13
  18. webscout/Provider/turboseek.py +5 -4
  19. webscout/Provider/tutorai.py +8 -112
  20. webscout/Provider/typegpt.py +4 -5
  21. webscout/Provider/x0gpt.py +81 -9
  22. webscout/Provider/yep.py +123 -361
  23. webscout/__init__.py +10 -1
  24. webscout/cli.py +31 -39
  25. webscout/conversation.py +24 -9
  26. webscout/exceptions.py +188 -20
  27. webscout/litprinter/__init__.py +19 -123
  28. webscout/litprinter/colors.py +54 -0
  29. webscout/optimizers.py +335 -185
  30. webscout/scout/__init__.py +2 -5
  31. webscout/scout/core/__init__.py +7 -0
  32. webscout/scout/core/crawler.py +140 -0
  33. webscout/scout/core/scout.py +571 -0
  34. webscout/scout/core/search_result.py +96 -0
  35. webscout/scout/core/text_analyzer.py +63 -0
  36. webscout/scout/core/text_utils.py +277 -0
  37. webscout/scout/core/web_analyzer.py +52 -0
  38. webscout/scout/element.py +6 -5
  39. webscout/update_checker.py +117 -58
  40. webscout/version.py +1 -1
  41. webscout/webscout_search.py +1 -1
  42. webscout/zeroart/base.py +15 -16
  43. webscout/zeroart/effects.py +1 -1
  44. webscout/zeroart/fonts.py +1 -1
  45. {webscout-6.5.dist-info → webscout-6.7.dist-info}/METADATA +9 -172
  46. {webscout-6.5.dist-info → webscout-6.7.dist-info}/RECORD +63 -45
  47. {webscout-6.5.dist-info → webscout-6.7.dist-info}/entry_points.txt +1 -1
  48. webscout-6.7.dist-info/top_level.txt +2 -0
  49. webstoken/__init__.py +30 -0
  50. webstoken/classifier.py +189 -0
  51. webstoken/keywords.py +216 -0
  52. webstoken/language.py +128 -0
  53. webstoken/ner.py +164 -0
  54. webstoken/normalizer.py +35 -0
  55. webstoken/processor.py +77 -0
  56. webstoken/sentiment.py +206 -0
  57. webstoken/stemmer.py +73 -0
  58. webstoken/t.py +75 -0
  59. webstoken/tagger.py +60 -0
  60. webstoken/tokenizer.py +158 -0
  61. webscout/Provider/Perplexity.py +0 -591
  62. webscout/Provider/RoboCoders.py +0 -206
  63. webscout/Provider/genspark.py +0 -225
  64. webscout/Provider/perplexitylabs.py +0 -265
  65. webscout/Provider/twitterclone.py +0 -251
  66. webscout/Provider/upstage.py +0 -230
  67. webscout-6.5.dist-info/top_level.txt +0 -1
  68. /webscout/Provider/{felo_search.py → AISEARCH/felo_search.py} +0 -0
  69. {webscout-6.5.dist-info → webscout-6.7.dist-info}/LICENSE.md +0 -0
  70. {webscout-6.5.dist-info → webscout-6.7.dist-info}/WHEEL +0 -0
@@ -1,113 +1,15 @@
1
1
  import requests
2
2
  import os
3
- import time
4
3
  from typing import List, Optional
5
4
  from string import punctuation
6
5
  from random import choice
7
- from requests.exceptions import RequestException
8
6
  import json
9
- from html.parser import HTMLParser
10
- import re
11
- import html.entities
12
-
13
7
  from webscout.AIutel import Optimizers
14
8
  from webscout.AIutel import Conversation
15
9
  from webscout.AIutel import AwesomePrompts
16
10
  from webscout.AIbase import Provider
17
11
  from webscout import exceptions
18
-
19
- class TerminalFormatter(HTMLParser):
20
- """
21
- A custom HTML parser that converts HTML content to terminal-friendly formatted text
22
- using ANSI escape codes.
23
- """
24
-
25
- def __init__(self):
26
- super().__init__()
27
- self.output = []
28
- self.list_stack = []
29
- self.ol_counters = []
30
- self.bold = False
31
- self.italic = False
32
-
33
- def handle_starttag(self, tag, attrs):
34
- if tag in ["strong", "b"]:
35
- self.output.append("\033[1m") # Bold
36
- self.bold = True
37
- elif tag in ["em", "i"]:
38
- self.output.append("\033[3m") # Italic
39
- self.italic = True
40
- elif tag == "br":
41
- self.output.append("\n")
42
- elif tag in ["p", "div", "h1", "h2", "h3", "h4", "h5", "h6"]:
43
- self.output.append("\n")
44
- elif tag == "ul":
45
- self.list_stack.append("ul")
46
- self.output.append("\n")
47
- elif tag == "ol":
48
- self.list_stack.append("ol")
49
- self.ol_counters.append(1)
50
- self.output.append("\n")
51
- elif tag == "li":
52
- if self.list_stack:
53
- if self.list_stack[-1] == "ul":
54
- self.output.append("• ") # Bullet point
55
- elif self.list_stack[-1] == "ol":
56
- number = self.ol_counters[-1]
57
- self.output.append(f"{number}. ")
58
- self.ol_counters[-1] += 1
59
-
60
- def handle_endtag(self, tag):
61
- if tag in ["strong", "b"]:
62
- self.output.append("\033[0m") # Reset
63
- self.bold = False
64
- elif tag in ["em", "i"]:
65
- self.output.append("\033[0m") # Reset
66
- self.italic = False
67
- elif tag in ["p", "div", "h1", "h2", "h3", "h4", "h5", "h6"]:
68
- self.output.append("\n")
69
- elif tag == "ul":
70
- if self.list_stack and self.list_stack[-1] == "ul":
71
- self.list_stack.pop()
72
- self.output.append("\n")
73
- elif tag == "ol":
74
- if self.list_stack and self.list_stack[-1] == "ol":
75
- self.list_stack.pop()
76
- self.ol_counters.pop()
77
- self.output.append("\n")
78
- elif tag == "li":
79
- self.output.append("\n")
80
-
81
- def handle_data(self, data):
82
- # Remove ANSI escape codes from the data
83
- data = re.sub(r'\033\[[0-9;]*m', '', data)
84
- data = re.sub(r"\s+", " ", data)
85
- self.output.append(data)
86
-
87
- def handle_entityref(self, name):
88
- entity = f"&{name};"
89
- char = html.entities.name2codepoint.get(name, entity)
90
- self.output.append(chr(char))
91
-
92
- def handle_charref(self, name):
93
- try:
94
- if name.startswith("x") or name.startswith("X"):
95
- char = chr(int(name[1:], 16))
96
- else:
97
- char = chr(int(name))
98
- self.output.append(char)
99
- except ValueError:
100
- self.output.append(f"&#{name};")
101
-
102
- def get_text(self):
103
- return "".join(self.output).strip()
104
-
105
-
106
- def html_to_terminal(html_content):
107
- parser = TerminalFormatter()
108
- parser.feed(html_content)
109
- return parser.get_text()
110
-
12
+ from webscout.litagent import LitAgent
111
13
 
112
14
  class TutorAI(Provider):
113
15
  """
@@ -132,7 +34,7 @@ class TutorAI(Provider):
132
34
 
133
35
  Args:
134
36
  is_conversation (bool, optional): Flag for chatting conversationally. Defaults to True.
135
- max_tokens (int, optional): Maximum number of tokens to be generated upon completion. Defaults to 600.
37
+ max_tokens (int, optional): Maximum number of tokens to be generated upon completion. Defaults to 1024.
136
38
  timeout (int, optional): Http request timeout. Defaults to 30.
137
39
  intro (str, optional): Conversation introductory prompt. Defaults to None.
138
40
  filepath (str, optional): Path to file containing conversation history. Defaults to None.
@@ -173,11 +75,7 @@ class TutorAI(Provider):
173
75
  "Sec-Fetch-Dest": "empty",
174
76
  "Sec-Fetch-Mode": "cors",
175
77
  "Sec-Fetch-Site": "same-origin",
176
- "User-Agent": (
177
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
178
- "AppleWebKit/537.36 (KHTML, like Gecko) "
179
- "Chrome/129.0.0.0 Safari/537.36 Edg/128.0.0.0"
180
- ),
78
+ "User-Agent": LitAgent().random()
181
79
  }
182
80
 
183
81
  self.__available_optimizers = (
@@ -229,9 +127,7 @@ class TutorAI(Provider):
229
127
  conversation_prompt = self.conversation.gen_complete_prompt(prompt)
230
128
  if optimizer:
231
129
  if optimizer in self.__available_optimizers:
232
- conversation_prompt = getattr(Optimizers, optimizer)(
233
- conversation_prompt if conversationally else prompt
234
- )
130
+ conversation_prompt = getattr(Optimizers, optimizer)(conversation_prompt if conversationally else prompt)
235
131
  else:
236
132
  raise Exception(
237
133
  f"Optimizer is not one of {self.__available_optimizers}"
@@ -268,7 +164,7 @@ class TutorAI(Provider):
268
164
  homeworkify_html = response_data.get("homeworkifyResponse", "")
269
165
  if not homeworkify_html:
270
166
  raise exceptions.FailedToGenerateResponseError("\nNo 'homeworkifyResponse' found in the response.")
271
- clean_text = html_to_terminal(homeworkify_html)
167
+ clean_text = homeworkify_html # Removed html_to_terminal call
272
168
  self.last_response.update(dict(text=clean_text))
273
169
  self.conversation.update_chat_history(
274
170
  prompt, self.get_message(self.last_response)
@@ -288,7 +184,7 @@ class TutorAI(Provider):
288
184
  homeworkify_html = response_data.get("homeworkifyResponse", "")
289
185
  if not homeworkify_html:
290
186
  return {"text": "No content found in the response"} # Default in case content not found
291
- clean_text = html_to_terminal(homeworkify_html)
187
+ clean_text = homeworkify_html # Removed html_to_terminal call
292
188
 
293
189
  # Simulate streaming by yielding chunks of the content
294
190
  chunk_size = self.stream_chunk_size
@@ -349,6 +245,6 @@ if __name__ == "__main__":
349
245
  from rich import print
350
246
 
351
247
  ai = TutorAI()
352
- response = ai.chat(input(">>> "), attachment_path=None)
248
+ response = ai.chat("hello buddy", attachment_path=None)
353
249
  for chunk in response:
354
- print(chunk, end="", flush=True)
250
+ print(chunk, end="", flush=True)
@@ -7,7 +7,7 @@ from webscout.AIutel import Conversation
7
7
  from webscout.AIutel import AwesomePrompts
8
8
  from webscout.AIbase import Provider
9
9
  from webscout import exceptions
10
-
10
+ from webscout.litagent import LitAgent
11
11
  class TypeGPT(Provider):
12
12
  """
13
13
  A class to interact with the TypeGPT.net API. Improved to match webscout standards.
@@ -207,7 +207,6 @@ class TypeGPT(Provider):
207
207
  self.presence_penalty = presence_penalty
208
208
  self.frequency_penalty = frequency_penalty
209
209
  self.top_p = top_p
210
-
211
210
  self.headers = {
212
211
  "authority": "chat.typegpt.net",
213
212
  "accept": "application/json, text/event-stream",
@@ -215,7 +214,7 @@ class TypeGPT(Provider):
215
214
  "content-type": "application/json",
216
215
  "origin": "https://chat.typegpt.net",
217
216
  "referer": "https://chat.typegpt.net/",
218
- "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
217
+ "user-agent": LitAgent().random()
219
218
  }
220
219
 
221
220
 
@@ -352,7 +351,7 @@ class TypeGPT(Provider):
352
351
 
353
352
  if __name__ == "__main__":
354
353
 
355
- ai = TypeGPT()
356
- response = ai.chat(input(">>> "), stream=True)
354
+ ai = TypeGPT(model="claude-3-5-sonnet-20240620")
355
+ response = ai.chat("hi", stream=True)
357
356
  for chunks in response:
358
357
  print(chunks, end="", flush=True)
@@ -1,7 +1,6 @@
1
1
  from typing import Any, Dict
2
2
  from uuid import uuid4
3
3
  import requests
4
-
5
4
  import re
6
5
 
7
6
  from webscout.AIutel import Optimizers
@@ -9,10 +8,21 @@ from webscout.AIutel import Conversation
9
8
  from webscout.AIutel import AwesomePrompts
10
9
  from webscout.AIbase import Provider
11
10
  from webscout import exceptions
11
+ from webscout.litagent import LitAgent
12
12
 
13
13
  class X0GPT(Provider):
14
14
  """
15
15
  A class to interact with the x0-gpt.devwtf.in API.
16
+
17
+ Attributes:
18
+ system_prompt (str): The system prompt to define the assistant's role.
19
+
20
+ Examples:
21
+ >>> from webscout.Provider.x0gpt import X0GPT
22
+ >>> ai = X0GPT()
23
+ >>> response = ai.chat("What's the weather today?")
24
+ >>> print(response)
25
+ 'The weather today is sunny with a high of 75°F.'
16
26
  """
17
27
 
18
28
  def __init__(
@@ -26,9 +36,27 @@ class X0GPT(Provider):
26
36
  proxies: dict = {},
27
37
  history_offset: int = 10250,
28
38
  act: str = None,
39
+ system_prompt: str = "You are a helpful assistant."
29
40
  ):
30
41
  """
31
42
  Initializes the X0GPT API with given parameters.
43
+
44
+ Args:
45
+ is_conversation (bool): Whether the provider is in conversation mode.
46
+ max_tokens (int): Maximum number of tokens to sample.
47
+ timeout (int): Timeout for API requests.
48
+ intro (str): Introduction message for the conversation.
49
+ filepath (str): Filepath for storing conversation history.
50
+ update_file (bool): Whether to update the conversation history file.
51
+ proxies (dict): Proxies for the API requests.
52
+ history_offset (int): Offset for conversation history.
53
+ act (str): Act for the conversation.
54
+ system_prompt (str): The system prompt to define the assistant's role.
55
+
56
+ Examples:
57
+ >>> ai = X0GPT(system_prompt="You are a friendly assistant.")
58
+ >>> print(ai.system_prompt)
59
+ 'You are a friendly assistant.'
32
60
  """
33
61
  self.session = requests.Session()
34
62
  self.is_conversation = is_conversation
@@ -36,6 +64,11 @@ class X0GPT(Provider):
36
64
  self.api_endpoint = "https://x0-gpt.devwtf.in/api/stream/reply"
37
65
  self.timeout = timeout
38
66
  self.last_response = {}
67
+ self.system_prompt = system_prompt
68
+
69
+ # Initialize LitAgent for user agent generation
70
+ self.agent = LitAgent()
71
+
39
72
  self.headers = {
40
73
  "authority": "x0-gpt.devwtf.in",
41
74
  "method": "POST",
@@ -53,10 +86,7 @@ class X0GPT(Provider):
53
86
  "sec-ch-ua": '"Not)A;Brand";v="99", "Microsoft Edge";v="127", "Chromium";v="127"',
54
87
  "sec-ch-ua-mobile": "?0",
55
88
  "sec-ch-ua-platform": '"Windows"',
56
- "sec-fetch-dest": "empty",
57
- "sec-fetch-mode": "cors",
58
- "sec-fetch-site": "same-origin",
59
- "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
89
+ "user-agent": self.agent.random() # Use LitAgent to generate a random user agent
60
90
  }
61
91
 
62
92
  self.__available_optimizers = (
@@ -88,6 +118,22 @@ class X0GPT(Provider):
88
118
  ) -> Dict[str, Any]:
89
119
  """
90
120
  Sends a prompt to the x0-gpt.devwtf.in API and returns the response.
121
+
122
+ Args:
123
+ prompt (str): The prompt to send to the API.
124
+ stream (bool): Whether to stream the response.
125
+ raw (bool): Whether to return the raw response.
126
+ optimizer (str): Optimizer to use for the prompt.
127
+ conversationally (bool): Whether to generate the prompt conversationally.
128
+
129
+ Returns:
130
+ Dict[str, Any]: The API response.
131
+
132
+ Examples:
133
+ >>> ai = X0GPT()
134
+ >>> response = ai.ask("Tell me a joke!")
135
+ >>> print(response)
136
+ {'text': 'Why did the scarecrow win an award? Because he was outstanding in his field!'}
91
137
  """
92
138
  conversation_prompt = self.conversation.gen_complete_prompt(prompt)
93
139
  if optimizer:
@@ -102,10 +148,8 @@ class X0GPT(Provider):
102
148
 
103
149
  payload = {
104
150
  "messages": [
105
- {
106
- "role": "user",
107
- "content": conversation_prompt
108
- }
151
+ {"role": "system", "content": self.system_prompt},
152
+ {"role": "user", "content": conversation_prompt}
109
153
  ],
110
154
  "chatId": uuid4().hex,
111
155
  "namespace": None
@@ -146,6 +190,21 @@ class X0GPT(Provider):
146
190
  ) -> str:
147
191
  """
148
192
  Generates a response from the X0GPT API.
193
+
194
+ Args:
195
+ prompt (str): The prompt to send to the API.
196
+ stream (bool): Whether to stream the response.
197
+ optimizer (str): Optimizer to use for the prompt.
198
+ conversationally (bool): Whether to generate the prompt conversationally.
199
+
200
+ Returns:
201
+ str: The API response.
202
+
203
+ Examples:
204
+ >>> ai = X0GPT()
205
+ >>> response = ai.chat("What's the weather today?")
206
+ >>> print(response)
207
+ 'The weather today is sunny with a high of 75°F.'
149
208
  """
150
209
 
151
210
  def for_stream():
@@ -169,6 +228,19 @@ class X0GPT(Provider):
169
228
  def get_message(self, response: dict) -> str:
170
229
  """
171
230
  Extracts the message from the API response.
231
+
232
+ Args:
233
+ response (dict): The API response.
234
+
235
+ Returns:
236
+ str: The message content.
237
+
238
+ Examples:
239
+ >>> ai = X0GPT()
240
+ >>> response = ai.ask("Tell me a joke!")
241
+ >>> message = ai.get_message(response)
242
+ >>> print(message)
243
+ 'Why did the scarecrow win an award? Because he was outstanding in his field!'
172
244
  """
173
245
  assert isinstance(response, dict), "Response should be of dict data-type only"
174
246
  formatted_text = response["text"].replace('\\n', '\n').replace('\\n\\n', '\n\n')