versionhq 1.1.11.4__py3-none-any.whl → 1.1.11.5__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.
- versionhq/__init__.py +2 -5
- versionhq/agent/model.py +7 -8
- versionhq/knowledge/model.py +6 -10
- versionhq/knowledge/source.py +19 -7
- versionhq/knowledge/source_docling.py +30 -21
- versionhq/knowledge/storage.py +6 -8
- versionhq/memory/model.py +7 -1
- {versionhq-1.1.11.4.dist-info → versionhq-1.1.11.5.dist-info}/METADATA +21 -5
- {versionhq-1.1.11.4.dist-info → versionhq-1.1.11.5.dist-info}/RECORD +12 -12
- {versionhq-1.1.11.4.dist-info → versionhq-1.1.11.5.dist-info}/LICENSE +0 -0
- {versionhq-1.1.11.4.dist-info → versionhq-1.1.11.5.dist-info}/WHEEL +0 -0
- {versionhq-1.1.11.4.dist-info → versionhq-1.1.11.5.dist-info}/top_level.txt +0 -0
versionhq/__init__.py
CHANGED
@@ -10,15 +10,14 @@ warnings.filterwarnings(
|
|
10
10
|
from versionhq.agent.model import Agent
|
11
11
|
from versionhq.clients.customer.model import Customer
|
12
12
|
from versionhq.clients.product.model import Product, ProductProvider
|
13
|
-
from versionhq.clients.workflow.model import MessagingWorkflow, MessagingComponent
|
14
|
-
from versionhq.llm.model import LLM
|
13
|
+
from versionhq.clients.workflow.model import MessagingWorkflow, MessagingComponent
|
15
14
|
from versionhq.task.model import Task, TaskOutput
|
16
15
|
from versionhq.team.model import Team, TeamOutput
|
17
16
|
from versionhq.tool.model import Tool
|
18
17
|
from versionhq.tool.composio_tool import ComposioHandler
|
19
18
|
|
20
19
|
|
21
|
-
__version__ = "1.1.11.
|
20
|
+
__version__ = "1.1.11.5"
|
22
21
|
__all__ = [
|
23
22
|
"Agent",
|
24
23
|
"Customer",
|
@@ -26,8 +25,6 @@ __all__ = [
|
|
26
25
|
"ProductProvider",
|
27
26
|
"MessagingWorkflow",
|
28
27
|
"MessagingComponent",
|
29
|
-
"Score",
|
30
|
-
"ScoreFormat",
|
31
28
|
"LLM",
|
32
29
|
"Task",
|
33
30
|
"TaskOutput",
|
versionhq/agent/model.py
CHANGED
@@ -345,14 +345,13 @@ class Agent(BaseModel):
|
|
345
345
|
@model_validator(mode="after")
|
346
346
|
def set_up_knowledge(self) -> Self:
|
347
347
|
if self.knowledge_sources:
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
self.
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
)
|
348
|
+
collection_name = f"{self.role.replace(' ', '_')}"
|
349
|
+
|
350
|
+
self._knowledge = Knowledge(
|
351
|
+
sources=self.knowledge_sources,
|
352
|
+
embedder_config=self.embedder_config,
|
353
|
+
collection_name=collection_name,
|
354
|
+
)
|
356
355
|
|
357
356
|
return self
|
358
357
|
|
versionhq/knowledge/model.py
CHANGED
@@ -11,11 +11,11 @@ class Knowledge(BaseModel):
|
|
11
11
|
"""
|
12
12
|
Knowlede class for collection of sources and setup for the vector store to query relevant context.
|
13
13
|
"""
|
14
|
+
collection_name: Optional[str] = None
|
14
15
|
sources: List[BaseKnowledgeSource] = Field(default_factory=list)
|
15
|
-
model_config = ConfigDict(arbitrary_types_allowed=True)
|
16
16
|
storage: KnowledgeStorage = Field(default_factory=KnowledgeStorage)
|
17
17
|
embedder_config: Optional[Dict[str, Any]] = None
|
18
|
-
|
18
|
+
model_config = ConfigDict(arbitrary_types_allowed=True)
|
19
19
|
|
20
20
|
def __init__(
|
21
21
|
self,
|
@@ -27,16 +27,12 @@ class Knowledge(BaseModel):
|
|
27
27
|
):
|
28
28
|
super().__init__(**data)
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
else
|
34
|
-
self.storage = KnowledgeStorage(embedder_config=embedder_config, collection_name=collection_name)
|
35
|
-
|
36
|
-
self.storage._set_embedding_function(embedder_config=embedder_config)
|
30
|
+
self.collection_name = collection_name
|
31
|
+
self.sources = sources
|
32
|
+
self.embedder_config = embedder_config
|
33
|
+
self.storage = storage if storage else KnowledgeStorage(embedder_config=embedder_config, collection_name=self.collection_name)
|
37
34
|
self.storage.initialize_knowledge_storage()
|
38
35
|
|
39
|
-
self.sources = sources
|
40
36
|
for source in sources:
|
41
37
|
source.storage = self.storage
|
42
38
|
source.add()
|
versionhq/knowledge/source.py
CHANGED
@@ -237,7 +237,10 @@ class PDFKnowledgeSource(BaseFileKnowledgeSource):
|
|
237
237
|
"""
|
238
238
|
Load and preprocess PDF file content.
|
239
239
|
"""
|
240
|
-
|
240
|
+
self._import_pdfplumber()
|
241
|
+
|
242
|
+
import pdfplumber
|
243
|
+
|
241
244
|
content = {}
|
242
245
|
for path in self.valid_file_paths:
|
243
246
|
text = ""
|
@@ -257,9 +260,12 @@ class PDFKnowledgeSource(BaseFileKnowledgeSource):
|
|
257
260
|
"""
|
258
261
|
try:
|
259
262
|
import pdfplumber
|
260
|
-
return pdfplumber
|
261
263
|
except ImportError:
|
262
|
-
|
264
|
+
try:
|
265
|
+
import os
|
266
|
+
os.system("uv add pdfplumber --optional pdfplumber")
|
267
|
+
except:
|
268
|
+
raise ImportError("pdfplumber is not installed. Please install it with: uv add pdfplumber")
|
263
269
|
|
264
270
|
|
265
271
|
def add(self) -> None:
|
@@ -381,10 +387,16 @@ class ExcelKnowledgeSource(BaseFileKnowledgeSource):
|
|
381
387
|
import pandas as pd
|
382
388
|
return pd
|
383
389
|
except ImportError as e:
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
390
|
+
try:
|
391
|
+
import os
|
392
|
+
os.system("uv add pandas --optional pandas")
|
393
|
+
import pandas as pd
|
394
|
+
return pd
|
395
|
+
except:
|
396
|
+
missing_package = str(e).split()[-1]
|
397
|
+
raise ImportError(
|
398
|
+
f"{missing_package} is not installed. Please install it with: pip install {missing_package}"
|
399
|
+
)
|
388
400
|
|
389
401
|
|
390
402
|
def add(self) -> None:
|
@@ -3,6 +3,7 @@ from typing import Iterator, List, Optional
|
|
3
3
|
from urllib.parse import urlparse
|
4
4
|
|
5
5
|
try:
|
6
|
+
import docling
|
6
7
|
from docling.datamodel.base_models import InputFormat
|
7
8
|
from docling.document_converter import DocumentConverter
|
8
9
|
from docling.exceptions import ConversionError
|
@@ -10,6 +11,17 @@ try:
|
|
10
11
|
from docling_core.types.doc.document import DoclingDocument
|
11
12
|
DOCLING_AVAILABLE = True
|
12
13
|
except ImportError:
|
14
|
+
import envoy
|
15
|
+
r = envoy.run("uv add docling --optional docling")
|
16
|
+
|
17
|
+
import docling
|
18
|
+
from docling.datamodel.base_models import InputFormat
|
19
|
+
from docling.document_converter import DocumentConverter
|
20
|
+
from docling.exceptions import ConversionError
|
21
|
+
from docling_core.transforms.chunker.hierarchical_chunker import HierarchicalChunker
|
22
|
+
from docling_core.types.doc.document import DoclingDocument
|
23
|
+
DOCLING_AVAILABLE = True
|
24
|
+
except:
|
13
25
|
DOCLING_AVAILABLE = False
|
14
26
|
|
15
27
|
from pydantic import Field, InstanceOf
|
@@ -25,30 +37,27 @@ class DoclingSource(BaseKnowledgeSource):
|
|
25
37
|
Support PDF, DOCX, TXT, XLSX, PPTX, MD, Images, and HTML files without any additional dependencies.
|
26
38
|
"""
|
27
39
|
|
28
|
-
def __init__(self, *args, **kwargs):
|
29
|
-
if not DOCLING_AVAILABLE:
|
30
|
-
raise ImportError("The docling package is required. Please install the package using: $ uv add docling.")
|
31
|
-
|
32
|
-
super().__init__(*args, **kwargs)
|
33
|
-
|
34
|
-
|
35
40
|
file_paths: List[Path | str] = Field(default_factory=list)
|
36
41
|
valid_file_paths: List[Path | str] = Field(default_factory=list)
|
37
42
|
content: List["DoclingDocument"] = Field(default_factory=list)
|
38
|
-
document_converter: "DocumentConverter" = Field(
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
)
|
43
|
+
document_converter: "DocumentConverter" = Field(default_factory=lambda: DocumentConverter(
|
44
|
+
allowed_formats=[
|
45
|
+
InputFormat.MD,
|
46
|
+
InputFormat.ASCIIDOC,
|
47
|
+
InputFormat.PDF,
|
48
|
+
InputFormat.DOCX,
|
49
|
+
InputFormat.HTML,
|
50
|
+
InputFormat.IMAGE,
|
51
|
+
InputFormat.XLSX,
|
52
|
+
InputFormat.PPTX,
|
53
|
+
]
|
54
|
+
))
|
55
|
+
|
56
|
+
def __init__(self, *args, **kwargs):
|
57
|
+
if not DOCLING_AVAILABLE:
|
58
|
+
raise ImportError("The docling package is required. Please install the package using: $ uv add docling.")
|
59
|
+
else:
|
60
|
+
super().__init__(*args, **kwargs)
|
52
61
|
|
53
62
|
|
54
63
|
def _convert_source_to_docling_documents(self) -> List["DoclingDocument"]:
|
versionhq/knowledge/storage.py
CHANGED
@@ -65,15 +65,15 @@ class KnowledgeStorage(BaseKnowledgeStorage):
|
|
65
65
|
A class to store ChromaDB Storage vals that handles embeddings, ChromaClient, and Collection.
|
66
66
|
"""
|
67
67
|
|
68
|
-
|
68
|
+
app: Optional[ClientAPI] = None # store ChromaDBClient object
|
69
69
|
collection_name: Optional[str] = "knowledge"
|
70
|
-
|
71
|
-
embedding_function: Optional[Any] = None # store ChromaDB's EmbeddingFunction
|
70
|
+
collection: Optional[chromadb.Collection] = None
|
71
|
+
embedding_function: Optional[Any] = None # store ChromaDB's EmbeddingFunction object
|
72
72
|
embedder_config: Optional[Dict[str, Any]] = None # store config dict for embedding_function
|
73
73
|
|
74
74
|
|
75
75
|
def __init__(self, embedder_config: Optional[Dict[str, Any]] = None, collection_name: Optional[str] = None):
|
76
|
-
self.collection_name = collection_name
|
76
|
+
self.collection_name = collection_name if collection_name else "knowledge"
|
77
77
|
self.embedder_config = embedder_config
|
78
78
|
self.initialize_knowledge_storage()
|
79
79
|
|
@@ -100,13 +100,11 @@ class KnowledgeStorage(BaseKnowledgeStorage):
|
|
100
100
|
base_path = os.path.join(fetch_db_storage_path(), "knowledge")
|
101
101
|
chroma_client = chromadb.PersistentClient(path=base_path, settings=Settings(allow_reset=True))
|
102
102
|
self.app = chroma_client
|
103
|
-
|
104
|
-
self._set_embedding_function(self.embedder_config)
|
103
|
+
self._set_embedding_function(embedder_config=self.embedder_config)
|
105
104
|
|
106
105
|
try:
|
107
|
-
collection_name = f"knowledge_{self.collection_name}" if self.collection_name else "knowledge"
|
108
106
|
if self.app:
|
109
|
-
self.collection = self.app.get_or_create_collection(name=collection_name, embedding_function=self.embedding_function)
|
107
|
+
self.collection = self.app.get_or_create_collection(name=self.collection_name, embedding_function=self.embedding_function)
|
110
108
|
else:
|
111
109
|
raise Exception("Vector Database Client not initialized")
|
112
110
|
except Exception:
|
versionhq/memory/model.py
CHANGED
@@ -55,7 +55,13 @@ class ShortTermMemory(Memory):
|
|
55
55
|
try:
|
56
56
|
from versionhq.storage.mem0_storage import Mem0Storage
|
57
57
|
except ImportError:
|
58
|
-
|
58
|
+
try:
|
59
|
+
import os
|
60
|
+
os.system("uv add mem0ai --optional mem0ai")
|
61
|
+
|
62
|
+
from versionhq.storage.mem0_storage import Mem0Storage
|
63
|
+
except:
|
64
|
+
raise ImportError("Mem0 is not installed. Please install it with `uv pip install mem0ai`.")
|
59
65
|
|
60
66
|
storage = Mem0Storage(type="stm", agent=agent)
|
61
67
|
else:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: versionhq
|
3
|
-
Version: 1.1.11.
|
3
|
+
Version: 1.1.11.5
|
4
4
|
Summary: LLM orchestration frameworks for model-agnostic AI agents that handle complex outbound workflows
|
5
5
|
Author-email: Kuriko Iwai <kuriko@versi0n.io>
|
6
6
|
License: MIT License
|
@@ -31,12 +31,16 @@ Project-URL: Repository, https://github.com/versionHQ/multi-agent-system
|
|
31
31
|
Project-URL: Issues, https://github.com/versionHQ/multi-agent-system/issues
|
32
32
|
Keywords: orchestration framework,orchestration,ai agent,multi-agent system,RAG,agent
|
33
33
|
Classifier: Programming Language :: Python
|
34
|
+
Classifier: Programming Language :: Python :: 3
|
35
|
+
Classifier: Programming Language :: Python :: 3.11
|
36
|
+
Classifier: Programming Language :: Python :: 3.12
|
34
37
|
Classifier: License :: OSI Approved :: MIT License
|
35
38
|
Classifier: Operating System :: OS Independent
|
36
39
|
Classifier: Development Status :: 3 - Alpha
|
37
40
|
Classifier: Intended Audience :: Developers
|
41
|
+
Classifier: Intended Audience :: Information Technology
|
38
42
|
Classifier: Topic :: Software Development :: Build Tools
|
39
|
-
Requires-Python: >=3.
|
43
|
+
Requires-Python: >=3.11
|
40
44
|
Description-Content-Type: text/markdown
|
41
45
|
License-File: LICENSE
|
42
46
|
Requires-Dist: regex==2024.11.6
|
@@ -58,6 +62,7 @@ Requires-Dist: langchain-openai>=0.2.14
|
|
58
62
|
Requires-Dist: composio-langchain>=0.6.12
|
59
63
|
Requires-Dist: chromadb>=0.6.3
|
60
64
|
Requires-Dist: wheel>=0.45.1
|
65
|
+
Requires-Dist: envoy>=0.0.3
|
61
66
|
Provides-Extra: docling
|
62
67
|
Requires-Dist: docling>=2.17.0; extra == "docling"
|
63
68
|
Provides-Extra: mem0ai
|
@@ -66,12 +71,14 @@ Provides-Extra: pdfplumber
|
|
66
71
|
Requires-Dist: pdfplumber>=0.11.5; extra == "pdfplumber"
|
67
72
|
Provides-Extra: pandas
|
68
73
|
Requires-Dist: pandas>=2.2.3; extra == "pandas"
|
74
|
+
Provides-Extra: numpy
|
75
|
+
Requires-Dist: numpy>=1.26.4; extra == "numpy"
|
69
76
|
|
70
77
|
# Overview
|
71
78
|
|
72
79
|

|
73
80
|
[](https://github.com/versionHQ/multi-agent-system/actions/workflows/publish.yml)
|
74
|
-

|
75
82
|

|
76
83
|

|
77
84
|
|
@@ -142,7 +149,7 @@ You can specify which formation you want them to generate, or let the agent deci
|
|
142
149
|
pip install versionhq
|
143
150
|
```
|
144
151
|
|
145
|
-
(Python
|
152
|
+
(Python 3.11 or higher)
|
146
153
|
|
147
154
|
|
148
155
|
### Case 1. Solo Agent:
|
@@ -285,11 +292,20 @@ src/
|
|
285
292
|
|
286
293
|
## Setup
|
287
294
|
|
288
|
-
1. Install
|
295
|
+
1. Install `uv` package manager:
|
296
|
+
|
297
|
+
For MacOS:
|
298
|
+
|
289
299
|
```
|
290
300
|
brew install uv
|
291
301
|
```
|
292
302
|
|
303
|
+
For Ubuntu/Debian:
|
304
|
+
|
305
|
+
```
|
306
|
+
sudo apt-get install uv
|
307
|
+
```
|
308
|
+
|
293
309
|
2. Install dependencies:
|
294
310
|
```
|
295
311
|
uv venv
|
@@ -1,4 +1,4 @@
|
|
1
|
-
versionhq/__init__.py,sha256=
|
1
|
+
versionhq/__init__.py,sha256=2Zt2x3RvXctSU64Bv3Omw9EFjs5WQ3xKOijkiHNt4tU,863
|
2
2
|
versionhq/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
3
|
versionhq/_utils/i18n.py,sha256=TwA_PnYfDLA6VqlUDPuybdV9lgi3Frh_ASsb_X8jJo8,1483
|
4
4
|
versionhq/_utils/logger.py,sha256=U-MpeGueA6YS8Ptfy0VnU_ePsZP-8Pvkvi0tZ4s_UMg,1438
|
@@ -7,7 +7,7 @@ versionhq/_utils/usage_metrics.py,sha256=hhq1OCW8Z4V93vwW2O2j528EyjOlF8wlTsX5IL-
|
|
7
7
|
versionhq/_utils/vars.py,sha256=bZ5Dx_bFKlt3hi4-NNGXqdk7B23If_WaTIju2fiTyPQ,57
|
8
8
|
versionhq/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
9
|
versionhq/agent/default_agents.py,sha256=Sea3xDswxxMccer1vVDhp1E5etXW3ddf2n20JTMHgqs,503
|
10
|
-
versionhq/agent/model.py,sha256=
|
10
|
+
versionhq/agent/model.py,sha256=kL949N0MELAZz58XB_vlQfE1YQU_o4iHggNDn_h_7yo,22758
|
11
11
|
versionhq/agent/parser.py,sha256=riG0dkdQCxH7uJ0AbdVdg7WvL0BXhUgJht0VtQvxJBc,4082
|
12
12
|
versionhq/agent/rpm_controller.py,sha256=7AKIEPbWBq_ESOZCaiKVOGjfSPHd2qwg6-wbBlhqC0g,2367
|
13
13
|
versionhq/agent/TEMPLATES/Backstory.py,sha256=IAhGnnt6VUMe3wO6IzeyZPDNu7XE7Uiu3VEXUreOcKs,532
|
@@ -23,16 +23,16 @@ versionhq/clients/workflow/model.py,sha256=FNftenLLoha0bkivrjId32awLHAkBwIT8iNlj
|
|
23
23
|
versionhq/knowledge/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
24
|
versionhq/knowledge/_utils.py,sha256=YWRF8U533cfZes_gZqUvdj-K24MD2ri1R0gjc_aPYyc,402
|
25
25
|
versionhq/knowledge/embedding.py,sha256=KfHc__1THxb5jrg1EMrF-v944RDuIr2hE0l-MtM3Bp0,6826
|
26
|
-
versionhq/knowledge/model.py,sha256=
|
27
|
-
versionhq/knowledge/source.py,sha256=
|
28
|
-
versionhq/knowledge/source_docling.py,sha256=
|
29
|
-
versionhq/knowledge/storage.py,sha256=
|
26
|
+
versionhq/knowledge/model.py,sha256=n7kU4jQ24BUIxwosSVRK8tYhAFYhgc4yf7e4Q-bq4bk,1832
|
27
|
+
versionhq/knowledge/source.py,sha256=WOARChmm_cNtBD-xGo4RoYmcuodzdalctXI-gDBCW6k,13610
|
28
|
+
versionhq/knowledge/source_docling.py,sha256=Lv7PDE97pwV5_3SPcIgTzEu3H4obRbPfY3NALvfkgX8,5364
|
29
|
+
versionhq/knowledge/storage.py,sha256=uesUF6zFhXcgadrgzPVzLf9kBgvb3jMjWJIJzBlnhFk,7350
|
30
30
|
versionhq/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
31
31
|
versionhq/llm/llm_vars.py,sha256=PO__b-h5e-6oQ-uoIgXx3lPSAUPUwXYfdVRW73fvX14,8761
|
32
32
|
versionhq/llm/model.py,sha256=1uaBxT10GIlUl-BtE8Mfux-ZRcScp4HUIas_fD_cdWQ,14471
|
33
33
|
versionhq/memory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
34
34
|
versionhq/memory/contextual_memory.py,sha256=tCsOOAUnfrOL7YiakqGoi3uShzzS870TmGnlGd3z_A4,3556
|
35
|
-
versionhq/memory/model.py,sha256=
|
35
|
+
versionhq/memory/model.py,sha256=6Sy-cnrhHNIx3ZN38uNO7d8YywIl_uo_OvDVzVM-w14,5755
|
36
36
|
versionhq/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
37
37
|
versionhq/storage/base.py,sha256=p-Jas0fXQan_qotnRD6seQxrT2lj-uw9-SmHQhdppcs,355
|
38
38
|
versionhq/storage/ltm_sqlite_storage.py,sha256=LMitExpDATg__Oc7Hvl6h6uwQ7vUKQ34Eyp1BSt0DfY,4260
|
@@ -57,8 +57,8 @@ versionhq/tool/composio_tool_vars.py,sha256=FvBuEXsOQUYnN7RTFxT20kAkiEYkxWKkiVtg
|
|
57
57
|
versionhq/tool/decorator.py,sha256=C4ZM7Xi2gwtEMaSeRo-geo_g_MAkY77WkSLkAuY0AyI,1205
|
58
58
|
versionhq/tool/model.py,sha256=7ccEnje_8LuxLVeog6pL38nToArXQXk4KY7A9hfprDo,12239
|
59
59
|
versionhq/tool/tool_handler.py,sha256=2m41K8qo5bGCCbwMFferEjT-XZ-mE9F0mDUOBkgivOI,1416
|
60
|
-
versionhq-1.1.11.
|
61
|
-
versionhq-1.1.11.
|
62
|
-
versionhq-1.1.11.
|
63
|
-
versionhq-1.1.11.
|
64
|
-
versionhq-1.1.11.
|
60
|
+
versionhq-1.1.11.5.dist-info/LICENSE,sha256=7CCXuMrAjPVsUvZrsBq9DsxI2rLDUSYXR_qj4yO_ZII,1077
|
61
|
+
versionhq-1.1.11.5.dist-info/METADATA,sha256=kqMA6vNrLp3wgffnEfUJjPT2Jr3eylK-guAj8g4QXt8,18638
|
62
|
+
versionhq-1.1.11.5.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
63
|
+
versionhq-1.1.11.5.dist-info/top_level.txt,sha256=DClQwxDWqIUGeRJkA8vBlgeNsYZs4_nJWMonzFt5Wj0,10
|
64
|
+
versionhq-1.1.11.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|