alita-sdk 0.3.208__tar.gz → 0.3.210__tar.gz
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.
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/PKG-INFO +1 -1
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/clients/artifact.py +18 -4
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +2 -1
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +3 -3
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +8 -4
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +1 -1
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/langraph_agent.py +9 -6
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/toolkits/artifact.py +7 -3
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/toolkits/tools.py +8 -1
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/application.py +2 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/artifact.py +65 -8
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/vectorstore.py +125 -42
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/utils/utils.py +3 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/ado/__init__.py +8 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/ado/repos/repos_wrapper.py +37 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +0 -7
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/ado/work_item/__init__.py +4 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/ado/work_item/ado_wrapper.py +37 -4
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/aws/delta_lake/__init__.py +1 -1
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/bitbucket/__init__.py +13 -1
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/bitbucket/api_wrapper.py +31 -4
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +31 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/codeparser.py +18 -10
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/confluence/api_wrapper.py +35 -134
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/confluence/loader.py +30 -28
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/elitea_base.py +112 -11
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/figma/__init__.py +13 -1
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/figma/api_wrapper.py +47 -3
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/github/api_wrapper.py +8 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/github/github_client.py +18 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/gitlab/__init__.py +4 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/gitlab/api_wrapper.py +10 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/google/bigquery/__init__.py +1 -1
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/jira/__init__.py +21 -13
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/jira/api_wrapper.py +285 -5
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/sharepoint/__init__.py +11 -1
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/sharepoint/api_wrapper.py +23 -53
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/testrail/__init__.py +4 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/testrail/api_wrapper.py +28 -56
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/utils/content_parser.py +123 -9
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/xray/__init__.py +8 -1
- alita_sdk-0.3.210/alita_sdk/tools/xray/api_wrapper.py +717 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/zephyr_scale/api_wrapper.py +5 -5
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk.egg-info/PKG-INFO +1 -1
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/pyproject.toml +1 -1
- alita_sdk-0.3.208/alita_sdk/tools/xray/api_wrapper.py +0 -226
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/LICENSE +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/README.md +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/community/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/community/utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/clients/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/clients/client.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/clients/datasource.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/clients/prompt.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/assistant.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/constants.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/indexer.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/store_manager.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/tools/git.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/tools/log.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/tools/state.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/langchain/utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/llms/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/llms/preloaded.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/toolkits/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/toolkits/application.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/toolkits/datasource.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/toolkits/prompt.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/agent.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/datasource.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/echo.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/function.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/llm.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/loop.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/loop_output.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/mcp_server_tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/prompt.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/router.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/tools/tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/utils/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/utils/constants.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/utils/evaluate.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/utils/logging.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/utils/streamlit.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/utils/toolkit_runtime.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/runtime/utils/toolkit_utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/ado/repos/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/ado/test_plan/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/ado/utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/ado/wiki/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/aws/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/aws/delta_lake/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/aws/delta_lake/schemas.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/aws/delta_lake/tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/azure_ai/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/base/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/base/tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/bitbucket/tools.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/browser/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/browser/crawler.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/browser/google_search_rag.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/browser/utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/browser/wiki.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/backend_tests_tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/carrier_sdk.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/tools.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/carrier/utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/constants.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/models.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/sematic/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/chunkers/utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/cloud/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/code/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/code/linter/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/code/sonar/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/confluence/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/confluence/utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/elastic/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/github/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/github/schemas.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/github/tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/github/tool_prompts.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/gitlab/tools.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/gitlab/utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/gmail/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/gmail/utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/google/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/google/bigquery/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/google/bigquery/schemas.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/google/bigquery/tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/google_places/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/keycloak/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/llm/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/llm/img_utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/llm/llm_utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/localgit/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/localgit/local_git.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/localgit/tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/memory/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/ocr/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/ocr/text_detection.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/openapi/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/postman/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/postman/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/postman/postman_analysis.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pptx/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/qtest/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/qtest/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/qtest/tool.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/rally/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/rally/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/report_portal/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/salesforce/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/salesforce/model.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/servicenow/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/sharepoint/utils.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/slack/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/slack/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/sql/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/sql/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/sql/models.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/testio/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/testio/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/utils/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/yagmail/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/zephyr/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/zephyr/rest_client.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/zephyr_squad/__init__.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk.egg-info/SOURCES.txt +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk.egg-info/dependency_links.txt +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk.egg-info/requires.txt +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/alita_sdk.egg-info/top_level.txt +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/setup.cfg +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/tests/test_ado_analysis.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/tests/test_github_analysis.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/tests/test_gitlab_analysis.py +0 -0
- {alita_sdk-0.3.208 → alita_sdk-0.3.210}/tests/test_jira_analysis.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: alita_sdk
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.210
|
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
|
@@ -24,7 +24,14 @@ class Artifact:
|
|
24
24
|
logger.error(f"Error: {e}")
|
25
25
|
return f"Error: {e}"
|
26
26
|
|
27
|
-
def get(self,
|
27
|
+
def get(self,
|
28
|
+
artifact_name: str,
|
29
|
+
bucket_name: str = None,
|
30
|
+
is_capture_image: bool = False,
|
31
|
+
page_number: int = None,
|
32
|
+
sheet_name: str = None,
|
33
|
+
excel_by_sheets: bool = False,
|
34
|
+
llm = None):
|
28
35
|
if not bucket_name:
|
29
36
|
bucket_name = self.bucket_name
|
30
37
|
data = self.client.download_artifact(bucket_name, artifact_name)
|
@@ -37,17 +44,24 @@ class Artifact:
|
|
37
44
|
if detected['encoding'] is not None:
|
38
45
|
return data.decode(detected['encoding'])
|
39
46
|
else:
|
40
|
-
return parse_file_content(artifact_name,
|
47
|
+
return parse_file_content(file_name=artifact_name,
|
48
|
+
file_content=data,
|
49
|
+
is_capture_image=is_capture_image,
|
50
|
+
page_number=page_number,
|
51
|
+
sheet_name=sheet_name,
|
52
|
+
excel_by_sheets=excel_by_sheets,
|
53
|
+
llm=llm)
|
41
54
|
|
42
55
|
def delete(self, artifact_name: str, bucket_name = None):
|
43
56
|
if not bucket_name:
|
44
57
|
bucket_name = self.bucket_name
|
45
58
|
self.client.delete_artifact(bucket_name, artifact_name)
|
46
59
|
|
47
|
-
def list(self, bucket_name: str = None) -> str:
|
60
|
+
def list(self, bucket_name: str = None, return_as_string = True) -> str|dict:
|
48
61
|
if not bucket_name:
|
49
62
|
bucket_name = self.bucket_name
|
50
|
-
|
63
|
+
artifacts = self.client.list_artifacts(bucket_name)
|
64
|
+
return str(artifacts) if return_as_string else artifacts
|
51
65
|
|
52
66
|
def append(self, artifact_name: str, additional_data: Any, bucket_name: str = None):
|
53
67
|
if not bucket_name:
|
@@ -26,7 +26,8 @@ class AlitaCSVLoader(AlitaTableLoader):
|
|
26
26
|
json_documents: bool = True,
|
27
27
|
raw_content: bool = False,
|
28
28
|
columns: Optional[List[str]] = None,
|
29
|
-
cleanse: bool = True
|
29
|
+
cleanse: bool = True,
|
30
|
+
**kwargs):
|
30
31
|
super().__init__(file_path=file_path, json_documents=json_documents, columns=columns, raw_content=raw_content, cleanse=cleanse)
|
31
32
|
self.encoding = encoding
|
32
33
|
self.autodetect_encoding = autodetect_encoding
|
@@ -18,19 +18,19 @@ class AlitaDocxMammothLoader(BaseLoader):
|
|
18
18
|
Loader for Docx files using Mammoth to convert to HTML, with image handling,
|
19
19
|
and then Markdownify to convert HTML to markdown.
|
20
20
|
"""
|
21
|
-
def __init__(self,
|
21
|
+
def __init__(self, file_path: str, **kwargs):
|
22
22
|
"""
|
23
23
|
Initializes AlitaDocxMammothLoader.
|
24
24
|
|
25
25
|
Args:
|
26
26
|
**kwargs: Keyword arguments, including:
|
27
|
-
|
27
|
+
file_path (str): Path to the Docx file. Required.
|
28
28
|
llm (LLM, optional): Language model for processing images.
|
29
29
|
prompt (str, optional): Prompt for the language model.
|
30
30
|
Raises:
|
31
31
|
ValueError: If the 'path' parameter is not provided.
|
32
32
|
"""
|
33
|
-
self.path =
|
33
|
+
self.path = file_path
|
34
34
|
self.llm = kwargs.get("llm")
|
35
35
|
self.prompt = kwargs.get("prompt")
|
36
36
|
|
@@ -19,11 +19,15 @@ Image.MAX_IMAGE_PIXELS = 300_000_000
|
|
19
19
|
class AlitaImageLoader(BaseLoader):
|
20
20
|
"""Loads image files using pytesseract for OCR or optionally LLM for advanced analysis, including SVG support."""
|
21
21
|
|
22
|
-
def __init__(self, **kwargs):
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
def __init__(self, file_path=None, **kwargs):
|
23
|
+
# Handle both positional and keyword arguments for file_path
|
24
|
+
if file_path is not None:
|
25
|
+
self.file_path = file_path
|
26
|
+
elif kwargs.get('path'):
|
26
27
|
self.file_path = kwargs['path']
|
28
|
+
else:
|
29
|
+
raise ValueError(
|
30
|
+
"Path parameter is required (either as 'file_path' positional argument or 'path' keyword argument)")
|
27
31
|
self.llm = kwargs.get('llm', None)
|
28
32
|
self.ocr_language = kwargs.get('ocr_language', None)
|
29
33
|
self.prompt = kwargs.get('prompt') if kwargs.get(
|
@@ -26,7 +26,7 @@ class AlitaTableLoader(BaseLoader):
|
|
26
26
|
json_documents: bool = True,
|
27
27
|
raw_content: bool = False,
|
28
28
|
columns: Optional[List[str]] = None,
|
29
|
-
cleanse: bool = True):
|
29
|
+
cleanse: bool = True, **kwargs):
|
30
30
|
|
31
31
|
self.raw_content = raw_content
|
32
32
|
self.file_path = file_path
|
@@ -9,7 +9,7 @@ from langchain_core.callbacks import dispatch_custom_event
|
|
9
9
|
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage, BaseMessage
|
10
10
|
from langchain_core.runnables import Runnable
|
11
11
|
from langchain_core.runnables import RunnableConfig
|
12
|
-
from langchain_core.tools import BaseTool
|
12
|
+
from langchain_core.tools import BaseTool, ToolException
|
13
13
|
from langgraph.channels.ephemeral_value import EphemeralValue
|
14
14
|
from langgraph.graph import StateGraph
|
15
15
|
from langgraph.graph.graph import END, START
|
@@ -505,11 +505,11 @@ def create_graph(
|
|
505
505
|
if isinstance(connected_tools, dict):
|
506
506
|
for toolkit, selected_tools in connected_tools.items():
|
507
507
|
for tool in selected_tools:
|
508
|
-
tool_names.append(f"{toolkit}
|
508
|
+
tool_names.append(f"{toolkit}{TOOLKIT_SPLITTER}{tool}")
|
509
|
+
elif isinstance(connected_tools, list):
|
510
|
+
# for cases when tools are provided as a list of names with already bound toolkit_name
|
511
|
+
tool_names = connected_tools
|
509
512
|
|
510
|
-
# Filter tools if specific tool names are provided
|
511
|
-
available_tools = []
|
512
|
-
|
513
513
|
if tool_names:
|
514
514
|
# Filter tools by name
|
515
515
|
tool_dict = {tool.name: tool for tool in tools if isinstance(tool, BaseTool)}
|
@@ -580,7 +580,10 @@ def create_graph(
|
|
580
580
|
default_output=node['condition'].get('default_output', 'END')))
|
581
581
|
|
582
582
|
# set default value for state variable at START
|
583
|
-
|
583
|
+
try:
|
584
|
+
entry_point = clean_string(schema['entry_point'])
|
585
|
+
except KeyError:
|
586
|
+
raise ToolException("Entry point is not defined in the schema. Please define 'entry_point' in the schema.")
|
584
587
|
for key, value in state.items():
|
585
588
|
if 'type' in value and 'value' in value:
|
586
589
|
# set default value for state variable if it is defined in the schema
|
@@ -3,7 +3,7 @@ from typing import List, Any, Literal, Optional
|
|
3
3
|
from alita_sdk.tools.utils import clean_string, TOOLKIT_SPLITTER, get_max_toolkit_length
|
4
4
|
from langchain_community.agent_toolkits.base import BaseToolkit
|
5
5
|
from langchain_core.tools import BaseTool
|
6
|
-
from pydantic import create_model, BaseModel, ConfigDict, Field
|
6
|
+
from pydantic import create_model, BaseModel, ConfigDict, Field, SecretStr
|
7
7
|
from pydantic.fields import FieldInfo
|
8
8
|
from ..tools.artifact import ArtifactWrapper
|
9
9
|
from alita_sdk.tools.base.tool import BaseAction
|
@@ -22,15 +22,19 @@ class ArtifactToolkit(BaseToolkit):
|
|
22
22
|
# client = (Any, FieldInfo(description="Client object", required=True, autopopulate=True)),
|
23
23
|
bucket = (str, FieldInfo(description="Bucket name", json_schema_extra={'toolkit_name': True, 'max_toolkit_length': ArtifactToolkit.toolkit_max_length})),
|
24
24
|
selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
|
25
|
+
# indexer settings
|
26
|
+
connection_string = (Optional[SecretStr], Field(description="Connection string for vectorstore",
|
27
|
+
default=None,
|
28
|
+
json_schema_extra={'secret': True})),
|
25
29
|
__config__=ConfigDict(json_schema_extra={'metadata': {"label": "Artifact", "icon_url": None}})
|
26
30
|
)
|
27
31
|
|
28
32
|
@classmethod
|
29
|
-
def get_toolkit(cls, client: Any, bucket: str, toolkit_name: Optional[str] = None, selected_tools: list[str] = []):
|
33
|
+
def get_toolkit(cls, client: Any, bucket: str, toolkit_name: Optional[str] = None, selected_tools: list[str] = [], **kwargs):
|
30
34
|
if selected_tools is None:
|
31
35
|
selected_tools = []
|
32
36
|
tools = []
|
33
|
-
artifact_wrapper = ArtifactWrapper(client=client, bucket=bucket)
|
37
|
+
artifact_wrapper = ArtifactWrapper(client=client, bucket=bucket, **kwargs)
|
34
38
|
prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
|
35
39
|
available_tools = artifact_wrapper.get_available_tools()
|
36
40
|
for tool in available_tools:
|
@@ -71,7 +71,14 @@ def get_tools(tools_list: list, alita_client, llm, memory_store: BaseStore = Non
|
|
71
71
|
client=alita_client,
|
72
72
|
bucket=tool['settings']['bucket'],
|
73
73
|
toolkit_name=tool.get('toolkit_name', ''),
|
74
|
-
selected_tools=tool['settings'].get('selected_tools', [])
|
74
|
+
selected_tools=tool['settings'].get('selected_tools', []),
|
75
|
+
llm=tool['settings'].get('llm'),
|
76
|
+
# indexer settings
|
77
|
+
connection_string=tool['settings'].get('connection_string', None),
|
78
|
+
collection_name=f"{tool.get('toolkit_name')}_{str(tool['id'])}",
|
79
|
+
embedding_model="HuggingFaceEmbeddings",
|
80
|
+
embedding_model_params={"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
|
81
|
+
vectorstore_type="PGVector"
|
75
82
|
).get_tools())
|
76
83
|
elif tool['type'] == 'vectorstore':
|
77
84
|
tools.extend(VectorStoreToolkit.get_toolkit(
|
@@ -56,6 +56,8 @@ class Application(BaseTool):
|
|
56
56
|
schema_values = self.args_schema(**input).model_dump() if self.args_schema else {}
|
57
57
|
extras = {k: v for k, v in input.items() if k not in schema_values}
|
58
58
|
all_kwargs = {**kwargs, **extras, **schema_values}
|
59
|
+
if config is None:
|
60
|
+
config = {}
|
59
61
|
return self._run(*config, **all_kwargs)
|
60
62
|
|
61
63
|
def _run(self, *args, **kwargs):
|
@@ -1,8 +1,19 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
import hashlib
|
2
|
+
import json
|
3
|
+
from typing import Any, Optional, Generator, List
|
4
|
+
|
5
|
+
from langchain_core.documents import Document
|
6
|
+
from langchain_core.tools import ToolException
|
3
7
|
from pydantic import create_model, Field, model_validator
|
4
8
|
|
5
|
-
|
9
|
+
from alita_sdk.tools.elitea_base import BaseVectorStoreToolApiWrapper, extend_with_vector_tools
|
10
|
+
|
11
|
+
try:
|
12
|
+
from alita_sdk.runtime.langchain.interfaces.llm_processor import get_embeddings
|
13
|
+
except ImportError:
|
14
|
+
from alita_sdk.langchain.interfaces.llm_processor import get_embeddings
|
15
|
+
|
16
|
+
class ArtifactWrapper(BaseVectorStoreToolApiWrapper):
|
6
17
|
client: Any
|
7
18
|
bucket: str
|
8
19
|
artifact: Optional[Any] = None
|
@@ -17,14 +28,26 @@ class ArtifactWrapper(BaseToolApiWrapper):
|
|
17
28
|
values["artifact"] = values['client'].artifact(values['bucket'])
|
18
29
|
return values
|
19
30
|
|
20
|
-
def list_files(self, bucket_name = None):
|
21
|
-
return self.artifact.list(bucket_name)
|
31
|
+
def list_files(self, bucket_name = None, return_as_string = True):
|
32
|
+
return self.artifact.list(bucket_name, return_as_string)
|
22
33
|
|
23
34
|
def create_file(self, filename: str, filedata: str, bucket_name = None):
|
24
35
|
return self.artifact.create(filename, filedata, bucket_name)
|
25
36
|
|
26
|
-
def read_file(self,
|
27
|
-
|
37
|
+
def read_file(self,
|
38
|
+
filename: str,
|
39
|
+
bucket_name = None,
|
40
|
+
is_capture_image: bool = False,
|
41
|
+
page_number: int = None,
|
42
|
+
sheet_name: str = None,
|
43
|
+
excel_by_sheets: bool = False):
|
44
|
+
return self.artifact.get(artifact_name=filename,
|
45
|
+
bucket_name=bucket_name,
|
46
|
+
is_capture_image=is_capture_image,
|
47
|
+
page_number=page_number,
|
48
|
+
sheet_name=sheet_name,
|
49
|
+
excel_by_sheets=excel_by_sheets,
|
50
|
+
llm=self.llm)
|
28
51
|
|
29
52
|
def delete_file(self, filename: str, bucket_name = None):
|
30
53
|
return self.artifact.delete(filename, bucket_name)
|
@@ -38,6 +61,40 @@ class ArtifactWrapper(BaseToolApiWrapper):
|
|
38
61
|
def create_new_bucket(self, bucket_name: str, expiration_measure = "weeks", expiration_value = 1):
|
39
62
|
return self.artifact.client.create_bucket(bucket_name, expiration_measure, expiration_value)
|
40
63
|
|
64
|
+
def _base_loader(self, **kwargs) -> List[Document]:
|
65
|
+
try:
|
66
|
+
all_files = self.list_files(self.bucket, False)
|
67
|
+
except Exception as e:
|
68
|
+
raise ToolException(f"Unable to extract files: {e}")
|
69
|
+
|
70
|
+
docs: List[Document] = []
|
71
|
+
for file in all_files['rows']:
|
72
|
+
metadata = {
|
73
|
+
("updated_on" if k == "modified" else k): str(v)
|
74
|
+
for k, v in file.items()
|
75
|
+
}
|
76
|
+
metadata['id'] = self.get_hash_from_bucket_and_file_name(self.bucket, file['name'])
|
77
|
+
docs.append(Document(page_content="", metadata=metadata))
|
78
|
+
return docs
|
79
|
+
|
80
|
+
def get_hash_from_bucket_and_file_name(self, bucket, file_name):
|
81
|
+
hasher = hashlib.sha256()
|
82
|
+
hasher.update(bucket.encode('utf-8'))
|
83
|
+
hasher.update(file_name.encode('utf-8'))
|
84
|
+
return hasher.hexdigest()
|
85
|
+
|
86
|
+
def _process_document(self, document: Document) -> Generator[Document, None, None]:
|
87
|
+
page_content = self.read_file(document.metadata['name'], is_capture_image=True, excel_by_sheets=True)
|
88
|
+
if isinstance(page_content, dict):
|
89
|
+
for key, value in page_content.items():
|
90
|
+
metadata = document.metadata
|
91
|
+
metadata['page'] = key
|
92
|
+
yield Document(page_content=str(value), metadata=metadata)
|
93
|
+
else:
|
94
|
+
document.page_content = json.dumps(str(page_content))
|
95
|
+
yield document
|
96
|
+
|
97
|
+
@extend_with_vector_tools
|
41
98
|
def get_available_tools(self):
|
42
99
|
bucket_name = (Optional[str], Field(description="Name of the bucket to work with."
|
43
100
|
"If bucket is not specified by user directly, the name should be taken from chat history."
|
@@ -125,5 +182,5 @@ class ArtifactWrapper(BaseToolApiWrapper):
|
|
125
182
|
default="weeks")),
|
126
183
|
expiration_value=(Optional[int], Field(description="Expiration time values.", default=1))
|
127
184
|
)
|
128
|
-
}
|
185
|
+
}
|
129
186
|
]
|
@@ -188,63 +188,108 @@ class VectorStoreWrapper(BaseToolApiWrapper):
|
|
188
188
|
except Exception as e:
|
189
189
|
logger.error(f"Failed to initialize PGVectorSearch: {str(e)}")
|
190
190
|
|
191
|
+
def _clean_collection(self):
|
192
|
+
"""
|
193
|
+
Clean the vectorstore collection by deleting all indexed data.
|
194
|
+
"""
|
195
|
+
self._log_data(
|
196
|
+
f"Cleaning collection '{self.dataset}'",
|
197
|
+
tool_name="_clean_collection"
|
198
|
+
)
|
199
|
+
data = self.vectoradapter.vectorstore.get(include=['metadatas'])
|
200
|
+
self.vectoradapter.vectorstore.delete(ids=data['ids'])
|
201
|
+
self._log_data(
|
202
|
+
f"Collection '{self.dataset}' has been cleaned. ",
|
203
|
+
tool_name="_clean_collection"
|
204
|
+
)
|
205
|
+
|
191
206
|
def _get_indexed_data(self, store):
|
192
|
-
""" Get all indexed data from vectorstore """
|
207
|
+
""" Get all indexed data from vectorstore for non-code content """
|
193
208
|
|
194
209
|
# get already indexed data
|
195
210
|
result = {}
|
196
211
|
try:
|
197
212
|
self._log_data("Retrieving already indexed data from vectorstore",
|
198
213
|
tool_name="index_documents")
|
199
|
-
data = store.get(include=['
|
214
|
+
data = store.get(include=['metadatas'])
|
200
215
|
# re-structure data to be more usable
|
201
|
-
for
|
202
|
-
|
216
|
+
for meta, db_id in zip(data['metadatas'], data['ids']):
|
217
|
+
# get document id from metadata
|
203
218
|
doc_id = str(meta['id'])
|
204
219
|
dependent_docs = meta.get(IndexerKeywords.DEPENDENT_DOCS.value, [])
|
220
|
+
if dependent_docs:
|
221
|
+
dependent_docs = [d.strip() for d in dependent_docs.split(';') if d.strip()]
|
205
222
|
parent_id = meta.get(IndexerKeywords.PARENT.value, -1)
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
223
|
+
#
|
224
|
+
chunk_id = meta.get('chunk_id')
|
225
|
+
if doc_id in result and chunk_id:
|
226
|
+
# if document with the same id already saved, add db_id fof current one as chunk
|
227
|
+
result[doc_id]['all_chunks'].append(db_id)
|
228
|
+
else:
|
229
|
+
result[doc_id] = {
|
230
|
+
'metadata': meta,
|
231
|
+
'id': db_id,
|
232
|
+
'all_chunks': [db_id],
|
233
|
+
IndexerKeywords.DEPENDENT_DOCS.value: dependent_docs,
|
234
|
+
IndexerKeywords.PARENT.value: parent_id
|
235
|
+
}
|
213
236
|
except Exception as e:
|
214
237
|
logger.error(f"Failed to get indexed data from vectorstore: {str(e)}. Continuing with empty index.")
|
215
238
|
return result
|
216
239
|
|
217
|
-
def
|
218
|
-
"""
|
240
|
+
def _get_code_indexed_data(self, store) -> Dict[str, Dict[str, Any]]:
|
241
|
+
""" Get all indexed data from vectorstore for code content """
|
219
242
|
|
220
|
-
|
243
|
+
# get already indexed data
|
244
|
+
result = {}
|
245
|
+
try:
|
246
|
+
self._log_data("Retrieving already indexed code data from vectorstore",
|
247
|
+
tool_name="index_documents")
|
248
|
+
data = store.get(include=['metadatas'])
|
249
|
+
# re-structure data to be more usable
|
250
|
+
for meta, db_id in zip(data['metadatas'], data['ids']):
|
251
|
+
filename = meta['filename']
|
252
|
+
commit_hash = meta.get('commit_hash')
|
253
|
+
if filename not in result:
|
254
|
+
result[filename] = {
|
255
|
+
'commit_hashes': [],
|
256
|
+
'ids': []
|
257
|
+
}
|
258
|
+
if commit_hash is not None:
|
259
|
+
result[filename]['commit_hashes'].append(commit_hash)
|
260
|
+
result[filename]['ids'].append(db_id)
|
261
|
+
except Exception as e:
|
262
|
+
logger.error(f"Failed to get indexed code data from vectorstore: {str(e)}. Continuing with empty index.")
|
263
|
+
return result
|
221
264
|
|
222
|
-
|
223
|
-
|
224
|
-
|
265
|
+
def _reduce_duplicates(
|
266
|
+
self,
|
267
|
+
documents: Generator[Any, None, None],
|
268
|
+
store,
|
269
|
+
get_indexed_data: Callable,
|
270
|
+
key_fn: Callable,
|
271
|
+
compare_fn: Callable,
|
272
|
+
remove_ids_fn: Callable,
|
273
|
+
log_msg: str = "Verification of documents to index started"
|
274
|
+
) -> List[Any]:
|
275
|
+
"""Generic duplicate reduction logic for documents."""
|
276
|
+
self._log_data(log_msg, tool_name="index_documents")
|
277
|
+
indexed_data = get_indexed_data(store)
|
278
|
+
indexed_keys = set(indexed_data.keys())
|
279
|
+
if not indexed_keys:
|
225
280
|
self._log_data("Vectorstore is empty, indexing all incoming documents", tool_name="index_documents")
|
226
281
|
return list(documents)
|
227
282
|
|
228
283
|
final_docs = []
|
229
|
-
docs_to_remove =
|
284
|
+
docs_to_remove = set()
|
230
285
|
|
231
286
|
for document in documents:
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
# document has been indexed already, then verify `updated_on`
|
236
|
-
to_index_updated_on = document.metadata.get('updated_on')
|
237
|
-
indexed_meta = indexed_data[doc_id]['metadata']
|
238
|
-
indexed_updated_on = indexed_meta.get('updated_on')
|
239
|
-
if to_index_updated_on and indexed_updated_on and to_index_updated_on == indexed_updated_on:
|
240
|
-
# same updated_on, skip indexing
|
287
|
+
key = key_fn(document)
|
288
|
+
if key in indexed_keys:
|
289
|
+
if compare_fn(document, indexed_data[key]):
|
241
290
|
continue
|
242
|
-
|
243
|
-
|
244
|
-
docs_to_remove.append(indexed_data[doc_id]['id'])
|
245
|
-
# mark dependent docs for removal
|
246
|
-
for dependent_doc_id in indexed_data[doc_id][IndexerKeywords.DEPENDENT_DOCS.value]:
|
247
|
-
docs_to_remove.append(indexed_data[dependent_doc_id]['id'])
|
291
|
+
final_docs.append(document)
|
292
|
+
docs_to_remove.update(remove_ids_fn(indexed_data, key))
|
248
293
|
else:
|
249
294
|
final_docs.append(document)
|
250
295
|
|
@@ -253,16 +298,50 @@ class VectorStoreWrapper(BaseToolApiWrapper):
|
|
253
298
|
f"Removing {len(docs_to_remove)} documents from vectorstore that are already indexed with different updated_on.",
|
254
299
|
tool_name="index_documents"
|
255
300
|
)
|
256
|
-
store.delete(ids=docs_to_remove)
|
301
|
+
store.delete(ids=list(docs_to_remove))
|
257
302
|
|
258
303
|
return final_docs
|
259
304
|
|
260
|
-
def
|
305
|
+
def _reduce_non_code_duplicates(self, documents: Generator[Any, None, None], store) -> List[Any]:
|
306
|
+
return self._reduce_duplicates(
|
307
|
+
documents,
|
308
|
+
store,
|
309
|
+
self._get_indexed_data,
|
310
|
+
lambda doc: doc.metadata.get('id'),
|
311
|
+
lambda doc, idx: (
|
312
|
+
doc.metadata.get('updated_on') and
|
313
|
+
idx['metadata'].get('updated_on') and
|
314
|
+
doc.metadata.get('updated_on') == idx['metadata'].get('updated_on')
|
315
|
+
),
|
316
|
+
lambda idx_data, key: (
|
317
|
+
idx_data[key]['all_chunks'] +
|
318
|
+
[idx_data[dep_id]['id'] for dep_id in idx_data[key][IndexerKeywords.DEPENDENT_DOCS.value]] +
|
319
|
+
[chunk_db_id for dep_id in idx_data[key][IndexerKeywords.DEPENDENT_DOCS.value]
|
320
|
+
for chunk_db_id in idx_data[dep_id]['all_chunks']]
|
321
|
+
),
|
322
|
+
log_msg="Verification of documents to index started"
|
323
|
+
)
|
324
|
+
|
325
|
+
def _reduce_code_duplicates(self, documents: Generator[Any, None, None], store) -> List[Any]:
|
326
|
+
return self._reduce_duplicates(
|
327
|
+
documents,
|
328
|
+
store,
|
329
|
+
self._get_code_indexed_data,
|
330
|
+
lambda doc: doc.metadata.get('filename'),
|
331
|
+
lambda doc, idx: (
|
332
|
+
doc.metadata.get('commit_hash') and
|
333
|
+
idx.get('commit_hashes') and
|
334
|
+
doc.metadata.get('commit_hash') in idx.get('commit_hashes')
|
335
|
+
),
|
336
|
+
lambda idx_data, key: idx_data[key]['ids'],
|
337
|
+
log_msg="Verification of code documents to index started"
|
338
|
+
)
|
339
|
+
|
340
|
+
def index_documents(self, documents: Generator[Document, None, None], progress_step: int = 20, clean_index: bool = True, is_code: bool = False):
|
261
341
|
""" Index documents in the vectorstore.
|
262
342
|
|
263
343
|
Args:
|
264
344
|
documents (Any): Generator or list of documents to index.
|
265
|
-
document_processing_func (Optional[Callable]): Function to process documents after duplicates removal and before indexing.
|
266
345
|
progress_step (int): Step for progress reporting, default is 20.
|
267
346
|
clean_index (bool): If True, clean the index before re-indexing all documents.
|
268
347
|
"""
|
@@ -274,7 +353,7 @@ class VectorStoreWrapper(BaseToolApiWrapper):
|
|
274
353
|
logger.info("Cleaning index before re-indexing all documents.")
|
275
354
|
self._log_data("Cleaning index before re-indexing all documents. Previous index will be removed", tool_name="index_documents")
|
276
355
|
try:
|
277
|
-
self.
|
356
|
+
self._clean_collection()
|
278
357
|
self.vectoradapter.persist()
|
279
358
|
self.vectoradapter.vacuum()
|
280
359
|
self._log_data("Previous index has been removed",
|
@@ -284,9 +363,9 @@ class VectorStoreWrapper(BaseToolApiWrapper):
|
|
284
363
|
if isinstance(documents, types.GeneratorType):
|
285
364
|
documents = list(documents)
|
286
365
|
else:
|
287
|
-
# remove duplicates based on metadata 'id' and 'updated_on' fields
|
288
|
-
documents = self.
|
289
|
-
|
366
|
+
# remove duplicates based on metadata 'id' and 'updated_on' or 'commit_hash' fields
|
367
|
+
documents = self._reduce_code_duplicates(documents, self.vectoradapter.vectorstore) if is_code \
|
368
|
+
else self._reduce_non_code_duplicates(documents, self.vectoradapter.vectorstore)
|
290
369
|
|
291
370
|
if not documents or len(documents) == 0:
|
292
371
|
logger.info("No new documents to index after duplicate check.")
|
@@ -456,8 +535,12 @@ class VectorStoreWrapper(BaseToolApiWrapper):
|
|
456
535
|
)
|
457
536
|
|
458
537
|
# Initialize document map for tracking by ID
|
459
|
-
doc_map = {
|
460
|
-
|
538
|
+
doc_map = {
|
539
|
+
f"{doc.metadata.get('id', f'idx_{i}')}_{doc.metadata['chunk_id']}"
|
540
|
+
if 'chunk_id' in doc.metadata
|
541
|
+
else doc.metadata.get('id', f"idx_{i}"): (doc, score)
|
542
|
+
for i, (doc, score) in enumerate(vector_items)
|
543
|
+
}
|
461
544
|
|
462
545
|
# Process full-text search if configured
|
463
546
|
if full_text_search and full_text_search.get('enabled') and full_text_search.get('fields'):
|
@@ -4,8 +4,11 @@ from enum import Enum
|
|
4
4
|
TOOLKIT_SPLITTER = "___"
|
5
5
|
|
6
6
|
class IndexerKeywords(Enum):
|
7
|
+
# TODO: remove these fields when the indexer is updated
|
7
8
|
DEPENDENT_DOCS = 'dependent_docs'
|
8
9
|
PARENT = 'parent_id'
|
10
|
+
# DEPENDENCY_ID = 'dependency_id'
|
11
|
+
UPDATED_ON = 'updated_on'
|
9
12
|
|
10
13
|
# This pattern matches characters that are NOT alphanumeric, underscores, or hyphens
|
11
14
|
clean_string_pattern = re.compile(r'[^a-zA-Z0-9_.-]')
|
@@ -14,6 +14,14 @@ def get_tools(tool_type, tool):
|
|
14
14
|
"token": tool['settings'].get('token', None),
|
15
15
|
"limit": tool['settings'].get('limit', 5),
|
16
16
|
"toolkit_name": tool.get('toolkit_name', ''),
|
17
|
+
# indexer settings
|
18
|
+
"llm":tool['settings'].get('llm', None),
|
19
|
+
"connection_string":tool['settings'].get('connection_string', None),
|
20
|
+
"collection_name":str(tool['id']),
|
21
|
+
"doctype":'doc',
|
22
|
+
"embedding_model":"HuggingFaceEmbeddings",
|
23
|
+
"embedding_model_params":{"model_name": "sentence-transformers/all-MiniLM-L6-v2"},
|
24
|
+
"vectorstore_type":"PGVector"
|
17
25
|
}
|
18
26
|
if tool_type == 'ado_plans':
|
19
27
|
return AzureDevOpsPlansToolkit().get_toolkit(**config_dict).get_tools()
|
@@ -302,6 +302,43 @@ class ReposApiWrapper(BaseCodeToolApiWrapper):
|
|
302
302
|
|
303
303
|
return values
|
304
304
|
|
305
|
+
def _get_commits(self, file_path: str, branch: str, top: int = None) -> List[GitCommitRef]:
|
306
|
+
"""
|
307
|
+
Get commits for a specific file in a specific branch.
|
308
|
+
|
309
|
+
Args:
|
310
|
+
file_path (str): Path to the file in the repository.
|
311
|
+
branch (str): Branch name to get commits from.
|
312
|
+
top (int, optional): Maximum number of commits to return. Defaults to None.
|
313
|
+
|
314
|
+
Returns:
|
315
|
+
List[GitCommitRef]: List of commit references.
|
316
|
+
"""
|
317
|
+
try:
|
318
|
+
version_descriptor = GitVersionDescriptor(
|
319
|
+
version=branch, version_type="branch"
|
320
|
+
)
|
321
|
+
commits = self._client.get_commits(
|
322
|
+
repository_id=self.repository_id,
|
323
|
+
project=self.project,
|
324
|
+
search_criteria=GitQueryCommitsCriteria(item_path=file_path,
|
325
|
+
item_version=version_descriptor, top=top if top else 100),
|
326
|
+
)
|
327
|
+
return commits
|
328
|
+
except Exception as e:
|
329
|
+
msg = f"Failed to get commits for file '{file_path}' on branch '{branch}': {str(e)}"
|
330
|
+
logger.error(msg)
|
331
|
+
return ToolException(msg)
|
332
|
+
|
333
|
+
def _file_commit_hash(self, file_path: str, branch: str) -> str:
|
334
|
+
"""Get the commit hash of the last commit that modified a file in a specific branch."""
|
335
|
+
|
336
|
+
commits = self._get_commits(file_path, branch, top=1)
|
337
|
+
if commits:
|
338
|
+
return commits[0].commit_id
|
339
|
+
else:
|
340
|
+
return None
|
341
|
+
|
305
342
|
def _get_files(
|
306
343
|
self,
|
307
344
|
path: str = "",
|
@@ -184,13 +184,6 @@ class TestPlanApiWrapper(BaseVectorStoreToolApiWrapper):
|
|
184
184
|
limit: Optional[int] = 5
|
185
185
|
_client: Optional[TestPlanClient] = PrivateAttr()
|
186
186
|
|
187
|
-
llm: Any = None
|
188
|
-
connection_string: Optional[SecretStr] = None
|
189
|
-
collection_name: Optional[str] = None
|
190
|
-
embedding_model: Optional[str] = "HuggingFaceEmbeddings"
|
191
|
-
embedding_model_params: Optional[Dict[str, Any]] = {"model_name": "sentence-transformers/all-MiniLM-L6-v2"}
|
192
|
-
vectorstore_type: Optional[str] = "PGVector"
|
193
|
-
|
194
187
|
class Config:
|
195
188
|
arbitrary_types_allowed = True
|
196
189
|
|