versionhq 1.1.11.8__tar.gz → 1.1.12.2__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.
Files changed (113) hide show
  1. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/.github/workflows/run_tests.yml +6 -5
  2. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/.gitignore +0 -2
  3. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/LICENSE +1 -1
  4. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/PKG-INFO +15 -16
  5. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/README.md +10 -12
  6. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/pyproject.toml +4 -3
  7. versionhq-1.1.12.2/src/versionhq/__init__.py +71 -0
  8. versionhq-1.1.12.2/src/versionhq/_utils/__init__.py +3 -0
  9. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/_utils/logger.py +6 -1
  10. versionhq-1.1.12.2/src/versionhq/agent/inhouse_agents.py +41 -0
  11. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/agent/model.py +10 -7
  12. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/agent/rpm_controller.py +1 -1
  13. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/clients/product/model.py +0 -1
  14. versionhq-1.1.12.2/src/versionhq/knowledge/__init__.py +22 -0
  15. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/knowledge/model.py +0 -2
  16. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/knowledge/source.py +0 -1
  17. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/llm/llm_vars.py +14 -124
  18. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/llm/model.py +35 -37
  19. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/memory/model.py +109 -47
  20. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/storage/ltm_sqlite_storage.py +29 -43
  21. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/storage/mem0_storage.py +1 -1
  22. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/storage/rag_storage.py +23 -22
  23. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/storage/task_output_storage.py +6 -6
  24. versionhq-1.1.12.2/src/versionhq/task/TEMPLATES/Description.py +5 -0
  25. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/task/evaluate.py +19 -8
  26. versionhq-1.1.12.2/src/versionhq/task/formation.py +123 -0
  27. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/task/model.py +88 -110
  28. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/task/structured_response.py +1 -1
  29. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/team/model.py +43 -62
  30. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/team/team_planner.py +5 -2
  31. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/tool/model.py +1 -1
  32. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq.egg-info/PKG-INFO +15 -16
  33. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq.egg-info/SOURCES.txt +3 -1
  34. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq.egg-info/requires.txt +1 -0
  35. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/tests/agent/agent_test.py +5 -13
  36. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/tests/clients/customer_test.py +2 -2
  37. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/tests/clients/product_test.py +1 -6
  38. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/tests/clients/workflow_test.py +1 -1
  39. {versionhq-1.1.11.8/tests/cli → versionhq-1.1.12.2/tests/knowledge}/__init__.py +0 -0
  40. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/tests/knowledge/knowledge_test.py +3 -3
  41. {versionhq-1.1.11.8/tests/knowledge → versionhq-1.1.12.2/tests/llm}/__init__.py +0 -0
  42. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/tests/llm/llm_test.py +1 -1
  43. {versionhq-1.1.11.8/tests/llm → versionhq-1.1.12.2/tests/memory}/__init__.py +0 -0
  44. versionhq-1.1.12.2/tests/memory/memory_test.py +67 -0
  45. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/tests/task/__init__.py +19 -5
  46. versionhq-1.1.12.2/tests/task/llm_connection_test.py +69 -0
  47. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/tests/task/task_test.py +22 -14
  48. {versionhq-1.1.11.8/tests/memory → versionhq-1.1.12.2/tests/team}/__init__.py +0 -0
  49. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/tests/team/team_test.py +7 -8
  50. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/tests/tool/tool_test.py +2 -5
  51. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/uv.lock +102 -98
  52. versionhq-1.1.11.8/src/versionhq/__init__.py +0 -35
  53. versionhq-1.1.11.8/src/versionhq/agent/default_agents.py +0 -15
  54. versionhq-1.1.11.8/src/versionhq/task/TEMPLATES/Description.py +0 -5
  55. versionhq-1.1.11.8/src/versionhq/task/__init__.py +0 -9
  56. versionhq-1.1.11.8/tests/memory/memory_test.py +0 -83
  57. versionhq-1.1.11.8/tests/tool/__init__.py +0 -0
  58. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/.github/workflows/publish.yml +0 -0
  59. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/.github/workflows/publish_testpypi.yml +0 -0
  60. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/.github/workflows/security_check.yml +0 -0
  61. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/.pre-commit-config.yaml +0 -0
  62. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/.python-version +0 -0
  63. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/SECURITY.md +0 -0
  64. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/db/preprocess.py +0 -0
  65. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/requirements-dev.txt +0 -0
  66. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/requirements.txt +0 -0
  67. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/runtime.txt +0 -0
  68. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/setup.cfg +0 -0
  69. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/_utils/i18n.py +0 -0
  70. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/_utils/process_config.py +0 -0
  71. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/_utils/usage_metrics.py +0 -0
  72. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/_utils/vars.py +0 -0
  73. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/agent/TEMPLATES/Backstory.py +0 -0
  74. {versionhq-1.1.11.8/src/versionhq/_utils → versionhq-1.1.12.2/src/versionhq/agent/TEMPLATES}/__init__.py +0 -0
  75. {versionhq-1.1.11.8/src/versionhq/agent/TEMPLATES → versionhq-1.1.12.2/src/versionhq/agent}/__init__.py +0 -0
  76. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/agent/parser.py +0 -0
  77. {versionhq-1.1.11.8/src/versionhq/agent → versionhq-1.1.12.2/src/versionhq/cli}/__init__.py +0 -0
  78. {versionhq-1.1.11.8/src/versionhq/cli → versionhq-1.1.12.2/src/versionhq/clients}/__init__.py +0 -0
  79. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/clients/customer/__init__.py +0 -0
  80. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/clients/customer/model.py +0 -0
  81. {versionhq-1.1.11.8/src/versionhq/clients → versionhq-1.1.12.2/src/versionhq/clients/product}/__init__.py +0 -0
  82. {versionhq-1.1.11.8/src/versionhq/clients/product → versionhq-1.1.12.2/src/versionhq/clients/workflow}/__init__.py +0 -0
  83. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/clients/workflow/model.py +0 -0
  84. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/knowledge/_utils.py +0 -0
  85. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/knowledge/embedding.py +0 -0
  86. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/knowledge/source_docling.py +0 -0
  87. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/knowledge/storage.py +0 -0
  88. {versionhq-1.1.11.8/src/versionhq/clients/workflow → versionhq-1.1.12.2/src/versionhq/llm}/__init__.py +0 -0
  89. {versionhq-1.1.11.8/src/versionhq/knowledge → versionhq-1.1.12.2/src/versionhq/memory}/__init__.py +0 -0
  90. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/memory/contextual_memory.py +0 -0
  91. {versionhq-1.1.11.8/src/versionhq/llm → versionhq-1.1.12.2/src/versionhq/storage}/__init__.py +0 -0
  92. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/storage/base.py +0 -0
  93. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/storage/utils.py +0 -0
  94. {versionhq-1.1.11.8/src/versionhq/memory → versionhq-1.1.12.2/src/versionhq/task}/__init__.py +0 -0
  95. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/task/formatter.py +0 -0
  96. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/task/log_handler.py +0 -0
  97. {versionhq-1.1.11.8/src/versionhq/storage → versionhq-1.1.12.2/src/versionhq/team}/__init__.py +0 -0
  98. {versionhq-1.1.11.8/src/versionhq/team → versionhq-1.1.12.2/src/versionhq/tool}/__init__.py +0 -0
  99. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/tool/cache_handler.py +0 -0
  100. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/tool/composio_tool.py +0 -0
  101. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/tool/composio_tool_vars.py +0 -0
  102. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/tool/decorator.py +0 -0
  103. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq/tool/tool_handler.py +0 -0
  104. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq.egg-info/dependency_links.txt +0 -0
  105. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/src/versionhq.egg-info/top_level.txt +0 -0
  106. {versionhq-1.1.11.8/src/versionhq/tool → versionhq-1.1.12.2/tests}/__init__.py +0 -0
  107. {versionhq-1.1.11.8/tests → versionhq-1.1.12.2/tests/agent}/__init__.py +0 -0
  108. {versionhq-1.1.11.8/tests/agent → versionhq-1.1.12.2/tests/cli}/__init__.py +0 -0
  109. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/tests/conftest.py +0 -0
  110. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/tests/knowledge/mock_report_compressed.pdf +0 -0
  111. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/tests/team/Prompts/Demo_test.py +0 -0
  112. {versionhq-1.1.11.8/tests/team → versionhq-1.1.12.2/tests/tool}/__init__.py +0 -0
  113. {versionhq-1.1.11.8 → versionhq-1.1.12.2}/tests/tool/composio_test.py +0 -0
@@ -6,15 +6,16 @@ permissions:
6
6
  contents: write
7
7
 
8
8
  env:
9
+ DEFAULT_MODEL_NAME: ${{ secrets.DEFAULT_MODEL_NAME }}
10
+ DEFAULT_MODEL_PROVIDER_NAME: ${{ secrets.DEFAULT_MODEL_PROVIDER_NAME }}
9
11
  LITELLM_API_KEY: ${{ secrets.LITELLM_API_KEY }}
10
12
  OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
11
- DEFAULT_REDIRECT_URL: ${{ secrets.DEFAULT_REDIRECT_URL }}
12
- DEFAULT_USER_ID: ${{ secrets.DEFAULT_USER_ID }}
13
- COMPOSIO_API_KEY: ${{ secrets.COMPOSIO_API_KEY }}
14
- DEFAULT_MODEL_NAME: ${{ secrets.DEFAULT_MODEL_NAME }}
15
13
  GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
16
14
  ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
17
- ANTHROPIC_API_BASE: ${{ secrets.ANTHROPIC_API_BASE }}
15
+ OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
16
+ COMPOSIO_API_KEY: ${{ secrets.COMPOSIO_API_KEY }}
17
+ DEFAULT_REDIRECT_URL: ${{ secrets.DEFAULT_REDIRECT_URL }}
18
+ DEFAULT_USER_ID: ${{ secrets.DEFAULT_USER_ID }}
18
19
  MEM0_API_KEY: ${{ secrets.MEM0_API_KEY }}
19
20
 
20
21
  jobs:
@@ -3,8 +3,6 @@ destinations.py
3
3
 
4
4
  entity_memory.py
5
5
 
6
- llm_connection_test.py
7
-
8
6
  train.py
9
7
 
10
8
  dist/
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2024 Version IO Sdn. Bhd.
3
+ Copyright (c) 2024-2025 Version IO Sdn. Bhd.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: versionhq
3
- Version: 1.1.11.8
4
- Summary: LLM orchestration frameworks for model-agnostic AI agents that handle complex outbound workflows
3
+ Version: 1.1.12.2
4
+ Summary: Agentic orchestration framework for task automation
5
5
  Author-email: Kuriko Iwai <kuriko@versi0n.io>
6
6
  License: MIT License
7
7
 
8
- Copyright (c) 2024 Version IO Sdn. Bhd.
8
+ Copyright (c) 2024-2025 Version IO Sdn. Bhd.
9
9
 
10
10
  Permission is hereby granted, free of charge, to any person obtaining a copy
11
11
  of this software and associated documentation files (the "Software"), to deal
@@ -29,7 +29,7 @@ Project-URL: Homepage, https://versi0n.io
29
29
  Project-URL: Documentation, https://chief-oxygen-8a2.notion.site/Documentation-17e923685cf98001a5fad5c4b2acd79b?pvs=73
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
- Keywords: orchestration framework,orchestration,ai agent,multi-agent system,RAG,agent
32
+ Keywords: orchestration framework,orchestration,ai agent,multi-agent system,RAG,agent,agentic orchestration,llm
33
33
  Classifier: Programming Language :: Python
34
34
  Classifier: Programming Language :: Python :: 3
35
35
  Classifier: Programming Language :: Python :: 3.11
@@ -63,6 +63,7 @@ Requires-Dist: composio-langchain>=0.6.12
63
63
  Requires-Dist: chromadb>=0.6.3
64
64
  Requires-Dist: wheel>=0.45.1
65
65
  Requires-Dist: envoy>=0.0.3
66
+ Requires-Dist: composio-core==0.7.0
66
67
  Provides-Extra: docling
67
68
  Requires-Dist: docling>=2.17.0; extra == "docling"
68
69
  Provides-Extra: mem0ai
@@ -78,12 +79,12 @@ Requires-Dist: numpy>=1.26.4; extra == "numpy"
78
79
 
79
80
  ![MIT license](https://img.shields.io/badge/License-MIT-green)
80
81
  [![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)
81
- ![PyPI](https://img.shields.io/badge/PyPI->=v1.1.11.4-blue)
82
- ![python ver](https://img.shields.io/badge/Python->=3.12-purple)
82
+ ![PyPI](https://img.shields.io/badge/PyPI-v1.1.12+-blue)
83
+ ![python ver](https://img.shields.io/badge/Python-3.11+-purple)
83
84
  ![pyenv ver](https://img.shields.io/badge/pyenv-2.5.0-orange)
84
85
 
85
86
 
86
- LLM orchestration frameworks to deploy multi-agent systems with task-based formation.
87
+ Agentic orchestration framework to deploy agent network and handle complex task automation.
87
88
 
88
89
  **Visit:**
89
90
 
@@ -122,15 +123,16 @@ LLM orchestration frameworks to deploy multi-agent systems with task-based forma
122
123
 
123
124
  ## Key Features
124
125
 
125
- Generate mulit-agent systems depending on the complexity of the task, and execute the task with agents of choice.
126
+ Generate multi-agent systems based on the task complexity, execute tasks, and evaluate output based on the given criteria.
126
127
 
127
- Model-agnostic agents can handle RAG tools, tools, callbacks, and knowledge sharing among other agents.
128
+ Agents are model-agnostic, and can handle and share RAG tools, knowledge, memory, and callbacks among other agents. (self-learn)
128
129
 
129
130
 
130
131
  ### Agent formation
131
- Depending on the task complexity, agents can make a different formation.
132
132
 
133
- You can specify which formation you want them to generate, or let the agent decide if you don’t have a clear plan.
133
+ Agents adapt their formation based on task complexity.
134
+
135
+ You can specify a desired formation or allow the agents to determine it autonomously (default).
134
136
 
135
137
 
136
138
  | | **Solo Agent** | **Supervising** | **Network** | **Random** |
@@ -158,8 +160,7 @@ You can specify which formation you want them to generate, or let the agent deci
158
160
 
159
161
  ```
160
162
  from pydantic import BaseModel
161
- from versionhq.agent.model import Agent
162
- from versionhq.task.model import Task
163
+ from versionhq import Agent, Task
163
164
 
164
165
  class CustomOutput(BaseModel):
165
166
  test1: str
@@ -199,9 +200,7 @@ This will return `TaskOutput` instance that stores a response in plane text, JSO
199
200
  ### Case 2. Supervising:
200
201
 
201
202
  ```
202
- from versionhq.agent.model import Agent
203
- from versionhq.task.model import Task, ResponseField
204
- from versionhq.team.model import Team, TeamMember
203
+ from versionhq import Agent, Task, ResponseField, Team, TeamMember
205
204
 
206
205
  agent_a = Agent(role="agent a", goal="My amazing goals", llm="llm-of-your-choice")
207
206
  agent_b = Agent(role="agent b", goal="My amazing goals", llm="llm-of-your-choice")
@@ -2,12 +2,12 @@
2
2
 
3
3
  ![MIT license](https://img.shields.io/badge/License-MIT-green)
4
4
  [![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)
5
- ![PyPI](https://img.shields.io/badge/PyPI->=v1.1.11.4-blue)
6
- ![python ver](https://img.shields.io/badge/Python->=3.12-purple)
5
+ ![PyPI](https://img.shields.io/badge/PyPI-v1.1.12+-blue)
6
+ ![python ver](https://img.shields.io/badge/Python-3.11+-purple)
7
7
  ![pyenv ver](https://img.shields.io/badge/pyenv-2.5.0-orange)
8
8
 
9
9
 
10
- LLM orchestration frameworks to deploy multi-agent systems with task-based formation.
10
+ Agentic orchestration framework to deploy agent network and handle complex task automation.
11
11
 
12
12
  **Visit:**
13
13
 
@@ -46,15 +46,16 @@ LLM orchestration frameworks to deploy multi-agent systems with task-based forma
46
46
 
47
47
  ## Key Features
48
48
 
49
- Generate mulit-agent systems depending on the complexity of the task, and execute the task with agents of choice.
49
+ Generate multi-agent systems based on the task complexity, execute tasks, and evaluate output based on the given criteria.
50
50
 
51
- Model-agnostic agents can handle RAG tools, tools, callbacks, and knowledge sharing among other agents.
51
+ Agents are model-agnostic, and can handle and share RAG tools, knowledge, memory, and callbacks among other agents. (self-learn)
52
52
 
53
53
 
54
54
  ### Agent formation
55
- Depending on the task complexity, agents can make a different formation.
56
55
 
57
- You can specify which formation you want them to generate, or let the agent decide if you don’t have a clear plan.
56
+ Agents adapt their formation based on task complexity.
57
+
58
+ You can specify a desired formation or allow the agents to determine it autonomously (default).
58
59
 
59
60
 
60
61
  | | **Solo Agent** | **Supervising** | **Network** | **Random** |
@@ -82,8 +83,7 @@ You can specify which formation you want them to generate, or let the agent deci
82
83
 
83
84
  ```
84
85
  from pydantic import BaseModel
85
- from versionhq.agent.model import Agent
86
- from versionhq.task.model import Task
86
+ from versionhq import Agent, Task
87
87
 
88
88
  class CustomOutput(BaseModel):
89
89
  test1: str
@@ -123,9 +123,7 @@ This will return `TaskOutput` instance that stores a response in plane text, JSO
123
123
  ### Case 2. Supervising:
124
124
 
125
125
  ```
126
- from versionhq.agent.model import Agent
127
- from versionhq.task.model import Task, ResponseField
128
- from versionhq.team.model import Team, TeamMember
126
+ from versionhq import Agent, Task, ResponseField, Team, TeamMember
129
127
 
130
128
  agent_a = Agent(role="agent a", goal="My amazing goals", llm="llm-of-your-choice")
131
129
  agent_b = Agent(role="agent b", goal="My amazing goals", llm="llm-of-your-choice")
@@ -15,13 +15,13 @@ exclude = ["test*", "__pycache__", "*.egg-info"]
15
15
 
16
16
  [project]
17
17
  name = "versionhq"
18
- version = "1.1.11.8"
18
+ version = "1.1.12.2"
19
19
  authors = [{ name = "Kuriko Iwai", email = "kuriko@versi0n.io" }]
20
- description = "LLM orchestration frameworks for model-agnostic AI agents that handle complex outbound workflows"
20
+ description = "Agentic orchestration framework for task automation"
21
21
  readme = "README.md"
22
22
  requires-python = ">=3.11"
23
23
  license = { file = "LICENSE" }
24
- keywords = ["orchestration framework", "orchestration", "ai agent", "multi-agent system", "RAG", "agent"]
24
+ keywords = ["orchestration framework", "orchestration", "ai agent", "multi-agent system", "RAG", "agent", "agentic orchestration", "llm"]
25
25
  dependencies = [
26
26
  "regex==2024.11.6",
27
27
  "requests>=2.32.3",
@@ -43,6 +43,7 @@ dependencies = [
43
43
  "chromadb>=0.6.3",
44
44
  "wheel>=0.45.1",
45
45
  "envoy>=0.0.3",
46
+ "composio-core==0.7.0",
46
47
  ]
47
48
  classifiers = [
48
49
  "Programming Language :: Python",
@@ -0,0 +1,71 @@
1
+ # silence some warnings
2
+ import warnings
3
+ warnings.filterwarnings(action="ignore", message="Pydantic serializer warnings:", category=UserWarning, module="pydantic.main")
4
+ warnings.filterwarnings(action="ignore", category=UserWarning, module="pydantic._internal")
5
+ warnings.filterwarnings(action="ignore", module="LiteLLM:utils")
6
+
7
+ from versionhq.agent.model import Agent
8
+ from versionhq.clients.customer.model import Customer
9
+ from versionhq.clients.product.model import Product, ProductProvider
10
+ from versionhq.clients.workflow.model import MessagingWorkflow, MessagingComponent
11
+ from versionhq.knowledge.model import Knowledge, KnowledgeStorage
12
+ from versionhq.knowledge.source import PDFKnowledgeSource, CSVKnowledgeSource, JSONKnowledgeSource, TextFileKnowledgeSource, ExcelKnowledgeSource, StringKnowledgeSource
13
+ from versionhq.knowledge.source_docling import DoclingSource
14
+ from versionhq.task.model import Task, TaskOutput, ConditionalTask, ResponseField
15
+ from versionhq.task.evaluate import Evaluation, EvaluationItem
16
+ from versionhq.team.model import Team, TeamOutput, Formation, TeamMember, TaskHandlingProcess
17
+ from versionhq.tool.model import Tool, ToolSet
18
+ from versionhq.tool.cache_handler import CacheHandler
19
+ from versionhq.tool.tool_handler import ToolHandler
20
+ from versionhq.tool.composio_tool import ComposioHandler
21
+ from versionhq.memory.contextual_memory import ContextualMemory
22
+ from versionhq.memory.model import ShortTermMemory,LongTermMemory, UserMemory, MemoryItem
23
+
24
+
25
+
26
+ __version__ = "1.1.12.2"
27
+ __all__ = [
28
+ "Agent",
29
+
30
+ "Customer",
31
+ "Product",
32
+ "ProductProvider",
33
+ "MessagingWorkflow",
34
+ "MessagingComponent",
35
+
36
+ "Knowledge",
37
+ "KnowledgeStorage",
38
+ "PDFKnowledgeSource",
39
+ "CSVKnowledgeSource",
40
+ "JSONKnowledgeSource",
41
+ "TextFileKnowledgeSource",
42
+ "ExcelKnowledgeSource",
43
+ "StringKnowledgeSource",
44
+ "DoclingSource",
45
+
46
+ "Task",
47
+ "TaskOutput",
48
+ "ConditionalTask",
49
+ "ResponseField",
50
+
51
+ "Evaluation",
52
+ "EvaluationItem",
53
+
54
+ "Team",
55
+ "TeamOutput",
56
+ "Formation",
57
+ "TeamMember",
58
+ "TaskHandlingProcess",
59
+
60
+ "Tool",
61
+ "ToolSet",
62
+ "CacheHandler",
63
+ "ToolHandler",
64
+ "ComposioHandler",
65
+
66
+ "ContextualMemory",
67
+ "ShortTermMemory",
68
+ "LongTermMemory",
69
+ "UserMemory",
70
+ "MemoryItem"
71
+ ]
@@ -0,0 +1,3 @@
1
+ from versionhq._utils.logger import Logger
2
+ from versionhq._utils.process_config import process_config
3
+ from versionhq._utils.usage_metrics import UsageMetrics
@@ -36,10 +36,15 @@ class Printer:
36
36
 
37
37
 
38
38
  class Logger(BaseModel):
39
+ """
40
+ Control CLI messages.
41
+ Color: red = error, yellow = warning, blue = info (from vhq), green = info (from third party)
42
+ """
43
+
39
44
  verbose: bool = Field(default=True)
40
45
  _printer: Printer = PrivateAttr(default_factory=Printer)
41
46
 
42
47
  def log(self, level, message, color="yellow"):
43
48
  if self.verbose:
44
49
  timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
45
- self._printer.print(f"\n{timestamp} - versionHQ - {level.upper()}: {message}", color=color)
50
+ self._printer.print(f"\n{timestamp} - versionHQ [{level.upper()}]: {message}", color=color)
@@ -0,0 +1,41 @@
1
+ from versionhq.agent.model import Agent
2
+ from versionhq.llm.model import DEFAULT_MODEL_NAME
3
+
4
+ """
5
+ In-house agents to be called across the project.
6
+ [Rules] In house agents have names and roles that start with `vhq_`. No customization allowed by client.
7
+ """
8
+
9
+ vhq_client_manager = Agent(
10
+ role="vhq-Client Manager",
11
+ goal="Efficiently communicate with the client on the task progress",
12
+ llm=DEFAULT_MODEL_NAME,
13
+ use_memory=True,
14
+ )
15
+
16
+
17
+ vhq_task_evaluator = Agent(
18
+ role="vhq-Task Evaluator",
19
+ goal="score the output according to the given evaluation criteria.",
20
+ llm=DEFAULT_MODEL_NAME,
21
+ llm_config=dict(top_p=0.8, top_k=30, max_tokens=5000, temperature=0.9),
22
+ maxit=1,
23
+ max_retry_limit=1,
24
+ use_memory=True # refer past eval records of similar tasks
25
+ )
26
+
27
+
28
+ vhq_formation_planner = Agent(
29
+ role="vhq-Formation Planner",
30
+ goal="Plan a formation of agents based on the given task descirption.",
31
+ llm="gemini/gemini-2.0-flash-exp",
32
+ llm_config=dict(top_p=0.8, top_k=30, temperature=0.9),
33
+ maxit=1,
34
+ max_retry_limit=1,
35
+ knowledge_sources=[
36
+ "Solo is a formation where a single agent with tools, knowledge, and memory handles tasks indivudually. When self-learning mode is on - it will turn into Random formation. Typical usecase is an email agent drafts promo message for the given audience using their own knowledge.",
37
+ "Supervising is a formation where the leader agent gives directions, while sharing its knowledge and memory with subbordinates.Subordinates can be solo agents or networks. Typical usecase is that the leader agent strategizes an outbound campaign plan and assigns components such as media mix or message creation to subordinate agents.",
38
+ "Network is a formation where multple agents can share tasks, knowledge, and memory among network members without hierarchy. Typical usecase is that an email agent and social media agent share the product knowledge and deploy multi-channel outbound campaign. ",
39
+ "Random is a formation where a single agent handles tasks, asking help from other agents without sharing its memory or knowledge. Typical usecase is that an email agent drafts promo message for the given audience, asking insights on tones from other email agents which oversee other customer clusters, or an agent calls the external, third party agent to deploy the campaign. ",
40
+ ]
41
+ )
@@ -1,6 +1,5 @@
1
1
  import os
2
2
  import uuid
3
- import datetime
4
3
  from typing import Any, Dict, List, Optional, TypeVar, Callable, Type
5
4
  from typing_extensions import Self
6
5
  from dotenv import load_dotenv
@@ -165,13 +164,16 @@ class Agent(BaseModel):
165
164
  Set up `llm` and `function_calling_llm` as valid LLM objects using the given values.
166
165
  """
167
166
  self.agent_ops_agent_name = self.role
168
- self.llm = self._set_llm(llm=self.llm)
167
+ self.llm = self._convert_to_llm_class(llm=self.llm)
168
+
169
169
  function_calling_llm = self.function_calling_llm if self.function_calling_llm else self.llm if self.llm else None
170
- self.function_calling_llm = self._set_llm(llm=function_calling_llm)
170
+ function_calling_llm = self._convert_to_llm_class(llm=function_calling_llm)
171
+ if function_calling_llm._supports_function_calling():
172
+ self.function_calling_llm = function_calling_llm
171
173
  return self
172
174
 
173
175
 
174
- def _set_llm(self, llm: Any | None) -> LLM:
176
+ def _convert_to_llm_class(self, llm: Any | None) -> LLM:
175
177
  llm = llm if llm is not None else DEFAULT_MODEL_NAME
176
178
 
177
179
  match llm:
@@ -350,7 +352,7 @@ class Agent(BaseModel):
350
352
  @model_validator(mode="after")
351
353
  def set_up_memory(self) -> Self:
352
354
  """
353
- Set up memories: stm, um
355
+ Set up memories: stm, ltm, and um
354
356
  """
355
357
 
356
358
  if self.use_memory == True:
@@ -413,7 +415,7 @@ class Agent(BaseModel):
413
415
  task.tokens = self.llm._tokens
414
416
 
415
417
  task_execution_counter += 1
416
- self._logger.log(level="info", message=f"Agent response: {raw_response}", color="blue")
418
+ self._logger.log(level="info", message=f"Agent response: {raw_response}", color="green")
417
419
  return raw_response
418
420
 
419
421
  except Exception as e:
@@ -429,7 +431,7 @@ class Agent(BaseModel):
429
431
  iterations += 1
430
432
 
431
433
  task_execution_counter += 1
432
- self._logger.log(level="info", message=f"Agent #{task_execution_counter} response: {raw_response}", color="blue")
434
+ self._logger.log(level="info", message=f"Agent #{task_execution_counter} response: {raw_response}", color="green")
433
435
  return raw_response
434
436
 
435
437
  if not raw_response:
@@ -474,6 +476,7 @@ class Agent(BaseModel):
474
476
  task_prompt += memory.strip()
475
477
 
476
478
 
479
+ ## comment out for now
477
480
  # if self.team and self.team._train:
478
481
  # task_prompt = self._training_handler(task_prompt=task_prompt)
479
482
  # else:
@@ -5,7 +5,7 @@ from typing_extensions import Self
5
5
 
6
6
  from pydantic import BaseModel, Field, PrivateAttr, model_validator
7
7
 
8
- from versionhq._utils.logger import Logger
8
+ from versionhq._utils import Logger
9
9
 
10
10
 
11
11
  class RPMController(BaseModel):
@@ -56,7 +56,6 @@ class ProductProvider(ABC, BaseModel):
56
56
  return self
57
57
 
58
58
 
59
-
60
59
  class Product(BaseModel):
61
60
  """
62
61
  A class to store product information used to create outbound
@@ -0,0 +1,22 @@
1
+ from versionhq.knowledge.model import Knowledge, KnowledgeStorage
2
+ from versionhq.knowledge.source import (
3
+ CSVKnowledgeSource,
4
+ ExcelKnowledgeSource,
5
+ PDFKnowledgeSource,
6
+ TextFileKnowledgeSource,
7
+ JSONKnowledgeSource,
8
+ StringKnowledgeSource
9
+ )
10
+ from versionhq.knowledge.source_docling import DoclingSource
11
+
12
+ __all__ = [
13
+ "Knowledge",
14
+ "KnowledgeStorage",
15
+ "DoclingSource",
16
+ "CSVKnowledgeSource",
17
+ "ExcelKnowledgeSource",
18
+ "PDFKnowledgeSource",
19
+ "TextFileKnowledgeSource",
20
+ "JSONKnowledgeSource",
21
+ "StringKnowledgeSource"
22
+ ]
@@ -1,5 +1,3 @@
1
- import os
2
- from abc import ABC, abstractmethod
3
1
  from typing import Any, Dict, List, Optional
4
2
  from pydantic import BaseModel, ConfigDict, Field
5
3
 
@@ -280,7 +280,6 @@ class PDFKnowledgeSource(BaseFileKnowledgeSource):
280
280
 
281
281
 
282
282
 
283
-
284
283
  class CSVKnowledgeSource(BaseFileKnowledgeSource):
285
284
  """
286
285
  A knowledge source class that stores and queries CSV file content using embeddings.