alita-sdk 0.3.316__tar.gz → 0.3.318__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.
Files changed (365) hide show
  1. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/PKG-INFO +1 -1
  2. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +1 -1
  3. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/constants.py +3 -3
  4. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/vectorstore.py +2 -28
  5. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/vectorstore_base.py +9 -16
  6. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/base_indexer_toolkit.py +4 -6
  7. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/browser/__init__.py +2 -1
  8. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/backend_reports_tool.py +8 -4
  9. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/excel_reporter.py +8 -4
  10. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/confluence/api_wrapper.py +77 -21
  11. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/jira/api_wrapper.py +33 -9
  12. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/utils/content_parser.py +28 -19
  13. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/xray/api_wrapper.py +0 -5
  14. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk.egg-info/PKG-INFO +1 -1
  15. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/pyproject.toml +1 -1
  16. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/LICENSE +0 -0
  17. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/README.md +0 -0
  18. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/__init__.py +0 -0
  19. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/community/__init__.py +0 -0
  20. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/community/utils.py +0 -0
  21. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/__init__.py +0 -0
  22. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/ado.py +0 -0
  23. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/azure_search.py +0 -0
  24. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/bigquery.py +0 -0
  25. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/bitbucket.py +0 -0
  26. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/browser.py +0 -0
  27. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/carrier.py +0 -0
  28. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/confluence.py +0 -0
  29. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/delta_lake.py +0 -0
  30. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/embedding.py +0 -0
  31. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/figma.py +0 -0
  32. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/github.py +0 -0
  33. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/gitlab.py +0 -0
  34. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/google_places.py +0 -0
  35. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/jira.py +0 -0
  36. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/pgvector.py +0 -0
  37. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/postman.py +0 -0
  38. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/qtest.py +0 -0
  39. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/rally.py +0 -0
  40. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/report_portal.py +0 -0
  41. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/salesforce.py +0 -0
  42. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/service_now.py +0 -0
  43. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/sharepoint.py +0 -0
  44. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/slack.py +0 -0
  45. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/sonar.py +0 -0
  46. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/sql.py +0 -0
  47. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/testio.py +0 -0
  48. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/testrail.py +0 -0
  49. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/xray.py +0 -0
  50. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/zephyr.py +0 -0
  51. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/zephyr_enterprise.py +0 -0
  52. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/configurations/zephyr_essential.py +0 -0
  53. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/__init__.py +0 -0
  54. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/clients/__init__.py +0 -0
  55. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/clients/artifact.py +0 -0
  56. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/clients/client.py +0 -0
  57. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/clients/datasource.py +0 -0
  58. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/clients/prompt.py +0 -0
  59. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/__init__.py +0 -0
  60. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
  61. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
  62. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/assistant.py +0 -0
  63. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
  64. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/constants.py +0 -0
  65. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
  66. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
  67. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
  68. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
  69. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
  70. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
  71. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
  72. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaJSONLoader.py +0 -0
  73. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
  74. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaMarkdownLoader.py +0 -0
  75. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaPDFLoader.py +0 -0
  76. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaPowerPointLoader.py +0 -0
  77. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaPythonLoader.py +0 -0
  78. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
  79. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
  80. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/AlitaTextLoader.py +0 -0
  81. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/ImageParser.py +0 -0
  82. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
  83. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
  84. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/indexer.py +0 -0
  85. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
  86. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
  87. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
  88. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
  89. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
  90. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/langraph_agent.py +0 -0
  91. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
  92. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
  93. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
  94. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
  95. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
  96. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/store_manager.py +0 -0
  97. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
  98. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
  99. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
  100. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
  101. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
  102. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
  103. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/tools/git.py +0 -0
  104. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/tools/log.py +0 -0
  105. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
  106. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/tools/state.py +0 -0
  107. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
  108. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
  109. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/langchain/utils.py +0 -0
  110. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/llms/__init__.py +0 -0
  111. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/llms/preloaded.py +0 -0
  112. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/toolkits/__init__.py +0 -0
  113. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/toolkits/application.py +0 -0
  114. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/toolkits/artifact.py +0 -0
  115. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/toolkits/configurations.py +0 -0
  116. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/toolkits/datasource.py +0 -0
  117. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/toolkits/prompt.py +0 -0
  118. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
  119. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/toolkits/tools.py +0 -0
  120. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
  121. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/__init__.py +0 -0
  122. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/agent.py +0 -0
  123. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/application.py +0 -0
  124. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/artifact.py +0 -0
  125. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/datasource.py +0 -0
  126. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/echo.py +0 -0
  127. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/function.py +0 -0
  128. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/graph.py +0 -0
  129. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
  130. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/llm.py +0 -0
  131. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/loop.py +0 -0
  132. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/loop_output.py +0 -0
  133. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/mcp_server_tool.py +0 -0
  134. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
  135. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/prompt.py +0 -0
  136. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/router.py +0 -0
  137. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/tools/tool.py +0 -0
  138. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
  139. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/utils/__init__.py +0 -0
  140. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/utils/constants.py +0 -0
  141. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/utils/evaluate.py +0 -0
  142. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/utils/logging.py +0 -0
  143. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
  144. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/utils/streamlit.py +0 -0
  145. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/utils/toolkit_runtime.py +0 -0
  146. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/utils/toolkit_utils.py +0 -0
  147. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/runtime/utils/utils.py +0 -0
  148. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/__init__.py +0 -0
  149. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/ado/__init__.py +0 -0
  150. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/ado/repos/__init__.py +0 -0
  151. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
  152. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/ado/test_plan/__init__.py +0 -0
  153. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +0 -0
  154. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/ado/utils.py +0 -0
  155. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/ado/wiki/__init__.py +0 -0
  156. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
  157. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/ado/work_item/__init__.py +0 -0
  158. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/ado/work_item/ado_wrapper.py +0 -0
  159. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
  160. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
  161. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/aws/__init__.py +0 -0
  162. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/aws/delta_lake/__init__.py +0 -0
  163. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/aws/delta_lake/api_wrapper.py +0 -0
  164. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/aws/delta_lake/schemas.py +0 -0
  165. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/aws/delta_lake/tool.py +0 -0
  166. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/azure_ai/__init__.py +0 -0
  167. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
  168. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
  169. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/base/__init__.py +0 -0
  170. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/base/tool.py +0 -0
  171. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/bitbucket/__init__.py +0 -0
  172. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
  173. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
  174. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +0 -0
  175. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/browser/crawler.py +0 -0
  176. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
  177. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/browser/google_search_rag.py +0 -0
  178. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/browser/utils.py +0 -0
  179. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/browser/wiki.py +0 -0
  180. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/__init__.py +0 -0
  181. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/api_wrapper.py +0 -0
  182. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/backend_tests_tool.py +0 -0
  183. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
  184. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/carrier_sdk.py +0 -0
  185. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
  186. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -0
  187. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
  188. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -0
  189. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
  190. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/tools.py +0 -0
  191. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
  192. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
  193. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/carrier/utils.py +0 -0
  194. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/__init__.py +0 -0
  195. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/__init__.py +0 -0
  196. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
  197. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/constants.py +0 -0
  198. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
  199. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
  200. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
  201. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
  202. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
  203. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
  204. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
  205. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
  206. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
  207. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
  208. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
  209. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
  210. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
  211. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
  212. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
  213. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/models.py +0 -0
  214. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/sematic/__init__.py +0 -0
  215. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
  216. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/sematic/json_chunker.py +0 -0
  217. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
  218. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
  219. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
  220. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/chunkers/utils.py +0 -0
  221. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/cloud/__init__.py +0 -0
  222. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
  223. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
  224. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
  225. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
  226. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
  227. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
  228. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
  229. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
  230. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/code/__init__.py +0 -0
  231. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/code/linter/__init__.py +0 -0
  232. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
  233. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
  234. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/code/sonar/__init__.py +0 -0
  235. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
  236. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/confluence/__init__.py +0 -0
  237. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/confluence/loader.py +0 -0
  238. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/confluence/utils.py +0 -0
  239. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
  240. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
  241. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/elastic/__init__.py +0 -0
  242. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
  243. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/elitea_base.py +0 -0
  244. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/figma/__init__.py +0 -0
  245. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/figma/api_wrapper.py +0 -0
  246. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/github/__init__.py +0 -0
  247. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/github/api_wrapper.py +0 -0
  248. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/github/github_client.py +0 -0
  249. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
  250. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/github/schemas.py +0 -0
  251. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/github/tool.py +0 -0
  252. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/github/tool_prompts.py +0 -0
  253. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/gitlab/__init__.py +0 -0
  254. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/gitlab/api_wrapper.py +0 -0
  255. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/gitlab/tools.py +0 -0
  256. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/gitlab/utils.py +0 -0
  257. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
  258. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
  259. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/gmail/__init__.py +0 -0
  260. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
  261. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/gmail/utils.py +0 -0
  262. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/google/__init__.py +0 -0
  263. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/google/bigquery/__init__.py +0 -0
  264. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/google/bigquery/api_wrapper.py +0 -0
  265. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/google/bigquery/schemas.py +0 -0
  266. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/google/bigquery/tool.py +0 -0
  267. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/google_places/__init__.py +0 -0
  268. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
  269. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/jira/__init__.py +0 -0
  270. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/keycloak/__init__.py +0 -0
  271. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
  272. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/llm/__init__.py +0 -0
  273. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/llm/img_utils.py +0 -0
  274. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/llm/llm_utils.py +0 -0
  275. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/localgit/__init__.py +0 -0
  276. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/localgit/local_git.py +0 -0
  277. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/localgit/tool.py +0 -0
  278. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/memory/__init__.py +0 -0
  279. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/non_code_indexer_toolkit.py +0 -0
  280. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/ocr/__init__.py +0 -0
  281. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
  282. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/ocr/text_detection.py +0 -0
  283. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/openapi/__init__.py +0 -0
  284. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/__init__.py +0 -0
  285. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
  286. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
  287. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
  288. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
  289. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
  290. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
  291. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
  292. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
  293. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
  294. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
  295. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
  296. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
  297. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
  298. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
  299. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
  300. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
  301. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
  302. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
  303. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/postman/__init__.py +0 -0
  304. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/postman/api_wrapper.py +0 -0
  305. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/postman/postman_analysis.py +0 -0
  306. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pptx/__init__.py +0 -0
  307. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
  308. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/qtest/__init__.py +0 -0
  309. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/qtest/api_wrapper.py +0 -0
  310. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/qtest/tool.py +0 -0
  311. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/rally/__init__.py +0 -0
  312. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/rally/api_wrapper.py +0 -0
  313. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/report_portal/__init__.py +0 -0
  314. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
  315. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
  316. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/salesforce/__init__.py +0 -0
  317. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
  318. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/salesforce/model.py +0 -0
  319. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/servicenow/__init__.py +0 -0
  320. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
  321. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
  322. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/sharepoint/__init__.py +0 -0
  323. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/sharepoint/api_wrapper.py +0 -0
  324. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
  325. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/sharepoint/utils.py +0 -0
  326. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/slack/__init__.py +0 -0
  327. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/slack/api_wrapper.py +0 -0
  328. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/sql/__init__.py +0 -0
  329. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/sql/api_wrapper.py +0 -0
  330. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/sql/models.py +0 -0
  331. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/testio/__init__.py +0 -0
  332. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/testio/api_wrapper.py +0 -0
  333. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/testrail/__init__.py +0 -0
  334. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
  335. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/utils/__init__.py +0 -0
  336. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/utils/available_tools_decorator.py +0 -0
  337. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/vector_adapters/VectorStoreAdapter.py +0 -0
  338. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/vector_adapters/__init__.py +0 -0
  339. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/xray/__init__.py +0 -0
  340. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/yagmail/__init__.py +0 -0
  341. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
  342. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
  343. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr/__init__.py +0 -0
  344. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
  345. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr/rest_client.py +0 -0
  346. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
  347. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
  348. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
  349. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr_essential/__init__.py +0 -0
  350. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr_essential/api_wrapper.py +0 -0
  351. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr_essential/client.py +0 -0
  352. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
  353. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
  354. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr_squad/__init__.py +0 -0
  355. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -0
  356. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +0 -0
  357. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk.egg-info/SOURCES.txt +0 -0
  358. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk.egg-info/dependency_links.txt +0 -0
  359. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk.egg-info/requires.txt +0 -0
  360. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/alita_sdk.egg-info/top_level.txt +0 -0
  361. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/setup.cfg +0 -0
  362. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/tests/test_ado_analysis.py +0 -0
  363. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/tests/test_github_analysis.py +0 -0
  364. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/tests/test_gitlab_analysis.py +0 -0
  365. {alita_sdk-0.3.316 → alita_sdk-0.3.318}/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.316
3
+ Version: 0.3.318
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
@@ -65,7 +65,7 @@ class AlitaExcelLoader(AlitaTableLoader):
65
65
  else:
66
66
  return df.to_string(index=False)
67
67
 
68
- def read(self):
68
+ def read(self, lazy: bool = False):
69
69
  df = pd.read_excel(self.file_path, sheet_name=None)
70
70
  docs = []
71
71
  for key in df.keys():
@@ -113,7 +113,7 @@ loaders_map = {
113
113
  'is_multimodal_processing': False,
114
114
  'kwargs': {
115
115
  'encoding': 'utf-8',
116
- 'raw_content': False,
116
+ 'raw_content': True,
117
117
  'cleanse': False
118
118
  },
119
119
  'allowed_to_override': ['max_tokens']
@@ -122,7 +122,7 @@ loaders_map = {
122
122
  'class': AlitaExcelLoader,
123
123
  'is_multimodal_processing': False,
124
124
  'kwargs': {
125
- 'raw_content': False,
125
+ 'raw_content': True,
126
126
  'cleanse': False
127
127
  },
128
128
  'allowed_to_override': ['max_tokens', LoaderProperties.LLM.value, LoaderProperties.PROMPT.value, LoaderProperties.PROMPT_DEFAULT.value]
@@ -131,7 +131,7 @@ loaders_map = {
131
131
  'class': AlitaExcelLoader,
132
132
  'is_multimodal_processing': False,
133
133
  'kwargs': {
134
- 'raw_content': False,
134
+ 'raw_content': True,
135
135
  'cleanse': False
136
136
  },
137
137
  'allowed_to_override': ['max_tokens', LoaderProperties.LLM.value, LoaderProperties.PROMPT.value, LoaderProperties.PROMPT_DEFAULT.value]
@@ -12,7 +12,6 @@ from alita_sdk.tools.vector_adapters.VectorStoreAdapter import VectorStoreAdapte
12
12
  from logging import getLogger
13
13
 
14
14
  from ..utils.logging import dispatch_custom_event
15
- from ..utils.utils import IndexerKeywords
16
15
 
17
16
  logger = getLogger(__name__)
18
17
 
@@ -248,10 +247,6 @@ class VectorStoreWrapper(BaseToolApiWrapper):
248
247
  tool_name="_clean_collection"
249
248
  )
250
249
 
251
- def _get_indexed_data(self, collection_name: str):
252
- """ Get all indexed data from vectorstore for non-code content """
253
- return self.vector_adapter.get_indexed_data(self, collection_name)
254
-
255
250
  def _get_code_indexed_data(self, collection_suffix: str) -> Dict[str, Dict[str, Any]]:
256
251
  """ Get all indexed data from vectorstore for code content """
257
252
  return self.vector_adapter.get_code_indexed_data(self, collection_suffix)
@@ -308,26 +303,6 @@ class VectorStoreWrapper(BaseToolApiWrapper):
308
303
 
309
304
  return final_docs
310
305
 
311
- def _reduce_non_code_duplicates(self, documents: Generator[Any, None, None], collection_suffix: str) -> List[Any]:
312
- return self._reduce_duplicates(
313
- documents,
314
- collection_suffix,
315
- self._get_indexed_data,
316
- lambda doc: doc.metadata.get('id'),
317
- lambda doc, idx: (
318
- doc.metadata.get('updated_on') and
319
- idx['metadata'].get('updated_on') and
320
- doc.metadata.get('updated_on') == idx['metadata'].get('updated_on')
321
- ),
322
- lambda idx_data, key: (
323
- idx_data[key]['all_chunks'] +
324
- [idx_data[dep_id]['id'] for dep_id in idx_data[key][IndexerKeywords.DEPENDENT_DOCS.value]] +
325
- [chunk_db_id for dep_id in idx_data[key][IndexerKeywords.DEPENDENT_DOCS.value]
326
- for chunk_db_id in idx_data[dep_id]['all_chunks']]
327
- ),
328
- log_msg="Verification of documents to index started"
329
- )
330
-
331
306
  def _reduce_code_duplicates(self, documents: Generator[Any, None, None], collection_suffix: str) -> List[Any]:
332
307
  return self._reduce_duplicates(
333
308
  documents,
@@ -343,7 +318,7 @@ class VectorStoreWrapper(BaseToolApiWrapper):
343
318
  log_msg="Verification of code documents to index started"
344
319
  )
345
320
 
346
- def index_documents(self, documents: Generator[Document, None, None], collection_suffix: str, progress_step: int = 20, clean_index: bool = True, is_code: bool = False):
321
+ def index_documents(self, documents: Generator[Document, None, None], collection_suffix: str, progress_step: int = 20, clean_index: bool = True, is_code: bool = True):
347
322
  """ Index documents in the vectorstore.
348
323
 
349
324
  Args:
@@ -374,8 +349,7 @@ class VectorStoreWrapper(BaseToolApiWrapper):
374
349
  message="Filter for duplicates",
375
350
  tool_name="index_documents")
376
351
  # remove duplicates based on metadata 'id' and 'updated_on' or 'commit_hash' fields
377
- documents = self._reduce_code_duplicates(documents, collection_suffix) if is_code \
378
- else self._reduce_non_code_duplicates(documents, collection_suffix)
352
+ documents = self._reduce_code_duplicates(documents, collection_suffix)
379
353
  self._log_tool_event(
380
354
  message="All the duplicates were filtered out. Proceeding with indexing.",
381
355
  tool_name="index_documents")
@@ -10,7 +10,6 @@ from pydantic import BaseModel, model_validator, Field
10
10
 
11
11
  from alita_sdk.tools.elitea_base import BaseToolApiWrapper
12
12
  from alita_sdk.tools.vector_adapters.VectorStoreAdapter import VectorStoreAdapterFactory
13
- from ..langchain.tools.vector import VectorAdapter
14
13
  from ..utils.logging import dispatch_custom_event
15
14
 
16
15
  logger = getLogger(__name__)
@@ -138,10 +137,7 @@ class VectorStoreWrapperBase(BaseToolApiWrapper):
138
137
  vectorstore_params: Optional[dict] = None
139
138
  max_docs_per_add: int = 100
140
139
  dataset: str = None
141
- embedding: Any = None
142
140
  vectorstore: Any = None
143
- # Review usage of old adapter
144
- vectoradapter: Any = None
145
141
  pg_helper: Any = None
146
142
  embeddings: Any = None
147
143
  # New adapter for vector database operations
@@ -152,17 +148,13 @@ class VectorStoreWrapperBase(BaseToolApiWrapper):
152
148
  def validate_toolkit(cls, values):
153
149
  from ..langchain.interfaces.llm_processor import get_vectorstore
154
150
  logger.debug(f"Validating toolkit: {values}")
155
- if 'vectorstore_params' in values:
156
- values["dataset"] = values.get('vectorstore_params').get('collection_name')
157
- if values.get('embedding_model'):
158
- values['embeddings'] = values['alita'].get_embeddings(values['embedding_model'])
151
+ values["dataset"] = values.get('collection_name')
152
+
153
+ if values.get('alita') and values.get('embedding_model'):
154
+ values['embeddings'] = values.get('alita').get_embeddings(values.get('embedding_model'))
155
+
159
156
  if values.get('vectorstore_type') and values.get('vectorstore_params') and values.get('embedding_model'):
160
157
  values['vectorstore'] = get_vectorstore(values['vectorstore_type'], values['vectorstore_params'], embedding_func=values['embeddings'])
161
- values['vectoradapter'] = VectorAdapter(
162
- vectorstore=values['vectorstore'],
163
- embeddings=values['embeddings'],
164
- quota_params=None,
165
- )
166
158
  # Initialize the new vector adapter
167
159
  values['vector_adapter'] = VectorStoreAdapterFactory.create_adapter(values['vectorstore_type'])
168
160
  logger.debug(f"Vectorstore wrapper initialized: {values}")
@@ -223,8 +215,6 @@ class VectorStoreWrapperBase(BaseToolApiWrapper):
223
215
  self._log_data("Cleaning index before re-indexing all documents. Previous index will be removed", tool_name="index_documents")
224
216
  try:
225
217
  self._clean_collection(collection_suffix)
226
- self.vectoradapter.persist()
227
- self.vectoradapter.vacuum()
228
218
  self._log_data("Previous index has been removed",
229
219
  tool_name="index_documents")
230
220
  except Exception as e:
@@ -238,7 +228,6 @@ class VectorStoreWrapperBase(BaseToolApiWrapper):
238
228
  logger.warning(f"Document is missing required metadata field 'id' or 'updated_on': {doc.metadata}")
239
229
 
240
230
  logger.debug(f"Indexing documents: {documents}")
241
- logger.debug(self.vectoradapter)
242
231
 
243
232
  # if collection_suffix is provided, add it to metadata of each document
244
233
  if collection_suffix:
@@ -256,6 +245,10 @@ class VectorStoreWrapperBase(BaseToolApiWrapper):
256
245
  progress_step = 20 if progress_step not in range(0, 100) else progress_step
257
246
  next_progress_point = progress_step
258
247
  for document in documents:
248
+ if not document.page_content:
249
+ # To avoid case when all documents have empty content
250
+ # See llm_processor.add_documents which exclude metadata of docs with empty content
251
+ continue
259
252
  documents_count += 1
260
253
  # logger.debug(f"Indexing document: {document}")
261
254
  try:
@@ -5,7 +5,7 @@ from typing import Any, Optional, List, Literal, Dict, Generator
5
5
  from langchain_core.documents import Document
6
6
  from pydantic import create_model, Field, SecretStr
7
7
 
8
- from .utils.content_parser import file_extension_by_chunker, process_content_by_type
8
+ from .utils.content_parser import file_extension_by_chunker, process_document_by_type
9
9
  from .vector_adapters.VectorStoreAdapter import VectorStoreAdapterFactory
10
10
  from ..runtime.tools.vectorstore_base import VectorStoreWrapperBase
11
11
  from ..runtime.utils.utils import IndexerKeywords
@@ -102,7 +102,6 @@ class BaseIndexerToolkit(VectorStoreWrapperBase):
102
102
 
103
103
  connection_string: Optional[SecretStr] = None
104
104
  collection_name: Optional[str] = None
105
- _embedding: Optional[Any] = None
106
105
  alita: Any = None # Elitea client, if available
107
106
 
108
107
  def __init__(self, **kwargs):
@@ -116,7 +115,6 @@ class BaseIndexerToolkit(VectorStoreWrapperBase):
116
115
  if connection_string:
117
116
  # Initialize vectorstore params only if connection string is provided
118
117
  kwargs['vectorstore_params'] = VectorStoreAdapterFactory.create_adapter(vectorstore_type).get_vectorstore_params(collection_name, connection_string)
119
- kwargs['_embedding'] = kwargs.get('alita').get_embeddings(kwargs.get('embedding_model'))
120
118
  super().__init__(**kwargs)
121
119
 
122
120
  def _index_tool_params(self, **kwargs) -> dict[str, tuple[type, Field]]:
@@ -181,14 +179,14 @@ class BaseIndexerToolkit(VectorStoreWrapperBase):
181
179
 
182
180
  if chunking_config is None:
183
181
  chunking_config = {}
184
- chunking_config['embedding'] = self._embedding
182
+ chunking_config['embedding'] = self.embeddings
185
183
  chunking_config['llm'] = self.llm
186
184
 
187
185
  for document in documents:
188
186
  if content_type := document.metadata.get(IndexerKeywords.CONTENT_FILE_NAME.value, None):
189
187
  # apply parsing based on content type and chunk if chunker was applied to parent doc
190
188
  content = document.metadata.pop(IndexerKeywords.CONTENT_IN_BYTES.value, None)
191
- yield from process_content_by_type(
189
+ yield from process_document_by_type(
192
190
  document=document,
193
191
  content=content,
194
192
  extension_source=content_type, llm=self.llm, chunking_config=chunking_config)
@@ -199,7 +197,7 @@ class BaseIndexerToolkit(VectorStoreWrapperBase):
199
197
  continue
200
198
  # apply parsing based on content type resolved from chunking_tool
201
199
  content_type = file_extension_by_chunker(chunking_tool)
202
- yield from process_content_by_type(
200
+ yield from process_document_by_type(
203
201
  document=document,
204
202
  content=content_in_bytes,
205
203
  extension_source=content_type, llm=self.llm, chunking_config=chunking_config)
@@ -112,7 +112,8 @@ class BrowserToolkit(BaseToolkit):
112
112
  elif tool == 'google':
113
113
  try:
114
114
  google_api_wrapper = GoogleSearchAPIWrapper(
115
- **wrapper_payload_google
115
+ google_api_key=wrapper_payload_google.get('google_api_key'),
116
+ google_cse_id=wrapper_payload_google.get('google_cse_id')
116
117
  )
117
118
  tool_entry = GoogleSearchResults(api_wrapper=google_api_wrapper)
118
119
  # rename the tool to avoid conflicts
@@ -154,6 +154,7 @@ class CreateExcelReportTool(BaseTool):
154
154
  "tp_threshold": (int, Field(default=None, description="Throughput threshold")),
155
155
  "rt_threshold": (int, Field(default=None, description="Response time threshold")),
156
156
  "er_threshold": (int, Field(default=None, description="Error rate threshold")),
157
+ "include_group_pauses": (bool, Field(default=False, description="Include group pauses in Gatling Excel report")),
157
158
  }
158
159
  )
159
160
 
@@ -200,6 +201,7 @@ class CreateExcelReportTool(BaseTool):
200
201
  "tp_threshold": 10,
201
202
  "rt_threshold": 500,
202
203
  "er_threshold": 5,
204
+ "include_group_pauses": False,
203
205
  }
204
206
 
205
207
  def _request_parameter_confirmation(self, default_parameters):
@@ -217,7 +219,8 @@ class CreateExcelReportTool(BaseTool):
217
219
  excel_report_file_name = f'/tmp/reports_test_results_{report["build_id"]}_excel_report.xlsx'
218
220
  bucket_name = report["name"].replace("_", "").replace(" ", "").lower()
219
221
 
220
- result_stats_j = self._parse_report(test_log_file_path, lg_type, parameters["think_time"], is_absolute_file_path=True)
222
+ result_stats_j = self._parse_report(test_log_file_path, lg_type, parameters["think_time"],
223
+ parameters["include_group_pauses"], is_absolute_file_path=True)
221
224
  calc_thr_j = self._calculate_thresholds(result_stats_j, parameters)
222
225
 
223
226
  return self._generate_and_upload_report(
@@ -233,21 +236,22 @@ class CreateExcelReportTool(BaseTool):
233
236
  excel_report_file_name = f'{file_path}_{current_date}.xlsx'
234
237
  bucket_name = bucket
235
238
 
236
- result_stats_j = self._parse_report(file_path, lg_type, parameters["think_time"], is_absolute_file_path=True)
239
+ result_stats_j = self._parse_report(file_path, lg_type, parameters["think_time"],
240
+ parameters["include_group_pauses"], is_absolute_file_path=True)
237
241
  calc_thr_j = self._calculate_thresholds(result_stats_j, parameters)
238
242
 
239
243
  return self._generate_and_upload_report(
240
244
  result_stats_j, carrier_report, calc_thr_j, parameters, excel_report_file_name, bucket_name, file_path
241
245
  )
242
246
 
243
- def _parse_report(self, file_path, lg_type, think_time, is_absolute_file_path=False):
247
+ def _parse_report(self, file_path, lg_type, think_time, include_group_pauses, is_absolute_file_path=False):
244
248
  """Parse the report based on its type."""
245
249
  if lg_type == "gatling":
246
250
  if is_absolute_file_path:
247
251
  report_file = file_path
248
252
  else:
249
253
  report_file = get_latest_log_file(file_path, "simulation.log")
250
- parser = GatlingReportParser(report_file, think_time)
254
+ parser = GatlingReportParser(report_file, include_group_pauses, think_time)
251
255
  result_stats_j = parser.parse()
252
256
  result_stats_j["requests"].update(result_stats_j["groups"])
253
257
  elif lg_type == "jmeter":
@@ -118,9 +118,10 @@ class JMeterReportParser(PerformanceReportParser):
118
118
 
119
119
  class GatlingReportParser(PerformanceReportParser):
120
120
 
121
- def __init__(self, log_file: str, think_times="5,0-10,0"):
121
+ def __init__(self, log_file: str, include_group_pauses, think_times="5,0-10,0"):
122
122
  self.calculated_think_time = think_times
123
123
  self.log_file = log_file
124
+ self.include_group_pauses = include_group_pauses
124
125
 
125
126
  @staticmethod
126
127
  def convert_timestamp_to_datetime(timestamp: int) -> datetime:
@@ -210,7 +211,7 @@ class GatlingReportParser(PerformanceReportParser):
210
211
  ramp_end = self.convert_timestamp_to_datetime(int(line.split('\t')[3]))
211
212
 
212
213
  elif line.startswith('GROUP'):
213
- self.parse_group_line(groups, line)
214
+ self.parse_group_line(groups, line, self.include_group_pauses)
214
215
  except FileNotFoundError as e:
215
216
  print(f"File not found: {e}")
216
217
  raise
@@ -242,11 +243,14 @@ class GatlingReportParser(PerformanceReportParser):
242
243
  requests[request_name].append((response_time, status))
243
244
 
244
245
  @staticmethod
245
- def parse_group_line(groups, line):
246
+ def parse_group_line(groups, line, include_group_pauses):
246
247
  parts = line.split('\t')
247
248
  if len(parts) >= 6:
248
249
  group_name = parts[1]
249
- response_time = int(parts[4])
250
+ if include_group_pauses:
251
+ response_time = int(parts[3]) - int(parts[2])
252
+ else:
253
+ response_time = int(parts[4])
250
254
  status = parts[5].strip()
251
255
  groups[group_name].append((response_time, status))
252
256
 
@@ -1,24 +1,25 @@
1
- import re
2
- import logging
3
- import requests
4
- import json
5
1
  import base64
2
+ import json
3
+ import logging
4
+ import re
6
5
  import traceback
7
- from typing import Optional, List, Any, Dict, Callable, Generator, Literal
8
6
  from json import JSONDecodeError
7
+ from typing import Optional, List, Any, Dict, Callable, Generator, Literal
9
8
 
10
- from pydantic import Field, PrivateAttr, model_validator, create_model, SecretStr
11
- from tenacity import retry, stop_after_attempt, wait_exponential, before_sleep_log
12
-
9
+ import requests
10
+ from langchain_community.document_loaders.confluence import ContentFormat
13
11
  from langchain_core.documents import Document
14
- from langchain_core.tools import ToolException
15
12
  from langchain_core.messages import HumanMessage
13
+ from langchain_core.tools import ToolException
16
14
  from markdownify import markdownify
17
- from langchain_community.document_loaders.confluence import ContentFormat
15
+ from pydantic import Field, PrivateAttr, model_validator, create_model, SecretStr
16
+ from tenacity import retry, stop_after_attempt, wait_exponential, before_sleep_log
18
17
 
19
- from ..elitea_base import BaseVectorStoreToolApiWrapper, extend_with_vector_tools
18
+ from alita_sdk.tools.non_code_indexer_toolkit import NonCodeIndexerToolkit
19
+ from alita_sdk.tools.utils.available_tools_decorator import extend_with_parent_available_tools
20
20
  from ..llm.img_utils import ImageDescriptionCache
21
21
  from ..utils import is_cookie_token, parse_cookie_string
22
+ from ...runtime.utils.utils import IndexerKeywords
22
23
 
23
24
  logger = logging.getLogger(__name__)
24
25
 
@@ -171,7 +172,7 @@ def parse_payload_params(params: Optional[str]) -> Dict[str, Any]:
171
172
  return {}
172
173
 
173
174
 
174
- class ConfluenceAPIWrapper(BaseVectorStoreToolApiWrapper):
175
+ class ConfluenceAPIWrapper(NonCodeIndexerToolkit):
175
176
  # Changed from PrivateAttr to Optional field with exclude=True
176
177
  client: Optional[Any] = Field(default=None, exclude=True)
177
178
  base_url: str
@@ -229,7 +230,7 @@ class ConfluenceAPIWrapper(BaseVectorStoreToolApiWrapper):
229
230
  client_instance._update_header(header, value)
230
231
 
231
232
  values['client'] = client_instance
232
- return values
233
+ return super().validate_toolkit(values)
233
234
 
234
235
  def __unquote_confluence_space(self) -> str | None:
235
236
  if self.space:
@@ -843,13 +844,68 @@ class ConfluenceAPIWrapper(BaseVectorStoreToolApiWrapper):
843
844
  yield document
844
845
 
845
846
  def _process_document(self, document: Document) -> Generator[Document, None, None]:
846
- attachments = self.get_page_attachments(document.metadata.get('id'))
847
- if isinstance(attachments, str):
848
- logger.info(f" {document.metadata.get('id')}: {attachments}")
849
- return
850
- for attachment in attachments:
851
- # TODO need to retrive content from other fields/sources if both attachment.get('content', '') and attachment.get('llm_analysis', '') are None
852
- yield Document(page_content=attachment.get('content', '') or attachment.get('llm_analysis', '') or '', metadata=attachment.get('metadata', {}))
847
+ try:
848
+ page_id = document.metadata.get('id')
849
+ attachments = self.client.get_attachments_from_content(page_id)
850
+ if not attachments or not attachments.get('results'):
851
+ return f"No attachments found for page ID {page_id}."
852
+
853
+ # Get attachment history for created/updated info
854
+ history_map = {}
855
+ for attachment in attachments['results']:
856
+ try:
857
+ hist = self.client.history(attachment['id'])
858
+ history_map[attachment['id']] = hist
859
+ except Exception as e:
860
+ logger.warning(f"Failed to fetch history for attachment {attachment.get('title', '')}: {str(e)}")
861
+ history_map[attachment['id']] = None
862
+
863
+ import re
864
+ for attachment in attachments['results']:
865
+ title = attachment.get('title', '')
866
+ file_ext = title.lower().split('.')[-1] if '.' in title else ''
867
+
868
+ media_type = attachment.get('metadata', {}).get('mediaType', '')
869
+ # Core metadata extraction with history
870
+ hist = history_map.get(attachment['id']) or {}
871
+ created_by = hist.get('createdBy', {}).get('displayName', '') if hist else attachment.get('creator', {}).get('displayName', '')
872
+ created_date = hist.get('createdDate', '') if hist else attachment.get('created', '')
873
+ last_updated = hist.get('lastUpdated', {}).get('when', '') if hist else ''
874
+
875
+ metadata = {
876
+ 'name': title,
877
+ 'size': attachment.get('extensions', {}).get('fileSize', None),
878
+ 'creator': created_by,
879
+ 'created': created_date,
880
+ 'updated': last_updated,
881
+ 'media_type': media_type,
882
+ 'labels': [label['name'] for label in
883
+ attachment.get('metadata', {}).get('labels', {}).get('results', [])],
884
+ 'download_url': self.base_url.rstrip('/') + attachment['_links']['download'] if attachment.get(
885
+ '_links', {}).get('download') else None
886
+ }
887
+
888
+ download_url = self.base_url.rstrip('/') + attachment['_links']['download']
889
+
890
+ try:
891
+ resp = self.client.request(method="GET", path=download_url[len(self.base_url):], advanced_mode=True)
892
+ if resp.status_code == 200:
893
+ content = resp.content
894
+ else:
895
+ content = f"[Failed to download {download_url}: HTTP status code {resp.status_code}]"
896
+ except Exception as e:
897
+ content = f"[Error downloading content: {str(e)}]"
898
+
899
+ if isinstance(content, str):
900
+ yield Document(page_content=content, metadata=metadata)
901
+ else:
902
+ yield Document(page_content="", metadata={
903
+ **metadata,
904
+ IndexerKeywords.CONTENT_FILE_NAME.value: f".{file_ext}",
905
+ IndexerKeywords.CONTENT_IN_BYTES.value: content
906
+ })
907
+ except Exception as e:
908
+ yield from ()
853
909
 
854
910
  def _download_image(self, image_url):
855
911
  """
@@ -1598,7 +1654,7 @@ class ConfluenceAPIWrapper(BaseVectorStoreToolApiWrapper):
1598
1654
  "bins_with_llm": (Optional[bool], Field(description="Use LLM for processing binary files.", default=False)),
1599
1655
  }
1600
1656
 
1601
- @extend_with_vector_tools
1657
+ @extend_with_parent_available_tools
1602
1658
  def get_available_tools(self):
1603
1659
  # Confluence-specific tools
1604
1660
  confluence_tools = [
@@ -13,12 +13,11 @@ from langchain_core.tools import ToolException
13
13
  from pydantic import Field, PrivateAttr, model_validator, create_model, SecretStr
14
14
  import requests
15
15
 
16
- from ..elitea_base import BaseVectorStoreToolApiWrapper, extend_with_vector_tools
17
16
  from ..llm.img_utils import ImageDescriptionCache
18
17
  from ..non_code_indexer_toolkit import NonCodeIndexerToolkit
19
18
  from ..utils import is_cookie_token, parse_cookie_string
20
19
  from ..utils.available_tools_decorator import extend_with_parent_available_tools
21
- from ..utils.content_parser import file_extension_by_chunker
20
+ from ..utils.content_parser import file_extension_by_chunker, process_content_by_type
22
21
  from ...runtime.utils.utils import IndexerKeywords
23
22
 
24
23
  logger = logging.getLogger(__name__)
@@ -133,6 +132,13 @@ GetRemoteLinks = create_model(
133
132
  jira_issue_key=(str, Field(description="Jira issue key from which remote links will be extracted, e.g. TEST-1234"))
134
133
  )
135
134
 
135
+ GetIssueAttachments = create_model(
136
+ "GetIssueAttachments",
137
+ jira_issue_key=(str, Field(description="Jira issue key from which remote links will be extracted, e.g. TEST-1234")),
138
+ attachment_pattern=(Optional[str], Field(description="Regex pattern to filter attachment filenames. If not provided,"
139
+ " all attachments will be processed", default=None))
140
+ )
141
+
136
142
  ListCommentsInput = create_model(
137
143
  "ListCommentsInputModel",
138
144
  issue_key=(str, Field(description="The issue key of the Jira issue from which comments will be extracted, e.g. 'TEST-123'."))
@@ -726,19 +732,37 @@ class JiraApiWrapper(NonCodeIndexerToolkit):
726
732
  logger.error(f"Error listing Jira projects: {stacktrace}")
727
733
  return ToolException(f"Error listing Jira projects: {stacktrace}")
728
734
 
729
- def get_attachments_content(self, jira_issue_key: str):
730
- """ Extract content of all attachments related to specified Jira issue key.
731
- NOTE: only parsable attachments will be considered """
735
+ def get_attachments_content(self, jira_issue_key: str, attachment_pattern: Optional[str] = None):
736
+ """ Extract the content of all attachments related to a specified Jira issue key.
737
+ NOTE: only parsable attachments will be considered
738
+ Args:
739
+ jira_issue_key: The key of the Jira issue, e.g. "TEST-123
740
+ attachment_pattern: Optional regex pattern to filter attachments by filename.
741
+ If provided, only attachments with filenames matching this pattern will be processed.
742
+ Returns:
743
+ A string containing the content of all relevant attachments, separated by double newlines.
744
+ """
732
745
 
733
746
  attachment_data = []
734
747
  attachments = self._client.get_attachments_ids_from_issue(issue=jira_issue_key)
735
748
  for attachment in attachments:
749
+ if attachment_pattern and not re.search(attachment_pattern, attachment['filename']):
750
+ logger.info(f"Skipping attachment {attachment['filename']} as it does not match pattern {attachment_pattern}")
751
+ continue
752
+ logger.info(f"Processing attachment {attachment['filename']} with ID {attachment['attachment_id']}")
736
753
  if self.api_version == "3":
737
754
  attachment_data.append(self._client.get_attachment_content(attachment['attachment_id']))
738
755
  else:
739
- extracted_attachment = self._client.get_attachment(attachment_id=attachment['attachment_id'])
740
- if extracted_attachment['mimeType'] in SUPPORTED_ATTACHMENT_MIME_TYPES:
741
- attachment_data.append(self._extract_attachment_content(extracted_attachment))
756
+ try:
757
+ attachment_content = self._client.get_attachment_content(attachment['attachment_id'])
758
+ except Exception as e:
759
+ logger.error(
760
+ f"Failed to download attachment {attachment['filename']} for issue {jira_issue_key}: {str(e)}")
761
+ attachment_content = self._client.get(
762
+ path=f"secure/attachment/{attachment['attachment_id']}/{attachment['filename']}", not_json_response=True)
763
+ content_docs = process_content_by_type(attachment_content, attachment['filename'], llm=self.llm)
764
+ attachment_data.append("filename: " + attachment['filename'] + "\ncontent: " + str([doc.page_content for doc in content_docs]))
765
+
742
766
  return "\n\n".join(attachment_data)
743
767
 
744
768
  def execute_generic_rq(self, method: str, relative_url: str, params: Optional[str] = "", *args):
@@ -1633,7 +1657,7 @@ class JiraApiWrapper(NonCodeIndexerToolkit):
1633
1657
  {
1634
1658
  "name": "get_attachments_content",
1635
1659
  "description": self.get_attachments_content.__doc__,
1636
- "args_schema": GetRemoteLinks,
1660
+ "args_schema": GetIssueAttachments,
1637
1661
  "ref": self.get_attachments_content,
1638
1662
  },
1639
1663
  {
@@ -201,17 +201,40 @@ def load_content_from_bytes(file_content: bytes, extension: str = None, loader_e
201
201
  if temp_file_path and os.path.exists(temp_file_path):
202
202
  os.remove(temp_file_path)
203
203
 
204
- def process_content_by_type(document: Document, content, extension_source: str, llm = None, chunking_config=None) -> Generator[Document, None, None]:
204
+ def process_document_by_type(content, extension_source: str, document: Document = None, llm = None, chunking_config=None) \
205
+ -> Generator[Document, None, None]:
206
+ """Process the content of a file based on its type using a configured loader cosidering the origin document."""
207
+ try:
208
+ chunks = process_content_by_type(content, extension_source, llm, chunking_config)
209
+ except Exception as e:
210
+ msg = f"Error during content for file {extension_source}:\n{e}"
211
+ logger.warning(msg)
212
+ yield Document(
213
+ page_content=msg,
214
+ metadata={**document.metadata, 'chunk_id': 1}
215
+ )
216
+ return
217
+ for chunk in chunks:
218
+ yield Document(
219
+ page_content=sanitize_for_postgres(chunk.page_content),
220
+ metadata={**document.metadata, **chunk.metadata}
221
+ )
222
+
223
+
224
+ def process_content_by_type(content, filename: str, llm=None, chunking_config=None) -> \
225
+ Generator[Document, None, None]:
226
+ """Process the content of a file based on its type using a configured loader."""
205
227
  temp_file_path = None
206
228
  try:
207
- extension = "." + extension_source.split('.')[-1].lower()
229
+ extension = "." + filename.split('.')[-1].lower()
208
230
 
209
231
  with tempfile.NamedTemporaryFile(mode='w+b', suffix=extension, delete=False) as temp_file:
210
232
  temp_file_path = temp_file.name
211
233
  if content is None:
212
- logger.warning(f"'{IndexerKeywords.CONTENT_IN_BYTES.value}' ie expected but not found in document metadata.")
234
+ logger.warning(
235
+ f"'{IndexerKeywords.CONTENT_IN_BYTES.value}' ie expected but not found in document metadata.")
213
236
  return
214
-
237
+
215
238
  temp_file.write(content)
216
239
  temp_file.flush()
217
240
 
@@ -238,21 +261,7 @@ def process_content_by_type(document: Document, content, extension_source: str,
238
261
  loader_kwargs.pop(LoaderProperties.PROMPT_DEFAULT.value)
239
262
  loader_kwargs[LoaderProperties.PROMPT.value] = image_processing_prompt
240
263
  loader = loader_cls(file_path=temp_file_path, **loader_kwargs)
241
- try:
242
- chunks = loader.load()
243
- except Exception as e:
244
- msg = f"Error during content for file {temp_file_path}:\n{e}"
245
- logger.warning(msg)
246
- yield Document(
247
- page_content=msg,
248
- metadata={**document.metadata, 'chunk_id':1}
249
- )
250
- return
251
- for chunk in chunks:
252
- yield Document(
253
- page_content=sanitize_for_postgres(chunk.page_content),
254
- metadata={**document.metadata, **chunk.metadata}
255
- )
264
+ return loader.load()
256
265
  finally:
257
266
  if temp_file_path and os.path.exists(temp_file_path):
258
267
  os.remove(temp_file_path)
@@ -9,14 +9,9 @@ from langchain_core.tools import ToolException
9
9
  from pydantic import PrivateAttr, SecretStr, create_model, model_validator, Field
10
10
  from python_graphql_client import GraphqlClient
11
11
 
12
- from ..elitea_base import (
13
- BaseVectorStoreToolApiWrapper,
14
- extend_with_vector_tools,
15
- )
16
12
  from ..non_code_indexer_toolkit import NonCodeIndexerToolkit
17
13
  from ..utils.available_tools_decorator import extend_with_parent_available_tools
18
14
  from ...runtime.utils.utils import IndexerKeywords
19
- from ..utils.content_parser import file_extension_by_chunker
20
15
 
21
16
  try:
22
17
  from alita_sdk.runtime.langchain.interfaces.llm_processor import get_embeddings
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.316
3
+ Version: 0.3.318
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