versionhq 1.1.13.0__py3-none-any.whl → 1.2.0.1__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: versionhq
3
- Version: 1.1.13.0
3
+ Version: 1.2.0.1
4
4
  Summary: An agentic orchestration framework for building agent networks that handle task automation.
5
5
  Author-email: Kuriko Iwai <kuriko@versi0n.io>
6
6
  License: MIT License
@@ -74,13 +74,19 @@ Provides-Extra: pandas
74
74
  Requires-Dist: pandas>=2.2.3; extra == "pandas"
75
75
  Provides-Extra: numpy
76
76
  Requires-Dist: numpy>=1.26.4; extra == "numpy"
77
+ Provides-Extra: pygraphviz
78
+ Requires-Dist: pygraphviz>=1.14; extra == "pygraphviz"
79
+ Provides-Extra: networkx
80
+ Requires-Dist: networkx>=3.4.2; extra == "networkx"
81
+ Provides-Extra: matplotlib
82
+ Requires-Dist: matplotlib>=3.10.0; extra == "matplotlib"
77
83
 
78
84
  # Overview
79
85
 
80
86
  [![DL](https://img.shields.io/badge/Download-15K+-red)](https://clickpy.clickhouse.com/dashboard/versionhq)
81
87
  ![MIT license](https://img.shields.io/badge/License-MIT-green)
82
88
  [![Publisher](https://github.com/versionHQ/multi-agent-system/actions/workflows/publish.yml/badge.svg)](https://github.com/versionHQ/multi-agent-system/actions/workflows/publish.yml)
83
- ![PyPI](https://img.shields.io/badge/PyPI-v1.1.12+-blue)
89
+ ![PyPI](https://img.shields.io/badge/PyPI-v1.2.0+-blue)
84
90
  ![python ver](https://img.shields.io/badge/Python-3.11+-purple)
85
91
  ![pyenv ver](https://img.shields.io/badge/pyenv-2.5.0-orange)
86
92
 
@@ -103,15 +109,21 @@ A Python framework for agentic orchestration that handles complex task automatio
103
109
 
104
110
  - [Key Features](#key-features)
105
111
  - [Agent formation](#agent-formation)
112
+ - [Graph Theory Concept](#graph-theory-concept)
113
+ - [Agent optimization](#agent-optimization)
106
114
  - [Quick Start](#quick-start)
107
115
  - [Package installation](#package-installation)
108
116
  - [Forming a agent network](#forming-a-agent-network)
109
- - [Customizing AI agents](#customizing-ai-agents)
117
+ - [Executing tasks](#executing-tasks)
110
118
  - [Supervising](#supervising)
111
119
  - [Technologies Used](#technologies-used)
112
120
  - [Project Structure](#project-structure)
113
- - [Setting Up](#setting-up)
121
+ - [Setting Up a Project](#setting-up-a-project)
122
+ - [1. Installing package manager](#1-installing-package-manager)
123
+ - [2. Installing dependencies](#2-installing-dependencies)
124
+ - [3. Adding env secrets to .env file](#3-adding-env-secrets-to-env-file)
114
125
  - [Contributing](#contributing)
126
+ - [Steps](#steps)
115
127
  - [Package Management with uv](#package-management-with-uv)
116
128
  - [Pre-Commit Hooks](#pre-commit-hooks)
117
129
  - [Documentation](#documentation)
@@ -144,6 +156,73 @@ You can specify a desired formation or allow the agents to determine it autonomo
144
156
 
145
157
  <hr />
146
158
 
159
+ ### Graph Theory Concept
160
+
161
+ To completely automate task workflows, agents will build a `task-oriented network` by generating `nodes` that represent tasks and connecting them with dependency-defining `edges`.
162
+
163
+ Each node is triggered by specific events and executed by an assigned agent once all dependencies are met.
164
+
165
+ While the network automatically reconfigures itself, you retain the ability to direct the agents using `should_reform` variable.
166
+
167
+
168
+ The following code snippet demonstrates the `TaskGraph` and its visualization, saving the diagram to the `uploads` directory.
169
+
170
+ ```python
171
+ import versionhq as vhq
172
+
173
+ task_graph = vhq.TaskGraph(directed=False, should_reform=True) # triggering auto formation
174
+
175
+ task_a = vhq.Task(description="Research Topic")
176
+ task_b = vhq.Task(description="Outline Post")
177
+ task_c = vhq.Task(description="Write First Draft")
178
+
179
+ node_a = task_graph.add_task(task=task_a)
180
+ node_b = task_graph.add_task(task=task_b)
181
+ node_c = task_graph.add_task(task=task_c)
182
+
183
+ task_graph.add_dependency(
184
+ node_a.identifier, node_b.identifier,
185
+ type=vhq.DependencyType.FINISH_TO_START, weight=5, description="B depends on A"
186
+ )
187
+ task_graph.add_dependency(
188
+ node_a.identifier, node_c.identifier,
189
+ type=vhq.DependencyType.FINISH_TO_FINISH, lag=1, required=False, weight=3
190
+ )
191
+
192
+ task_graph.visualize()
193
+ ```
194
+
195
+ <hr />
196
+
197
+ ### Agent optimization
198
+
199
+ Agents are model-agnostic and can handle multiple tasks, leveraging their own and their peers' knowledge sources, memories, and tools.
200
+
201
+ Agents are optimized during network formation, but customization is possible before or after.
202
+
203
+ The following code snippet demonstrates agent customization:
204
+
205
+ ```python
206
+ import versionhq as vhq
207
+
208
+ agent = vhq.Agent(
209
+ role="Marketing Analyst",
210
+ goal="my amazing goal"
211
+ ) # assuming this agent was created during the network formation
212
+
213
+ # update the agent
214
+ agent.update(
215
+ llm="gemini-2.0", # updating LLM (Valid llm_config will be inherited to the new LLM.)
216
+ tools=[vhq.Tool(func=lambda x: x)], # adding tools
217
+ max_rpm=3,
218
+ knowledge_sources=["<KC1>", "<KS2>"], # adding knowledge sources. This will trigger the storage creation.
219
+ memory_config={"user_id": "0001"}, # adding memories
220
+ dummy="I am dummy" # <- invalid field will be automatically ignored
221
+ )
222
+ ```
223
+
224
+ <hr />
225
+
147
226
  ## Quick Start
148
227
 
149
228
  ### Package installation
@@ -169,11 +248,11 @@ You can specify a desired formation or allow the agents to determine it autonomo
169
248
  This will form a network with multiple agents on `Formation` and return `TaskOutput` object with output in JSON, plane text, Pydantic model format with evaluation.
170
249
 
171
250
 
172
- ### Customizing AI agents
251
+ ### Executing tasks
173
252
 
174
- You can simply build an agent using `Agent` model.
253
+ You can simply build an agent using `Agent` model and execute the task using `Task` class.
175
254
 
176
- By default, the agent prioritize JSON serializable outputs over plane texts.
255
+ By default, agents prioritize JSON over plane text outputs.
177
256
 
178
257
 
179
258
  ```python
@@ -189,7 +268,6 @@ By default, the agent prioritize JSON serializable outputs over plane texts.
189
268
 
190
269
 
191
270
  agent = vhq.Agent(role="demo", goal="amazing project goal")
192
-
193
271
  task = vhq.Task(
194
272
  description="Amazing task",
195
273
  pydantic_output=CustomOutput,
@@ -197,7 +275,7 @@ By default, the agent prioritize JSON serializable outputs over plane texts.
197
275
  callback_kwargs=dict(message="Hi! Here is the result: ")
198
276
  )
199
277
 
200
- res = task.execute_sync(agent=agent, context="amazing context to consider.")
278
+ res = task.execute(agent=agent, context="amazing context to consider.")
201
279
  print(res)
202
280
  ```
203
281
 
@@ -253,21 +331,29 @@ Tasks can be delegated to a team manager, peers in the team, or completely new a
253
331
 
254
332
  ## Technologies Used
255
333
 
334
+ **Graph Theory (Analysis and Visualization)**
335
+
336
+ * [NetworkX](https://networkx.org/documentation/stable/reference/introduction.html): A Python package to analyze, create, and manipulate complex graph networks.
337
+ * [Matplotlib](https://matplotlib.org/stable/index.html): Visualization library
338
+ * [Graphviz](https://graphviz.org/about/): Graph visualization software
339
+
340
+
256
341
  **Schema, Data Validation**
257
342
 
258
343
  * [Pydantic](https://docs.pydantic.dev/latest/): Data validation and serialization library for Python.
259
344
  * [Upstage](https://console.upstage.ai/docs/getting-started/overview): Document processer for ML tasks. (Use `Document Parser API` to extract data from documents)
260
345
  * [Docling](https://ds4sd.github.io/docling/): Document parsing
261
346
 
347
+
262
348
  **Storage**
263
349
 
264
350
  * [mem0ai](https://docs.mem0.ai/quickstart#install-package): Agents' memory storage and management.
265
351
  * [Chroma DB](https://docs.trychroma.com/): Vector database for storing and querying usage data.
266
352
  * [SQLite](https://www.sqlite.org/docs.html): C-language library to implements a small SQL database engine.
267
353
 
268
- **LLM-curation**
354
+ **LLM Integration**
269
355
 
270
- * [LiteLLM](https://docs.litellm.ai/docs/providers): Curation platform to access LLMs
356
+ * [LiteLLM](https://docs.litellm.ai/docs/providers): Integration to diverse LLMs
271
357
 
272
358
  **Tools**
273
359
 
@@ -290,6 +376,7 @@ Tasks can be delegated to a team manager, peers in the team, or completely new a
290
376
  └── workflows/ # Github actions
291
377
 
292
378
  docs/ # Documentation built by MkDocs
379
+ mkdocs.yml # MkDocs config
293
380
 
294
381
  src/
295
382
  └── versionhq/ # Orchestration framework package
@@ -304,30 +391,32 @@ src/
304
391
  │ └── llm/
305
392
  │ └── ...
306
393
 
307
- └── uploads/ # Local directory that stores uloaded files
394
+ └── uploads/ [.gitignore] # Local directory to store uploaded files such as graphviz diagrams generatd by `Network` class
395
+ |
396
+ pyproject.toml # Project config
308
397
 
309
398
  ```
310
399
 
311
400
  <hr />
312
401
 
313
- ## Setting Up
402
+ ## Setting Up a Project
314
403
 
315
- 1. Install `uv` package manager:
404
+ ### 1. Installing package manager
316
405
 
317
- For MacOS:
406
+ For MacOS:
318
407
 
319
- ```
320
- brew install uv
321
- ```
408
+ ```
409
+ brew install uv
410
+ ```
322
411
 
323
- For Ubuntu/Debian:
412
+ For Ubuntu/Debian:
413
+ ```
414
+ sudo apt-get install uv
415
+ ```
324
416
 
325
- ```
326
- sudo apt-get install uv
327
- ```
328
417
 
418
+ ### 2. Installing dependencies
329
419
 
330
- 2. Install dependencies:
331
420
  ```
332
421
  uv venv
333
422
  source .venv/bin/activate
@@ -335,29 +424,51 @@ src/
335
424
  uv sync --all-extras
336
425
  ```
337
426
 
338
- * In case of AssertionError/module mismatch, run Python version control using `.pyenv`
339
- ```
340
- pyenv install 3.12.8
341
- pyenv global 3.12.8 (optional: `pyenv global system` to get back to the system default ver.)
342
- uv python pin 3.12.8
343
- echo 3.12.8 >> .python-version
344
- ```
427
+ - AssertionError/module mismatch errors: Set up default Python version using `.pyenv`
428
+ ```
429
+ pyenv install 3.12.8
430
+ pyenv global 3.12.8 (optional: `pyenv global system` to get back to the system default ver.)
431
+ uv python pin 3.12.8
432
+ echo 3.12.8 >> .python-version
433
+ ```
345
434
 
435
+ - `pygraphviz` related errors: Run the following commands:
436
+ ```
437
+ brew install graphviz
438
+ uv pip install --config-settings="--global-option=build_ext" \
439
+ --config-settings="--global-option=-I$(brew --prefix graphviz)/include/" \
440
+ --config-settings="--global-option=-L$(brew --prefix graphviz)/lib/" \
441
+ pygraphviz
442
+ ```
443
+
444
+ * If the error continues, skip pygraphviz installation by:
445
+ ```
446
+ uv sync --all-extras --no-extra pygraphviz
447
+ ```
448
+
449
+ - `torch`/`Docling` related errors: Set up default Python version either `3.11.x` or `3.12.x` (same as AssertionError)
450
+
451
+ ### 3. Adding env secrets to .env file
346
452
 
347
- 3. Add secrets to `.env` file in the project root:
453
+ Create `.env` file in the project root and add following:
348
454
 
349
455
  ```
350
- LITELLM_API_KEY=your-litellm-api-key
351
456
  OPENAI_API_KEY=your-openai-api-key
457
+ GEMINI_API_KEY=your-gemini-api-key
458
+ LITELLM_API_KEY=your-litellm-api-key
352
459
  COMPOSIO_API_KEY=your-composio-api-key
353
460
  COMPOSIO_CLI_KEY=your-composio-cli-key
354
- [LLM_INTERFACE_PROVIDER_OF_YOUR_CHOICE]_API_KEY=your-api-key
461
+ [OTHER_LLM_INTERFACE_PROVIDER_OF_YOUR_CHOICE]_API_KEY=your-api-key
355
462
  ```
356
463
 
357
464
  <hr />
358
465
 
359
466
  ## Contributing
360
467
 
468
+ `versionhq` is a open source project.
469
+
470
+ ### Steps
471
+
361
472
  1. Create your feature branch (`git checkout -b feature/your-amazing-feature`)
362
473
 
363
474
  2. Create amazing features
@@ -365,6 +476,7 @@ src/
365
476
  3. Add a test funcition to the `tests` directory and run **pytest**.
366
477
 
367
478
  - Add secret values defined in `.github/workflows/run_test.yml` to your Github `repository secrets` located at settings > secrets & variables > Actions.
479
+
368
480
  - Run a following command:
369
481
  ```
370
482
  uv run pytest tests -vv --cache-clear
@@ -376,6 +488,8 @@ src/
376
488
 
377
489
  * Test functions within the files must begin with `test_`.
378
490
 
491
+ * Pytest priorities are `1. playground demo > 2. docs use cases > 3. other features`
492
+
379
493
 
380
494
  4. Update `docs` accordingly.
381
495
 
@@ -418,7 +532,7 @@ src/
418
532
 
419
533
  Pre-commit hooks help maintain code quality by running checks for formatting, linting, and other issues before each commit.
420
534
 
421
- * To skip pre-commit hooks (NOT RECOMMENDED)
535
+ * To skip pre-commit hooks
422
536
  ```
423
537
  git commit --no-verify -m "your-commit-message"
424
538
  ```
@@ -427,7 +541,7 @@ Pre-commit hooks help maintain code quality by running checks for formatting, li
427
541
 
428
542
  * To edit the documentation, see `docs` repository and edit the respective component.
429
543
 
430
- * We use `mkdocs` to update the docs. You can run the doc locally at http://127.0.0.1:8000/:
544
+ * We use `mkdocs` to update the docs. You can run the docs locally at http://127.0.0.1:8000/.
431
545
 
432
546
  ```
433
547
  uv run python3 -m mkdocs serve --clean
@@ -1,4 +1,4 @@
1
- versionhq/__init__.py,sha256=lfts4IiFxMVN-gRb7eoit56jqfMgOSMG1C8803J_-UQ,2400
1
+ versionhq/__init__.py,sha256=k5eLPCh71oIr_Rk7g31r0MUqFggA5sC41kO7V0V3E08,2783
2
2
  versionhq/_utils/__init__.py,sha256=dzoZr4cBlh-2QZuPzTdehPUCe9lP1dmRtauD7qTjUaA,158
3
3
  versionhq/_utils/i18n.py,sha256=TwA_PnYfDLA6VqlUDPuybdV9lgi3Frh_ASsb_X8jJo8,1483
4
4
  versionhq/_utils/logger.py,sha256=j9SlQPIefdVUlwpGfJY83E2BUt1ejWgZ2M2I8aMyQ3c,1579
@@ -7,7 +7,7 @@ versionhq/_utils/usage_metrics.py,sha256=NXF18dn5NNvGK7EsQ4AAghpR8ppYOjMx6ABenLL
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/inhouse_agents.py,sha256=vSobrH1gXDWlaNsiges3sqETeUrEssRzQvCZCY2hQZA,2374
10
- versionhq/agent/model.py,sha256=8aJ4rdgGEph10DuB8zhJkiRWzQTZ2LGKNq1MTeQ9hM8,23342
10
+ versionhq/agent/model.py,sha256=kSYCAiRxF62ztj-S-_KfN0mhPKikjbFZ0fy2Yj5J7Jo,25400
11
11
  versionhq/agent/parser.py,sha256=riG0dkdQCxH7uJ0AbdVdg7WvL0BXhUgJht0VtQvxJBc,4082
12
12
  versionhq/agent/rpm_controller.py,sha256=grezIxyBci_lDlwAlgWFRyR5KOocXeOhYkgN02dNFNE,2360
13
13
  versionhq/agent/TEMPLATES/Backstory.py,sha256=IAhGnnt6VUMe3wO6IzeyZPDNu7XE7Uiu3VEXUreOcKs,532
@@ -28,11 +28,13 @@ versionhq/knowledge/source.py,sha256=30VXsl3uHdM0wK0Dik3XfFxpNpEiy539PBNBvg0Y4-g
28
28
  versionhq/knowledge/source_docling.py,sha256=hhHn3rS4KVsFKEPWcfllM8VxSL86PckZdAHDZNQNOq8,5411
29
29
  versionhq/knowledge/storage.py,sha256=7oxCg3W9mFjYH1YmuH9kFtTbNxquzYFjuUjd_TlsB9E,8170
30
30
  versionhq/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- versionhq/llm/llm_vars.py,sha256=3fax7EXNwCw1yapIoqRMmwgGmK3O37Wm1e8uvq8ObL4,7063
32
- versionhq/llm/model.py,sha256=QacjThF43Vfel6LIvSt5KkOZAbzo1jYjwFgFfhrv7ms,17174
31
+ versionhq/llm/llm_vars.py,sha256=wjQK20cKvph6Vq1v71o4d16zBGcHlwq0bzOT_zWno7w,7041
32
+ versionhq/llm/model.py,sha256=wlzDUMEyIOm808d1vzqu9gmbB4ch-s_EUvwFR60gR80,17177
33
33
  versionhq/memory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
34
  versionhq/memory/contextual_memory.py,sha256=tCsOOAUnfrOL7YiakqGoi3uShzzS870TmGnlGd3z_A4,3556
35
35
  versionhq/memory/model.py,sha256=4wow2O3UuMZ0AbC2NyxddGZac3-_GjNZbK9wsA015NA,8145
36
+ versionhq/network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ versionhq/network/model.py,sha256=3L5mTfGUeoY63z3NiE_xI5yjN91WjYNWqd6CDXE38YY,20318
36
38
  versionhq/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
39
  versionhq/storage/base.py,sha256=p-Jas0fXQan_qotnRD6seQxrT2lj-uw9-SmHQhdppcs,355
38
40
  versionhq/storage/ltm_sqlite_storage.py,sha256=wdUiuwHfJocdk0UGqyrdU4S5Nae1rgsoRNu3LWmGFcI,3951
@@ -41,16 +43,16 @@ versionhq/storage/rag_storage.py,sha256=ScWC0vH327vnGw8UGscAOoIfqrq3mhvXT3vEKzHZ
41
43
  versionhq/storage/task_output_storage.py,sha256=E1t_Fkt78dPYIOl3MP7LfQ8oGtjlzxBuSNq_8ZXKho8,4573
42
44
  versionhq/storage/utils.py,sha256=ByYXPoEIGJYLUqz-DWjbCAnneNrH1otiYbp12SCILpM,747
43
45
  versionhq/task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- versionhq/task/evaluate.py,sha256=fBLL6sm763e3Ev6uU0tMqFRUVwAcBj6dLM5N062qHuc,3952
45
- versionhq/task/formation.py,sha256=QXFZfY604cpS79X7HEBmwFKn91H8jS3Ak6EhJGgaRIg,6355
46
+ versionhq/task/evaluate.py,sha256=WdUgjbZL62XrxyWe5MTz29scfzwmuAHGxJ7GvAB8Fmk,3954
47
+ versionhq/task/formation.py,sha256=iHhW2webMirYC78G8kHpaMTYjCdq7c3yFD2u2Egd8Eo,6350
46
48
  versionhq/task/formatter.py,sha256=N8Kmk9vtrMtBdgJ8J7RmlKNMdZWSmV8O1bDexmCWgU0,643
47
49
  versionhq/task/log_handler.py,sha256=LT7YnO7gcPR9IZS7eRvMjnHh8crMBFtqduxd8dxIbkk,1680
48
- versionhq/task/model.py,sha256=qbH_fMnkDqZUp-Sgd7LB7LMsXSaytMFMVffS5q3En1c,29160
49
- versionhq/task/structured_response.py,sha256=uVqgeUxNOACPe2hdc0RELSbtKd1vrwonfjXMOGTT0TI,4818
50
+ versionhq/task/model.py,sha256=zAnZ-_5YKZRs43gpM2AL9IVtttq5GqGfqfCMj_Oyz9g,30624
51
+ versionhq/task/structured_response.py,sha256=4q-hQPu7oMMHHXEzh9YW4SJ7N5eCZ7OfZ65juyl_jCI,5000
50
52
  versionhq/task/TEMPLATES/Description.py,sha256=V-4kh8xpQTKOcDMi2xnuP-fcNk6kuoz1_5tYBlDLQWQ,420
51
53
  versionhq/team/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
- versionhq/team/model.py,sha256=qPsV3O3O2TIOT-3h142KVVFdO587LhoOeVkK2niZHEc,19062
53
- versionhq/team/team_planner.py,sha256=x1eLkdfQwW6w3Kyi_wVaVlA41TaNJDIYWhtEqp_OcaI,3675
54
+ versionhq/team/model.py,sha256=kxrjF3RFGO9l3IsJIffI1nqgl_Vh5RLuhqrwIqbEoBY,19214
55
+ versionhq/team/team_planner.py,sha256=Zc3zvhPR7T0O8RQoq9CKOrvrll4klemY1rONLFeJ96M,3663
54
56
  versionhq/tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
57
  versionhq/tool/cache_handler.py,sha256=iL8FH7X0G-cdT0uhJwzuhLDaadTXOdfybZcDy151-es,1085
56
58
  versionhq/tool/composio_tool.py,sha256=38mEiVvTkuw1BLD233Bl1Gwxbpss1yfQiZLTWwX6BdA,8648
@@ -58,8 +60,8 @@ versionhq/tool/composio_tool_vars.py,sha256=FvBuEXsOQUYnN7RTFxT20kAkiEYkxWKkiVtg
58
60
  versionhq/tool/decorator.py,sha256=C4ZM7Xi2gwtEMaSeRo-geo_g_MAkY77WkSLkAuY0AyI,1205
59
61
  versionhq/tool/model.py,sha256=PO4zNWBZcJhYVur381YL1dy6zqurio2jWjtbxOxZMGI,12194
60
62
  versionhq/tool/tool_handler.py,sha256=2m41K8qo5bGCCbwMFferEjT-XZ-mE9F0mDUOBkgivOI,1416
61
- versionhq-1.1.13.0.dist-info/LICENSE,sha256=cRoGGdM73IiDs6nDWKqPlgSv7aR4n-qBXYnJlCMHCeE,1082
62
- versionhq-1.1.13.0.dist-info/METADATA,sha256=zNnwZLvuWsZPjXoCrsa7PqD8iR1sJ2zUjjj8wV0QkfA,17365
63
- versionhq-1.1.13.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
64
- versionhq-1.1.13.0.dist-info/top_level.txt,sha256=DClQwxDWqIUGeRJkA8vBlgeNsYZs4_nJWMonzFt5Wj0,10
65
- versionhq-1.1.13.0.dist-info/RECORD,,
63
+ versionhq-1.2.0.1.dist-info/LICENSE,sha256=cRoGGdM73IiDs6nDWKqPlgSv7aR4n-qBXYnJlCMHCeE,1082
64
+ versionhq-1.2.0.1.dist-info/METADATA,sha256=SIMqOnM5upA8vno-gWhl5Is-yCSuXUlzYvxVX1Lve1A,21535
65
+ versionhq-1.2.0.1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
66
+ versionhq-1.2.0.1.dist-info/top_level.txt,sha256=DClQwxDWqIUGeRJkA8vBlgeNsYZs4_nJWMonzFt5Wj0,10
67
+ versionhq-1.2.0.1.dist-info/RECORD,,