alita-sdk 0.3.229__py3-none-any.whl → 0.3.230__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 (33) hide show
  1. alita_sdk/runtime/langchain/document_loaders/AlitaDocLoader.py +29 -0
  2. alita_sdk/runtime/langchain/document_loaders/constants.py +6 -0
  3. alita_sdk/runtime/langchain/document_loaders/utils.py +22 -1
  4. alita_sdk/tools/ado/__init__.py +2 -3
  5. alita_sdk/tools/ado/repos/__init__.py +12 -10
  6. alita_sdk/tools/ado/repos/repos_wrapper.py +1 -0
  7. alita_sdk/tools/ado/test_plan/__init__.py +17 -15
  8. alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +1 -0
  9. alita_sdk/tools/ado/wiki/__init__.py +18 -20
  10. alita_sdk/tools/ado/wiki/ado_wrapper.py +1 -0
  11. alita_sdk/tools/ado/work_item/__init__.py +18 -19
  12. alita_sdk/tools/ado/work_item/ado_wrapper.py +1 -0
  13. alita_sdk/tools/azure_ai/search/__init__.py +7 -4
  14. alita_sdk/tools/bitbucket/__init__.py +9 -4
  15. alita_sdk/tools/confluence/__init__.py +9 -5
  16. alita_sdk/tools/figma/__init__.py +8 -5
  17. alita_sdk/tools/figma/api_wrapper.py +37 -12
  18. alita_sdk/tools/github/__init__.py +9 -10
  19. alita_sdk/tools/gitlab/__init__.py +10 -5
  20. alita_sdk/tools/google/bigquery/__init__.py +7 -2
  21. alita_sdk/tools/jira/__init__.py +9 -5
  22. alita_sdk/tools/postman/__init__.py +7 -2
  23. alita_sdk/tools/qtest/__init__.py +7 -2
  24. alita_sdk/tools/servicenow/__init__.py +7 -3
  25. alita_sdk/tools/sharepoint/__init__.py +8 -5
  26. alita_sdk/tools/slack/__init__.py +7 -3
  27. alita_sdk/tools/testrail/__init__.py +9 -4
  28. alita_sdk/tools/utils/content_parser.py +16 -26
  29. {alita_sdk-0.3.229.dist-info → alita_sdk-0.3.230.dist-info}/METADATA +2 -2
  30. {alita_sdk-0.3.229.dist-info → alita_sdk-0.3.230.dist-info}/RECORD +33 -32
  31. {alita_sdk-0.3.229.dist-info → alita_sdk-0.3.230.dist-info}/WHEEL +0 -0
  32. {alita_sdk-0.3.229.dist-info → alita_sdk-0.3.230.dist-info}/licenses/LICENSE +0 -0
  33. {alita_sdk-0.3.229.dist-info → alita_sdk-0.3.230.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,29 @@
1
+ from langchain_core.document_loaders import BaseLoader
2
+ from langchain_core.documents import Document
3
+
4
+ from .utils import file_to_bytes
5
+
6
+
7
+ class AlitaDocLoader(BaseLoader):
8
+
9
+ def __init__(self, **kwargs):
10
+ if kwargs.get('file_path'):
11
+ self.file_path = kwargs['file_path']
12
+ elif kwargs.get('file_content'):
13
+ self.file_content = kwargs['file_content']
14
+ self.file_name = kwargs['file_name']
15
+ else:
16
+ raise ValueError(
17
+ "Path parameter is required (either as 'file_path' positional argument or 'path' keyword argument)")
18
+
19
+ def load(self):
20
+ result_content = self.get_content()
21
+ return [Document(page_content=result_content, metadata={'source': str(self.file_path if hasattr(self, 'file_path') else self.file_name)})]
22
+
23
+ def get_content(self):
24
+ try:
25
+ import textract
26
+ content = textract.process(None, extension='doc', input_data=self.file_content if hasattr(self, 'file_content') else file_to_bytes(self.file_path)).decode('utf-8')
27
+ except Exception as e:
28
+ content = f"[Error extracting doc: {str(e)}]"
29
+ return content
@@ -18,6 +18,7 @@ from langchain_community.document_loaders import (
18
18
  UnstructuredPowerPointLoader, PythonLoader)
19
19
 
20
20
  from .AlitaCSVLoader import AlitaCSVLoader
21
+ from .AlitaDocLoader import AlitaDocLoader
21
22
  from .AlitaDocxMammothLoader import AlitaDocxMammothLoader
22
23
  from .AlitaExcelLoader import AlitaExcelLoader
23
24
  from .AlitaImageLoader import AlitaImageLoader
@@ -124,6 +125,11 @@ loaders_map = {
124
125
  'is_multimodal_processing': True,
125
126
  'kwargs': {}
126
127
  },
128
+ '.doc': {
129
+ 'class': AlitaDocLoader,
130
+ 'is_multimodal_processing': True,
131
+ 'kwargs': {}
132
+ },
127
133
  '.json': {
128
134
  'class': AlitaTextLoader,
129
135
  'is_multimodal_processing': False,
@@ -60,4 +60,25 @@ def create_temp_file(file_content: bytes):
60
60
  temp_file.flush() # Ensure data is written
61
61
 
62
62
  # Get the file path for operations
63
- return temp_file.name
63
+ return temp_file.name
64
+
65
+ def file_to_bytes(filepath):
66
+ """
67
+ Reads a file and returns its content as a bytes object.
68
+
69
+ Args:
70
+ filepath (str): The path to the file.
71
+
72
+ Returns:
73
+ bytes: The content of the file as a bytes object.
74
+ """
75
+ try:
76
+ with open(filepath, "rb") as f:
77
+ file_content_bytes = f.read()
78
+ return file_content_bytes
79
+ except FileNotFoundError:
80
+ logger.error(f"File not found: {filepath}")
81
+ return None
82
+ except Exception as e:
83
+ logger.error(f"Error reading file {filepath}: {e}")
84
+ return None
@@ -10,13 +10,12 @@ def get_tools(tool_type, tool):
10
10
  # common
11
11
  "selected_tools": tool['settings'].get('selected_tools', []),
12
12
  "organization_url": tool['settings']['organization_url'],
13
- "project": tool['settings'].get('project', None),
14
- "token": tool['settings'].get('token', None),
13
+ "ado_configuration": tool['settings']['ado_configuration'],
15
14
  "limit": tool['settings'].get('limit', 5),
16
15
  "toolkit_name": tool.get('toolkit_name', ''),
17
16
  # indexer settings
18
17
  "llm": tool['settings'].get('llm', None),
19
- "connection_string": tool['settings'].get('connection_string', None),
18
+ "pgvector_configuration": tool['settings'].get('pgvector_configuration', {}),
20
19
  "collection_name": tool['toolkit_name'],
21
20
  "doctype": 'doc',
22
21
  "embedding_model": "HuggingFaceEmbeddings",
@@ -17,15 +17,12 @@ name = "ado_repos"
17
17
  def _get_toolkit(tool) -> BaseToolkit:
18
18
  return AzureDevOpsReposToolkit().get_toolkit(
19
19
  selected_tools=tool['settings'].get('selected_tools', []),
20
- organization_url=tool['settings'].get('ado_repos_configuration').get('ado_configuration').get('organization_url', ""),
21
- project=tool['settings'].get('ado_repos_configuration').get('ado_configuration').get('project', ""),
22
- token=tool['settings'].get('ado_repos_configuration').get('ado_configuration').get('token', ""),
20
+ ado_repos_configuration=tool['settings']['ado_repos_configuration'],
23
21
  limit=tool['settings'].get('limit', 5),
24
- repository_id=tool['settings'].get('ado_repos_configuration').get('repository_id', ""),
25
22
  base_branch=tool['settings'].get('base_branch', ""),
26
23
  active_branch=tool['settings'].get('active_branch', ""),
27
24
  toolkit_name=tool['settings'].get('toolkit_name', ""),
28
- connection_string=tool['settings'].get('connection_string', None),
25
+ pgvector_configuration=tool['settings'].get('pgvector_configuration', {}),
29
26
  collection_name=tool['toolkit_name'],
30
27
  doctype='code',
31
28
  embedding_model="HuggingFaceEmbeddings",
@@ -49,14 +46,13 @@ class AzureDevOpsReposToolkit(BaseToolkit):
49
46
  AzureDevOpsReposToolkit.toolkit_max_length = get_max_toolkit_length(selected_tools)
50
47
  m = create_model(
51
48
  name,
52
- ado_repos_configuration=(Optional[AdoReposConfiguration], Field(description="Ado Repos configuration", default=None,
49
+ ado_repos_configuration=(AdoReposConfiguration, Field(description="Ado Repos configuration", default=None,
53
50
  json_schema_extra={'configuration_types': ['ado_repos']})),
54
51
  base_branch=(Optional[str], Field(default="", title="Base branch", description="ADO base branch (e.g., main)")),
55
52
  active_branch=(Optional[str], Field(default="", title="Active branch", description="ADO active branch (e.g., main)")),
56
53
 
57
54
  # indexer settings
58
- pgvector_configuration=(Optional[PgVectorConfiguration], Field(description="PgVector configuration", default=None, json_schema_extra={'configuration_types': ['pgvector']})),
59
- json_schema_extra={'secret': True})),
55
+ pgvector_configuration=(Optional[PgVectorConfiguration], Field(description="PgVector Configuration", json_schema_extra={'configuration_types': ['pgvector']})),
60
56
  # embedder settings
61
57
  embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.",
62
58
  default="HuggingFaceEmbeddings")),
@@ -110,8 +106,14 @@ class AzureDevOpsReposToolkit(BaseToolkit):
110
106
  environ["AZURE_DEVOPS_CACHE_DIR"] = "/tmp/.azure-devops"
111
107
  if selected_tools is None:
112
108
  selected_tools = []
113
-
114
- azure_devops_repos_wrapper = ReposApiWrapper(**kwargs)
109
+
110
+ wrapper_payload = {
111
+ **kwargs,
112
+ # TODO use ado_repos_configuration fields
113
+ **kwargs['ado_repos_configuration'],
114
+ **(kwargs.get('pgvector_configuration') or {}),
115
+ }
116
+ azure_devops_repos_wrapper = ReposApiWrapper(**wrapper_payload)
115
117
  available_tools = azure_devops_repos_wrapper.get_available_tools()
116
118
  tools = []
117
119
  prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
@@ -242,6 +242,7 @@ class ArgsSchema(Enum):
242
242
 
243
243
 
244
244
  class ReposApiWrapper(BaseCodeToolApiWrapper):
245
+ # TODO use ado_repos_configuration fields
245
246
  organization_url: Optional[str]
246
247
  project: Optional[str]
247
248
  repository_id: Optional[str]
@@ -1,9 +1,11 @@
1
1
  from typing import List, Optional, Literal
2
2
 
3
3
  from langchain_core.tools import BaseTool, BaseToolkit
4
- from pydantic import create_model, BaseModel, Field, SecretStr
4
+ from pydantic import create_model, BaseModel, Field
5
5
 
6
6
  import requests
7
+ from ....configurations.ado import AdoConfiguration
8
+ from ....configurations.pgvector import PgVectorConfiguration
7
9
  from .test_plan_wrapper import TestPlanApiWrapper
8
10
  from ...base.tool import BaseAction
9
11
  from ...utils import clean_string, TOOLKIT_SPLITTER, get_max_toolkit_length, check_connection_response
@@ -24,19 +26,10 @@ class AzureDevOpsPlansToolkit(BaseToolkit):
24
26
  m = create_model(
25
27
  name_alias,
26
28
  name=(str, Field(description="Toolkit name", json_schema_extra={'toolkit_name': True, 'max_toolkit_length': AzureDevOpsPlansToolkit.toolkit_max_length})),
27
- organization_url=(str, Field(title="Organization URL",
28
- description="ADO organization url",
29
- json_schema_extra={
30
- 'configuration': True,
31
- 'configuration_title': True
32
- })),
33
- project=(str, Field(title="Project", description="ADO project", json_schema_extra={'configuration': True})),
29
+ ado_configuration=(AdoConfiguration, Field(description="Ado configuration", json_schema_extra={'configuration_types': ['ado']})),
34
30
  limit=(Optional[int], Field(description="ADO plans limit used for limitation of the list with results", default=5)),
35
- token=(SecretStr, Field(description="ADO token", json_schema_extra={'secret': True, 'configuration': True})),
36
31
  # indexer settings
37
- connection_string=(Optional[SecretStr], Field(description="Connection string for vectorstore",
38
- default=None,
39
- json_schema_extra={'secret': True})),
32
+ pgvector_configuration=(Optional[PgVectorConfiguration], Field(description="PgVector Configuration", json_schema_extra={'configuration_types': ['pgvector']})),
40
33
  # embedder settings
41
34
  embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.",
42
35
  default="HuggingFaceEmbeddings")),
@@ -75,9 +68,12 @@ class AzureDevOpsPlansToolkit(BaseToolkit):
75
68
 
76
69
  @check_connection_response
77
70
  def check_connection(self):
71
+ ado_config = self.ado_test_plan_configuration.ado_configuration if self.ado_test_plan_configuration else None
72
+ if not ado_config:
73
+ raise ValueError("ADO test plan configuration is required")
78
74
  response = requests.get(
79
- f'{self.organization_url}/{self.project}/_apis/testplan/plans?api-version=7.0',
80
- headers = {'Authorization': f'Bearer {self.token}'},
75
+ f'{ado_config.organization_url}/{ado_config.project}/_apis/testplan/plans?api-version=7.0',
76
+ headers = {'Authorization': f'Bearer {ado_config.token}'},
81
77
  timeout=5
82
78
  )
83
79
  return response
@@ -92,7 +88,13 @@ class AzureDevOpsPlansToolkit(BaseToolkit):
92
88
  environ['AZURE_DEVOPS_CACHE_DIR'] = '/tmp/.azure-devops'
93
89
  if selected_tools is None:
94
90
  selected_tools = []
95
- azure_devops_api_wrapper = TestPlanApiWrapper(**kwargs)
91
+ wrapper_payload = {
92
+ **kwargs,
93
+ # TODO use ado_configuration fields in TestPlanApiWrapper
94
+ **kwargs['ado_configuration'],
95
+ **(kwargs.get('pgvector_configuration') or {}),
96
+ }
97
+ azure_devops_api_wrapper = TestPlanApiWrapper(**wrapper_payload)
96
98
  available_tools = azure_devops_api_wrapper.get_available_tools()
97
99
  tools = []
98
100
  prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
@@ -164,6 +164,7 @@ TestCasesGetModel = create_model(
164
164
  )
165
165
 
166
166
  class TestPlanApiWrapper(BaseVectorStoreToolApiWrapper):
167
+ # TODO use ado_configuration instead of organization_url, project and token
167
168
  __test__ = False
168
169
  organization_url: str
169
170
  project: str
@@ -1,9 +1,11 @@
1
1
  from typing import List, Literal, Optional
2
2
  from .ado_wrapper import AzureDevOpsApiWrapper # Import the API wrapper for Azure DevOps
3
3
  from langchain_core.tools import BaseTool, BaseToolkit
4
- from pydantic import create_model, BaseModel, Field, SecretStr
4
+ from pydantic import create_model, BaseModel, Field
5
5
 
6
6
  import requests
7
+ from ....configurations.ado import AdoConfiguration
8
+ from ....configurations.pgvector import PgVectorConfiguration
7
9
  from ...base.tool import BaseAction
8
10
  from ...utils import clean_string, TOOLKIT_SPLITTER, get_max_toolkit_length, check_connection_response
9
11
 
@@ -25,22 +27,9 @@ class AzureDevOpsWikiToolkit(BaseToolkit):
25
27
  'toolkit_name': True,
26
28
  'max_toolkit_length': AzureDevOpsWikiToolkit.toolkit_max_length})
27
29
  ),
28
- organization_url=(str, Field(title="Organization URL",
29
- description="ADO organization url", json_schema_extra={
30
- 'configuration': True,
31
- })),
32
- project=(str, Field(description="ADO project",
33
- json_schema_extra={
34
- 'configuration': True
35
- })),
36
- token=(SecretStr,
37
- Field(description="ADO token",
38
- json_schema_extra={'secret': True, 'configuration': True }
39
- )),
30
+ ado_configuration=(AdoConfiguration, Field(description="Ado configuration", json_schema_extra={'configuration_types': ['ado']})),
40
31
  # indexer settings
41
- connection_string=(Optional[SecretStr], Field(description="Connection string for vectorstore",
42
- default=None,
43
- json_schema_extra={'secret': True})),
32
+ pgvector_configuration=(Optional[PgVectorConfiguration], Field(description="PgVector Configuration", json_schema_extra={'configuration_types': ['pgvector']})),
44
33
  # embedder settings
45
34
  embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.",
46
35
  default="HuggingFaceEmbeddings")),
@@ -53,7 +42,7 @@ class AzureDevOpsWikiToolkit(BaseToolkit):
53
42
  'json_schema_extra': {
54
43
  'metadata': {
55
44
  "label": "ADO wiki",
56
- "icon_url": None,
45
+ "icon_url": "ado-wiki-icon.svg",
57
46
  "categories": ["documentation"],
58
47
  "extra_categories": ["knowledge base", "documentation management", "wiki"],
59
48
  "sections": {
@@ -77,9 +66,12 @@ class AzureDevOpsWikiToolkit(BaseToolkit):
77
66
 
78
67
  @check_connection_response
79
68
  def check_connection(self):
69
+ ado_config = self.ado_wiki_configuration.ado_configuration if self.ado_wiki_configuration else None
70
+ if not ado_config:
71
+ raise ValueError("ADO wiki configuration is required")
80
72
  response = requests.get(
81
- f'{self.organization_url}/{self.project}/_apis/wiki/wikis?api-version=7.0',
82
- headers={'Authorization': f'Bearer {self.token}'},
73
+ f'{ado_config.organization_url}/{ado_config.project}/_apis/wiki/wikis?api-version=7.0',
74
+ headers={'Authorization': f'Bearer {ado_config.token}'},
83
75
  timeout=5
84
76
  )
85
77
  return response
@@ -94,7 +86,13 @@ class AzureDevOpsWikiToolkit(BaseToolkit):
94
86
  environ['AZURE_DEVOPS_CACHE_DIR'] = '/tmp/.azure-devops'
95
87
  if selected_tools is None:
96
88
  selected_tools = []
97
- azure_devops_api_wrapper = AzureDevOpsApiWrapper(**kwargs)
89
+ wrapper_payload = {
90
+ **kwargs,
91
+ # TODO use ado_configuration fields in AzureDevOpsApiWrapper
92
+ **kwargs['ado_configuration'],
93
+ **(kwargs.get('pgvector_configuration') or {}),
94
+ }
95
+ azure_devops_api_wrapper = AzureDevOpsApiWrapper(**wrapper_payload)
98
96
  available_tools = azure_devops_api_wrapper.get_available_tools()
99
97
  tools = []
100
98
  prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
@@ -61,6 +61,7 @@ RenamePageInput = create_model(
61
61
 
62
62
 
63
63
  class AzureDevOpsApiWrapper(BaseVectorStoreToolApiWrapper):
64
+ # TODO use ado_configuration instead of organization_url, project and token
64
65
  organization_url: str
65
66
  project: str
66
67
  token: SecretStr
@@ -1,9 +1,11 @@
1
1
  from typing import List, Optional, Literal
2
2
  from .ado_wrapper import AzureDevOpsApiWrapper # Import the API wrapper for Azure DevOps
3
3
  from langchain_core.tools import BaseTool, BaseToolkit
4
- from pydantic import create_model, BaseModel, Field, SecretStr
4
+ from pydantic import create_model, BaseModel, Field
5
5
 
6
6
  import requests
7
+ from ....configurations.ado import AdoConfiguration
8
+ from ....configurations.pgvector import PgVectorConfiguration
7
9
  from ...base.tool import BaseAction
8
10
  from ...utils import clean_string, TOOLKIT_SPLITTER, get_max_toolkit_length, check_connection_response
9
11
 
@@ -24,23 +26,11 @@ class AzureDevOpsWorkItemsToolkit(BaseToolkit):
24
26
  'toolkit_name': True,
25
27
  'max_toolkit_length': AzureDevOpsWorkItemsToolkit.toolkit_max_length})
26
28
  ),
27
- organization_url=(str, Field(title="Organization URL",
28
- description="ADO organization url",
29
- json_schema_extra={
30
- 'configuration': True
31
- })),
32
- project=(str, Field(description="ADO project",
33
- json_schema_extra={
34
- 'configuration': True
35
- }
36
- )),
37
- token=(SecretStr, Field(description="ADO token", json_schema_extra={'secret': True, 'configuration': True})),
29
+ ado_configuration=(AdoConfiguration, Field(description="Ado Work Item configuration", json_schema_extra={'configuration_types': ['ado_work_item']})),
38
30
  limit=(Optional[int], Field(description="ADO plans limit used for limitation of the list with results", default=5)),
39
31
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
40
32
  # indexer settings
41
- connection_string = (Optional[SecretStr], Field(description="Connection string for vectorstore",
42
- default=None,
43
- json_schema_extra={'secret': True})),
33
+ pgvector_configuration=(Optional[PgVectorConfiguration], Field(description="PgVector Configuration", json_schema_extra={'configuration_types': ['pgvector']})),
44
34
  # embedder settings
45
35
  embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.",
46
36
  default="HuggingFaceEmbeddings")),
@@ -51,7 +41,7 @@ class AzureDevOpsWorkItemsToolkit(BaseToolkit):
51
41
  'json_schema_extra': {
52
42
  'metadata': {
53
43
  "label": "ADO boards",
54
- "icon_url": None,
44
+ "icon_url": "ado-boards-icon.svg",
55
45
  "categories": ["project management"],
56
46
  "extra_categories": ["work item management", "issue tracking", "agile boards"],
57
47
  "sections": {
@@ -75,9 +65,12 @@ class AzureDevOpsWorkItemsToolkit(BaseToolkit):
75
65
 
76
66
  @check_connection_response
77
67
  def check_connection(self):
68
+ ado_config = self.ado_work_item_configuration.ado_configuration if self.ado_work_item_configuration else None
69
+ if not ado_config:
70
+ raise ValueError("ADO work item configuration is required")
78
71
  response = requests.get(
79
- f'{self.organization_url}/{self.project}/_apis/wit/workitemtypes?api-version=7.0',
80
- headers={'Authorization': f'Bearer {self.token}'},
72
+ f'{ado_config.organization_url}/{ado_config.project}/_apis/wit/workitemtypes?api-version=7.0',
73
+ headers={'Authorization': f'Bearer {ado_config.token}'},
81
74
  timeout=5
82
75
  )
83
76
  return response
@@ -93,7 +86,13 @@ class AzureDevOpsWorkItemsToolkit(BaseToolkit):
93
86
  if selected_tools is None:
94
87
  selected_tools = []
95
88
 
96
- azure_devops_api_wrapper = AzureDevOpsApiWrapper(**kwargs)
89
+ wrapper_payload = {
90
+ **kwargs,
91
+ # TODO use ado_configuration fields in AzureDevOpsApiWrapper
92
+ **kwargs['ado_configuration'],
93
+ **(kwargs.get('pgvector_configuration') or {}),
94
+ }
95
+ azure_devops_api_wrapper = AzureDevOpsApiWrapper(**wrapper_payload)
97
96
  available_tools = azure_devops_api_wrapper.get_available_tools()
98
97
  tools = []
99
98
  prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
@@ -95,6 +95,7 @@ ADOUnlinkWorkItemsFromWikiPage = create_model(
95
95
  )
96
96
 
97
97
  class AzureDevOpsApiWrapper(BaseVectorStoreToolApiWrapper):
98
+ # TODO use ado_configuration instead of organization_url, project and token
98
99
  organization_url: str
99
100
  project: str
100
101
  token: SecretStr
@@ -15,10 +15,8 @@ name = "azure_search"
15
15
  def get_tools(tool):
16
16
  return AzureSearchToolkit().get_toolkit(
17
17
  selected_tools=tool['settings'].get('selected_tools', []),
18
- api_key=tool['settings'].get('azure_search_configuration', {}).get('api_key', None),
19
- endpoint=tool['settings'].get('azure_search_configuration', {}).get('endpoint', None),
18
+ azure_search_configuration=tool['settings']['azure_search_configuration'],
20
19
  index_name=tool['settings'].get('index_name', None),
21
- api_base=tool['settings'].get('azure_search_configuration', {}).get('api_base', None),
22
20
  api_version=tool['settings'].get('api_version', None),
23
21
  openai_api_key=tool['settings'].get('access_token', None),
24
22
  model_name=tool['settings'].get('model_name', None),
@@ -71,7 +69,12 @@ class AzureSearchToolkit(BaseToolkit):
71
69
  def get_toolkit(cls, selected_tools: list[str] | None = None, toolkit_name: Optional[str] = None, **kwargs):
72
70
  if selected_tools is None:
73
71
  selected_tools = []
74
- azure_search_api_wrapper = AzureSearchApiWrapper(**kwargs)
72
+ wrapper_payload = {
73
+ **kwargs,
74
+ # TODO use azure_search_configuration fields
75
+ **kwargs['azure_search_configuration'],
76
+ }
77
+ azure_search_api_wrapper = AzureSearchApiWrapper(**wrapper_payload)
75
78
  available_tools = azure_search_api_wrapper.get_available_tools()
76
79
  prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
77
80
  tools = []
@@ -22,13 +22,12 @@ def get_tools(tool):
22
22
  url=tool['settings']['url'],
23
23
  project=tool['settings']['project'],
24
24
  repository=tool['settings']['repository'],
25
- username=tool['settings'].get('bitbucket_configuration', {}).get('username', ''),
26
- password=tool['settings'].get('bitbucket_configuration', {}).get('password', ''),
25
+ bitbucket_configuration=tool['settings']['bitbucket_configuration'],
27
26
  branch=tool['settings']['branch'],
28
27
  cloud=tool['settings'].get('cloud'),
29
28
  llm=tool['settings'].get('llm', None),
30
29
  alita=tool['settings'].get('alita', None),
31
- connection_string=tool['settings'].get('pgvector_configuration', {}).get('connection_string', None),
30
+ pgvector_configuration=tool['settings'].get('pgvector_configuration', {}),
32
31
  collection_name=str(tool['toolkit_name']),
33
32
  doctype='code',
34
33
  embedding_model="HuggingFaceEmbeddings",
@@ -91,7 +90,13 @@ class AlitaBitbucketToolkit(BaseToolkit):
91
90
  selected_tools = []
92
91
  if kwargs["cloud"] is None:
93
92
  kwargs["cloud"] = True if "bitbucket.org" in kwargs.get('url') else False
94
- bitbucket_api_wrapper = BitbucketAPIWrapper(**kwargs)
93
+ wrapper_payload = {
94
+ **kwargs,
95
+ # TODO use bitbucket_configuration fields
96
+ **kwargs['bitbucket_configuration'],
97
+ **(kwargs.get('pgvector_configuration') or {}),
98
+ }
99
+ bitbucket_api_wrapper = BitbucketAPIWrapper(**wrapper_payload)
95
100
  available_tools: List[Dict] = __all__
96
101
  prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
97
102
  tools = []
@@ -17,9 +17,7 @@ def get_tools(tool):
17
17
  base_url=tool['settings']['base_url'],
18
18
  space=tool['settings'].get('space', None),
19
19
  cloud=tool['settings'].get('cloud', True),
20
- api_key=tool['settings'].get('confluence_configuration', {}).get('api_key', None),
21
- username=tool['settings'].get('confluence_configuration', {}).get('username', None),
22
- token=tool['settings'].get('confluence_configuration', {}).get('token', None),
20
+ confluence_configuration=tool['settings']['confluence_configuration'],
23
21
  limit=tool['settings'].get('limit', 5),
24
22
  labels=parse_list(tool['settings'].get('labels', None)),
25
23
  additional_fields=tool['settings'].get('additional_fields', []),
@@ -28,7 +26,7 @@ def get_tools(tool):
28
26
  llm=tool['settings'].get('llm', None),
29
27
  toolkit_name=tool.get('toolkit_name'),
30
28
  # indexer settings
31
- connection_string = tool['settings'].get('pgvector_configuration', {}).get('connection_string', None),
29
+ pgvector_configuration=tool['settings'].get('pgvector_configuration', {}),
32
30
  collection_name=str(tool['toolkit_name']),
33
31
  doctype='doc',
34
32
  embedding_model="HuggingFaceEmbeddings",
@@ -120,7 +118,13 @@ class ConfluenceToolkit(BaseToolkit):
120
118
  def get_toolkit(cls, selected_tools: list[str] | None = None, toolkit_name: Optional[str] = None, **kwargs):
121
119
  if selected_tools is None:
122
120
  selected_tools = []
123
- confluence_api_wrapper = ConfluenceAPIWrapper(**kwargs)
121
+ wrapper_payload = {
122
+ **kwargs,
123
+ # TODO use confluence_configuration fields
124
+ **kwargs['confluence_configuration'],
125
+ **(kwargs.get('pgvector_configuration') or {}),
126
+ }
127
+ confluence_api_wrapper = ConfluenceAPIWrapper(**wrapper_payload)
124
128
  prefix = clean_string(toolkit_name, ConfluenceToolkit.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
125
129
  available_tools = confluence_api_wrapper.get_available_tools()
126
130
  tools = []
@@ -6,6 +6,7 @@ from pydantic import BaseModel, ConfigDict, Field, create_model, SecretStr
6
6
  from ..base.tool import BaseAction
7
7
  from .api_wrapper import FigmaApiWrapper, GLOBAL_LIMIT
8
8
  from ..utils import clean_string, TOOLKIT_SPLITTER, get_max_toolkit_length
9
+ from ...configurations.pgvector import PgVectorConfiguration
9
10
 
10
11
  name = "figma"
11
12
 
@@ -21,7 +22,7 @@ def get_tools(tool):
21
22
  toolkit_name=tool.get('toolkit_name'),
22
23
  # indexer settings
23
24
  llm=tool['settings'].get('llm', None),
24
- connection_string = tool['settings'].get('connection_string', None),
25
+ pgvector_configuration=tool['settings'].get('pgvector_configuration', {}),
25
26
  collection_name=str(tool['toolkit_name']),
26
27
  doctype='doc',
27
28
  embedding_model="HuggingFaceEmbeddings",
@@ -54,9 +55,7 @@ class FigmaToolkit(BaseToolkit):
54
55
  Field(default=[], json_schema_extra={"args_schemas": selected_tools}),
55
56
  ),
56
57
  # indexer settings
57
- connection_string = (Optional[SecretStr], Field(description="Connection string for vectorstore",
58
- default=None,
59
- json_schema_extra={'secret': True})),
58
+ pgvector_configuration=(Optional[PgVectorConfiguration], Field(description="PgVector Configuration", json_schema_extra={'configuration_types': ['pgvector']})),
60
59
 
61
60
  # embedder settings
62
61
  embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
@@ -93,7 +92,11 @@ class FigmaToolkit(BaseToolkit):
93
92
  def get_toolkit(cls, selected_tools: list[str] | None = None, toolkit_name: Optional[str] = None, **kwargs):
94
93
  if selected_tools is None:
95
94
  selected_tools = []
96
- figma_api_wrapper = FigmaApiWrapper(**kwargs)
95
+ wrapper_payload = {
96
+ **kwargs,
97
+ **(kwargs.get('pgvector_configuration') or {}),
98
+ }
99
+ figma_api_wrapper = FigmaApiWrapper(**wrapper_payload)
97
100
  prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
98
101
  available_tools = figma_api_wrapper.get_available_tools()
99
102
  tools = []
@@ -4,7 +4,7 @@ import json
4
4
  import logging
5
5
  import re
6
6
  from enum import Enum
7
- from typing import Dict, Generator, Optional, Union
7
+ from typing import Dict, List, Generator, Optional, Union
8
8
 
9
9
  import requests
10
10
  from FigmaPy import FigmaPy
@@ -13,6 +13,7 @@ from langchain_core.tools import ToolException
13
13
  from pydantic import Field, PrivateAttr, create_model, model_validator, SecretStr
14
14
 
15
15
  from ..elitea_base import BaseVectorStoreToolApiWrapper, extend_with_vector_tools
16
+ from ..utils.content_parser import load_content_from_bytes
16
17
 
17
18
  GLOBAL_LIMIT = 10000
18
19
 
@@ -235,15 +236,27 @@ class FigmaApiWrapper(BaseVectorStoreToolApiWrapper):
235
236
  global_regexp: Optional[str] = Field(default=None)
236
237
  _client: Optional[FigmaPy] = PrivateAttr()
237
238
 
238
- def _base_loader(self, project_id: str, **kwargs) -> Generator[Document, None, None]:
239
- files = json.loads(self.get_project_files(project_id)).get('files', [])
240
- for file in files:
241
- yield Document(page_content=json.dumps(file), metadata={
242
- 'id': file.get('key', ''),
243
- 'file_key': file.get('key', ''),
244
- 'name': file.get('name', ''),
245
- 'updated_on': file.get('last_modified', '')
246
- })
239
+ def _base_loader(self, project_id: Optional[str] = None, file_keys: Optional[List[str]] = None, **kwargs) -> Generator[Document, None, None]:
240
+ files = []
241
+ if project_id:
242
+ files = json.loads(self.get_project_files(project_id)).get('files', [])
243
+ for file in files:
244
+ yield Document(page_content=json.dumps(file), metadata={
245
+ 'id': file.get('key', ''),
246
+ 'file_key': file.get('key', ''),
247
+ 'name': file.get('name', ''),
248
+ 'updated_on': file.get('last_modified', '')
249
+ })
250
+ elif file_keys:
251
+ for file_key in file_keys:
252
+ file = self._client.get_file(file_key)
253
+ metadata = {
254
+ 'id': file_key,
255
+ 'file_key': file_key,
256
+ 'name': file.name,
257
+ 'updated_on': file.last_modified
258
+ }
259
+ yield Document(page_content=json.dumps(metadata), metadata=metadata)
247
260
 
248
261
  def _process_document(self, document: Document) -> Generator[Document, None, None]:
249
262
  file_key = document.metadata.get('id', '')
@@ -257,12 +270,19 @@ class FigmaApiWrapper(BaseVectorStoreToolApiWrapper):
257
270
 
258
271
  # iterate over images values
259
272
  for node_id, image_url in images.items():
273
+ if not image_url:
274
+ logging.warning(f"Image URL not found for node_id {node_id} in file {file_key}. Skipping.")
275
+ continue
260
276
  response = requests.get(image_url)
261
277
  if response.status_code == 200:
262
278
  content_type = response.headers.get('Content-Type', '')
263
279
  if 'text/html' not in content_type.lower():
280
+ extension = f".{content_type.split('/')[-1]}" if content_type.startswith('image') else '.txt'
281
+ page_content = load_content_from_bytes(
282
+ file_content=response.content,
283
+ extension=extension, llm = self.llm)
264
284
  yield Document(
265
- page_content=base64.b64encode(response.content).decode("utf-8"),
285
+ page_content=page_content,
266
286
  metadata={
267
287
  'file_key': file_key,
268
288
  'node_id': node_id,
@@ -273,7 +293,12 @@ class FigmaApiWrapper(BaseVectorStoreToolApiWrapper):
273
293
  def _index_tool_params(self):
274
294
  """Return the parameters for indexing data."""
275
295
  return {
276
- "project_id": (str, Field(description="ID of the project to list files from", examples=["55391681"]))
296
+ "project_id": (Optional[str], Field(
297
+ description="ID of the project to list files from: i.e. '55391681'",
298
+ default=None)),
299
+ 'file_keys': (Optional[List[str]], Field(
300
+ description="List of file keys to index: i.e. ['Fp24FuzPwH0L74ODSrCnQo', 'jmhAr6q78dJoMRqt48zisY']",
301
+ default=None))
277
302
  }
278
303
 
279
304
  def _send_request(
@@ -19,14 +19,10 @@ def _get_toolkit(tool) -> BaseToolkit:
19
19
  github_repository=tool['settings']['repository'],
20
20
  active_branch=tool['settings']['active_branch'],
21
21
  github_base_branch=tool['settings']['base_branch'],
22
- github_access_token=tool['settings'].get('github_configuration', {}).get('access_token', ''),
23
- github_username=tool['settings'].get('github_configuration', {}).get('username', ''),
24
- github_password=tool['settings'].get('github_configuration', {}).get('password', ''),
25
- github_app_id=tool['settings'].get('github_configuration', {}).get('app_id', None),
26
- github_app_private_key=tool['settings'].get('github_configuration', {}).get('app_private_key', None),
22
+ github_configuration=tool['settings']['github_configuration'],
27
23
  llm=tool['settings'].get('llm', None),
28
24
  alita=tool['settings'].get('alita', None),
29
- connection_string=tool['settings'].get('pgvector_configuration', {}).get('connection_string', None),
25
+ pgvector_configuration=tool['settings'].get('pgvector_configuration', {}),
30
26
  collection_name=str(tool['toolkit_name']),
31
27
  doctype='code',
32
28
  embedding_model="HuggingFaceEmbeddings",
@@ -71,9 +67,6 @@ class AlitaGitHubToolkit(BaseToolkit):
71
67
  active_branch=(Optional[str], Field(description="Active branch", default="main")),
72
68
  base_branch=(Optional[str], Field(description="Github Base branch", default="main")),
73
69
  # indexer settings
74
- connection_string=(Optional[SecretStr], Field(description="Connection string for vectorstore",
75
- default=None,
76
- json_schema_extra={'secret': True})),
77
70
  embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
78
71
  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"})),
79
72
  selected_tools=(List[Literal[tuple(selected_tools)]],
@@ -84,7 +77,13 @@ class AlitaGitHubToolkit(BaseToolkit):
84
77
  def get_toolkit(cls, selected_tools: list[str] | None = None, toolkit_name: Optional[str] = None, **kwargs):
85
78
  if selected_tools is None:
86
79
  selected_tools = []
87
- github_api_wrapper = AlitaGitHubAPIWrapper(**kwargs)
80
+ wrapper_payload = {
81
+ **kwargs,
82
+ # TODO use github_configuration fields
83
+ **kwargs['github_configuration'],
84
+ **(kwargs.get('pgvector_configuration') or {}),
85
+ }
86
+ github_api_wrapper = AlitaGitHubAPIWrapper(**wrapper_payload)
88
87
  available_tools: List[Dict] = github_api_wrapper.get_available_tools()
89
88
  tools = []
90
89
  prefix = clean_string(toolkit_name, AlitaGitHubToolkit.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
@@ -20,11 +20,11 @@ def get_tools(tool):
20
20
  url=tool['settings']['url'],
21
21
  repository=tool['settings']['repository'],
22
22
  branch=tool['settings']['branch'],
23
- private_token=tool['settings'].get('gitlab_configuration', {}).get('private_token', ''),
23
+ gitlab_configuration=tool['settings']['gitlab_configuration'],
24
24
 
25
25
  llm=tool['settings'].get('llm', None),
26
26
  alita=tool['settings'].get('alita', None),
27
- connection_string=tool['settings'].get('pgvector_configuration', {}).get('connection_string', None),
27
+ pgvector_configuration=tool['settings'].get('pgvector_configuration', {}),
28
28
  collection_name=str(tool['toolkit_name']),
29
29
  doctype='code',
30
30
  embedding_model="HuggingFaceEmbeddings",
@@ -49,8 +49,7 @@ class AlitaGitlabToolkit(BaseToolkit):
49
49
  gitlab_configuration=(Optional[GitlabConfiguration], Field(description="GitLab configuration", json_schema_extra={'configuration_types': ['gitlab']})),
50
50
  branch=(str, Field(description="Main branch", default="main")),
51
51
  # indexer settings
52
- pgvector_configuration=(Optional[PgVectorConfiguration], Field(description="PgVector configuration", default=None,
53
- json_schema_extra={'configuration_types': ['pgvector']})),
52
+ pgvector_configuration=(Optional[PgVectorConfiguration], Field(description="PgVector Configuration", json_schema_extra={'configuration_types': ['pgvector']})),
54
53
  # embedder settings
55
54
  embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
56
55
  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"})),
@@ -80,7 +79,13 @@ class AlitaGitlabToolkit(BaseToolkit):
80
79
  def get_toolkit(cls, selected_tools: list[str] | None = None, toolkit_name: Optional[str] = None, **kwargs):
81
80
  if selected_tools is None:
82
81
  selected_tools = []
83
- gitlab_api_wrapper = GitLabAPIWrapper(**kwargs)
82
+ wrapper_payload = {
83
+ **kwargs,
84
+ # TODO use gitlab_configuration fields
85
+ **kwargs['gitlab_configuration'],
86
+ **(kwargs.get('pgvector_configuration') or {}),
87
+ }
88
+ gitlab_api_wrapper = GitLabAPIWrapper(**wrapper_payload)
84
89
  prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
85
90
  available_tools: List[Dict] = gitlab_api_wrapper.get_available_tools()
86
91
  tools = []
@@ -64,7 +64,7 @@ class BigQueryToolkitConfig(BaseModel):
64
64
  def _get_toolkit(tool) -> BaseToolkit:
65
65
  return BigQueryToolkit().get_toolkit(
66
66
  selected_tools=tool["settings"].get("selected_tools", []),
67
- api_key=tool["settings"].get('bigquery_configuration').get("api_key", ""),
67
+ bigquery_configuration=tool["settings"]["bigquery_configuration"],
68
68
  toolkit_name=tool.get("toolkit_name"),
69
69
  )
70
70
 
@@ -109,7 +109,12 @@ class BigQueryToolkit(BaseToolkit):
109
109
  toolkit_name: Optional[str] = None,
110
110
  **kwargs,
111
111
  ) -> "BigQueryToolkit":
112
- bigquery_api_wrapper = BigQueryApiWrapper(**kwargs)
112
+ wrapper_payload = {
113
+ **kwargs,
114
+ # TODO use bigquery_configuration fields
115
+ **kwargs['bigquery_configuration'],
116
+ }
117
+ bigquery_api_wrapper = BigQueryApiWrapper(**wrapper_payload)
113
118
  instance = cls(
114
119
  tools=[], api_wrapper=bigquery_api_wrapper, toolkit_name=toolkit_name
115
120
  )
@@ -16,9 +16,7 @@ def get_tools(tool):
16
16
  selected_tools=tool['settings'].get('selected_tools', []),
17
17
  base_url=tool['settings'].get('base_url'),
18
18
  cloud=tool['settings'].get('cloud', True),
19
- api_key=tool['settings'].get('jira_configuration', {}).get('api_key', None),
20
- username=tool['settings'].get('jira_configuration', {}).get('username', None),
21
- token=tool['settings'].get('jira_configuration', {}).get('token', None),
19
+ jira_configuration=tool['settings']['jira_configuration'],
22
20
  limit=tool['settings'].get('limit', 5),
23
21
  labels=parse_list(tool['settings'].get('labels', [])),
24
22
  additional_fields=tool['settings'].get('additional_fields', []),
@@ -26,7 +24,7 @@ def get_tools(tool):
26
24
  # indexer settings
27
25
  llm=tool['settings'].get('llm', None),
28
26
  alita=tool['settings'].get('alita', None),
29
- connection_string=tool['settings'].get('pgvector_configuration', {}).get('connection_string', None),
27
+ pgvector_configuration=tool['settings'].get('pgvector_configuration', {}),
30
28
  collection_name=str(tool['toolkit_name']),
31
29
  embedding_model="HuggingFaceEmbeddings",
32
30
  embedding_model_params={"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
@@ -123,7 +121,13 @@ class JiraToolkit(BaseToolkit):
123
121
  def get_toolkit(cls, selected_tools: list[str] | None = None, toolkit_name: Optional[str] = None, **kwargs):
124
122
  if selected_tools is None:
125
123
  selected_tools = []
126
- jira_api_wrapper = JiraApiWrapper(**kwargs)
124
+ wrapper_payload = {
125
+ **kwargs,
126
+ # TODO use jira_configuration fields
127
+ **kwargs['jira_configuration'],
128
+ **(kwargs.get('pgvector_configuration') or {}),
129
+ }
130
+ jira_api_wrapper = JiraApiWrapper(**wrapper_payload)
127
131
  prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
128
132
  available_tools = jira_api_wrapper.get_available_tools()
129
133
  tools = []
@@ -30,7 +30,7 @@ def get_tools(tool):
30
30
  environment_config = tool['settings'].get('environment_config', {})
31
31
  toolkit = PostmanToolkit.get_toolkit(
32
32
  selected_tools=tool['settings'].get('selected_tools', []),
33
- api_key=tool['settings'].get('postman_configuration', {}).get('api_key', None),
33
+ postman_configuration=tool['settings']['postman_configuration'],
34
34
  base_url=tool['settings'].get(
35
35
  'base_url', 'https://api.getpostman.com'),
36
36
  collection_id=tool['settings'].get('collection_id', None),
@@ -91,7 +91,12 @@ class PostmanToolkit(BaseToolkit):
91
91
  def get_toolkit(cls, selected_tools: list[str] | None = None, toolkit_name: Optional[str] = None, **kwargs):
92
92
  if selected_tools is None:
93
93
  selected_tools = []
94
- postman_api_wrapper = PostmanApiWrapper(**kwargs)
94
+ wrapper_payload = {
95
+ **kwargs,
96
+ # TODO use postman_configuration fields
97
+ **kwargs['postman_configuration'],
98
+ }
99
+ postman_api_wrapper = PostmanApiWrapper(**wrapper_payload)
95
100
  prefix = clean_string(str(toolkit_name), cls.toolkit_max_length) + \
96
101
  TOOLKIT_SPLITTER if toolkit_name else ''
97
102
  available_tools = postman_api_wrapper.get_available_tools()
@@ -17,7 +17,7 @@ def get_tools(tool):
17
17
  selected_tools=tool['settings'].get('selected_tools', []),
18
18
  base_url=tool['settings'].get('base_url', None),
19
19
  qtest_project_id=tool['settings'].get('qtest_project_id', tool['settings'].get('project_id', None)),
20
- qtest_api_token=tool['settings'].get('qtest_configuration', {}).get('qtest_api_token', None),
20
+ qtest_configuration=tool['settings']['qtest_configuration'],
21
21
  toolkit_name=tool.get('toolkit_name')
22
22
  )
23
23
  return toolkit.tools
@@ -60,7 +60,12 @@ class QtestToolkit(BaseToolkit):
60
60
  def get_toolkit(cls, selected_tools: list[str] | None = None, toolkit_name: Optional[str] = None, **kwargs):
61
61
  if selected_tools is None:
62
62
  selected_tools = []
63
- qtest_api_wrapper = QtestApiWrapper(**kwargs)
63
+ wrapper_payload = {
64
+ **kwargs,
65
+ # TODO use qtest_configuration fields
66
+ **kwargs['qtest_configuration'],
67
+ }
68
+ qtest_api_wrapper = QtestApiWrapper(**wrapper_payload)
64
69
  prefix = clean_string(str(toolkit_name), cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
65
70
  available_tools = qtest_api_wrapper.get_available_tools()
66
71
  tools = []
@@ -16,8 +16,7 @@ def get_tools(tool):
16
16
  selected_tools=tool['settings'].get('selected_tools', []),
17
17
  instance_alias=tool['settings'].get('instance_alias', None),
18
18
  base_url=tool['settings']['base_url'],
19
- password=tool['settings'].get('servicenow_configuration', {}).get('password', None),
20
- username=tool['settings'].get('servicenow_configuration', {}).get('username', None),
19
+ servicenow_configuration=tool['settings']['servicenow_configuration'],
21
20
  response_fields=tool['settings'].get('response_fields', None),
22
21
  toolkit_name=tool.get('toolkit_name')
23
22
  ).get_tools()
@@ -72,7 +71,12 @@ class ServiceNowToolkit(BaseToolkit):
72
71
  selected_tools = []
73
72
  if 'response_fields' in kwargs and isinstance(kwargs['response_fields'], str):
74
73
  kwargs['fields'] = [field.strip().lower() for field in kwargs['response_fields'].split(',') if field.strip()]
75
- servicenow_api_wrapper = ServiceNowAPIWrapper(**kwargs)
74
+ wrapper_payload = {
75
+ **kwargs,
76
+ # TODO use servicenow_configuration fields
77
+ **kwargs['servicenow_configuration'],
78
+ }
79
+ servicenow_api_wrapper = ServiceNowAPIWrapper(**wrapper_payload)
76
80
  prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
77
81
  available_tools = servicenow_api_wrapper.get_available_tools()
78
82
  tools = []
@@ -5,6 +5,7 @@ from pydantic import create_model, BaseModel, ConfigDict, Field, SecretStr
5
5
  from .api_wrapper import SharepointApiWrapper
6
6
  from ..base.tool import BaseAction
7
7
  from ..utils import clean_string, TOOLKIT_SPLITTER, get_max_toolkit_length
8
+ from ...configurations.pgvector import PgVectorConfiguration
8
9
 
9
10
  name = "sharepoint"
10
11
 
@@ -17,7 +18,7 @@ def get_tools(tool):
17
18
  toolkit_name=tool.get('toolkit_name'),
18
19
  llm=tool['settings'].get('llm'),
19
20
  # indexer settings
20
- connection_string=tool['settings'].get('connection_string', None),
21
+ pgvector_configuration=tool['settings'].get('pgvector_configuration', {}),
21
22
  collection_name=str(tool['toolkit_name']),
22
23
  embedding_model="HuggingFaceEmbeddings",
23
24
  embedding_model_params={"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
@@ -40,9 +41,7 @@ class SharepointToolkit(BaseToolkit):
40
41
  client_secret=(SecretStr, Field(description="Client Secret", json_schema_extra={'secret': True})),
41
42
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
42
43
  # indexer settings
43
- connection_string = (Optional[SecretStr], Field(description="Connection string for vectorstore",
44
- default=None,
45
- json_schema_extra={'secret': True})),
44
+ pgvector_configuration=(Optional[PgVectorConfiguration], Field(description="PgVector Configuration", json_schema_extra={'configuration_types': ['pgvector']})),
46
45
 
47
46
  # embedder settings
48
47
  embedding_model=(str, Field(description="Embedding model: i.e. 'HuggingFaceEmbeddings', etc.", default="HuggingFaceEmbeddings")),
@@ -59,7 +58,11 @@ class SharepointToolkit(BaseToolkit):
59
58
  def get_toolkit(cls, selected_tools: list[str] | None = None, toolkit_name: Optional[str] = None, **kwargs):
60
59
  if selected_tools is None:
61
60
  selected_tools = []
62
- sharepoint_api_wrapper = SharepointApiWrapper(**kwargs)
61
+ wrapper_payload = {
62
+ **kwargs,
63
+ **(kwargs.get('pgvector_configuration') or {}),
64
+ }
65
+ sharepoint_api_wrapper = SharepointApiWrapper(**wrapper_payload)
63
66
  prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
64
67
  available_tools = sharepoint_api_wrapper.get_available_tools()
65
68
  tools = []
@@ -20,7 +20,7 @@ name = "slack"
20
20
  def get_tools(tool):
21
21
  return SlackToolkit().get_toolkit(
22
22
  selected_tools=tool['settings'].get('selected_tools', []),
23
- slack_token=tool['settings'].get('slack_configuration', {}).get('slack_token', None),
23
+ slack_configuration=tool['settings']['slack_configuration'],
24
24
  channel_id=tool['settings'].get('channel_id'),
25
25
  toolkit_name=tool.get('toolkit_name')
26
26
  ).get_tools()
@@ -64,7 +64,12 @@ class SlackToolkit(BaseToolkit):
64
64
  def get_toolkit(cls, selected_tools: Optional[List[str]] = None, toolkit_name: Optional[str] = None, **kwargs):
65
65
  if selected_tools is None:
66
66
  selected_tools = []
67
- slack_api_wrapper = SlackApiWrapper(**kwargs)
67
+ wrapper_payload = {
68
+ **kwargs,
69
+ # TODO use slack_configuration fields
70
+ **kwargs['slack_configuration'],
71
+ }
72
+ slack_api_wrapper = SlackApiWrapper(**wrapper_payload)
68
73
  prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
69
74
  available_tools = slack_api_wrapper.get_available_tools()
70
75
  tools = []
@@ -81,4 +86,3 @@ class SlackToolkit(BaseToolkit):
81
86
 
82
87
  def get_tools(self) -> List[BaseTool]:
83
88
  return self.tools
84
-
@@ -16,13 +16,12 @@ def get_tools(tool):
16
16
  return TestrailToolkit().get_toolkit(
17
17
  selected_tools=tool['settings'].get('selected_tools', []),
18
18
  url=tool['settings']['url'],
19
- password=tool['settings'].get('testrail_configuration', {}).get('api_key', None),
20
- email=tool['settings'].get('testrail_configuration', {}).get('username', None),
19
+ testrail_configuration=tool['settings']['testrail_configuration'],
21
20
  toolkit_name=tool.get('toolkit_name'),
22
21
  llm=tool['settings'].get('llm', None),
23
22
 
24
23
  # indexer settings
25
- connection_string=tool['settings'].get('pgvector_configuration', {}).get('connection_string', None),
24
+ pgvector_configuration=tool['settings'].get('pgvector_configuration', {}),
26
25
  collection_name=f"{tool.get('toolkit_name')}",
27
26
  embedding_model="HuggingFaceEmbeddings",
28
27
  embedding_model_params={"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
@@ -80,7 +79,13 @@ class TestrailToolkit(BaseToolkit):
80
79
  def get_toolkit(cls, selected_tools: list[str] | None = None, toolkit_name: Optional[str] = None, **kwargs):
81
80
  if selected_tools is None:
82
81
  selected_tools = []
83
- testrail_api_wrapper = TestrailAPIWrapper(**kwargs)
82
+ wrapper_payload = {
83
+ **kwargs,
84
+ # TODO use testrail_configuration fields
85
+ **kwargs['testrail_configuration'],
86
+ **(kwargs.get('pgvector_configuration') or {}),
87
+ }
88
+ testrail_api_wrapper = TestrailAPIWrapper(**wrapper_payload)
84
89
  prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
85
90
  available_tools = testrail_api_wrapper.get_available_tools()
86
91
  tools = []
@@ -1,11 +1,11 @@
1
+ import os
2
+ import tempfile
3
+ from logging import getLogger
1
4
  from pathlib import Path
2
5
 
3
6
  from langchain_core.tools import ToolException
4
- from logging import getLogger
5
- from alita_sdk.runtime.langchain.document_loaders.constants import loaders_map
6
- from langchain_core.documents import Document
7
7
 
8
- from ...runtime.langchain.document_loaders.utils import create_temp_file
8
+ from alita_sdk.runtime.langchain.document_loaders.constants import loaders_map
9
9
 
10
10
  logger = getLogger(__name__)
11
11
 
@@ -147,26 +147,16 @@ def load_content(file_path: str, extension: str = None, loader_extra_config: dic
147
147
  return ""
148
148
 
149
149
  def load_content_from_bytes(file_content: bytes, extension: str = None, loader_extra_config: dict = None, llm = None) -> str:
150
- """Loads the content of a file from bytes based on its extension using a configured loader."""
151
- return load_content(create_temp_file(file_content), extension, loader_extra_config, llm)
152
-
153
- def file_to_bytes(filepath):
154
- """
155
- Reads a file and returns its content as a bytes object.
156
-
157
- Args:
158
- filepath (str): The path to the file.
159
-
160
- Returns:
161
- bytes: The content of the file as a bytes object.
162
- """
150
+ temp_file_path = None
163
151
  try:
164
- with open(filepath, "rb") as f:
165
- file_content_bytes = f.read()
166
- return file_content_bytes
167
- except FileNotFoundError:
168
- logger.error(f"File not found: {filepath}")
169
- return None
170
- except Exception as e:
171
- logger.error(f"Error reading file {filepath}: {e}")
172
- return None
152
+ with tempfile.NamedTemporaryFile(mode='w+b', delete=False) as temp_file:
153
+ temp_file.write(file_content)
154
+ temp_file.flush()
155
+ temp_file_path = temp_file.name
156
+
157
+ # Now the file is closed and can be read
158
+ result = load_content(temp_file_path, extension, loader_extra_config, llm)
159
+ return result
160
+ finally:
161
+ if temp_file_path and os.path.exists(temp_file_path):
162
+ os.remove(temp_file_path)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.229
3
+ Version: 0.3.230
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
@@ -181,7 +181,7 @@ venv\Scripts\activate
181
181
  Install all required dependencies for the SDK and toolkits:
182
182
 
183
183
  ```bash
184
- pip install -r req_bkup/requirements-all.txt
184
+ pip install -U '.[all]'
185
185
  ```
186
186
 
187
187
  Environment Setup
@@ -39,6 +39,7 @@ alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py,sha256=4
39
39
  alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py,sha256=MZ2v-Nv7f7z2Lr6e6VWwi9nPzEjfYNSwHPhH-RV7agQ,1976
40
40
  alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py,sha256=NzpoL4C7UzyzLouTSL_xTQw70MitNt-WZz3Eyl7QkTA,8294
41
41
  alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py,sha256=fKezkgvIcLG7S2PVJp1a8sZd6C4XQKNZKAFC87DbQts,7003
42
+ alita_sdk/runtime/langchain/document_loaders/AlitaDocLoader.py,sha256=axlWTfTY0TfvLZqS9hUzXh9ZFzsbBB7C89b6WB-BSYM,1165
42
43
  alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py,sha256=nHvXm5U5qa26FGRwl6YKCG7HGBV5erjqqyWowNWs7iI,5723
43
44
  alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py,sha256=YBFYikrOEITfIavU0Xu7BQSNvPCFKzcmbJ_VDeQ6KdI,3078
44
45
  alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py,sha256=5WXGcyHraSVj3ANHj_U6X4EDikoekrIYtS0Q_QqNIng,2608
@@ -50,8 +51,8 @@ alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py,sha256=CUVVnisx
50
51
  alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py,sha256=B-wh9dtMhu5ImDfcPHAOkjMUFjaY2IRE7WFzKKDUf-U,3762
51
52
  alita_sdk/runtime/langchain/document_loaders/AlitaTextLoader.py,sha256=uNcV0En49_0u0RYB1sP1XfNspT2Xc5CacuJr9Jqv79Q,2972
52
53
  alita_sdk/runtime/langchain/document_loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
- alita_sdk/runtime/langchain/document_loaders/constants.py,sha256=Z9pWOGmgfhLMFcZGSBVvPMkRLcG2Id-PqmIDt-88T1E,4417
54
- alita_sdk/runtime/langchain/document_loaders/utils.py,sha256=0vShC92UG9dr1Vnov2nlbAyfsxdG3CqGGF1rWdJA7NE,1845
54
+ alita_sdk/runtime/langchain/document_loaders/constants.py,sha256=QmNedd14q1t4px0LebVSvThKFo_X9z1YM_tFCXnOKj4,4577
55
+ alita_sdk/runtime/langchain/document_loaders/utils.py,sha256=9xghESf3axBbwxATyVuS0Yu-TWe8zWZnXgCD1ZVyNW0,2414
55
56
  alita_sdk/runtime/langchain/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
57
  alita_sdk/runtime/langchain/interfaces/kwextractor.py,sha256=kSJA9L8g8UArmHu7Bd9dIO0Rrq86JPUb8RYNlnN68FQ,3072
57
58
  alita_sdk/runtime/langchain/interfaces/llm_processor.py,sha256=tbEsue5E31hz09HeMGDcdEipLyObQ5q1kFTIjEzUKDM,8667
@@ -112,16 +113,16 @@ alita_sdk/runtime/utils/toolkit_utils.py,sha256=I9QFqnaqfVgN26LUr6s3XlBlG6y0CoHU
112
113
  alita_sdk/runtime/utils/utils.py,sha256=CpEl3LCeLbhzQySz08lkKPm7Auac6IiLF7WB8wmArMI,589
113
114
  alita_sdk/tools/__init__.py,sha256=1AHqP2xyLjn92xVm70l9XIke6FkfHkLo5OoQVe4BuP8,10421
114
115
  alita_sdk/tools/elitea_base.py,sha256=22P97EmUlO-eC8DoGPiSNjHNjTv8ru0Q05qnR3U9WWs,30572
115
- alita_sdk/tools/ado/__init__.py,sha256=j4W52bLXVMrm-mZuyD1r6obw_EjRXiLKG7mFDOs8Cpw,1325
116
+ alita_sdk/tools/ado/__init__.py,sha256=j4lt6MLWlpkIIVkHmAyVG3i_qQeQ3ZmL_g8BfMhVhVI,1289
116
117
  alita_sdk/tools/ado/utils.py,sha256=PTCludvaQmPLakF2EbCGy66Mro4-rjDtavVP-xcB2Wc,1252
117
- alita_sdk/tools/ado/repos/__init__.py,sha256=m0QF4o-Caue-uwq4duYH3xc6Jhszgz2bW-gbsClHEOs,6339
118
- alita_sdk/tools/ado/repos/repos_wrapper.py,sha256=SgnEUX1lTn5ncZI8EFfPibk0_gHstkApDSqTCxYsrUk,50097
119
- alita_sdk/tools/ado/test_plan/__init__.py,sha256=QUNSOCVheUbILve4CxjBzBHKcIA28jZjoA6rRb8tD_Y,5483
120
- alita_sdk/tools/ado/test_plan/test_plan_wrapper.py,sha256=WWSWQx97sQfkM_CALybj9BPmPelozdRlxwefbkTgxis,20185
121
- alita_sdk/tools/ado/wiki/__init__.py,sha256=3cPNqUyOFwnZ2g5QW8wsdBC9sB0u39F-q4KKVjQqTN8,5351
122
- alita_sdk/tools/ado/wiki/ado_wrapper.py,sha256=8UIuEgn2G3vbyLIdsI-iwX-zXJXzHENuTAih5USYGrs,14679
123
- alita_sdk/tools/ado/work_item/__init__.py,sha256=dBDjP8CJnKe9xBbJg-EG1AvRo06mcfS2f0AVeXMaBmk,5507
124
- alita_sdk/tools/ado/work_item/ado_wrapper.py,sha256=7YrqNIDnVYYm8__joABAr3iIk3IvYoQ7NZ9Vi-iaICc,28233
118
+ alita_sdk/tools/ado/repos/__init__.py,sha256=kc4ZJI3B9CDUp4q3jRSj7JZNc3fJwwMTsV40CiKO7Po,6111
119
+ alita_sdk/tools/ado/repos/repos_wrapper.py,sha256=nPVsS10Se52yHmZ_YXVGywCSaYLlBEYBTBlhBcDJr80,50143
120
+ alita_sdk/tools/ado/test_plan/__init__.py,sha256=w-tHu1uJakZSrREx0tD8sZ3-0Lz0rrv8Uj4phTzF4wU,5429
121
+ alita_sdk/tools/ado/test_plan/test_plan_wrapper.py,sha256=jQt8kFmdAzsopjByLTMiSnWtoqz_IUOmYkhPTVGeMnU,20265
122
+ alita_sdk/tools/ado/wiki/__init__.py,sha256=ARjmIAdx-1DcNvh_WW9Z-ZuFp86RKK-gDvzStxZHL_0,5358
123
+ alita_sdk/tools/ado/wiki/ado_wrapper.py,sha256=zg6wMRar1DTp-ZRlYaQifBEnpYmTrHXskTNPdrLdy8s,14759
124
+ alita_sdk/tools/ado/work_item/__init__.py,sha256=L7uYqUn1eAlJwtTiFWYdeSdc-33Am0beFdlC99DRXVY,5493
125
+ alita_sdk/tools/ado/work_item/ado_wrapper.py,sha256=ubeF2m8J6CGZF_gnkTEbmW_eh6YWsk7bD2clu9FmZpY,28313
125
126
  alita_sdk/tools/advanced_jira_mining/__init__.py,sha256=pUTzECqGvYaR5qWY3JPUhrImrZgc7pCXuqSe5eWIE80,4604
126
127
  alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py,sha256=nZPtuwVWp8VeHw1B8q9kdwf-6ZvHnlXTOGdcIMDkKpw,44211
127
128
  alita_sdk/tools/aws/__init__.py,sha256=tB6GCOg4XGSpR6qgbgAF4MUQ5-YmQCbWurWgrVKEKQ8,181
@@ -130,11 +131,11 @@ alita_sdk/tools/aws/delta_lake/api_wrapper.py,sha256=bo0MPnhIQ787RL-dIA-e2dDMzxH
130
131
  alita_sdk/tools/aws/delta_lake/schemas.py,sha256=yl8yYSCY3OrapElCcDSpirM9P-H2Hi6zZyZATv6JWrc,967
131
132
  alita_sdk/tools/aws/delta_lake/tool.py,sha256=xXaaKnTGdoXhvYn89TmzWaV_zn79uTibpxCsi5FS_eU,1104
132
133
  alita_sdk/tools/azure_ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
- alita_sdk/tools/azure_ai/search/__init__.py,sha256=breDAuxjaX-23Gv8ydn92bkv1VOCpbMzfQB_BJTjymQ,4187
134
+ alita_sdk/tools/azure_ai/search/__init__.py,sha256=FVWNSW4LlOXKt34fVUgXut5oZcok9-VZ7ZY7i7bPj1U,4157
134
135
  alita_sdk/tools/azure_ai/search/api_wrapper.py,sha256=E4p6HPDlwgxfT_i6cvg9rN4Vn_47CVAyNBAKLIGq3mU,7265
135
136
  alita_sdk/tools/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
137
  alita_sdk/tools/base/tool.py,sha256=-N27AodZS49vdPCgFkU-bFS9bxoPopZBnNrmwInx3d0,864
137
- alita_sdk/tools/bitbucket/__init__.py,sha256=wH693UFZ-oXygcnQGqmw0IJ5tg1qoptVQnrlAP31KxY,5484
138
+ alita_sdk/tools/bitbucket/__init__.py,sha256=P5YgZI7PfL3PNLi1CCVxSMc7OZpdlTkY-j_mbJV22xo,5587
138
139
  alita_sdk/tools/bitbucket/api_wrapper.py,sha256=OU55KjtFalYIZ4ioeBck0zjqTewB6BdwQuAS3Kud4R0,10847
139
140
  alita_sdk/tools/bitbucket/bitbucket_constants.py,sha256=UsbhQ1iEvrKoxceTFPWTYhaXS1zSxbmjs1TwY0-P4gw,462
140
141
  alita_sdk/tools/bitbucket/cloud_api_wrapper.py,sha256=VELi65tLXvszwCGQSqVfyVal0ylx9DgAmAGpRQL_Zkg,15522
@@ -202,7 +203,7 @@ alita_sdk/tools/code/linter/api_wrapper.py,sha256=wylpwhAw02Jt8L18CqBq2He5PbwIkx
202
203
  alita_sdk/tools/code/loaders/codesearcher.py,sha256=XoXXZtIQZhvjIwZlnl_4wVGHC-3saYzFo5oDR_Zh3EY,529
203
204
  alita_sdk/tools/code/sonar/__init__.py,sha256=u8wpgXJ_shToLl3G9-XEtGDor5dhmsnurIImh1-e-U0,3165
204
205
  alita_sdk/tools/code/sonar/api_wrapper.py,sha256=nNqxcWN_6W8c0ckj-Er9HkNuAdgQLoWBXh5UyzNutis,2653
205
- alita_sdk/tools/confluence/__init__.py,sha256=_GfUG4KwZlJJQ_b2azpHGPyINpPmkKKMDOHuNYW2eQA,7375
206
+ alita_sdk/tools/confluence/__init__.py,sha256=y4nc4NoDvzeIEZaTlYqxgo8S8JVw6RtUl9_eOFddvQo,7389
206
207
  alita_sdk/tools/confluence/api_wrapper.py,sha256=4WqjVeFWyFeb4-VD5v4_J69pbyjire4Op7cBSKU9EXw,85057
207
208
  alita_sdk/tools/confluence/loader.py,sha256=4bf5qrJMEiJzuZp2NlxO2XObLD1w7fxss_WyMUpe8sg,9290
208
209
  alita_sdk/tools/confluence/utils.py,sha256=Lxo6dBD0OlvM4o0JuK6qeB_4LV9BptiwJA9e1vqNcDw,435
@@ -210,16 +211,16 @@ alita_sdk/tools/custom_open_api/__init__.py,sha256=9aT5SPNPWcJC6jMZEM-3rUCXVULj_
210
211
  alita_sdk/tools/custom_open_api/api_wrapper.py,sha256=sDSFpvEqpSvXHGiBISdQQcUecfO3md-_F8hAi6p2dvg,4340
211
212
  alita_sdk/tools/elastic/__init__.py,sha256=iwnSRppRpzvJ1da2K3Glu8Uu41MhBDCYbguboLkEbW0,2818
212
213
  alita_sdk/tools/elastic/api_wrapper.py,sha256=pl8CqQxteJAGwyOhMcld-ZgtOTFwwbv42OITQVe8rM0,1948
213
- alita_sdk/tools/figma/__init__.py,sha256=VBimOTXVoq0KK4dXcHaWT0yDcPZxhHYpZ_J3AqL_4xU,5229
214
- alita_sdk/tools/figma/api_wrapper.py,sha256=Q5BbEVfzIPGGSAV-T9gv0a31ku4jqCCvQDF85etHJEo,19276
215
- alita_sdk/tools/github/__init__.py,sha256=2mEPfKJwT-1qk5BLlCmQZI0mAXcbQdHX386Cxd7Szh4,5844
214
+ alita_sdk/tools/figma/__init__.py,sha256=281OU_aw4Y87Do09HhDSi5zL5ne9YlrsRLZQo8s1U8Q,5316
215
+ alita_sdk/tools/figma/api_wrapper.py,sha256=Rtgt9FvR8VD0oPdYhlgvVyXLVqLTjtiOPTlwNeaV80w,20560
216
+ alita_sdk/tools/github/__init__.py,sha256=CtU52t6-jd6JErWe3M2HF5XXWzFj9CqGmG7HBjUet6E,5348
216
217
  alita_sdk/tools/github/api_wrapper.py,sha256=JRhn7Cgg2j6uEwlvuQCMeISNYvRV2Yahx-v-p8HspUQ,8767
217
218
  alita_sdk/tools/github/github_client.py,sha256=nxnSXsDul2PPbWvYZS8TmAFFmR-5ALyakNoV5LN2D4U,86617
218
219
  alita_sdk/tools/github/graphql_client_wrapper.py,sha256=d3AGjzLGH_hdQV2V8HeAX92dJ4dlnE5OXqUlCO_PBr0,71539
219
220
  alita_sdk/tools/github/schemas.py,sha256=yFsqivfjCPRk9GxFJrL8sTz6nnjFCZ0j5DIfPtGSsvA,13852
220
221
  alita_sdk/tools/github/tool.py,sha256=Jnnv5lenV5ds8AAdyo2m8hSzyJ117HZBjzHC6T1ck-M,1037
221
222
  alita_sdk/tools/github/tool_prompts.py,sha256=y6ZW_FpUCE87Uop3WuQAZVRnzxO5t7xjBOI5bCqiluw,30194
222
- alita_sdk/tools/gitlab/__init__.py,sha256=5DjUohgQkaZzEeyWeF67TS-07QQGcAERgSgpoQivYnc,5003
223
+ alita_sdk/tools/gitlab/__init__.py,sha256=WuaIouTnMoQF7OTsfm7GblWW60Yf2IbUyQxjFHpK3ck,5127
223
224
  alita_sdk/tools/gitlab/api_wrapper.py,sha256=KYCRO2pF8EPTLhWuEj64XsHPCYSucsf8S3R_ofJttrA,22301
224
225
  alita_sdk/tools/gitlab/tools.py,sha256=vOGTlSaGaFmWn6LS6YFP-FuTqUPun9vnv1VrUcUHAZQ,16500
225
226
  alita_sdk/tools/gitlab/utils.py,sha256=Z2XiqIg54ouqqt1to-geFybmkCb1I6bpE91wfnINH1I,2320
@@ -229,13 +230,13 @@ alita_sdk/tools/gmail/__init__.py,sha256=RkVWqVT335tpSUEVZUWqqPYMOYnxjkPmkBKLYdk
229
230
  alita_sdk/tools/gmail/gmail_wrapper.py,sha256=t0IYM3zb77Ub8o9kv6HugNm_OoG5tN9T730hYmY8F-c,1312
230
231
  alita_sdk/tools/gmail/utils.py,sha256=cu6pbSsyMIr1BQOSs9et1rbAkk-Z_u48PB9FtJwFhUs,448
231
232
  alita_sdk/tools/google/__init__.py,sha256=YbDEXq3nBmWkXfqipqlPSc6kTAGTLckP8gswNfsA4jE,178
232
- alita_sdk/tools/google/bigquery/__init__.py,sha256=EmmoiAj6abQzdewq5i4eNNUbGPeJnAHcyVdV4bgGY0k,4301
233
+ alita_sdk/tools/google/bigquery/__init__.py,sha256=Hmwvm8NTBxWfoLnkrJgG9ppAbEXigniiwYD3jLFHl3E,4463
233
234
  alita_sdk/tools/google/bigquery/api_wrapper.py,sha256=I8wETiA36w6odKZwb_4TA1g_5RgUr1LOZg4hOpBC5to,19683
234
235
  alita_sdk/tools/google/bigquery/schemas.py,sha256=Gb8KQZSoRkmjXiz21dTC95c1MHEHFcnA0lPTqb8ZjCY,4455
235
236
  alita_sdk/tools/google/bigquery/tool.py,sha256=Esf9Hsp8I0e7-5EdkFqQ-bid0cfrg-bfSoHoW_IIARo,1027
236
237
  alita_sdk/tools/google_places/__init__.py,sha256=mHKc7u9P2gqGDzqqJNQC9qiZYEm5gncnM_1XjtrM17o,3152
237
238
  alita_sdk/tools/google_places/api_wrapper.py,sha256=7nZly6nk4f4Tm7s2MVdnnwlb-1_WHRrDhyjDiqoyPjA,4674
238
- alita_sdk/tools/jira/__init__.py,sha256=g_rSfUGzOjgC5nFSBBH_jnsthUlVA3Vv4bx1M0AvlIM,6917
239
+ alita_sdk/tools/jira/__init__.py,sha256=CuE3LPxFuTtdel9YR7RS37wZzvxniPVCY6pDu4cBAdk,6927
239
240
  alita_sdk/tools/jira/api_wrapper.py,sha256=gZXEtOZtWvINHipHPj8Dg6uNyYKZariLo4Bs3_wLJrA,75932
240
241
  alita_sdk/tools/keycloak/__init__.py,sha256=0WB9yXMUUAHQRni1ghDEmd7GYa7aJPsTVlZgMCM9cQ0,3050
241
242
  alita_sdk/tools/keycloak/api_wrapper.py,sha256=cOGr0f3S3-c6tRDBWI8wMnetjoNSxiV5rvC_0VHb8uw,3100
@@ -269,12 +270,12 @@ alita_sdk/tools/pandas/statsmodels/base_stats.py,sha256=jeKW1KfyaNi4M6wkru2iXHNr
269
270
  alita_sdk/tools/pandas/statsmodels/descriptive.py,sha256=APdofBnEiRhMrn6tLKwH076NPp5uHe8VwmblN3lQLfQ,10217
270
271
  alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py,sha256=fdNAayMB3W7avMfKJCcbf2_P54vUXbq8KVebOB48348,10508
271
272
  alita_sdk/tools/pandas/statsmodels/regression.py,sha256=Y1pWK4u_qzrfA740K-FX0nZ5FREGGPk8mfvykPIYoiI,9164
272
- alita_sdk/tools/postman/__init__.py,sha256=1Trin4CFfj7XIWyAzZyRO8B4OGluZeCmSiWaFZRTWt0,4925
273
+ alita_sdk/tools/postman/__init__.py,sha256=-mAMWjyJ9ZI3UDt2vw29zO50gf0yy8XlnlLPiMVZwZk,5078
273
274
  alita_sdk/tools/postman/api_wrapper.py,sha256=bKgnEQVGv3QhqTevzBOwiXxAd0-Y5vUI1-5U6YubJ5Q,96389
274
275
  alita_sdk/tools/postman/postman_analysis.py,sha256=2d-Oi2UORosIePIUyncSONw9hY7dw8Zc7BQvCd4aqpg,45115
275
276
  alita_sdk/tools/pptx/__init__.py,sha256=vVUrWnj7KWJgEk9oxGSsCAQ2SMSXrp_SFOdUHYQKcAo,3444
276
277
  alita_sdk/tools/pptx/pptx_wrapper.py,sha256=yyCYcTlIY976kJ4VfPo4dyxj4yeii9j9TWP6W8ZIpN8,29195
277
- alita_sdk/tools/qtest/__init__.py,sha256=hRyTjAmFsbH6vWhzBMXjIFWApo4RYWIvK35vBdxcmBo,3765
278
+ alita_sdk/tools/qtest/__init__.py,sha256=lfKftVpRQIQhoawufqAyv4f_gW6V4h1YpFxgQWtZoBg,3896
278
279
  alita_sdk/tools/qtest/api_wrapper.py,sha256=cWXpmjjel9CYIXXjetJkARLYZXqvHufSghctTHN0ggc,22296
279
280
  alita_sdk/tools/qtest/tool.py,sha256=kKzNPS4fUC76WQQttQ6kdVANViHEvKE8Kf174MQiNYU,562
280
281
  alita_sdk/tools/rally/__init__.py,sha256=gw5EkDTeVQ77zGz7NSOkDuhycUpJ_DQC7g_bwwVn64k,4105
@@ -285,24 +286,24 @@ alita_sdk/tools/report_portal/report_portal_client.py,sha256=-wUDudCQJZCJ38LI2aA
285
286
  alita_sdk/tools/salesforce/__init__.py,sha256=dwkLuvxPbfLZV31c1GqlQcDlhaloJxQ2X3Dc4z5BUEc,3003
286
287
  alita_sdk/tools/salesforce/api_wrapper.py,sha256=kvl7WGzN8Kto5OSgm91AxMFmBFJHRhV_5aFwKWExFMM,9451
287
288
  alita_sdk/tools/salesforce/model.py,sha256=wzpbTdUx5mANApAZFQIKzq7xXtYBiiSlKvrTX4ySQS8,1887
288
- alita_sdk/tools/servicenow/__init__.py,sha256=pxw1jSApbd58T3PC4luwHFe8ka41RPJzyk5CYt15KtU,4368
289
+ alita_sdk/tools/servicenow/__init__.py,sha256=_au5Ryd4gGEHJ6b1lPnJhbC_KUvd6iW8rdYgcjijXV8,4435
289
290
  alita_sdk/tools/servicenow/api_wrapper.py,sha256=WpH-bBLGFdhehs4g-K-WAkNuaD1CSrwsDpdgB3RG53s,6120
290
291
  alita_sdk/tools/servicenow/servicenow_client.py,sha256=Rdqfu-ll-qbnclMzChLZBsfXRDzgoX_FdeI2WLApWxc,3269
291
- alita_sdk/tools/sharepoint/__init__.py,sha256=8ix4a4lWN6vpGS6bdcr4U7zdttk6ShgQ0ji4r7w3iKw,4073
292
+ alita_sdk/tools/sharepoint/__init__.py,sha256=ZoqNrKPqswuwTg2jTj8_jHlNUSCZQUiK1OEWDZCD6B0,4162
292
293
  alita_sdk/tools/sharepoint/api_wrapper.py,sha256=YCD0DkdgTyrDs4cSOO_LQjTVfmoA8U_keGGJlefxSTo,9083
293
294
  alita_sdk/tools/sharepoint/authorization_helper.py,sha256=n-nL5dlBoLMK70nHu7P2RYCb8C6c9HMA_gEaw8LxuhE,2007
294
295
  alita_sdk/tools/sharepoint/utils.py,sha256=fZ1YzAu5CTjKSZeslowpOPH974902S8vCp1Wu7L44LM,446
295
- alita_sdk/tools/slack/__init__.py,sha256=0vUgDK_Og29h0055qtPagiRlydADGhV5bj0XltJ02VE,3663
296
+ alita_sdk/tools/slack/__init__.py,sha256=Z0gzBVHHISd3EO7bo6A0WJf-fU178s-7F8bBKkwLn-E,3801
296
297
  alita_sdk/tools/slack/api_wrapper.py,sha256=5VrV7iSGno8ZcDzEHdGPNhInhtODGPPvAzoZ9W9iQWE,14009
297
298
  alita_sdk/tools/sql/__init__.py,sha256=9Lh8YHKO8zD5eeolpR4O9swTUsjpXj9LVDn8fM-T5IM,3506
298
299
  alita_sdk/tools/sql/api_wrapper.py,sha256=Rky0_CX9HWDQ2mClHGAgP3LHjYVX4iymPuilZMtaDlQ,3687
299
300
  alita_sdk/tools/sql/models.py,sha256=AKJgSl_kEEz4fZfw3kbvdGHXaRZ-yiaqfJOB6YOj3i0,641
300
301
  alita_sdk/tools/testio/__init__.py,sha256=qi12wyJXN02hrUXg08CbijcCL5pi30JMbJfiXjn1Zr0,2646
301
302
  alita_sdk/tools/testio/api_wrapper.py,sha256=BvmL5h634BzG6p7ajnQLmj-uoAw1gjWnd4FHHu1h--Q,21638
302
- alita_sdk/tools/testrail/__init__.py,sha256=KeQRniGGeQURrmLtGER2zV_UZFEcRwbSMfcTiKLmus4,4860
303
+ alita_sdk/tools/testrail/__init__.py,sha256=577XVaOAoXG3mDkojCsy5XCUlxCsdJf_2-_5U-afkOo,4961
303
304
  alita_sdk/tools/testrail/api_wrapper.py,sha256=Aax0jspgidXYNxLIw6qTWu3dO2JOIS0ALIqsCzQuFbQ,32087
304
305
  alita_sdk/tools/utils/__init__.py,sha256=155xepXPr4OEzs2Mz5YnjXcBpxSv1X2eznRUVoPtyK0,3268
305
- alita_sdk/tools/utils/content_parser.py,sha256=5meTV5nbhlaeZG2lL6OVY8XMaTVg2T2dgWZrtIjRLL8,7526
306
+ alita_sdk/tools/utils/content_parser.py,sha256=yi1IDLreqfM41w-PnoFEvVLtSV50qpNvKshJwbDTgqs,7172
306
307
  alita_sdk/tools/vector_adapters/VectorStoreAdapter.py,sha256=wZ_MhVWPEgoPhKRvbPB6Qs34EPyWx0IW7ydY_GVBZFQ,3344
307
308
  alita_sdk/tools/vector_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
308
309
  alita_sdk/tools/xray/__init__.py,sha256=OYa1wveTm-lAhsJaGXMnwOrDQWl6ch--NjNLBeR63eM,4331
@@ -324,8 +325,8 @@ alita_sdk/tools/zephyr_scale/api_wrapper.py,sha256=JAeWf-RXohsxheUpT0iMDClc_izj-
324
325
  alita_sdk/tools/zephyr_squad/__init__.py,sha256=0AI_j27xVO5Gk5HQMFrqPTd4uvuVTpiZUicBrdfEpKg,2796
325
326
  alita_sdk/tools/zephyr_squad/api_wrapper.py,sha256=kmw_xol8YIYFplBLWTqP_VKPRhL_1ItDD0_vXTe_UuI,14906
326
327
  alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py,sha256=R371waHsms4sllHCbijKYs90C-9Yu0sSR3N4SUfQOgU,5066
327
- alita_sdk-0.3.229.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
328
- alita_sdk-0.3.229.dist-info/METADATA,sha256=d3sFnbrIIMPwLNf_UqT1pR__uYR9cg6VGseZvL0Z4aA,18917
329
- alita_sdk-0.3.229.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
330
- alita_sdk-0.3.229.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
331
- alita_sdk-0.3.229.dist-info/RECORD,,
328
+ alita_sdk-0.3.230.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
329
+ alita_sdk-0.3.230.dist-info/METADATA,sha256=jFOYe8oP7YbfYBFrKSoV_BtsZYIcsH2RPMmiQ-X2-tw,18896
330
+ alita_sdk-0.3.230.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
331
+ alita_sdk-0.3.230.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
332
+ alita_sdk-0.3.230.dist-info/RECORD,,