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.
- alita_sdk/runtime/tools/vectorstore.py +2 -1
- alita_sdk/runtime/tools/vectorstore_base.py +2 -1
- alita_sdk/tools/base_indexer_toolkit.py +5 -38
- alita_sdk/tools/confluence/api_wrapper.py +26 -5
- alita_sdk/tools/vector_adapters/VectorStoreAdapter.py +1 -1
- {alita_sdk-0.3.380.dist-info → alita_sdk-0.3.382.dist-info}/METADATA +1 -1
- {alita_sdk-0.3.380.dist-info → alita_sdk-0.3.382.dist-info}/RECORD +10 -10
- {alita_sdk-0.3.380.dist-info → alita_sdk-0.3.382.dist-info}/WHEEL +0 -0
- {alita_sdk-0.3.380.dist-info → alita_sdk-0.3.382.dist-info}/licenses/LICENSE +0 -0
- {alita_sdk-0.3.380.dist-info → alita_sdk-0.3.382.dist-info}/top_level.txt +0 -0
|
@@ -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
|
-
|
|
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 {
|
|
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,
|
|
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
|
-
|
|
522
|
-
|
|
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
|
-
"
|
|
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.
|
|
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.
|
|
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=
|
|
127
|
-
alita_sdk/runtime/tools/vectorstore_base.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
357
|
-
alita_sdk-0.3.
|
|
358
|
-
alita_sdk-0.3.
|
|
359
|
-
alita_sdk-0.3.
|
|
360
|
-
alita_sdk-0.3.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|