alita-sdk 0.3.290__py3-none-any.whl → 0.3.292__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/configurations/github.py +65 -1
- alita_sdk/configurations/zephyr_essential.py +3 -1
- alita_sdk/runtime/langchain/document_loaders/AlitaMarkdownLoader.py +66 -0
- alita_sdk/runtime/langchain/document_loaders/AlitaPDFLoader.py +5 -2
- alita_sdk/runtime/langchain/document_loaders/constants.py +2 -1
- alita_sdk/tools/ado/repos/repos_wrapper.py +1 -0
- alita_sdk/tools/jira/api_wrapper.py +12 -10
- alita_sdk/tools/utils/content_parser.py +20 -3
- alita_sdk/tools/vector_adapters/VectorStoreAdapter.py +7 -1
- alita_sdk/tools/xray/api_wrapper.py +8 -14
- alita_sdk/tools/zephyr_enterprise/api_wrapper.py +8 -1
- alita_sdk/tools/zephyr_essential/api_wrapper.py +192 -25
- alita_sdk/tools/zephyr_essential/client.py +6 -4
- alita_sdk/tools/zephyr_scale/api_wrapper.py +7 -1
- {alita_sdk-0.3.290.dist-info → alita_sdk-0.3.292.dist-info}/METADATA +1 -1
- {alita_sdk-0.3.290.dist-info → alita_sdk-0.3.292.dist-info}/RECORD +19 -18
- {alita_sdk-0.3.290.dist-info → alita_sdk-0.3.292.dist-info}/WHEEL +0 -0
- {alita_sdk-0.3.290.dist-info → alita_sdk-0.3.292.dist-info}/licenses/LICENSE +0 -0
- {alita_sdk-0.3.290.dist-info → alita_sdk-0.3.292.dist-info}/top_level.txt +0 -0
@@ -84,4 +84,68 @@ class GithubConfiguration(BaseModel):
|
|
84
84
|
"Authentication is misconfigured: provide either Token (access_token), "
|
85
85
|
"Password (username + password), App private key (app_id + app_private_key), "
|
86
86
|
"or leave all blank for anonymous access."
|
87
|
-
)
|
87
|
+
)
|
88
|
+
|
89
|
+
@staticmethod
|
90
|
+
def check_connection(settings: dict) -> str | None:
|
91
|
+
"""
|
92
|
+
Check GitHub connection using provided settings.
|
93
|
+
Returns None if connection is successful, error message otherwise.
|
94
|
+
"""
|
95
|
+
import requests
|
96
|
+
from requests.auth import HTTPBasicAuth
|
97
|
+
import jwt
|
98
|
+
import time
|
99
|
+
|
100
|
+
base_url = settings.get('base_url', 'https://api.github.com')
|
101
|
+
access_token = settings.get('access_token')
|
102
|
+
username = settings.get('username')
|
103
|
+
password = settings.get('password')
|
104
|
+
app_id = settings.get('app_id')
|
105
|
+
app_private_key = settings.get('app_private_key')
|
106
|
+
|
107
|
+
# if all auth methods are None or empty, allow anonymous access
|
108
|
+
if not any([access_token, (username and password), (app_id and app_private_key)]):
|
109
|
+
return None
|
110
|
+
|
111
|
+
headers = {'Accept': 'application/vnd.github.v3+json'}
|
112
|
+
auth = None
|
113
|
+
|
114
|
+
try:
|
115
|
+
# Determine authentication method
|
116
|
+
if access_token:
|
117
|
+
headers['Authorization'] = f'token {access_token}'
|
118
|
+
elif username and password:
|
119
|
+
auth = HTTPBasicAuth(username, password)
|
120
|
+
elif app_id and app_private_key:
|
121
|
+
# Generate JWT for GitHub App authentication
|
122
|
+
payload = {
|
123
|
+
'iat': int(time.time()),
|
124
|
+
'exp': int(time.time()) + 600, # 10 minutes
|
125
|
+
'iss': app_id
|
126
|
+
}
|
127
|
+
jwt_token = jwt.encode(payload, app_private_key, algorithm='RS256')
|
128
|
+
headers['Authorization'] = f'Bearer {jwt_token}'
|
129
|
+
|
130
|
+
# Test connection with user endpoint
|
131
|
+
response = requests.get(f'{base_url}/user', headers=headers, auth=auth, timeout=10)
|
132
|
+
|
133
|
+
if response.status_code == 200:
|
134
|
+
return None
|
135
|
+
elif response.status_code == 401:
|
136
|
+
return "Authentication failed: Invalid credentials"
|
137
|
+
elif response.status_code == 403:
|
138
|
+
return "Access forbidden: Check your permissions"
|
139
|
+
elif response.status_code == 404:
|
140
|
+
return "GitHub API endpoint not found"
|
141
|
+
else:
|
142
|
+
return f"Connection failed with status {response.status_code}: {response.text}"
|
143
|
+
|
144
|
+
except requests.exceptions.ConnectionError:
|
145
|
+
return "Connection error: Unable to reach GitHub API"
|
146
|
+
except requests.exceptions.Timeout:
|
147
|
+
return "Connection timeout: GitHub API did not respond in time"
|
148
|
+
except jwt.InvalidKeyError:
|
149
|
+
return "Invalid private key format for GitHub App authentication"
|
150
|
+
except Exception as e:
|
151
|
+
return f"Unexpected error: {str(e)}"
|
@@ -1,3 +1,5 @@
|
|
1
|
+
from typing import Optional
|
2
|
+
|
1
3
|
from pydantic import BaseModel, ConfigDict, Field, SecretStr
|
2
4
|
|
3
5
|
|
@@ -14,5 +16,5 @@ class ZephyrEssentialConfiguration(BaseModel):
|
|
14
16
|
}
|
15
17
|
}
|
16
18
|
)
|
17
|
-
base_url: str = Field(description="Zephyr Essential Base URL")
|
19
|
+
base_url: Optional[str] = Field(description="Zephyr Essential API Base URL", default=None)
|
18
20
|
token: SecretStr = Field(description="Zephyr Essential API Token")
|
@@ -0,0 +1,66 @@
|
|
1
|
+
from pathlib import Path
|
2
|
+
from typing import Any, List, Union, Generator, Iterator
|
3
|
+
from langchain_core.documents import Document
|
4
|
+
|
5
|
+
from langchain_community.document_loaders.unstructured import (
|
6
|
+
UnstructuredFileLoader,
|
7
|
+
validate_unstructured_version,
|
8
|
+
)
|
9
|
+
|
10
|
+
class AlitaMarkdownLoader(UnstructuredFileLoader):
|
11
|
+
|
12
|
+
def __init__(
|
13
|
+
self,
|
14
|
+
file_path: Union[str, Path],
|
15
|
+
mode: str = "elements",
|
16
|
+
chunker_config: dict = None,
|
17
|
+
**unstructured_kwargs: Any,
|
18
|
+
):
|
19
|
+
"""
|
20
|
+
Args:
|
21
|
+
file_path: The path to the Markdown file to load.
|
22
|
+
mode: The mode to use when loading the file. Can be one of "single",
|
23
|
+
"multi", or "all". Default is "single".
|
24
|
+
chunker_config: Configuration dictionary for the markdown chunker.
|
25
|
+
**unstructured_kwargs: Any kwargs to pass to the unstructured.
|
26
|
+
"""
|
27
|
+
file_path = str(file_path)
|
28
|
+
validate_unstructured_version("0.4.16")
|
29
|
+
self.chunker_config = chunker_config or {
|
30
|
+
"strip_header": False,
|
31
|
+
"return_each_line": False,
|
32
|
+
"headers_to_split_on": [],
|
33
|
+
"max_tokens": 512,
|
34
|
+
"token_overlap": 10,
|
35
|
+
}
|
36
|
+
super().__init__(file_path=file_path, mode=mode, **unstructured_kwargs)
|
37
|
+
|
38
|
+
def _file_content_generator(self) -> Generator[Document, None, None]:
|
39
|
+
"""
|
40
|
+
Creates a generator that yields a single Document object
|
41
|
+
representing the entire content of the Markdown file.
|
42
|
+
"""
|
43
|
+
with open(self.file_path, "r", encoding="utf-8") as file:
|
44
|
+
content = file.read()
|
45
|
+
yield Document(page_content=content, metadata={"source": self.file_path})
|
46
|
+
|
47
|
+
def _get_elements(self) -> List[Document]:
|
48
|
+
"""
|
49
|
+
Processes the Markdown file using the markdown_chunker and returns the chunks.
|
50
|
+
"""
|
51
|
+
from alita_sdk.tools.chunkers.sematic.markdown_chunker import markdown_chunker
|
52
|
+
|
53
|
+
# Create a generator for the file content
|
54
|
+
file_content_generator = self._file_content_generator()
|
55
|
+
|
56
|
+
# Use the markdown_chunker to process the content
|
57
|
+
chunks = markdown_chunker(file_content_generator, config=self.chunker_config)
|
58
|
+
|
59
|
+
# Convert the generator to a list of Document objects
|
60
|
+
return list(chunks)
|
61
|
+
|
62
|
+
def lazy_load(self) -> Iterator[Document]:
|
63
|
+
"""Load file."""
|
64
|
+
elements = self._get_elements()
|
65
|
+
self._post_process_elements(elements)
|
66
|
+
yield from elements
|
@@ -67,10 +67,13 @@ class AlitaPDFLoader:
|
|
67
67
|
return self._load_docs()
|
68
68
|
|
69
69
|
def _load_docs(self):
|
70
|
-
|
70
|
+
docs = PyPDFLoader(file_path=self.file_path,
|
71
71
|
password=self.password,
|
72
72
|
headers=self.headers,
|
73
73
|
extract_images=self.extract_images,
|
74
74
|
extraction_mode=self.extraction_mode,
|
75
75
|
images_parser=ImageParser(llm=self.llm, prompt=self.prompt),
|
76
|
-
extraction_kwargs=self.extraction_kwargs).load()
|
76
|
+
extraction_kwargs=self.extraction_kwargs).load()
|
77
|
+
for doc in docs:
|
78
|
+
doc.metadata['chunk_id'] = doc.metadata['page']
|
79
|
+
return docs
|
@@ -25,6 +25,7 @@ from .AlitaJSONLoader import AlitaJSONLoader
|
|
25
25
|
from .AlitaPDFLoader import AlitaPDFLoader
|
26
26
|
from .AlitaPowerPointLoader import AlitaPowerPointLoader
|
27
27
|
from .AlitaTextLoader import AlitaTextLoader
|
28
|
+
from .AlitaMarkdownLoader import AlitaMarkdownLoader
|
28
29
|
|
29
30
|
loaders_map = {
|
30
31
|
'.png': {
|
@@ -96,7 +97,7 @@ loaders_map = {
|
|
96
97
|
'allowed_to_override': ['max_tokens']
|
97
98
|
},
|
98
99
|
'.md': {
|
99
|
-
'class':
|
100
|
+
'class': AlitaMarkdownLoader,
|
100
101
|
'is_multimodal_processing': False,
|
101
102
|
'kwargs': {},
|
102
103
|
'allowed_to_override': ['max_tokens']
|
@@ -159,6 +159,7 @@ class ArgsSchema(Enum):
|
|
159
159
|
Field(
|
160
160
|
description="""List of comments, where each comment is a dictionary specifying details about the comment,
|
161
161
|
e.g. [{'file_path': 'src/main.py', 'comment_text': 'Logic needs improvement', 'right_line': 20}]""",
|
162
|
+
default=None,
|
162
163
|
examples=[
|
163
164
|
{
|
164
165
|
"file_path": "src/main.py",
|
@@ -18,7 +18,7 @@ from ..llm.img_utils import ImageDescriptionCache
|
|
18
18
|
from ..non_code_indexer_toolkit import NonCodeIndexerToolkit
|
19
19
|
from ..utils import is_cookie_token, parse_cookie_string
|
20
20
|
from ..utils.available_tools_decorator import extend_with_parent_available_tools
|
21
|
-
from ..utils.content_parser import
|
21
|
+
from ..utils.content_parser import file_extension_by_chunker
|
22
22
|
from ...runtime.utils.utils import IndexerKeywords
|
23
23
|
|
24
24
|
logger = logging.getLogger(__name__)
|
@@ -1262,6 +1262,7 @@ class JiraApiWrapper(NonCodeIndexerToolkit):
|
|
1262
1262
|
self._include_attachments = kwargs.get('include_attachments', False)
|
1263
1263
|
self._included_fields = fields_to_extract.copy() if fields_to_extract else []
|
1264
1264
|
self._include_comments = kwargs.get('include_comments', True)
|
1265
|
+
self._chunking_tool = kwargs.get('chunking_tool', None)
|
1265
1266
|
|
1266
1267
|
try:
|
1267
1268
|
# Prepare fields to extract
|
@@ -1313,7 +1314,8 @@ class JiraApiWrapper(NonCodeIndexerToolkit):
|
|
1313
1314
|
doc.page_content,
|
1314
1315
|
attachment_resolver),
|
1315
1316
|
doc.page_content)
|
1316
|
-
doc.
|
1317
|
+
doc.metadata[IndexerKeywords.CONTENT_IN_BYTES.value] = processed_content.encode('utf-8')
|
1318
|
+
doc.metadata[IndexerKeywords.CONTENT_FILE_NAME.value] = f"base_doc{file_extension_by_chunker(self._chunking_tool)}"
|
1317
1319
|
yield doc
|
1318
1320
|
|
1319
1321
|
def _process_document(self, base_document: Document) -> Generator[Document, None, None]:
|
@@ -1337,13 +1339,11 @@ class JiraApiWrapper(NonCodeIndexerToolkit):
|
|
1337
1339
|
except Exception as e:
|
1338
1340
|
logger.error(f"Failed to download attachment {attachment['filename']} for issue {issue_key}: {str(e)}")
|
1339
1341
|
attachment_content = self._client.get(path=f"secure/attachment/{attachment['id']}/{attachment['filename']}", not_json_response=True)
|
1340
|
-
|
1341
|
-
|
1342
|
-
|
1343
|
-
|
1344
|
-
|
1345
|
-
metadata={
|
1346
|
-
**doc.metadata,
|
1342
|
+
|
1343
|
+
yield Document(page_content='',
|
1344
|
+
metadata={
|
1345
|
+
IndexerKeywords.CONTENT_IN_BYTES.value: attachment_content,
|
1346
|
+
IndexerKeywords.CONTENT_FILE_NAME.value: attachment['filename'],
|
1347
1347
|
'id': attachment_id,
|
1348
1348
|
'issue_key': issue_key,
|
1349
1349
|
'source': f"{self.base_url}/browse/{issue_key}",
|
@@ -1358,8 +1358,10 @@ class JiraApiWrapper(NonCodeIndexerToolkit):
|
|
1358
1358
|
comments = self.get_processed_comments_list_with_image_description(issue_key)
|
1359
1359
|
if comments:
|
1360
1360
|
for comment in comments:
|
1361
|
-
yield Document(page_content=
|
1361
|
+
yield Document(page_content='',
|
1362
1362
|
metadata={
|
1363
|
+
IndexerKeywords.CONTENT_IN_BYTES.value: comment.get('processed_content').encode('utf-8'),
|
1364
|
+
IndexerKeywords.CONTENT_FILE_NAME.value: "comment.md",
|
1363
1365
|
'id': comment.get('id'),
|
1364
1366
|
'issue_key': issue_key,
|
1365
1367
|
'source': f"{self.base_url}/browse/{issue_key}",
|
@@ -234,12 +234,29 @@ def process_content_by_type(document: Document, content, extension_source: str,
|
|
234
234
|
if chunking_config and (users_config_for_extension := chunking_config.get(extension, {})):
|
235
235
|
for key in set(users_config_for_extension.keys()) & set(allowed_to_override):
|
236
236
|
loader_kwargs[key] = users_config_for_extension[key]
|
237
|
-
|
237
|
+
loader_kwargs['llm'] = llm
|
238
|
+
loader_kwargs['prompt'] = image_processing_prompt
|
238
239
|
loader = loader_cls(file_path=temp_file_path, **loader_kwargs)
|
239
|
-
|
240
|
+
counter = 1
|
241
|
+
try:
|
242
|
+
chunks = loader.load()
|
243
|
+
except Exception as e:
|
244
|
+
msg = f"Error during content for file {temp_file_path}:\n{e}"
|
245
|
+
logger.warning(msg)
|
246
|
+
yield Document(
|
247
|
+
page_content=msg,
|
248
|
+
metadata={**document.metadata, 'chunk_id':1}
|
249
|
+
)
|
250
|
+
return
|
251
|
+
for chunk in chunks:
|
252
|
+
if 'chunk_id' not in chunk.metadata:
|
253
|
+
chunk.metadata['chunk_id'] = counter
|
254
|
+
document_metadata = document.metadata.copy()
|
255
|
+
document_metadata['id'] = f"{document.metadata['id']}_{chunk.metadata['chunk_id']}"
|
256
|
+
counter+=1
|
240
257
|
yield Document(
|
241
258
|
page_content=sanitize_for_postgres(chunk.page_content),
|
242
|
-
metadata={**
|
259
|
+
metadata={**document_metadata, **chunk.metadata}
|
243
260
|
)
|
244
261
|
finally:
|
245
262
|
if temp_file_path and os.path.exists(temp_file_path):
|
@@ -53,10 +53,16 @@ class PGVectorAdapter(VectorStoreAdapter):
|
|
53
53
|
"""Adapter for PGVector database operations."""
|
54
54
|
|
55
55
|
def get_vectorstore_params(self, collection_name: str, connection_string: Optional[str] = None) -> Dict[str, Any]:
|
56
|
+
try:
|
57
|
+
from tools import this # pylint: disable=E0401,C0415
|
58
|
+
worker_config = this.for_module("indexer_worker").descriptor.config
|
59
|
+
except: # pylint: disable=W0702
|
60
|
+
worker_config = {}
|
61
|
+
#
|
56
62
|
return {
|
57
63
|
"use_jsonb": True,
|
58
64
|
"collection_name": collection_name,
|
59
|
-
"create_extension": True,
|
65
|
+
"create_extension": worker_config.get("pgvector_create_extension", True),
|
60
66
|
"alita_sdk_options": {
|
61
67
|
"target_schema": collection_name,
|
62
68
|
},
|
@@ -16,7 +16,7 @@ from ..elitea_base import (
|
|
16
16
|
from ..non_code_indexer_toolkit import NonCodeIndexerToolkit
|
17
17
|
from ..utils.available_tools_decorator import extend_with_parent_available_tools
|
18
18
|
from ...runtime.utils.utils import IndexerKeywords
|
19
|
-
from ..utils.content_parser import
|
19
|
+
from ..utils.content_parser import file_extension_by_chunker
|
20
20
|
|
21
21
|
try:
|
22
22
|
from alita_sdk.runtime.langchain.interfaces.llm_processor import get_embeddings
|
@@ -109,7 +109,7 @@ XrayCreateTest = create_model(
|
|
109
109
|
|
110
110
|
XrayCreateTests = create_model(
|
111
111
|
"XrayCreateTests",
|
112
|
-
graphql_mutations=(
|
112
|
+
graphql_mutations=(List[str], Field(description="list of GraphQL mutations:\n" + _graphql_mutation_description))
|
113
113
|
)
|
114
114
|
|
115
115
|
def _parse_tests(test_results) -> List[Any]:
|
@@ -417,7 +417,9 @@ class XrayApiWrapper(NonCodeIndexerToolkit):
|
|
417
417
|
if attachments_data:
|
418
418
|
metadata["_attachments_data"] = attachments_data
|
419
419
|
|
420
|
-
|
420
|
+
metadata[IndexerKeywords.CONTENT_IN_BYTES.value] = page_content.encode('utf-8')
|
421
|
+
metadata[IndexerKeywords.CONTENT_FILE_NAME.value] = f"base_doc{file_extension_by_chunker(kwargs['chunking_tool'])}"
|
422
|
+
yield Document(page_content='', metadata=metadata)
|
421
423
|
|
422
424
|
except Exception as e:
|
423
425
|
logger.error(f"Error processing test data: {e}")
|
@@ -559,17 +561,9 @@ class XrayApiWrapper(NonCodeIndexerToolkit):
|
|
559
561
|
logger.error(f"Error processing attachment: {e}")
|
560
562
|
|
561
563
|
def _load_attachment(self, content, file_name, attachment_metadata) -> Generator[Document, None, None]:
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
if not content_docs or isinstance(content_docs, ToolException):
|
566
|
-
return
|
567
|
-
for doc in content_docs:
|
568
|
-
yield Document(page_content=doc.page_content,
|
569
|
-
metadata={
|
570
|
-
**doc.metadata,
|
571
|
-
**attachment_metadata
|
572
|
-
})
|
564
|
+
attachment_metadata[IndexerKeywords.CONTENT_IN_BYTES.value] = content
|
565
|
+
attachment_metadata[IndexerKeywords.CONTENT_FILE_NAME.value] = file_name
|
566
|
+
yield Document(page_content='', metadata=attachment_metadata)
|
573
567
|
|
574
568
|
def _index_tool_params(self, **kwargs) -> dict[str, tuple[type, Field]]:
|
575
569
|
return {
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import json
|
1
2
|
import logging
|
2
3
|
from typing import Optional, List, Generator, Literal
|
3
4
|
|
@@ -8,6 +9,8 @@ from langchain_core.documents import Document
|
|
8
9
|
from .zephyr_enterprise import ZephyrClient
|
9
10
|
from ..non_code_indexer_toolkit import NonCodeIndexerToolkit
|
10
11
|
from ..utils.available_tools_decorator import extend_with_parent_available_tools
|
12
|
+
from ..utils.content_parser import file_extension_by_chunker
|
13
|
+
from ...runtime.utils.utils import IndexerKeywords
|
11
14
|
|
12
15
|
logger = logging.getLogger(__name__)
|
13
16
|
|
@@ -157,6 +160,7 @@ class ZephyrApiWrapper(NonCodeIndexerToolkit):
|
|
157
160
|
}
|
158
161
|
|
159
162
|
def _base_loader(self, zql: str, **kwargs) -> Generator[Document, None, None]:
|
163
|
+
self._chunking_tool = kwargs.get('chunking_tool', None)
|
160
164
|
test_cases = self.get_testcases_by_zql(zql=zql, return_as_list=True)
|
161
165
|
for test_case in test_cases:
|
162
166
|
metadata = {
|
@@ -175,7 +179,10 @@ class ZephyrApiWrapper(NonCodeIndexerToolkit):
|
|
175
179
|
try:
|
176
180
|
id = document.metadata['id']
|
177
181
|
test_case_content = self.get_test_case_steps(id)
|
178
|
-
|
182
|
+
page_content = json.dumps(test_case_content)
|
183
|
+
document.metadata[IndexerKeywords.CONTENT_IN_BYTES.value] = page_content.encode('utf-8')
|
184
|
+
document.metadata[
|
185
|
+
IndexerKeywords.CONTENT_FILE_NAME.value] = f"base_doc{file_extension_by_chunker(self._chunking_tool)}"
|
179
186
|
except Exception as e:
|
180
187
|
logging.error(f"Failed to process document: {e}")
|
181
188
|
yield document
|
@@ -9,6 +9,8 @@ from langchain_core.tools import ToolException
|
|
9
9
|
|
10
10
|
from ..non_code_indexer_toolkit import NonCodeIndexerToolkit
|
11
11
|
from ..utils.available_tools_decorator import extend_with_parent_available_tools
|
12
|
+
from ..utils.content_parser import file_extension_by_chunker
|
13
|
+
from ...runtime.utils.utils import IndexerKeywords
|
12
14
|
|
13
15
|
|
14
16
|
class ZephyrEssentialApiWrapper(NonCodeIndexerToolkit):
|
@@ -270,6 +272,7 @@ class ZephyrEssentialApiWrapper(NonCodeIndexerToolkit):
|
|
270
272
|
}
|
271
273
|
|
272
274
|
def _base_loader(self, **kwargs) -> Generator[Document, None, None]:
|
275
|
+
self._chunking_tool = kwargs.get('chunking_tool', None)
|
273
276
|
try:
|
274
277
|
test_cases = self.list_test_cases()
|
275
278
|
except Exception as e:
|
@@ -291,7 +294,10 @@ class ZephyrEssentialApiWrapper(NonCodeIndexerToolkit):
|
|
291
294
|
additional_content = self._process_test_case(document.metadata['key'])
|
292
295
|
for steps_type, content in additional_content.items():
|
293
296
|
if content:
|
294
|
-
|
297
|
+
page_content = json.dumps(content)
|
298
|
+
document.metadata[IndexerKeywords.CONTENT_IN_BYTES.value] = page_content.encode('utf-8')
|
299
|
+
document.metadata[
|
300
|
+
IndexerKeywords.CONTENT_FILE_NAME.value] = f"base_doc{file_extension_by_chunker(self._chunking_tool)}"
|
295
301
|
document.metadata["steps_type"] = steps_type
|
296
302
|
except Exception as e:
|
297
303
|
logging.error(f"Failed to process document: {e}")
|
@@ -614,8 +620,74 @@ UpdateTestCase = create_model(
|
|
614
620
|
json=(str, Field(description=("""
|
615
621
|
JSON body to update a test case. Example:
|
616
622
|
{
|
617
|
-
"
|
618
|
-
"
|
623
|
+
"id": 1,
|
624
|
+
"key": "SA-T10",
|
625
|
+
"name": "Check axial pump",
|
626
|
+
"project": {
|
627
|
+
"id": 10005,
|
628
|
+
"self": "https://<api-base-url>/projects/10005"
|
629
|
+
},
|
630
|
+
"createdOn": "2018-05-15T13:15:13Z",
|
631
|
+
"objective": "To ensure the axial pump can be enabled",
|
632
|
+
"precondition": "Latest version of the axial pump available",
|
633
|
+
"estimatedTime": 138000,
|
634
|
+
"labels": [
|
635
|
+
"Regression",
|
636
|
+
"Performance",
|
637
|
+
"Automated"
|
638
|
+
],
|
639
|
+
"component": {
|
640
|
+
"id": 10001,
|
641
|
+
"self": "https://<jira-instance>.atlassian.net/rest/api/2/component/10001"
|
642
|
+
},
|
643
|
+
"priority": {
|
644
|
+
"id": 10002,
|
645
|
+
"self": "https://<api-base-url>/priorities/10002"
|
646
|
+
},
|
647
|
+
"status": {
|
648
|
+
"id": 10000,
|
649
|
+
"self": "https://<api-base-url>/statuses/10000"
|
650
|
+
},
|
651
|
+
"folder": {
|
652
|
+
"id": 100006,
|
653
|
+
"self": "https://<api-base-url>/folders/10006"
|
654
|
+
},
|
655
|
+
"owner": {
|
656
|
+
"self": "https://<jira-instance>.atlassian.net/rest/api/2/user?accountId=5b10a2844c20165700ede21g",
|
657
|
+
"accountId": "5b10a2844c20165700ede21g"
|
658
|
+
},
|
659
|
+
"testScript": {
|
660
|
+
"self": "https://<api-base-url>/testCases/PROJ-T1/testscript"
|
661
|
+
},
|
662
|
+
"customFields": {
|
663
|
+
"Build Number": 20,
|
664
|
+
"Release Date": "2020-01-01",
|
665
|
+
"Pre-Condition(s)": "User should have logged in. <br> User should have navigated to the administration panel.",
|
666
|
+
"Implemented": false,
|
667
|
+
"Category": [
|
668
|
+
"Performance",
|
669
|
+
"Regression"
|
670
|
+
],
|
671
|
+
"Tester": "fa2e582e-5e15-521e-92e3-47e6ca2e7256"
|
672
|
+
},
|
673
|
+
"links": {
|
674
|
+
"self": "string",
|
675
|
+
"issues": [
|
676
|
+
{
|
677
|
+
"self": "string",
|
678
|
+
"issueId": 10100,
|
679
|
+
"id": 1,
|
680
|
+
"target": "https://<jira-instance>.atlassian.net/rest/api/2/issue/10000",
|
681
|
+
"type": "COVERAGE"
|
682
|
+
}
|
683
|
+
],
|
684
|
+
"webLinks": [
|
685
|
+
{
|
686
|
+
"self": "string",
|
687
|
+
"description": "A link to atlassian.com",
|
688
|
+
"url": "https://atlassian.com",
|
689
|
+
"id": 1,
|
690
|
+
"type": "COVERAGE"
|
619
691
|
}
|
620
692
|
"""
|
621
693
|
)))
|
@@ -632,9 +704,9 @@ CreateTestCaseIssueLink = create_model(
|
|
632
704
|
json=(str, Field(description=("""
|
633
705
|
JSON body to create an issue link. Example:
|
634
706
|
{
|
635
|
-
"
|
636
|
-
"description": "Link Description"
|
707
|
+
"issueId": 10100
|
637
708
|
}
|
709
|
+
where issueId - Jira issue id
|
638
710
|
"""
|
639
711
|
)))
|
640
712
|
)
|
@@ -676,8 +748,10 @@ CreateTestCaseTestScript = create_model(
|
|
676
748
|
json=(str, Field(description=("""
|
677
749
|
JSON body to create a test script. Example:
|
678
750
|
{
|
679
|
-
"
|
751
|
+
"type": "bdd",
|
752
|
+
"text": "Attempt to login to the application"
|
680
753
|
}
|
754
|
+
Where type - Test script type. Allowed: plain, bdd
|
681
755
|
"""
|
682
756
|
)))
|
683
757
|
)
|
@@ -768,9 +842,71 @@ UpdateTestCycle = create_model(
|
|
768
842
|
json=(str, Field(description=("""
|
769
843
|
JSON body to update a test cycle. Example:
|
770
844
|
{
|
771
|
-
"
|
772
|
-
"
|
773
|
-
|
845
|
+
"id": 1,
|
846
|
+
"key": "SA-R40",
|
847
|
+
"name": "Sprint 1 Regression Test Cycle",
|
848
|
+
"project": {
|
849
|
+
"id": 10005,
|
850
|
+
"self": "https://<api-base-url>/projects/10005"
|
851
|
+
},
|
852
|
+
"jiraProjectVersion": {
|
853
|
+
"id": 10000,
|
854
|
+
"self": "https://<jira-instance>.atlassian.net/rest/api/2/version/10000"
|
855
|
+
},
|
856
|
+
"status": {
|
857
|
+
"id": 10000,
|
858
|
+
"self": "https://<api-base-url>/statuses/10000"
|
859
|
+
},
|
860
|
+
"folder": {
|
861
|
+
"id": 100006,
|
862
|
+
"self": "https://<api-base-url>/folders/10006"
|
863
|
+
},
|
864
|
+
"description": "Regression test cycle 1 to ensure no breaking changes",
|
865
|
+
"plannedStartDate": "2018-05-19T13:15:13Z",
|
866
|
+
"plannedEndDate": "2018-05-20T13:15:13Z",
|
867
|
+
"owner": {
|
868
|
+
"self": "https://<jira-instance>.atlassian.net/rest/api/2/user?accountId=5b10a2844c20165700ede21g",
|
869
|
+
"accountId": "5b10a2844c20165700ede21g"
|
870
|
+
},
|
871
|
+
"customFields": {
|
872
|
+
"Build Number": 20,
|
873
|
+
"Release Date": "2020-01-01",
|
874
|
+
"Pre-Condition(s)": "User should have logged in. <br> User should have navigated to the administration panel.",
|
875
|
+
"Implemented": false,
|
876
|
+
"Category": [
|
877
|
+
"Performance",
|
878
|
+
"Regression"
|
879
|
+
],
|
880
|
+
"Tester": "fa2e582e-5e15-521e-92e3-47e6ca2e7256"
|
881
|
+
},
|
882
|
+
"links": {
|
883
|
+
"self": "string",
|
884
|
+
"issues": [
|
885
|
+
{
|
886
|
+
"self": "string",
|
887
|
+
"issueId": 10100,
|
888
|
+
"id": 1,
|
889
|
+
"target": "https://<jira-instance>.atlassian.net/rest/api/2/issue/10000",
|
890
|
+
"type": "COVERAGE"
|
891
|
+
}
|
892
|
+
],
|
893
|
+
"webLinks": [
|
894
|
+
{
|
895
|
+
"self": "string",
|
896
|
+
"description": "A link to atlassian.com",
|
897
|
+
"url": "https://atlassian.com",
|
898
|
+
"id": 1,
|
899
|
+
"type": "COVERAGE"
|
900
|
+
}
|
901
|
+
],
|
902
|
+
"testPlans": [
|
903
|
+
{
|
904
|
+
"id": 1,
|
905
|
+
"self": "https://<api-base-url>/links/1",
|
906
|
+
"type": "RELATED",
|
907
|
+
"testPlanId": 2,
|
908
|
+
"target": "https://<jira-instance>.atlassian.net/rest/api/2/testplan/123"
|
909
|
+
}
|
774
910
|
"""
|
775
911
|
)))
|
776
912
|
)
|
@@ -786,9 +922,9 @@ CreateTestCycleIssueLink = create_model(
|
|
786
922
|
json=(str, Field(description=("""
|
787
923
|
JSON body to create an issue link. Example:
|
788
924
|
{
|
789
|
-
"
|
790
|
-
"description": "Link Description"
|
925
|
+
"issueId": 10100
|
791
926
|
}
|
927
|
+
where issueId - Jira issue id
|
792
928
|
"""
|
793
929
|
)))
|
794
930
|
)
|
@@ -820,10 +956,34 @@ CreateTestExecution = create_model(
|
|
820
956
|
json=(str, Field(description=("""
|
821
957
|
JSON body to create a test execution. Example:
|
822
958
|
{
|
823
|
-
"
|
824
|
-
"
|
825
|
-
"
|
826
|
-
|
959
|
+
"projectKey": "TIS",
|
960
|
+
"testCaseKey": "SA-T10",
|
961
|
+
"testCycleKey": "SA-R10",
|
962
|
+
"statusName": "In Progress",
|
963
|
+
"testScriptResults": [
|
964
|
+
{
|
965
|
+
"statusName": "In Progress",
|
966
|
+
"actualEndDate": "2018-05-20T13:15:13Z",
|
967
|
+
"actualResult": "User logged in successfully"
|
968
|
+
}
|
969
|
+
],
|
970
|
+
"environmentName": "Chrome Latest Version",
|
971
|
+
"actualEndDate": "2018-05-20T13:15:13Z",
|
972
|
+
"executionTime": 120000,
|
973
|
+
"executedById": "5b10a2844c20165700ede21g",
|
974
|
+
"assignedToId": "5b10a2844c20165700ede21g",
|
975
|
+
"comment": "Test failed user could not login",
|
976
|
+
"customFields": {
|
977
|
+
"Build Number": 20,
|
978
|
+
"Release Date": "2020-01-01",
|
979
|
+
"Pre-Condition(s)": "User should have logged in. <br> User should have navigated to the administration panel.",
|
980
|
+
"Implemented": false,
|
981
|
+
"Category": [
|
982
|
+
"Performance",
|
983
|
+
"Regression"
|
984
|
+
],
|
985
|
+
"Tester": "fa2e582e-5e15-521e-92e3-47e6ca2e7256"
|
986
|
+
}
|
827
987
|
"""
|
828
988
|
)))
|
829
989
|
)
|
@@ -839,8 +999,13 @@ UpdateTestExecution = create_model(
|
|
839
999
|
json=(str, Field(description=("""
|
840
1000
|
JSON body to update a test execution. Example:
|
841
1001
|
{
|
842
|
-
"
|
843
|
-
"
|
1002
|
+
"statusName": "In Progress",
|
1003
|
+
"environmentName": "Chrome Latest Version",
|
1004
|
+
"actualEndDate": "2018-05-20T13:15:13Z",
|
1005
|
+
"executionTime": 120000,
|
1006
|
+
"executedById": "5b10a2844c20165700ede21g",
|
1007
|
+
"assignedToId": "5b10a2844c20165700ede21g",
|
1008
|
+
"comment": "Test failed user could not login"
|
844
1009
|
}
|
845
1010
|
"""
|
846
1011
|
)))
|
@@ -858,12 +1023,14 @@ UpdateTestExecutionTestSteps = create_model(
|
|
858
1023
|
test_execution_id_or_key=(str, Field(description="ID or key of the test execution to update test steps for.")),
|
859
1024
|
json=(str, Field(description=("""
|
860
1025
|
"JSON body to update test steps. Example:
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
1026
|
+
{
|
1027
|
+
"steps": [
|
1028
|
+
{
|
1029
|
+
"actualResult": "User logged in successfully",
|
1030
|
+
"statusName": "In Progress"
|
1031
|
+
}
|
1032
|
+
]
|
1033
|
+
}
|
867
1034
|
"""
|
868
1035
|
)))
|
869
1036
|
)
|
@@ -884,9 +1051,9 @@ CreateTestExecutionIssueLink = create_model(
|
|
884
1051
|
json=(str, Field(description=("""
|
885
1052
|
JSON body to create an issue link. Example:
|
886
1053
|
{
|
887
|
-
"
|
888
|
-
"description": "Link Description"
|
1054
|
+
"issueId": 10100
|
889
1055
|
}
|
1056
|
+
where issueId - Jira issue id
|
890
1057
|
"""
|
891
1058
|
)))
|
892
1059
|
)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import requests
|
2
|
+
from langchain_core.tools import ToolException
|
2
3
|
|
3
4
|
class ZephyrEssentialAPI:
|
4
5
|
def __init__(self, base_url: str, token: str):
|
@@ -14,10 +15,11 @@ class ZephyrEssentialAPI:
|
|
14
15
|
})
|
15
16
|
try:
|
16
17
|
resp = requests.request(method=method, url=url, headers=headers, json=json, params=params, files=files)
|
17
|
-
resp.
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
if resp.status_code < 300:
|
19
|
+
if resp.headers.get("Content-Type", "").startswith("application/json"):
|
20
|
+
return resp.json()
|
21
|
+
return resp.text
|
22
|
+
return ToolException(f"Error performing request {method} {api_path}: {resp.content}")
|
21
23
|
except requests.RequestException as e:
|
22
24
|
raise Exception(f"Error performing request {method} {api_path}: {str(e)}")
|
23
25
|
|
@@ -12,6 +12,8 @@ from langchain_core.documents import Document
|
|
12
12
|
|
13
13
|
from ..non_code_indexer_toolkit import NonCodeIndexerToolkit
|
14
14
|
from ..utils.available_tools_decorator import extend_with_parent_available_tools
|
15
|
+
from ..utils.content_parser import file_extension_by_chunker
|
16
|
+
from ...runtime.utils.utils import IndexerKeywords
|
15
17
|
|
16
18
|
try:
|
17
19
|
from alita_sdk.runtime.langchain.interfaces.llm_processor import get_embeddings
|
@@ -1218,6 +1220,7 @@ class ZephyrScaleApiWrapper(NonCodeIndexerToolkit):
|
|
1218
1220
|
}
|
1219
1221
|
|
1220
1222
|
def _base_loader(self, project_key: str, jql: str, **kwargs) -> Generator[Document, None, None]:
|
1223
|
+
self._chunking_tool = kwargs.get('chunking_tool', None)
|
1221
1224
|
for test_case_doc in self._get_test_cases_docs(project_key, jql):
|
1222
1225
|
yield test_case_doc
|
1223
1226
|
for folder_doc in self._get_folders_docs(project_key):
|
@@ -1284,7 +1287,10 @@ class ZephyrScaleApiWrapper(NonCodeIndexerToolkit):
|
|
1284
1287
|
additional_content = self._process_test_case(document.metadata['key'])
|
1285
1288
|
for steps_type, content in additional_content.items():
|
1286
1289
|
if content:
|
1287
|
-
|
1290
|
+
page_content = json.dumps(content)
|
1291
|
+
document.metadata[IndexerKeywords.CONTENT_IN_BYTES.value] = page_content.encode('utf-8')
|
1292
|
+
document.metadata[
|
1293
|
+
IndexerKeywords.CONTENT_FILE_NAME.value] = f"base_doc{file_extension_by_chunker(self._chunking_tool)}"
|
1288
1294
|
document.metadata["steps_type"] = steps_type
|
1289
1295
|
except Exception as e:
|
1290
1296
|
logging.error(f"Failed to process document: {e}")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: alita_sdk
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.292
|
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
|
@@ -12,7 +12,7 @@ alita_sdk/configurations/confluence.py,sha256=mAW2fgSEOg-BAV768Sc6b_EuRA3H5UL9xf
|
|
12
12
|
alita_sdk/configurations/delta_lake.py,sha256=sCNDClaO6-b1Qv5WDxOMHjQUrHnr6S6EPQuS9o6q8Z8,1130
|
13
13
|
alita_sdk/configurations/embedding.py,sha256=8GSC8Feh8CH7bT_6cQhNqlS6raE91S2YRAtb2N9bUA8,552
|
14
14
|
alita_sdk/configurations/figma.py,sha256=vecZ20IyZgnFO2GdphkovYHMISRPcUYh7fxkUQsPwX8,1306
|
15
|
-
alita_sdk/configurations/github.py,sha256=
|
15
|
+
alita_sdk/configurations/github.py,sha256=6F7P9BPu9zE54q8m8IPjIct8cEX3WODYzZvn9WtxOXI,6283
|
16
16
|
alita_sdk/configurations/gitlab.py,sha256=0W35igIlue6QxOnPgw65ToLf4HSdPVuRyObdwQuEld8,1053
|
17
17
|
alita_sdk/configurations/google_places.py,sha256=jXhlPXywkDhHNrgB4KoVWogf3CVi1bY3wFLRzDqMr-E,589
|
18
18
|
alita_sdk/configurations/jira.py,sha256=ASh8I2iVXzOOtwjRX7kYNllXpCXyAIxFMP_YD4Q0PTI,1379
|
@@ -32,7 +32,7 @@ alita_sdk/configurations/testrail.py,sha256=k0fPmHBIrWAfEKhrDdB9Rdirw-UFHFoXkReP
|
|
32
32
|
alita_sdk/configurations/xray.py,sha256=_XCW5eGEAyhDuRvXCtTAZ24BGsIwzvIaeAZT10xoW6M,1147
|
33
33
|
alita_sdk/configurations/zephyr.py,sha256=ndqGYFy5OFxjoXB7DzC71rd5W6qGBGAlKMWoqT8TuNk,1653
|
34
34
|
alita_sdk/configurations/zephyr_enterprise.py,sha256=UaBk3qWcT2-bCzko5HEPvgxArw1ZpvOvwXwFYrIHZjM,710
|
35
|
-
alita_sdk/configurations/zephyr_essential.py,sha256=
|
35
|
+
alita_sdk/configurations/zephyr_essential.py,sha256=tUIrh-PRNvdrLBj6rJXqlF-h6oaMXUQI1wgit07kFBw,752
|
36
36
|
alita_sdk/runtime/__init__.py,sha256=4W0UF-nl3QF2bvET5lnah4o24CoTwSoKXhuN0YnwvEE,828
|
37
37
|
alita_sdk/runtime/clients/__init__.py,sha256=BdehU5GBztN1Qi1Wul0cqlU46FxUfMnI6Vq2Zd_oq1M,296
|
38
38
|
alita_sdk/runtime/clients/artifact.py,sha256=TPvROw1qu4IyUEGuf7x40IKRpb5eFZpYGN3-8LfQE0M,3461
|
@@ -61,14 +61,15 @@ alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py,sha256=5WXGcy
|
|
61
61
|
alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py,sha256=QwgBJE-BvOasjgT1hYHZc0MP0F_elirUjSzKixoM6fY,6610
|
62
62
|
alita_sdk/runtime/langchain/document_loaders/AlitaJSONLoader.py,sha256=1mGZjltnqsSXkp1Jw-lQroyNFiCPpjb9ZbdoqOlqPeU,3354
|
63
63
|
alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py,sha256=M2q3YThkps0yAZOjfoLcyE7qycVTYKcXEGtpmp0N6C8,10950
|
64
|
-
alita_sdk/runtime/langchain/document_loaders/
|
64
|
+
alita_sdk/runtime/langchain/document_loaders/AlitaMarkdownLoader.py,sha256=RGHDfleYTn7AAc3H-yFZrjm06L0Ux14ZtEJpFlVBNCA,2474
|
65
|
+
alita_sdk/runtime/langchain/document_loaders/AlitaPDFLoader.py,sha256=toXdQbT9TuBCdB4t62t2cPalBY_2RZy2lqKSMU7YVhw,3386
|
65
66
|
alita_sdk/runtime/langchain/document_loaders/AlitaPowerPointLoader.py,sha256=SKAAPo3DfMtRPxICKrPzlXXkC5RfaeiRj7lejLXTi7o,2337
|
66
67
|
alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py,sha256=CUVVnisxm7b5yZWV6rn0Q3MEEaO1GWNcfnz5yWz8T0k,13283
|
67
68
|
alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py,sha256=o0SRFPZ-VskltgThVRX80rT19qtB4gPzxED9SENTNWo,4145
|
68
69
|
alita_sdk/runtime/langchain/document_loaders/AlitaTextLoader.py,sha256=uNcV0En49_0u0RYB1sP1XfNspT2Xc5CacuJr9Jqv79Q,2972
|
69
70
|
alita_sdk/runtime/langchain/document_loaders/ImageParser.py,sha256=gao5yCCKdDai_Gx7YdEx5U6oMyJYzn69eYmEvWLh-fc,656
|
70
71
|
alita_sdk/runtime/langchain/document_loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
71
|
-
alita_sdk/runtime/langchain/document_loaders/constants.py,sha256=
|
72
|
+
alita_sdk/runtime/langchain/document_loaders/constants.py,sha256=xdZlVZhqWFrxYXTk5E7IOKLT7MowmMQSPoRjk0StQEw,5640
|
72
73
|
alita_sdk/runtime/langchain/document_loaders/utils.py,sha256=9xghESf3axBbwxATyVuS0Yu-TWe8zWZnXgCD1ZVyNW0,2414
|
73
74
|
alita_sdk/runtime/langchain/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
74
75
|
alita_sdk/runtime/langchain/interfaces/kwextractor.py,sha256=kSJA9L8g8UArmHu7Bd9dIO0Rrq86JPUb8RYNlnN68FQ,3072
|
@@ -137,7 +138,7 @@ alita_sdk/tools/non_code_indexer_toolkit.py,sha256=v9uq1POE1fQKCd152mbqDtF-HSe0q
|
|
137
138
|
alita_sdk/tools/ado/__init__.py,sha256=u2tdDgufGuDb-7lIgKKQlqgStL9Wd1gzNmRNYems2c0,1267
|
138
139
|
alita_sdk/tools/ado/utils.py,sha256=PTCludvaQmPLakF2EbCGy66Mro4-rjDtavVP-xcB2Wc,1252
|
139
140
|
alita_sdk/tools/ado/repos/__init__.py,sha256=n-IhKED05RwQGWT4LfCaxJ85uDyG4S9zTjSjK6A8N4o,5192
|
140
|
-
alita_sdk/tools/ado/repos/repos_wrapper.py,sha256=
|
141
|
+
alita_sdk/tools/ado/repos/repos_wrapper.py,sha256=y1wJZNhuoWaSkFsGU5Pct3LClc1xfgmgBy2u_dgBF-4,49769
|
141
142
|
alita_sdk/tools/ado/test_plan/__init__.py,sha256=4fEw_3cm4shuZ868HhAU-uMH3xNXPyb3uRjyNWoBKls,5243
|
142
143
|
alita_sdk/tools/ado/test_plan/test_plan_wrapper.py,sha256=p3mbBiu0jthZG-Bj2-duO7DDZQ4LHYZ6Q1nOVd-KTrc,21944
|
143
144
|
alita_sdk/tools/ado/wiki/__init__.py,sha256=uBKo_Meu2ZxMxcxGsMmvCXyplRE2um1_PIRvdYd37rM,5171
|
@@ -258,7 +259,7 @@ alita_sdk/tools/google/bigquery/tool.py,sha256=Esf9Hsp8I0e7-5EdkFqQ-bid0cfrg-bfS
|
|
258
259
|
alita_sdk/tools/google_places/__init__.py,sha256=Tg_dfKTc0qxcG-1HVuQQB11PYph2RDWSUVhrlgxqk64,3491
|
259
260
|
alita_sdk/tools/google_places/api_wrapper.py,sha256=7nZly6nk4f4Tm7s2MVdnnwlb-1_WHRrDhyjDiqoyPjA,4674
|
260
261
|
alita_sdk/tools/jira/__init__.py,sha256=0NJikFWEqK8DSohXPUYD4iDLJFS8btxhqQ60acWwC3k,6063
|
261
|
-
alita_sdk/tools/jira/api_wrapper.py,sha256=
|
262
|
+
alita_sdk/tools/jira/api_wrapper.py,sha256=Cm9sULiw4Til6wmhsVM3-IIUAMkRVbWdRsScEUYHss4,79260
|
262
263
|
alita_sdk/tools/keycloak/__init__.py,sha256=0WB9yXMUUAHQRni1ghDEmd7GYa7aJPsTVlZgMCM9cQ0,3050
|
263
264
|
alita_sdk/tools/keycloak/api_wrapper.py,sha256=cOGr0f3S3-c6tRDBWI8wMnetjoNSxiV5rvC_0VHb8uw,3100
|
264
265
|
alita_sdk/tools/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -325,11 +326,11 @@ alita_sdk/tools/testrail/__init__.py,sha256=0kETjWKLU7R6mugBWsjwEUsh10pipbAeNSGJ
|
|
325
326
|
alita_sdk/tools/testrail/api_wrapper.py,sha256=xKQbjwL602J55KZiAdMcMtsuzK2jky0DUcrrdsazj0A,32981
|
326
327
|
alita_sdk/tools/utils/__init__.py,sha256=155xepXPr4OEzs2Mz5YnjXcBpxSv1X2eznRUVoPtyK0,3268
|
327
328
|
alita_sdk/tools/utils/available_tools_decorator.py,sha256=IbrdfeQkswxUFgvvN7-dyLMZMyXLiwvX7kgi3phciCk,273
|
328
|
-
alita_sdk/tools/utils/content_parser.py,sha256=
|
329
|
-
alita_sdk/tools/vector_adapters/VectorStoreAdapter.py,sha256=
|
329
|
+
alita_sdk/tools/utils/content_parser.py,sha256=tppnQfgoER24acx3CJW1AUvkay_C7lvz_qVB-r-RQOo,13852
|
330
|
+
alita_sdk/tools/vector_adapters/VectorStoreAdapter.py,sha256=ypBEAkFRGHv5edW0N9rdo1yKurNGQ4pRVEWtrN_7SeA,17656
|
330
331
|
alita_sdk/tools/vector_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
331
332
|
alita_sdk/tools/xray/__init__.py,sha256=AsHDvRgyD-6vvGyAyQDPWHbOD2WoMJ5Llt029bLuu6U,4277
|
332
|
-
alita_sdk/tools/xray/api_wrapper.py,sha256=
|
333
|
+
alita_sdk/tools/xray/api_wrapper.py,sha256=DLQ5dT9XUiTJWc7OT6L9mU6CIZ8Sf6hGSBunYA6_k5k,30441
|
333
334
|
alita_sdk/tools/yagmail/__init__.py,sha256=c4Qn3em0tLxzRmFKpzbBgY9W2EnOoKf0azoDJHng5CY,2208
|
334
335
|
alita_sdk/tools/yagmail/yagmail_wrapper.py,sha256=SKoGVd1X4Ew3ad5tOdtPoY00M6jStNdT3q7GXEjQc5g,1952
|
335
336
|
alita_sdk/tools/zephyr/Zephyr.py,sha256=ODZbg9Aw0H0Rbv-HcDXLI4KHbPiLDHoteDofshw9A_k,1508
|
@@ -337,18 +338,18 @@ alita_sdk/tools/zephyr/__init__.py,sha256=8B2Ibz5QTmB5WkV0q8Sq4kuj92FFaFWZLrT877
|
|
337
338
|
alita_sdk/tools/zephyr/api_wrapper.py,sha256=lJCYPG03ej0qgdpLflnS7LFB4HSAfGzIvTjAJt07CQs,6244
|
338
339
|
alita_sdk/tools/zephyr/rest_client.py,sha256=7vSD3oYIX-3KbAFed-mphSQif_VRuXrq5O07ryNQ7Pk,6208
|
339
340
|
alita_sdk/tools/zephyr_enterprise/__init__.py,sha256=IoWQPH2lf2Yuj2ejZ74818JTXdrMoh_ZxAJORukYODU,4172
|
340
|
-
alita_sdk/tools/zephyr_enterprise/api_wrapper.py,sha256=
|
341
|
+
alita_sdk/tools/zephyr_enterprise/api_wrapper.py,sha256=OQJbdcpeVm_5WiTfg-w0wHXFnrKQgHhkufz_nr2wSn4,12270
|
341
342
|
alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py,sha256=hV9LIrYfJT6oYp-ZfQR0YHflqBFPsUw2Oc55HwK0H48,6809
|
342
343
|
alita_sdk/tools/zephyr_essential/__init__.py,sha256=2SymL6TIF1ad52w5DTtWaYvNygEvE1ssNNeKx3Y-_Zg,3980
|
343
|
-
alita_sdk/tools/zephyr_essential/api_wrapper.py,sha256=
|
344
|
-
alita_sdk/tools/zephyr_essential/client.py,sha256=
|
344
|
+
alita_sdk/tools/zephyr_essential/api_wrapper.py,sha256=VgihduP4N7x1qlpwYIkIX0ctEqutuqVqAYgrxDFfBu0,47054
|
345
|
+
alita_sdk/tools/zephyr_essential/client.py,sha256=fX_n2pACNzDiHxry3F4Xc6baUdw7d9U2m4srbfBv5Eg,9882
|
345
346
|
alita_sdk/tools/zephyr_scale/__init__.py,sha256=eetAVRclO1j_N0T3mRnWeLfi3BS98i5FwhNReXO0PlE,4289
|
346
|
-
alita_sdk/tools/zephyr_scale/api_wrapper.py,sha256=
|
347
|
+
alita_sdk/tools/zephyr_scale/api_wrapper.py,sha256=2M6yFoOmfH5BwxMwTLQO76yD0YdfvccOYHlARJFiqGo,78796
|
347
348
|
alita_sdk/tools/zephyr_squad/__init__.py,sha256=0AI_j27xVO5Gk5HQMFrqPTd4uvuVTpiZUicBrdfEpKg,2796
|
348
349
|
alita_sdk/tools/zephyr_squad/api_wrapper.py,sha256=kmw_xol8YIYFplBLWTqP_VKPRhL_1ItDD0_vXTe_UuI,14906
|
349
350
|
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.
|
351
|
+
alita_sdk-0.3.292.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
352
|
+
alita_sdk-0.3.292.dist-info/METADATA,sha256=MDskVNgQodg7ergC1j4qH_nuw0W7bfnV1-sVIxkL8SA,18897
|
353
|
+
alita_sdk-0.3.292.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
354
|
+
alita_sdk-0.3.292.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
|
355
|
+
alita_sdk-0.3.292.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|