alita-sdk 0.3.410__py3-none-any.whl → 0.3.412__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.
@@ -290,6 +290,7 @@ class Assistant:
290
290
  'value': 'messages'
291
291
  }
292
292
  },
293
+ 'step_limit': self.max_iterations,
293
294
  'input': ['messages'],
294
295
  'output': ['messages'],
295
296
  'transition': 'END'
@@ -315,7 +316,8 @@ class Assistant:
315
316
  store=self.store,
316
317
  debug=False,
317
318
  for_subgraph=False,
318
- alita_client=self.alita_client
319
+ alita_client=self.alita_client,
320
+ steps_limit=self.max_iterations
319
321
  )
320
322
 
321
323
  return agent
@@ -330,7 +332,8 @@ class Assistant:
330
332
  agent = create_graph(
331
333
  client=self.client, tools=self.tools,
332
334
  yaml_schema=self.prompt, memory=memory,
333
- alita_client=self.alita_client
335
+ alita_client=self.alita_client,
336
+ steps_limit=self.max_iterations
334
337
  )
335
338
  #
336
339
  return agent
@@ -30,7 +30,10 @@ class AlitaJSONLoader(BaseLoader):
30
30
  with open(self.file_path, encoding=self.encoding) as f:
31
31
  return json.load(f)
32
32
  elif hasattr(self, 'file_content') and self.file_content:
33
- return json.load(self.file_content)
33
+ if isinstance(self.file_content, bytes):
34
+ return json.loads(self.file_content.decode(self.encoding))
35
+ else:
36
+ return json.load(self.file_content)
34
37
  else:
35
38
  raise ValueError("Neither file_path nor file_content is provided.")
36
39
 
@@ -255,17 +255,17 @@ document_loaders_map = {
255
255
  'extract_images': False,
256
256
  }
257
257
  },
258
- '.py': {
259
- 'class': AlitaPythonLoader,
260
- 'mime_type': 'text/x-python',
261
- 'is_multimodal_processing': False,
262
- 'kwargs': {},
263
- 'allowed_to_override': DEFAULT_ALLOWED_BASE
264
- }
258
+ # '.py': {
259
+ # 'class': AlitaPythonLoader,
260
+ # 'mime_type': 'text/x-python',
261
+ # 'is_multimodal_processing': False,
262
+ # 'kwargs': {},
263
+ # 'allowed_to_override': DEFAULT_ALLOWED_BASE
264
+ # }
265
265
  }
266
266
 
267
267
  code_extensions = [
268
- # '.py', # Python
268
+ '.py', # Python
269
269
  '.js', # JavaScript
270
270
  '.ts', # TypeScript
271
271
  '.java', # Java
@@ -596,7 +596,7 @@ def create_graph(
596
596
  else:
597
597
  # Use all available tools
598
598
  available_tools = [tool for tool in tools if isinstance(tool, BaseTool)]
599
-
599
+
600
600
  lg_builder.add_node(node_id, LLMNode(
601
601
  client=client,
602
602
  input_mapping=node.get('input_mapping', {'messages': {'type': 'variable', 'value': 'messages'}}),
@@ -607,7 +607,9 @@ def create_graph(
607
607
  input_variables=node.get('input', ['messages']),
608
608
  structured_output=node.get('structured_output', False),
609
609
  available_tools=available_tools,
610
- tool_names=tool_names))
610
+ tool_names=tool_names,
611
+ steps_limit=kwargs.get('steps_limit', 25)
612
+ ))
611
613
  elif node_type == 'router':
612
614
  # Add a RouterNode as an independent node
613
615
  lg_builder.add_node(node_id, RouterNode(
@@ -30,6 +30,7 @@ class LLMNode(BaseTool):
30
30
  structured_output: Optional[bool] = Field(default=False, description='Whether to use structured output')
31
31
  available_tools: Optional[List[BaseTool]] = Field(default=None, description='Available tools for binding')
32
32
  tool_names: Optional[List[str]] = Field(default=None, description='Specific tool names to filter')
33
+ steps_limit: Optional[int] = Field(default=25, description='Maximum steps for tool execution')
33
34
 
34
35
  def get_filtered_tools(self) -> List[BaseTool]:
35
36
  """
@@ -184,17 +185,16 @@ class LLMNode(BaseTool):
184
185
  def __perform_tool_calling(self, completion, messages, llm_client, config):
185
186
  # Handle iterative tool-calling and execution
186
187
  new_messages = messages + [completion]
187
- max_iterations = 15
188
188
  iteration = 0
189
189
 
190
190
  # Continue executing tools until no more tool calls or max iterations reached
191
191
  current_completion = completion
192
192
  while (hasattr(current_completion, 'tool_calls') and
193
193
  current_completion.tool_calls and
194
- iteration < max_iterations):
194
+ iteration < self.steps_limit):
195
195
 
196
196
  iteration += 1
197
- logger.info(f"Tool execution iteration {iteration}/{max_iterations}")
197
+ logger.info(f"Tool execution iteration {iteration}/{self.steps_limit}")
198
198
 
199
199
  # Execute each tool call in the current completion
200
200
  tool_calls = current_completion.tool_calls if hasattr(current_completion.tool_calls,
@@ -285,10 +285,10 @@ class LLMNode(BaseTool):
285
285
  break
286
286
 
287
287
  # Log completion status
288
- if iteration >= max_iterations:
289
- logger.warning(f"Reached maximum iterations ({max_iterations}) for tool execution")
288
+ if iteration >= self.steps_limit:
289
+ logger.warning(f"Reached maximum iterations ({self.steps_limit}) for tool execution")
290
290
  # Add a warning message to the chat
291
- warning_msg = f"Maximum tool execution iterations ({max_iterations}) reached. Stopping tool execution."
291
+ warning_msg = f"Maximum tool execution iterations ({self.steps_limit}) reached. Stopping tool execution."
292
292
  new_messages.append(AIMessage(content=warning_msg))
293
293
  else:
294
294
  logger.info(f"Tool execution completed after {iteration} iterations")
@@ -92,21 +92,24 @@ def parse_file_content(file_name=None, file_content=None, is_capture_image: bool
92
92
  return ToolException(
93
93
  "Not supported type of files entered. Supported types are TXT, DOCX, PDF, PPTX, XLSX and XLS only.")
94
94
 
95
- if hasattr(loader, 'get_content'):
96
- return loader.get_content()
97
- else:
98
- extension = Path(file_path if file_path else file_name).suffix
99
- loader_kwargs = get_loader_kwargs(loaders_map.get(extension), file_name, file_content, is_capture_image, page_number, sheet_name, llm, file_path, excel_by_sheets)
100
- if file_content:
101
- return load_content_from_bytes(file_content=file_content,
102
- extension=extension,
103
- loader_extra_config=loader_kwargs,
104
- llm=llm)
95
+ try:
96
+ if hasattr(loader, 'get_content'):
97
+ return loader.get_content()
105
98
  else:
106
- return load_content(file_path=file_path,
107
- extension=extension,
108
- loader_extra_config=loader_kwargs,
109
- llm=llm)
99
+ extension = Path(file_path if file_path else file_name).suffix
100
+ loader_kwargs = get_loader_kwargs(loaders_map.get(extension), file_name, file_content, is_capture_image, page_number, sheet_name, llm, file_path, excel_by_sheets)
101
+ if file_content:
102
+ return load_content_from_bytes(file_content=file_content,
103
+ extension=extension,
104
+ loader_extra_config=loader_kwargs,
105
+ llm=llm)
106
+ else:
107
+ return load_content(file_path=file_path,
108
+ extension=extension,
109
+ loader_extra_config=loader_kwargs,
110
+ llm=llm)
111
+ except Exception as e:
112
+ return ToolException(f"Error reading file ({file_name or file_path}) content. Make sure these types are supported: {str(e)}")
110
113
 
111
114
  def load_file_docs(file_name=None, file_content=None, is_capture_image: bool = False, page_number: int = None,
112
115
  sheet_name: str = None, llm=None, file_path: str = None, excel_by_sheets: bool = False) -> List[Document] | ToolException:
@@ -153,7 +156,7 @@ def prepare_loader(file_name=None, file_content=None, is_capture_image: bool = F
153
156
 
154
157
  loader_object = loaders_map.get(extension)
155
158
  if not loader_object:
156
- return None
159
+ loader_object = loaders_map.get('.txt') # Default to text loader if no specific loader found
157
160
  loader_kwargs = get_loader_kwargs(loader_object, file_name, file_content, is_capture_image, page_number, sheet_name, llm, file_path, excel_by_sheets, prompt)
158
161
  loader = loader_object['class'](**loader_kwargs)
159
162
  return loader
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.410
3
+ Version: 0.3.412
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 <lifedj27@gmail.com>, Artem Dubrovskiy <ad13box@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -41,11 +41,11 @@ alita_sdk/runtime/clients/datasource.py,sha256=HAZovoQN9jBg0_-lIlGBQzb4FJdczPhkH
41
41
  alita_sdk/runtime/clients/prompt.py,sha256=li1RG9eBwgNK_Qf0qUaZ8QNTmsncFrAL2pv3kbxZRZg,1447
42
42
  alita_sdk/runtime/clients/sandbox_client.py,sha256=OhEasE0MxBBDw4o76xkxVCpNpr3xJ8spQsrsVxMrjUA,16192
43
43
  alita_sdk/runtime/langchain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- alita_sdk/runtime/langchain/assistant.py,sha256=40scs7KlrpuZkenG9bTGsbfNJTr9J_vvOuHDpQr9RJA,15903
44
+ alita_sdk/runtime/langchain/assistant.py,sha256=qKoEjbGuUnX-OZDHmSaK3plb1jON9unzEwAjxBT9DY8,16044
45
45
  alita_sdk/runtime/langchain/chat_message_template.py,sha256=kPz8W2BG6IMyITFDA5oeb5BxVRkHEVZhuiGl4MBZKdc,2176
46
46
  alita_sdk/runtime/langchain/constants.py,sha256=eHVJ_beJNTf1WJo4yq7KMK64fxsRvs3lKc34QCXSbpk,3319
47
47
  alita_sdk/runtime/langchain/indexer.py,sha256=0ENHy5EOhThnAiYFc7QAsaTNp9rr8hDV_hTK8ahbatk,37592
48
- alita_sdk/runtime/langchain/langraph_agent.py,sha256=oy-GuZKly4zeJ4QcaKTsdqqtzInbFXuupmJWhgA3XcY,50121
48
+ alita_sdk/runtime/langchain/langraph_agent.py,sha256=SoA7il7_Q9OyJbCDVubVMVNkL1NI0OzIU7FR33R7onI,50185
49
49
  alita_sdk/runtime/langchain/mixedAgentParser.py,sha256=M256lvtsL3YtYflBCEp-rWKrKtcY1dJIyRGVv7KW9ME,2611
50
50
  alita_sdk/runtime/langchain/mixedAgentRenderes.py,sha256=asBtKqm88QhZRILditjYICwFVKF5KfO38hu2O-WrSWE,5964
51
51
  alita_sdk/runtime/langchain/store_manager.py,sha256=i8Fl11IXJhrBXq1F1ukEVln57B1IBe-tqSUvfUmBV4A,2218
@@ -60,7 +60,7 @@ alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py,sha256=HU
60
60
  alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py,sha256=YI8QaHRjCl8WtxuQKMXi_iTJBZ6da3OTNgoDFqNjz1g,9294
61
61
  alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py,sha256=5WXGcyHraSVj3ANHj_U6X4EDikoekrIYtS0Q_QqNIng,2608
62
62
  alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py,sha256=QwgBJE-BvOasjgT1hYHZc0MP0F_elirUjSzKixoM6fY,6610
63
- alita_sdk/runtime/langchain/document_loaders/AlitaJSONLoader.py,sha256=Nav2cgCQKOHQi_ZgYYn_iFdP_Os56KVlVR5nHGXecBc,3445
63
+ alita_sdk/runtime/langchain/document_loaders/AlitaJSONLoader.py,sha256=iKCHUkEISLX1mSiMrhbKXhLPWHIVov6gQ0FahUrHAFM,3607
64
64
  alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py,sha256=M2q3YThkps0yAZOjfoLcyE7qycVTYKcXEGtpmp0N6C8,10950
65
65
  alita_sdk/runtime/langchain/document_loaders/AlitaMarkdownLoader.py,sha256=RGHDfleYTn7AAc3H-yFZrjm06L0Ux14ZtEJpFlVBNCA,2474
66
66
  alita_sdk/runtime/langchain/document_loaders/AlitaPDFLoader.py,sha256=olVThKX9Mmv4muTW0cAQBkgeNqU4IcdLVhqpBuzwly4,5904
@@ -71,7 +71,7 @@ alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py,sha256=EO1nJDRP
71
71
  alita_sdk/runtime/langchain/document_loaders/AlitaTextLoader.py,sha256=EiCIAF_OxSrbuwgOFk2IpxRMvFbctITt2jAI0g_atpk,3586
72
72
  alita_sdk/runtime/langchain/document_loaders/ImageParser.py,sha256=RQ4zGdSw42ec8c6Eb48uFadayWuiT4FbwhGVwhSw60s,1065
73
73
  alita_sdk/runtime/langchain/document_loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
- alita_sdk/runtime/langchain/document_loaders/constants.py,sha256=ITDAOyu2QdObcK-yjucJu3drgavCCFWvkjXDj2oYYS8,9413
74
+ alita_sdk/runtime/langchain/document_loaders/constants.py,sha256=BFXPTMI8ocF2uzWcY6ZAZ6F_uRNaurA5ibK6YvhcH3A,9425
75
75
  alita_sdk/runtime/langchain/document_loaders/utils.py,sha256=9xghESf3axBbwxATyVuS0Yu-TWe8zWZnXgCD1ZVyNW0,2414
76
76
  alita_sdk/runtime/langchain/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
77
  alita_sdk/runtime/langchain/interfaces/kwextractor.py,sha256=kSJA9L8g8UArmHu7Bd9dIO0Rrq86JPUb8RYNlnN68FQ,3072
@@ -114,7 +114,7 @@ alita_sdk/runtime/tools/function.py,sha256=jk_JrtuYByR9Df5EFOGFheB9HktNPJcOwf4js
114
114
  alita_sdk/runtime/tools/graph.py,sha256=7jImBBSEdP5Mjnn2keOiyUwdGDFhEXLUrgUiugO3mgA,3503
115
115
  alita_sdk/runtime/tools/image_generation.py,sha256=Kls9D_ke_SK7xmVr7I9SlQcAEBJc86gf66haN0qIj9k,7469
116
116
  alita_sdk/runtime/tools/indexer_tool.py,sha256=whSLPevB4WD6dhh2JDXEivDmTvbjiMV1MrPl9cz5eLA,4375
117
- alita_sdk/runtime/tools/llm.py,sha256=rn7gYn__yLyKyou61SN3DadtWzY3pcYR1G2IBbrtL9M,15452
117
+ alita_sdk/runtime/tools/llm.py,sha256=OEhf4_YlZIihIpkuRKbbWJ_Lfk-V_rJHpy2NRm5xuCg,15533
118
118
  alita_sdk/runtime/tools/loop.py,sha256=uds0WhZvwMxDVFI6MZHrcmMle637cQfBNg682iLxoJA,8335
119
119
  alita_sdk/runtime/tools/loop_output.py,sha256=U4hO9PCQgWlXwOq6jdmCGbegtAxGAPXObSxZQ3z38uk,8069
120
120
  alita_sdk/runtime/tools/mcp_server_tool.py,sha256=MhLxZJ44LYrB_0GrojmkyqKoDRaqIHkEQAsg718ipog,4277
@@ -331,7 +331,7 @@ alita_sdk/tools/testrail/__init__.py,sha256=Xg4nVjULL_D8JpIXLYXppnwUfGF4-lguFwKH
331
331
  alita_sdk/tools/testrail/api_wrapper.py,sha256=tQcGlFJmftvs5ZiO4tsP19fCo4CrJeq_UEvQR1liVfE,39891
332
332
  alita_sdk/tools/utils/__init__.py,sha256=xB9OQgW65DftadrSpoAAitnEIbIXZKBOCji0NDe7FRM,3923
333
333
  alita_sdk/tools/utils/available_tools_decorator.py,sha256=IbrdfeQkswxUFgvvN7-dyLMZMyXLiwvX7kgi3phciCk,273
334
- alita_sdk/tools/utils/content_parser.py,sha256=7ohj8HeL_-rmc-Fv0TS8IpxIQC8tOpfuhyT3XlWx-gQ,15368
334
+ alita_sdk/tools/utils/content_parser.py,sha256=-zRABq9-qITrslIo6so0iSGMhjZjJOvLRT8KjKvZT5g,15680
335
335
  alita_sdk/tools/vector_adapters/VectorStoreAdapter.py,sha256=-9ByRh8bVRraTcJPS7SE-2l3en6A4UkKGS9iAd9fa3w,19722
336
336
  alita_sdk/tools/vector_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
337
337
  alita_sdk/tools/xray/__init__.py,sha256=eOMWP8VamFbbJgt1xrGpGPqB9ByOTA0Cd3LCaETzGk4,4376
@@ -353,8 +353,8 @@ alita_sdk/tools/zephyr_scale/api_wrapper.py,sha256=kT0TbmMvuKhDUZc0i7KO18O38JM9S
353
353
  alita_sdk/tools/zephyr_squad/__init__.py,sha256=0ne8XLJEQSLOWfzd2HdnqOYmQlUliKHbBED5kW_Vias,2895
354
354
  alita_sdk/tools/zephyr_squad/api_wrapper.py,sha256=kmw_xol8YIYFplBLWTqP_VKPRhL_1ItDD0_vXTe_UuI,14906
355
355
  alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py,sha256=R371waHsms4sllHCbijKYs90C-9Yu0sSR3N4SUfQOgU,5066
356
- alita_sdk-0.3.410.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
357
- alita_sdk-0.3.410.dist-info/METADATA,sha256=MLQh2dpxrz-Zmhd9PKjwZFRTjgmQUd8cC5o0gOjvtJQ,19071
358
- alita_sdk-0.3.410.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
359
- alita_sdk-0.3.410.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
360
- alita_sdk-0.3.410.dist-info/RECORD,,
356
+ alita_sdk-0.3.412.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
357
+ alita_sdk-0.3.412.dist-info/METADATA,sha256=jI-c9cZS9KuAcIpPDr76H3WTDqTqp7zzEPh7WvCx1j0,19071
358
+ alita_sdk-0.3.412.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
359
+ alita_sdk-0.3.412.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
360
+ alita_sdk-0.3.412.dist-info/RECORD,,