versionhq 1.2.2.10__tar.gz → 1.2.3.1__tar.gz
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-1.2.2.10 → versionhq-1.2.3.1}/.github/workflows/publish.yml +1 -1
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/.github/workflows/publish_testpypi.yml +1 -1
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/.github/workflows/run_tests.yml +1 -1
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/.gitignore +3 -0
- versionhq-1.2.3.1/.python-version +1 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/PKG-INFO +13 -16
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/README.md +2 -7
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/index.md +1 -7
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/quickstart.md +1 -1
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/pyproject.toml +29 -12
- versionhq-1.2.3.1/runtime.txt +2 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/__init__.py +1 -1
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/clients/workflow/model.py +4 -71
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/task/TEMPLATES/Description.py +1 -1
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/task/evaluation.py +29 -61
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/task/model.py +11 -6
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/tool/rag_tool.py +5 -1
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq.egg-info/PKG-INFO +13 -16
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq.egg-info/requires.txt +11 -10
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/clients/workflow_test.py +2 -17
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/task/doc_eval_test.py +0 -2
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/uv.lock +1315 -476
- versionhq-1.2.2.10/.python-version +0 -1
- versionhq-1.2.2.10/runtime.txt +0 -2
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/.env.sample +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/.github/workflows/deploy_docs.yml +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/.github/workflows/security_check.yml +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/.pre-commit-config.yaml +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/LICENSE +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/SECURITY.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/db/preprocess.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/CNAME +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/_logos/favicon.ico +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/_logos/logo192.png +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/agent/config.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/agent/index.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/agent/task-handling.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/agent-network/config.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/agent-network/form.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/agent-network/index.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/agent-network/ref.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/knowledge.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/llm/index.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/memory.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/rag-tool.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/task/evaluation.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/task/index.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/task/reference.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/task/response-field.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/task/task-execution.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/task/task-output.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/task/task-strc-response.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/task-graph/index.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/core/tool.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/stylesheets/main.css +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/docs/tags.md +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/mkdocs.yml +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/requirements-dev.txt +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/requirements.txt +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/setup.cfg +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/_utils/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/_utils/i18n.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/_utils/llm_as_a_judge.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/_utils/logger.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/_utils/process_config.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/_utils/usage_metrics.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/_utils/vars.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/agent/TEMPLATES/Backstory.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/agent/TEMPLATES/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/agent/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/agent/inhouse_agents.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/agent/model.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/agent/parser.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/agent/rpm_controller.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/agent_network/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/agent_network/formation.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/agent_network/model.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/cli/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/clients/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/clients/customer/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/clients/customer/model.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/clients/product/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/clients/product/model.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/clients/workflow/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/knowledge/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/knowledge/_utils.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/knowledge/embedding.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/knowledge/model.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/knowledge/source.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/knowledge/source_docling.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/knowledge/storage.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/llm/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/llm/llm_vars.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/llm/model.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/memory/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/memory/contextual_memory.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/memory/model.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/storage/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/storage/base.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/storage/ltm_sqlite_storage.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/storage/mem0_storage.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/storage/rag_storage.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/storage/task_output_storage.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/storage/utils.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/task/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/task/formatter.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/task/structured_response.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/task_graph/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/task_graph/colors.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/task_graph/draft.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/task_graph/model.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/tool/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/tool/cache_handler.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/tool/composio_tool.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/tool/composio_tool_vars.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/tool/decorator.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/tool/model.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq/tool/tool_handler.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq.egg-info/SOURCES.txt +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq.egg-info/dependency_links.txt +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/src/versionhq.egg-info/top_level.txt +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/_sample/sample.csv +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/_sample/sample.json +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/agent/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/agent/agent_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/agent/doc_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/agent_network/Prompts/Demo_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/agent_network/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/agent_network/agent_network_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/agent_network/doc_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/cli/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/clients/customer_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/clients/product_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/conftest.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/doc_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/formation_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/knowledge/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/knowledge/knowledge_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/knowledge/mock_report_compressed.pdf +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/llm/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/llm/llm_connection_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/llm/llm_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/memory/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/memory/memory_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/task/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/task/doc_taskoutput_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/task/doc_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/task/eval_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/task/task_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/task_graph/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/task_graph/doc_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/task_graph/task_graph_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/tool/__init__.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/tool/composio_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/tool/doc_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/tool/rag_tool_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/tool/tool_test.py +0 -0
- {versionhq-1.2.2.10 → versionhq-1.2.3.1}/tests/usecase_test.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
3.13.1
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: versionhq
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.3.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
|
@@ -34,13 +34,14 @@ Classifier: Programming Language :: Python
|
|
34
34
|
Classifier: Programming Language :: Python :: 3
|
35
35
|
Classifier: Programming Language :: Python :: 3.11
|
36
36
|
Classifier: Programming Language :: Python :: 3.12
|
37
|
+
Classifier: Programming Language :: Python :: 3.13
|
37
38
|
Classifier: License :: OSI Approved :: MIT License
|
38
39
|
Classifier: Operating System :: OS Independent
|
39
40
|
Classifier: Development Status :: 3 - Alpha
|
40
41
|
Classifier: Intended Audience :: Developers
|
41
42
|
Classifier: Intended Audience :: Information Technology
|
42
43
|
Classifier: Topic :: Software Development :: Build Tools
|
43
|
-
Requires-Python:
|
44
|
+
Requires-Python: >=3.11
|
44
45
|
Description-Content-Type: text/markdown
|
45
46
|
License-File: LICENSE
|
46
47
|
Requires-Dist: regex==2024.11.6
|
@@ -67,23 +68,24 @@ Requires-Dist: composio-core==0.7.0
|
|
67
68
|
Requires-Dist: networkx>=3.4.2
|
68
69
|
Requires-Dist: matplotlib>=3.10.0
|
69
70
|
Requires-Dist: boto3>=1.37.1
|
71
|
+
Requires-Dist: scikit-learn>=1.6.1
|
72
|
+
Requires-Dist: numpy>=1.26.4
|
73
|
+
Requires-Dist: pandas>=2.2.3
|
74
|
+
Provides-Extra: torch
|
75
|
+
Requires-Dist: torch>=2.6.0; extra == "torch"
|
76
|
+
Requires-Dist: torchvision>=0.21.0; extra == "torch"
|
77
|
+
Requires-Dist: pytorch-triton-xpu>=3.2.0; sys_platform == "linux" and extra == "torch"
|
70
78
|
Provides-Extra: docling
|
71
|
-
Requires-Dist: docling>=2.
|
79
|
+
Requires-Dist: docling>=2.25.2; extra == "docling"
|
72
80
|
Provides-Extra: mem0ai
|
73
81
|
Requires-Dist: mem0ai>=0.1.55; extra == "mem0ai"
|
74
82
|
Provides-Extra: pdfplumber
|
75
83
|
Requires-Dist: pdfplumber>=0.11.5; extra == "pdfplumber"
|
76
|
-
Provides-Extra: pandas
|
77
|
-
Requires-Dist: pandas>=2.2.3; extra == "pandas"
|
78
|
-
Provides-Extra: numpy
|
79
|
-
Requires-Dist: numpy>=1.26.4; extra == "numpy"
|
80
84
|
Provides-Extra: pygraphviz
|
81
85
|
Requires-Dist: pygraphviz>=1.14; extra == "pygraphviz"
|
82
86
|
Provides-Extra: tools
|
83
87
|
Requires-Dist: html2text>=2024.2.26; extra == "tools"
|
84
88
|
Requires-Dist: sec-api>=1.0.28; extra == "tools"
|
85
|
-
Provides-Extra: eval
|
86
|
-
Requires-Dist: scikit-learn>=1.6.1; extra == "eval"
|
87
89
|
|
88
90
|
# Overview
|
89
91
|
|
@@ -91,7 +93,7 @@ Requires-Dist: scikit-learn>=1.6.1; extra == "eval"
|
|
91
93
|

|
92
94
|
[](https://github.com/versionHQ/multi-agent-system/actions/workflows/publish.yml)
|
93
95
|

|
94
|
-

|
96
|
+

|
95
97
|

|
96
98
|
|
97
99
|
|
@@ -252,7 +254,7 @@ agent.update(
|
|
252
254
|
pip install versionhq
|
253
255
|
```
|
254
256
|
|
255
|
-
(Python 3.11
|
257
|
+
(Python 3.11 | 3.12 | 3.13)
|
256
258
|
|
257
259
|
|
258
260
|
### Launching an agent
|
@@ -384,7 +386,6 @@ Tasks can be delegated to a manager, peers within the agent network, or a comple
|
|
384
386
|
|
385
387
|
**Deployment**
|
386
388
|
|
387
|
-
* **Python**: Primary programming language. v3.12.x is recommended
|
388
389
|
* [uv](https://docs.astral.sh/uv/): Python package installer and resolver
|
389
390
|
* [pre-commit](https://pre-commit.com/): Manage and maintain pre-commit hooks
|
390
391
|
* [setuptools](https://pypi.org/project/setuptools/): Build python modules
|
@@ -473,8 +474,6 @@ pyproject.toml # Project config
|
|
473
474
|
uv sync --all-extras --no-extra pygraphviz
|
474
475
|
```
|
475
476
|
|
476
|
-
- `torch`/`Docling` related errors: Set up default Python version either `3.11.x` or `3.12.x` (same as AssertionError)
|
477
|
-
|
478
477
|
### Adding env secrets to .env file
|
479
478
|
|
480
479
|
Create `.env` file in the project root and add secret vars following `.env.sample` file.
|
@@ -580,8 +579,6 @@ Common issues and solutions:
|
|
580
579
|
|
581
580
|
* Memory errors: If processing large contracts, you may need to increase the available memory for the Python process.
|
582
581
|
|
583
|
-
* Issues related to the Python version: Docling/Pytorch is not ready for Python 3.13 as of Jan 2025. Use Python 3.12.x as default by running `uv venv --python 3.12.8` and `uv python pin 3.12.8`.
|
584
|
-
|
585
582
|
* Issues related to dependencies: `rm -rf uv.lock`, `uv cache clean`, `uv venv`, and run `uv pip install -r requirements.txt -v`.
|
586
583
|
|
587
584
|
* Issues related to agents and other systems: Check `.logs` directory located in the root directory for error messages and stack traces.
|
@@ -4,7 +4,7 @@
|
|
4
4
|

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

|
7
|
-

|
7
|
+

|
8
8
|

|
9
9
|
|
10
10
|
|
@@ -165,7 +165,7 @@ agent.update(
|
|
165
165
|
pip install versionhq
|
166
166
|
```
|
167
167
|
|
168
|
-
(Python 3.11
|
168
|
+
(Python 3.11 | 3.12 | 3.13)
|
169
169
|
|
170
170
|
|
171
171
|
### Launching an agent
|
@@ -297,7 +297,6 @@ Tasks can be delegated to a manager, peers within the agent network, or a comple
|
|
297
297
|
|
298
298
|
**Deployment**
|
299
299
|
|
300
|
-
* **Python**: Primary programming language. v3.12.x is recommended
|
301
300
|
* [uv](https://docs.astral.sh/uv/): Python package installer and resolver
|
302
301
|
* [pre-commit](https://pre-commit.com/): Manage and maintain pre-commit hooks
|
303
302
|
* [setuptools](https://pypi.org/project/setuptools/): Build python modules
|
@@ -386,8 +385,6 @@ pyproject.toml # Project config
|
|
386
385
|
uv sync --all-extras --no-extra pygraphviz
|
387
386
|
```
|
388
387
|
|
389
|
-
- `torch`/`Docling` related errors: Set up default Python version either `3.11.x` or `3.12.x` (same as AssertionError)
|
390
|
-
|
391
388
|
### Adding env secrets to .env file
|
392
389
|
|
393
390
|
Create `.env` file in the project root and add secret vars following `.env.sample` file.
|
@@ -493,8 +490,6 @@ Common issues and solutions:
|
|
493
490
|
|
494
491
|
* Memory errors: If processing large contracts, you may need to increase the available memory for the Python process.
|
495
492
|
|
496
|
-
* Issues related to the Python version: Docling/Pytorch is not ready for Python 3.13 as of Jan 2025. Use Python 3.12.x as default by running `uv venv --python 3.12.8` and `uv python pin 3.12.8`.
|
497
|
-
|
498
493
|
* Issues related to dependencies: `rm -rf uv.lock`, `uv cache clean`, `uv venv`, and run `uv pip install -r requirements.txt -v`.
|
499
494
|
|
500
495
|
* Issues related to agents and other systems: Check `.logs` directory located in the root directory for error messages and stack traces.
|
@@ -4,7 +4,7 @@
|
|
4
4
|

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

|
7
|
-

|
7
|
+

|
8
8
|

|
9
9
|
|
10
10
|
A Python framework for agentic orchestration that handles complex task automation.
|
@@ -175,8 +175,6 @@ agent.update(
|
|
175
175
|
uv sync --all-extras --no-extra pygraphviz
|
176
176
|
```
|
177
177
|
|
178
|
-
- `torch`/`Docling` related errors: Set up default Python version either `3.11.x` or `3.12.x` (same as AssertionError)
|
179
|
-
|
180
178
|
**Setting up a local env file**
|
181
179
|
|
182
180
|
Create `.env` file at the root of the project directry and add your keys following `.env.sample`.
|
@@ -221,8 +219,6 @@ Create `.env` file at the root of the project directry and add your keys followi
|
|
221
219
|
|
222
220
|
**Deployment**
|
223
221
|
|
224
|
-
* **Python**: Primary programming language. v3.12.x is recommended
|
225
|
-
|
226
222
|
* [uv](https://docs.astral.sh/uv/): Python package installer and resolver
|
227
223
|
|
228
224
|
* [pre-commit](https://pre-commit.com/): Manage and maintain pre-commit hooks
|
@@ -241,8 +237,6 @@ Common issues and solutions:
|
|
241
237
|
|
242
238
|
* Memory errors: If processing large contracts, you may need to increase the available memory for the Python process.
|
243
239
|
|
244
|
-
* Issues related to the Python version: Docling/Pytorch is not ready for Python 3.13 as of Jan 2025. Use Python 3.12.x as default by running `uv venv --python 3.12.8` and `uv python pin 3.12.8`.
|
245
|
-
|
246
240
|
* Issues related to dependencies: `rm -rf uv.lock`, `uv cache clean`, `uv venv`, and run `uv pip install -r requirements.txt -v`.
|
247
241
|
|
248
242
|
* Issues related to agents and other systems: Check `.logs` directory located in the root directory for detailed error messages and stack traces.
|
@@ -15,11 +15,11 @@ exclude = ["test*", "__pycache__", "*.egg-info"]
|
|
15
15
|
|
16
16
|
[project]
|
17
17
|
name = "versionhq"
|
18
|
-
version = "1.2.
|
18
|
+
version = "1.2.3.1"
|
19
19
|
authors = [{ name = "Kuriko Iwai", email = "kuriko@versi0n.io" }]
|
20
20
|
description = "An agentic orchestration framework for building agent networks that handle task automation."
|
21
21
|
readme = "README.md"
|
22
|
-
requires-python = ">=3.11
|
22
|
+
requires-python = ">=3.11"
|
23
23
|
license = { file = "LICENSE" }
|
24
24
|
keywords = ["orchestration framework", "orchestration", "ai agent", "multi-agent system", "RAG", "agent", "agentic orchestration", "llm"]
|
25
25
|
dependencies = [
|
@@ -47,12 +47,16 @@ dependencies = [
|
|
47
47
|
"networkx>=3.4.2",
|
48
48
|
"matplotlib>=3.10.0",
|
49
49
|
"boto3>=1.37.1",
|
50
|
+
"scikit-learn>=1.6.1",
|
51
|
+
"numpy>=1.26.4",
|
52
|
+
"pandas>=2.2.3",
|
50
53
|
]
|
51
54
|
classifiers = [
|
52
55
|
"Programming Language :: Python",
|
53
56
|
"Programming Language :: Python :: 3",
|
54
57
|
"Programming Language :: Python :: 3.11",
|
55
58
|
"Programming Language :: Python :: 3.12",
|
59
|
+
"Programming Language :: Python :: 3.13",
|
56
60
|
"License :: OSI Approved :: MIT License",
|
57
61
|
"Operating System :: OS Independent",
|
58
62
|
"Development Status :: 3 - Alpha",
|
@@ -68,8 +72,13 @@ Repository = "https://github.com/versionHQ/multi-agent-system"
|
|
68
72
|
Issues = "https://github.com/versionHQ/multi-agent-system/issues"
|
69
73
|
|
70
74
|
[project.optional-dependencies]
|
75
|
+
torch = [
|
76
|
+
"torch>=2.6.0",
|
77
|
+
"torchvision>=0.21.0",
|
78
|
+
"pytorch-triton-xpu>=3.2.0 ; sys_platform == 'linux'",
|
79
|
+
]
|
71
80
|
docling = [
|
72
|
-
"docling>=2.
|
81
|
+
"docling>=2.25.2",
|
73
82
|
]
|
74
83
|
mem0ai = [
|
75
84
|
"mem0ai>=0.1.55",
|
@@ -77,12 +86,6 @@ mem0ai = [
|
|
77
86
|
pdfplumber = [
|
78
87
|
"pdfplumber>=0.11.5",
|
79
88
|
]
|
80
|
-
pandas = [
|
81
|
-
"pandas>=2.2.3",
|
82
|
-
]
|
83
|
-
numpy = [
|
84
|
-
"numpy>=1.26.4",
|
85
|
-
]
|
86
89
|
pygraphviz = [
|
87
90
|
"pygraphviz>=1.14",
|
88
91
|
]
|
@@ -90,9 +93,7 @@ tools = [
|
|
90
93
|
"html2text>=2024.2.26",
|
91
94
|
"sec-api>=1.0.28",
|
92
95
|
]
|
93
|
-
|
94
|
-
"scikit-learn>=1.6.1",
|
95
|
-
]
|
96
|
+
|
96
97
|
|
97
98
|
[tool.uv]
|
98
99
|
dev-dependencies = [
|
@@ -110,6 +111,22 @@ dev-dependencies = [
|
|
110
111
|
"pillow>=10.4.0",
|
111
112
|
]
|
112
113
|
|
114
|
+
[tool.uv.sources]
|
115
|
+
torch = [
|
116
|
+
{ index = "pytorch-xpu", marker = "sys_platform == 'win32' or sys_platform == 'linux'" },
|
117
|
+
]
|
118
|
+
torchvision = [
|
119
|
+
{ index = "pytorch-xpu", marker = "sys_platform == 'win32' or sys_platform == 'linux'" },
|
120
|
+
]
|
121
|
+
pytorch-triton-xpu = [
|
122
|
+
{ index = "pytorch-xpu", marker = "sys_platform == 'linux'" },
|
123
|
+
]
|
124
|
+
|
125
|
+
[[tool.uv.index]]
|
126
|
+
name = "pytorch-xpu"
|
127
|
+
url = "https://download.pytorch.org/whl/xpu"
|
128
|
+
explicit = true
|
129
|
+
|
113
130
|
[tool.uv.workspace]
|
114
131
|
members = ["Kuriko", "krik8235", "Kuriko IWAI"]
|
115
132
|
|
@@ -2,92 +2,25 @@ import uuid
|
|
2
2
|
from abc import ABC
|
3
3
|
from datetime import datetime
|
4
4
|
from typing import Any, Dict, List, Optional
|
5
|
-
|
5
|
+
|
6
6
|
from pydantic import UUID4, InstanceOf, BaseModel, ConfigDict, Field, field_validator, model_validator
|
7
7
|
from pydantic_core import PydanticCustomError
|
8
8
|
|
9
|
-
from versionhq.clients.product.model import Product
|
10
|
-
from versionhq.clients.customer.model import Customer
|
11
9
|
from versionhq.agent.model import Agent
|
12
10
|
from versionhq.agent_network.model import AgentNetwork
|
11
|
+
from versionhq.clients.product.model import Product
|
12
|
+
from versionhq.clients.customer.model import Customer
|
13
13
|
from versionhq.tool.composio_tool_vars import ComposioAppName
|
14
14
|
|
15
15
|
|
16
|
-
class ScoreFormat:
|
17
|
-
def __init__(self, rate: float | int = 0, weight: int = 1):
|
18
|
-
self.rate = rate
|
19
|
-
self.weight = weight
|
20
|
-
self.aggregate = rate * weight
|
21
|
-
|
22
|
-
|
23
|
-
class Score:
|
24
|
-
"""
|
25
|
-
Evaluate the score on 0 (no performance) to 1 scale.
|
26
|
-
`rate`: Any float from 0.0 to 1.0 given by an agent.
|
27
|
-
`weight`: Importance of each factor to the aggregated score.
|
28
|
-
"""
|
29
|
-
|
30
|
-
def __init__(
|
31
|
-
self,
|
32
|
-
brand_tone: ScoreFormat = ScoreFormat(0, 0),
|
33
|
-
audience: ScoreFormat = ScoreFormat(0, 0),
|
34
|
-
track_record: ScoreFormat = ScoreFormat(0, 0),
|
35
|
-
**kwargs: Optional[Dict[str, ScoreFormat]],
|
36
|
-
):
|
37
|
-
self.brand_tone = brand_tone
|
38
|
-
self.audience = audience
|
39
|
-
self.track_record = track_record
|
40
|
-
self.kwargs = kwargs
|
41
|
-
|
42
|
-
|
43
|
-
def result(self) -> int:
|
44
|
-
aggregate_score = int(self.brand_tone.aggregate) + int(self.audience.aggregate) + int(self.track_record.aggregate)
|
45
|
-
denominator = self.brand_tone.weight + self.audience.weight + self.track_record.weight
|
46
|
-
|
47
|
-
for k, v in self.kwargs.items():
|
48
|
-
aggregate_score += v.aggregate
|
49
|
-
denominator += v.weight
|
50
|
-
|
51
|
-
if denominator == 0:
|
52
|
-
return 0
|
53
|
-
|
54
|
-
return round(aggregate_score / denominator, 2)
|
55
|
-
|
56
|
-
|
57
|
-
|
58
16
|
class MessagingComponent(ABC, BaseModel):
|
59
17
|
layer_id: int = Field(default=0, description="add id of the layer: 0, 1, 2")
|
60
18
|
message: str = Field(default=None, max_length=1024, description="text message content to be sent")
|
61
|
-
score:
|
19
|
+
score: Optional[float | int] = Field(default=None)
|
62
20
|
condition: str = Field(default=None, description="condition to execute the next component")
|
63
21
|
interval: Optional[str] = Field(default=None, description="ideal interval to set to assess the condition")
|
64
22
|
|
65
23
|
|
66
|
-
def store_scoring_result(self, subject: str, score_raw: int | Score | ScoreFormat = None) -> Self:
|
67
|
-
"""
|
68
|
-
Set up the `score` field
|
69
|
-
"""
|
70
|
-
|
71
|
-
if isinstance(score_raw, Score):
|
72
|
-
setattr(self, "score", score_raw)
|
73
|
-
|
74
|
-
elif isinstance(score_raw, ScoreFormat):
|
75
|
-
score_instance = Score()
|
76
|
-
setattr(score_instance, subject, score_raw)
|
77
|
-
setattr(self, "score", score_instance)
|
78
|
-
|
79
|
-
elif isinstance(score_raw, int) or isinstance(score_raw, float):
|
80
|
-
score_instance, score_format_instance = Score(), ScoreFormat(rate=score_raw, weight=1)
|
81
|
-
setattr(score_instance, "kwargs", { subject: score_format_instance })
|
82
|
-
setattr(self, "score", score_instance)
|
83
|
-
|
84
|
-
else:
|
85
|
-
pass
|
86
|
-
|
87
|
-
return self
|
88
|
-
|
89
|
-
|
90
|
-
|
91
24
|
class MessagingWorkflow(ABC, BaseModel):
|
92
25
|
"""
|
93
26
|
Store 3 layers of messaging workflow sent to `customer` on the `product`
|
@@ -1,4 +1,4 @@
|
|
1
|
-
EVALUATE="""Evaluate the provided task output against the given task description, assigning a score between 0 (worst) and 1 (best) based on the specified criteria. Scores should be numerical (integers or decimals). Provide specific suggestions for improvement. Do not assign identical scores to different criteria unless otherwise you have clear reasons to do so:
|
1
|
+
EVALUATE="""Evaluate the provided task output against the given task description, assigning a score between 0 (worst) and 1 (best) based on the specified criteria. Scores should be numerical (integers or decimals). Weight should be numerical (integers or decimals) and represents importance of the criteria to the final result. Provide specific suggestions for improvement. Do not assign identical scores to different criteria unless otherwise you have clear reasons to do so:
|
2
2
|
Task output: {task_output}
|
3
3
|
Task description: {task_description}
|
4
4
|
Evaluation criteria: {eval_criteria}
|
@@ -2,63 +2,21 @@ from typing import List, Optional, Dict, Any
|
|
2
2
|
from typing_extensions import Self
|
3
3
|
|
4
4
|
from pydantic import BaseModel, model_validator
|
5
|
+
import pandas as pd
|
6
|
+
from sklearn.preprocessing import MinMaxScaler
|
5
7
|
|
6
8
|
from versionhq.memory.model import MemoryMetadata
|
7
9
|
|
8
|
-
"""
|
9
|
-
Evaluate task output from accuracy, token consumption, and latency perspectives, and mark the score from 0 to 1.
|
10
|
-
"""
|
11
|
-
|
12
|
-
|
13
|
-
class ScoreFormat:
|
14
|
-
def __init__(self, rate: float | int = 0, weight: int = 1):
|
15
|
-
self.rate = rate
|
16
|
-
self.weight = weight
|
17
|
-
self.aggregate = rate * weight
|
18
|
-
|
19
|
-
|
20
|
-
class Score:
|
21
|
-
"""
|
22
|
-
Evaluate the score on 0 (no performance) to 1 scale.
|
23
|
-
`rate`: Any float from 0.0 to 1.0 given by an agent.
|
24
|
-
`weight`: Importance of each factor to the aggregated score.
|
25
|
-
"""
|
26
|
-
|
27
|
-
def __init__(self, config: Optional[Dict[str, ScoreFormat]] = None):
|
28
|
-
self.config = config
|
29
|
-
|
30
|
-
if self.config:
|
31
|
-
for k, v in self.config.items():
|
32
|
-
if isinstance(v, ScoreFormat):
|
33
|
-
setattr(self, k, v)
|
34
|
-
|
35
|
-
|
36
|
-
def result(self) -> float:
|
37
|
-
aggregate_score, denominator = 0, 0
|
38
|
-
|
39
|
-
for k, v in self.__dict__.items():
|
40
|
-
aggregate_score += v.aggregate
|
41
|
-
denominator += v.weight
|
42
|
-
|
43
|
-
if denominator == 0:
|
44
|
-
return 0
|
45
|
-
|
46
|
-
return round(aggregate_score / denominator, 3)
|
47
|
-
|
48
10
|
|
49
11
|
class EvaluationItem(BaseModel):
|
50
12
|
"""
|
51
13
|
A Pydantic class to store the evaluation result with scoring and suggestion based on the given criteria.
|
14
|
+
This class will be used as a response format for the eval task.
|
52
15
|
"""
|
53
16
|
criteria: str
|
54
17
|
suggestion: str
|
55
18
|
score: float
|
56
|
-
|
57
|
-
def _format_score(self, weight: int = 1) -> ScoreFormat | None:
|
58
|
-
if self.score and isinstance(self.score, float):
|
59
|
-
return ScoreFormat(rate=self.score, weight=weight)
|
60
|
-
|
61
|
-
else: return None
|
19
|
+
weight: int = 1
|
62
20
|
|
63
21
|
|
64
22
|
class Evaluation(BaseModel):
|
@@ -111,33 +69,43 @@ class Evaluation(BaseModel):
|
|
111
69
|
return shot_prompt
|
112
70
|
|
113
71
|
|
114
|
-
|
115
|
-
def aggregate_score(self) -> float:
|
72
|
+
def _normalize_df(self) -> pd.DataFrame:
|
116
73
|
"""
|
117
|
-
|
74
|
+
Creates a pandas DataFrame from a list of EvaluationItem objects containing 'weight' and 'score' columns, and normalizes them using MinMaxScaler.
|
75
|
+
|
76
|
+
Args:
|
77
|
+
items: A list of EvaluationItem objects.
|
78
|
+
|
79
|
+
Returns:
|
80
|
+
A pandas DataFrame with normalized 'weight' and 'score' columns, or an empty DataFrame if the input is empty.
|
118
81
|
"""
|
119
82
|
if not self.items:
|
120
|
-
return
|
83
|
+
return pd.DataFrame()
|
121
84
|
|
122
|
-
|
123
|
-
|
85
|
+
data = { 'weight': [item.weight for item in self.items], 'score': [item.score for item in self.items] }
|
86
|
+
df = pd.DataFrame(data)
|
124
87
|
|
125
|
-
|
126
|
-
|
127
|
-
aggregate_score += score_format.aggregate if score_format else 0
|
128
|
-
denominator += score_format.weight if score_format else 0
|
88
|
+
scaler = MinMaxScaler(feature_range=(0, 1))
|
89
|
+
df[['weight', 'score']] = scaler.fit_transform(df[['weight', 'score']])
|
129
90
|
|
130
|
-
|
91
|
+
return df
|
92
|
+
|
93
|
+
|
94
|
+
@property
|
95
|
+
def aggregate_score(self) -> int | float:
|
96
|
+
if not self.items:
|
131
97
|
return 0
|
132
98
|
|
133
|
-
|
99
|
+
df = self._normalize_df()
|
100
|
+
df['weighted_score'] = df['weight'] * df['score']
|
101
|
+
aggregate_score = round(df['weighted_score'].sum(), 3)
|
102
|
+
return aggregate_score
|
134
103
|
|
135
104
|
|
136
105
|
@property
|
137
106
|
def suggestion_summary(self) -> str | None:
|
138
|
-
"""
|
139
|
-
|
140
|
-
"""
|
107
|
+
"""Returns a summary of the suggestions"""
|
108
|
+
|
141
109
|
if not self.items:
|
142
110
|
return None
|
143
111
|
|
@@ -228,13 +228,21 @@ class TaskOutput(BaseModel):
|
|
228
228
|
self._tokens += task_eval._tokens
|
229
229
|
|
230
230
|
if res.pydantic:
|
231
|
-
item = EvaluationItem(
|
231
|
+
item = EvaluationItem(
|
232
|
+
score=res.pydantic.score,
|
233
|
+
weight=res.pydantic.weight,
|
234
|
+
suggestion=res.pydantic.suggestion,
|
235
|
+
criteria=res.pydantic.criteria
|
236
|
+
)
|
232
237
|
self.evaluation.items.append(item)
|
233
238
|
|
234
239
|
else:
|
235
240
|
try:
|
236
241
|
item = EvaluationItem(
|
237
|
-
score=float(res.json_dict["score"]),
|
242
|
+
score=float(res.json_dict["score"]),
|
243
|
+
weight=float(res.json_dict["weight"]),
|
244
|
+
suggestion=res.json_dict["suggestion"],
|
245
|
+
criteria=res.json_dict["criteria"]
|
238
246
|
)
|
239
247
|
self.evaluation.items.append(item)
|
240
248
|
except Exception as e:
|
@@ -246,10 +254,7 @@ class TaskOutput(BaseModel):
|
|
246
254
|
|
247
255
|
@property
|
248
256
|
def aggregate_score(self) -> float | int:
|
249
|
-
if self.evaluation is None
|
250
|
-
return 0
|
251
|
-
else:
|
252
|
-
self.evaluation.aggregate_score
|
257
|
+
return self.evaluation.aggregate_score if self.evaluation is not None else 0
|
253
258
|
|
254
259
|
|
255
260
|
@property
|
@@ -1,6 +1,5 @@
|
|
1
1
|
import re
|
2
2
|
import requests
|
3
|
-
import html2text
|
4
3
|
import gzip
|
5
4
|
import http.client
|
6
5
|
import urllib.request
|
@@ -37,6 +36,11 @@ class RagTool(BaseTool):
|
|
37
36
|
if isinstance(source_code, bytes):
|
38
37
|
source_code = source_code.decode('utf-8')
|
39
38
|
|
39
|
+
try:
|
40
|
+
import html2text
|
41
|
+
except:
|
42
|
+
Logger().log(message="Dependencies for tools are missing. Add tool packages by running: `uv add versionhq[tool]`.", color="red", level="error")
|
43
|
+
|
40
44
|
h = html2text.HTML2Text()
|
41
45
|
h.ignore_links = False
|
42
46
|
text = h.handle(source_code)
|