versionhq 1.1.12.3__tar.gz → 1.1.12.5__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.1.12.5/.github/workflows/deploy_docs.yml +30 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/.gitignore +3 -2
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/.pre-commit-config.yaml +1 -0
- versionhq-1.1.12.5/CNAME +1 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/PKG-INFO +62 -61
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/README.md +59 -58
- versionhq-1.1.12.5/docs/CNAME +1 -0
- versionhq-1.1.12.5/docs/_logos/favicon.ico +0 -0
- versionhq-1.1.12.5/docs/_logos/logo192.png +0 -0
- versionhq-1.1.12.5/docs/core/Agent.md +524 -0
- versionhq-1.1.12.5/docs/core/tool.md +389 -0
- versionhq-1.1.12.5/docs/index.md +379 -0
- versionhq-1.1.12.5/docs/quickstart.md +122 -0
- versionhq-1.1.12.5/docs/stylesheets/main.css +26 -0
- versionhq-1.1.12.5/mkdocs.yml +148 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/pyproject.toml +9 -5
- versionhq-1.1.12.5/requirements.txt +27 -0
- versionhq-1.1.12.5/runtime.txt +2 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/__init__.py +1 -1
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/agent/model.py +48 -24
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/llm/llm_vars.py +1 -1
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/llm/model.py +69 -41
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/task/log_handler.py +1 -1
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/task/model.py +3 -3
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/tool/model.py +1 -4
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq.egg-info/PKG-INFO +62 -61
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq.egg-info/SOURCES.txt +11 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/agent/agent_test.py +17 -10
- versionhq-1.1.12.5/tests/doc_test.py +492 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/task/task_test.py +13 -12
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/team/team_test.py +1 -1
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/uv.lock +344 -634
- versionhq-1.1.12.3/requirements.txt +0 -465
- versionhq-1.1.12.3/runtime.txt +0 -1
- versionhq-1.1.12.3/tests/doc_test.py +0 -16
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/.github/workflows/publish.yml +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/.github/workflows/publish_testpypi.yml +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/.github/workflows/run_tests.yml +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/.github/workflows/security_check.yml +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/.python-version +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/LICENSE +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/SECURITY.md +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/db/preprocess.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/requirements-dev.txt +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/setup.cfg +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/_utils/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/_utils/i18n.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/_utils/logger.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/_utils/process_config.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/_utils/usage_metrics.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/_utils/vars.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/agent/TEMPLATES/Backstory.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/agent/TEMPLATES/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/agent/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/agent/inhouse_agents.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/agent/parser.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/agent/rpm_controller.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/cli/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/clients/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/clients/customer/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/clients/customer/model.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/clients/product/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/clients/product/model.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/clients/workflow/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/clients/workflow/model.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/knowledge/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/knowledge/_utils.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/knowledge/embedding.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/knowledge/model.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/knowledge/source.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/knowledge/source_docling.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/knowledge/storage.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/llm/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/memory/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/memory/contextual_memory.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/memory/model.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/storage/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/storage/base.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/storage/ltm_sqlite_storage.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/storage/mem0_storage.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/storage/rag_storage.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/storage/task_output_storage.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/storage/utils.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/task/TEMPLATES/Description.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/task/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/task/evaluate.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/task/formation.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/task/formatter.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/task/structured_response.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/team/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/team/model.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/team/team_planner.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/tool/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/tool/cache_handler.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/tool/composio_tool.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/tool/composio_tool_vars.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/tool/decorator.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq/tool/tool_handler.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq.egg-info/dependency_links.txt +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq.egg-info/requires.txt +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/src/versionhq.egg-info/top_level.txt +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/agent/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/cli/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/clients/customer_test.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/clients/product_test.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/clients/workflow_test.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/conftest.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/knowledge/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/knowledge/knowledge_test.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/knowledge/mock_report_compressed.pdf +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/llm/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/llm/llm_test.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/memory/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/memory/memory_test.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/task/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/task/llm_connection_test.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/team/Prompts/Demo_test.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/team/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/tool/__init__.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/tool/composio_test.py +0 -0
- {versionhq-1.1.12.3 → versionhq-1.1.12.5}/tests/tool/tool_test.py +0 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
name: Deploy Docs
|
2
|
+
on:
|
3
|
+
push:
|
4
|
+
branches:
|
5
|
+
- main
|
6
|
+
|
7
|
+
permissions:
|
8
|
+
contents: write
|
9
|
+
|
10
|
+
jobs:
|
11
|
+
deploy:
|
12
|
+
runs-on: ubuntu-latest
|
13
|
+
steps:
|
14
|
+
- uses: actions/checkout@v4
|
15
|
+
- name: Configure Git Credentials
|
16
|
+
run: |
|
17
|
+
git config user.name github-actions[bot]
|
18
|
+
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
|
19
|
+
- uses: actions/setup-python@v5
|
20
|
+
with:
|
21
|
+
python-version: 3.12
|
22
|
+
- run: echo "cache_id=$(date +%s)" >> $GITHUB_ENV
|
23
|
+
- uses: actions/cache@v4
|
24
|
+
with:
|
25
|
+
key: mkdocs-material-${{ env.cache_id }}
|
26
|
+
path: .cache
|
27
|
+
restore-keys: |
|
28
|
+
mkdocs-material-
|
29
|
+
- run: pip install mkdocs-material
|
30
|
+
- run: mkdocs gh-deploy --force
|
versionhq-1.1.12.5/CNAME
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
docs.versi0n.io
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: versionhq
|
3
|
-
Version: 1.1.12.
|
4
|
-
Summary: An agentic orchestration framework for
|
3
|
+
Version: 1.1.12.5
|
4
|
+
Summary: An agentic orchestration framework for building agent networks that handle task automation without human interaction.
|
5
5
|
Author-email: Kuriko Iwai <kuriko@versi0n.io>
|
6
6
|
License: MIT License
|
7
7
|
|
@@ -26,7 +26,7 @@ License: MIT License
|
|
26
26
|
SOFTWARE.
|
27
27
|
|
28
28
|
Project-URL: Homepage, https://versi0n.io
|
29
|
-
Project-URL: Documentation, https://
|
29
|
+
Project-URL: Documentation, https://docs.versi0n.io
|
30
30
|
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,agentic orchestration,llm
|
@@ -77,6 +77,7 @@ Requires-Dist: numpy>=1.26.4; extra == "numpy"
|
|
77
77
|
|
78
78
|
# Overview
|
79
79
|
|
80
|
+

|
80
81
|

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

|
@@ -89,9 +90,9 @@ Agentic orchestration framework to deploy agent network and handle complex task
|
|
89
90
|
**Visit:**
|
90
91
|
|
91
92
|
- [PyPI](https://pypi.org/project/versionhq/)
|
92
|
-
- [
|
93
|
-
- [
|
94
|
-
- [
|
93
|
+
- [Docs](https://docs.versi0n.io)
|
94
|
+
- [Github Repository](https://github.com/versionHQ/multi-agent-system)
|
95
|
+
- [Playground](https://versi0n.io/)
|
95
96
|
|
96
97
|
|
97
98
|
<hr />
|
@@ -105,13 +106,14 @@ Agentic orchestration framework to deploy agent network and handle complex task
|
|
105
106
|
- [Quick Start](#quick-start)
|
106
107
|
- [Generate agent networks and launch task execution:](#generate-agent-networks-and-launch-task-execution)
|
107
108
|
- [Solo Agent:](#solo-agent)
|
108
|
-
|
109
|
+
- [Solo Agent:](#solo-agent-1)
|
109
110
|
- [Supervising:](#supervising)
|
110
111
|
- [Technologies Used](#technologies-used)
|
111
112
|
- [Project Structure](#project-structure)
|
112
113
|
- [Setup](#setup)
|
113
114
|
- [Contributing](#contributing)
|
114
|
-
- [
|
115
|
+
- [Documentation](#documentation)
|
116
|
+
- [Customizing AI Agent](#customizing-ai-agent)
|
115
117
|
- [Modifying RAG Functionality](#modifying-rag-functionality)
|
116
118
|
- [Package Management with uv](#package-management-with-uv)
|
117
119
|
- [Pre-Commit Hooks](#pre-commit-hooks)
|
@@ -124,7 +126,7 @@ Agentic orchestration framework to deploy agent network and handle complex task
|
|
124
126
|
|
125
127
|
## Key Features
|
126
128
|
|
127
|
-
`versionhq` is a Python framework
|
129
|
+
`versionhq` is a Python framework for agent networks that handle complex task automation without human interaction.
|
128
130
|
|
129
131
|
Agents are model-agnostic, and will improve task output, while oprimizing token cost and job latency, by sharing their memory, knowledge base, and RAG tools with other agents in the network.
|
130
132
|
|
@@ -138,7 +140,7 @@ You can specify a desired formation or allow the agents to determine it autonomo
|
|
138
140
|
|
139
141
|
| | **Solo Agent** | **Supervising** | **Network** | **Random** |
|
140
142
|
| :--- | :--- | :--- | :--- | :--- |
|
141
|
-
| **Formation** | <img src="https://res.cloudinary.com/dfeirxlea/image/upload/
|
143
|
+
| **Formation** | <img src="https://res.cloudinary.com/dfeirxlea/image/upload/v1738818211/pj_m_agents/rbgxttfoeqqis1ettlfz.png" alt="solo" width="200"> | <img src="https://res.cloudinary.com/dfeirxlea/image/upload/v1738818211/pj_m_agents/zhungor3elxzer5dum10.png" alt="solo" width="200"> | <img src="https://res.cloudinary.com/dfeirxlea/image/upload/v1738818211/pj_m_agents/dnusl7iy7kiwkxwlpmg8.png" alt="solo" width="200"> | <img src="https://res.cloudinary.com/dfeirxlea/image/upload/v1738818211/pj_m_agents/sndpczatfzbrosxz9ama.png" alt="solo" width="200"> |
|
142
144
|
| **Usage** | <ul><li>A single agent with tools, knowledge, and memory.</li><li>When self-learning mode is on - it will turn into **Random** formation.</li></ul> | <ul><li>Leader agent gives directions, while sharing its knowledge and memory.</li><li>Subordinates can be solo agents or networks.</li></ul> | <ul><li>Share tasks, knowledge, and memory among network members.</li></ul> | <ul><li>A single agent handles tasks, asking help from other agents without sharing its memory or knowledge.</li></ul> |
|
143
145
|
| **Use case** | An email agent drafts promo message for the given audience. | The leader agent strategizes an outbound campaign plan and assigns components such as media mix or message creation to subordinate agents. | An email agent and social media agent share the product knowledge and deploy multi-channel outbound campaign. | 1. An email agent drafts promo message for the given audience, asking insights on tones from other email agents which oversee other clusters. 2. An agent calls the external agent to deploy the campaign. |
|
144
146
|
|
@@ -156,7 +158,7 @@ You can specify a desired formation or allow the agents to determine it autonomo
|
|
156
158
|
|
157
159
|
### Generate agent networks and launch task execution:
|
158
160
|
|
159
|
-
```
|
161
|
+
```python
|
160
162
|
from versionhq import form_agent_network
|
161
163
|
|
162
164
|
network = form_agent_network(
|
@@ -171,9 +173,15 @@ You can specify a desired formation or allow the agents to determine it autonomo
|
|
171
173
|
|
172
174
|
### Solo Agent:
|
173
175
|
|
174
|
-
|
176
|
+
### Solo Agent:
|
175
177
|
|
176
|
-
|
178
|
+
You can simply build an agent using `Agent` model.
|
179
|
+
|
180
|
+
By default, the agent prioritize JSON serializable output.
|
181
|
+
|
182
|
+
But you can add a plane text summary of the structured output by using callbacks.
|
183
|
+
|
184
|
+
```python
|
177
185
|
from pydantic import BaseModel
|
178
186
|
from versionhq import Agent, Task
|
179
187
|
|
@@ -198,23 +206,24 @@ You can specify a desired formation or allow the agents to determine it autonomo
|
|
198
206
|
print(res)
|
199
207
|
```
|
200
208
|
|
201
|
-
This will return `TaskOutput` instance that stores a response in plane text, JSON serializable dict, and Pydantic model: `CustomOutput` formats with a callback result, tool output (if given), and evaluation results (if given).
|
202
209
|
|
203
|
-
|
210
|
+
This will return a `TaskOutput` object that stores response in plane text, JSON, and Pydantic model: `CustomOutput` formats with a callback result, tool output (if given), and evaluation results (if given).
|
211
|
+
|
212
|
+
```python
|
204
213
|
res == TaskOutput(
|
205
|
-
task_id=UUID('<TASK UUID>')
|
214
|
+
task_id=UUID('<TASK UUID>'),
|
206
215
|
raw='{\"test1\":\"random str\", \"test2\":[\"str item 1\", \"str item 2\", \"str item 3\"]}',
|
207
216
|
json_dict={'test1': 'random str', 'test2': ['str item 1', 'str item 2', 'str item 3']},
|
208
|
-
pydantic=<class '__main__.CustomOutput'
|
217
|
+
pydantic=<class '__main__.CustomOutput'>,
|
209
218
|
tool_output=None,
|
210
|
-
callback_output='Hi! Here is the result: random str, str item 1, str item 2, str item 3',
|
219
|
+
callback_output='Hi! Here is the result: random str, str item 1, str item 2, str item 3', # returned a plain text summary
|
211
220
|
evaluation=None
|
212
221
|
)
|
213
222
|
```
|
214
223
|
|
215
224
|
### Supervising:
|
216
225
|
|
217
|
-
```
|
226
|
+
```python
|
218
227
|
from versionhq import Agent, Task, ResponseField, Team, TeamMember
|
219
228
|
|
220
229
|
agent_a = Agent(role="agent a", goal="My amazing goals", llm="llm-of-your-choice")
|
@@ -279,26 +288,22 @@ Tasks can be delegated to a team manager, peers in the team, or completely new a
|
|
279
288
|
.github
|
280
289
|
└── workflows/ # Github actions
|
281
290
|
│
|
291
|
+
docs/ # Documentation built by MkDocs
|
292
|
+
│
|
282
293
|
src/
|
283
|
-
└── versionhq/ # Orchestration
|
284
|
-
│ ├── agent/ #
|
294
|
+
└── versionhq/ # Orchestration framework package
|
295
|
+
│ ├── agent/ # Core components
|
285
296
|
│ └── llm/
|
286
297
|
│ └── task/
|
287
|
-
│ └── team/
|
288
298
|
│ └── tool/
|
289
|
-
│ └── cli/
|
290
|
-
│ └── ...
|
291
|
-
│ │
|
292
|
-
│ ├── db/ # Storage
|
293
|
-
│ ├── chroma.sqlite3
|
294
299
|
│ └── ...
|
295
300
|
│
|
296
|
-
└──tests/ # Pytest
|
301
|
+
└──tests/ # Pytest - by core component and use cases in the docs
|
297
302
|
│ └── agent/
|
298
303
|
│ └── llm/
|
299
304
|
│ └── ...
|
300
305
|
│
|
301
|
-
└── uploads/ # Local
|
306
|
+
└── uploads/ # Local directory that stores uloaded files
|
302
307
|
|
303
308
|
```
|
304
309
|
|
@@ -308,17 +313,18 @@ src/
|
|
308
313
|
|
309
314
|
1. Install `uv` package manager:
|
310
315
|
|
311
|
-
|
316
|
+
For MacOS:
|
312
317
|
|
313
|
-
|
314
|
-
|
315
|
-
|
318
|
+
```
|
319
|
+
brew install uv
|
320
|
+
```
|
316
321
|
|
317
|
-
|
322
|
+
For Ubuntu/Debian:
|
323
|
+
|
324
|
+
```
|
325
|
+
sudo apt-get install uv
|
326
|
+
```
|
318
327
|
|
319
|
-
```
|
320
|
-
sudo apt-get install uv
|
321
|
-
```
|
322
328
|
|
323
329
|
2. Install dependencies:
|
324
330
|
```
|
@@ -340,11 +346,11 @@ src/
|
|
340
346
|
3. Set up environment variables:
|
341
347
|
Create a `.env` file in the project root and add the following:
|
342
348
|
```
|
343
|
-
OPENAI_API_KEY=your-openai-api-key
|
344
349
|
LITELLM_API_KEY=your-litellm-api-key
|
345
|
-
|
350
|
+
OPENAI_API_KEY=your-openai-api-key
|
346
351
|
COMPOSIO_API_KEY=your-composio-api-key
|
347
352
|
COMPOSIO_CLI_KEY=your-composio-cli-key
|
353
|
+
[LLM_INTERFACE_PROVIDER_OF_YOUR_CHOICE]_API_KEY=your-api-key
|
348
354
|
```
|
349
355
|
|
350
356
|
<hr />
|
@@ -378,18 +384,30 @@ src/
|
|
378
384
|
**Optional**
|
379
385
|
* Flag with `#! REFINEME` for any improvements needed and `#! FIXME` for any errors.
|
380
386
|
|
381
|
-
* Run a React demo app: [React demo app](https://github.com/versionHQ/test-client-app) to check it on the client endpoint.
|
387
|
+
<!-- * Run a React demo app: [React demo app](https://github.com/versionHQ/test-client-app) to check it on the client endpoint.
|
382
388
|
```
|
383
389
|
npm i
|
384
390
|
npm start
|
385
391
|
```
|
386
|
-
The frontend will be available at `http://localhost:3000`.
|
392
|
+
The frontend will be available at `http://localhost:3000`. -->
|
387
393
|
|
388
394
|
* `production` use case is available at `https://versi0n.io`. Currently, we are running alpha test.
|
389
395
|
|
390
396
|
|
397
|
+
### Documentation
|
398
|
+
|
399
|
+
* To edit the documentation, see `docs` repository and edit the respective component.
|
400
|
+
|
401
|
+
* We use `mkdocs` to update the docs. You can run the doc locally at http://127.0.0.1:8000/:
|
402
|
+
|
403
|
+
```
|
404
|
+
uv run python3 -m mkdocs serve --clean
|
405
|
+
```
|
406
|
+
|
407
|
+
* To add a new page, update `mkdocs.yml` in the root. Refer to [MkDocs official docs](https://squidfunk.github.io/mkdocs-material/getting-started/) for more details.
|
391
408
|
|
392
|
-
|
409
|
+
|
410
|
+
### Customizing AI Agent
|
393
411
|
|
394
412
|
To add an agent, use `sample` directory to add new `project`. You can define an agent with a specific role, goal, and set of tools.
|
395
413
|
|
@@ -454,27 +472,10 @@ Common issues and solutions:
|
|
454
472
|
## Frequently Asked Questions (FAQ)
|
455
473
|
**Q. Where can I see if the agent is working?**
|
456
474
|
|
457
|
-
|
458
|
-
|
475
|
+
A. Visit [playground](https://versi0n.io).
|
476
|
+
|
459
477
|
|
460
478
|
**Q. How do you analyze the customer?**
|
461
479
|
|
462
480
|
> A. We employ soft clustering for each customer.
|
463
481
|
> <img width="200" src="https://res.cloudinary.com/dfeirxlea/image/upload/v1732732628/pj_m_agents/ito937s5d5x0so8isvw6.png">
|
464
|
-
|
465
|
-
|
466
|
-
**Q. When should I use a team vs an agent?**
|
467
|
-
|
468
|
-
> A. In essence, use a team for intricate, evolving projects, and agents for quick, straightforward tasks.
|
469
|
-
|
470
|
-
> Use a team when:
|
471
|
-
|
472
|
-
> **Complex tasks**: You need to complete multiple, interconnected tasks that require sequential or hierarchical processing.
|
473
|
-
|
474
|
-
> **Iterative refinement**: You want to iteratively improve upon the output through multiple rounds of feedback and revision.
|
475
|
-
|
476
|
-
> Use an agent when:
|
477
|
-
|
478
|
-
> **Simple tasks**: You have a straightforward, one-off task that doesn't require significant complexity or iteration.
|
479
|
-
|
480
|
-
> **Human input**: You need to provide initial input or guidance to the agent, or you expect to review and refine the output.
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# Overview
|
2
2
|
|
3
|
+

|
3
4
|

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

|
@@ -12,9 +13,9 @@ Agentic orchestration framework to deploy agent network and handle complex task
|
|
12
13
|
**Visit:**
|
13
14
|
|
14
15
|
- [PyPI](https://pypi.org/project/versionhq/)
|
15
|
-
- [
|
16
|
-
- [
|
17
|
-
- [
|
16
|
+
- [Docs](https://docs.versi0n.io)
|
17
|
+
- [Github Repository](https://github.com/versionHQ/multi-agent-system)
|
18
|
+
- [Playground](https://versi0n.io/)
|
18
19
|
|
19
20
|
|
20
21
|
<hr />
|
@@ -28,13 +29,14 @@ Agentic orchestration framework to deploy agent network and handle complex task
|
|
28
29
|
- [Quick Start](#quick-start)
|
29
30
|
- [Generate agent networks and launch task execution:](#generate-agent-networks-and-launch-task-execution)
|
30
31
|
- [Solo Agent:](#solo-agent)
|
31
|
-
|
32
|
+
- [Solo Agent:](#solo-agent-1)
|
32
33
|
- [Supervising:](#supervising)
|
33
34
|
- [Technologies Used](#technologies-used)
|
34
35
|
- [Project Structure](#project-structure)
|
35
36
|
- [Setup](#setup)
|
36
37
|
- [Contributing](#contributing)
|
37
|
-
- [
|
38
|
+
- [Documentation](#documentation)
|
39
|
+
- [Customizing AI Agent](#customizing-ai-agent)
|
38
40
|
- [Modifying RAG Functionality](#modifying-rag-functionality)
|
39
41
|
- [Package Management with uv](#package-management-with-uv)
|
40
42
|
- [Pre-Commit Hooks](#pre-commit-hooks)
|
@@ -47,7 +49,7 @@ Agentic orchestration framework to deploy agent network and handle complex task
|
|
47
49
|
|
48
50
|
## Key Features
|
49
51
|
|
50
|
-
`versionhq` is a Python framework
|
52
|
+
`versionhq` is a Python framework for agent networks that handle complex task automation without human interaction.
|
51
53
|
|
52
54
|
Agents are model-agnostic, and will improve task output, while oprimizing token cost and job latency, by sharing their memory, knowledge base, and RAG tools with other agents in the network.
|
53
55
|
|
@@ -61,7 +63,7 @@ You can specify a desired formation or allow the agents to determine it autonomo
|
|
61
63
|
|
62
64
|
| | **Solo Agent** | **Supervising** | **Network** | **Random** |
|
63
65
|
| :--- | :--- | :--- | :--- | :--- |
|
64
|
-
| **Formation** | <img src="https://res.cloudinary.com/dfeirxlea/image/upload/
|
66
|
+
| **Formation** | <img src="https://res.cloudinary.com/dfeirxlea/image/upload/v1738818211/pj_m_agents/rbgxttfoeqqis1ettlfz.png" alt="solo" width="200"> | <img src="https://res.cloudinary.com/dfeirxlea/image/upload/v1738818211/pj_m_agents/zhungor3elxzer5dum10.png" alt="solo" width="200"> | <img src="https://res.cloudinary.com/dfeirxlea/image/upload/v1738818211/pj_m_agents/dnusl7iy7kiwkxwlpmg8.png" alt="solo" width="200"> | <img src="https://res.cloudinary.com/dfeirxlea/image/upload/v1738818211/pj_m_agents/sndpczatfzbrosxz9ama.png" alt="solo" width="200"> |
|
65
67
|
| **Usage** | <ul><li>A single agent with tools, knowledge, and memory.</li><li>When self-learning mode is on - it will turn into **Random** formation.</li></ul> | <ul><li>Leader agent gives directions, while sharing its knowledge and memory.</li><li>Subordinates can be solo agents or networks.</li></ul> | <ul><li>Share tasks, knowledge, and memory among network members.</li></ul> | <ul><li>A single agent handles tasks, asking help from other agents without sharing its memory or knowledge.</li></ul> |
|
66
68
|
| **Use case** | An email agent drafts promo message for the given audience. | The leader agent strategizes an outbound campaign plan and assigns components such as media mix or message creation to subordinate agents. | An email agent and social media agent share the product knowledge and deploy multi-channel outbound campaign. | 1. An email agent drafts promo message for the given audience, asking insights on tones from other email agents which oversee other clusters. 2. An agent calls the external agent to deploy the campaign. |
|
67
69
|
|
@@ -79,7 +81,7 @@ You can specify a desired formation or allow the agents to determine it autonomo
|
|
79
81
|
|
80
82
|
### Generate agent networks and launch task execution:
|
81
83
|
|
82
|
-
```
|
84
|
+
```python
|
83
85
|
from versionhq import form_agent_network
|
84
86
|
|
85
87
|
network = form_agent_network(
|
@@ -94,9 +96,15 @@ You can specify a desired formation or allow the agents to determine it autonomo
|
|
94
96
|
|
95
97
|
### Solo Agent:
|
96
98
|
|
97
|
-
|
99
|
+
### Solo Agent:
|
98
100
|
|
99
|
-
|
101
|
+
You can simply build an agent using `Agent` model.
|
102
|
+
|
103
|
+
By default, the agent prioritize JSON serializable output.
|
104
|
+
|
105
|
+
But you can add a plane text summary of the structured output by using callbacks.
|
106
|
+
|
107
|
+
```python
|
100
108
|
from pydantic import BaseModel
|
101
109
|
from versionhq import Agent, Task
|
102
110
|
|
@@ -121,23 +129,24 @@ You can specify a desired formation or allow the agents to determine it autonomo
|
|
121
129
|
print(res)
|
122
130
|
```
|
123
131
|
|
124
|
-
This will return `TaskOutput` instance that stores a response in plane text, JSON serializable dict, and Pydantic model: `CustomOutput` formats with a callback result, tool output (if given), and evaluation results (if given).
|
125
132
|
|
126
|
-
|
133
|
+
This will return a `TaskOutput` object that stores response in plane text, JSON, and Pydantic model: `CustomOutput` formats with a callback result, tool output (if given), and evaluation results (if given).
|
134
|
+
|
135
|
+
```python
|
127
136
|
res == TaskOutput(
|
128
|
-
task_id=UUID('<TASK UUID>')
|
137
|
+
task_id=UUID('<TASK UUID>'),
|
129
138
|
raw='{\"test1\":\"random str\", \"test2\":[\"str item 1\", \"str item 2\", \"str item 3\"]}',
|
130
139
|
json_dict={'test1': 'random str', 'test2': ['str item 1', 'str item 2', 'str item 3']},
|
131
|
-
pydantic=<class '__main__.CustomOutput'
|
140
|
+
pydantic=<class '__main__.CustomOutput'>,
|
132
141
|
tool_output=None,
|
133
|
-
callback_output='Hi! Here is the result: random str, str item 1, str item 2, str item 3',
|
142
|
+
callback_output='Hi! Here is the result: random str, str item 1, str item 2, str item 3', # returned a plain text summary
|
134
143
|
evaluation=None
|
135
144
|
)
|
136
145
|
```
|
137
146
|
|
138
147
|
### Supervising:
|
139
148
|
|
140
|
-
```
|
149
|
+
```python
|
141
150
|
from versionhq import Agent, Task, ResponseField, Team, TeamMember
|
142
151
|
|
143
152
|
agent_a = Agent(role="agent a", goal="My amazing goals", llm="llm-of-your-choice")
|
@@ -202,26 +211,22 @@ Tasks can be delegated to a team manager, peers in the team, or completely new a
|
|
202
211
|
.github
|
203
212
|
└── workflows/ # Github actions
|
204
213
|
│
|
214
|
+
docs/ # Documentation built by MkDocs
|
215
|
+
│
|
205
216
|
src/
|
206
|
-
└── versionhq/ # Orchestration
|
207
|
-
│ ├── agent/ #
|
217
|
+
└── versionhq/ # Orchestration framework package
|
218
|
+
│ ├── agent/ # Core components
|
208
219
|
│ └── llm/
|
209
220
|
│ └── task/
|
210
|
-
│ └── team/
|
211
221
|
│ └── tool/
|
212
|
-
│ └── cli/
|
213
|
-
│ └── ...
|
214
|
-
│ │
|
215
|
-
│ ├── db/ # Storage
|
216
|
-
│ ├── chroma.sqlite3
|
217
222
|
│ └── ...
|
218
223
|
│
|
219
|
-
└──tests/ # Pytest
|
224
|
+
└──tests/ # Pytest - by core component and use cases in the docs
|
220
225
|
│ └── agent/
|
221
226
|
│ └── llm/
|
222
227
|
│ └── ...
|
223
228
|
│
|
224
|
-
└── uploads/ # Local
|
229
|
+
└── uploads/ # Local directory that stores uloaded files
|
225
230
|
|
226
231
|
```
|
227
232
|
|
@@ -231,17 +236,18 @@ src/
|
|
231
236
|
|
232
237
|
1. Install `uv` package manager:
|
233
238
|
|
234
|
-
|
239
|
+
For MacOS:
|
235
240
|
|
236
|
-
|
237
|
-
|
238
|
-
|
241
|
+
```
|
242
|
+
brew install uv
|
243
|
+
```
|
239
244
|
|
240
|
-
|
245
|
+
For Ubuntu/Debian:
|
246
|
+
|
247
|
+
```
|
248
|
+
sudo apt-get install uv
|
249
|
+
```
|
241
250
|
|
242
|
-
```
|
243
|
-
sudo apt-get install uv
|
244
|
-
```
|
245
251
|
|
246
252
|
2. Install dependencies:
|
247
253
|
```
|
@@ -263,11 +269,11 @@ src/
|
|
263
269
|
3. Set up environment variables:
|
264
270
|
Create a `.env` file in the project root and add the following:
|
265
271
|
```
|
266
|
-
OPENAI_API_KEY=your-openai-api-key
|
267
272
|
LITELLM_API_KEY=your-litellm-api-key
|
268
|
-
|
273
|
+
OPENAI_API_KEY=your-openai-api-key
|
269
274
|
COMPOSIO_API_KEY=your-composio-api-key
|
270
275
|
COMPOSIO_CLI_KEY=your-composio-cli-key
|
276
|
+
[LLM_INTERFACE_PROVIDER_OF_YOUR_CHOICE]_API_KEY=your-api-key
|
271
277
|
```
|
272
278
|
|
273
279
|
<hr />
|
@@ -301,18 +307,30 @@ src/
|
|
301
307
|
**Optional**
|
302
308
|
* Flag with `#! REFINEME` for any improvements needed and `#! FIXME` for any errors.
|
303
309
|
|
304
|
-
* Run a React demo app: [React demo app](https://github.com/versionHQ/test-client-app) to check it on the client endpoint.
|
310
|
+
<!-- * Run a React demo app: [React demo app](https://github.com/versionHQ/test-client-app) to check it on the client endpoint.
|
305
311
|
```
|
306
312
|
npm i
|
307
313
|
npm start
|
308
314
|
```
|
309
|
-
The frontend will be available at `http://localhost:3000`.
|
315
|
+
The frontend will be available at `http://localhost:3000`. -->
|
310
316
|
|
311
317
|
* `production` use case is available at `https://versi0n.io`. Currently, we are running alpha test.
|
312
318
|
|
313
319
|
|
320
|
+
### Documentation
|
321
|
+
|
322
|
+
* To edit the documentation, see `docs` repository and edit the respective component.
|
323
|
+
|
324
|
+
* We use `mkdocs` to update the docs. You can run the doc locally at http://127.0.0.1:8000/:
|
325
|
+
|
326
|
+
```
|
327
|
+
uv run python3 -m mkdocs serve --clean
|
328
|
+
```
|
329
|
+
|
330
|
+
* To add a new page, update `mkdocs.yml` in the root. Refer to [MkDocs official docs](https://squidfunk.github.io/mkdocs-material/getting-started/) for more details.
|
314
331
|
|
315
|
-
|
332
|
+
|
333
|
+
### Customizing AI Agent
|
316
334
|
|
317
335
|
To add an agent, use `sample` directory to add new `project`. You can define an agent with a specific role, goal, and set of tools.
|
318
336
|
|
@@ -377,27 +395,10 @@ Common issues and solutions:
|
|
377
395
|
## Frequently Asked Questions (FAQ)
|
378
396
|
**Q. Where can I see if the agent is working?**
|
379
397
|
|
380
|
-
|
381
|
-
|
398
|
+
A. Visit [playground](https://versi0n.io).
|
399
|
+
|
382
400
|
|
383
401
|
**Q. How do you analyze the customer?**
|
384
402
|
|
385
403
|
> A. We employ soft clustering for each customer.
|
386
404
|
> <img width="200" src="https://res.cloudinary.com/dfeirxlea/image/upload/v1732732628/pj_m_agents/ito937s5d5x0so8isvw6.png">
|
387
|
-
|
388
|
-
|
389
|
-
**Q. When should I use a team vs an agent?**
|
390
|
-
|
391
|
-
> A. In essence, use a team for intricate, evolving projects, and agents for quick, straightforward tasks.
|
392
|
-
|
393
|
-
> Use a team when:
|
394
|
-
|
395
|
-
> **Complex tasks**: You need to complete multiple, interconnected tasks that require sequential or hierarchical processing.
|
396
|
-
|
397
|
-
> **Iterative refinement**: You want to iteratively improve upon the output through multiple rounds of feedback and revision.
|
398
|
-
|
399
|
-
> Use an agent when:
|
400
|
-
|
401
|
-
> **Simple tasks**: You have a straightforward, one-off task that doesn't require significant complexity or iteration.
|
402
|
-
|
403
|
-
> **Human input**: You need to provide initial input or guidance to the agent, or you expect to review and refine the output.
|
@@ -0,0 +1 @@
|
|
1
|
+
docs.versi0n.io
|
Binary file
|
Binary file
|