alita-sdk 0.3.380__py3-none-any.whl → 0.3.382__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.

Potentially problematic release.


This version of alita-sdk might be problematic. Click here for more details.

@@ -414,7 +414,8 @@ class VectorStoreWrapper(BaseToolApiWrapper):
414
414
  return {"status": "error", "message": f"Error: {format_exc()}"}
415
415
  if _documents:
416
416
  add_documents(vectorstore=self.vectorstore, documents=_documents)
417
- return {"status": "ok", "message": f"successfully indexed {documents_count} documents"}
417
+ return {"status": "ok", "message": f"successfully indexed {documents_count} documents" if documents_count > 0
418
+ else "No new documents to index."}
418
419
 
419
420
  def search_documents(self, query:str, doctype: str = 'code',
420
421
  filter:dict|str={}, cut_off: float=0.5,
@@ -308,7 +308,8 @@ class VectorStoreWrapperBase(BaseToolApiWrapper):
308
308
  return {"status": "error", "message": f"Error: {format_exc()}"}
309
309
  if _documents:
310
310
  add_documents(vectorstore=self.vectorstore, documents=_documents)
311
- return {"status": "ok", "message": f"successfully indexed {documents_count} documents"}
311
+ return {"status": "ok", "message": f"successfully indexed {documents_count} documents" if documents_count > 0
312
+ else "no documents to index"}
312
313
 
313
314
  def search_documents(self, query:str, doctype: str = 'code',
314
315
  filter:dict|str={}, cut_off: float=0.5,
@@ -161,8 +161,6 @@ class BaseIndexerToolkit(VectorStoreWrapperBase):
161
161
  if clean_index:
162
162
  self._clean_index(index_name)
163
163
  #
164
- self.index_meta_init(index_name, kwargs)
165
- #
166
164
  self._log_tool_event(f"Indexing data into collection with suffix '{index_name}'. It can take some time...")
167
165
  self._log_tool_event(f"Loading the documents to index...{kwargs}")
168
166
  documents = self._base_loader(**kwargs)
@@ -176,11 +174,13 @@ class BaseIndexerToolkit(VectorStoreWrapperBase):
176
174
  f"Processing documents to collect dependencies and prepare them for indexing...")
177
175
  self._save_index_generator(documents, documents_count, chunking_tool, chunking_config, index_name=index_name, result=result)
178
176
  #
179
- self.index_meta_update(index_name, IndexerKeywords.INDEX_META_COMPLETED.value, result["count"])
177
+ results_count = result["count"]
178
+ self.index_meta_update(index_name, IndexerKeywords.INDEX_META_COMPLETED.value, results_count)
180
179
  #
181
- return {"status": "ok", "message": f"successfully indexed {result["count"]} documents"}
180
+ return {"status": "ok", "message": f"successfully indexed {results_count} documents" if results_count > 0
181
+ else "no new documents to index"}
182
182
  except Exception as e:
183
- self.index_meta_update(index_name, IndexerKeywords.INDEX_META_FAILED.value, result["count"])
183
+ self.index_meta_update(index_name, IndexerKeywords.INDEX_META_FAILED.value, results_count)
184
184
  raise e
185
185
 
186
186
 
@@ -455,39 +455,6 @@ class BaseIndexerToolkit(VectorStoreWrapperBase):
455
455
  reranking_config=reranking_config,
456
456
  extended_search=extended_search
457
457
  )
458
-
459
- def index_meta_init(self, index_name: str, index_configuration: dict[str, Any]):
460
- index_meta_raw = super().get_index_meta(index_name)
461
- from ..runtime.langchain.interfaces.llm_processor import add_documents
462
- created_on = time.time()
463
- metadata = {
464
- "collection": index_name,
465
- "type": IndexerKeywords.INDEX_META_TYPE.value,
466
- "indexed": 0,
467
- "state": IndexerKeywords.INDEX_META_IN_PROGRESS.value,
468
- "index_configuration": index_configuration,
469
- "created_on": created_on,
470
- "updated_on": created_on,
471
- "history": "[]",
472
- }
473
- index_meta_ids = None
474
- #
475
- if index_meta_raw:
476
- history_raw = index_meta_raw.get("metadata", {}).get("history", "[]")
477
- if isinstance(history_raw, str) and history_raw.strip():
478
- try:
479
- history = json.loads(history_raw)
480
- except (json.JSONDecodeError, TypeError):
481
- history = []
482
- else:
483
- history = []
484
- new_history_item = {k: v for k, v in index_meta_raw.get("metadata", {}).items() if k != "history"}
485
- history.append(new_history_item)
486
- metadata["history"] = json.dumps(history)
487
- index_meta_ids = [index_meta_raw.get("id")]
488
- #
489
- index_meta_doc = Document(page_content=f"{IndexerKeywords.INDEX_META_TYPE.value}_{index_name}", metadata=metadata)
490
- add_documents(vectorstore=self.vectorstore, documents=[index_meta_doc], ids=index_meta_ids)
491
458
 
492
459
  def index_meta_update(self, index_name: str, state: str, result: int):
493
460
  index_meta_raw = super().get_index_meta(index_name)
@@ -7,12 +7,14 @@ from json import JSONDecodeError
7
7
  from typing import Optional, List, Any, Dict, Callable, Generator, Literal
8
8
 
9
9
  import requests
10
+ from atlassian.errors import ApiError
10
11
  from langchain_community.document_loaders.confluence import ContentFormat
11
12
  from langchain_core.documents import Document
12
13
  from langchain_core.messages import HumanMessage
13
14
  from langchain_core.tools import ToolException
14
15
  from markdownify import markdownify
15
16
  from pydantic import Field, PrivateAttr, model_validator, create_model, SecretStr
17
+ from requests import HTTPError
16
18
  from tenacity import retry, stop_after_attempt, wait_exponential, before_sleep_log
17
19
 
18
20
  from alita_sdk.tools.non_code_indexer_toolkit import NonCodeIndexerToolkit
@@ -194,6 +196,7 @@ class ConfluenceAPIWrapper(NonCodeIndexerToolkit):
194
196
  keep_markdown_format: Optional[bool] = True
195
197
  ocr_languages: Optional[str] = None
196
198
  keep_newlines: Optional[bool] = True
199
+ _errors: Optional[list[str]] = None
197
200
  _image_cache: ImageDescriptionCache = PrivateAttr(default_factory=ImageDescriptionCache)
198
201
 
199
202
  @model_validator(mode='before')
@@ -498,7 +501,9 @@ class ConfluenceAPIWrapper(NonCodeIndexerToolkit):
498
501
  restrictions = self.client.get_all_restrictions_for_content(page["id"])
499
502
 
500
503
  return (
501
- page["status"] == "current"
504
+ (page["status"] == "current"
505
+ # allow user to see archived content if needed
506
+ or page["status"] == "archived")
502
507
  and not restrictions["read"]["restrictions"]["user"]["results"]
503
508
  and not restrictions["read"]["restrictions"]["group"]["results"]
504
509
  )
@@ -518,18 +523,34 @@ class ConfluenceAPIWrapper(NonCodeIndexerToolkit):
518
523
  ),
519
524
  before_sleep=before_sleep_log(logger, logging.WARNING),
520
525
  )(self.client.get_page_by_id)
521
- page = get_page(
522
- page_id=page_id, expand=f"{self.content_format.value},version"
523
- )
526
+ try:
527
+ page = get_page(
528
+ page_id=page_id, expand=f"{self.content_format.value},version"
529
+ )
530
+ except (ApiError, HTTPError) as e:
531
+ logger.error(f"Error fetching page with ID {page_id}: {e}")
532
+ page_content_temp = f"Confluence API Error: cannot fetch the page with ID {page_id}: {e}"
533
+ # store errors
534
+ if self._errors is None:
535
+ self._errors = []
536
+ self._errors.append(page_content_temp)
537
+ return Document(page_content=page_content_temp,
538
+ metadata={})
524
539
  if not self.include_restricted_content and not self.is_public_page(page):
525
540
  continue
526
541
  yield self.process_page(page, skip_images)
527
542
 
543
+ def _log_errors(self):
544
+ """ Log errors encountered during toolkit execution. """
545
+ if self._errors:
546
+ logger.info(f"Errors encountered during toolkit execution: {self._errors}")
547
+
528
548
  def read_page_by_id(self, page_id: str, skip_images: bool = False):
529
549
  """Reads a page by its id in the Confluence space. If id is not available, but there is a title - use get_page_id first."""
530
550
  result = list(self.get_pages_by_id([page_id], skip_images))
531
551
  if not result:
532
- "Page not found"
552
+ return f"Pages not found. Errors: {self._errors}" if self._errors \
553
+ else "Pages not found or you do not have access to them."
533
554
  return result[0].page_content
534
555
  # return self._strip_base64_images(result[0].page_content) if skip_images else result[0].page_content
535
556
 
@@ -145,7 +145,7 @@ class PGVectorAdapter(VectorStoreAdapter):
145
145
 
146
146
  result = {}
147
147
  try:
148
- vectorstore_wrapper._log_data("Retrieving already indexed data from PGVector vectorstore",
148
+ vectorstore_wrapper._log_tool_event("Retrieving already indexed data from PGVector vectorstore",
149
149
  tool_name="get_indexed_data")
150
150
  store = vectorstore_wrapper.vectorstore
151
151
  with Session(store.session_maker.bind) as session:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.380
3
+ Version: 0.3.382
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
@@ -123,8 +123,8 @@ alita_sdk/runtime/tools/prompt.py,sha256=nJafb_e5aOM1Rr3qGFCR-SKziU9uCsiP2okIMs9
123
123
  alita_sdk/runtime/tools/router.py,sha256=p7e0tX6YAWw2M2Nq0A_xqw1E2P-Xz1DaJvhUstfoZn4,1584
124
124
  alita_sdk/runtime/tools/sandbox.py,sha256=CBPaHwGv74FiHbELuwLBEvB2C-HhbptUnSMipzJUSZA,14282
125
125
  alita_sdk/runtime/tools/tool.py,sha256=lE1hGi6qOAXG7qxtqxarD_XMQqTghdywf261DZawwno,5631
126
- alita_sdk/runtime/tools/vectorstore.py,sha256=FsnxdnvMK5bUEFxz0eeSHeNpVOk2gxOeXjoSlvCo8rs,34327
127
- alita_sdk/runtime/tools/vectorstore_base.py,sha256=lNz6bOMpHOY8JiHT7BkoDbyj3kLykcKlCx4zOu_IgPE,28252
126
+ alita_sdk/runtime/tools/vectorstore.py,sha256=0SzfY1dYrGr7YUapJzXY01JFyzLv36dPjwHzs1XZIM4,34392
127
+ alita_sdk/runtime/tools/vectorstore_base.py,sha256=k_6LAhhBJEs5SXCQJI3bBvJLQli6_3pHjqF6SCQGJGc,28312
128
128
  alita_sdk/runtime/utils/AlitaCallback.py,sha256=E4LlSBuCHWiUq6W7IZExERHZY0qcmdjzc_rJlF2iQIw,7356
129
129
  alita_sdk/runtime/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
130
130
  alita_sdk/runtime/utils/constants.py,sha256=Xntx1b_uxUzT4clwqHA_U6K8y5bBqf_4lSQwXdcWrp4,13586
@@ -136,7 +136,7 @@ alita_sdk/runtime/utils/toolkit_runtime.py,sha256=MU63Fpxj0b5_r1IUUc0Q3-PN9VwL7r
136
136
  alita_sdk/runtime/utils/toolkit_utils.py,sha256=I9QFqnaqfVgN26LUr6s3XlBlG6y0CoHURnCzG7XcwVs,5311
137
137
  alita_sdk/runtime/utils/utils.py,sha256=PJK8A-JVIzY1IowOjGG8DIqsIiEFe65qDKvFcjJCKWA,1041
138
138
  alita_sdk/tools/__init__.py,sha256=NrZyTEdEhmO1NnAR9RFMQ05Mb-kgu68mAQz3n5r0HYs,10692
139
- alita_sdk/tools/base_indexer_toolkit.py,sha256=i0S3tIdXrWoRx5B5v0cQMArnmOTsinC9SMLihlEcdxM,26801
139
+ alita_sdk/tools/base_indexer_toolkit.py,sha256=RtFyGTWcnfXVKqTPvThjh42wg0Yp1TbLsPE6pnvIjko,25264
140
140
  alita_sdk/tools/code_indexer_toolkit.py,sha256=p3zVnCnQTUf7JUGra9Rl6GEK2W1-hvvz0Xsgz0v0muM,7292
141
141
  alita_sdk/tools/elitea_base.py,sha256=34fmVdYgd2YXifU5LFNjMQysr4OOIZ6AOZjq4GxLgSw,34417
142
142
  alita_sdk/tools/non_code_indexer_toolkit.py,sha256=6Lrqor1VeSLbPLDHAfg_7UAUqKFy1r_n6bdsc4-ak98,1315
@@ -231,7 +231,7 @@ alita_sdk/tools/code/loaders/codesearcher.py,sha256=XoXXZtIQZhvjIwZlnl_4wVGHC-3s
231
231
  alita_sdk/tools/code/sonar/__init__.py,sha256=iPqj2PnUY4-btJjaDeWIPdn-c9L_uCr_qOoP_uwRoXw,3360
232
232
  alita_sdk/tools/code/sonar/api_wrapper.py,sha256=nNqxcWN_6W8c0ckj-Er9HkNuAdgQLoWBXh5UyzNutis,2653
233
233
  alita_sdk/tools/confluence/__init__.py,sha256=zRnPBM1c7VTRTS955HNc7AEGV5t8ACc2f9wBXmmeXao,6845
234
- alita_sdk/tools/confluence/api_wrapper.py,sha256=1HZftLQFzpNwGSN-9LPp8RQr1X-0fsKzmFlc-WEadZU,89545
234
+ alita_sdk/tools/confluence/api_wrapper.py,sha256=5U6GIO65o0WoS_4f-Rci3n6CsCh4TGeXJNWzgj2iLEI,90631
235
235
  alita_sdk/tools/confluence/loader.py,sha256=4bf5qrJMEiJzuZp2NlxO2XObLD1w7fxss_WyMUpe8sg,9290
236
236
  alita_sdk/tools/confluence/utils.py,sha256=Lxo6dBD0OlvM4o0JuK6qeB_4LV9BptiwJA9e1vqNcDw,435
237
237
  alita_sdk/tools/custom_open_api/__init__.py,sha256=9aT5SPNPWcJC6jMZEM-3rUCXVULj_3-qJLQKmnreKNo,2537
@@ -332,7 +332,7 @@ alita_sdk/tools/testrail/api_wrapper.py,sha256=tQcGlFJmftvs5ZiO4tsP19fCo4CrJeq_U
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
334
  alita_sdk/tools/utils/content_parser.py,sha256=7ohj8HeL_-rmc-Fv0TS8IpxIQC8tOpfuhyT3XlWx-gQ,15368
335
- alita_sdk/tools/vector_adapters/VectorStoreAdapter.py,sha256=eDezsk41b5ql3CISQ6Xk-qE3foO-PjY0VSWeZnVxHPE,19019
335
+ alita_sdk/tools/vector_adapters/VectorStoreAdapter.py,sha256=Fm-7zKn4RmVER2m0HNiEO7zUDgGKmgCcM8mRaer-2Yw,19025
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
338
338
  alita_sdk/tools/xray/api_wrapper.py,sha256=uj5kzUgPdo_Oct9WCNMOpkb6o_3L7J4LZrEGtrwYMmc,30157
@@ -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.380.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
357
- alita_sdk-0.3.380.dist-info/METADATA,sha256=81aR6cJaFL6Ez549W3wrMAlKIKG7veu3PsTcEs5rw18,19071
358
- alita_sdk-0.3.380.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
359
- alita_sdk-0.3.380.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
360
- alita_sdk-0.3.380.dist-info/RECORD,,
356
+ alita_sdk-0.3.382.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
357
+ alita_sdk-0.3.382.dist-info/METADATA,sha256=-Iut0sm4fsmy3rvpKk8q-fPFyzuIvdbBwy6UYkYztAU,19071
358
+ alita_sdk-0.3.382.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
359
+ alita_sdk-0.3.382.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
360
+ alita_sdk-0.3.382.dist-info/RECORD,,