alita-sdk 0.3.221__py3-none-any.whl → 0.3.223__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.
Files changed (29) hide show
  1. alita_sdk/runtime/tools/artifact.py +0 -1
  2. alita_sdk/runtime/tools/vectorstore.py +4 -4
  3. alita_sdk/tools/ado/repos/__init__.py +7 -0
  4. alita_sdk/tools/ado/test_plan/__init__.py +10 -0
  5. alita_sdk/tools/ado/wiki/__init__.py +10 -0
  6. alita_sdk/tools/ado/work_item/__init__.py +6 -0
  7. alita_sdk/tools/bitbucket/__init__.py +5 -1
  8. alita_sdk/tools/confluence/__init__.py +6 -1
  9. alita_sdk/tools/elitea_base.py +30 -56
  10. alita_sdk/tools/figma/__init__.py +5 -1
  11. alita_sdk/tools/github/__init__.py +5 -2
  12. alita_sdk/tools/gitlab/__init__.py +5 -2
  13. alita_sdk/tools/jira/__init__.py +11 -1
  14. alita_sdk/tools/sharepoint/__init__.py +5 -1
  15. alita_sdk/tools/sharepoint/api_wrapper.py +0 -1
  16. alita_sdk/tools/testrail/__init__.py +4 -0
  17. alita_sdk/tools/vector_adapters/VectorStoreAdapter.py +91 -0
  18. alita_sdk/tools/vector_adapters/__init__.py +0 -0
  19. alita_sdk/tools/xray/__init__.py +11 -1
  20. alita_sdk/tools/zephyr_enterprise/__init__.py +5 -2
  21. alita_sdk/tools/zephyr_enterprise/api_wrapper.py +63 -20
  22. alita_sdk/tools/zephyr_essential/__init__.py +5 -2
  23. alita_sdk/tools/zephyr_essential/api_wrapper.py +0 -1
  24. alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -1
  25. {alita_sdk-0.3.221.dist-info → alita_sdk-0.3.223.dist-info}/METADATA +1 -1
  26. {alita_sdk-0.3.221.dist-info → alita_sdk-0.3.223.dist-info}/RECORD +29 -27
  27. {alita_sdk-0.3.221.dist-info → alita_sdk-0.3.223.dist-info}/WHEEL +0 -0
  28. {alita_sdk-0.3.221.dist-info → alita_sdk-0.3.223.dist-info}/licenses/LICENSE +0 -0
  29. {alita_sdk-0.3.221.dist-info → alita_sdk-0.3.223.dist-info}/top_level.txt +0 -0
@@ -90,7 +90,6 @@ class ArtifactWrapper(BaseVectorStoreToolApiWrapper):
90
90
  yield Document(page_content=str(value), metadata=metadata)
91
91
  else:
92
92
  document.page_content = json.dumps(str(page_content))
93
- yield document
94
93
 
95
94
  @extend_with_vector_tools
96
95
  def get_available_tools(self):
@@ -532,10 +532,10 @@ class VectorStoreWrapper(BaseToolApiWrapper):
532
532
 
533
533
  def search_documents(self, query:str, doctype: str = 'code',
534
534
  filter:dict|str={}, cut_off: float=0.5,
535
- search_top:int=10, reranker:dict = {},
536
- full_text_search: Optional[Dict[str, Any]] = None,
537
- reranking_config: Optional[Dict[str, Dict[str, Any]]] = None,
538
- extended_search: Optional[List[str]] = None):
535
+ search_top:int=10, full_text_search: Optional[Dict[str, Any]] = None,
536
+ extended_search: Optional[List[str]] = None,
537
+ reranker: dict = {}, reranking_config: Optional[Dict[str, Dict[str, Any]]] = None
538
+ ):
539
539
  """Enhanced search documents method using JSON configurations for full-text search and reranking"""
540
540
  from alita_sdk.tools.code.loaders.codesearcher import search_format as code_format
541
541
 
@@ -65,6 +65,13 @@ class AzureDevOpsReposToolkit(BaseToolkit):
65
65
  connection_string = (Optional[SecretStr], Field(description="Connection string for vectorstore",
66
66
  default=None,
67
67
  json_schema_extra={'secret': True})),
68
+
69
+ # embedder settings
70
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.",
71
+ default="HuggingFaceEmbeddings")),
72
+ embedding_model_params=(dict, Field(
73
+ description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}",
74
+ default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
68
75
 
69
76
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
70
77
  __config__={'json_schema_extra': {'metadata':
@@ -33,6 +33,16 @@ class AzureDevOpsPlansToolkit(BaseToolkit):
33
33
  project=(str, Field(title="Project", description="ADO project", json_schema_extra={'configuration': True})),
34
34
  limit=(Optional[int], Field(description="ADO plans limit used for limitation of the list with results", default=5)),
35
35
  token=(SecretStr, Field(description="ADO token", json_schema_extra={'secret': True, 'configuration': True})),
36
+ # indexer settings
37
+ connection_string=(Optional[SecretStr], Field(description="Connection string for vectorstore",
38
+ default=None,
39
+ json_schema_extra={'secret': True})),
40
+ # embedder settings
41
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.",
42
+ default="HuggingFaceEmbeddings")),
43
+ embedding_model_params=(dict, Field(
44
+ description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}",
45
+ default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
36
46
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
37
47
  __config__={'json_schema_extra': {'metadata':
38
48
  {
@@ -37,6 +37,16 @@ class AzureDevOpsWikiToolkit(BaseToolkit):
37
37
  Field(description="ADO token",
38
38
  json_schema_extra={'secret': True, 'configuration': True }
39
39
  )),
40
+ # indexer settings
41
+ connection_string=(Optional[SecretStr], Field(description="Connection string for vectorstore",
42
+ default=None,
43
+ json_schema_extra={'secret': True})),
44
+ # embedder settings
45
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.",
46
+ default="HuggingFaceEmbeddings")),
47
+ embedding_model_params=(dict, Field(
48
+ description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}",
49
+ default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
40
50
  selected_tools=(List[Literal[tuple(selected_tools)]],
41
51
  Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
42
52
  __config__={
@@ -41,6 +41,12 @@ class AzureDevOpsWorkItemsToolkit(BaseToolkit):
41
41
  connection_string = (Optional[SecretStr], Field(description="Connection string for vectorstore",
42
42
  default=None,
43
43
  json_schema_extra={'secret': True})),
44
+ # embedder settings
45
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.",
46
+ default="HuggingFaceEmbeddings")),
47
+ embedding_model_params=(dict, Field(
48
+ description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}",
49
+ default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
44
50
  __config__={
45
51
  'json_schema_extra': {
46
52
  'metadata': {
@@ -27,7 +27,7 @@ def get_tools(tool):
27
27
  llm=tool['settings'].get('llm', None),
28
28
  alita=tool['settings'].get('alita', None),
29
29
  connection_string=tool['settings'].get('connection_string', None),
30
- collection_name=str(tool['id']),
30
+ collection_name=str(tool['toolkit_name']),
31
31
  doctype='code',
32
32
  embedding_model="HuggingFaceEmbeddings",
33
33
  embedding_model_params={"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
@@ -60,6 +60,10 @@ class AlitaBitbucketToolkit(BaseToolkit):
60
60
  connection_string=(Optional[SecretStr], Field(description="Connection string for vectorstore",
61
61
  default=None,
62
62
  json_schema_extra={'secret': True})),
63
+
64
+ # embedder settings
65
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
66
+ embedding_model_params=(dict, Field(description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}", default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
63
67
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
64
68
  __config__=ConfigDict(json_schema_extra=
65
69
  {
@@ -27,7 +27,7 @@ def get_tools(tool):
27
27
  toolkit_name=tool.get('toolkit_name'),
28
28
  # indexer settings
29
29
  connection_string = tool['settings'].get('connection_string', None),
30
- collection_name=str(tool['id']),
30
+ collection_name=str(tool['toolkit_name']),
31
31
  doctype='doc',
32
32
  embedding_model="HuggingFaceEmbeddings",
33
33
  embedding_model_params={"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
@@ -84,6 +84,11 @@ class ConfluenceToolkit(BaseToolkit):
84
84
  connection_string = (Optional[SecretStr], Field(description="Connection string for vectorstore",
85
85
  default=None,
86
86
  json_schema_extra={'secret': True})),
87
+
88
+ # embedder settings
89
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
90
+ embedding_model_params=(dict, Field(description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}", default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
91
+
87
92
  __config__=ConfigDict(json_schema_extra={
88
93
  'metadata': {
89
94
  "label": "Confluence",
@@ -12,6 +12,7 @@ from pydantic import BaseModel, create_model, Field, SecretStr
12
12
  from alita_sdk.runtime.langchain.interfaces.llm_processor import get_embeddings
13
13
  from .chunkers import markdown_chunker
14
14
  from .utils import TOOLKIT_SPLITTER
15
+ from .vector_adapters.VectorStoreAdapter import VectorStoreAdapterFactory
15
16
  from ..runtime.utils.utils import IndexerKeywords
16
17
 
17
18
  logger = logging.getLogger(__name__)
@@ -59,22 +60,22 @@ BaseSearchParams = create_model(
59
60
  )),
60
61
  cut_off=(Optional[float], Field(description="Cut-off score for search results", default=0.5)),
61
62
  search_top=(Optional[int], Field(description="Number of top results to return", default=10)),
62
- reranker=(Optional[dict], Field(
63
- description="Reranker configuration. Can be a dictionary with reranking parameters.",
64
- default={}
65
- )),
66
63
  full_text_search=(Optional[Dict[str, Any]], Field(
67
64
  description="Full text search parameters. Can be a dictionary with search options.",
68
65
  default=None
69
66
  )),
70
- reranking_config=(Optional[Dict[str, Dict[str, Any]]], Field(
71
- description="Reranking configuration. Can be a dictionary with reranking settings.",
72
- default=None
73
- )),
74
67
  extended_search=(Optional[List[str]], Field(
75
68
  description="List of additional fields to include in the search results.",
76
69
  default=None
77
70
  )),
71
+ reranker=(Optional[dict], Field(
72
+ description="Reranker configuration. Can be a dictionary with reranking parameters.",
73
+ default={}
74
+ )),
75
+ reranking_config=(Optional[Dict[str, Dict[str, Any]]], Field(
76
+ description="Reranking configuration. Can be a dictionary with reranking settings.",
77
+ default=None
78
+ )),
78
79
  )
79
80
 
80
81
  BaseStepbackSearchParams = create_model(
@@ -111,7 +112,7 @@ BaseStepbackSearchParams = create_model(
111
112
  BaseIndexDataParams = create_model(
112
113
  "indexData",
113
114
  __base__=BaseIndexParams,
114
- progress_step=(Optional[int], Field(default=None, ge=0, le=100,
115
+ progress_step=(Optional[int], Field(default=10, ge=0, le=100,
115
116
  description="Optional step size for progress reporting during indexing")),
116
117
  clean_index=(Optional[bool], Field(default=False,
117
118
  description="Optional flag to enforce clean existing index before indexing new data")),
@@ -219,6 +220,10 @@ class BaseVectorStoreToolApiWrapper(BaseToolApiWrapper):
219
220
  embedding_model_params: Optional[Dict[str, Any]] = {"model_name": "sentence-transformers/all-MiniLM-L6-v2"}
220
221
  vectorstore_type: Optional[str] = "PGVector"
221
222
 
223
+ def __init__(self, **kwargs):
224
+ super().__init__(**kwargs)
225
+ self._adapter = VectorStoreAdapterFactory.create_adapter(self.vectorstore_type)
226
+
222
227
  def _index_tool_params(self, **kwargs) -> dict[str, tuple[type, Field]]:
223
228
  """
224
229
  Returns a list of fields for index_data args schema.
@@ -329,36 +334,24 @@ class BaseVectorStoreToolApiWrapper(BaseToolApiWrapper):
329
334
 
330
335
  # TODO: init store once and re-use the instance
331
336
  def _init_vector_store(self, collection_suffix: str = "", embeddings: Optional[Any] = None):
332
- """ Initializes the vector store wrapper with the provided parameters."""
337
+ """Initializes the vector store wrapper with the provided parameters."""
333
338
  try:
334
339
  from alita_sdk.runtime.tools.vectorstore import VectorStoreWrapper
335
340
  except ImportError:
336
341
  from alita_sdk.runtime.tools.vectorstore import VectorStoreWrapper
337
-
342
+
338
343
  # Validate collection_suffix length
339
344
  if collection_suffix and len(collection_suffix.strip()) > 7:
340
345
  raise ToolException("collection_suffix must be 7 characters or less")
341
-
346
+
342
347
  # Create collection name with suffix if provided
343
348
  collection_name = str(self.collection_name)
344
349
  if collection_suffix and collection_suffix.strip():
345
350
  collection_name = f"{self.collection_name}_{collection_suffix.strip()}"
346
-
347
- if self.vectorstore_type == 'PGVector':
348
- vectorstore_params = {
349
- "use_jsonb": True,
350
- "collection_name": collection_name,
351
- "create_extension": True,
352
- "alita_sdk_options": {
353
- "target_schema": collection_name,
354
- },
355
- "connection_string": self.connection_string.get_secret_value()
356
- }
357
- elif self.vectorstore_type == 'Chroma':
358
- vectorstore_params = {
359
- "collection_name": collection_name,
360
- "persist_directory": "./indexer_db"
361
- }
351
+
352
+ # Get database-specific parameters using adapter
353
+ connection_string = self.connection_string.get_secret_value() if self.connection_string else None
354
+ vectorstore_params = self._adapter.get_vectorstore_params(collection_name, connection_string)
362
355
 
363
356
  return VectorStoreWrapper(
364
357
  llm=self.llm,
@@ -371,36 +364,17 @@ class BaseVectorStoreToolApiWrapper(BaseToolApiWrapper):
371
364
  )
372
365
 
373
366
  def remove_index(self, collection_suffix: str = ""):
374
- """
375
- Cleans the indexed data in the collection
376
- """
377
-
378
- self._init_vector_store(collection_suffix)._remove_collection()
367
+ """Cleans the indexed data in the collection."""
368
+ vectorstore_wrapper = self._init_vector_store(collection_suffix)
369
+ collection_name = f"{self.collection_name}_{collection_suffix}" if collection_suffix else str(self.collection_name)
370
+ self._adapter.remove_collection(vectorstore_wrapper, collection_name)
371
+ return (f"Collection '{collection_name}' has been removed from the vector store.\n"
372
+ f"Available collections: {self.list_collections()}")
379
373
 
380
374
  def list_collections(self):
381
- """
382
- Lists all collections in the vector store
383
- """
384
- if self.vectorstore_type.lower() == 'PGVector'.lower():
385
- from sqlalchemy import text
386
- from sqlalchemy.orm import Session
387
-
388
- # schema_name = self.vectorstore.collection_name
389
- with Session(self._init_vector_store().vectorstore.session_maker.bind) as session:
390
- get_collections = text("""
391
- SELECT table_schema
392
- FROM information_schema.columns
393
- WHERE udt_name = 'vector';
394
- """)
395
-
396
- # Execute the raw SQL query
397
- result = session.execute(get_collections)
398
-
399
- # Fetch all rows from the result
400
- docs = result.fetchall()
401
- return str(docs)
402
- vector_client = self._init_vector_store().vectoradapter.vectorstore._client
403
- return ','.join([collection.name for collection in vector_client.list_collections()])
375
+ """Lists all collections in the vector store."""
376
+ vectorstore_wrapper = self._init_vector_store()
377
+ return self._adapter.list_collections(vectorstore_wrapper)
404
378
 
405
379
  def search_index(self,
406
380
  query: str,
@@ -22,7 +22,7 @@ def get_tools(tool):
22
22
  # indexer settings
23
23
  llm=tool['settings'].get('llm', None),
24
24
  connection_string = tool['settings'].get('connection_string', None),
25
- collection_name=str(tool['id']),
25
+ collection_name=str(tool['toolkit_name']),
26
26
  doctype='doc',
27
27
  embedding_model="HuggingFaceEmbeddings",
28
28
  embedding_model_params={"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
@@ -57,6 +57,10 @@ class FigmaToolkit(BaseToolkit):
57
57
  connection_string = (Optional[SecretStr], Field(description="Connection string for vectorstore",
58
58
  default=None,
59
59
  json_schema_extra={'secret': True})),
60
+
61
+ # embedder settings
62
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
63
+ embedding_model_params=(dict, Field(description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}", default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
60
64
  __config__=ConfigDict(
61
65
  json_schema_extra={
62
66
  "metadata": {
@@ -25,7 +25,7 @@ def _get_toolkit(tool) -> BaseToolkit:
25
25
  llm=tool['settings'].get('llm', None),
26
26
  alita=tool['settings'].get('alita', None),
27
27
  connection_string=tool['settings'].get('connection_string', None),
28
- collection_name=str(tool['id']),
28
+ collection_name=str(tool['toolkit_name']),
29
29
  doctype='code',
30
30
  embedding_model="HuggingFaceEmbeddings",
31
31
  embedding_model_params={"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
@@ -96,6 +96,10 @@ class AlitaGitHubToolkit(BaseToolkit):
96
96
  default=None,
97
97
  json_schema_extra={'secret': True})),
98
98
 
99
+ # embedder settings
100
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
101
+ embedding_model_params=(dict, Field(description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}", default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
102
+
99
103
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools}))
100
104
  )
101
105
 
@@ -123,4 +127,3 @@ class AlitaGitHubToolkit(BaseToolkit):
123
127
 
124
128
  def get_tools(self):
125
129
  return self.tools
126
-
@@ -7,7 +7,6 @@ from pydantic import create_model, BaseModel, ConfigDict, SecretStr
7
7
  from pydantic.fields import Field
8
8
 
9
9
  from .api_wrapper import GitLabAPIWrapper
10
- # from .tools import __all__
11
10
  from ..utils import clean_string, TOOLKIT_SPLITTER, get_max_toolkit_length
12
11
 
13
12
  name = "gitlab"
@@ -24,7 +23,7 @@ def get_tools(tool):
24
23
  llm=tool['settings'].get('llm', None),
25
24
  alita=tool['settings'].get('alita', None),
26
25
  connection_string=tool['settings'].get('connection_string', None),
27
- collection_name=f"{tool.get('toolkit_name')}_{str(tool['id'])}",
26
+ collection_name=str(tool['toolkit_name']),
28
27
  doctype='code',
29
28
  embedding_model="HuggingFaceEmbeddings",
30
29
  embedding_model_params={"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
@@ -51,6 +50,10 @@ class AlitaGitlabToolkit(BaseToolkit):
51
50
  connection_string=(Optional[SecretStr], Field(description="Connection string for vectorstore",
52
51
  default=None,
53
52
  json_schema_extra={'secret': True})),
53
+
54
+ # embedder settings
55
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
56
+ embedding_model_params=(dict, Field(description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}", default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
54
57
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
55
58
  __config__=ConfigDict(json_schema_extra={
56
59
  'metadata': {
@@ -25,7 +25,7 @@ def get_tools(tool):
25
25
  llm=tool['settings'].get('llm', None),
26
26
  alita=tool['settings'].get('alita', None),
27
27
  connection_string=tool['settings'].get('connection_string', None),
28
- collection_name=f"{tool.get('toolkit_name')}_{str(tool['id'])}",
28
+ collection_name=str(tool['toolkit_name']),
29
29
  embedding_model="HuggingFaceEmbeddings",
30
30
  embedding_model_params={"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
31
31
  vectorstore_type="PGVector",
@@ -81,6 +81,16 @@ class JiraToolkit(BaseToolkit):
81
81
  )),
82
82
  verify_ssl=(bool, Field(description="Verify SSL", default=True)),
83
83
  additional_fields=(Optional[str], Field(description="Additional fields", default="")),
84
+
85
+ # indexer settings
86
+ connection_string=(Optional[SecretStr], Field(description="Connection string for vectorstore",
87
+ default=None,
88
+ json_schema_extra={'secret': True})),
89
+
90
+ # embedder settings
91
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
92
+ embedding_model_params=(dict, Field(description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}", default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
93
+
84
94
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
85
95
  __config__=ConfigDict(json_schema_extra={
86
96
  'metadata': {
@@ -18,7 +18,7 @@ def get_tools(tool):
18
18
  llm=tool['settings'].get('llm'),
19
19
  # indexer settings
20
20
  connection_string=tool['settings'].get('connection_string', None),
21
- collection_name=f"{tool.get('toolkit_name')}_{str(tool['id'])}",
21
+ collection_name=str(tool['toolkit_name']),
22
22
  embedding_model="HuggingFaceEmbeddings",
23
23
  embedding_model_params={"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
24
24
  vectorstore_type="PGVector")
@@ -43,6 +43,10 @@ class SharepointToolkit(BaseToolkit):
43
43
  connection_string = (Optional[SecretStr], Field(description="Connection string for vectorstore",
44
44
  default=None,
45
45
  json_schema_extra={'secret': True})),
46
+
47
+ # embedder settings
48
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
49
+ embedding_model_params=(dict, Field(description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}", default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
46
50
  __config__=ConfigDict(json_schema_extra={
47
51
  'metadata': {
48
52
  "label": "Sharepoint", "icon_url": "sharepoint.svg",
@@ -172,7 +172,6 @@ class SharepointApiWrapper(BaseVectorStoreToolApiWrapper):
172
172
  yield Document(page_content=str(content), metadata=new_metadata)
173
173
  else:
174
174
  document.page_content = str(doc_content)
175
- yield document
176
175
 
177
176
  @extend_with_vector_tools
178
177
  def get_available_tools(self):
@@ -55,6 +55,10 @@ class TestrailToolkit(BaseToolkit):
55
55
  connection_string=(Optional[SecretStr], Field(description="Connection string for vectorstore",
56
56
  default=None,
57
57
  json_schema_extra={'secret': True})),
58
+
59
+ # embedder settings
60
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
61
+ embedding_model_params=(dict, Field(description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}", default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
58
62
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
59
63
  __config__=ConfigDict(json_schema_extra={'metadata':
60
64
  {"label": "Testrail", "icon_url": "testrail-icon.svg",
@@ -0,0 +1,91 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Any, Dict, Optional
3
+
4
+
5
+ class VectorStoreAdapter(ABC):
6
+ """Abstract base class for vector store adapters."""
7
+
8
+ @abstractmethod
9
+ def get_vectorstore_params(self, collection_name: str, connection_string: Optional[str] = None) -> Dict[str, Any]:
10
+ """Get vector store specific parameters."""
11
+ pass
12
+
13
+ @abstractmethod
14
+ def list_collections(self, vectorstore_wrapper) -> str:
15
+ """List all collections in the vector store."""
16
+ pass
17
+
18
+ @abstractmethod
19
+ def remove_collection(self, vectorstore_wrapper, collection_name: str):
20
+ """Remove a collection from the vector store."""
21
+ pass
22
+
23
+
24
+ class PGVectorAdapter(VectorStoreAdapter):
25
+ """Adapter for PGVector database operations."""
26
+
27
+ def get_vectorstore_params(self, collection_name: str, connection_string: Optional[str] = None) -> Dict[str, Any]:
28
+ return {
29
+ "use_jsonb": True,
30
+ "collection_name": collection_name,
31
+ "create_extension": True,
32
+ "alita_sdk_options": {
33
+ "target_schema": collection_name,
34
+ },
35
+ "connection_string": connection_string
36
+ }
37
+
38
+ def list_collections(self, vectorstore_wrapper) -> str:
39
+ from sqlalchemy import text
40
+ from sqlalchemy.orm import Session
41
+
42
+ with Session(vectorstore_wrapper.vectorstore.session_maker.bind) as session:
43
+ get_collections = text("""
44
+ SELECT table_schema
45
+ FROM information_schema.columns
46
+ WHERE udt_name = 'vector';
47
+ """)
48
+ result = session.execute(get_collections)
49
+ docs = result.fetchall()
50
+ return str(docs)
51
+
52
+ def remove_collection(self, vectorstore_wrapper, collection_name: str):
53
+ vectorstore_wrapper._remove_collection()
54
+
55
+
56
+ class ChromaAdapter(VectorStoreAdapter):
57
+ """Adapter for Chroma database operations."""
58
+
59
+ def get_vectorstore_params(self, collection_name: str, connection_string: Optional[str] = None) -> Dict[str, Any]:
60
+ return {
61
+ "collection_name": collection_name,
62
+ "persist_directory": "./indexer_db"
63
+ }
64
+
65
+ def list_collections(self, vectorstore_wrapper) -> str:
66
+ vector_client = vectorstore_wrapper.vectoradapter.vectorstore._client
67
+ return ','.join([collection.name for collection in vector_client.list_collections()])
68
+
69
+ def remove_collection(self, vectorstore_wrapper, collection_name: str):
70
+ vectorstore_wrapper.vectoradapter.vectorstore.delete_collection()
71
+
72
+
73
+ class VectorStoreAdapterFactory:
74
+ """Factory for creating vector store adapters."""
75
+
76
+ _adapters = {
77
+ 'PGVector': PGVectorAdapter,
78
+ 'Chroma': ChromaAdapter,
79
+ }
80
+
81
+ @classmethod
82
+ def create_adapter(cls, vectorstore_type: str) -> VectorStoreAdapter:
83
+ adapter_class = cls._adapters.get(vectorstore_type)
84
+ if not adapter_class:
85
+ raise ValueError(f"Unsupported vectorstore type: {vectorstore_type}")
86
+ return adapter_class()
87
+
88
+ @classmethod
89
+ def register_adapter(cls, vectorstore_type: str, adapter_class: type):
90
+ """Register a new adapter for a vector store type."""
91
+ cls._adapters[vectorstore_type] = adapter_class
File without changes
@@ -24,7 +24,7 @@ def get_tools(tool):
24
24
 
25
25
  # indexer settings
26
26
  connection_string=tool['settings'].get('connection_string', None),
27
- collection_name=f"{tool.get('toolkit_name')}_{str(tool['id'])}",
27
+ collection_name=str(tool['toolkit_name']),
28
28
  embedding_model="HuggingFaceEmbeddings",
29
29
  embedding_model_params={"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
30
30
  vectorstore_type="PGVector"
@@ -45,6 +45,16 @@ class XrayToolkit(BaseToolkit):
45
45
  client_id=(str, Field(description="Client ID")),
46
46
  client_secret=(SecretStr, Field(description="Client secret", json_schema_extra={'secret': True})),
47
47
  limit=(Optional[int], Field(description="Limit", default=100)),
48
+
49
+ # indexer settings
50
+ connection_string=(Optional[SecretStr], Field(description="Connection string for vectorstore",
51
+ default=None,
52
+ json_schema_extra={'secret': True})),
53
+
54
+ # embedder settings
55
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
56
+ embedding_model_params=(dict, Field(description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}", default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
57
+
48
58
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
49
59
  __config__={'json_schema_extra':
50
60
  {
@@ -18,7 +18,7 @@ def get_tools(tool):
18
18
 
19
19
  # indexer settings
20
20
  connection_string=tool['settings'].get('connection_string', None),
21
- collection_name=f"{tool.get('toolkit_name')}_{str(tool['id'])}",
21
+ collection_name=str(tool['toolkit_name']),
22
22
  embedding_model="HuggingFaceEmbeddings",
23
23
  embedding_model_params={"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
24
24
  vectorstore_type="PGVector"
@@ -41,6 +41,10 @@ class ZephyrEnterpriseToolkit(BaseToolkit):
41
41
  connection_string=(Optional[SecretStr], Field(description="Connection string for vectorstore",
42
42
  default=None,
43
43
  json_schema_extra={'secret': True})),
44
+
45
+ # embedder settings
46
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
47
+ embedding_model_params=(dict, Field(description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}", default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
44
48
  selected_tools=(List[Literal[tuple(selected_tools)]], []),
45
49
  __config__=ConfigDict(json_schema_extra={
46
50
  'metadata': {
@@ -71,4 +75,3 @@ class ZephyrEnterpriseToolkit(BaseToolkit):
71
75
 
72
76
  def get_tools(self) -> List[BaseTool]:
73
77
  return self.tools
74
-
@@ -1,15 +1,29 @@
1
1
  import logging
2
- from typing import Optional, List
2
+ from importlib.metadata import metadata
3
+ from operator import ifloordiv
4
+ from typing import Optional, List, Generator
3
5
 
4
6
  from langchain_core.tools import ToolException
5
7
  from pydantic import create_model, model_validator, PrivateAttr, Field, SecretStr
6
8
 
9
+ from langchain_core.documents import Document
7
10
  from .zephyr_enterprise import ZephyrClient
8
- from ..elitea_base import BaseToolApiWrapper
11
+ from ..elitea_base import BaseToolApiWrapper, BaseVectorStoreToolApiWrapper, extend_with_vector_tools
9
12
 
10
13
  logger = logging.getLogger(__name__)
11
14
 
12
- class ZephyrApiWrapper(BaseToolApiWrapper):
15
+ zql_description = """
16
+ ZQL query to search for test cases.
17
+ Supported: estimatedTime, testcaseId, creator, release,
18
+ project, priority, altId, version,
19
+ versionId, automated, folder, contents,
20
+ name, comment, tag
21
+
22
+ It has to follow the syntax in examples:
23
+ "folder=\"TestToolkit\"", "name~\"TestToolkit5\"
24
+ """
25
+
26
+ class ZephyrApiWrapper(BaseVectorStoreToolApiWrapper):
13
27
  base_url: str
14
28
  token: SecretStr
15
29
  _client: Optional[ZephyrClient] = PrivateAttr()
@@ -39,7 +53,7 @@ class ZephyrApiWrapper(BaseToolApiWrapper):
39
53
  return ToolException(f"Unable to retrieve Zephyr entities: {e}")
40
54
 
41
55
 
42
- def get_testcases_by_zql(self, zql: str):
56
+ def get_testcases_by_zql(self, zql: str, return_as_list: bool = False):
43
57
 
44
58
  """
45
59
  Retrieve testcases by zql.
@@ -50,8 +64,12 @@ class ZephyrApiWrapper(BaseToolApiWrapper):
50
64
  testcases = self._client.get_testcases_by_zql(zql)
51
65
  parsed_test_cases = []
52
66
  if testcases['resultSize'] == 0:
67
+ if return_as_list:
68
+ return []
53
69
  return "No test cases found for the provided ZQL query."
54
70
  logger.info(f"Retrieved test cases: {testcases}")
71
+ if return_as_list:
72
+ return [test_case['testcase'] for test_case in testcases['results']]
55
73
  for test_case in testcases['results']:
56
74
  parsed_test_cases.append(f"Test case ID: {test_case.get('id')}, Test case: {test_case['testcase']}")
57
75
  return "\n".join(parsed_test_cases)
@@ -69,6 +87,20 @@ class ZephyrApiWrapper(BaseToolApiWrapper):
69
87
  except Exception as e:
70
88
  return ToolException(f"Unable to retrieve Zephyr entities: {e}")
71
89
 
90
+ def get_test_case_steps(self, testcase_tree_id: str):
91
+ last_version = self.get_last_version(testcase_tree_id)
92
+ return self._client.get_testcase_steps(last_version)
93
+
94
+ def get_last_version(self, testcase_tree_id: str):
95
+ # get test case id
96
+ test_case_id = self._client.get_test_case(testcase_tree_id)['testcase']['testcaseId']
97
+ logger.info(f"Test case id: {test_case_id}")
98
+ # get test case version id
99
+ return self._client.get_testcase_versions(test_case_id)[-1]['id']
100
+
101
+ def get_test_case_steps_by_version(self, test_case_version_id: str):
102
+ return self._client.get_testcase_steps(test_case_version_id)
103
+
72
104
  def add_steps(self, testcase_tree_id: str, steps: Optional[List[dict]] = []):
73
105
 
74
106
  """
@@ -81,14 +113,10 @@ class ZephyrApiWrapper(BaseToolApiWrapper):
81
113
  if not steps:
82
114
  return ToolException("Steps cannot be empty.")
83
115
 
84
- # get test case id
85
- test_case_id = self._client.get_test_case(testcase_tree_id)['testcase']['testcaseId']
86
- logger.info(f"Test case id: {test_case_id}")
87
- # get test case version id
88
- test_case_version_id = self._client.get_testcase_versions(test_case_id)[-1]['id']
116
+ test_case_version_id = self.get_last_version(testcase_tree_id)
89
117
  logger.info(f"Test case version id: {test_case_version_id}")
90
118
  # get test case steps
91
- test_case_steps = self._client.get_testcase_steps(test_case_version_id)
119
+ test_case_steps = self.get_test_case_steps_by_version(test_case_version_id)
92
120
  logger.info(f"Test case steps: {test_case_steps}")
93
121
  # add steps
94
122
  actual_steps = test_case_steps['steps'] if test_case_steps else None
@@ -120,6 +148,30 @@ class ZephyrApiWrapper(BaseToolApiWrapper):
120
148
  except Exception as e:
121
149
  return ToolException(f"Unable to retrieve Zephyr entities: {e}")
122
150
 
151
+ def _index_tool_params(self, **kwargs) -> dict[str, tuple[type, Field]]:
152
+ """
153
+ Returns a list of fields for index_data args schema.
154
+ """
155
+ return {
156
+ "zql": (str, Field(description=zql_description, examples=["folder=\"TestToolkit\"", "name~\"TestToolkit5\""))
157
+ }
158
+
159
+ def _base_loader(self, zql: str) -> Generator[Document, None, None]:
160
+ test_cases = self.get_testcases_by_zql(zql)
161
+ for test_case in test_cases:
162
+ metadata = {
163
+ ("updated_on" if k == "lastModifiedOn" else "id" if k == "testcaseId" else k): str(v)
164
+ for k, v in test_case
165
+ if k != "id"
166
+ }
167
+ yield Document(page_content='', metadata=metadata)
168
+
169
+ def _process_document(self, document: Document) -> Generator[Document, None, None]:
170
+ id = document.metadata['id']
171
+ test_case_content = self.get_test_case_steps(id)
172
+ document.page_content = test_case_content
173
+
174
+ @extend_with_vector_tools
123
175
  def get_available_tools(self):
124
176
  return [
125
177
  {
@@ -188,16 +240,7 @@ class ZephyrApiWrapper(BaseToolApiWrapper):
188
240
  "description": self.get_testcases_by_zql.__doc__,
189
241
  "args_schema": create_model(
190
242
  "TestCaseByZqlModel",
191
- zql=(str, Field(description="""
192
- ZQL query to search for test cases.
193
- Supported: estimatedTime, testcaseId, creator, release,
194
- project, priority, altId, version,
195
- versionId, automated, folder, contents,
196
- name, comment, tag
197
-
198
- It has to follow the syntax in examples:
199
- "folder=\"TestToolkit\"", "name~\"TestToolkit5\"
200
- """, examples=["folder=\"TestToolkit\"", "name~\"TestToolkit5\""]))
243
+ zql=(str, Field(description=zql_description, examples=["folder=\"TestToolkit\"", "name~\"TestToolkit5\""]))
201
244
  ),
202
245
  "ref": self.get_testcases_by_zql,
203
246
  }
@@ -18,7 +18,7 @@ def get_tools(tool):
18
18
 
19
19
  # indexer settings
20
20
  connection_string = tool['settings'].get('connection_string', None),
21
- collection_name = f"{tool.get('toolkit_name')}_{str(tool['id'])}",
21
+ collection_name=str(tool['toolkit_name']),
22
22
  embedding_model = "HuggingFaceEmbeddings",
23
23
  embedding_model_params = {"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
24
24
  vectorstore_type = "PGVector"
@@ -41,6 +41,10 @@ class ZephyrEssentialToolkit(BaseToolkit):
41
41
  connection_string=(Optional[SecretStr], Field(description="Connection string for vectorstore",
42
42
  default=None,
43
43
  json_schema_extra={'secret': True})),
44
+
45
+ # embedder settings
46
+ embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
47
+ embedding_model_params=(dict, Field(description="Embedding model parameters: i.e. `{'model_name': 'sentence-transformers/all-MiniLM-L6-v2'}", default={"model_name": "sentence-transformers/all-MiniLM-L6-v2"})),
44
48
  __config__={'json_schema_extra': {'metadata': {"label": "Zephyr Essential", "icon_url": "zephyr.svg",
45
49
  "categories": ["test management"],
46
50
  "extra_categories": ["test automation", "test case management", "test planning"]
@@ -67,4 +71,3 @@ class ZephyrEssentialToolkit(BaseToolkit):
67
71
 
68
72
  def get_tools(self):
69
73
  return self.tools
70
-
@@ -253,7 +253,6 @@ class ZephyrEssentialApiWrapper(BaseVectorStoreToolApiWrapper):
253
253
  base_data['test_case_content'] = additional_content
254
254
 
255
255
  document.page_content = json.dumps(base_data)
256
- yield document
257
256
  except json.JSONDecodeError as e:
258
257
  raise ToolException(f"Failed to decode JSON from document: {e}")
259
258
 
@@ -1283,7 +1283,6 @@ class ZephyrScaleApiWrapper(BaseVectorStoreToolApiWrapper):
1283
1283
  base_data['test_case_content'] = additional_content
1284
1284
 
1285
1285
  document.page_content = json.dumps(base_data)
1286
- yield document
1287
1286
  except json.JSONDecodeError as e:
1288
1287
  raise ToolException(f"Failed to decode JSON from document: {e}")
1289
1288
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.221
3
+ Version: 0.3.223
4
4
  Summary: SDK for building langchain agents using resources from Alita
5
5
  Author-email: Artem Rozumenko <artyom.rozumenko@gmail.com>, Mikalai Biazruchka <mikalai_biazruchka@epam.com>, Roman Mitusov <roman_mitusov@epam.com>, Ivan Krakhmaliuk <lifedjik@gmail.com>, Artem Dubrovskiy <ad13box@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -69,7 +69,7 @@ alita_sdk/runtime/toolkits/vectorstore.py,sha256=BGppQADa1ZiLO17fC0uCACTTEvPHlod
69
69
  alita_sdk/runtime/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
70
  alita_sdk/runtime/tools/agent.py,sha256=m98QxOHwnCRTT9j18Olbb5UPS8-ZGeQaGiUyZJSyFck,3162
71
71
  alita_sdk/runtime/tools/application.py,sha256=mC2_ZFx4WLHc98Gzll88Vw6cqyx2cmbig2IeJBtHRdg,2836
72
- alita_sdk/runtime/tools/artifact.py,sha256=BWeLWnwlVgOaAVxJfREeMkdDXnPEiTas2L0iUujVBWI,8692
72
+ alita_sdk/runtime/tools/artifact.py,sha256=K8TE4z5gYOLgY1ee51DkeN4rXt4neXdLFLpsxHX6MKE,8665
73
73
  alita_sdk/runtime/tools/datasource.py,sha256=pvbaSfI-ThQQnjHG-QhYNSTYRnZB0rYtZFpjCfpzxYI,2443
74
74
  alita_sdk/runtime/tools/echo.py,sha256=spw9eCweXzixJqHnZofHE1yWiSUa04L4VKycf3KCEaM,486
75
75
  alita_sdk/runtime/tools/function.py,sha256=ZFpd7TGwIawze2e7BHlKwP0NHwNw42wwrmmnXyJQJhk,2600
@@ -82,7 +82,7 @@ alita_sdk/runtime/tools/pgvector_search.py,sha256=NN2BGAnq4SsDHIhUcFZ8d_dbEOM8Qw
82
82
  alita_sdk/runtime/tools/prompt.py,sha256=nJafb_e5aOM1Rr3qGFCR-SKziU9uCsiP2okIMs9PppM,741
83
83
  alita_sdk/runtime/tools/router.py,sha256=wCvZjVkdXK9dMMeEerrgKf5M790RudH68pDortnHSz0,1517
84
84
  alita_sdk/runtime/tools/tool.py,sha256=lE1hGi6qOAXG7qxtqxarD_XMQqTghdywf261DZawwno,5631
85
- alita_sdk/runtime/tools/vectorstore.py,sha256=lpbpS2yukyT9xRkT2tNQl9YqnlO5F0rNCyj0nU7OJDE,38537
85
+ alita_sdk/runtime/tools/vectorstore.py,sha256=-AMZaWHeMoM5k0GX62vDA9BThSM1e-5UwsLUM3b4WL8,38538
86
86
  alita_sdk/runtime/utils/AlitaCallback.py,sha256=E4LlSBuCHWiUq6W7IZExERHZY0qcmdjzc_rJlF2iQIw,7356
87
87
  alita_sdk/runtime/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
88
  alita_sdk/runtime/utils/constants.py,sha256=Xntx1b_uxUzT4clwqHA_U6K8y5bBqf_4lSQwXdcWrp4,13586
@@ -94,16 +94,16 @@ alita_sdk/runtime/utils/toolkit_runtime.py,sha256=MU63Fpxj0b5_r1IUUc0Q3-PN9VwL7r
94
94
  alita_sdk/runtime/utils/toolkit_utils.py,sha256=I9QFqnaqfVgN26LUr6s3XlBlG6y0CoHURnCzG7XcwVs,5311
95
95
  alita_sdk/runtime/utils/utils.py,sha256=CpEl3LCeLbhzQySz08lkKPm7Auac6IiLF7WB8wmArMI,589
96
96
  alita_sdk/tools/__init__.py,sha256=1AHqP2xyLjn92xVm70l9XIke6FkfHkLo5OoQVe4BuP8,10421
97
- alita_sdk/tools/elitea_base.py,sha256=HH02c1j7MtzJmuEumM8yQHxFuRL1Tc3ZavD27bvMoi4,31091
97
+ alita_sdk/tools/elitea_base.py,sha256=anEPuN9dtOsSTJQlHpap5ho_hf-iPmBQpw4tmNUTP5k,30475
98
98
  alita_sdk/tools/ado/__init__.py,sha256=2NMQwt2pjIukSC9nSZ7CLocdGpK7002x7ixKr_wunxk,1313
99
99
  alita_sdk/tools/ado/utils.py,sha256=PTCludvaQmPLakF2EbCGy66Mro4-rjDtavVP-xcB2Wc,1252
100
- alita_sdk/tools/ado/repos/__init__.py,sha256=guYY95Gtyb0S4Jj0V1qO0x2jlRoH0H1cKjHXNwmShow,6388
100
+ alita_sdk/tools/ado/repos/__init__.py,sha256=VvOapCG5okdyfCNdeTfOdcgRvl54cB1-sx_BF0TBWOw,6858
101
101
  alita_sdk/tools/ado/repos/repos_wrapper.py,sha256=SgnEUX1lTn5ncZI8EFfPibk0_gHstkApDSqTCxYsrUk,50097
102
- alita_sdk/tools/ado/test_plan/__init__.py,sha256=bVywTYTvdm1rUeP2krVVMRN-xDCY--ze7NFdTxJP9ow,4708
102
+ alita_sdk/tools/ado/test_plan/__init__.py,sha256=QUNSOCVheUbILve4CxjBzBHKcIA28jZjoA6rRb8tD_Y,5483
103
103
  alita_sdk/tools/ado/test_plan/test_plan_wrapper.py,sha256=MIEgTcjXQ_Hmx9Thzb1VXrviiB-nusFe-ym3BYlwa_4,20175
104
- alita_sdk/tools/ado/wiki/__init__.py,sha256=WCIKOisU2h3E4SNDvGfWCMZ3nRMxfH_ZhIffmSHH3XI,4576
104
+ alita_sdk/tools/ado/wiki/__init__.py,sha256=3cPNqUyOFwnZ2g5QW8wsdBC9sB0u39F-q4KKVjQqTN8,5351
105
105
  alita_sdk/tools/ado/wiki/ado_wrapper.py,sha256=JfEbq2OBVtQe-6igYj09ucxwHEl34SozPIJ6gRGWcU8,14157
106
- alita_sdk/tools/ado/work_item/__init__.py,sha256=Is-YHu7OZdxp4iJZzHqXHM5VANK2Y6a_C-oU7ryNiJ8,5038
106
+ alita_sdk/tools/ado/work_item/__init__.py,sha256=dBDjP8CJnKe9xBbJg-EG1AvRo06mcfS2f0AVeXMaBmk,5507
107
107
  alita_sdk/tools/ado/work_item/ado_wrapper.py,sha256=7YrqNIDnVYYm8__joABAr3iIk3IvYoQ7NZ9Vi-iaICc,28233
108
108
  alita_sdk/tools/advanced_jira_mining/__init__.py,sha256=pUTzECqGvYaR5qWY3JPUhrImrZgc7pCXuqSe5eWIE80,4604
109
109
  alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py,sha256=nZPtuwVWp8VeHw1B8q9kdwf-6ZvHnlXTOGdcIMDkKpw,44211
@@ -117,7 +117,7 @@ alita_sdk/tools/azure_ai/search/__init__.py,sha256=RaaWHX9o2NMxRruQGQwsDfacvtEJ5
117
117
  alita_sdk/tools/azure_ai/search/api_wrapper.py,sha256=E4p6HPDlwgxfT_i6cvg9rN4Vn_47CVAyNBAKLIGq3mU,7265
118
118
  alita_sdk/tools/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
119
  alita_sdk/tools/base/tool.py,sha256=-N27AodZS49vdPCgFkU-bFS9bxoPopZBnNrmwInx3d0,864
120
- alita_sdk/tools/bitbucket/__init__.py,sha256=jLnTLdfDK-n3AoWD_ljVVYo8u2TuFmWxB5Cwn7p8PGQ,5051
120
+ alita_sdk/tools/bitbucket/__init__.py,sha256=EEJUp965OT0JijI6x7U7DP-_5sgRC3Q3TbNnxky6hPo,5458
121
121
  alita_sdk/tools/bitbucket/api_wrapper.py,sha256=wZp00LAxRs-nsMAduXUHTGGV41ayThpAKqGKmm4g27U,10880
122
122
  alita_sdk/tools/bitbucket/bitbucket_constants.py,sha256=UsbhQ1iEvrKoxceTFPWTYhaXS1zSxbmjs1TwY0-P4gw,462
123
123
  alita_sdk/tools/bitbucket/cloud_api_wrapper.py,sha256=VELi65tLXvszwCGQSqVfyVal0ylx9DgAmAGpRQL_Zkg,15522
@@ -185,7 +185,7 @@ alita_sdk/tools/code/linter/api_wrapper.py,sha256=wylpwhAw02Jt8L18CqBq2He5PbwIkx
185
185
  alita_sdk/tools/code/loaders/codesearcher.py,sha256=XoXXZtIQZhvjIwZlnl_4wVGHC-3saYzFo5oDR_Zh3EY,529
186
186
  alita_sdk/tools/code/sonar/__init__.py,sha256=u8wpgXJ_shToLl3G9-XEtGDor5dhmsnurIImh1-e-U0,3165
187
187
  alita_sdk/tools/code/sonar/api_wrapper.py,sha256=nNqxcWN_6W8c0ckj-Er9HkNuAdgQLoWBXh5UyzNutis,2653
188
- alita_sdk/tools/confluence/__init__.py,sha256=1wGSP4CjPbfpdZLsjC1SVftTV7XSvW3QCAMHuh9tIxA,6885
188
+ alita_sdk/tools/confluence/__init__.py,sha256=Osn9Sd8dURk8zms6J6MDYtH-MAQaXcI21MW_MOZS9pE,7293
189
189
  alita_sdk/tools/confluence/api_wrapper.py,sha256=VR0TEMJPqe3ylzl_DuFSZ3LS0oTIJ7SufjifRXIYEhg,84507
190
190
  alita_sdk/tools/confluence/loader.py,sha256=4bf5qrJMEiJzuZp2NlxO2XObLD1w7fxss_WyMUpe8sg,9290
191
191
  alita_sdk/tools/confluence/utils.py,sha256=Lxo6dBD0OlvM4o0JuK6qeB_4LV9BptiwJA9e1vqNcDw,435
@@ -193,16 +193,16 @@ alita_sdk/tools/custom_open_api/__init__.py,sha256=9aT5SPNPWcJC6jMZEM-3rUCXVULj_
193
193
  alita_sdk/tools/custom_open_api/api_wrapper.py,sha256=sDSFpvEqpSvXHGiBISdQQcUecfO3md-_F8hAi6p2dvg,4340
194
194
  alita_sdk/tools/elastic/__init__.py,sha256=iwnSRppRpzvJ1da2K3Glu8Uu41MhBDCYbguboLkEbW0,2818
195
195
  alita_sdk/tools/elastic/api_wrapper.py,sha256=pl8CqQxteJAGwyOhMcld-ZgtOTFwwbv42OITQVe8rM0,1948
196
- alita_sdk/tools/figma/__init__.py,sha256=O5Aiv1g9Zub1Z6bfxKRK3WuVKGmAh7sPD0rJ5WdsGK4,4822
196
+ alita_sdk/tools/figma/__init__.py,sha256=VBimOTXVoq0KK4dXcHaWT0yDcPZxhHYpZ_J3AqL_4xU,5229
197
197
  alita_sdk/tools/figma/api_wrapper.py,sha256=Q5BbEVfzIPGGSAV-T9gv0a31ku4jqCCvQDF85etHJEo,19276
198
- alita_sdk/tools/github/__init__.py,sha256=YPpZPPhRUHWKJ9aaMJnkjl9xrnAij1YB9C2TMRnlaTI,6388
198
+ alita_sdk/tools/github/__init__.py,sha256=QIu4RQcuM21kVQk9yhCVdUsE4RERKb1FIWFRO9YaSAc,6794
199
199
  alita_sdk/tools/github/api_wrapper.py,sha256=JRhn7Cgg2j6uEwlvuQCMeISNYvRV2Yahx-v-p8HspUQ,8767
200
200
  alita_sdk/tools/github/github_client.py,sha256=nxnSXsDul2PPbWvYZS8TmAFFmR-5ALyakNoV5LN2D4U,86617
201
201
  alita_sdk/tools/github/graphql_client_wrapper.py,sha256=d3AGjzLGH_hdQV2V8HeAX92dJ4dlnE5OXqUlCO_PBr0,71539
202
202
  alita_sdk/tools/github/schemas.py,sha256=yFsqivfjCPRk9GxFJrL8sTz6nnjFCZ0j5DIfPtGSsvA,13852
203
203
  alita_sdk/tools/github/tool.py,sha256=Jnnv5lenV5ds8AAdyo2m8hSzyJ117HZBjzHC6T1ck-M,1037
204
204
  alita_sdk/tools/github/tool_prompts.py,sha256=y6ZW_FpUCE87Uop3WuQAZVRnzxO5t7xjBOI5bCqiluw,30194
205
- alita_sdk/tools/gitlab/__init__.py,sha256=J_nKHitpD1EhoOtnI5D2Qn-IyiiWd1sxOT181YPpF2k,4507
205
+ alita_sdk/tools/gitlab/__init__.py,sha256=DftTt4uVaRG4g2RFvLKyghG_A28ukGPHK9G2jojEGnM,4853
206
206
  alita_sdk/tools/gitlab/api_wrapper.py,sha256=kAGHmne6Wh8WrQQUdZ1d8bhgzgmN_fAz49WZsX7K1Ps,22396
207
207
  alita_sdk/tools/gitlab/tools.py,sha256=vOGTlSaGaFmWn6LS6YFP-FuTqUPun9vnv1VrUcUHAZQ,16500
208
208
  alita_sdk/tools/gitlab/utils.py,sha256=Z2XiqIg54ouqqt1to-geFybmkCb1I6bpE91wfnINH1I,2320
@@ -218,7 +218,7 @@ alita_sdk/tools/google/bigquery/schemas.py,sha256=Gb8KQZSoRkmjXiz21dTC95c1MHEHFc
218
218
  alita_sdk/tools/google/bigquery/tool.py,sha256=Esf9Hsp8I0e7-5EdkFqQ-bid0cfrg-bfSoHoW_IIARo,1027
219
219
  alita_sdk/tools/google_places/__init__.py,sha256=mHKc7u9P2gqGDzqqJNQC9qiZYEm5gncnM_1XjtrM17o,3152
220
220
  alita_sdk/tools/google_places/api_wrapper.py,sha256=7nZly6nk4f4Tm7s2MVdnnwlb-1_WHRrDhyjDiqoyPjA,4674
221
- alita_sdk/tools/jira/__init__.py,sha256=siRFageS8tm9Ak67cWq8BgfnhUWcVrPK52zj4p60ZvI,6239
221
+ alita_sdk/tools/jira/__init__.py,sha256=ieBe08us8poRzjLnuIxHGoP33sJRSHbdr8Z-GbI4P6k,6922
222
222
  alita_sdk/tools/jira/api_wrapper.py,sha256=gZXEtOZtWvINHipHPj8Dg6uNyYKZariLo4Bs3_wLJrA,75932
223
223
  alita_sdk/tools/keycloak/__init__.py,sha256=0WB9yXMUUAHQRni1ghDEmd7GYa7aJPsTVlZgMCM9cQ0,3050
224
224
  alita_sdk/tools/keycloak/api_wrapper.py,sha256=cOGr0f3S3-c6tRDBWI8wMnetjoNSxiV5rvC_0VHb8uw,3100
@@ -271,8 +271,8 @@ alita_sdk/tools/salesforce/model.py,sha256=wzpbTdUx5mANApAZFQIKzq7xXtYBiiSlKvrTX
271
271
  alita_sdk/tools/servicenow/__init__.py,sha256=VHH3qpUbEJ0tdtrIiWakohCmbifUOPgCVXERN3jRwsU,4234
272
272
  alita_sdk/tools/servicenow/api_wrapper.py,sha256=WpH-bBLGFdhehs4g-K-WAkNuaD1CSrwsDpdgB3RG53s,6120
273
273
  alita_sdk/tools/servicenow/servicenow_client.py,sha256=Rdqfu-ll-qbnclMzChLZBsfXRDzgoX_FdeI2WLApWxc,3269
274
- alita_sdk/tools/sharepoint/__init__.py,sha256=JEKSMgpPxctjfLPkz0ndbUgasDGnU0D_-S6T6y8YcoY,3698
275
- alita_sdk/tools/sharepoint/api_wrapper.py,sha256=bLDWQWTpnOxNmO9IDz_H-UNZ1uHM5gbIHsZlRipTxNU,9110
274
+ alita_sdk/tools/sharepoint/__init__.py,sha256=8ix4a4lWN6vpGS6bdcr4U7zdttk6ShgQ0ji4r7w3iKw,4073
275
+ alita_sdk/tools/sharepoint/api_wrapper.py,sha256=YCD0DkdgTyrDs4cSOO_LQjTVfmoA8U_keGGJlefxSTo,9083
276
276
  alita_sdk/tools/sharepoint/authorization_helper.py,sha256=n-nL5dlBoLMK70nHu7P2RYCb8C6c9HMA_gEaw8LxuhE,2007
277
277
  alita_sdk/tools/sharepoint/utils.py,sha256=fZ1YzAu5CTjKSZeslowpOPH974902S8vCp1Wu7L44LM,446
278
278
  alita_sdk/tools/slack/__init__.py,sha256=mbP2JiHybGSAH0ay8pxvPCqeU2eb9CK_NaCKG1uhPE4,3894
@@ -282,11 +282,13 @@ alita_sdk/tools/sql/api_wrapper.py,sha256=Rky0_CX9HWDQ2mClHGAgP3LHjYVX4iymPuilZM
282
282
  alita_sdk/tools/sql/models.py,sha256=AKJgSl_kEEz4fZfw3kbvdGHXaRZ-yiaqfJOB6YOj3i0,641
283
283
  alita_sdk/tools/testio/__init__.py,sha256=qi12wyJXN02hrUXg08CbijcCL5pi30JMbJfiXjn1Zr0,2646
284
284
  alita_sdk/tools/testio/api_wrapper.py,sha256=BvmL5h634BzG6p7ajnQLmj-uoAw1gjWnd4FHHu1h--Q,21638
285
- alita_sdk/tools/testrail/__init__.py,sha256=sYDPE4wOv24dt8K6g57fNBd4toLZSrrhqM5g8sDlTDI,4445
285
+ alita_sdk/tools/testrail/__init__.py,sha256=VEoFDsMgzMapOaifdlEL_S_YxzD0CjXokGYvqvfPMNw,4842
286
286
  alita_sdk/tools/testrail/api_wrapper.py,sha256=Aax0jspgidXYNxLIw6qTWu3dO2JOIS0ALIqsCzQuFbQ,32087
287
287
  alita_sdk/tools/utils/__init__.py,sha256=155xepXPr4OEzs2Mz5YnjXcBpxSv1X2eznRUVoPtyK0,3268
288
288
  alita_sdk/tools/utils/content_parser.py,sha256=j2eDFhLCPNw61lnt8uaJLO7-Md3qWlKjOejou5JGKdg,7327
289
- alita_sdk/tools/xray/__init__.py,sha256=oEfC64wuUrxv56UE8z5iksl76pN7hJJfJ9mKuhaHZEc,3648
289
+ alita_sdk/tools/vector_adapters/VectorStoreAdapter.py,sha256=bsUFx-P3I5Rfzpk-mCrabhLtt3motAm02GaRK9C-WXA,3260
290
+ alita_sdk/tools/vector_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
291
+ alita_sdk/tools/xray/__init__.py,sha256=OYa1wveTm-lAhsJaGXMnwOrDQWl6ch--NjNLBeR63eM,4331
290
292
  alita_sdk/tools/xray/api_wrapper.py,sha256=A8PJmY2k7TowaD_vk6ZxkMnSUoZUt9A6g4TJrZfNTAw,32225
291
293
  alita_sdk/tools/yagmail/__init__.py,sha256=c4Qn3em0tLxzRmFKpzbBgY9W2EnOoKf0azoDJHng5CY,2208
292
294
  alita_sdk/tools/yagmail/yagmail_wrapper.py,sha256=SKoGVd1X4Ew3ad5tOdtPoY00M6jStNdT3q7GXEjQc5g,1952
@@ -294,19 +296,19 @@ alita_sdk/tools/zephyr/Zephyr.py,sha256=ODZbg9Aw0H0Rbv-HcDXLI4KHbPiLDHoteDofshw9
294
296
  alita_sdk/tools/zephyr/__init__.py,sha256=8B2Ibz5QTmB5WkV0q8Sq4kuj92FFaFWZLrT877zRRLg,2897
295
297
  alita_sdk/tools/zephyr/api_wrapper.py,sha256=lJCYPG03ej0qgdpLflnS7LFB4HSAfGzIvTjAJt07CQs,6244
296
298
  alita_sdk/tools/zephyr/rest_client.py,sha256=7vSD3oYIX-3KbAFed-mphSQif_VRuXrq5O07ryNQ7Pk,6208
297
- alita_sdk/tools/zephyr_enterprise/__init__.py,sha256=lWnOuVmva8vWBSlnk-wv40oBowxJDXa7iumsiXACcA0,3511
298
- alita_sdk/tools/zephyr_enterprise/api_wrapper.py,sha256=Ir3zHljhbZQJRJJQOBzS_GL5xvxb3-Vq5VF8XIMkxck,9348
299
+ alita_sdk/tools/zephyr_enterprise/__init__.py,sha256=XAWLj4WgMpEz3xnP8VW1lzHVW48K3CxIXdgeubjMvaw,3885
300
+ alita_sdk/tools/zephyr_enterprise/api_wrapper.py,sha256=arPAvOGrurEsZaICvdVrcbspXBdDQl4XuNdfZSmm1lg,11204
299
301
  alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py,sha256=hV9LIrYfJT6oYp-ZfQR0YHflqBFPsUw2Oc55HwK0H48,6809
300
- alita_sdk/tools/zephyr_essential/__init__.py,sha256=LYLF9imlfeuW8KZDGLeENWGXT71x7WWDv-Ss8rG2v8Q,3256
301
- alita_sdk/tools/zephyr_essential/api_wrapper.py,sha256=ksg-2j_w74pt2pdoWuuSU-gF3E6IlNtv4wxPf8sJMWg,36812
302
+ alita_sdk/tools/zephyr_essential/__init__.py,sha256=-VS-smytUSjqNLLi6HmqbsU3NfmNFTrzPjzNiEtOi5c,3628
303
+ alita_sdk/tools/zephyr_essential/api_wrapper.py,sha256=zjZnAx1Fl1fYx5Vc1Q8JOc_pxUEkCngbRzzmea4sj7Y,36785
302
304
  alita_sdk/tools/zephyr_essential/client.py,sha256=bfNcUKNqj9MFWTludGbbqD4qZlxrBaC2JtWsCfZMqSY,9722
303
305
  alita_sdk/tools/zephyr_scale/__init__.py,sha256=2NTcdrfkx4GSegqyXhsPLsEpc4FlACuDy85b0fk6cAo,4572
304
- alita_sdk/tools/zephyr_scale/api_wrapper.py,sha256=9CzQqQKv45LqZCmwSe4zzEXvBtStIcGQ1b51EQG5rhQ,78032
306
+ alita_sdk/tools/zephyr_scale/api_wrapper.py,sha256=ZpHVRpeWDE-kxOf491vHgNesozuwEVS4oB0cnPs4XMw,78005
305
307
  alita_sdk/tools/zephyr_squad/__init__.py,sha256=0AI_j27xVO5Gk5HQMFrqPTd4uvuVTpiZUicBrdfEpKg,2796
306
308
  alita_sdk/tools/zephyr_squad/api_wrapper.py,sha256=kmw_xol8YIYFplBLWTqP_VKPRhL_1ItDD0_vXTe_UuI,14906
307
309
  alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py,sha256=R371waHsms4sllHCbijKYs90C-9Yu0sSR3N4SUfQOgU,5066
308
- alita_sdk-0.3.221.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
309
- alita_sdk-0.3.221.dist-info/METADATA,sha256=zuvtQKT7XslCi0pc408eocmlMiXws7sCY2IpTauO-wQ,18917
310
- alita_sdk-0.3.221.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
311
- alita_sdk-0.3.221.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
312
- alita_sdk-0.3.221.dist-info/RECORD,,
310
+ alita_sdk-0.3.223.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
311
+ alita_sdk-0.3.223.dist-info/METADATA,sha256=G8Oorskh9yb8AK6-VSNMDROWc51kjn1_EkR_rfvlUf4,18917
312
+ alita_sdk-0.3.223.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
313
+ alita_sdk-0.3.223.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
314
+ alita_sdk-0.3.223.dist-info/RECORD,,