alita-sdk 0.3.347__tar.gz → 0.3.348rc1__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 (367) hide show
  1. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/PKG-INFO +2 -1
  2. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/clients/artifact.py +11 -1
  3. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/clients/client.py +2 -0
  4. alita_sdk-0.3.348rc1/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +222 -0
  5. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/langraph_agent.py +12 -2
  6. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/artifact.py +46 -3
  7. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/vectorstore.py +1 -1
  8. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/vectorstore_base.py +1 -1
  9. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/base_indexer_toolkit.py +2 -1
  10. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/api_wrapper.py +7 -25
  11. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk.egg-info/PKG-INFO +2 -1
  12. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk.egg-info/requires.txt +1 -0
  13. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk.egg-info/top_level.txt +1 -0
  14. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/pyproject.toml +2 -2
  15. alita_sdk-0.3.347/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -136
  16. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/LICENSE +0 -0
  17. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/README.md +0 -0
  18. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/__init__.py +0 -0
  19. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/community/__init__.py +0 -0
  20. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/community/utils.py +0 -0
  21. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/__init__.py +0 -0
  22. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/ado.py +0 -0
  23. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/azure_search.py +0 -0
  24. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/bigquery.py +0 -0
  25. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/bitbucket.py +0 -0
  26. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/browser.py +0 -0
  27. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/carrier.py +0 -0
  28. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/confluence.py +0 -0
  29. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/delta_lake.py +0 -0
  30. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/embedding.py +0 -0
  31. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/figma.py +0 -0
  32. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/github.py +0 -0
  33. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/gitlab.py +0 -0
  34. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/google_places.py +0 -0
  35. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/jira.py +0 -0
  36. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/pgvector.py +0 -0
  37. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/postman.py +0 -0
  38. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/qtest.py +0 -0
  39. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/rally.py +0 -0
  40. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/report_portal.py +0 -0
  41. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/salesforce.py +0 -0
  42. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/service_now.py +0 -0
  43. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/sharepoint.py +0 -0
  44. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/slack.py +0 -0
  45. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/sonar.py +0 -0
  46. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/sql.py +0 -0
  47. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/testio.py +0 -0
  48. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/testrail.py +0 -0
  49. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/xray.py +0 -0
  50. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/zephyr.py +0 -0
  51. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/zephyr_enterprise.py +0 -0
  52. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/configurations/zephyr_essential.py +0 -0
  53. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/__init__.py +0 -0
  54. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/clients/__init__.py +0 -0
  55. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/clients/datasource.py +0 -0
  56. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/clients/prompt.py +0 -0
  57. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/__init__.py +0 -0
  58. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
  59. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
  60. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/assistant.py +0 -0
  61. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
  62. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/constants.py +0 -0
  63. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
  64. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
  65. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
  66. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
  67. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
  68. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
  69. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
  70. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaJSONLoader.py +0 -0
  71. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
  72. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaMarkdownLoader.py +0 -0
  73. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaPDFLoader.py +0 -0
  74. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaPowerPointLoader.py +0 -0
  75. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaPythonLoader.py +0 -0
  76. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
  77. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
  78. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/AlitaTextLoader.py +0 -0
  79. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/ImageParser.py +0 -0
  80. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
  81. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
  82. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
  83. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/indexer.py +0 -0
  84. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
  85. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
  86. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
  87. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
  88. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
  89. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
  90. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
  91. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
  92. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
  93. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
  94. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/store_manager.py +0 -0
  95. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
  96. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
  97. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
  98. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
  99. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
  100. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
  101. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/tools/git.py +0 -0
  102. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/tools/log.py +0 -0
  103. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
  104. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/tools/state.py +0 -0
  105. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
  106. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
  107. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/langchain/utils.py +0 -0
  108. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/llms/__init__.py +0 -0
  109. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/llms/preloaded.py +0 -0
  110. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/toolkits/__init__.py +0 -0
  111. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/toolkits/application.py +0 -0
  112. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/toolkits/artifact.py +0 -0
  113. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/toolkits/configurations.py +0 -0
  114. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/toolkits/datasource.py +0 -0
  115. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/toolkits/prompt.py +0 -0
  116. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
  117. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/toolkits/tools.py +0 -0
  118. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
  119. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/__init__.py +0 -0
  120. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/agent.py +0 -0
  121. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/application.py +0 -0
  122. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/datasource.py +0 -0
  123. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/echo.py +0 -0
  124. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/function.py +0 -0
  125. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/graph.py +0 -0
  126. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
  127. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/llm.py +0 -0
  128. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/loop.py +0 -0
  129. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/loop_output.py +0 -0
  130. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/mcp_server_tool.py +0 -0
  131. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
  132. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/prompt.py +0 -0
  133. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/router.py +0 -0
  134. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/sandbox.py +0 -0
  135. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/tools/tool.py +0 -0
  136. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
  137. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/utils/__init__.py +0 -0
  138. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/utils/constants.py +0 -0
  139. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/utils/evaluate.py +0 -0
  140. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/utils/logging.py +0 -0
  141. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
  142. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/utils/streamlit.py +0 -0
  143. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/utils/toolkit_runtime.py +0 -0
  144. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/utils/toolkit_utils.py +0 -0
  145. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/runtime/utils/utils.py +0 -0
  146. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/__init__.py +0 -0
  147. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/ado/__init__.py +0 -0
  148. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/ado/repos/__init__.py +0 -0
  149. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
  150. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/ado/test_plan/__init__.py +0 -0
  151. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +0 -0
  152. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/ado/utils.py +0 -0
  153. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/ado/wiki/__init__.py +0 -0
  154. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
  155. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/ado/work_item/__init__.py +0 -0
  156. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/ado/work_item/ado_wrapper.py +0 -0
  157. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
  158. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
  159. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/aws/__init__.py +0 -0
  160. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/aws/delta_lake/__init__.py +0 -0
  161. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/aws/delta_lake/api_wrapper.py +0 -0
  162. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/aws/delta_lake/schemas.py +0 -0
  163. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/aws/delta_lake/tool.py +0 -0
  164. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/azure_ai/__init__.py +0 -0
  165. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
  166. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
  167. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/base/__init__.py +0 -0
  168. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/base/tool.py +0 -0
  169. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/bitbucket/__init__.py +0 -0
  170. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
  171. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
  172. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +0 -0
  173. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/browser/__init__.py +0 -0
  174. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/browser/crawler.py +0 -0
  175. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
  176. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/browser/google_search_rag.py +0 -0
  177. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/browser/utils.py +0 -0
  178. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/browser/wiki.py +0 -0
  179. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/__init__.py +0 -0
  180. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/api_wrapper.py +0 -0
  181. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
  182. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/backend_tests_tool.py +0 -0
  183. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
  184. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/carrier_sdk.py +0 -0
  185. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
  186. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -0
  187. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
  188. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
  189. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -0
  190. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
  191. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/tools.py +0 -0
  192. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
  193. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
  194. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/carrier/utils.py +0 -0
  195. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/__init__.py +0 -0
  196. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/__init__.py +0 -0
  197. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
  198. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/constants.py +0 -0
  199. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
  200. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
  201. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
  202. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
  203. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
  204. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
  205. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
  206. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
  207. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
  208. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
  209. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
  210. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
  211. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
  212. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
  213. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
  214. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/models.py +0 -0
  215. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/sematic/__init__.py +0 -0
  216. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
  217. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/sematic/json_chunker.py +0 -0
  218. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
  219. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
  220. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
  221. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/chunkers/utils.py +0 -0
  222. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/cloud/__init__.py +0 -0
  223. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
  224. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
  225. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
  226. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
  227. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
  228. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
  229. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
  230. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
  231. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/code/__init__.py +0 -0
  232. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/code/linter/__init__.py +0 -0
  233. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
  234. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
  235. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/code/sonar/__init__.py +0 -0
  236. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
  237. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/confluence/__init__.py +0 -0
  238. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/confluence/api_wrapper.py +0 -0
  239. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/confluence/loader.py +0 -0
  240. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/confluence/utils.py +0 -0
  241. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
  242. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
  243. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/elastic/__init__.py +0 -0
  244. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
  245. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/elitea_base.py +0 -0
  246. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/figma/__init__.py +0 -0
  247. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/figma/api_wrapper.py +0 -0
  248. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/github/__init__.py +0 -0
  249. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/github/api_wrapper.py +0 -0
  250. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/github/github_client.py +0 -0
  251. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
  252. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/github/schemas.py +0 -0
  253. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/github/tool.py +0 -0
  254. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/github/tool_prompts.py +0 -0
  255. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/gitlab/__init__.py +0 -0
  256. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/gitlab/api_wrapper.py +0 -0
  257. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/gitlab/tools.py +0 -0
  258. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/gitlab/utils.py +0 -0
  259. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
  260. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
  261. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/gmail/__init__.py +0 -0
  262. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
  263. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/gmail/utils.py +0 -0
  264. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/google/__init__.py +0 -0
  265. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/google/bigquery/__init__.py +0 -0
  266. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/google/bigquery/api_wrapper.py +0 -0
  267. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/google/bigquery/schemas.py +0 -0
  268. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/google/bigquery/tool.py +0 -0
  269. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/google_places/__init__.py +0 -0
  270. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
  271. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/jira/__init__.py +0 -0
  272. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/jira/api_wrapper.py +0 -0
  273. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/keycloak/__init__.py +0 -0
  274. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
  275. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/llm/__init__.py +0 -0
  276. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/llm/img_utils.py +0 -0
  277. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/llm/llm_utils.py +0 -0
  278. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/localgit/__init__.py +0 -0
  279. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/localgit/local_git.py +0 -0
  280. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/localgit/tool.py +0 -0
  281. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/memory/__init__.py +0 -0
  282. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/non_code_indexer_toolkit.py +0 -0
  283. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/ocr/__init__.py +0 -0
  284. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
  285. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/ocr/text_detection.py +0 -0
  286. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/openapi/__init__.py +0 -0
  287. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/__init__.py +0 -0
  288. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
  289. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
  290. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
  291. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
  292. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
  293. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
  294. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
  295. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
  296. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
  297. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
  298. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
  299. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
  300. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
  301. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
  302. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
  303. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
  304. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
  305. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/postman/__init__.py +0 -0
  306. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/postman/api_wrapper.py +0 -0
  307. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/postman/postman_analysis.py +0 -0
  308. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pptx/__init__.py +0 -0
  309. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
  310. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/qtest/__init__.py +0 -0
  311. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/qtest/api_wrapper.py +0 -0
  312. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/qtest/tool.py +0 -0
  313. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/rally/__init__.py +0 -0
  314. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/rally/api_wrapper.py +0 -0
  315. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/report_portal/__init__.py +0 -0
  316. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
  317. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
  318. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/salesforce/__init__.py +0 -0
  319. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
  320. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/salesforce/model.py +0 -0
  321. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/servicenow/__init__.py +0 -0
  322. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
  323. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
  324. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/sharepoint/__init__.py +0 -0
  325. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/sharepoint/api_wrapper.py +0 -0
  326. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
  327. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/sharepoint/utils.py +0 -0
  328. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/slack/__init__.py +0 -0
  329. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/slack/api_wrapper.py +0 -0
  330. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/sql/__init__.py +0 -0
  331. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/sql/api_wrapper.py +0 -0
  332. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/sql/models.py +0 -0
  333. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/testio/__init__.py +0 -0
  334. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/testio/api_wrapper.py +0 -0
  335. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/testrail/__init__.py +0 -0
  336. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
  337. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/utils/__init__.py +0 -0
  338. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/utils/available_tools_decorator.py +0 -0
  339. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/utils/content_parser.py +0 -0
  340. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/vector_adapters/VectorStoreAdapter.py +0 -0
  341. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/vector_adapters/__init__.py +0 -0
  342. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/xray/__init__.py +0 -0
  343. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/xray/api_wrapper.py +0 -0
  344. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/yagmail/__init__.py +0 -0
  345. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
  346. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
  347. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr/__init__.py +0 -0
  348. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
  349. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr/rest_client.py +0 -0
  350. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
  351. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
  352. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
  353. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr_essential/__init__.py +0 -0
  354. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr_essential/api_wrapper.py +0 -0
  355. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr_essential/client.py +0 -0
  356. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
  357. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
  358. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr_squad/__init__.py +0 -0
  359. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -0
  360. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +0 -0
  361. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk.egg-info/SOURCES.txt +0 -0
  362. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/alita_sdk.egg-info/dependency_links.txt +0 -0
  363. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/setup.cfg +0 -0
  364. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/tests/test_ado_analysis.py +0 -0
  365. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/tests/test_github_analysis.py +0 -0
  366. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/tests/test_gitlab_analysis.py +0 -0
  367. {alita_sdk-0.3.347 → alita_sdk-0.3.348rc1}/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.347
3
+ Version: 0.3.348rc1
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
@@ -128,6 +128,7 @@ Requires-Dist: textract-py3==2.1.1; extra == "tools"
128
128
  Requires-Dist: slack_sdk==3.35.0; extra == "tools"
129
129
  Requires-Dist: deltalake==1.0.2; extra == "tools"
130
130
  Requires-Dist: google_cloud_bigquery==3.34.0; extra == "tools"
131
+ Requires-Dist: python-calamine==0.5.3; extra == "tools"
131
132
  Provides-Extra: community
132
133
  Requires-Dist: retry-extended==0.2.3; extra == "community"
133
134
  Requires-Dist: pyobjtojson==0.3; extra == "community"
@@ -42,7 +42,17 @@ class Artifact:
42
42
  return f"{data['error']}. {data['content'] if data['content'] else ''}"
43
43
  detected = chardet.detect(data)
44
44
  if detected['encoding'] is not None:
45
- return data.decode(detected['encoding'])
45
+ try:
46
+ return data.decode(detected['encoding'])
47
+ except Exception:
48
+ logger.error("Error while default encoding")
49
+ return parse_file_content(file_name=artifact_name,
50
+ file_content=data,
51
+ is_capture_image=is_capture_image,
52
+ page_number=page_number,
53
+ sheet_name=sheet_name,
54
+ excel_by_sheets=excel_by_sheets,
55
+ llm=llm)
46
56
  else:
47
57
  return parse_file_content(file_name=artifact_name,
48
58
  file_content=data,
@@ -69,6 +69,7 @@ class AlitaClient:
69
69
  self.configurations_url = f'{self.base_url}{self.api_path}/integrations/integrations/default/{self.project_id}?section=configurations&unsecret=true'
70
70
  self.ai_section_url = f'{self.base_url}{self.api_path}/integrations/integrations/default/{self.project_id}?section=ai'
71
71
  self.configurations: list = configurations or []
72
+ self.model_timeout = kwargs.get('model_timeout', 120)
72
73
 
73
74
  def get_mcp_toolkits(self):
74
75
  if user_id := self._get_real_user_id():
@@ -184,6 +185,7 @@ class AlitaClient:
184
185
  model=embedding_model,
185
186
  api_key=self.auth_token,
186
187
  openai_organization=str(self.project_id),
188
+ request_timeout=self.model_timeout
187
189
  )
188
190
 
189
191
  def get_llm(self, model_name: str, model_config: dict) -> ChatOpenAI:
@@ -0,0 +1,222 @@
1
+ # Copyright (c) 2023 Artem Rozumenko
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ import io
15
+ import os
16
+ from typing import Iterator
17
+ import pandas as pd
18
+ from json import loads
19
+
20
+ from openpyxl import load_workbook
21
+ from xlrd import open_workbook
22
+ from langchain_core.documents import Document
23
+ from .AlitaTableLoader import AlitaTableLoader
24
+
25
+ cell_delimiter = " | "
26
+
27
+ class AlitaExcelLoader(AlitaTableLoader):
28
+ excel_by_sheets: bool = False
29
+ sheet_name: str = None
30
+ return_type: str = 'str'
31
+ file_name: str = None
32
+
33
+ def __init__(self, **kwargs):
34
+ if not kwargs.get('file_path'):
35
+ file_content = kwargs.get('file_content')
36
+ if file_content:
37
+ self.file_name = kwargs.get('file_name')
38
+ kwargs['file_path'] = io.BytesIO(file_content)
39
+ else:
40
+ self.file_name = kwargs.get('file_path')
41
+ super().__init__(**kwargs)
42
+ self.excel_by_sheets = kwargs.get('excel_by_sheets')
43
+ self.return_type = kwargs.get('return_type')
44
+ self.sheet_name = kwargs.get('sheet_name')
45
+
46
+ def get_content(self):
47
+ try:
48
+ # Determine file extension
49
+ file_extension = os.path.splitext(self.file_name)[-1].lower()
50
+
51
+ if file_extension == '.xlsx':
52
+ # Use openpyxl for .xlsx files
53
+ return self._read_xlsx()
54
+ elif file_extension == '.xls':
55
+ # Use xlrd for .xls files
56
+ return self._read_xls()
57
+ else:
58
+ raise ValueError(f"Unsupported file format: {file_extension}")
59
+ except Exception as e:
60
+ return f"Error reading Excel file: {e}"
61
+
62
+ def _read_xlsx(self):
63
+ """
64
+ Reads .xlsx files using openpyxl.
65
+ """
66
+ workbook = load_workbook(self.file_path, data_only=True) # `data_only=True` ensures we get cell values, not formulas
67
+
68
+ if self.sheet_name:
69
+ # If a specific sheet name is provided, parse only that sheet
70
+ if self.sheet_name in workbook.sheetnames:
71
+ sheet_content = self.parse_sheet(workbook[self.sheet_name])
72
+ return sheet_content
73
+ else:
74
+ raise ValueError(f"Sheet '{self.sheet_name}' does not exist in the workbook.")
75
+ elif self.excel_by_sheets:
76
+ # Parse each sheet individually and return as a dictionary
77
+ result = {}
78
+ for sheet_name in workbook.sheetnames:
79
+ sheet_content = self.parse_sheet(workbook[sheet_name])
80
+ result[sheet_name] = sheet_content
81
+ return result
82
+ else:
83
+ # Combine all sheets into a single string result
84
+ result = []
85
+ for sheet_name in workbook.sheetnames:
86
+ sheet_content = self.parse_sheet(workbook[sheet_name])
87
+ result.append(f"====== Sheet name: {sheet_name} ======\n{sheet_content}")
88
+ return "\n\n".join(result)
89
+
90
+ def _read_xls(self):
91
+ """
92
+ Reads .xls files using xlrd.
93
+ """
94
+ workbook = open_workbook(filename=self.file_name, file_contents=self.file_content)
95
+
96
+ if self.sheet_name:
97
+ # If a specific sheet name is provided, parse only that sheet
98
+ if self.sheet_name in workbook.sheet_names():
99
+ sheet = workbook.sheet_by_name(self.sheet_name)
100
+ sheet_content = self.parse_sheet_xls(sheet)
101
+ return sheet_content
102
+ else:
103
+ raise ValueError(f"Sheet '{self.sheet_name}' does not exist in the workbook.")
104
+ elif self.excel_by_sheets:
105
+ # Parse each sheet individually and return as a dictionary
106
+ result = {}
107
+ for sheet_name in workbook.sheet_names():
108
+ sheet = workbook.sheet_by_name(sheet_name)
109
+ sheet_content = self.parse_sheet_xls(sheet)
110
+ result[sheet_name] = sheet_content
111
+ return result
112
+ else:
113
+ # Combine all sheets into a single string result
114
+ result = []
115
+ for sheet_name in workbook.sheet_names():
116
+ sheet = workbook.sheet_by_name(sheet_name)
117
+ sheet_content = self.parse_sheet_xls(sheet)
118
+ result.append(f"====== Sheet name: {sheet_name} ======\n{sheet_content}")
119
+ return "\n\n".join(result)
120
+
121
+ def parse_sheet(self, sheet):
122
+ """
123
+ Parses a single .xlsx sheet, extracting text and hyperlinks, and formats them.
124
+ """
125
+ sheet_content = []
126
+
127
+ for row in sheet.iter_rows():
128
+ row_content = []
129
+ for cell in row:
130
+ if cell.hyperlink:
131
+ # If the cell has a hyperlink, format it as Markdown
132
+ hyperlink = cell.hyperlink.target
133
+ cell_value = cell.value or '' # Use cell value or empty string
134
+ row_content.append(f"[{cell_value}]({hyperlink})")
135
+ else:
136
+ # If no hyperlink, use the cell value (computed value if formula)
137
+ row_content.append(str(cell.value) if cell.value is not None else "")
138
+ # Join the row content into a single line using `|` as the delimiter
139
+ sheet_content.append(cell_delimiter.join(row_content))
140
+
141
+ # Format the sheet content based on the return type
142
+ return self._format_sheet_content(sheet_content)
143
+
144
+ def parse_sheet_xls(self, sheet):
145
+ """
146
+ Parses a single .xls sheet using xlrd, extracting text and hyperlinks, and formats them.
147
+ """
148
+ sheet_content = []
149
+
150
+ # Extract hyperlink map (if available)
151
+ hyperlink_map = getattr(sheet, 'hyperlink_map', {})
152
+
153
+ for row_idx in range(sheet.nrows):
154
+ row_content = []
155
+ for col_idx in range(sheet.ncols):
156
+ cell = sheet.cell(row_idx, col_idx)
157
+ cell_value = cell.value
158
+
159
+ # Check if the cell has a hyperlink
160
+ cell_address = (row_idx, col_idx)
161
+ if cell_address in hyperlink_map:
162
+ hyperlink = hyperlink_map[cell_address].url_or_path
163
+ if cell_value:
164
+ row_content.append(f"[{cell_value}]({hyperlink})")
165
+ else:
166
+ row_content.append(str(cell_value) if cell_value is not None else "")
167
+ # Join the row content into a single line using `|` as the delimiter
168
+ sheet_content.append(cell_delimiter.join(row_content))
169
+
170
+ # Format the sheet content based on the return type
171
+ return self._format_sheet_content(sheet_content)
172
+
173
+ def _format_sheet_content(self, sheet_content):
174
+ """
175
+ Formats the sheet content based on the return type.
176
+ """
177
+ if self.return_type == 'dict':
178
+ # Convert to a list of dictionaries (each row is a dictionary)
179
+ headers = sheet_content[0].split(cell_delimiter) if sheet_content else []
180
+ data_rows = sheet_content[1:] if len(sheet_content) > 1 else []
181
+ return [dict(zip(headers, row.split(cell_delimiter))) for row in data_rows]
182
+ elif self.return_type == 'csv':
183
+ # Return as CSV (newline-separated rows, comma-separated values)
184
+ return "\n".join([",".join(row.split(cell_delimiter)) for row in sheet_content])
185
+ else:
186
+ # Default: Return as plain text (newline-separated rows, pipe-separated values)
187
+ return "\n".join(sheet_content)
188
+
189
+ def load(self) -> list:
190
+ docs = []
191
+ content_per_sheet = self.get_content()
192
+ for sheet_name, content in content_per_sheet.items():
193
+ metadata = {
194
+ "source": f'{self.file_path}:{sheet_name}',
195
+ "sheet_name": sheet_name,
196
+ "file_type": "excel",
197
+ "excel_by_sheets": self.excel_by_sheets,
198
+ "return_type": self.return_type,
199
+ }
200
+ docs.append(Document(page_content=f"Sheet: {sheet_name}\n {str(content)}", metadata=metadata))
201
+ return docs
202
+
203
+ def read(self, lazy: bool = False):
204
+ df = pd.read_excel(self.file_path, sheet_name=None, engine='calamine')
205
+ docs = []
206
+ for key in df.keys():
207
+ if self.raw_content:
208
+ docs.append(df[key].to_string())
209
+ else:
210
+ for record in loads(df[key].to_json(orient='records')):
211
+ docs.append(record)
212
+ return docs
213
+
214
+ def read_lazy(self) -> Iterator[dict]:
215
+ df = pd.read_excel(self.file_path, sheet_name=None, engine='calamine')
216
+ for key in df.keys():
217
+ if self.raw_content:
218
+ yield df[key].to_string()
219
+ else:
220
+ for record in loads(df[key].to_json(orient='records')):
221
+ yield record
222
+ return
@@ -1,4 +1,5 @@
1
1
  import logging
2
+ import re
2
3
  from typing import Union, Any, Optional, Annotated, get_type_hints
3
4
  from uuid import uuid4
4
5
  from typing import Dict
@@ -274,11 +275,20 @@ class StateModifierNode(Runnable):
274
275
  logger.warning(f"Failed to decode base64 value: {e}")
275
276
  return value
276
277
 
278
+ def split_by_words(value, chunk_size=100):
279
+ words = value.split()
280
+ return [" ".join(words[i:i + chunk_size]) for i in range(0, len(words), chunk_size)]
281
+
282
+ def split_by_regex(value, pattern):
283
+ """Splits the provided string using the specified regex pattern."""
284
+ return re.split(pattern, value)
277
285
 
278
286
  env = Environment()
279
287
  env.filters['from_json'] = from_json
280
- env.filters['base64ToString'] = base64_to_string
281
-
288
+ env.filters['base64_to_string'] = base64_to_string
289
+ env.filters['split_by_words'] = split_by_words
290
+ env.filters['split_by_regex'] = split_by_regex
291
+
282
292
  template = env.from_string(self.template)
283
293
  rendered_message = template.render(**input_data)
284
294
  result = {}
@@ -3,6 +3,7 @@ import logging
3
3
  import re
4
4
  from typing import Any, Optional, Generator, List
5
5
 
6
+ from langchain_core.callbacks import dispatch_custom_event
6
7
  from langchain_core.documents import Document
7
8
  from langchain_core.tools import ToolException
8
9
  from pydantic import create_model, Field, model_validator
@@ -30,7 +31,21 @@ class ArtifactWrapper(NonCodeIndexerToolkit):
30
31
  return self.artifact.list(bucket_name, return_as_string)
31
32
 
32
33
  def create_file(self, filename: str, filedata: str, bucket_name = None):
33
- return self.artifact.create(filename, filedata, bucket_name)
34
+ result = self.artifact.create(filename, filedata, bucket_name)
35
+
36
+ # Dispatch custom event for file creation
37
+ dispatch_custom_event("file_modified", {
38
+ "message": f"File '{filename}' created successfully",
39
+ "filename": filename,
40
+ "tool_name": "createFile",
41
+ "toolkit": "artifact",
42
+ "operation_type": "create",
43
+ "meta": {
44
+ "bucket": bucket_name or self.bucket
45
+ }
46
+ })
47
+
48
+ return result
34
49
 
35
50
  def read_file(self,
36
51
  filename: str,
@@ -51,10 +66,38 @@ class ArtifactWrapper(NonCodeIndexerToolkit):
51
66
  return self.artifact.delete(filename, bucket_name)
52
67
 
53
68
  def append_data(self, filename: str, filedata: str, bucket_name = None):
54
- return self.artifact.append(filename, filedata, bucket_name)
69
+ result = self.artifact.append(filename, filedata, bucket_name)
70
+
71
+ # Dispatch custom event for file append
72
+ dispatch_custom_event("file_modified", {
73
+ "message": f"Data appended to file '{filename}' successfully",
74
+ "filename": filename,
75
+ "tool_name": "appendData",
76
+ "toolkit": "artifact",
77
+ "operation_type": "modify",
78
+ "meta": {
79
+ "bucket": bucket_name or self.bucket
80
+ }
81
+ })
82
+
83
+ return result
55
84
 
56
85
  def overwrite_data(self, filename: str, filedata: str, bucket_name = None):
57
- return self.artifact.overwrite(filename, filedata, bucket_name)
86
+ result = self.artifact.overwrite(filename, filedata, bucket_name)
87
+
88
+ # Dispatch custom event for file overwrite
89
+ dispatch_custom_event("file_modified", {
90
+ "message": f"File '{filename}' overwritten successfully",
91
+ "filename": filename,
92
+ "tool_name": "overwriteData",
93
+ "toolkit": "artifact",
94
+ "operation_type": "modify",
95
+ "meta": {
96
+ "bucket": bucket_name or self.bucket
97
+ }
98
+ })
99
+
100
+ return result
58
101
 
59
102
  def create_new_bucket(self, bucket_name: str, expiration_measure = "weeks", expiration_value = 1):
60
103
  return self.artifact.client.create_bucket(bucket_name, expiration_measure, expiration_value)
@@ -137,7 +137,7 @@ class VectorStoreWrapper(BaseToolApiWrapper):
137
137
  embedding_model_params: dict
138
138
  vectorstore_type: str
139
139
  vectorstore_params: dict
140
- max_docs_per_add: int = 100
140
+ max_docs_per_add: int = 20
141
141
  dataset: str = None
142
142
  embedding: Any = None
143
143
  vectorstore: Any = None
@@ -135,7 +135,7 @@ class VectorStoreWrapperBase(BaseToolApiWrapper):
135
135
  embedding_model: Optional[str] = None
136
136
  vectorstore_type: Optional[str] = None
137
137
  vectorstore_params: Optional[dict] = None
138
- max_docs_per_add: int = 100
138
+ max_docs_per_add: int = 20
139
139
  dataset: Optional[str] = None
140
140
  vectorstore: Any = None
141
141
  pg_helper: Any = None
@@ -279,7 +279,8 @@ class BaseIndexerToolkit(VectorStoreWrapperBase):
279
279
  """Cleans the indexed data in the collection."""
280
280
  super()._clean_collection(collection_suffix=collection_suffix)
281
281
  return (f"Collection '{collection_suffix}' has been removed from the vector store.\n"
282
- f"Available collections: {self.list_collections()}")
282
+ f"Available collections: {self.list_collections()}") if collection_suffix \
283
+ else "All collections have been removed from the vector store."
283
284
 
284
285
  def _build_collection_filter(self, filter: dict | str, collection_suffix: str = "") -> dict:
285
286
  """Builds a filter for the collection based on the provided suffix."""
@@ -93,7 +93,7 @@ class PandasWrapper(BaseToolApiWrapper):
93
93
  if file_extension in ['csv', 'txt']:
94
94
  df = pd.read_csv(file_obj)
95
95
  elif file_extension in ['xlsx', 'xls']:
96
- df = pd.read_excel(file_obj)
96
+ df = pd.read_excel(file_obj, engine='calamine')
97
97
  elif file_extension == 'parquet':
98
98
  df = pd.read_parquet(file_obj)
99
99
  elif file_extension == 'json':
@@ -162,35 +162,17 @@ class PandasWrapper(BaseToolApiWrapper):
162
162
  """Analyze and process using query on dataset"""
163
163
  df = self._get_dataframe(filename)
164
164
  code = self.generate_code_with_retries(df, query)
165
- dispatch_custom_event(
166
- name="thinking_step",
167
- data={
168
- "message": f"Executing generated code... \n\n```python\n{code}\n```",
169
- "tool_name": "process_query",
170
- "toolkit": "pandas"
171
- }
172
- )
165
+ self._log_tool_event(tool_name="process_query",
166
+ message=f"Executing generated code... \n\n```python\n{code}\n```")
173
167
  try:
174
168
  result = self.execute_code(df, code)
175
169
  except Exception as e:
176
170
  logger.error(f"Code execution failed: {format_exc()}")
177
- dispatch_custom_event(
178
- name="thinking_step",
179
- data={
180
- "message": f"Code execution failed: {format_exc()}",
181
- "tool_name": "process_query",
182
- "toolkit": "pandas"
183
- }
184
- )
171
+ self._log_tool_event(tool_name="process_query",
172
+ message=f"Executing generated code... \n\n```python\n{code}\n```")
185
173
  raise
186
- dispatch_custom_event(
187
- name="thinking_step",
188
- data={
189
- "message": f"Result of code execution... \n\n```\n{result['result']}\n```",
190
- "tool_name": "process_query",
191
- "toolkit": "pandas"
192
- }
193
- )
174
+ self._log_tool_event(tool_name="process_query",
175
+ message=f"Executing generated code... \n\n```python\n{code}\n```")
194
176
  if result.get("df") is not None:
195
177
  df = result.pop("df")
196
178
  # Not saving dataframe to artifact repo for now
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.347
3
+ Version: 0.3.348rc1
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
@@ -128,6 +128,7 @@ Requires-Dist: textract-py3==2.1.1; extra == "tools"
128
128
  Requires-Dist: slack_sdk==3.35.0; extra == "tools"
129
129
  Requires-Dist: deltalake==1.0.2; extra == "tools"
130
130
  Requires-Dist: google_cloud_bigquery==3.34.0; extra == "tools"
131
+ Requires-Dist: python-calamine==0.5.3; extra == "tools"
131
132
  Provides-Extra: community
132
133
  Requires-Dist: retry-extended==0.2.3; extra == "community"
133
134
  Requires-Dist: pyobjtojson==0.3; extra == "community"
@@ -134,3 +134,4 @@ textract-py3==2.1.1
134
134
  slack_sdk==3.35.0
135
135
  deltalake==1.0.2
136
136
  google_cloud_bigquery==3.34.0
137
+ python-calamine==0.5.3
@@ -1,3 +1,4 @@
1
1
  alita_sdk
2
2
  docs
3
3
  scripts
4
+ src
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "alita_sdk"
7
- version = "0.3.347"
7
+ version = "0.3.348-rc.1"
8
8
  description = "SDK for building langchain agents using resources from Alita"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -33,7 +33,7 @@ email = "ad13box@gmail.com"
33
33
 
34
34
  [project.optional-dependencies]
35
35
  runtime = [ "streamlit>=1.28.0", "langchain_core>=0.3.76,<0.4.0", "langchain>=0.3.22,<0.4.0", "langchain_community>=0.3.7,<0.4.0", "langchain-openai>=0.3.0,<0.4.0", "langchain-anthropic>=0.3.10,<0.4.0", "anthropic>=0.57.0", "langgraph>=0.4.8,<0.5", "langgraph-prebuilt==0.5.2", "langgraph-checkpoint-sqlite~=2.0.0", "langgraph-checkpoint-postgres==2.0.21", "langsmith>=0.3.45", "langchain_chroma>=0.2.2,<0.3.0", "chromadb==0.5.20", "pgvector==0.2.5", "langchain-unstructured~=0.1.6", "langchain-postgres~=0.0.13", "unstructured[local-inference]==0.16.23", "unstructured_pytesseract==0.3.13", "unstructured_inference==0.8.7", "python-pptx==1.0.2", "python-docx==1.1.2", "openpyxl==3.1.2", "pypdf==4.3.1", "pdfminer.six==20240706", "pdf2image==1.16.3", "pikepdf==8.7.1", "docx2txt==0.8", "mammoth==1.9.0", "reportlab==4.2.5", "svglib==1.5.1", "cairocffi==1.7.1", "rlpycairo==0.3.0", "keybert==0.8.3", "sentence-transformers==2.7.0", "gensim==4.3.3", "scipy==1.13.1", "opencv-python==4.11.0.86", "pytesseract==0.3.13", "markdown==3.5.1", "beautifulsoup4==4.12.2", "charset_normalizer==3.3.2", "opentelemetry-exporter-otlp-proto-grpc==1.25.0", "opentelemetry_api==1.25.0", "opentelemetry_instrumentation==0.46b0", "grpcio_status==1.63.0rc1", "protobuf==4.25.7", "langchain-sandbox>=0.0.6",]
36
- tools = [ "dulwich==0.21.6", "paramiko==3.3.1", "pygithub==2.3.0", "python-gitlab==4.5.0", "gitpython==3.1.43", "atlassian-python-api~=4.0.7", "jira==3.8.0", "qtest-swagger-client==0.0.3", "testrail-api==1.13.4", "azure-devops==7.1.0b4", "msrest==0.7.1", "python-graphql-client~=0.4.3", "zephyr-python-api==0.1.0", "pyral==1.6.0", "boto3>=1.37.23", "azure-core==1.30.2", "azure-identity==1.16.0", "azure-keyvault-keys==4.9.0", "azure-keyvault-secrets==4.8.0", "azure-mgmt-core==1.4.0", "azure-mgmt-resource==23.0.1", "azure-mgmt-storage==21.1.0", "azure-storage-blob==12.23.1", "azure-search-documents==11.5.2", "PyMySQL==1.1.1", "psycopg2-binary==2.9.10", "Office365-REST-Python-Client==2.5.14", "pypdf2~=3.0.1", "FigmaPy==2018.1.0", "pandas==2.2.3", "factor_analyzer==0.5.1", "statsmodels==0.14.4", "tabulate==0.9.0", "tree_sitter==0.20.2", "tree-sitter-languages==1.10.2", "astor~=0.8.1", "markdownify~=1.1.0", "requests_openapi==1.0.5", "duckduckgo_search==5.3.0", "playwright>=1.52.0", "google-api-python-client==2.154.0", "wikipedia==1.4.0", "lxml==5.2.2", "pymupdf==1.24.9", "googlemaps==4.10.0", "yagmail==0.15.293", "pysnc==1.1.10", "shortuuid==1.0.13", "yarl==1.17.1", "langmem==0.0.27", "textract-py3==2.1.1", "slack_sdk==3.35.0", "deltalake==1.0.2", "google_cloud_bigquery==3.34.0",]
36
+ tools = [ "dulwich==0.21.6", "paramiko==3.3.1", "pygithub==2.3.0", "python-gitlab==4.5.0", "gitpython==3.1.43", "atlassian-python-api~=4.0.7", "jira==3.8.0", "qtest-swagger-client==0.0.3", "testrail-api==1.13.4", "azure-devops==7.1.0b4", "msrest==0.7.1", "python-graphql-client~=0.4.3", "zephyr-python-api==0.1.0", "pyral==1.6.0", "boto3>=1.37.23", "azure-core==1.30.2", "azure-identity==1.16.0", "azure-keyvault-keys==4.9.0", "azure-keyvault-secrets==4.8.0", "azure-mgmt-core==1.4.0", "azure-mgmt-resource==23.0.1", "azure-mgmt-storage==21.1.0", "azure-storage-blob==12.23.1", "azure-search-documents==11.5.2", "PyMySQL==1.1.1", "psycopg2-binary==2.9.10", "Office365-REST-Python-Client==2.5.14", "pypdf2~=3.0.1", "FigmaPy==2018.1.0", "pandas==2.2.3", "factor_analyzer==0.5.1", "statsmodels==0.14.4", "tabulate==0.9.0", "tree_sitter==0.20.2", "tree-sitter-languages==1.10.2", "astor~=0.8.1", "markdownify~=1.1.0", "requests_openapi==1.0.5", "duckduckgo_search==5.3.0", "playwright>=1.52.0", "google-api-python-client==2.154.0", "wikipedia==1.4.0", "lxml==5.2.2", "pymupdf==1.24.9", "googlemaps==4.10.0", "yagmail==0.15.293", "pysnc==1.1.10", "shortuuid==1.0.13", "yarl==1.17.1", "langmem==0.0.27", "textract-py3==2.1.1", "slack_sdk==3.35.0", "deltalake==1.0.2", "google_cloud_bigquery==3.34.0", "python-calamine==0.5.3"]
37
37
  community = [ "retry-extended==0.2.3", "pyobjtojson==0.3", "elitea-analyse==0.1.2",]
38
38
  all = [ "alita-sdk[runtime]", "alita-sdk[tools]", "alita-sdk[community]",]
39
39
  dev = [ "pytest", "pytest-cov", "black", "flake8", "mypy",]
@@ -1,136 +0,0 @@
1
- # Copyright (c) 2023 Artem Rozumenko
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
- import io
15
- from typing import Iterator
16
- import pandas as pd
17
- from json import loads
18
-
19
- from openpyxl import load_workbook
20
- from langchain_core.documents import Document
21
- from .AlitaTableLoader import AlitaTableLoader
22
-
23
- cell_delimeter = " | "
24
-
25
- class AlitaExcelLoader(AlitaTableLoader):
26
-
27
- excel_by_sheets: bool = False
28
- sheet_name: str = None
29
- return_type: str = 'str'
30
-
31
- def __init__(self, **kwargs):
32
- if not kwargs.get('file_path'):
33
- file_content = kwargs.get('file_content')
34
- if file_content:
35
- kwargs['file_path'] = io.BytesIO(file_content)
36
- super().__init__(**kwargs)
37
- self.excel_by_sheets = kwargs.get('excel_by_sheets')
38
- self.return_type = kwargs.get('return_type')
39
- self.sheet_name = kwargs.get('sheet_name')
40
-
41
- def get_content(self):
42
- try:
43
- # Load the workbook
44
- workbook = load_workbook(self.file_path, data_only=True) # `data_only=True` ensures we get cell values, not formulas
45
-
46
- if self.sheet_name:
47
- # If a specific sheet name is provided, parse only that sheet
48
- if self.sheet_name in workbook.sheetnames:
49
- sheet_content = self.parse_sheet(workbook[self.sheet_name])
50
- return sheet_content
51
- else:
52
- raise ValueError(f"Sheet '{self.sheet_name}' does not exist in the workbook.")
53
- elif self.excel_by_sheets:
54
- # Parse each sheet individually and return as a dictionary
55
- result = {}
56
- for sheet_name in workbook.sheetnames:
57
- sheet_content = self.parse_sheet(workbook[sheet_name])
58
- result[sheet_name] = sheet_content
59
- return result
60
- else:
61
- # Combine all sheets into a single string result
62
- result = []
63
- for sheet_name in workbook.sheetnames:
64
- sheet_content = self.parse_sheet(workbook[sheet_name])
65
- result.append(f"====== Sheet name: {sheet_name} ======\n{sheet_content}")
66
- return "\n\n".join(result)
67
- except Exception as e:
68
- return f"Error reading Excel file: {e}"
69
-
70
- def parse_sheet(self, sheet):
71
- """
72
- Parses a single sheet, extracting text and hyperlinks, and formats them.
73
- """
74
- sheet_content = []
75
-
76
- for row in sheet.iter_rows():
77
- row_content = []
78
- for cell in row:
79
- if cell.hyperlink:
80
- # If the cell has a hyperlink, format it as Markdown
81
- hyperlink = cell.hyperlink.target
82
- cell_value = cell.value or '' # Use cell value or empty string
83
- row_content.append(f"[{cell_value}]({hyperlink})")
84
- else:
85
- # If no hyperlink, use the cell value (computed value if formula)
86
- row_content.append(str(cell.value) if cell.value is not None else "")
87
- # Join the row content into a single line using `|` as the delimiter
88
- sheet_content.append(cell_delimeter.join(row_content))
89
-
90
- # Format the sheet content based on the return type
91
- if self.return_type == 'dict':
92
- # Convert to a list of dictionaries (each row is a dictionary)
93
- headers = sheet_content[0].split(cell_delimeter) if sheet_content else []
94
- data_rows = sheet_content[1:] if len(sheet_content) > 1 else []
95
- return [dict(zip(headers, row.split(cell_delimeter))) for row in data_rows]
96
- elif self.return_type == 'csv':
97
- # Return as CSV (newline-separated rows, comma-separated values)
98
- return "\n".join([",".join(row.split(cell_delimeter)) for row in sheet_content])
99
- else:
100
- # Default: Return as plain text (newline-separated rows, pipe-separated values)
101
- return "\n".join(sheet_content)
102
-
103
- def load(self) -> list:
104
- docs = []
105
- content_per_sheet = self.get_content()
106
- for sheet_name, content in content_per_sheet.items():
107
- metadata = {
108
- "source": f'{self.file_path}:{sheet_name}',
109
- "sheet_name": sheet_name,
110
- "file_type": "excel",
111
- "excel_by_sheets": self.excel_by_sheets,
112
- "return_type": self.return_type,
113
- }
114
- docs.append(Document(page_content=f"Sheet: {sheet_name}\n {str(content)}", metadata=metadata))
115
- return docs
116
-
117
- def read(self, lazy: bool = False):
118
- df = pd.read_excel(self.file_path, sheet_name=None)
119
- docs = []
120
- for key in df.keys():
121
- if self.raw_content:
122
- docs.append(df[key].to_string())
123
- else:
124
- for record in loads(df[key].to_json(orient='records')):
125
- docs.append(record)
126
- return docs
127
-
128
- def read_lazy(self) -> Iterator[dict]:
129
- df = pd.read_excel(self.file_path, sheet_name=None)
130
- for key in df.keys():
131
- if self.raw_content:
132
- yield df[key].to_string()
133
- else:
134
- for record in loads(df[key].to_json(orient='records')):
135
- yield record
136
- return
File without changes
File without changes