alita-sdk 0.3.272__py3-none-any.whl → 0.3.274__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.
@@ -73,6 +73,10 @@ class StepBackSearchDocumentsModel(BaseModel):
73
73
  }""",
74
74
  default=None
75
75
  )
76
+ extended_search: Optional[List[str]] = Field(
77
+ description="List of chunk types to search for (title, summary, propositions, keywords, documents)",
78
+ default=None
79
+ )
76
80
  reranking_config: Optional[Dict[str, Dict[str, Any]]] = Field(
77
81
  description="""Reranking configuration. Example:
78
82
  {
@@ -87,10 +91,6 @@ class StepBackSearchDocumentsModel(BaseModel):
87
91
  }""",
88
92
  default=None
89
93
  )
90
- extended_search: Optional[List[str]] = Field(
91
- description="List of chunk types to search for (title, summary, propositions, keywords, documents)",
92
- default=None
93
- )
94
94
 
95
95
  STEPBACK_PROMPT = """Your task is to convert provided question into a more generic question that will be used for similarity search.
96
96
  Remove all not important words, question words, but save all names, dates and acronym as in original question.
@@ -745,7 +745,7 @@ class VectorStoreWrapper(BaseToolApiWrapper):
745
745
 
746
746
  try:
747
747
  dispatch_custom_event(
748
- name="thinking_step",
748
+ name="thinking_step_update",
749
749
  data={
750
750
  "message": message,
751
751
  "tool_name": tool_name,
@@ -66,22 +66,22 @@ BaseStepbackSearchParams = create_model(
66
66
  )),
67
67
  cut_off=(Optional[float], Field(description="Cut-off score for search results", default=0.5, ge=0, le=1)),
68
68
  search_top=(Optional[int], Field(description="Number of top results to return", default=10)),
69
- reranker=(Optional[dict], Field(
70
- description="Reranker configuration. Can be a dictionary with reranking parameters.",
71
- default={}
72
- )),
73
69
  full_text_search=(Optional[Dict[str, Any]], Field(
74
70
  description="Full text search parameters. Can be a dictionary with search options.",
75
71
  default=None
76
72
  )),
77
- reranking_config=(Optional[Dict[str, Dict[str, Any]]], Field(
78
- description="Reranking configuration. Can be a dictionary with reranking settings.",
79
- default=None
80
- )),
81
73
  extended_search=(Optional[List[str]], Field(
82
74
  description="List of additional fields to include in the search results.",
83
75
  default=None
84
76
  )),
77
+ reranker=(Optional[dict], Field(
78
+ description="Reranker configuration. Can be a dictionary with reranking parameters.",
79
+ default={}
80
+ )),
81
+ reranking_config=(Optional[Dict[str, Dict[str, Any]]], Field(
82
+ description="Reranking configuration. Can be a dictionary with reranking settings.",
83
+ default=None
84
+ )),
85
85
  )
86
86
 
87
87
  BaseIndexDataParams = create_model(
@@ -90,22 +90,23 @@ BaseStepbackSearchParams = create_model(
90
90
  )),
91
91
  cut_off=(Optional[float], Field(description="Cut-off score for search results", default=0.5, ge=0, le=1)),
92
92
  search_top=(Optional[int], Field(description="Number of top results to return", default=10, ge=0)),
93
- reranker=(Optional[dict], Field(
94
- description="Reranker configuration. Can be a dictionary with reranking parameters.",
95
- default={}
96
- )),
97
93
  full_text_search=(Optional[Dict[str, Any]], Field(
98
94
  description="Full text search parameters. Can be a dictionary with search options.",
99
95
  default=None
100
96
  )),
101
- reranking_config=(Optional[Dict[str, Dict[str, Any]]], Field(
102
- description="Reranking configuration. Can be a dictionary with reranking settings.",
103
- default=None
104
- )),
105
97
  extended_search=(Optional[List[str]], Field(
106
98
  description="List of additional fields to include in the search results.",
107
99
  default=None
108
100
  )),
101
+ reranker=(Optional[dict], Field(
102
+ description="Reranker configuration. Can be a dictionary with reranking parameters.",
103
+ default={}
104
+ )),
105
+ reranking_config=(Optional[Dict[str, Dict[str, Any]]], Field(
106
+ description="Reranking configuration. Can be a dictionary with reranking settings.",
107
+ default=None
108
+ )),
109
+
109
110
  )
110
111
 
111
112
  BaseIndexDataParams = create_model(
@@ -136,7 +137,7 @@ class BaseToolApiWrapper(BaseModel):
136
137
 
137
138
  logger.info(message)
138
139
  dispatch_custom_event(
139
- name="thinking_step",
140
+ name="thinking_step_update",
140
141
  data={
141
142
  "message": message,
142
143
  "tool_name": tool_name,
@@ -17,7 +17,7 @@ from ..elitea_base import BaseVectorStoreToolApiWrapper, extend_with_vector_tool
17
17
  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
- from ..utils.content_parser import parse_file_content, load_content_from_bytes, load_content, load_file_docs
20
+ from ..utils.content_parser import load_file_docs
21
21
  from ...runtime.utils.utils import IndexerKeywords
22
22
 
23
23
  logger = logging.getLogger(__name__)
@@ -1,7 +1,7 @@
1
1
  import json
2
2
  import logging
3
3
  import hashlib
4
- from typing import Any, Dict, Generator, List, Optional
4
+ from typing import Any, Dict, Generator, List, Optional, Literal
5
5
 
6
6
  import requests
7
7
  from langchain_core.documents import Document
@@ -13,8 +13,9 @@ from ..elitea_base import (
13
13
  BaseVectorStoreToolApiWrapper,
14
14
  extend_with_vector_tools,
15
15
  )
16
+ from ..non_code_indexer_toolkit import NonCodeIndexerToolkit
16
17
  from ...runtime.utils.utils import IndexerKeywords
17
- from ..utils.content_parser import parse_file_content, load_content_from_bytes
18
+ from ..utils.content_parser import load_file_docs
18
19
 
19
20
  try:
20
21
  from alita_sdk.runtime.langchain.interfaces.llm_processor import get_embeddings
@@ -31,7 +32,7 @@ _get_tests_query = """query GetTests($jql: String!, $limit:Int!, $start: Int)
31
32
  limit
32
33
  results {
33
34
  issueId
34
- jira(fields: ["key", "summary", "created", "updated", "assignee.displayName", "reporter.displayName"])
35
+ jira(fields: ["key", "summary", "description", "created", "updated", "assignee.displayName", "reporter.displayName"])
35
36
  projectId
36
37
  testType {
37
38
  name
@@ -120,7 +121,7 @@ def _parse_tests(test_results) -> List[Any]:
120
121
  return test_results
121
122
 
122
123
 
123
- class XrayApiWrapper(BaseVectorStoreToolApiWrapper):
124
+ class XrayApiWrapper(NonCodeIndexerToolkit):
124
125
  _default_base_url: str = 'https://xray.cloud.getxray.app'
125
126
  base_url: str = ""
126
127
  client_id: str = None
@@ -147,7 +148,7 @@ class XrayApiWrapper(BaseVectorStoreToolApiWrapper):
147
148
  client_id = values['client_id']
148
149
  client_secret = values['client_secret']
149
150
  # Authenticate to get the token
150
- values['base_url'] = values.get('base_url', '') or cls._default_base_url
151
+ values['base_url'] = values.get('base_url', '') or cls._default_base_url.default
151
152
  auth_url = f"{values['base_url']}/api/v1/authenticate"
152
153
  auth_data = {
153
154
  "client_id": client_id,
@@ -168,7 +169,7 @@ class XrayApiWrapper(BaseVectorStoreToolApiWrapper):
168
169
  return ToolException(f"Please, check you credentials ({values['client_id']} / {masked_secret}). Unable")
169
170
  else:
170
171
  return ToolException(f"Authentication failed: {str(e)}")
171
- return values
172
+ return super().validate_toolkit(values)
172
173
 
173
174
  def __init__(self, **data):
174
175
  super().__init__(**data)
@@ -333,6 +334,7 @@ class XrayApiWrapper(BaseVectorStoreToolApiWrapper):
333
334
 
334
335
  for test in tests_data:
335
336
  page_content = ""
337
+ content_structure = {}
336
338
  test_type_name = test.get("testType", {}).get("name", "").lower()
337
339
 
338
340
  attachment_ids = []
@@ -359,19 +361,16 @@ class XrayApiWrapper(BaseVectorStoreToolApiWrapper):
359
361
  content_structure = {"steps": steps_content}
360
362
  if attachment_ids:
361
363
  content_structure["attachment_ids"] = sorted(attachment_ids)
362
- page_content = json.dumps(content_structure, indent=2)
363
364
 
364
365
  elif test_type_name == "cucumber" and test.get("gherkin"):
365
366
  content_structure = {"gherkin": test["gherkin"]}
366
367
  if attachment_ids:
367
368
  content_structure["attachment_ids"] = sorted(attachment_ids)
368
- page_content = json.dumps(content_structure, indent=2)
369
369
 
370
370
  elif test.get("unstructured"):
371
371
  content_structure = {"unstructured": test["unstructured"]}
372
372
  if attachment_ids:
373
373
  content_structure["attachment_ids"] = sorted(attachment_ids)
374
- page_content = json.dumps(content_structure, indent=2)
375
374
 
376
375
  metadata = {"doctype": self.doctype}
377
376
 
@@ -382,7 +381,12 @@ class XrayApiWrapper(BaseVectorStoreToolApiWrapper):
382
381
 
383
382
  if "created" in jira_data:
384
383
  metadata["created_on"] = jira_data["created"]
385
-
384
+
385
+ if jira_data.get("description"):
386
+ content_structure["description"] = jira_data.get("description")
387
+
388
+ page_content = json.dumps(content_structure if content_structure.items() else "", indent=2)
389
+
386
390
  content_hash = hashlib.sha256(page_content.encode('utf-8')).hexdigest()[:16]
387
391
  metadata["updated_on"] = content_hash
388
392
 
@@ -407,6 +411,7 @@ class XrayApiWrapper(BaseVectorStoreToolApiWrapper):
407
411
  if "attachments" in step and step["attachments"]:
408
412
  for attachment in step["attachments"]:
409
413
  if attachment and "id" in attachment and "filename" in attachment:
414
+ attachment['step_id'] = step['id']
410
415
  attachments_data.append(attachment)
411
416
  if attachments_data:
412
417
  metadata["_attachments_data"] = attachments_data
@@ -430,14 +435,7 @@ class XrayApiWrapper(BaseVectorStoreToolApiWrapper):
430
435
  Generator[Document, None, None]: A generator yielding processed Document objects with metadata.
431
436
  """
432
437
  try:
433
- if not getattr(self, '_include_attachments', False):
434
- yield document
435
- return
436
-
437
438
  attachments_data = document.metadata.get("_attachments_data", [])
438
- if not attachments_data:
439
- yield document
440
- return
441
439
 
442
440
  issue_id = document.metadata.get("id")
443
441
 
@@ -458,44 +456,33 @@ class XrayApiWrapper(BaseVectorStoreToolApiWrapper):
458
456
  ).append(attachment_id)
459
457
 
460
458
  try:
461
- content = self._process_attachment(attachment)
462
- if not content or content.startswith("Attachment processing failed"):
463
- logger.warning(f"Skipping attachment {filename} due to processing failure")
464
- continue
459
+ attachment_metadata = {
460
+ 'id': str(attachment_id),
461
+ 'issue_key': document.metadata.get('key', ''),
462
+ 'issueId': str(issue_id),
463
+ 'projectId': document.metadata.get('projectId', ''),
464
+ 'source': f"xray_test_{issue_id}",
465
+ 'filename': filename,
466
+ 'download_link': attachment.get('downloadLink', ''),
467
+ 'entity_type': 'test_case_attachment',
468
+ 'step_id': attachment.get('step_id', ''),
469
+ 'key': document.metadata.get('key', ''),
470
+ IndexerKeywords.PARENT.value: document.metadata.get('id', str(issue_id)),
471
+ 'type': 'attachment',
472
+ 'doctype': self.doctype,
473
+ }
474
+ yield from self._process_attachment(attachment, attachment_metadata)
465
475
  except Exception as e:
466
476
  logger.error(f"Failed to process attachment {filename}: {str(e)}")
467
477
  continue
468
-
469
- attachment_metadata = {
470
- 'id': str(attachment_id),
471
- 'issue_key': document.metadata.get('key', ''),
472
- 'issueId': str(issue_id),
473
- 'projectId': document.metadata.get('projectId', ''),
474
- 'source': f"xray_test_{issue_id}",
475
- 'filename': filename,
476
- 'download_link': attachment.get('downloadLink', ''),
477
- 'entity_type': 'test_case_attachment',
478
- 'key': document.metadata.get('key', ''),
479
- IndexerKeywords.PARENT.value: document.metadata.get('id', str(issue_id)),
480
- 'type': 'attachment',
481
- 'doctype': self.doctype,
482
- }
483
-
484
- yield Document(
485
- page_content=content,
486
- metadata=attachment_metadata
487
- )
488
478
 
489
479
  if "_attachments_data" in document.metadata:
490
480
  del document.metadata["_attachments_data"]
491
481
 
492
- yield document
493
-
494
482
  except Exception as e:
495
483
  logger.error(f"Error processing document for attachments: {e}")
496
- yield document
497
484
 
498
- def _process_attachment(self, attachment: Dict[str, Any]) -> str:
485
+ def _process_attachment(self, attachment: Dict[str, Any], attachment_metadata) -> Generator[Document, None, None]:
499
486
  """
500
487
  Processes an attachment to extract its content.
501
488
 
@@ -508,38 +495,17 @@ class XrayApiWrapper(BaseVectorStoreToolApiWrapper):
508
495
  try:
509
496
  download_link = attachment.get('downloadLink')
510
497
  filename = attachment.get('filename', '')
511
-
512
- if not download_link:
513
- return f"Attachment: {filename} (no download link available)"
514
498
 
515
499
  try:
516
500
  auth_token = self._ensure_auth_token()
517
501
  headers = {'Authorization': f'Bearer {auth_token}'}
518
502
  response = requests.get(download_link, headers=headers, timeout=30)
519
503
  response.raise_for_status()
520
-
521
- ext = f".{filename.split('.')[-1].lower()}" if filename and '.' in filename else ""
522
-
523
- if ext == '.pdf':
524
- content = parse_file_content(
525
- file_content=response.content,
526
- file_name=filename,
527
- llm=self.llm,
528
- is_capture_image=True
529
- )
530
- else:
531
- content = load_content_from_bytes(
532
- response.content,
533
- ext,
534
- llm=self.llm
535
- )
536
-
537
- if content:
538
- return f"filename: {filename}\ncontent: {content}"
539
- else:
540
- logger.warning(f"No content extracted from attachment {filename}")
541
- return f"filename: {filename}\ncontent: [No extractable content]"
542
-
504
+
505
+ yield from self._load_attachment(content=response.content,
506
+ file_name=filename,
507
+ attachment_metadata=attachment_metadata)
508
+
543
509
  except requests.RequestException as req_e:
544
510
  logger.error(f"Unable to download attachment {filename} with existing token: {req_e}")
545
511
 
@@ -560,23 +526,13 @@ class XrayApiWrapper(BaseVectorStoreToolApiWrapper):
560
526
  fresh_headers = {'Authorization': f'Bearer {fresh_token}'}
561
527
  response = requests.get(download_link, headers=fresh_headers, timeout=60)
562
528
  response.raise_for_status()
563
-
564
- ext = f".{filename.split('.')[-1].lower()}" if filename and '.' in filename else ""
565
- content = parse_file_content(
566
- file_content=response.content,
567
- file_name=filename,
568
- llm=self.llm,
569
- is_capture_image=True
570
- ) if ext == '.pdf' else load_content_from_bytes(response.content, ext, llm=self.llm)
571
-
572
- if content:
573
- return f"filename: {filename}\ncontent: {content}"
574
- else:
575
- return f"filename: {filename}\ncontent: [Content extraction failed after re-auth]"
529
+
530
+ yield from self._load_attachment(content=response.content,
531
+ file_name=filename,
532
+ attachment_metadata=attachment_metadata)
576
533
 
577
534
  except Exception as reauth_e:
578
535
  logger.error(f"Re-authentication and retry failed for {filename}: {reauth_e}")
579
- return f"Attachment: {filename} (download failed: {str(req_e)}, re-auth failed: {str(reauth_e)})"
580
536
  else:
581
537
  try:
582
538
  auth_token = self._ensure_auth_token()
@@ -587,31 +543,32 @@ class XrayApiWrapper(BaseVectorStoreToolApiWrapper):
587
543
  }
588
544
  response = requests.get(download_link, headers=fallback_headers, timeout=60)
589
545
  response.raise_for_status()
590
-
591
- ext = f".{filename.split('.')[-1].lower()}" if filename and '.' in filename else ""
592
- content = parse_file_content(
593
- file_content=response.content,
594
- file_name=filename,
595
- llm=self.llm,
596
- is_capture_image=True
597
- ) if ext == '.pdf' else load_content_from_bytes(response.content, ext, llm=self.llm)
598
-
599
- if content:
600
- return f"filename: {filename}\ncontent: {content}"
601
- else:
602
- return f"filename: {filename}\ncontent: [Content extraction failed after fallback]"
546
+
547
+ yield from self._load_attachment(content=response.content,
548
+ file_name=filename,
549
+ attachment_metadata=attachment_metadata)
603
550
 
604
551
  except Exception as fallback_e:
605
552
  logger.error(f"Fallback download also failed for {filename}: {fallback_e}")
606
- return f"Attachment: {filename} (download failed: {str(req_e)}, fallback failed: {str(fallback_e)})"
607
553
 
608
554
  except Exception as parse_e:
609
555
  logger.error(f"Unable to parse attachment {filename}: {parse_e}")
610
- return f"Attachment: {filename} (parsing failed: {str(parse_e)})"
611
556
 
612
557
  except Exception as e:
613
558
  logger.error(f"Error processing attachment: {e}")
614
- return f"Attachment processing failed: {str(e)}"
559
+
560
+ def _load_attachment(self, content, file_name, attachment_metadata) -> Generator[Document, None, None]:
561
+ content_docs = load_file_docs(file_content=content, file_name=file_name,
562
+ llm=self.llm, is_capture_image=True, excel_by_sheets=True)
563
+
564
+ if not content_docs or isinstance(content_docs, ToolException):
565
+ return
566
+ for doc in content_docs:
567
+ yield Document(page_content=doc.page_content,
568
+ metadata={
569
+ **doc.metadata,
570
+ **attachment_metadata
571
+ })
615
572
 
616
573
  def _index_tool_params(self, **kwargs) -> dict[str, tuple[type, Field]]:
617
574
  return {
@@ -649,6 +606,8 @@ class XrayApiWrapper(BaseVectorStoreToolApiWrapper):
649
606
  'skip_attachment_extensions': (Optional[List[str]], Field(
650
607
  description="List of file extensions to skip when processing attachments (e.g., ['.exe', '.zip', '.bin'])",
651
608
  default=None)),
609
+ 'chunking_tool': (Literal['json'],
610
+ Field(description="Name of chunking tool for base document", default='json')),
652
611
  }
653
612
 
654
613
  def _get_tests_direct(self, jql: str) -> List[Dict]:
@@ -878,9 +878,9 @@ CreateFolder = create_model(
878
878
  json=(str, Field(description=("""
879
879
  JSON body to create a folder. Example:
880
880
  {
881
- "parentId": 24389289,
881
+ "parentId": 123456,
882
882
  "name": "ZephyrEssential_test",
883
- "projectKey": "EL",
883
+ "projectKey": "PRJ",
884
884
  "folderType": "TEST_CASE"
885
885
  }
886
886
  Possible folder types: "TEST_CASE", "TEST_PLAN", "TEST_CYCLE"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.272
3
+ Version: 0.3.274
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
@@ -118,7 +118,7 @@ alita_sdk/runtime/tools/pgvector_search.py,sha256=NN2BGAnq4SsDHIhUcFZ8d_dbEOM8Qw
118
118
  alita_sdk/runtime/tools/prompt.py,sha256=nJafb_e5aOM1Rr3qGFCR-SKziU9uCsiP2okIMs9PppM,741
119
119
  alita_sdk/runtime/tools/router.py,sha256=wCvZjVkdXK9dMMeEerrgKf5M790RudH68pDortnHSz0,1517
120
120
  alita_sdk/runtime/tools/tool.py,sha256=lE1hGi6qOAXG7qxtqxarD_XMQqTghdywf261DZawwno,5631
121
- alita_sdk/runtime/tools/vectorstore.py,sha256=E9cRPfRtlsiCo671dVngKJZ0J9867LixfrCjBz6JiWY,35759
121
+ alita_sdk/runtime/tools/vectorstore.py,sha256=U2TNZEp6QmoERXbuL5MyEl7HUbyestCH2_dVcAkiA7A,35766
122
122
  alita_sdk/runtime/tools/vectorstore_base.py,sha256=CTAsQXImOHjlcddU2hoqyRAf8iNaDMTfr0pJbIaOG7o,27744
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
@@ -131,8 +131,8 @@ 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=ko5TToGYZFmBrho26DRAVvrkHWxQ2sfs8gVAASinYp8,10611
134
- alita_sdk/tools/base_indexer_toolkit.py,sha256=JcjsN-xdZfwNJ7qy_TUgv6F1dIZhsQnguxsWsnsmj14,18437
135
- alita_sdk/tools/elitea_base.py,sha256=zx0ai3aN0re-Uc7_AKJjbTPeJ_K4OpFfK0jsaGvdMMU,32866
134
+ alita_sdk/tools/base_indexer_toolkit.py,sha256=Ufoz6Alm8fkicOaEKSWhuwgUIDKb55skLg5cKPvRvJE,18461
135
+ alita_sdk/tools/elitea_base.py,sha256=BpHZj3gioJIuaYnvGXE0ne0wxuYRdpnKb0xWvD3dMec,32874
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
138
138
  alita_sdk/tools/ado/utils.py,sha256=PTCludvaQmPLakF2EbCGy66Mro4-rjDtavVP-xcB2Wc,1252
@@ -258,7 +258,7 @@ alita_sdk/tools/google/bigquery/tool.py,sha256=Esf9Hsp8I0e7-5EdkFqQ-bid0cfrg-bfS
258
258
  alita_sdk/tools/google_places/__init__.py,sha256=Tg_dfKTc0qxcG-1HVuQQB11PYph2RDWSUVhrlgxqk64,3491
259
259
  alita_sdk/tools/google_places/api_wrapper.py,sha256=7nZly6nk4f4Tm7s2MVdnnwlb-1_WHRrDhyjDiqoyPjA,4674
260
260
  alita_sdk/tools/jira/__init__.py,sha256=0NJikFWEqK8DSohXPUYD4iDLJFS8btxhqQ60acWwC3k,6063
261
- alita_sdk/tools/jira/api_wrapper.py,sha256=qF2a-OTq9Fy3jf2jLUu1axpKhopUX-DXyGnUeLstfRQ,78987
261
+ alita_sdk/tools/jira/api_wrapper.py,sha256=ia4eOjT2oe6aNfO1y8FJv5sVle1DLb9uKM6FcMTsnm4,78928
262
262
  alita_sdk/tools/keycloak/__init__.py,sha256=0WB9yXMUUAHQRni1ghDEmd7GYa7aJPsTVlZgMCM9cQ0,3050
263
263
  alita_sdk/tools/keycloak/api_wrapper.py,sha256=cOGr0f3S3-c6tRDBWI8wMnetjoNSxiV5rvC_0VHb8uw,3100
264
264
  alita_sdk/tools/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -329,7 +329,7 @@ alita_sdk/tools/utils/content_parser.py,sha256=KM6K37VLAAvzwvoHFpJBoRB5d7w6z3mZC
329
329
  alita_sdk/tools/vector_adapters/VectorStoreAdapter.py,sha256=a6FAsiix_EvATIKUf5YT6vHh5LDyJ5uSP3LJqoxFo04,17367
330
330
  alita_sdk/tools/vector_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
331
331
  alita_sdk/tools/xray/__init__.py,sha256=BnG2StSfX44CUMtrjHTcSCDWxxse5tCZqwyaZSkBKIc,4230
332
- alita_sdk/tools/xray/api_wrapper.py,sha256=A8PJmY2k7TowaD_vk6ZxkMnSUoZUt9A6g4TJrZfNTAw,32225
332
+ alita_sdk/tools/xray/api_wrapper.py,sha256=9EM6WxA1ohVtFBet8Bz0eO2ky5mwYQP1BGYH6zRUC8I,30498
333
333
  alita_sdk/tools/yagmail/__init__.py,sha256=c4Qn3em0tLxzRmFKpzbBgY9W2EnOoKf0azoDJHng5CY,2208
334
334
  alita_sdk/tools/yagmail/yagmail_wrapper.py,sha256=SKoGVd1X4Ew3ad5tOdtPoY00M6jStNdT3q7GXEjQc5g,1952
335
335
  alita_sdk/tools/zephyr/Zephyr.py,sha256=ODZbg9Aw0H0Rbv-HcDXLI4KHbPiLDHoteDofshw9A_k,1508
@@ -340,15 +340,15 @@ alita_sdk/tools/zephyr_enterprise/__init__.py,sha256=oH8rhKxlOEl_EPx6L1ALQ5SZXW_
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=GXjlf2imDBPpcAFZJMsxclcrnZjLmFGKwRtcnSsddSs,3980
343
- alita_sdk/tools/zephyr_essential/api_wrapper.py,sha256=Zp7PkjWmBOy8ZXsUx_TDEUaZ5o6iQO2gRGuD5o4O3OA,38654
343
+ alita_sdk/tools/zephyr_essential/api_wrapper.py,sha256=241d5FJkaANzn01HKD-Zyfhk-R4ETkvYNhIc2gNU4oU,38653
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.272.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
351
- alita_sdk-0.3.272.dist-info/METADATA,sha256=_4rALIKbyda9sXjvGtHQhB_MtkWcBRBjYMk7r_os3j4,18897
352
- alita_sdk-0.3.272.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
353
- alita_sdk-0.3.272.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
354
- alita_sdk-0.3.272.dist-info/RECORD,,
350
+ alita_sdk-0.3.274.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
351
+ alita_sdk-0.3.274.dist-info/METADATA,sha256=A06D4ppatG0ldNTEjlYIWpi29aAUPMQEGaLuLUenTDs,18897
352
+ alita_sdk-0.3.274.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
353
+ alita_sdk-0.3.274.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
354
+ alita_sdk-0.3.274.dist-info/RECORD,,