alita-sdk 0.3.395__tar.gz → 0.3.397__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.

Potentially problematic release.


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

Files changed (370) hide show
  1. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/PKG-INFO +1 -1
  2. alita_sdk-0.3.397/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +460 -0
  3. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/llm.py +2 -0
  4. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/__init__.py +4 -0
  5. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/base_indexer_toolkit.py +1 -1
  6. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk.egg-info/PKG-INFO +1 -1
  7. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/pyproject.toml +1 -1
  8. alita_sdk-0.3.395/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -148
  9. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/LICENSE +0 -0
  10. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/README.md +0 -0
  11. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/__init__.py +0 -0
  12. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/community/__init__.py +0 -0
  13. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/community/utils.py +0 -0
  14. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/__init__.py +0 -0
  15. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/ado.py +0 -0
  16. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/azure_search.py +0 -0
  17. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/bigquery.py +0 -0
  18. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/bitbucket.py +0 -0
  19. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/browser.py +0 -0
  20. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/carrier.py +0 -0
  21. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/confluence.py +0 -0
  22. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/delta_lake.py +0 -0
  23. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/embedding.py +0 -0
  24. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/figma.py +0 -0
  25. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/github.py +0 -0
  26. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/gitlab.py +0 -0
  27. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/google_places.py +0 -0
  28. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/jira.py +0 -0
  29. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/pgvector.py +0 -0
  30. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/postman.py +0 -0
  31. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/qtest.py +0 -0
  32. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/rally.py +0 -0
  33. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/report_portal.py +0 -0
  34. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/salesforce.py +0 -0
  35. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/service_now.py +0 -0
  36. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/sharepoint.py +0 -0
  37. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/slack.py +0 -0
  38. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/sonar.py +0 -0
  39. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/sql.py +0 -0
  40. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/testio.py +0 -0
  41. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/testrail.py +0 -0
  42. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/xray.py +0 -0
  43. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/zephyr.py +0 -0
  44. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/zephyr_enterprise.py +0 -0
  45. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/configurations/zephyr_essential.py +0 -0
  46. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/__init__.py +0 -0
  47. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/clients/__init__.py +0 -0
  48. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/clients/artifact.py +0 -0
  49. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/clients/client.py +0 -0
  50. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/clients/datasource.py +0 -0
  51. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/clients/prompt.py +0 -0
  52. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/clients/sandbox_client.py +0 -0
  53. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/__init__.py +0 -0
  54. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
  55. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
  56. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/assistant.py +0 -0
  57. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
  58. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/constants.py +0 -0
  59. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
  60. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
  61. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
  62. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
  63. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
  64. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
  65. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
  66. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaJSONLoader.py +0 -0
  67. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
  68. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaMarkdownLoader.py +0 -0
  69. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaPDFLoader.py +0 -0
  70. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaPowerPointLoader.py +0 -0
  71. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaPythonLoader.py +0 -0
  72. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
  73. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
  74. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/AlitaTextLoader.py +0 -0
  75. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/ImageParser.py +0 -0
  76. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
  77. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
  78. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
  79. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/indexer.py +0 -0
  80. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
  81. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
  82. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
  83. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
  84. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
  85. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/langraph_agent.py +0 -0
  86. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
  87. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
  88. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
  89. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
  90. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
  91. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/store_manager.py +0 -0
  92. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
  93. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
  94. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
  95. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
  96. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
  97. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
  98. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/tools/git.py +0 -0
  99. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/tools/log.py +0 -0
  100. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
  101. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/tools/state.py +0 -0
  102. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
  103. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
  104. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/langchain/utils.py +0 -0
  105. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/llms/__init__.py +0 -0
  106. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/llms/preloaded.py +0 -0
  107. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/toolkits/__init__.py +0 -0
  108. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/toolkits/application.py +0 -0
  109. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/toolkits/artifact.py +0 -0
  110. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/toolkits/configurations.py +0 -0
  111. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/toolkits/datasource.py +0 -0
  112. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/toolkits/prompt.py +0 -0
  113. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
  114. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/toolkits/tools.py +0 -0
  115. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
  116. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/__init__.py +0 -0
  117. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/agent.py +0 -0
  118. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/application.py +0 -0
  119. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/artifact.py +0 -0
  120. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/datasource.py +0 -0
  121. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/echo.py +0 -0
  122. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/function.py +0 -0
  123. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/graph.py +0 -0
  124. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/image_generation.py +0 -0
  125. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
  126. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/loop.py +0 -0
  127. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/loop_output.py +0 -0
  128. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/mcp_server_tool.py +0 -0
  129. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
  130. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/prompt.py +0 -0
  131. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/router.py +0 -0
  132. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/sandbox.py +0 -0
  133. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/tool.py +0 -0
  134. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/vectorstore.py +0 -0
  135. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/tools/vectorstore_base.py +0 -0
  136. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
  137. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/utils/__init__.py +0 -0
  138. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/utils/constants.py +0 -0
  139. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/utils/evaluate.py +0 -0
  140. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/utils/logging.py +0 -0
  141. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
  142. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/utils/streamlit.py +0 -0
  143. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/utils/toolkit_runtime.py +0 -0
  144. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/utils/toolkit_utils.py +0 -0
  145. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/runtime/utils/utils.py +0 -0
  146. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/ado/__init__.py +0 -0
  147. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/ado/repos/__init__.py +0 -0
  148. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
  149. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/ado/test_plan/__init__.py +0 -0
  150. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +0 -0
  151. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/ado/utils.py +0 -0
  152. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/ado/wiki/__init__.py +0 -0
  153. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
  154. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/ado/work_item/__init__.py +0 -0
  155. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/ado/work_item/ado_wrapper.py +0 -0
  156. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
  157. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
  158. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/aws/__init__.py +0 -0
  159. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/aws/delta_lake/__init__.py +0 -0
  160. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/aws/delta_lake/api_wrapper.py +0 -0
  161. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/aws/delta_lake/schemas.py +0 -0
  162. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/aws/delta_lake/tool.py +0 -0
  163. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/azure_ai/__init__.py +0 -0
  164. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
  165. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
  166. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/base/__init__.py +0 -0
  167. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/base/tool.py +0 -0
  168. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/bitbucket/__init__.py +0 -0
  169. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
  170. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
  171. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +0 -0
  172. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/browser/__init__.py +0 -0
  173. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/browser/crawler.py +0 -0
  174. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
  175. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/browser/google_search_rag.py +0 -0
  176. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/browser/utils.py +0 -0
  177. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/browser/wiki.py +0 -0
  178. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/__init__.py +0 -0
  179. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/api_wrapper.py +0 -0
  180. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
  181. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/backend_tests_tool.py +0 -0
  182. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
  183. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/carrier_sdk.py +0 -0
  184. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
  185. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -0
  186. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
  187. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
  188. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -0
  189. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
  190. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/tools.py +0 -0
  191. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
  192. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
  193. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/carrier/utils.py +0 -0
  194. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/__init__.py +0 -0
  195. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/__init__.py +0 -0
  196. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
  197. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/constants.py +0 -0
  198. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
  199. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
  200. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
  201. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
  202. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
  203. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
  204. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
  205. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
  206. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
  207. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
  208. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
  209. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
  210. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
  211. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
  212. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
  213. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/models.py +0 -0
  214. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/sematic/__init__.py +0 -0
  215. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
  216. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/sematic/json_chunker.py +0 -0
  217. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
  218. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
  219. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
  220. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/chunkers/utils.py +0 -0
  221. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/cloud/__init__.py +0 -0
  222. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
  223. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
  224. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
  225. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
  226. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
  227. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
  228. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
  229. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
  230. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/code/__init__.py +0 -0
  231. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/code/linter/__init__.py +0 -0
  232. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
  233. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
  234. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/code/sonar/__init__.py +0 -0
  235. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
  236. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/code_indexer_toolkit.py +0 -0
  237. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/confluence/__init__.py +0 -0
  238. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/confluence/api_wrapper.py +0 -0
  239. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/confluence/loader.py +0 -0
  240. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/confluence/utils.py +0 -0
  241. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
  242. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
  243. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/elastic/__init__.py +0 -0
  244. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
  245. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/elitea_base.py +0 -0
  246. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/figma/__init__.py +0 -0
  247. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/figma/api_wrapper.py +0 -0
  248. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/github/__init__.py +0 -0
  249. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/github/api_wrapper.py +0 -0
  250. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/github/github_client.py +0 -0
  251. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
  252. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/github/schemas.py +0 -0
  253. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/github/tool.py +0 -0
  254. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/github/tool_prompts.py +0 -0
  255. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/gitlab/__init__.py +0 -0
  256. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/gitlab/api_wrapper.py +0 -0
  257. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/gitlab/tools.py +0 -0
  258. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/gitlab/utils.py +0 -0
  259. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
  260. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
  261. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/gmail/__init__.py +0 -0
  262. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
  263. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/gmail/utils.py +0 -0
  264. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/google/__init__.py +0 -0
  265. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/google/bigquery/__init__.py +0 -0
  266. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/google/bigquery/api_wrapper.py +0 -0
  267. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/google/bigquery/schemas.py +0 -0
  268. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/google/bigquery/tool.py +0 -0
  269. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/google_places/__init__.py +0 -0
  270. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
  271. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/jira/__init__.py +0 -0
  272. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/jira/api_wrapper.py +0 -0
  273. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/keycloak/__init__.py +0 -0
  274. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
  275. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/llm/__init__.py +0 -0
  276. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/llm/img_utils.py +0 -0
  277. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/llm/llm_utils.py +0 -0
  278. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/localgit/__init__.py +0 -0
  279. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/localgit/local_git.py +0 -0
  280. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/localgit/tool.py +0 -0
  281. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/memory/__init__.py +0 -0
  282. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/non_code_indexer_toolkit.py +0 -0
  283. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/ocr/__init__.py +0 -0
  284. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
  285. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/ocr/text_detection.py +0 -0
  286. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/openapi/__init__.py +0 -0
  287. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/__init__.py +0 -0
  288. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
  289. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
  290. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
  291. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
  292. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
  293. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
  294. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
  295. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
  296. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
  297. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
  298. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
  299. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
  300. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
  301. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
  302. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
  303. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
  304. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
  305. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
  306. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/postman/__init__.py +0 -0
  307. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/postman/api_wrapper.py +0 -0
  308. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/postman/postman_analysis.py +0 -0
  309. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pptx/__init__.py +0 -0
  310. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
  311. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/qtest/__init__.py +0 -0
  312. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/qtest/api_wrapper.py +0 -0
  313. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/qtest/tool.py +0 -0
  314. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/rally/__init__.py +0 -0
  315. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/rally/api_wrapper.py +0 -0
  316. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/report_portal/__init__.py +0 -0
  317. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
  318. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
  319. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/salesforce/__init__.py +0 -0
  320. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
  321. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/salesforce/model.py +0 -0
  322. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/servicenow/__init__.py +0 -0
  323. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
  324. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
  325. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/sharepoint/__init__.py +0 -0
  326. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/sharepoint/api_wrapper.py +0 -0
  327. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
  328. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/sharepoint/utils.py +0 -0
  329. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/slack/__init__.py +0 -0
  330. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/slack/api_wrapper.py +0 -0
  331. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/sql/__init__.py +0 -0
  332. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/sql/api_wrapper.py +0 -0
  333. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/sql/models.py +0 -0
  334. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/testio/__init__.py +0 -0
  335. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/testio/api_wrapper.py +0 -0
  336. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/testrail/__init__.py +0 -0
  337. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
  338. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/utils/__init__.py +0 -0
  339. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/utils/available_tools_decorator.py +0 -0
  340. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/utils/content_parser.py +0 -0
  341. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/vector_adapters/VectorStoreAdapter.py +0 -0
  342. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/vector_adapters/__init__.py +0 -0
  343. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/xray/__init__.py +0 -0
  344. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/xray/api_wrapper.py +0 -0
  345. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/yagmail/__init__.py +0 -0
  346. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
  347. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
  348. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr/__init__.py +0 -0
  349. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
  350. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr/rest_client.py +0 -0
  351. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
  352. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
  353. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
  354. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr_essential/__init__.py +0 -0
  355. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr_essential/api_wrapper.py +0 -0
  356. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr_essential/client.py +0 -0
  357. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
  358. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
  359. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr_squad/__init__.py +0 -0
  360. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -0
  361. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +0 -0
  362. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk.egg-info/SOURCES.txt +0 -0
  363. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk.egg-info/dependency_links.txt +0 -0
  364. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk.egg-info/requires.txt +0 -0
  365. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/alita_sdk.egg-info/top_level.txt +0 -0
  366. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/setup.cfg +0 -0
  367. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/tests/test_ado_analysis.py +0 -0
  368. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/tests/test_github_analysis.py +0 -0
  369. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/tests/test_gitlab_analysis.py +0 -0
  370. {alita_sdk-0.3.395 → alita_sdk-0.3.397}/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.395
3
+ Version: 0.3.397
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
@@ -0,0 +1,460 @@
1
+ import re
2
+ import uuid
3
+ from io import BytesIO
4
+
5
+ import mammoth.images
6
+ import pytesseract
7
+ from PIL import Image
8
+ from langchain_core.document_loaders import BaseLoader
9
+ from langchain_core.documents import Document
10
+ from mammoth import convert_to_html
11
+ from markdownify import markdownify
12
+ from docx import Document as DocxDocument
13
+ from docx.oxml.ns import qn
14
+ from bs4 import BeautifulSoup
15
+
16
+ from alita_sdk.tools.chunkers.sematic.markdown_chunker import markdown_by_headers_chunker
17
+ from .utils import perform_llm_prediction_for_image_bytes
18
+
19
+
20
+ class AlitaDocxMammothLoader(BaseLoader):
21
+ """
22
+ Loader for Docx files using Mammoth to convert to HTML, with image handling,
23
+ and then Markdownify to convert HTML to markdown.
24
+ Detects bordered paragraphs and text boxes and treats them as code blocks.
25
+ """
26
+ def __init__(self, **kwargs):
27
+ """
28
+ Initializes AlitaDocxMammothLoader.
29
+
30
+ Args:
31
+ **kwargs: Keyword arguments, including:
32
+ file_path (str): Path to the Docx file. Required.
33
+ llm (LLM, optional): Language model for processing images.
34
+ prompt (str, optional): Prompt for the language model.
35
+ Raises:
36
+ ValueError: If the 'path' parameter is not provided.
37
+ """
38
+ self.path = kwargs.get('file_path')
39
+ self.file_content = kwargs.get('file_content')
40
+ self.file_name = kwargs.get('file_name')
41
+ self.extract_images = kwargs.get('extract_images')
42
+ self.llm = kwargs.get("llm")
43
+ self.prompt = kwargs.get("prompt")
44
+ self.max_tokens = kwargs.get('max_tokens', 512)
45
+
46
+ def __handle_image(self, image) -> dict:
47
+ """
48
+ Handles image processing within the Docx file.
49
+
50
+ Uses LLM for image captioning if available, otherwise falls back to Tesseract OCR,
51
+ and defaults to base64 encoding if both fail.
52
+
53
+ Args:
54
+ image (mammoth.images.Image): Image object from Mammoth.
55
+
56
+ Returns:
57
+ dict: Dictionary containing the 'src' attribute for the HTML <img> tag.
58
+ """
59
+ output = {}
60
+ try:
61
+ if self.llm:
62
+ # Use LLM for image understanding
63
+ with image.open() as image_bytes:
64
+ result = perform_llm_prediction_for_image_bytes(image_bytes, self.llm, self.prompt)
65
+ output['src'] = result # LLM image transcript in src
66
+ return output
67
+ else:
68
+ # Use Tesseract OCR if LLM is not available
69
+ with image.open() as image_bytes:
70
+ img = Image.open(image_bytes)
71
+ output['src'] = pytesseract.image_to_string(image=img) # Tesseract transcript in src
72
+ return output
73
+ except Exception as e:
74
+ # Fallback to default image handling for any exceptions during image processing
75
+ # This ensures robustness against various image format issues, OCR failures,
76
+ # or LLM invocation problems. It prevents the loader from crashing due to
77
+ # a single image processing failure and provides a default image representation.
78
+ return self.__default_image_handler(image)
79
+
80
+ def __default_image_handler(self, image) -> dict:
81
+ """
82
+ Default image handler: encodes image to base64 data URL.
83
+
84
+ Args:
85
+ image (mammoth.images.Image): Image object from Mammoth.
86
+
87
+ Returns:
88
+ dict: Dictionary with base64 encoded 'src' for HTML <img> tag.
89
+ """
90
+ return {"src": "Transcript is not available"}
91
+
92
+
93
+ def __postprocess_original_md(self, original_md: str) -> str:
94
+ # Pattern to match placeholders like[image_1_1.png] or similar
95
+ pattern = re.compile(r'!\[([^\]]*)\]\(([^)]*)(\s\"([^"]*)\")?\)')
96
+
97
+ def replace_placeholder(match):
98
+ transcript = match.group(2)
99
+ # Return a markdown formatted transcript section.
100
+ return f"\n**Image Transcript:**\n{transcript}\n"
101
+
102
+ new_md = pattern.sub(replace_placeholder, original_md)
103
+ return new_md
104
+
105
+ def __has_border(self, paragraph):
106
+ """
107
+ Check if a paragraph has border formatting.
108
+
109
+ Args:
110
+ paragraph: A python-docx Paragraph object.
111
+
112
+ Returns:
113
+ bool: True if paragraph has any border, False otherwise.
114
+ """
115
+ pPr = paragraph._element.pPr
116
+ if pPr is not None:
117
+ pBdr = pPr.find(qn('w:pBdr'))
118
+ if pBdr is not None:
119
+ # Check if any border side exists (top, bottom, left, right)
120
+ for side in ['top', 'bottom', 'left', 'right']:
121
+ border = pBdr.find(qn(f'w:{side}'))
122
+ if border is not None:
123
+ # Check if border is not "none" or has a width
124
+ val = border.get(qn('w:val'))
125
+ if val and val != 'none':
126
+ return True
127
+ return False
128
+
129
+ def __find_text_boxes(self, doc):
130
+ """
131
+ Find all text boxes in document by searching OOXML structure.
132
+ Text boxes are typically in w:txbxContent elements.
133
+
134
+ Args:
135
+ doc: A python-docx Document object.
136
+
137
+ Returns:
138
+ list: List of tuples (element, paragraphs_inside_textbox).
139
+ """
140
+ text_boxes = []
141
+
142
+ # Iterate through document body XML to find text box content elements
143
+ for element in doc.element.body.iter():
144
+ # Look for text box content elements
145
+ if element.tag.endswith('txbxContent'):
146
+ # Collect all paragraphs inside this text box
147
+ txbx_paragraphs = []
148
+ for txbx_para_element in element.iter():
149
+ if txbx_para_element.tag.endswith('p'):
150
+ txbx_paragraphs.append(txbx_para_element)
151
+
152
+ if txbx_paragraphs:
153
+ text_boxes.append((element, txbx_paragraphs))
154
+
155
+ return text_boxes
156
+
157
+ def __create_marker_paragraph(self, marker_text):
158
+ """
159
+ Create a paragraph element with marker text.
160
+
161
+ Args:
162
+ marker_text (str): The marker text to insert.
163
+
164
+ Returns:
165
+ Element: An OOXML paragraph element.
166
+ """
167
+ from docx.oxml import OxmlElement
168
+
169
+ p = OxmlElement('w:p')
170
+ r = OxmlElement('w:r')
171
+ t = OxmlElement('w:t')
172
+ t.text = marker_text
173
+ r.append(t)
174
+ p.append(r)
175
+ return p
176
+
177
+ def __inject_markers_for_paragraph(self, paragraph, start_marker, end_marker):
178
+ """
179
+ Inject marker paragraphs before and after a bordered paragraph.
180
+
181
+ Args:
182
+ paragraph: A python-docx Paragraph object.
183
+ start_marker (str): The start marker text.
184
+ end_marker (str): The end marker text.
185
+ """
186
+ # Insert start marker paragraph before
187
+ marker_p_start = self.__create_marker_paragraph(start_marker)
188
+ paragraph._element.addprevious(marker_p_start)
189
+
190
+ # Insert end marker paragraph after
191
+ marker_p_end = self.__create_marker_paragraph(end_marker)
192
+ paragraph._element.addnext(marker_p_end)
193
+
194
+ def __inject_markers_for_textbox(self, textbox_element, paragraph_elements, start_marker, end_marker):
195
+ """
196
+ Inject markers around text box content.
197
+
198
+ Args:
199
+ textbox_element: The w:txbxContent element.
200
+ paragraph_elements: List of paragraph elements inside the text box.
201
+ start_marker (str): The start marker text.
202
+ end_marker (str): The end marker text.
203
+ """
204
+ if not paragraph_elements:
205
+ return
206
+
207
+ # Insert start marker before first paragraph in text box
208
+ first_para = paragraph_elements[0]
209
+ marker_p_start = self.__create_marker_paragraph(start_marker)
210
+ first_para.addprevious(marker_p_start)
211
+
212
+ # Insert end marker after last paragraph in text box
213
+ last_para = paragraph_elements[-1]
214
+ marker_p_end = self.__create_marker_paragraph(end_marker)
215
+ last_para.addnext(marker_p_end)
216
+
217
+ def __detect_and_mark_bordered_content(self, docx_stream):
218
+ """
219
+ Detects bordered paragraphs and text boxes, injects unique markers around them.
220
+ Groups consecutive bordered paragraphs into single code blocks.
221
+
222
+ Args:
223
+ docx_stream: A file-like object containing the DOCX document.
224
+
225
+ Returns:
226
+ tuple: (modified_docx_stream, start_marker, end_marker)
227
+ """
228
+ # Load document with python-docx
229
+ doc = DocxDocument(docx_stream)
230
+
231
+ # Generate unique markers to avoid conflicts with document content
232
+ unique_id = uuid.uuid4().hex[:8]
233
+ start_marker = f"<<<BORDERED_BLOCK_START_{unique_id}>>>"
234
+ end_marker = f"<<<BORDERED_BLOCK_END_{unique_id}>>>"
235
+
236
+ # Group consecutive bordered paragraphs together
237
+ bordered_groups = []
238
+ current_group = []
239
+
240
+ for para in doc.paragraphs:
241
+ if self.__has_border(para):
242
+ current_group.append(para)
243
+ else:
244
+ if current_group:
245
+ # End of a bordered group
246
+ bordered_groups.append(current_group)
247
+ current_group = []
248
+
249
+ # Don't forget the last group if document ends with bordered paragraphs
250
+ if current_group:
251
+ bordered_groups.append(current_group)
252
+
253
+ # Collect all text boxes
254
+ # text_boxes = self.__find_text_boxes(doc)
255
+
256
+ # Inject markers around each group of consecutive bordered paragraphs
257
+ for group in bordered_groups:
258
+ if group:
259
+ # Add start marker before first paragraph in group
260
+ first_para = group[0]
261
+ marker_p_start = self.__create_marker_paragraph(start_marker)
262
+ first_para._element.addprevious(marker_p_start)
263
+
264
+ # Add end marker after last paragraph in group
265
+ last_para = group[-1]
266
+ marker_p_end = self.__create_marker_paragraph(end_marker)
267
+ last_para._element.addnext(marker_p_end)
268
+
269
+ # Inject markers around text box content
270
+ # for textbox_element, para_elements in text_boxes:
271
+ # self.__inject_markers_for_textbox(textbox_element, para_elements, start_marker, end_marker)
272
+
273
+ # Save modified document to BytesIO
274
+ output = BytesIO()
275
+ doc.save(output)
276
+ output.seek(0)
277
+
278
+ return output, start_marker, end_marker
279
+
280
+ def __contains_complex_structure(self, content_html):
281
+ """
282
+ Check if HTML content contains tables, lists, or other complex structures.
283
+
284
+ Args:
285
+ content_html (str): HTML content to analyze.
286
+
287
+ Returns:
288
+ bool: True if content contains tables/lists, False otherwise.
289
+ """
290
+ content_soup = BeautifulSoup(content_html, 'html.parser')
291
+
292
+ # Check for tables
293
+ if content_soup.find('table'):
294
+ return True
295
+
296
+ # Check for lists (ul, ol)
297
+ if content_soup.find('ul') or content_soup.find('ol'):
298
+ return True
299
+
300
+ return False
301
+
302
+ def __escape_hash_symbols(self, html_content):
303
+ """
304
+ Escape hash (#) symbols at the beginning of lines in HTML to prevent
305
+ them from being treated as markdown headers.
306
+
307
+ Args:
308
+ html_content (str): HTML content.
309
+
310
+ Returns:
311
+ str: HTML with escaped hash symbols.
312
+ """
313
+ soup = BeautifulSoup(html_content, 'html.parser')
314
+
315
+ # Process all text-containing elements
316
+ for element in soup.find_all(['p', 'li', 'td', 'th', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6']):
317
+ if element.string:
318
+ text = element.string
319
+ # If line starts with #, escape it
320
+ if text.strip().startswith('#'):
321
+ element.string = text.replace('#', '\\#', 1)
322
+
323
+ return str(soup)
324
+
325
+ def __wrap_marked_sections_in_code_blocks(self, html, start_marker, end_marker):
326
+ """
327
+ Find content between markers and wrap appropriately:
328
+ - Simple text/code → <pre><code> block
329
+ - Tables/lists → Custom wrapper with preserved structure
330
+
331
+ Args:
332
+ html (str): The HTML content from Mammoth.
333
+ start_marker (str): The start marker text.
334
+ end_marker (str): The end marker text.
335
+
336
+ Returns:
337
+ str: HTML with marked sections wrapped appropriately.
338
+ """
339
+ import html as html_module
340
+
341
+ # Mammoth escapes < and > to &lt; and &gt;, so we need to escape our markers too
342
+ escaped_start = html_module.escape(start_marker)
343
+ escaped_end = html_module.escape(end_marker)
344
+
345
+ # Pattern to find content between HTML-escaped markers (including HTML tags)
346
+ # The markers will be in separate <p> tags, and content in between
347
+ pattern = re.compile(
348
+ f'<p>{re.escape(escaped_start)}</p>(.*?)<p>{re.escape(escaped_end)}</p>',
349
+ re.DOTALL
350
+ )
351
+
352
+ def replace_with_appropriate_wrapper(match):
353
+ content = match.group(1)
354
+
355
+ # Detect if content has complex structure (tables, lists)
356
+ has_complex_structure = self.__contains_complex_structure(content)
357
+
358
+ if has_complex_structure:
359
+ # Preserve structure: keep HTML as-is, escape # symbols
360
+ escaped_content = self.__escape_hash_symbols(content)
361
+ # Wrap in a div with special class for potential custom handling
362
+ return f'<div class="alita-bordered-content">{escaped_content}</div>'
363
+ else:
364
+ # Simple text/code: extract as plain text and wrap in code block
365
+ content_soup = BeautifulSoup(content, 'html.parser')
366
+
367
+ # Extract text from each paragraph separately to preserve line breaks
368
+ lines = []
369
+ for element in content_soup.find_all(['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6']):
370
+ # Replace <br /> within paragraphs with newlines
371
+ for br in element.find_all('br'):
372
+ br.replace_with('\n')
373
+ text = element.get_text()
374
+ # Preserve leading whitespace (indentation), only strip trailing
375
+ lines.append(text.rstrip())
376
+
377
+ # If no paragraphs found, just get all text
378
+ if not lines:
379
+ content = content.replace('<br />', '\n').replace('<br/>', '\n').replace('<br>', '\n')
380
+ content_text = content_soup.get_text()
381
+ lines = [line.rstrip() for line in content_text.split('\n')]
382
+
383
+ # Join lines, strip only leading/trailing empty lines
384
+ content_text = '\n'.join(lines).strip()
385
+ # Return as code block (need to HTML-escape the content)
386
+ content_escaped = html_module.escape(content_text)
387
+ return f'<pre><code>{content_escaped}</code></pre>'
388
+
389
+ # Replace all marked sections with appropriate wrappers
390
+ result_html = pattern.sub(replace_with_appropriate_wrapper, html)
391
+
392
+ return result_html
393
+
394
+ def load(self):
395
+ """
396
+ Loads and converts the Docx file to markdown format.
397
+
398
+ Returns:
399
+ List[Document]: A list containing a Documents with the markdown content
400
+ and metadata including the source file path.
401
+ """
402
+ result_content = self.get_content()
403
+ return list(markdown_by_headers_chunker(iter([Document(page_content=result_content, metadata={'source': str(self.path)})]), config={'max_tokens':self.max_tokens}))
404
+
405
+ def get_content(self):
406
+ """
407
+ Extracts and converts the content of the Docx file to markdown format.
408
+
409
+ Handles both file paths and in-memory file content.
410
+
411
+ Returns:
412
+ str: The markdown content extracted from the Docx file.
413
+ """
414
+ if self.path:
415
+ # If path is provided, read from file system
416
+ with open(self.path, 'rb') as docx_file:
417
+ return self._convert_docx_to_markdown(docx_file)
418
+ elif self.file_content and self.file_name:
419
+ # If file_content and file_name are provided, read from memory
420
+ docx_file = BytesIO(self.file_content)
421
+ return self._convert_docx_to_markdown(docx_file)
422
+ else:
423
+ raise ValueError("Either 'path' or 'file_content' and 'file_name' must be provided.")
424
+
425
+ def _convert_docx_to_markdown(self, docx_file):
426
+ """
427
+ Converts the content of a Docx file to markdown format.
428
+ Detects bordered content and treats it as code blocks.
429
+
430
+ Args:
431
+ docx_file (BinaryIO): The Docx file object.
432
+
433
+ Returns:
434
+ str: The markdown content extracted from the Docx file.
435
+ """
436
+ # Step 1: Detect and mark bordered content
437
+ # Reset stream position if needed
438
+ if hasattr(docx_file, 'seek'):
439
+ docx_file.seek(0)
440
+
441
+ marked_docx, start_marker, end_marker = self.__detect_and_mark_bordered_content(docx_file)
442
+
443
+ # Step 2: Convert marked DOCX to HTML using Mammoth
444
+ if self.extract_images:
445
+ # Extract images using the provided image handler
446
+ result = convert_to_html(marked_docx, convert_image=mammoth.images.img_element(self.__handle_image))
447
+ else:
448
+ # Ignore images
449
+ result = convert_to_html(marked_docx, convert_image=lambda image: "")
450
+
451
+ # Step 3: Wrap marked sections in <pre><code> tags
452
+ html_with_code_blocks = self.__wrap_marked_sections_in_code_blocks(
453
+ result.value, start_marker, end_marker
454
+ )
455
+
456
+ # Step 4: Convert HTML to markdown
457
+ content = markdownify(html_with_code_blocks, heading_style="ATX")
458
+
459
+ # Step 5: Post-process markdown (for image transcripts, etc.)
460
+ return self.__postprocess_original_md(content)
@@ -149,6 +149,8 @@ class LLMNode(BaseTool):
149
149
 
150
150
  output_msgs = {"messages": new_messages}
151
151
  if self.output_variables:
152
+ if self.output_variables[0] == 'messages':
153
+ return output_msgs
152
154
  output_msgs[self.output_variables[0]] = current_completion.content if current_completion else None
153
155
 
154
156
  return output_msgs
@@ -113,6 +113,10 @@ def get_tools(tools_list, alita, llm, store: Optional[BaseStore] = None, *args,
113
113
  elif tool_type in AVAILABLE_TOOLS and 'get_tools' in AVAILABLE_TOOLS[tool_type]:
114
114
  try:
115
115
  get_tools_func = AVAILABLE_TOOLS[tool_type]['get_tools']
116
+ if tool['settings'].get('pgvector_configuration'):
117
+ # Set collection schema to toolkit_id and put it to pgvector configuration
118
+ # to propagate it to the all toolkits level from single place
119
+ tool['settings']['pgvector_configuration']['collection_schema'] = str(tool['id'])
116
120
  tools.extend(get_tools_func(tool))
117
121
 
118
122
  except Exception as e:
@@ -110,7 +110,7 @@ class BaseIndexerToolkit(VectorStoreWrapperBase):
110
110
  def __init__(self, **kwargs):
111
111
  conn = kwargs.get('connection_string', None)
112
112
  connection_string = conn.get_secret_value() if isinstance(conn, SecretStr) else conn
113
- collection_name = kwargs.get('collection_name')
113
+ collection_name = kwargs.get('collection_schema')
114
114
 
115
115
  if 'vectorstore_type' not in kwargs:
116
116
  kwargs['vectorstore_type'] = 'PGVector'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.395
3
+ Version: 0.3.397
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "alita_sdk"
7
- version = "0.3.395"
7
+ version = "0.3.397"
8
8
  description = "SDK for building langchain agents using resources from Alita"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -1,148 +0,0 @@
1
- import re
2
- from io import BytesIO
3
-
4
- import mammoth.images
5
- import pytesseract
6
- from PIL import Image
7
- from langchain_core.document_loaders import BaseLoader
8
- from langchain_core.documents import Document
9
- from mammoth import convert_to_html
10
- from markdownify import markdownify
11
-
12
- from alita_sdk.tools.chunkers.sematic.markdown_chunker import markdown_by_headers_chunker
13
- from .utils import perform_llm_prediction_for_image_bytes
14
-
15
-
16
- class AlitaDocxMammothLoader(BaseLoader):
17
- """
18
- Loader for Docx files using Mammoth to convert to HTML, with image handling,
19
- and then Markdownify to convert HTML to markdown.
20
- """
21
- def __init__(self, **kwargs):
22
- """
23
- Initializes AlitaDocxMammothLoader.
24
-
25
- Args:
26
- **kwargs: Keyword arguments, including:
27
- file_path (str): Path to the Docx file. Required.
28
- llm (LLM, optional): Language model for processing images.
29
- prompt (str, optional): Prompt for the language model.
30
- Raises:
31
- ValueError: If the 'path' parameter is not provided.
32
- """
33
- self.path = kwargs.get('file_path')
34
- self.file_content = kwargs.get('file_content')
35
- self.file_name = kwargs.get('file_name')
36
- self.extract_images = kwargs.get('extract_images')
37
- self.llm = kwargs.get("llm")
38
- self.prompt = kwargs.get("prompt")
39
- self.max_tokens = kwargs.get('max_tokens', 512)
40
-
41
- def __handle_image(self, image) -> dict:
42
- """
43
- Handles image processing within the Docx file.
44
-
45
- Uses LLM for image captioning if available, otherwise falls back to Tesseract OCR,
46
- and defaults to base64 encoding if both fail.
47
-
48
- Args:
49
- image (mammoth.images.Image): Image object from Mammoth.
50
-
51
- Returns:
52
- dict: Dictionary containing the 'src' attribute for the HTML <img> tag.
53
- """
54
- output = {}
55
- try:
56
- if self.llm:
57
- # Use LLM for image understanding
58
- with image.open() as image_bytes:
59
- result = perform_llm_prediction_for_image_bytes(image_bytes, self.llm, self.prompt)
60
- output['src'] = result # LLM image transcript in src
61
- return output
62
- else:
63
- # Use Tesseract OCR if LLM is not available
64
- with image.open() as image_bytes:
65
- img = Image.open(image_bytes)
66
- output['src'] = pytesseract.image_to_string(image=img) # Tesseract transcript in src
67
- return output
68
- except Exception as e:
69
- # Fallback to default image handling for any exceptions during image processing
70
- # This ensures robustness against various image format issues, OCR failures,
71
- # or LLM invocation problems. It prevents the loader from crashing due to
72
- # a single image processing failure and provides a default image representation.
73
- return self.__default_image_handler(image)
74
-
75
- def __default_image_handler(self, image) -> dict:
76
- """
77
- Default image handler: encodes image to base64 data URL.
78
-
79
- Args:
80
- image (mammoth.images.Image): Image object from Mammoth.
81
-
82
- Returns:
83
- dict: Dictionary with base64 encoded 'src' for HTML <img> tag.
84
- """
85
- return {"src": "Transcript is not available"}
86
-
87
-
88
- def __postprocess_original_md(self, original_md: str) -> str:
89
- # Pattern to match placeholders like[image_1_1.png] or similar
90
- pattern = re.compile(r'!\[([^\]]*)\]\(([^)]*)(\s\"([^"]*)\")?\)')
91
-
92
- def replace_placeholder(match):
93
- transcript = match.group(2)
94
- # Return a markdown formatted transcript section.
95
- return f"\n**Image Transcript:**\n{transcript}\n"
96
-
97
- new_md = pattern.sub(replace_placeholder, original_md)
98
- return new_md
99
-
100
- def load(self):
101
- """
102
- Loads and converts the Docx file to markdown format.
103
-
104
- Returns:
105
- List[Document]: A list containing a Documents with the markdown content
106
- and metadata including the source file path.
107
- """
108
- result_content = self.get_content()
109
- return list(markdown_by_headers_chunker(iter([Document(page_content=result_content, metadata={'source': str(self.path)})]), config={'max_tokens':self.max_tokens}))
110
-
111
- def get_content(self):
112
- """
113
- Extracts and converts the content of the Docx file to markdown format.
114
-
115
- Handles both file paths and in-memory file content.
116
-
117
- Returns:
118
- str: The markdown content extracted from the Docx file.
119
- """
120
- if self.path:
121
- # If path is provided, read from file system
122
- with open(self.path, 'rb') as docx_file:
123
- return self._convert_docx_to_markdown(docx_file)
124
- elif self.file_content and self.file_name:
125
- # If file_content and file_name are provided, read from memory
126
- docx_file = BytesIO(self.file_content)
127
- return self._convert_docx_to_markdown(docx_file)
128
- else:
129
- raise ValueError("Either 'path' or 'file_content' and 'file_name' must be provided.")
130
-
131
- def _convert_docx_to_markdown(self, docx_file):
132
- """
133
- Converts the content of a Docx file to markdown format.
134
-
135
- Args:
136
- docx_file (BinaryIO): The Docx file object.
137
-
138
- Returns:
139
- str: The markdown content extracted from the Docx file.
140
- """
141
- if self.extract_images:
142
- # Extract images using the provided image handler
143
- result = convert_to_html(docx_file, convert_image=mammoth.images.img_element(self.__handle_image))
144
- else:
145
- # Ignore images
146
- result = convert_to_html(docx_file, convert_image=lambda image: "")
147
- content = markdownify(result.value, heading_style="ATX")
148
- return self.__postprocess_original_md(content)
File without changes
File without changes