alita-sdk 0.3.283__py3-none-any.whl → 0.3.285__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.
- alita_sdk/runtime/tools/vectorstore_base.py +1 -1
- alita_sdk/tools/base_indexer_toolkit.py +9 -2
- alita_sdk/tools/figma/api_wrapper.py +26 -11
- alita_sdk/tools/gitlab/__init__.py +1 -1
- alita_sdk/tools/testrail/api_wrapper.py +24 -18
- alita_sdk/tools/zephyr_enterprise/__init__.py +2 -1
- alita_sdk/tools/zephyr_essential/api_wrapper.py +47 -1
- {alita_sdk-0.3.283.dist-info → alita_sdk-0.3.285.dist-info}/METADATA +1 -1
- {alita_sdk-0.3.283.dist-info → alita_sdk-0.3.285.dist-info}/RECORD +12 -12
- {alita_sdk-0.3.283.dist-info → alita_sdk-0.3.285.dist-info}/WHEEL +0 -0
- {alita_sdk-0.3.283.dist-info → alita_sdk-0.3.285.dist-info}/licenses/LICENSE +0 -0
- {alita_sdk-0.3.283.dist-info → alita_sdk-0.3.285.dist-info}/top_level.txt +0 -0
@@ -158,15 +158,22 @@ class BaseIndexerToolkit(VectorStoreWrapperBase):
|
|
158
158
|
if clean_index:
|
159
159
|
self._clean_index(collection_suffix)
|
160
160
|
#
|
161
|
+
self._log_tool_event(f"Indexing data into collection with suffix '{collection_suffix}'. It can take some time...")
|
162
|
+
self._log_tool_event(f"Loading the documents to index...{kwargs}")
|
161
163
|
documents = self._base_loader(**kwargs)
|
164
|
+
self._log_tool_event(f"Base documents were loaded. "
|
165
|
+
f"Search for possible document duplicates and remove them from the indexing list...")
|
162
166
|
documents = self._reduce_duplicates(documents, collection_suffix)
|
167
|
+
self._log_tool_event(f"Duplicates were removed. "
|
168
|
+
f"Processing documents to collect dependencies and prepare them for indexing...")
|
163
169
|
documents = self._extend_data(documents) # update content of not-reduced base document if needed (for sharepoint and similar)
|
164
170
|
documents = self._collect_dependencies(documents) # collect dependencies for base documents
|
171
|
+
self._log_tool_event(f"Documents were processed. "
|
172
|
+
f"Applying chunking tool '{chunking_tool}' if specified and preparing documents for indexing...")
|
165
173
|
documents = self._apply_loaders_chunkers(documents, chunking_tool, chunking_config)
|
166
174
|
list_documents = list(documents)
|
167
175
|
self._clean_metadata(list_documents)
|
168
|
-
|
169
|
-
#
|
176
|
+
self._log_tool_event(f"Documents are ready for indexing. Total documents to index: {len(list_documents)}")
|
170
177
|
return self._save_index(list_documents, collection_suffix=collection_suffix, progress_step=progress_step)
|
171
178
|
|
172
179
|
def _apply_loaders_chunkers(self, documents: Generator[Document, None, None], chunking_tool: str=None, chunking_config=None) -> Generator[Document, None, None]:
|
@@ -249,7 +249,9 @@ class FigmaApiWrapper(NonCodeIndexerToolkit):
|
|
249
249
|
) -> Generator[Document, None, None]:
|
250
250
|
# If both include and exclude are provided, use only include
|
251
251
|
if file_keys_include:
|
252
|
+
self._log_tool_event(f"Loading files: {file_keys_include}")
|
252
253
|
for file_key in file_keys_include:
|
254
|
+
self._log_tool_event(f"Loading file `{file_key}`")
|
253
255
|
file = self._client.get_file(file_key)
|
254
256
|
if not file:
|
255
257
|
raise ToolException(f"Unexpected error while retrieving file {file_key}. Probably file is under editing. Try again later.")
|
@@ -265,6 +267,7 @@ class FigmaApiWrapper(NonCodeIndexerToolkit):
|
|
265
267
|
}
|
266
268
|
yield Document(page_content=json.dumps(metadata), metadata=metadata)
|
267
269
|
elif project_id:
|
270
|
+
self._log_tool_event(f"Loading project files from project `{project_id}`")
|
268
271
|
files = json.loads(self.get_project_files(project_id)).get('files', [])
|
269
272
|
for file in files:
|
270
273
|
if file_keys_exclude and file.get('key', '') in file_keys_exclude:
|
@@ -286,12 +289,14 @@ class FigmaApiWrapper(NonCodeIndexerToolkit):
|
|
286
289
|
|
287
290
|
def _process_document(self, document: Document) -> Generator[Document, None, None]:
|
288
291
|
file_key = document.metadata.get('id', '')
|
292
|
+
self._log_tool_event(f"Loading details (images) for `{file_key}`")
|
289
293
|
#
|
290
294
|
figma_pages = self._client.get_file(file_key).document.get('children', [])
|
291
295
|
node_ids_include = document.metadata.pop('figma_pages_include', [])
|
292
296
|
node_ids_exclude = document.metadata.pop('figma_pages_exclude', [])
|
293
297
|
node_types_include = [t.lower() for t in document.metadata.pop('figma_nodes_include', [])]
|
294
298
|
node_types_exclude = [t.lower() for t in document.metadata.pop('figma_nodes_exclude', [])]
|
299
|
+
self._log_tool_event(f"Included pages: {node_ids_include}. Excluded pages: {node_ids_exclude}.")
|
295
300
|
if node_ids_include:
|
296
301
|
figma_pages = [node for node in figma_pages if ('id' in node and node['id'].replace(':', '-') in node_ids_include)]
|
297
302
|
elif node_ids_exclude:
|
@@ -310,7 +315,12 @@ class FigmaApiWrapper(NonCodeIndexerToolkit):
|
|
310
315
|
]
|
311
316
|
|
312
317
|
images = self._client.get_file_images(file_key, node_ids).images or {}
|
313
|
-
|
318
|
+
total_images = len(images)
|
319
|
+
if total_images == 0:
|
320
|
+
logging.info(f"No images found for file {file_key}.")
|
321
|
+
return
|
322
|
+
progress_step = max(1, total_images // 10)
|
323
|
+
for idx, (node_id, image_url) in enumerate(images.items(), 1):
|
314
324
|
if not image_url:
|
315
325
|
logging.warning(f"Image URL not found for node_id {node_id} in file {file_key}. Skipping.")
|
316
326
|
continue
|
@@ -321,17 +331,22 @@ class FigmaApiWrapper(NonCodeIndexerToolkit):
|
|
321
331
|
extension = f".{content_type.split('/')[-1]}" if content_type.startswith('image') else '.txt'
|
322
332
|
page_content = load_content_from_bytes(
|
323
333
|
file_content=response.content,
|
324
|
-
extension=extension, llm
|
334
|
+
extension=extension, llm=self.llm)
|
325
335
|
yield Document(
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
336
|
+
page_content=page_content,
|
337
|
+
metadata={
|
338
|
+
'id': node_id,
|
339
|
+
'updated_on': document.metadata.get('updated_on', ''),
|
340
|
+
'file_key': file_key,
|
341
|
+
'node_id': node_id,
|
342
|
+
'image_url': image_url
|
343
|
+
}
|
344
|
+
)
|
345
|
+
if idx % progress_step == 0 or idx == total_images:
|
346
|
+
percent = int((idx / total_images) * 100)
|
347
|
+
msg = f"Processed {idx}/{total_images} images ({percent}%) for file {file_key}."
|
348
|
+
logging.info(msg)
|
349
|
+
self._log_tool_event(msg)
|
335
350
|
|
336
351
|
def _remove_metadata_keys(self):
|
337
352
|
return super()._remove_metadata_keys() + ['figma_pages_include', 'figma_pages_exclude', 'figma_nodes_include', 'figma_nodes_exclude']
|
@@ -44,7 +44,7 @@ class AlitaGitlabToolkit(BaseToolkit):
|
|
44
44
|
return create_model(
|
45
45
|
name,
|
46
46
|
repository=(str, Field(description="GitLab repository", json_schema_extra={'toolkit_name': True, 'max_toolkit_length': AlitaGitlabToolkit.toolkit_max_length})),
|
47
|
-
gitlab_configuration=(
|
47
|
+
gitlab_configuration=(GitlabConfiguration, Field(description="GitLab configuration", json_schema_extra={'configuration_types': ['gitlab']})),
|
48
48
|
branch=(str, Field(description="Main branch", default="main")),
|
49
49
|
# indexer settings
|
50
50
|
pgvector_configuration=(Optional[PgVectorConfiguration], Field(default = None,
|
@@ -1,8 +1,9 @@
|
|
1
1
|
import json
|
2
2
|
import logging
|
3
|
-
from typing import Dict, List, Optional, Union, Any, Generator
|
3
|
+
from typing import Dict, List, Literal, Optional, Union, Any, Generator
|
4
4
|
|
5
5
|
import pandas as pd
|
6
|
+
from langchain_core.documents import Document
|
6
7
|
from langchain_core.tools import ToolException
|
7
8
|
from openai import BadRequestError
|
8
9
|
from pydantic import SecretStr, create_model, model_validator
|
@@ -10,11 +11,9 @@ from pydantic.fields import Field, PrivateAttr
|
|
10
11
|
from testrail_api import StatusCodeError, TestRailAPI
|
11
12
|
|
12
13
|
from ..chunkers.code.constants import get_file_extension
|
13
|
-
from ..
|
14
|
-
from
|
15
|
-
|
14
|
+
from ..non_code_indexer_toolkit import NonCodeIndexerToolkit
|
15
|
+
from ..utils.available_tools_decorator import extend_with_parent_available_tools
|
16
16
|
from ...runtime.utils.utils import IndexerKeywords
|
17
|
-
from ..utils.content_parser import parse_file_content
|
18
17
|
|
19
18
|
try:
|
20
19
|
from alita_sdk.runtime.langchain.interfaces.llm_processor import get_embeddings
|
@@ -301,7 +300,7 @@ SUPPORTED_KEYS = {
|
|
301
300
|
}
|
302
301
|
|
303
302
|
|
304
|
-
class TestrailAPIWrapper(
|
303
|
+
class TestrailAPIWrapper(NonCodeIndexerToolkit):
|
305
304
|
url: str
|
306
305
|
password: Optional[SecretStr] = None,
|
307
306
|
email: Optional[str] = None,
|
@@ -322,7 +321,7 @@ class TestrailAPIWrapper(BaseVectorStoreToolApiWrapper):
|
|
322
321
|
password = values.get("password")
|
323
322
|
email = values.get("email")
|
324
323
|
cls._client = TestRailAPI(url, email, password)
|
325
|
-
return values
|
324
|
+
return super().validate_toolkit(values)
|
326
325
|
|
327
326
|
def add_cases(self, add_test_cases_data: str):
|
328
327
|
"""Adds new test cases into Testrail per defined parameters.
|
@@ -537,6 +536,7 @@ class TestrailAPIWrapper(BaseVectorStoreToolApiWrapper):
|
|
537
536
|
suite_id: Optional[str] = None,
|
538
537
|
section_id: Optional[int] = None,
|
539
538
|
title_keyword: Optional[str] = None,
|
539
|
+
chunking_tool: str = None,
|
540
540
|
**kwargs: Any
|
541
541
|
) -> Generator[Document, None, None]:
|
542
542
|
self._include_attachments = kwargs.get('include_attachments', False)
|
@@ -558,7 +558,7 @@ class TestrailAPIWrapper(BaseVectorStoreToolApiWrapper):
|
|
558
558
|
cases = [case for case in cases if title_keyword.lower() in case.get('title', '').lower()]
|
559
559
|
|
560
560
|
for case in cases:
|
561
|
-
|
561
|
+
metadata = {
|
562
562
|
'project_id': project_id,
|
563
563
|
'title': case.get('title', ''),
|
564
564
|
'suite_id': suite_id or case.get('suite_id', ''),
|
@@ -572,7 +572,14 @@ class TestrailAPIWrapper(BaseVectorStoreToolApiWrapper):
|
|
572
572
|
'automation_type': case.get('custom_automation_type') or -1,
|
573
573
|
'section_id': case.get('section_id') or -1,
|
574
574
|
'entity_type': 'test_case',
|
575
|
-
}
|
575
|
+
}
|
576
|
+
if chunking_tool:
|
577
|
+
# content is in metadata for chunking tool post-processing
|
578
|
+
metadata[IndexerKeywords.CONTENT_IN_BYTES.value] = json.dumps(case).encode("utf-8")
|
579
|
+
page_content = ""
|
580
|
+
else:
|
581
|
+
page_content = json.dumps(case)
|
582
|
+
yield Document(page_content=page_content, metadata=metadata)
|
576
583
|
|
577
584
|
def _process_document(self, document: Document) -> Generator[Document, None, None]:
|
578
585
|
"""
|
@@ -605,24 +612,23 @@ class TestrailAPIWrapper(BaseVectorStoreToolApiWrapper):
|
|
605
612
|
continue
|
606
613
|
|
607
614
|
attachment_id = f"attach_{attachment['id']}"
|
608
|
-
|
609
|
-
|
610
|
-
# TODO: pass it to chunkers
|
611
|
-
yield Document(page_content=self._process_attachment(attachment),
|
615
|
+
file_name, content_bytes = self._process_attachment(attachment)
|
616
|
+
yield Document(page_content="",
|
612
617
|
metadata={
|
613
618
|
'project_id': base_data.get('project_id', ''),
|
614
619
|
'id': str(attachment_id),
|
615
|
-
IndexerKeywords.PARENT.value: str(case_id),
|
616
620
|
'filename': attachment['filename'],
|
617
621
|
'filetype': attachment['filetype'],
|
618
622
|
'created_on': attachment['created_on'],
|
619
623
|
'entity_type': 'test_case_attachment',
|
620
624
|
'is_image': attachment['is_image'],
|
625
|
+
IndexerKeywords.CONTENT_FILE_NAME.value: file_name,
|
626
|
+
IndexerKeywords.CONTENT_IN_BYTES.value: content_bytes
|
621
627
|
})
|
622
628
|
except json.JSONDecodeError as e:
|
623
629
|
raise ToolException(f"Failed to decode JSON from document: {e}")
|
624
630
|
|
625
|
-
def _process_attachment(self, attachment: Dict[str, Any]) ->
|
631
|
+
def _process_attachment(self, attachment: Dict[str, Any]) -> tuple[Any, bytes]:
|
626
632
|
"""
|
627
633
|
Processes an attachment to extract its content.
|
628
634
|
|
@@ -639,12 +645,11 @@ class TestrailAPIWrapper(BaseVectorStoreToolApiWrapper):
|
|
639
645
|
else:
|
640
646
|
try:
|
641
647
|
attachment_path = self._client.attachments.get_attachment(attachment_id=attachment['id'], path=f"./{attachment['filename']}")
|
642
|
-
page_content = parse_file_content(file_name=attachment['filename'], file_content=attachment_path.read_bytes(), llm=self.llm, is_capture_image=True)
|
643
648
|
except BadRequestError as ai_e:
|
644
649
|
logger.error(f"Unable to parse page's content with type: {attachment['filetype']} due to AI service issues: {ai_e}")
|
645
650
|
except Exception as e:
|
646
651
|
logger.error(f"Unable to parse page's content with type: {attachment['filetype']}: {e}")
|
647
|
-
return
|
652
|
+
return (attachment['filename'], attachment_path.read_bytes())
|
648
653
|
|
649
654
|
def _index_tool_params(self):
|
650
655
|
return {
|
@@ -658,6 +663,7 @@ class TestrailAPIWrapper(BaseVectorStoreToolApiWrapper):
|
|
658
663
|
'skip_attachment_extensions': (Optional[List[str]], Field(
|
659
664
|
description="List of file extensions to skip when processing attachments: i.e. ['.png', '.jpg']",
|
660
665
|
default=[])),
|
666
|
+
'chunking_tool':(Literal['json'], Field(description="Name of chunking tool", default='json'))
|
661
667
|
}
|
662
668
|
|
663
669
|
def _to_markup(self, data: List[Dict], output_format: str) -> str:
|
@@ -687,7 +693,7 @@ class TestrailAPIWrapper(BaseVectorStoreToolApiWrapper):
|
|
687
693
|
if output_format == "markdown":
|
688
694
|
return df.to_markdown(index=False)
|
689
695
|
|
690
|
-
@
|
696
|
+
@extend_with_parent_available_tools
|
691
697
|
def get_available_tools(self):
|
692
698
|
tools = [
|
693
699
|
{
|
@@ -43,7 +43,8 @@ class ZephyrEnterpriseToolkit(BaseToolkit):
|
|
43
43
|
default=None)),
|
44
44
|
# embedder settings
|
45
45
|
embedding_model=(Optional[str], Field(default=None, description="Embedding configuration.", json_schema_extra={'configuration_model': 'embedding'})),
|
46
|
-
selected_tools=(List[Literal[tuple(selected_tools)]],
|
46
|
+
selected_tools=(List[Literal[tuple(selected_tools)]],
|
47
|
+
Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
|
47
48
|
__config__=ConfigDict(json_schema_extra={
|
48
49
|
'metadata': {
|
49
50
|
"label": "Zephyr Enterprise", "icon_url": "zephyr.svg",
|
@@ -179,12 +179,43 @@ class ZephyrEssentialApiWrapper(NonCodeIndexerToolkit):
|
|
179
179
|
def create_folder(self, json: str):
|
180
180
|
"""Create a new folder."""
|
181
181
|
folder_data = self._parse_json(json)
|
182
|
+
if 'parentId' not in folder_data:
|
183
|
+
if 'parentName' in folder_data:
|
184
|
+
parent_folder_name = folder_data['parentName']
|
185
|
+
|
186
|
+
parent_folder = self.find_folder_by_name(parent_folder_name)
|
187
|
+
|
188
|
+
if isinstance(parent_folder, ToolException):
|
189
|
+
return ToolException(f"Folder with name '{parent_folder_name}' not found.")
|
190
|
+
else:
|
191
|
+
folder_data['parentId'] = parent_folder['id']
|
192
|
+
|
182
193
|
return self._client.create_folder(folder_data)
|
183
194
|
|
184
195
|
def get_folder(self, folder_id: str):
|
185
196
|
"""Retrieve details of a specific folder."""
|
186
197
|
return self._client.get_folder(folder_id)
|
187
198
|
|
199
|
+
def find_folder_by_name(self, name: str, project_key: Optional[str] = None, folder_type: Optional[str] = None):
|
200
|
+
"""
|
201
|
+
Find a folder by its name, ignoring case.
|
202
|
+
|
203
|
+
:param name: The name of the folder to search for.
|
204
|
+
:param project_key: Optional filter by project key.
|
205
|
+
:param folder_type: Optional filter by folder type.
|
206
|
+
:return: The folder details if found, otherwise None.
|
207
|
+
"""
|
208
|
+
# Fetch all folders with optional filters
|
209
|
+
folders = self.list_folders(project_key=project_key, folder_type=folder_type)
|
210
|
+
|
211
|
+
# Iterate through the folders and search for the matching name
|
212
|
+
for folder in folders['values']:
|
213
|
+
if folder.get('name', '').lower() == name.lower():
|
214
|
+
return folder
|
215
|
+
|
216
|
+
# Return None if no folder is found
|
217
|
+
return ToolException(f"Folder with name {name} was not found")
|
218
|
+
|
188
219
|
def delete_link(self, link_id: str):
|
189
220
|
"""Delete a specific link."""
|
190
221
|
return self._client.delete_link(link_id)
|
@@ -482,6 +513,12 @@ class ZephyrEssentialApiWrapper(NonCodeIndexerToolkit):
|
|
482
513
|
"args_schema": GetFolder,
|
483
514
|
"ref": self.get_folder,
|
484
515
|
},
|
516
|
+
{
|
517
|
+
"name": "find_folder_by_name",
|
518
|
+
"description": self.find_folder_by_name.__doc__,
|
519
|
+
"args_schema": FindFolderByName,
|
520
|
+
"ref": self.find_folder_by_name,
|
521
|
+
},
|
485
522
|
{
|
486
523
|
"name": "delete_link",
|
487
524
|
"description": self.delete_link.__doc__,
|
@@ -879,11 +916,12 @@ CreateFolder = create_model(
|
|
879
916
|
JSON body to create a folder. Example:
|
880
917
|
{
|
881
918
|
"parentId": 123456,
|
919
|
+
"parentName": "parentFolder",
|
882
920
|
"name": "ZephyrEssential_test",
|
883
921
|
"projectKey": "PRJ",
|
884
922
|
"folderType": "TEST_CASE"
|
885
923
|
}
|
886
|
-
Possible folder types: "TEST_CASE", "TEST_PLAN", "TEST_CYCLE"
|
924
|
+
Possible folder types: "TEST_CASE", "TEST_PLAN", "TEST_CYCLE",
|
887
925
|
"""
|
888
926
|
)))
|
889
927
|
)
|
@@ -893,6 +931,14 @@ GetFolder = create_model(
|
|
893
931
|
folder_id=(str, Field(description="ID of the folder to retrieve."))
|
894
932
|
)
|
895
933
|
|
934
|
+
FindFolderByName = create_model(
|
935
|
+
"GetFolder",
|
936
|
+
name=(str, Field(description="Name of the folder to retrieve.")),
|
937
|
+
project_key=(Optional[str], Field(description="Project key", default=None)),
|
938
|
+
folder_type=(Optional[str], Field(description="""Folder type. Possible values: "TEST_CASE", "TEST_PLAN", "TEST_CYCLE" """,
|
939
|
+
default=None)),
|
940
|
+
)
|
941
|
+
|
896
942
|
DeleteLink = create_model(
|
897
943
|
"DeleteLink",
|
898
944
|
link_id=(str, Field(description="ID of the link to delete."))
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: alita_sdk
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.285
|
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
|
@@ -119,7 +119,7 @@ alita_sdk/runtime/tools/prompt.py,sha256=nJafb_e5aOM1Rr3qGFCR-SKziU9uCsiP2okIMs9
|
|
119
119
|
alita_sdk/runtime/tools/router.py,sha256=wCvZjVkdXK9dMMeEerrgKf5M790RudH68pDortnHSz0,1517
|
120
120
|
alita_sdk/runtime/tools/tool.py,sha256=lE1hGi6qOAXG7qxtqxarD_XMQqTghdywf261DZawwno,5631
|
121
121
|
alita_sdk/runtime/tools/vectorstore.py,sha256=PN_Im5pkbFR6vXUhlBppEwHEhsg-UsO9eYrMS8UstFk,35826
|
122
|
-
alita_sdk/runtime/tools/vectorstore_base.py,sha256=
|
122
|
+
alita_sdk/runtime/tools/vectorstore_base.py,sha256=AoTTkpygbcstzUQsgbK0eP0RdoAS5wU-qSbbbA9U-pU,27751
|
123
123
|
alita_sdk/runtime/utils/AlitaCallback.py,sha256=E4LlSBuCHWiUq6W7IZExERHZY0qcmdjzc_rJlF2iQIw,7356
|
124
124
|
alita_sdk/runtime/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
125
125
|
alita_sdk/runtime/utils/constants.py,sha256=Xntx1b_uxUzT4clwqHA_U6K8y5bBqf_4lSQwXdcWrp4,13586
|
@@ -131,7 +131,7 @@ alita_sdk/runtime/utils/toolkit_runtime.py,sha256=MU63Fpxj0b5_r1IUUc0Q3-PN9VwL7r
|
|
131
131
|
alita_sdk/runtime/utils/toolkit_utils.py,sha256=I9QFqnaqfVgN26LUr6s3XlBlG6y0CoHURnCzG7XcwVs,5311
|
132
132
|
alita_sdk/runtime/utils/utils.py,sha256=VXNLsdeTmf6snn9EtUyobv4yL-xzLhUcH8P_ORMifYc,675
|
133
133
|
alita_sdk/tools/__init__.py,sha256=8oFahbggsv8h7hEqqeQ4iF6g2m85Ki17iSeknviCNis,10613
|
134
|
-
alita_sdk/tools/base_indexer_toolkit.py,sha256=
|
134
|
+
alita_sdk/tools/base_indexer_toolkit.py,sha256=3s8YRx_ambQQXGOKdlt_sRqREbrzFgm9zCWgxWsPHMU,20155
|
135
135
|
alita_sdk/tools/elitea_base.py,sha256=EBCgrqfaHwyhq510svtDEB0i5pizazeIPHKD1acsKAk,33121
|
136
136
|
alita_sdk/tools/non_code_indexer_toolkit.py,sha256=v9uq1POE1fQKCd152mbqDtF-HSe0qoDj83k4E5LAkMI,1080
|
137
137
|
alita_sdk/tools/ado/__init__.py,sha256=u2tdDgufGuDb-7lIgKKQlqgStL9Wd1gzNmRNYems2c0,1267
|
@@ -233,7 +233,7 @@ alita_sdk/tools/custom_open_api/api_wrapper.py,sha256=sDSFpvEqpSvXHGiBISdQQcUecf
|
|
233
233
|
alita_sdk/tools/elastic/__init__.py,sha256=iwnSRppRpzvJ1da2K3Glu8Uu41MhBDCYbguboLkEbW0,2818
|
234
234
|
alita_sdk/tools/elastic/api_wrapper.py,sha256=pl8CqQxteJAGwyOhMcld-ZgtOTFwwbv42OITQVe8rM0,1948
|
235
235
|
alita_sdk/tools/figma/__init__.py,sha256=hfe7FxMCCKnHNUdj9dCLuCu69pabBq6OmmlxODBXqzc,4410
|
236
|
-
alita_sdk/tools/figma/api_wrapper.py,sha256=
|
236
|
+
alita_sdk/tools/figma/api_wrapper.py,sha256=HCOl8upJl5_yjtrgy0A8mEWVkqIq5oPzUCJAlNfyPzc,25856
|
237
237
|
alita_sdk/tools/github/__init__.py,sha256=2LLkgtm8mp5e1vlgx2VtPiUlV95iCeYLOXdWVz1kXP0,5092
|
238
238
|
alita_sdk/tools/github/api_wrapper.py,sha256=uDwYckdnpYRJtb0uZnDkaz2udvdDLVxuCh1tSwspsiU,8411
|
239
239
|
alita_sdk/tools/github/github_client.py,sha256=nxnSXsDul2PPbWvYZS8TmAFFmR-5ALyakNoV5LN2D4U,86617
|
@@ -241,7 +241,7 @@ alita_sdk/tools/github/graphql_client_wrapper.py,sha256=d3AGjzLGH_hdQV2V8HeAX92d
|
|
241
241
|
alita_sdk/tools/github/schemas.py,sha256=yFsqivfjCPRk9GxFJrL8sTz6nnjFCZ0j5DIfPtGSsvA,13852
|
242
242
|
alita_sdk/tools/github/tool.py,sha256=Jnnv5lenV5ds8AAdyo2m8hSzyJ117HZBjzHC6T1ck-M,1037
|
243
243
|
alita_sdk/tools/github/tool_prompts.py,sha256=y6ZW_FpUCE87Uop3WuQAZVRnzxO5t7xjBOI5bCqiluw,30194
|
244
|
-
alita_sdk/tools/gitlab/__init__.py,sha256=
|
244
|
+
alita_sdk/tools/gitlab/__init__.py,sha256=_ZmoZaaxJ9qmkTSZ8xsAiXMqR075GHvW1w6USvEyKf8,4478
|
245
245
|
alita_sdk/tools/gitlab/api_wrapper.py,sha256=x2AdR4CkqnMPxVOWwIAgxXuQuzel58drz8m2jyf2R0M,21833
|
246
246
|
alita_sdk/tools/gitlab/tools.py,sha256=vOGTlSaGaFmWn6LS6YFP-FuTqUPun9vnv1VrUcUHAZQ,16500
|
247
247
|
alita_sdk/tools/gitlab/utils.py,sha256=Z2XiqIg54ouqqt1to-geFybmkCb1I6bpE91wfnINH1I,2320
|
@@ -322,7 +322,7 @@ alita_sdk/tools/sql/models.py,sha256=AKJgSl_kEEz4fZfw3kbvdGHXaRZ-yiaqfJOB6YOj3i0
|
|
322
322
|
alita_sdk/tools/testio/__init__.py,sha256=-4pEdEv0xfXml5bn8Nij28D5o9Y8hDllYoXfPeJ6os4,2699
|
323
323
|
alita_sdk/tools/testio/api_wrapper.py,sha256=BvmL5h634BzG6p7ajnQLmj-uoAw1gjWnd4FHHu1h--Q,21638
|
324
324
|
alita_sdk/tools/testrail/__init__.py,sha256=0kETjWKLU7R6mugBWsjwEUsh10pipbAeNSGJAO0FBh0,4634
|
325
|
-
alita_sdk/tools/testrail/api_wrapper.py,sha256=
|
325
|
+
alita_sdk/tools/testrail/api_wrapper.py,sha256=ipxsnlBCLQb3GHdVS_7mbpKe7haSw21PlSv2s_scu6Y,32650
|
326
326
|
alita_sdk/tools/utils/__init__.py,sha256=155xepXPr4OEzs2Mz5YnjXcBpxSv1X2eznRUVoPtyK0,3268
|
327
327
|
alita_sdk/tools/utils/available_tools_decorator.py,sha256=IbrdfeQkswxUFgvvN7-dyLMZMyXLiwvX7kgi3phciCk,273
|
328
328
|
alita_sdk/tools/utils/content_parser.py,sha256=KM6K37VLAAvzwvoHFpJBoRB5d7w6z3mZC-u01n0IpDQ,12036
|
@@ -336,19 +336,19 @@ alita_sdk/tools/zephyr/Zephyr.py,sha256=ODZbg9Aw0H0Rbv-HcDXLI4KHbPiLDHoteDofshw9
|
|
336
336
|
alita_sdk/tools/zephyr/__init__.py,sha256=8B2Ibz5QTmB5WkV0q8Sq4kuj92FFaFWZLrT877zRRLg,2897
|
337
337
|
alita_sdk/tools/zephyr/api_wrapper.py,sha256=lJCYPG03ej0qgdpLflnS7LFB4HSAfGzIvTjAJt07CQs,6244
|
338
338
|
alita_sdk/tools/zephyr/rest_client.py,sha256=7vSD3oYIX-3KbAFed-mphSQif_VRuXrq5O07ryNQ7Pk,6208
|
339
|
-
alita_sdk/tools/zephyr_enterprise/__init__.py,sha256=
|
339
|
+
alita_sdk/tools/zephyr_enterprise/__init__.py,sha256=IoWQPH2lf2Yuj2ejZ74818JTXdrMoh_ZxAJORukYODU,4172
|
340
340
|
alita_sdk/tools/zephyr_enterprise/api_wrapper.py,sha256=km2TYNu5ppRkspN1PyYetu6iBGj-xKVIwGHty1r_wAw,11552
|
341
341
|
alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py,sha256=hV9LIrYfJT6oYp-ZfQR0YHflqBFPsUw2Oc55HwK0H48,6809
|
342
342
|
alita_sdk/tools/zephyr_essential/__init__.py,sha256=2SymL6TIF1ad52w5DTtWaYvNygEvE1ssNNeKx3Y-_Zg,3980
|
343
|
-
alita_sdk/tools/zephyr_essential/api_wrapper.py,sha256=
|
343
|
+
alita_sdk/tools/zephyr_essential/api_wrapper.py,sha256=PN8KbNBzbsjgkdpyogav1cmwIwu_6dGh0EA2mAm2U68,40685
|
344
344
|
alita_sdk/tools/zephyr_essential/client.py,sha256=bfNcUKNqj9MFWTludGbbqD4qZlxrBaC2JtWsCfZMqSY,9722
|
345
345
|
alita_sdk/tools/zephyr_scale/__init__.py,sha256=eetAVRclO1j_N0T3mRnWeLfi3BS98i5FwhNReXO0PlE,4289
|
346
346
|
alita_sdk/tools/zephyr_scale/api_wrapper.py,sha256=HOt9ShtJI_1tVPcwd3Rwk-VS0SMLqcPNYbN1wqfeuhc,78330
|
347
347
|
alita_sdk/tools/zephyr_squad/__init__.py,sha256=0AI_j27xVO5Gk5HQMFrqPTd4uvuVTpiZUicBrdfEpKg,2796
|
348
348
|
alita_sdk/tools/zephyr_squad/api_wrapper.py,sha256=kmw_xol8YIYFplBLWTqP_VKPRhL_1ItDD0_vXTe_UuI,14906
|
349
349
|
alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py,sha256=R371waHsms4sllHCbijKYs90C-9Yu0sSR3N4SUfQOgU,5066
|
350
|
-
alita_sdk-0.3.
|
351
|
-
alita_sdk-0.3.
|
352
|
-
alita_sdk-0.3.
|
353
|
-
alita_sdk-0.3.
|
354
|
-
alita_sdk-0.3.
|
350
|
+
alita_sdk-0.3.285.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
351
|
+
alita_sdk-0.3.285.dist-info/METADATA,sha256=JOmBj0_w0BPc-oEiTT1uTr0SuYJnjdSrcg6AMf4r0aI,18897
|
352
|
+
alita_sdk-0.3.285.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
353
|
+
alita_sdk-0.3.285.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
|
354
|
+
alita_sdk-0.3.285.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|