versionhq 1.1.11.4__py3-none-any.whl → 1.1.11.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
versionhq/__init__.py CHANGED
@@ -10,15 +10,14 @@ warnings.filterwarnings(
10
10
  from versionhq.agent.model import Agent
11
11
  from versionhq.clients.customer.model import Customer
12
12
  from versionhq.clients.product.model import Product, ProductProvider
13
- from versionhq.clients.workflow.model import MessagingWorkflow, MessagingComponent, Score, ScoreFormat
14
- from versionhq.llm.model import LLM
13
+ from versionhq.clients.workflow.model import MessagingWorkflow, MessagingComponent
15
14
  from versionhq.task.model import Task, TaskOutput
16
15
  from versionhq.team.model import Team, TeamOutput
17
16
  from versionhq.tool.model import Tool
18
17
  from versionhq.tool.composio_tool import ComposioHandler
19
18
 
20
19
 
21
- __version__ = "1.1.11.4"
20
+ __version__ = "1.1.11.5"
22
21
  __all__ = [
23
22
  "Agent",
24
23
  "Customer",
@@ -26,8 +25,6 @@ __all__ = [
26
25
  "ProductProvider",
27
26
  "MessagingWorkflow",
28
27
  "MessagingComponent",
29
- "Score",
30
- "ScoreFormat",
31
28
  "LLM",
32
29
  "Task",
33
30
  "TaskOutput",
versionhq/agent/model.py CHANGED
@@ -345,14 +345,13 @@ class Agent(BaseModel):
345
345
  @model_validator(mode="after")
346
346
  def set_up_knowledge(self) -> Self:
347
347
  if self.knowledge_sources:
348
- knowledge_agent_name = f"{self.role.replace(' ', '_')}"
349
-
350
- if isinstance(self.knowledge_sources, list) and all(isinstance(k, BaseKnowledgeSource) for k in self.knowledge_sources):
351
- self._knowledge = Knowledge(
352
- sources=self.knowledge_sources,
353
- embedder_config=self.embedder_config,
354
- collection_name=knowledge_agent_name,
355
- )
348
+ collection_name = f"{self.role.replace(' ', '_')}"
349
+
350
+ self._knowledge = Knowledge(
351
+ sources=self.knowledge_sources,
352
+ embedder_config=self.embedder_config,
353
+ collection_name=collection_name,
354
+ )
356
355
 
357
356
  return self
358
357
 
@@ -11,11 +11,11 @@ class Knowledge(BaseModel):
11
11
  """
12
12
  Knowlede class for collection of sources and setup for the vector store to query relevant context.
13
13
  """
14
+ collection_name: Optional[str] = None
14
15
  sources: List[BaseKnowledgeSource] = Field(default_factory=list)
15
- model_config = ConfigDict(arbitrary_types_allowed=True)
16
16
  storage: KnowledgeStorage = Field(default_factory=KnowledgeStorage)
17
17
  embedder_config: Optional[Dict[str, Any]] = None
18
- collection_name: Optional[str] = None
18
+ model_config = ConfigDict(arbitrary_types_allowed=True)
19
19
 
20
20
  def __init__(
21
21
  self,
@@ -27,16 +27,12 @@ class Knowledge(BaseModel):
27
27
  ):
28
28
  super().__init__(**data)
29
29
 
30
-
31
- if storage:
32
- self.storage = storage
33
- else:
34
- self.storage = KnowledgeStorage(embedder_config=embedder_config, collection_name=collection_name)
35
-
36
- self.storage._set_embedding_function(embedder_config=embedder_config)
30
+ self.collection_name = collection_name
31
+ self.sources = sources
32
+ self.embedder_config = embedder_config
33
+ self.storage = storage if storage else KnowledgeStorage(embedder_config=embedder_config, collection_name=self.collection_name)
37
34
  self.storage.initialize_knowledge_storage()
38
35
 
39
- self.sources = sources
40
36
  for source in sources:
41
37
  source.storage = self.storage
42
38
  source.add()
@@ -237,7 +237,10 @@ class PDFKnowledgeSource(BaseFileKnowledgeSource):
237
237
  """
238
238
  Load and preprocess PDF file content.
239
239
  """
240
- pdfplumber = self._import_pdfplumber()
240
+ self._import_pdfplumber()
241
+
242
+ import pdfplumber
243
+
241
244
  content = {}
242
245
  for path in self.valid_file_paths:
243
246
  text = ""
@@ -257,9 +260,12 @@ class PDFKnowledgeSource(BaseFileKnowledgeSource):
257
260
  """
258
261
  try:
259
262
  import pdfplumber
260
- return pdfplumber
261
263
  except ImportError:
262
- raise ImportError("pdfplumber is not installed. Please install it with: pip install pdfplumber")
264
+ try:
265
+ import os
266
+ os.system("uv add pdfplumber --optional pdfplumber")
267
+ except:
268
+ raise ImportError("pdfplumber is not installed. Please install it with: uv add pdfplumber")
263
269
 
264
270
 
265
271
  def add(self) -> None:
@@ -381,10 +387,16 @@ class ExcelKnowledgeSource(BaseFileKnowledgeSource):
381
387
  import pandas as pd
382
388
  return pd
383
389
  except ImportError as e:
384
- missing_package = str(e).split()[-1]
385
- raise ImportError(
386
- f"{missing_package} is not installed. Please install it with: pip install {missing_package}"
387
- )
390
+ try:
391
+ import os
392
+ os.system("uv add pandas --optional pandas")
393
+ import pandas as pd
394
+ return pd
395
+ except:
396
+ missing_package = str(e).split()[-1]
397
+ raise ImportError(
398
+ f"{missing_package} is not installed. Please install it with: pip install {missing_package}"
399
+ )
388
400
 
389
401
 
390
402
  def add(self) -> None:
@@ -3,6 +3,7 @@ from typing import Iterator, List, Optional
3
3
  from urllib.parse import urlparse
4
4
 
5
5
  try:
6
+ import docling
6
7
  from docling.datamodel.base_models import InputFormat
7
8
  from docling.document_converter import DocumentConverter
8
9
  from docling.exceptions import ConversionError
@@ -10,6 +11,17 @@ try:
10
11
  from docling_core.types.doc.document import DoclingDocument
11
12
  DOCLING_AVAILABLE = True
12
13
  except ImportError:
14
+ import envoy
15
+ r = envoy.run("uv add docling --optional docling")
16
+
17
+ import docling
18
+ from docling.datamodel.base_models import InputFormat
19
+ from docling.document_converter import DocumentConverter
20
+ from docling.exceptions import ConversionError
21
+ from docling_core.transforms.chunker.hierarchical_chunker import HierarchicalChunker
22
+ from docling_core.types.doc.document import DoclingDocument
23
+ DOCLING_AVAILABLE = True
24
+ except:
13
25
  DOCLING_AVAILABLE = False
14
26
 
15
27
  from pydantic import Field, InstanceOf
@@ -25,30 +37,27 @@ class DoclingSource(BaseKnowledgeSource):
25
37
  Support PDF, DOCX, TXT, XLSX, PPTX, MD, Images, and HTML files without any additional dependencies.
26
38
  """
27
39
 
28
- def __init__(self, *args, **kwargs):
29
- if not DOCLING_AVAILABLE:
30
- raise ImportError("The docling package is required. Please install the package using: $ uv add docling.")
31
-
32
- super().__init__(*args, **kwargs)
33
-
34
-
35
40
  file_paths: List[Path | str] = Field(default_factory=list)
36
41
  valid_file_paths: List[Path | str] = Field(default_factory=list)
37
42
  content: List["DoclingDocument"] = Field(default_factory=list)
38
- document_converter: "DocumentConverter" = Field(
39
- default_factory=lambda: DocumentConverter(
40
- allowed_formats=[
41
- InputFormat.MD,
42
- InputFormat.ASCIIDOC,
43
- InputFormat.PDF,
44
- InputFormat.DOCX,
45
- InputFormat.HTML,
46
- InputFormat.IMAGE,
47
- InputFormat.XLSX,
48
- InputFormat.PPTX,
49
- ]
50
- )
51
- )
43
+ document_converter: "DocumentConverter" = Field(default_factory=lambda: DocumentConverter(
44
+ allowed_formats=[
45
+ InputFormat.MD,
46
+ InputFormat.ASCIIDOC,
47
+ InputFormat.PDF,
48
+ InputFormat.DOCX,
49
+ InputFormat.HTML,
50
+ InputFormat.IMAGE,
51
+ InputFormat.XLSX,
52
+ InputFormat.PPTX,
53
+ ]
54
+ ))
55
+
56
+ def __init__(self, *args, **kwargs):
57
+ if not DOCLING_AVAILABLE:
58
+ raise ImportError("The docling package is required. Please install the package using: $ uv add docling.")
59
+ else:
60
+ super().__init__(*args, **kwargs)
52
61
 
53
62
 
54
63
  def _convert_source_to_docling_documents(self) -> List["DoclingDocument"]:
@@ -65,15 +65,15 @@ class KnowledgeStorage(BaseKnowledgeStorage):
65
65
  A class to store ChromaDB Storage vals that handles embeddings, ChromaClient, and Collection.
66
66
  """
67
67
 
68
- collection: Optional[chromadb.Collection] = None
68
+ app: Optional[ClientAPI] = None # store ChromaDBClient object
69
69
  collection_name: Optional[str] = "knowledge"
70
- app: Optional[ClientAPI] = None
71
- embedding_function: Optional[Any] = None # store ChromaDB's EmbeddingFunction instance
70
+ collection: Optional[chromadb.Collection] = None
71
+ embedding_function: Optional[Any] = None # store ChromaDB's EmbeddingFunction object
72
72
  embedder_config: Optional[Dict[str, Any]] = None # store config dict for embedding_function
73
73
 
74
74
 
75
75
  def __init__(self, embedder_config: Optional[Dict[str, Any]] = None, collection_name: Optional[str] = None):
76
- self.collection_name = collection_name
76
+ self.collection_name = collection_name if collection_name else "knowledge"
77
77
  self.embedder_config = embedder_config
78
78
  self.initialize_knowledge_storage()
79
79
 
@@ -100,13 +100,11 @@ class KnowledgeStorage(BaseKnowledgeStorage):
100
100
  base_path = os.path.join(fetch_db_storage_path(), "knowledge")
101
101
  chroma_client = chromadb.PersistentClient(path=base_path, settings=Settings(allow_reset=True))
102
102
  self.app = chroma_client
103
-
104
- self._set_embedding_function(self.embedder_config)
103
+ self._set_embedding_function(embedder_config=self.embedder_config)
105
104
 
106
105
  try:
107
- collection_name = f"knowledge_{self.collection_name}" if self.collection_name else "knowledge"
108
106
  if self.app:
109
- self.collection = self.app.get_or_create_collection(name=collection_name, embedding_function=self.embedding_function)
107
+ self.collection = self.app.get_or_create_collection(name=self.collection_name, embedding_function=self.embedding_function)
110
108
  else:
111
109
  raise Exception("Vector Database Client not initialized")
112
110
  except Exception:
versionhq/memory/model.py CHANGED
@@ -55,7 +55,13 @@ class ShortTermMemory(Memory):
55
55
  try:
56
56
  from versionhq.storage.mem0_storage import Mem0Storage
57
57
  except ImportError:
58
- raise ImportError("Mem0 is not installed. Please install it with `uv pip install mem0ai`.")
58
+ try:
59
+ import os
60
+ os.system("uv add mem0ai --optional mem0ai")
61
+
62
+ from versionhq.storage.mem0_storage import Mem0Storage
63
+ except:
64
+ raise ImportError("Mem0 is not installed. Please install it with `uv pip install mem0ai`.")
59
65
 
60
66
  storage = Mem0Storage(type="stm", agent=agent)
61
67
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: versionhq
3
- Version: 1.1.11.4
3
+ Version: 1.1.11.5
4
4
  Summary: LLM orchestration frameworks for model-agnostic AI agents that handle complex outbound workflows
5
5
  Author-email: Kuriko Iwai <kuriko@versi0n.io>
6
6
  License: MIT License
@@ -31,12 +31,16 @@ Project-URL: Repository, https://github.com/versionHQ/multi-agent-system
31
31
  Project-URL: Issues, https://github.com/versionHQ/multi-agent-system/issues
32
32
  Keywords: orchestration framework,orchestration,ai agent,multi-agent system,RAG,agent
33
33
  Classifier: Programming Language :: Python
34
+ Classifier: Programming Language :: Python :: 3
35
+ Classifier: Programming Language :: Python :: 3.11
36
+ Classifier: Programming Language :: Python :: 3.12
34
37
  Classifier: License :: OSI Approved :: MIT License
35
38
  Classifier: Operating System :: OS Independent
36
39
  Classifier: Development Status :: 3 - Alpha
37
40
  Classifier: Intended Audience :: Developers
41
+ Classifier: Intended Audience :: Information Technology
38
42
  Classifier: Topic :: Software Development :: Build Tools
39
- Requires-Python: >=3.12
43
+ Requires-Python: >=3.11
40
44
  Description-Content-Type: text/markdown
41
45
  License-File: LICENSE
42
46
  Requires-Dist: regex==2024.11.6
@@ -58,6 +62,7 @@ Requires-Dist: langchain-openai>=0.2.14
58
62
  Requires-Dist: composio-langchain>=0.6.12
59
63
  Requires-Dist: chromadb>=0.6.3
60
64
  Requires-Dist: wheel>=0.45.1
65
+ Requires-Dist: envoy>=0.0.3
61
66
  Provides-Extra: docling
62
67
  Requires-Dist: docling>=2.17.0; extra == "docling"
63
68
  Provides-Extra: mem0ai
@@ -66,12 +71,14 @@ Provides-Extra: pdfplumber
66
71
  Requires-Dist: pdfplumber>=0.11.5; extra == "pdfplumber"
67
72
  Provides-Extra: pandas
68
73
  Requires-Dist: pandas>=2.2.3; extra == "pandas"
74
+ Provides-Extra: numpy
75
+ Requires-Dist: numpy>=1.26.4; extra == "numpy"
69
76
 
70
77
  # Overview
71
78
 
72
79
  ![MIT license](https://img.shields.io/badge/License-MIT-green)
73
80
  [![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)
74
- ![PyPI](https://img.shields.io/badge/PyPI->=v1.1.11.1-blue)
81
+ ![PyPI](https://img.shields.io/badge/PyPI->=v1.1.11.4-blue)
75
82
  ![python ver](https://img.shields.io/badge/Python->=3.12-purple)
76
83
  ![pyenv ver](https://img.shields.io/badge/pyenv-2.5.0-orange)
77
84
 
@@ -142,7 +149,7 @@ You can specify which formation you want them to generate, or let the agent deci
142
149
  pip install versionhq
143
150
  ```
144
151
 
145
- (Python >= 3.12)
152
+ (Python 3.11 or higher)
146
153
 
147
154
 
148
155
  ### Case 1. Solo Agent:
@@ -285,11 +292,20 @@ src/
285
292
 
286
293
  ## Setup
287
294
 
288
- 1. Install the `uv` package manager:
295
+ 1. Install `uv` package manager:
296
+
297
+ For MacOS:
298
+
289
299
  ```
290
300
  brew install uv
291
301
  ```
292
302
 
303
+ For Ubuntu/Debian:
304
+
305
+ ```
306
+ sudo apt-get install uv
307
+ ```
308
+
293
309
  2. Install dependencies:
294
310
  ```
295
311
  uv venv
@@ -1,4 +1,4 @@
1
- versionhq/__init__.py,sha256=b8BjYKXpj6Dw8_k9zl1oysFiKt44MCiBc0bb8XeynD0,951
1
+ versionhq/__init__.py,sha256=2Zt2x3RvXctSU64Bv3Omw9EFjs5WQ3xKOijkiHNt4tU,863
2
2
  versionhq/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  versionhq/_utils/i18n.py,sha256=TwA_PnYfDLA6VqlUDPuybdV9lgi3Frh_ASsb_X8jJo8,1483
4
4
  versionhq/_utils/logger.py,sha256=U-MpeGueA6YS8Ptfy0VnU_ePsZP-8Pvkvi0tZ4s_UMg,1438
@@ -7,7 +7,7 @@ versionhq/_utils/usage_metrics.py,sha256=hhq1OCW8Z4V93vwW2O2j528EyjOlF8wlTsX5IL-
7
7
  versionhq/_utils/vars.py,sha256=bZ5Dx_bFKlt3hi4-NNGXqdk7B23If_WaTIju2fiTyPQ,57
8
8
  versionhq/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  versionhq/agent/default_agents.py,sha256=Sea3xDswxxMccer1vVDhp1E5etXW3ddf2n20JTMHgqs,503
10
- versionhq/agent/model.py,sha256=F_VkSQ6G6mJvDWrRBILZ6KjtlCpm0r_8bMN73sDKKGc,22921
10
+ versionhq/agent/model.py,sha256=kL949N0MELAZz58XB_vlQfE1YQU_o4iHggNDn_h_7yo,22758
11
11
  versionhq/agent/parser.py,sha256=riG0dkdQCxH7uJ0AbdVdg7WvL0BXhUgJht0VtQvxJBc,4082
12
12
  versionhq/agent/rpm_controller.py,sha256=7AKIEPbWBq_ESOZCaiKVOGjfSPHd2qwg6-wbBlhqC0g,2367
13
13
  versionhq/agent/TEMPLATES/Backstory.py,sha256=IAhGnnt6VUMe3wO6IzeyZPDNu7XE7Uiu3VEXUreOcKs,532
@@ -23,16 +23,16 @@ versionhq/clients/workflow/model.py,sha256=FNftenLLoha0bkivrjId32awLHAkBwIT8iNlj
23
23
  versionhq/knowledge/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  versionhq/knowledge/_utils.py,sha256=YWRF8U533cfZes_gZqUvdj-K24MD2ri1R0gjc_aPYyc,402
25
25
  versionhq/knowledge/embedding.py,sha256=KfHc__1THxb5jrg1EMrF-v944RDuIr2hE0l-MtM3Bp0,6826
26
- versionhq/knowledge/model.py,sha256=_liwQoS_VJlJgVSwAb7Y68SwbPuU0QBY_q0cA8x7dCo,1862
27
- versionhq/knowledge/source.py,sha256=yUwOds0zc8oPLvtV_hIE4P7k9BjQ9vc4MbbGorv_H6I,13292
28
- versionhq/knowledge/source_docling.py,sha256=fGfa3NntjH5tzpmWSoLsSgKJxBvTEKwl1egAlo67qnA,4935
29
- versionhq/knowledge/storage.py,sha256=vg7NEi19b47QaxXQxx2BLag3hjUZAQnwPqUifzhWCvQ,7373
26
+ versionhq/knowledge/model.py,sha256=n7kU4jQ24BUIxwosSVRK8tYhAFYhgc4yf7e4Q-bq4bk,1832
27
+ versionhq/knowledge/source.py,sha256=WOARChmm_cNtBD-xGo4RoYmcuodzdalctXI-gDBCW6k,13610
28
+ versionhq/knowledge/source_docling.py,sha256=Lv7PDE97pwV5_3SPcIgTzEu3H4obRbPfY3NALvfkgX8,5364
29
+ versionhq/knowledge/storage.py,sha256=uesUF6zFhXcgadrgzPVzLf9kBgvb3jMjWJIJzBlnhFk,7350
30
30
  versionhq/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
31
  versionhq/llm/llm_vars.py,sha256=PO__b-h5e-6oQ-uoIgXx3lPSAUPUwXYfdVRW73fvX14,8761
32
32
  versionhq/llm/model.py,sha256=1uaBxT10GIlUl-BtE8Mfux-ZRcScp4HUIas_fD_cdWQ,14471
33
33
  versionhq/memory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
34
  versionhq/memory/contextual_memory.py,sha256=tCsOOAUnfrOL7YiakqGoi3uShzzS870TmGnlGd3z_A4,3556
35
- versionhq/memory/model.py,sha256=3VDaCHqZ4iLQcMkKRmRVbv8db7E-rXOxYFzJ6vQpsSI,5535
35
+ versionhq/memory/model.py,sha256=6Sy-cnrhHNIx3ZN38uNO7d8YywIl_uo_OvDVzVM-w14,5755
36
36
  versionhq/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
37
  versionhq/storage/base.py,sha256=p-Jas0fXQan_qotnRD6seQxrT2lj-uw9-SmHQhdppcs,355
38
38
  versionhq/storage/ltm_sqlite_storage.py,sha256=LMitExpDATg__Oc7Hvl6h6uwQ7vUKQ34Eyp1BSt0DfY,4260
@@ -57,8 +57,8 @@ versionhq/tool/composio_tool_vars.py,sha256=FvBuEXsOQUYnN7RTFxT20kAkiEYkxWKkiVtg
57
57
  versionhq/tool/decorator.py,sha256=C4ZM7Xi2gwtEMaSeRo-geo_g_MAkY77WkSLkAuY0AyI,1205
58
58
  versionhq/tool/model.py,sha256=7ccEnje_8LuxLVeog6pL38nToArXQXk4KY7A9hfprDo,12239
59
59
  versionhq/tool/tool_handler.py,sha256=2m41K8qo5bGCCbwMFferEjT-XZ-mE9F0mDUOBkgivOI,1416
60
- versionhq-1.1.11.4.dist-info/LICENSE,sha256=7CCXuMrAjPVsUvZrsBq9DsxI2rLDUSYXR_qj4yO_ZII,1077
61
- versionhq-1.1.11.4.dist-info/METADATA,sha256=H3fBLb0rTLGR5EL7yvNyzekPsa6Iu1SNpqOJbUD3uMw,18251
62
- versionhq-1.1.11.4.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
63
- versionhq-1.1.11.4.dist-info/top_level.txt,sha256=DClQwxDWqIUGeRJkA8vBlgeNsYZs4_nJWMonzFt5Wj0,10
64
- versionhq-1.1.11.4.dist-info/RECORD,,
60
+ versionhq-1.1.11.5.dist-info/LICENSE,sha256=7CCXuMrAjPVsUvZrsBq9DsxI2rLDUSYXR_qj4yO_ZII,1077
61
+ versionhq-1.1.11.5.dist-info/METADATA,sha256=kqMA6vNrLp3wgffnEfUJjPT2Jr3eylK-guAj8g4QXt8,18638
62
+ versionhq-1.1.11.5.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
63
+ versionhq-1.1.11.5.dist-info/top_level.txt,sha256=DClQwxDWqIUGeRJkA8vBlgeNsYZs4_nJWMonzFt5Wj0,10
64
+ versionhq-1.1.11.5.dist-info/RECORD,,