alita-sdk 0.3.205__py3-none-any.whl → 0.3.206__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.
@@ -10,12 +10,6 @@ def get_model(model_type: str, model_params: dict):
10
10
  return None
11
11
  if model_type in llms:
12
12
  return get_llm(model_type)(**model_params)
13
- elif model_type == "Alita":
14
- try:
15
- from alita_sdk.llms.alita import AlitaChatModel
16
- except ImportError:
17
- raise RuntimeError("Alita model not found")
18
- return AlitaChatModel(**model_params)
19
13
  elif model_type in chat_models:
20
14
  model = getattr(__import__("langchain_community.chat_models", fromlist=[model_type]), model_type)
21
15
  return model(**model_params)
@@ -1,12 +1,15 @@
1
1
  import json
2
2
  import re
3
+ import logging
3
4
  from typing import List, Any, Optional, Dict
4
- from langchain_core.tools import BaseTool, BaseToolkit
5
+ from langchain_core.tools import BaseTool, BaseToolkit, ToolException
5
6
  from requests_openapi import Operation, Client, Server
6
7
 
7
8
  from pydantic import create_model, Field
8
9
  from functools import partial
9
10
 
11
+ logger = logging.getLogger(__name__)
12
+
10
13
  name = "openapi"
11
14
 
12
15
  def get_tools(tool):
@@ -105,11 +108,19 @@ class AlitaOpenAPIToolkit(BaseToolkit):
105
108
  c.requestor.headers.update(headers)
106
109
  tools = []
107
110
  for i in tools_set:
111
+
108
112
  try:
113
+ if not i:
114
+ raise ToolException("Operation id is missing for some of declared operations.")
109
115
  tool = c.operations[i]
116
+ if not isinstance(tool, Operation):
117
+ raise ToolException(f"Operation {i} is not an instance of Operation class.")
110
118
  tools.append(create_api_tool(i, tool))
111
- except KeyError:
112
- ...
119
+ except ToolException:
120
+ raise
121
+ except Exception as e:
122
+ logger.warning(f"Tool {i} not found in OpenAPI spec.")
123
+ raise ToolException(f"Cannot create API tool ({i}): \n{e}.")
113
124
  return cls(request_session=c, tools=tools)
114
125
 
115
126
  def get_tools(self):
@@ -14,7 +14,8 @@ def get_tools(tool):
14
14
  site_url=tool['settings'].get('site_url', None),
15
15
  client_id=tool['settings'].get('client_id', None),
16
16
  client_secret=tool['settings'].get('client_secret', None),
17
- toolkit_name=tool.get('toolkit_name'))
17
+ toolkit_name=tool.get('toolkit_name'),
18
+ llm=tool['settings'].get('llm'))
18
19
  .get_tools())
19
20
 
20
21
 
@@ -32,7 +32,10 @@ ReadDocument = create_model(
32
32
  "ReadDocument",
33
33
  path=(str, Field(description="Contains the server-relative path of a document for reading.")),
34
34
  is_capture_image=(Optional[bool], Field(description="Determines is pictures in the document should be recognized.", default=False)),
35
- page_number=(Optional[int], Field(description="Specifies which page to read. If it is None, then full document will be read.", default=None))
35
+ page_number=(Optional[int], Field(description="Specifies which page to read. If it is None, then full document will be read.", default=None)),
36
+ sheet_name=(Optional[str], Field(
37
+ description="Specifies which sheet to read. If it is None, then full document will be read.",
38
+ default=None))
36
39
  )
37
40
 
38
41
  indexData = create_model(
@@ -139,7 +142,7 @@ class SharepointApiWrapper(BaseVectorStoreToolApiWrapper):
139
142
  logging.error(f"Failed to load files from sharepoint: {e}")
140
143
  return ToolException("Can not get files. Please, double check folder name and read permissions.")
141
144
 
142
- def read_file(self, path, is_capture_image: bool = False, page_number: int = None):
145
+ def read_file(self, path, is_capture_image: bool = False, page_number: int = None, sheet_name: str=None):
143
146
  """ Reads file located at the specified server-relative path. """
144
147
  try:
145
148
  file = self._client.web.get_file_by_server_relative_path(path)
@@ -150,7 +153,12 @@ class SharepointApiWrapper(BaseVectorStoreToolApiWrapper):
150
153
  except Exception as e:
151
154
  logging.error(f"Failed to load file from SharePoint: {e}. Path: {path}. Please, double check file name and path.")
152
155
  return ToolException("File not found. Please, check file name and path.")
153
- return parse_file_content(file.name, file_content, is_capture_image, page_number)
156
+ return parse_file_content(file_name=file.name,
157
+ file_content=file_content,
158
+ is_capture_image=is_capture_image,
159
+ page_number=page_number,
160
+ sheet_name=sheet_name,
161
+ llm=self.llm)
154
162
 
155
163
  def _base_loader(self) -> List[Document]:
156
164
  try:
@@ -1,6 +1,6 @@
1
1
  import json
2
2
  import logging
3
- from typing import Dict, List, Optional, Union, Any
3
+ from typing import Dict, List, Optional, Union, Any, Generator
4
4
 
5
5
  import pandas as pd
6
6
  from langchain_core.tools import ToolException
@@ -9,6 +9,9 @@ from pydantic.fields import Field, PrivateAttr
9
9
  from testrail_api import StatusCodeError, TestRailAPI
10
10
  from ..elitea_base import BaseVectorStoreToolApiWrapper, BaseIndexParams
11
11
  from langchain_core.documents import Document
12
+
13
+ from ...runtime.utils.utils import IndexerKeywords
14
+
12
15
  try:
13
16
  from alita_sdk.runtime.langchain.interfaces.llm_processor import get_embeddings
14
17
  except ImportError:
@@ -551,7 +554,7 @@ class TestrailAPIWrapper(BaseVectorStoreToolApiWrapper):
551
554
  suite_id: Optional[str] = None,
552
555
  section_id: Optional[int] = None,
553
556
  title_keyword: Optional[str] = None
554
- ) -> List[Document]:
557
+ ) -> Generator[Document, None, None]:
555
558
  try:
556
559
  if suite_id:
557
560
  resp = self._client.cases.get_cases(project_id=project_id, suite_id=int(suite_id))
@@ -567,16 +570,22 @@ class TestrailAPIWrapper(BaseVectorStoreToolApiWrapper):
567
570
  if title_keyword is not None:
568
571
  cases = [case for case in cases if title_keyword.lower() in case.get('title', '').lower()]
569
572
 
570
- docs: List[Document] = []
571
573
  for case in cases:
572
- docs.append(Document(page_content=json.dumps(case), metadata={
574
+ yield Document(page_content=json.dumps(case), metadata={
573
575
  'project_id': project_id,
574
576
  'title': case.get('title', ''),
575
577
  'suite_id': suite_id or case.get('suite_id', ''),
576
578
  'id': str(case.get('id', '')),
577
- 'updated_on': case.get('updated_on', ''),
578
- }))
579
- return docs
579
+ 'updated_on': case.get('updated_on') or -1,
580
+ 'labels': [lbl['title'] for lbl in case.get('labels', [])],
581
+ 'type': case.get('type_id') or -1,
582
+ 'priority': case.get('priority_id') or -1,
583
+ 'milestone': case.get('milestone_id') or -1,
584
+ 'estimate': case.get('estimate') or '',
585
+ 'automation_type': case.get('custom_automation_type') or -1,
586
+ 'section_id': case.get('section_id') or -1,
587
+ 'entity_type': 'test_case',
588
+ })
580
589
 
581
590
  def index_data(
582
591
  self,
@@ -594,7 +603,7 @@ class TestrailAPIWrapper(BaseVectorStoreToolApiWrapper):
594
603
  vs = self._init_vector_store(collection_suffix, embeddings=embedding)
595
604
  return vs.index_documents(docs, progress_step=progress_step, clean_index=clean_index)
596
605
 
597
- def _process_document(self, document: Document) -> Document:
606
+ def _process_document(self, document: Document) -> Generator[Document, None, None]:
598
607
  """
599
608
  Process an existing base document to extract relevant metadata for full document preparation.
600
609
  Used for late processing of documents after we ensure that the document has to be indexed to avoid
@@ -604,7 +613,7 @@ class TestrailAPIWrapper(BaseVectorStoreToolApiWrapper):
604
613
  document (Document): The base document to process.
605
614
 
606
615
  Returns:
607
- Document: The processed document with metadata.
616
+ Generator[Document, None, None]: A generator yielding processed Document objects with metadata.
608
617
  """
609
618
  try:
610
619
  # get base data from the document required to extract attachments and other metadata
@@ -613,14 +622,25 @@ class TestrailAPIWrapper(BaseVectorStoreToolApiWrapper):
613
622
 
614
623
  # get a list of attachments for the case
615
624
  attachments = self._client.attachments.get_attachments_for_case_bulk(case_id=case_id)
616
- attachments_data = {}
617
625
 
618
626
  # process each attachment to extract its content
619
627
  for attachment in attachments:
620
- attachments_data[attachment['filename']] = self._process_attachment(attachment)
621
- base_data['attachments'] = attachments_data
622
- document.page_content = json.dumps(base_data)
623
- return document
628
+ attachment_id = attachment['id']
629
+ # add attachment id to metadata of parent
630
+ document.metadata.setdefault(IndexerKeywords.DEPENDENT_DOCS.value, []).append(attachment_id)
631
+
632
+ # TODO: pass it to chunkers
633
+ yield Document(page_content=self._process_attachment(attachment),
634
+ metadata={
635
+ 'project_id': base_data.get('project_id', ''),
636
+ IndexerKeywords.PARENT.value: case_id,
637
+ 'id': attachment_id,
638
+ 'filename': attachment['filename'],
639
+ 'filetype': attachment['filetype'],
640
+ 'created_on': attachment['created_on'],
641
+ 'entity_type': 'test_case_attachment',
642
+ 'is_image': attachment['is_image'],
643
+ })
624
644
  except json.JSONDecodeError as e:
625
645
  raise ToolException(f"Failed to decode JSON from document: {e}")
626
646
 
@@ -634,10 +654,13 @@ class TestrailAPIWrapper(BaseVectorStoreToolApiWrapper):
634
654
  Returns:
635
655
  str: string description of the attachment.
636
656
  """
657
+
658
+ page_content = "This filetype is not supported."
637
659
  if attachment['filetype'] == 'txt' :
638
- return self._client.get(endpoint=f"get_attachment/{attachment['id']}")
660
+ page_content = self._client.get(endpoint=f"get_attachment/{attachment['id']}")
639
661
  # TODO: add support for other file types
640
- return "This filetype is not supported."
662
+ # use utility to handle different types (tools/utils)
663
+ return page_content
641
664
 
642
665
  def _to_markup(self, data: List[Dict], output_format: str) -> str:
643
666
  """
@@ -1,3 +1,5 @@
1
+ import re
2
+
1
3
  from docx import Document
2
4
  from io import BytesIO
3
5
  import pandas as pd
@@ -8,8 +10,53 @@ import io
8
10
  import pymupdf
9
11
  from langchain_core.tools import ToolException
10
12
  from transformers import BlipProcessor, BlipForConditionalGeneration
13
+ from langchain_core.messages import HumanMessage
14
+
15
+ from ...runtime.langchain.tools.utils import bytes_to_base64
16
+
17
+ image_processing_prompt='''
18
+ You are an AI model designed for analyzing images. Your task is to accurately describe the content of the given image. Depending on the type of image, follow these specific instructions:
19
+
20
+ If the image is a diagram (e.g., chart, table, pie chart, bar graph, etc.):
21
+
22
+ Identify the type of diagram.
23
+ Extract all numerical values, labels, axis titles, headings, legends, and any other textual elements.
24
+ Describe the relationships or trends between the data, if visible.
25
+ If the image is a screenshot:
26
+
27
+ Describe what is shown in the screenshot.
28
+ If it is a software interface, identify the program or website name (if visible).
29
+ List the key interface elements (e.g., buttons, menus, text fields, images, headers).
30
+ If there is text, extract it.
31
+ If the screenshot shows a conversation, describe the participants, the content of the messages, and timestamps (if visible).
32
+ If the image is a photograph:
33
+
34
+ Describe the main objects, people, animals, or elements visible in the photo.
35
+ Specify the setting (e.g., indoors, outdoors, nature, urban area).
36
+ If possible, identify the actions being performed by people or objects in the photo.
37
+ If the image is an illustration or drawing:
11
38
 
12
- def parse_file_content(file_name, file_content, is_capture_image: bool = False, page_number: int = None, sheet_name: str = None):
39
+ Describe the style of the illustration (e.g., realistic, cartoonish, abstract).
40
+ Identify the main elements, their colors, and the composition of the image.
41
+ If there is text, extract it.
42
+ If the image contains text:
43
+
44
+ Extract all text from the image.
45
+ Specify the format of the text (e.g., heading, paragraph, list).
46
+ If the image is a mixed type (e.g., a diagram within a screenshot):
47
+
48
+ Identify all types of content present in the image.
49
+ Perform an analysis for each type of content separately, following the relevant instructions above.
50
+ If the image does not fit into any of the above categories:
51
+
52
+ Provide a detailed description of what is shown in the image.
53
+ Highlight any visible details that could help in understanding the image.
54
+ Be as precise and thorough as possible in your responses. If something is unclear or illegible, state that explicitly.
55
+ '''
56
+
57
+ IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'webp', 'svg']
58
+
59
+ def parse_file_content(file_name, file_content, is_capture_image: bool = False, page_number: int = None, sheet_name: str = None, llm=None):
13
60
  if file_name.endswith('.txt'):
14
61
  return parse_txt(file_content)
15
62
  elif file_name.endswith('.docx'):
@@ -17,9 +64,12 @@ def parse_file_content(file_name, file_content, is_capture_image: bool = False,
17
64
  elif file_name.endswith('.xlsx') or file_name.endswith('.xls'):
18
65
  return parse_excel(file_content, sheet_name)
19
66
  elif file_name.endswith('.pdf'):
20
- return parse_pdf(file_content, page_number, is_capture_image)
67
+ return parse_pdf(file_content, page_number, is_capture_image, llm)
21
68
  elif file_name.endswith('.pptx'):
22
- return parse_pptx(file_content, page_number, is_capture_image)
69
+ return parse_pptx(file_content, page_number, is_capture_image, llm)
70
+ elif any(file_name.lower().endswith(f".{ext}") for ext in IMAGE_EXTENSIONS):
71
+ match = re.search(r'\.([a-zA-Z0-9]+)$', file_name)
72
+ return __perform_llm_prediction_for_image(llm, file_content, match.group(1), image_processing_prompt)
23
73
  else:
24
74
  return ToolException(
25
75
  "Not supported type of files entered. Supported types are TXT, DOCX, PDF, PPTX, XLSX and XLS only.")
@@ -49,28 +99,28 @@ def parse_sheet(excel_file, sheet_name):
49
99
  df.fillna('', inplace=True)
50
100
  return df.to_string()
51
101
 
52
- def parse_pdf(file_content, page_number, is_capture_image):
102
+ def parse_pdf(file_content, page_number, is_capture_image, llm):
53
103
  with pymupdf.open(stream=file_content, filetype="pdf") as report:
54
104
  text_content = ''
55
105
  if page_number is not None:
56
106
  page = report.load_page(page_number - 1)
57
- text_content += read_pdf_page(report, page, page_number, is_capture_image)
107
+ text_content += read_pdf_page(report, page, page_number, is_capture_image, llm)
58
108
  else:
59
109
  for index, page in enumerate(report, start=1):
60
- text_content += read_pdf_page(report, page, index, is_capture_image)
110
+ text_content += read_pdf_page(report, page, index, is_capture_image, llm)
61
111
  return text_content
62
112
 
63
- def parse_pptx(file_content, page_number, is_capture_image):
113
+ def parse_pptx(file_content, page_number, is_capture_image, llm=None):
64
114
  prs = Presentation(io.BytesIO(file_content))
65
115
  text_content = ''
66
116
  if page_number is not None:
67
- text_content += read_pptx_slide(prs.slides[page_number - 1], page_number, is_capture_image)
117
+ text_content += read_pptx_slide(prs.slides[page_number - 1], page_number, is_capture_image, llm)
68
118
  else:
69
119
  for index, slide in enumerate(prs.slides, start=1):
70
- text_content += read_pptx_slide(slide, index, is_capture_image)
120
+ text_content += read_pptx_slide(slide, index, is_capture_image, llm)
71
121
  return text_content
72
122
 
73
- def read_pdf_page(report, page, index, is_capture_images):
123
+ def read_pdf_page(report, page, index, is_capture_images, llm=None):
74
124
  text_content = f'Page: {index}\n'
75
125
  text_content += page.get_text()
76
126
  if is_capture_images:
@@ -79,7 +129,7 @@ def read_pdf_page(report, page, index, is_capture_images):
79
129
  xref = img[0]
80
130
  base_image = report.extract_image(xref)
81
131
  img_bytes = base_image["image"]
82
- text_content += describe_image(Image.open(io.BytesIO(img_bytes)).convert("RGB"))
132
+ text_content += __perform_llm_prediction_for_image(llm, img_bytes)
83
133
  return text_content
84
134
 
85
135
  def read_docx_from_bytes(file_content):
@@ -94,14 +144,14 @@ def read_docx_from_bytes(file_content):
94
144
  print(f"Error reading .docx from bytes: {e}")
95
145
  return ""
96
146
 
97
- def read_pptx_slide(slide, index, is_capture_image):
147
+ def read_pptx_slide(slide, index, is_capture_image, llm):
98
148
  text_content = f'Slide: {index}\n'
99
149
  for shape in slide.shapes:
100
150
  if hasattr(shape, "text"):
101
151
  text_content += shape.text + "\n"
102
152
  elif is_capture_image and shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
103
153
  try:
104
- caption = describe_image(Image.open(io.BytesIO(shape.image.blob)).convert("RGB"))
154
+ caption = __perform_llm_prediction_for_image(llm, shape.image.blob)
105
155
  except:
106
156
  caption = "\n[Picture: unknown]\n"
107
157
  text_content += caption
@@ -113,3 +163,17 @@ def describe_image(image):
113
163
  inputs = processor(image, return_tensors="pt")
114
164
  out = model.generate(**inputs)
115
165
  return "\n[Picture: " + processor.decode(out[0], skip_special_tokens=True) + "]\n"
166
+
167
+ def __perform_llm_prediction_for_image(llm, image: bytes, image_format='png', prompt=image_processing_prompt) -> str:
168
+ base64_string = bytes_to_base64(image)
169
+ result = llm.invoke([
170
+ HumanMessage(
171
+ content=[
172
+ {"type": "text", "text": prompt},
173
+ {
174
+ "type": "image_url",
175
+ "image_url": {"url": f"data:image/{image_format};base64,{base64_string}"},
176
+ },
177
+ ])
178
+ ])
179
+ return f"\n[Image description: {result.content}]\n"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.205
3
+ Version: 0.3.206
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
@@ -13,11 +13,11 @@ alita_sdk/community/analysis/jira_analyse/api_wrapper.py,sha256=Ui1GBWizIFGFOi98
13
13
  alita_sdk/runtime/__init__.py,sha256=4W0UF-nl3QF2bvET5lnah4o24CoTwSoKXhuN0YnwvEE,828
14
14
  alita_sdk/runtime/clients/__init__.py,sha256=BdehU5GBztN1Qi1Wul0cqlU46FxUfMnI6Vq2Zd_oq1M,296
15
15
  alita_sdk/runtime/clients/artifact.py,sha256=4N2t5x3GibyXLq3Fvrv2o_VA7Z000yNfc-UN4eGsHZg,2679
16
- alita_sdk/runtime/clients/client.py,sha256=t4KckYtjJo7JauxcCuQxOsjqPzhfqR4B8bJuVUorPiY,21674
16
+ alita_sdk/runtime/clients/client.py,sha256=XITXME6UGi-VKEMd8eYJ-PPFIkSyWVigmLH61UMvD_M,23326
17
17
  alita_sdk/runtime/clients/datasource.py,sha256=HAZovoQN9jBg0_-lIlGBQzb4FJdczPhkHehAiVG3Wx0,1020
18
18
  alita_sdk/runtime/clients/prompt.py,sha256=li1RG9eBwgNK_Qf0qUaZ8QNTmsncFrAL2pv3kbxZRZg,1447
19
19
  alita_sdk/runtime/langchain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- alita_sdk/runtime/langchain/assistant.py,sha256=wvRVnEXmh15QP_sIcex-6zwm4GNBP7z581GVzDfc8hw,13311
20
+ alita_sdk/runtime/langchain/assistant.py,sha256=Bn9vUyZlFAP-D9Bh3zc2G1ZQkh5rr2c2g5t1WAQW6Hw,13388
21
21
  alita_sdk/runtime/langchain/chat_message_template.py,sha256=kPz8W2BG6IMyITFDA5oeb5BxVRkHEVZhuiGl4MBZKdc,2176
22
22
  alita_sdk/runtime/langchain/constants.py,sha256=eHVJ_beJNTf1WJo4yq7KMK64fxsRvs3lKc34QCXSbpk,3319
23
23
  alita_sdk/runtime/langchain/indexer.py,sha256=0ENHy5EOhThnAiYFc7QAsaTNp9rr8hDV_hTK8ahbatk,37592
@@ -44,7 +44,7 @@ alita_sdk/runtime/langchain/document_loaders/constants.py,sha256=QpgMiKo-riIBuU6
44
44
  alita_sdk/runtime/langchain/document_loaders/utils.py,sha256=ifh0UJiweIb2iEb2_THJy2pbAnTupOffGtTdRA7vjeE,874
45
45
  alita_sdk/runtime/langchain/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
46
  alita_sdk/runtime/langchain/interfaces/kwextractor.py,sha256=kSJA9L8g8UArmHu7Bd9dIO0Rrq86JPUb8RYNlnN68FQ,3072
47
- alita_sdk/runtime/langchain/interfaces/llm_processor.py,sha256=AbuWlZ54Cu5zy6AExRN0ou3r15i4pY3WSIVPJx8ltkA,8764
47
+ alita_sdk/runtime/langchain/interfaces/llm_processor.py,sha256=tbEsue5E31hz09HeMGDcdEipLyObQ5q1kFTIjEzUKDM,8667
48
48
  alita_sdk/runtime/langchain/interfaces/loaders.py,sha256=li-O2dubiDNYn-qfVcDsuD4LqP_IZ61cV2vHUZAqeXc,3337
49
49
  alita_sdk/runtime/langchain/interfaces/splitters.py,sha256=tW65-Ejj9VYyxXFZNgPts_CKILQ18bWp_1bZ-24FKGc,3630
50
50
  alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py,sha256=osChtJxUlfpsFESpJSE5mnJAkxTXnzgFZnC6l5mUlbo,6148
@@ -63,15 +63,14 @@ alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py,sha256=DiEEOqDef2Xo3x
63
63
  alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py,sha256=l3AdjSQnNv1CE1NuHi7wts6h6AsCiK-iPu0PnPf3jf0,399
64
64
  alita_sdk/runtime/langchain/tools/bdd_parser/parser.py,sha256=1H1Nd_OH5Wx8A5YV1zUghBxo613yPptZ7fqNo8Eg48M,17289
65
65
  alita_sdk/runtime/llms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
- alita_sdk/runtime/llms/alita.py,sha256=SHKlQ3LVrzISHbDl3BLinvTjPu28EMHuOtvwSYtuQ6c,10130
67
66
  alita_sdk/runtime/llms/preloaded.py,sha256=3AaUbZK3d8fvxAQMjR3ftOoYa0SnkCOL1EvdvDCXIHE,11321
68
67
  alita_sdk/runtime/toolkits/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
- alita_sdk/runtime/toolkits/application.py,sha256=akqUuaIL9u7-SsUmS-XgN4qxDEnXFhsK9do4n8inpSo,2432
68
+ alita_sdk/runtime/toolkits/application.py,sha256=Mn8xwIdlbuyNzroH-WVVWJG0biOUV7u8qS15fQJ_XmI,2186
70
69
  alita_sdk/runtime/toolkits/artifact.py,sha256=7fTr9VpGd2zwCB3EwW4aqWa5jVKRTunqV3ETMJWGNmU,2356
71
70
  alita_sdk/runtime/toolkits/datasource.py,sha256=qk78OdPoReYPCWwahfkKLbKc4pfsu-061oXRryFLP6I,2498
72
71
  alita_sdk/runtime/toolkits/prompt.py,sha256=WIpTkkVYWqIqOWR_LlSWz3ug8uO9tm5jJ7aZYdiGRn0,1192
73
72
  alita_sdk/runtime/toolkits/subgraph.py,sha256=ZYqI4yVLbEPAjCR8dpXbjbL2ipX598Hk3fL6AgaqFD4,1758
74
- alita_sdk/runtime/toolkits/tools.py,sha256=ENR0T7833S4AiE6_Tg-xfsYHFanXMjsus_pzj-DDTnE,8004
73
+ alita_sdk/runtime/toolkits/tools.py,sha256=Cpde3upReUwQIOM4RAMMdbEem1EBLIPI2GXC2MsX6V0,7951
75
74
  alita_sdk/runtime/toolkits/vectorstore.py,sha256=BGppQADa1ZiLO17fC0uCACTTEvPHlodEDYEzUcBRbAA,2901
76
75
  alita_sdk/runtime/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
76
  alita_sdk/runtime/tools/agent.py,sha256=m98QxOHwnCRTT9j18Olbb5UPS8-ZGeQaGiUyZJSyFck,3162
@@ -89,21 +88,21 @@ alita_sdk/runtime/tools/pgvector_search.py,sha256=NN2BGAnq4SsDHIhUcFZ8d_dbEOM8Qw
89
88
  alita_sdk/runtime/tools/prompt.py,sha256=nJafb_e5aOM1Rr3qGFCR-SKziU9uCsiP2okIMs9PppM,741
90
89
  alita_sdk/runtime/tools/router.py,sha256=wCvZjVkdXK9dMMeEerrgKf5M790RudH68pDortnHSz0,1517
91
90
  alita_sdk/runtime/tools/tool.py,sha256=lE1hGi6qOAXG7qxtqxarD_XMQqTghdywf261DZawwno,5631
92
- alita_sdk/runtime/tools/vectorstore.py,sha256=yRx1hUyPhyLRPby-GWgOlWQ2zbY-zqYKw-an9-Jy6dQ,29743
91
+ alita_sdk/runtime/tools/vectorstore.py,sha256=RhGg2gGY5PFfllouuwB5uLkM_lAlr_SqpsziLKgXq1U,30672
93
92
  alita_sdk/runtime/utils/AlitaCallback.py,sha256=E4LlSBuCHWiUq6W7IZExERHZY0qcmdjzc_rJlF2iQIw,7356
94
93
  alita_sdk/runtime/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
94
  alita_sdk/runtime/utils/constants.py,sha256=Xntx1b_uxUzT4clwqHA_U6K8y5bBqf_4lSQwXdcWrp4,13586
96
95
  alita_sdk/runtime/utils/evaluate.py,sha256=iM1P8gzBLHTuSCe85_Ng_h30m52hFuGuhNXJ7kB1tgI,1872
97
96
  alita_sdk/runtime/utils/logging.py,sha256=svPyiW8ztDfhqHFITv5FBCj8UhLxz6hWcqGIY6wpJJE,3331
98
97
  alita_sdk/runtime/utils/save_dataframe.py,sha256=i-E1wp-t4wb17Zq3nA3xYwgSILjoXNizaQAA9opWvxY,1576
99
- alita_sdk/runtime/utils/streamlit.py,sha256=gRwsT4lv4kujQfNSQripMPe1ZbmjbHNLSraW3FmL-qA,85710
100
- alita_sdk/runtime/utils/utils.py,sha256=dM8whOJAuFJFe19qJ69-FLzrUp6d2G-G6L7d4ss2XqM,346
101
- alita_sdk/tools/__init__.py,sha256=R5KsF1aqKFsBY2SGTYvlhk7HZSNyBoos0JMgSV6QHys,10196
102
- alita_sdk/tools/elitea_base.py,sha256=NILHGtsoWtOATGdQExtn6Svx0JwDVpmGUJsQZbGHEic,23142
98
+ alita_sdk/runtime/utils/streamlit.py,sha256=iuArm_XchIPOSrO60gLpvRKDVLv3-LJDpoI6NP5k6EM,85835
99
+ alita_sdk/runtime/utils/utils.py,sha256=FoHtcQZ6JFFU8a1FG_V-W22v-bis0XsIc_XQmjH6Mzg,461
100
+ alita_sdk/tools/__init__.py,sha256=kTw83lzfWf4HWlvGzfwwHhQlRhpPAbfCAhKkMWCzLFo,10324
101
+ alita_sdk/tools/elitea_base.py,sha256=WjZYjBb1K5HySsbmkbSXUa9_7HYR3xvTHaMC6XCb_Z4,23391
103
102
  alita_sdk/tools/ado/__init__.py,sha256=mD6GHcYMTtffPJkJvFPe2rzvye_IRmXmWfI7xYuZhO4,912
104
103
  alita_sdk/tools/ado/utils.py,sha256=PTCludvaQmPLakF2EbCGy66Mro4-rjDtavVP-xcB2Wc,1252
105
104
  alita_sdk/tools/ado/repos/__init__.py,sha256=guYY95Gtyb0S4Jj0V1qO0x2jlRoH0H1cKjHXNwmShow,6388
106
- alita_sdk/tools/ado/repos/repos_wrapper.py,sha256=TvABi6CbRUGcIN8h699kJ2plRCgTK83_-Ou7WzhgBws,48285
105
+ alita_sdk/tools/ado/repos/repos_wrapper.py,sha256=spBq-0QdRRNctz_Qbl4IIDpnjitzQLhvJzRIW_6jKNA,48583
107
106
  alita_sdk/tools/ado/test_plan/__init__.py,sha256=bVywTYTvdm1rUeP2krVVMRN-xDCY--ze7NFdTxJP9ow,4708
108
107
  alita_sdk/tools/ado/test_plan/test_plan_wrapper.py,sha256=p1Mptd_1J6bmkyrvf2M-FB79s8THzEesBlfgaOnRXb8,18152
109
108
  alita_sdk/tools/ado/wiki/__init__.py,sha256=WCIKOisU2h3E4SNDvGfWCMZ3nRMxfH_ZhIffmSHH3XI,4576
@@ -123,9 +122,9 @@ alita_sdk/tools/azure_ai/search/api_wrapper.py,sha256=E4p6HPDlwgxfT_i6cvg9rN4Vn_
123
122
  alita_sdk/tools/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
123
  alita_sdk/tools/base/tool.py,sha256=-N27AodZS49vdPCgFkU-bFS9bxoPopZBnNrmwInx3d0,864
125
124
  alita_sdk/tools/bitbucket/__init__.py,sha256=UYOg3PkdmERlnB5-2AetFSIwMqks7gbNstc9miE2bLY,4333
126
- alita_sdk/tools/bitbucket/api_wrapper.py,sha256=iyBaNotbjzhoAOR8WZ9Ue-8vs1J17R5BjnwR2zEbkvM,9721
125
+ alita_sdk/tools/bitbucket/api_wrapper.py,sha256=mJI9S_gE7HIZutCs_hHHB-Q6ckYty-V1F9ZIZ_kkZhI,9766
127
126
  alita_sdk/tools/bitbucket/bitbucket_constants.py,sha256=UsbhQ1iEvrKoxceTFPWTYhaXS1zSxbmjs1TwY0-P4gw,462
128
- alita_sdk/tools/bitbucket/cloud_api_wrapper.py,sha256=NrmLVDktqKqvb7dv8SRI-WggdEqCf2lGPxkT-B9pgms,13195
127
+ alita_sdk/tools/bitbucket/cloud_api_wrapper.py,sha256=RDh942FoeG57Qhf-9QmSsSuz55GuwjatarllJYV1p38,14295
129
128
  alita_sdk/tools/bitbucket/tools.py,sha256=zKBUq7t9zLa1EvhlVZzyVcZSvwvdcbtz0oslgPFZeeo,15307
130
129
  alita_sdk/tools/browser/__init__.py,sha256=iByi9uMGjd6v44SagIPTm5fu1vWnxIkjn3xsx86uRwI,5249
131
130
  alita_sdk/tools/browser/crawler.py,sha256=jhE35dU94eQLURSM-D50tspOqEMsiGzMDbYNqNSR2mU,2279
@@ -207,9 +206,9 @@ alita_sdk/tools/github/graphql_client_wrapper.py,sha256=d3AGjzLGH_hdQV2V8HeAX92d
207
206
  alita_sdk/tools/github/schemas.py,sha256=yFsqivfjCPRk9GxFJrL8sTz6nnjFCZ0j5DIfPtGSsvA,13852
208
207
  alita_sdk/tools/github/tool.py,sha256=Jnnv5lenV5ds8AAdyo2m8hSzyJ117HZBjzHC6T1ck-M,1037
209
208
  alita_sdk/tools/github/tool_prompts.py,sha256=y6ZW_FpUCE87Uop3WuQAZVRnzxO5t7xjBOI5bCqiluw,30194
210
- alita_sdk/tools/gitlab/__init__.py,sha256=_nbp3tJviTZxfewyV3Hp9-TK1vCxTmqlxhpwv0f_x4Y,3602
211
- alita_sdk/tools/gitlab/api_wrapper.py,sha256=qE99QPNMZ1MKZZHpd8EVJ5SYQxbkA8CVaJ43BsCMIGc,18179
212
- alita_sdk/tools/gitlab/tools.py,sha256=X6nK3hHeC-LgnzGSajVjnRHu6GTQdTv6HCi2sbiS0P4,18136
209
+ alita_sdk/tools/gitlab/__init__.py,sha256=hU6j3UE5WEauDTR2ul16jZwlZJ5nzxU5I1uUJ3oml4Y,4182
210
+ alita_sdk/tools/gitlab/api_wrapper.py,sha256=5wh9v_xbl1a9EfjxT2LGVJ8PvA8SBW-XO1Qv0U3pIdo,20008
211
+ alita_sdk/tools/gitlab/tools.py,sha256=vOGTlSaGaFmWn6LS6YFP-FuTqUPun9vnv1VrUcUHAZQ,16500
213
212
  alita_sdk/tools/gitlab/utils.py,sha256=Z2XiqIg54ouqqt1to-geFybmkCb1I6bpE91wfnINH1I,2320
214
213
  alita_sdk/tools/gitlab_org/__init__.py,sha256=_DJ5y92E6GuNBtCuaEZakGNInxbuFtvLYZMTMCDf3Js,3713
215
214
  alita_sdk/tools/gitlab_org/api_wrapper.py,sha256=WQr5HjxDV3Ry4vreIV67sHYesHmzreQ6teQ06Ub71Ms,28196
@@ -229,7 +228,7 @@ alita_sdk/tools/keycloak/__init__.py,sha256=0WB9yXMUUAHQRni1ghDEmd7GYa7aJPsTVlZg
229
228
  alita_sdk/tools/keycloak/api_wrapper.py,sha256=cOGr0f3S3-c6tRDBWI8wMnetjoNSxiV5rvC_0VHb8uw,3100
230
229
  alita_sdk/tools/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
231
230
  alita_sdk/tools/llm/img_utils.py,sha256=-DEdA9G7W3JNQdLK7HbptRlp0W6IVA1q2SCaxGRFS1M,1603
232
- alita_sdk/tools/llm/llm_utils.py,sha256=v3_lWP_Nk6tJLkj0BYohOun0OWNfvzqLjPdPAMl-7qY,1386
231
+ alita_sdk/tools/llm/llm_utils.py,sha256=6P2j-42JGbyqpO8lNRuEP8GEhja-LC9E-98jTelK12k,1151
233
232
  alita_sdk/tools/localgit/__init__.py,sha256=NScO0Eu-wl-rc63jjD5Qv1RXXB1qukSIJXx-yS_JQLI,2529
234
233
  alita_sdk/tools/localgit/local_git.py,sha256=gsAftNcK7nMCd8VsIkwDLs2SoG0MgpYdkQG5tmoynkA,18074
235
234
  alita_sdk/tools/localgit/tool.py,sha256=It_B24rMvFPurB355Oy5IShg2BsZTASsEoSS8hu2SXw,998
@@ -237,7 +236,7 @@ alita_sdk/tools/memory/__init__.py,sha256=8Q02h-PUvIw3bNbWbfklSJZe3qj0zAjfahq9C5
237
236
  alita_sdk/tools/ocr/__init__.py,sha256=pvslKVXyJmK0q23FFDNieuc7RBIuzNXTjTNj-GqhGb0,3335
238
237
  alita_sdk/tools/ocr/api_wrapper.py,sha256=08UF8wj1sR8DcW0z16pw19bgLatLkBF8dySW-Ds8iRk,29649
239
238
  alita_sdk/tools/ocr/text_detection.py,sha256=1DBxt54r3_HdEi93QynSIVta3rH3UpIvy799TPtDTtk,23825
240
- alita_sdk/tools/openapi/__init__.py,sha256=eVFAR8BngaJaEMYhZZZcU5ZctTtAM1oyHx1P-YM3F1Q,4450
239
+ alita_sdk/tools/openapi/__init__.py,sha256=x1U4SGApL6MmNFz9SSsQCv352wMAIdGv0z4eMmYnjCw,4984
241
240
  alita_sdk/tools/pandas/__init__.py,sha256=rGenKJH5b9__qM4GerpyLT5YEhNk7W1gA7gn6Zpew04,2748
242
241
  alita_sdk/tools/pandas/api_wrapper.py,sha256=froH0h7NPPyFUHWNioESzJ-PQQ522oBM7hNTMfh3qAw,11494
243
242
  alita_sdk/tools/pandas/dataframe/__init__.py,sha256=iOZRlYDEtwqg2MaYFFxETjN8yHAkUqSNe86cm6ao4LA,108
@@ -276,8 +275,8 @@ alita_sdk/tools/salesforce/model.py,sha256=wzpbTdUx5mANApAZFQIKzq7xXtYBiiSlKvrTX
276
275
  alita_sdk/tools/servicenow/__init__.py,sha256=VHH3qpUbEJ0tdtrIiWakohCmbifUOPgCVXERN3jRwsU,4234
277
276
  alita_sdk/tools/servicenow/api_wrapper.py,sha256=WpH-bBLGFdhehs4g-K-WAkNuaD1CSrwsDpdgB3RG53s,6120
278
277
  alita_sdk/tools/servicenow/servicenow_client.py,sha256=Rdqfu-ll-qbnclMzChLZBsfXRDzgoX_FdeI2WLApWxc,3269
279
- alita_sdk/tools/sharepoint/__init__.py,sha256=HqKQDFboab1AYh20uJvHxs9HFLJSqVfVTjpX9sfOP-8,2995
280
- alita_sdk/tools/sharepoint/api_wrapper.py,sha256=j5aArfEHqV3_M8JK_HZU_fzchjQXiAqkq83Osdx3Gls,9534
278
+ alita_sdk/tools/sharepoint/__init__.py,sha256=CiaOmzPl-9WNWZU9AtP-Y-Mg_uBnxeKFTnUjJ5aQbmA,3036
279
+ alita_sdk/tools/sharepoint/api_wrapper.py,sha256=YNtXmathHN46FCD4M9zDs2li0USdKW35lRXckYU8XdU,10011
281
280
  alita_sdk/tools/sharepoint/authorization_helper.py,sha256=n-nL5dlBoLMK70nHu7P2RYCb8C6c9HMA_gEaw8LxuhE,2007
282
281
  alita_sdk/tools/sharepoint/utils.py,sha256=fZ1YzAu5CTjKSZeslowpOPH974902S8vCp1Wu7L44LM,446
283
282
  alita_sdk/tools/slack/__init__.py,sha256=mbP2JiHybGSAH0ay8pxvPCqeU2eb9CK_NaCKG1uhPE4,3894
@@ -288,9 +287,9 @@ alita_sdk/tools/sql/models.py,sha256=AKJgSl_kEEz4fZfw3kbvdGHXaRZ-yiaqfJOB6YOj3i0
288
287
  alita_sdk/tools/testio/__init__.py,sha256=qi12wyJXN02hrUXg08CbijcCL5pi30JMbJfiXjn1Zr0,2646
289
288
  alita_sdk/tools/testio/api_wrapper.py,sha256=BvmL5h634BzG6p7ajnQLmj-uoAw1gjWnd4FHHu1h--Q,21638
290
289
  alita_sdk/tools/testrail/__init__.py,sha256=YILz5ZjkHfBg1tQ-FKFBP_s0uo2WDY110Qgsg0kBntM,4157
291
- alita_sdk/tools/testrail/api_wrapper.py,sha256=CE7oUREaLL0AXH-RF3PXORp1PrIPthR5_xnCgD6DBT4,30373
290
+ alita_sdk/tools/testrail/api_wrapper.py,sha256=Sfe_5sJk-cIAYRlpO7DcCN117UAPbBIzf_HI6fVrOQ8,31999
292
291
  alita_sdk/tools/utils/__init__.py,sha256=155xepXPr4OEzs2Mz5YnjXcBpxSv1X2eznRUVoPtyK0,3268
293
- alita_sdk/tools/utils/content_parser.py,sha256=cdAENBS2-KPBAVbUczsuT-YJEdouKQ0SxCU6bWFfgak,4736
292
+ alita_sdk/tools/utils/content_parser.py,sha256=Ou967dO3JnnL9kAidzofwV6TVe2_ul86ZMjcBOK-VnA,7811
294
293
  alita_sdk/tools/xray/__init__.py,sha256=dn-Ine9mHF8c_yZ-pWkn-gvSvSmGwdrqxPJOz6Cmqc4,3297
295
294
  alita_sdk/tools/xray/api_wrapper.py,sha256=l7Cwvh_5bEaH0IM3yLo1PSClqV1E20wH_sEHaJntM3s,8517
296
295
  alita_sdk/tools/yagmail/__init__.py,sha256=c4Qn3em0tLxzRmFKpzbBgY9W2EnOoKf0azoDJHng5CY,2208
@@ -307,8 +306,8 @@ alita_sdk/tools/zephyr_scale/api_wrapper.py,sha256=VDsSFUTnBne1mFNssX2eLFxThXAhX
307
306
  alita_sdk/tools/zephyr_squad/__init__.py,sha256=0AI_j27xVO5Gk5HQMFrqPTd4uvuVTpiZUicBrdfEpKg,2796
308
307
  alita_sdk/tools/zephyr_squad/api_wrapper.py,sha256=kmw_xol8YIYFplBLWTqP_VKPRhL_1ItDD0_vXTe_UuI,14906
309
308
  alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py,sha256=R371waHsms4sllHCbijKYs90C-9Yu0sSR3N4SUfQOgU,5066
310
- alita_sdk-0.3.205.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
311
- alita_sdk-0.3.205.dist-info/METADATA,sha256=yvmS329tNz5JkW-qID4aiG3vM2cIGDxy3loJE8u1ivM,18917
312
- alita_sdk-0.3.205.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
313
- alita_sdk-0.3.205.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
314
- alita_sdk-0.3.205.dist-info/RECORD,,
309
+ alita_sdk-0.3.206.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
310
+ alita_sdk-0.3.206.dist-info/METADATA,sha256=XAKlNdJggXGDhxy1Nw6k9pKDJYvPTWv1LAxUhNvnpys,18917
311
+ alita_sdk-0.3.206.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
312
+ alita_sdk-0.3.206.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
313
+ alita_sdk-0.3.206.dist-info/RECORD,,