webscout 2.2b0__py3-none-any.whl → 2.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/Local/__init__.py +10 -0
- webscout/Local/_version.py +3 -0
- webscout/Local/formats.py +482 -0
- webscout/Local/model.py +702 -0
- webscout/Local/samplers.py +161 -0
- webscout/Local/thread.py +641 -0
- webscout/Local/utils.py +171 -0
- webscout/__init__.py +91 -99
- {webscout-2.2b0.dist-info → webscout-2.3.dist-info}/METADATA +1 -1
- {webscout-2.2b0.dist-info → webscout-2.3.dist-info}/RECORD +14 -7
- {webscout-2.2b0.dist-info → webscout-2.3.dist-info}/LICENSE.md +0 -0
- {webscout-2.2b0.dist-info → webscout-2.3.dist-info}/WHEEL +0 -0
- {webscout-2.2b0.dist-info → webscout-2.3.dist-info}/entry_points.txt +0 -0
- {webscout-2.2b0.dist-info → webscout-2.3.dist-info}/top_level.txt +0 -0
webscout/Local/utils.py
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
from ._version import __version__, __llama_cpp_version__
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
from typing import Any, Iterable, TextIO
|
|
7
|
+
from time import strftime
|
|
8
|
+
from enum import IntEnum
|
|
9
|
+
from struct import unpack
|
|
10
|
+
from colorama import Fore
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# color codes used in Thread.interact()
|
|
14
|
+
RESET_ALL = Fore.RESET
|
|
15
|
+
USER_STYLE = RESET_ALL + Fore.GREEN
|
|
16
|
+
BOT_STYLE = RESET_ALL + Fore.CYAN
|
|
17
|
+
DIM_STYLE = RESET_ALL + Fore.LIGHTBLACK_EX
|
|
18
|
+
SPECIAL_STYLE = RESET_ALL + Fore.YELLOW
|
|
19
|
+
|
|
20
|
+
# for typing of softmax parameter `z`
|
|
21
|
+
class _ArrayLike(Iterable):
|
|
22
|
+
pass
|
|
23
|
+
|
|
24
|
+
# for typing of Model.stream_print() parameter `file`
|
|
25
|
+
class _SupportsWriteAndFlush(TextIO):
|
|
26
|
+
pass
|
|
27
|
+
|
|
28
|
+
class GGUFReader:
|
|
29
|
+
"""
|
|
30
|
+
Peek at file header for GGUF metadata
|
|
31
|
+
|
|
32
|
+
Raise ValueError if file is not GGUF or is outdated
|
|
33
|
+
|
|
34
|
+
Credit to oobabooga for the parts of the code in this class
|
|
35
|
+
|
|
36
|
+
Format spec: https://github.com/philpax/ggml/blob/gguf-spec/docs/gguf.md
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
class GGUFValueType(IntEnum):
|
|
40
|
+
UINT8 = 0
|
|
41
|
+
INT8 = 1
|
|
42
|
+
UINT16 = 2
|
|
43
|
+
INT16 = 3
|
|
44
|
+
UINT32 = 4
|
|
45
|
+
INT32 = 5
|
|
46
|
+
FLOAT32 = 6
|
|
47
|
+
BOOL = 7
|
|
48
|
+
STRING = 8
|
|
49
|
+
ARRAY = 9
|
|
50
|
+
UINT64 = 10
|
|
51
|
+
INT64 = 11
|
|
52
|
+
FLOAT64 = 12
|
|
53
|
+
|
|
54
|
+
_simple_value_packing = {
|
|
55
|
+
GGUFValueType.UINT8: "<B",
|
|
56
|
+
GGUFValueType.INT8: "<b",
|
|
57
|
+
GGUFValueType.UINT16: "<H",
|
|
58
|
+
GGUFValueType.INT16: "<h",
|
|
59
|
+
GGUFValueType.UINT32: "<I",
|
|
60
|
+
GGUFValueType.INT32: "<i",
|
|
61
|
+
GGUFValueType.FLOAT32: "<f",
|
|
62
|
+
GGUFValueType.UINT64: "<Q",
|
|
63
|
+
GGUFValueType.INT64: "<q",
|
|
64
|
+
GGUFValueType.FLOAT64: "<d",
|
|
65
|
+
GGUFValueType.BOOL: "?",
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
value_type_info = {
|
|
69
|
+
GGUFValueType.UINT8: 1,
|
|
70
|
+
GGUFValueType.INT8: 1,
|
|
71
|
+
GGUFValueType.UINT16: 2,
|
|
72
|
+
GGUFValueType.INT16: 2,
|
|
73
|
+
GGUFValueType.UINT32: 4,
|
|
74
|
+
GGUFValueType.INT32: 4,
|
|
75
|
+
GGUFValueType.FLOAT32: 4,
|
|
76
|
+
GGUFValueType.UINT64: 8,
|
|
77
|
+
GGUFValueType.INT64: 8,
|
|
78
|
+
GGUFValueType.FLOAT64: 8,
|
|
79
|
+
GGUFValueType.BOOL: 1,
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
def get_single(self, value_type, file) -> Any:
|
|
83
|
+
if value_type == GGUFReader.GGUFValueType.STRING:
|
|
84
|
+
value_length = unpack("<Q", file.read(8))[0]
|
|
85
|
+
value = file.read(value_length)
|
|
86
|
+
value = value.decode("utf-8")
|
|
87
|
+
else:
|
|
88
|
+
type_str = GGUFReader._simple_value_packing.get(value_type)
|
|
89
|
+
bytes_length = GGUFReader.value_type_info.get(value_type)
|
|
90
|
+
value = unpack(type_str, file.read(bytes_length))[0]
|
|
91
|
+
|
|
92
|
+
return value
|
|
93
|
+
|
|
94
|
+
def load_metadata(self, fname) -> dict:
|
|
95
|
+
metadata = {}
|
|
96
|
+
with open(fname, "rb") as file:
|
|
97
|
+
GGUF_MAGIC = file.read(4)
|
|
98
|
+
|
|
99
|
+
if GGUF_MAGIC != b"GGUF":
|
|
100
|
+
raise ValueError(
|
|
101
|
+
"your model file is not a valid GGUF file "
|
|
102
|
+
f"(magic number mismatch, got {GGUF_MAGIC}, "
|
|
103
|
+
"expected b'GGUF')"
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
GGUF_VERSION = unpack("<I", file.read(4))[0]
|
|
107
|
+
|
|
108
|
+
if GGUF_VERSION == 1:
|
|
109
|
+
raise ValueError(
|
|
110
|
+
"your model file reports GGUF version 1, "
|
|
111
|
+
"but only versions 2 and above are supported. "
|
|
112
|
+
"re-convert your model or download a newer version"
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
# ti_data_count = struct.unpack("<Q", file.read(8))[0]
|
|
116
|
+
file.read(8)
|
|
117
|
+
kv_data_count = unpack("<Q", file.read(8))[0]
|
|
118
|
+
|
|
119
|
+
for _ in range(kv_data_count):
|
|
120
|
+
key_length = unpack("<Q", file.read(8))[0]
|
|
121
|
+
key = file.read(key_length)
|
|
122
|
+
|
|
123
|
+
value_type = GGUFReader.GGUFValueType(
|
|
124
|
+
unpack("<I", file.read(4))[0]
|
|
125
|
+
)
|
|
126
|
+
if value_type == GGUFReader.GGUFValueType.ARRAY:
|
|
127
|
+
ltype = GGUFReader.GGUFValueType(
|
|
128
|
+
unpack("<I", file.read(4))[0]
|
|
129
|
+
)
|
|
130
|
+
length = unpack("<Q", file.read(8))[0]
|
|
131
|
+
arr = [
|
|
132
|
+
GGUFReader.get_single(
|
|
133
|
+
self,
|
|
134
|
+
ltype,
|
|
135
|
+
file
|
|
136
|
+
) for _ in range(length)
|
|
137
|
+
]
|
|
138
|
+
metadata[key.decode()] = arr
|
|
139
|
+
else:
|
|
140
|
+
value = GGUFReader.get_single(self, value_type, file)
|
|
141
|
+
metadata[key.decode()] = value
|
|
142
|
+
|
|
143
|
+
return metadata
|
|
144
|
+
|
|
145
|
+
def softmax(z: _ArrayLike) -> np.ndarray:
|
|
146
|
+
"""
|
|
147
|
+
Compute softmax over values in z, where z is array-like
|
|
148
|
+
"""
|
|
149
|
+
e_z = np.exp(z - np.max(z))
|
|
150
|
+
return e_z / e_z.sum()
|
|
151
|
+
|
|
152
|
+
def cls() -> None:
|
|
153
|
+
"""Clear the terminal"""
|
|
154
|
+
print("\033c\033[3J", end='', flush=True)
|
|
155
|
+
|
|
156
|
+
# no longer used in this module, but left for others to use
|
|
157
|
+
def get_timestamp_prefix_str() -> str:
|
|
158
|
+
# helpful: https://strftime.net
|
|
159
|
+
return strftime("[%Y, %b %e, %a %l:%M %p] ")
|
|
160
|
+
|
|
161
|
+
def truncate(text: str) -> str:
|
|
162
|
+
return text if len(text) < 63 else f"{text[:60]}..."
|
|
163
|
+
|
|
164
|
+
def print_verbose(text: str) -> None:
|
|
165
|
+
print("webscout.Local: verbose:", text, file=sys.stderr, flush=True)
|
|
166
|
+
|
|
167
|
+
def print_info(text: str) -> None:
|
|
168
|
+
print("webscout.Local: info:", text, file=sys.stderr, flush=True)
|
|
169
|
+
|
|
170
|
+
def print_warning(text: str) -> None:
|
|
171
|
+
print("webscout.Local: warning:", text, file=sys.stderr, flush=True)
|
webscout/__init__.py
CHANGED
|
@@ -1,127 +1,119 @@
|
|
|
1
|
-
"""Webscout.
|
|
2
|
-
|
|
3
|
-
Search for anything using the Google, DuckDuckGo, phind.com. Also contains AI models, can transcribe yt videos, temporary email and phone number generation, has TTS support, and webai (terminal gpt and open interpreter).
|
|
4
|
-
"""
|
|
5
|
-
# webscout/__init__.py
|
|
6
|
-
|
|
7
1
|
from .webscout_search import WEBS
|
|
8
2
|
from .webscout_search_async import AsyncWEBS
|
|
9
3
|
from .version import __version__
|
|
10
4
|
from .DWEBS import DeepWEBS
|
|
11
5
|
from .transcriber import transcriber
|
|
12
|
-
from .voice import play_audio
|
|
6
|
+
from .voice import play_audio
|
|
13
7
|
from .tempid import Client as TempMailClient, TemporaryPhoneNumber
|
|
14
|
-
from .models import MapsResult
|
|
15
8
|
from .LLM import LLM
|
|
16
9
|
from .Local import *
|
|
17
10
|
import g4f
|
|
18
11
|
# Import provider classes for direct access
|
|
19
12
|
from .Provider import (
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
13
|
+
ThinkAnyAI,
|
|
14
|
+
Xjai,
|
|
15
|
+
LLAMA2,
|
|
16
|
+
AsyncLLAMA2,
|
|
17
|
+
Cohere,
|
|
18
|
+
REKA,
|
|
19
|
+
GROQ,
|
|
20
|
+
AsyncGROQ,
|
|
21
|
+
OPENAI,
|
|
22
|
+
AsyncOPENAI,
|
|
23
|
+
LEO,
|
|
24
|
+
AsyncLEO,
|
|
25
|
+
KOBOLDAI,
|
|
26
|
+
AsyncKOBOLDAI,
|
|
27
|
+
OPENGPT,
|
|
28
|
+
AsyncOPENGPT,
|
|
29
|
+
PERPLEXITY,
|
|
30
|
+
BLACKBOXAI,
|
|
31
|
+
AsyncBLACKBOXAI,
|
|
32
|
+
PhindSearch,
|
|
33
|
+
AsyncPhindSearch,
|
|
34
|
+
YEPCHAT,
|
|
35
|
+
AsyncYEPCHAT,
|
|
36
|
+
YouChat,
|
|
37
|
+
GEMINI,
|
|
38
|
+
Berlin4h,
|
|
39
|
+
ChatGPTUK,
|
|
47
40
|
)
|
|
48
41
|
|
|
49
42
|
__repo__ = "https://github.com/OE-LUCIFER/Webscout"
|
|
50
43
|
|
|
51
44
|
webai = [
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
45
|
+
"leo",
|
|
46
|
+
"openai",
|
|
47
|
+
"opengpt",
|
|
48
|
+
"koboldai",
|
|
49
|
+
"gemini",
|
|
50
|
+
"phind",
|
|
51
|
+
"blackboxai",
|
|
52
|
+
"g4fauto",
|
|
53
|
+
"perplexity",
|
|
54
|
+
"groq",
|
|
55
|
+
"reka",
|
|
56
|
+
"cohere",
|
|
57
|
+
"yepchat",
|
|
58
|
+
"you",
|
|
59
|
+
"xjai",
|
|
60
|
+
"thinkany",
|
|
61
|
+
"berlin4h",
|
|
62
|
+
"chatgptuk",
|
|
63
|
+
"auto",
|
|
71
64
|
]
|
|
72
65
|
|
|
73
66
|
gpt4free_providers = [
|
|
74
|
-
|
|
67
|
+
provider.__name__ for provider in g4f.Provider.__providers__ # if provider.working
|
|
75
68
|
]
|
|
76
69
|
|
|
77
70
|
available_providers = webai + gpt4free_providers
|
|
78
71
|
|
|
79
|
-
# Add all the provider classes
|
|
72
|
+
# Add all the provider classes, Localai models, Thread, and Model to __all__
|
|
80
73
|
__all__ = [
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
74
|
+
"WEBS",
|
|
75
|
+
"AsyncWEBS",
|
|
76
|
+
"__version__",
|
|
77
|
+
"DeepWEBS",
|
|
78
|
+
"transcriber",
|
|
79
|
+
"play_audio",
|
|
80
|
+
"TempMailClient",
|
|
81
|
+
"TemporaryPhoneNumber",
|
|
82
|
+
"LLM",
|
|
83
|
+
# Localai models and utilities
|
|
84
|
+
"Model",
|
|
85
|
+
"Thread",
|
|
86
|
+
"formats",
|
|
94
87
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
88
|
+
# AI Providers
|
|
89
|
+
"ThinkAnyAI",
|
|
90
|
+
"Xjai",
|
|
91
|
+
"LLAMA2",
|
|
92
|
+
"AsyncLLAMA2",
|
|
93
|
+
"Cohere",
|
|
94
|
+
"REKA",
|
|
95
|
+
"GROQ",
|
|
96
|
+
"AsyncGROQ",
|
|
97
|
+
"OPENAI",
|
|
98
|
+
"AsyncOPENAI",
|
|
99
|
+
"LEO",
|
|
100
|
+
"AsyncLEO",
|
|
101
|
+
"KOBOLDAI",
|
|
102
|
+
"AsyncKOBOLDAI",
|
|
103
|
+
"OPENGPT",
|
|
104
|
+
"AsyncOPENGPT",
|
|
105
|
+
"PERPLEXITY",
|
|
106
|
+
"BLACKBOXAI",
|
|
107
|
+
"AsyncBLACKBOXAI",
|
|
108
|
+
"PhindSearch",
|
|
109
|
+
"AsyncPhindSearch",
|
|
110
|
+
"YEPCHAT",
|
|
111
|
+
"AsyncYEPCHAT",
|
|
112
|
+
"YouChat",
|
|
113
|
+
"GEMINI",
|
|
114
|
+
"Berlin4h",
|
|
115
|
+
"ChatGPTUK",
|
|
123
116
|
]
|
|
124
117
|
|
|
125
|
-
# Set up basic logger
|
|
126
118
|
import logging
|
|
127
|
-
logging.getLogger("webscout").addHandler(logging.NullHandler())
|
|
119
|
+
logging.getLogger("webscout").addHandler(logging.NullHandler())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: webscout
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3
|
|
4
4
|
Summary: Search for anything using Google, DuckDuckGo, phind.com. Also contains AI models, can transcribe yt videos, temporary email and phone number generation, has TTS support, and webai (terminal gpt and open interpreter).
|
|
5
5
|
Author: OEvortex
|
|
6
6
|
Author-email: helpingai5@gmail.com
|
|
@@ -15,7 +15,7 @@ webscout/AIbase.py,sha256=GoHbN8r0gq2saYRZv6LA-Fr9Jlcjv80STKFXUq2ZeGU,4710
|
|
|
15
15
|
webscout/AIutel.py,sha256=LXYgQOEk21c7MpNJlSl2RbLvR8HDJhTSwJiVVgqf0Iw,33266
|
|
16
16
|
webscout/DWEBS.py,sha256=QT-7-dUgWhQ_H7EVZD53AVyXxyskoPMKCkFIpzkN56Q,7332
|
|
17
17
|
webscout/LLM.py,sha256=CiDz0okZNEoXuxMwadZnwRGSLpqk2zg0vzvXSxQZjcE,1910
|
|
18
|
-
webscout/__init__.py,sha256=
|
|
18
|
+
webscout/__init__.py,sha256=4RmWkUjUyOCVvoymHpCqnKIs8hfmcNYhONQ8bhdiPf0,2206
|
|
19
19
|
webscout/__main__.py,sha256=ZtTRgsRjUi2JOvYFLF1ZCh55Sdoz94I-BS-TlJC7WDU,126
|
|
20
20
|
webscout/async_providers.py,sha256=holBv5SxanxVXc_92CBBaXHlB2IakB_fHnhyZaFjYF8,684
|
|
21
21
|
webscout/cli.py,sha256=F888fdrFUQgczMBN4yMOSf6Nh-IbvkqpPhDsbnA2FtQ,17059
|
|
@@ -30,6 +30,13 @@ webscout/voice.py,sha256=0QjXTHAQmCK07IDZXRc7JXem47cnPJH7u3X0sVP1-UQ,967
|
|
|
30
30
|
webscout/webai.py,sha256=cRzJNVljryCxV4kEtmii0_CEBxSs71Ft3sdPdcqGmBg,84668
|
|
31
31
|
webscout/webscout_search.py,sha256=TvbrRYVMXbFGgEh0CoFHNYVY3iQ8SmejxEmv8Csu4IA,3159
|
|
32
32
|
webscout/webscout_search_async.py,sha256=4_L_t_I9WlvpPEI3FI0K3v6Aayr0pNvD3chYOp7JR8o,42902
|
|
33
|
+
webscout/Local/__init__.py,sha256=HxyOwxCdOpzHx4lE6UUMK1S10oBW9WYE5JQaBbFHOh8,220
|
|
34
|
+
webscout/Local/_version.py,sha256=sc9JboCC9IEKihG_oql9GqyPt0rTPN2OXbpyzRDoCQ4,83
|
|
35
|
+
webscout/Local/formats.py,sha256=tttN2Cqq39YZgypjyu1_ZbfDTj8cdiFndiW-MUFR4qQ,17153
|
|
36
|
+
webscout/Local/model.py,sha256=Hf_xybJm1PZBBIIy5j0p3Z3CnWezymNfxr8zQeFHJqY,27611
|
|
37
|
+
webscout/Local/samplers.py,sha256=qXwU4eLXER-2aCYzcJcTgA6BeFmi5GMpTDUX1C9pTN4,4372
|
|
38
|
+
webscout/Local/thread.py,sha256=xxQIzk--xEohz04I_0Rnta43bS2jMDbsvW9_e6IbSTk,24868
|
|
39
|
+
webscout/Local/utils.py,sha256=v9DLA9veFd_d4GhWPy3qRqSivPTSmSNmj5NN5Z2AMcQ,5454
|
|
33
40
|
webscout/Provider/Berlin4h.py,sha256=-O6BRkLusUEdYXcyQ09iY86dFl9WoiA4mlmZ_DLZbos,8342
|
|
34
41
|
webscout/Provider/Blackboxai.py,sha256=8B5wT_eb86RVZ5uOqwvgVC5QATl0uEMCli0n4SDwt1M,16743
|
|
35
42
|
webscout/Provider/ChatGPTUK.py,sha256=ozpWnuOlC_7jeDcTuUukFPcPkIksx-Bgq_6Rrf0Bwak,8357
|
|
@@ -49,9 +56,9 @@ webscout/Provider/Xjai.py,sha256=gI9FqEodS-jHfFM_CsDPmTb_wL5NU2q__2fg9hqVoEc,880
|
|
|
49
56
|
webscout/Provider/Yepchat.py,sha256=E0tv3Zfoqs1Sw8Pe-6_5d--_1LESm8mjw536DWclJk8,19398
|
|
50
57
|
webscout/Provider/Youchat.py,sha256=JAZYwcj0Kl1UUgqN0rD3TKaReA1G-cmIlW_4mog1j_c,7756
|
|
51
58
|
webscout/Provider/__init__.py,sha256=BPYm-ZOkZOXXn3bx_2UHIV6aZS47d9Y01JDq-EiPXhQ,1318
|
|
52
|
-
webscout-2.
|
|
53
|
-
webscout-2.
|
|
54
|
-
webscout-2.
|
|
55
|
-
webscout-2.
|
|
56
|
-
webscout-2.
|
|
57
|
-
webscout-2.
|
|
59
|
+
webscout-2.3.dist-info/LICENSE.md,sha256=mRVwJuT4SXC5O93BFdsfWBjlXjGn2Np90Zm5SocUzM0,3150
|
|
60
|
+
webscout-2.3.dist-info/METADATA,sha256=ntfYcc-wFWtZtnbI-rFMR7yhph29tvJl2Ynje2Vadjo,46611
|
|
61
|
+
webscout-2.3.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
62
|
+
webscout-2.3.dist-info/entry_points.txt,sha256=Hh4YIIjvkqB9SVxZ2ri4DZUkgEu_WF_5_r_nZDIvfG8,73
|
|
63
|
+
webscout-2.3.dist-info/top_level.txt,sha256=OD5YKy6Y3hldL7SmuxsiEDxAG4LgdSSWwzYk22MF9fk,18
|
|
64
|
+
webscout-2.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|