alita-sdk 0.3.373__tar.gz → 0.3.374__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.373 → alita_sdk-0.3.374}/PKG-INFO +1 -1
  2. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/clients/artifact.py +1 -1
  3. alita_sdk-0.3.374/alita_sdk/runtime/clients/sandbox_client.py +365 -0
  4. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/assistant.py +4 -2
  5. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/langraph_agent.py +12 -0
  6. alita_sdk-0.3.374/alita_sdk/runtime/tools/function.py +138 -0
  7. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/sandbox.py +16 -18
  8. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk.egg-info/PKG-INFO +1 -1
  9. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk.egg-info/SOURCES.txt +1 -0
  10. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/pyproject.toml +1 -1
  11. alita_sdk-0.3.373/alita_sdk/runtime/tools/function.py +0 -67
  12. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/LICENSE +0 -0
  13. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/README.md +0 -0
  14. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/__init__.py +0 -0
  15. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/community/__init__.py +0 -0
  16. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/community/utils.py +0 -0
  17. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/__init__.py +0 -0
  18. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/ado.py +0 -0
  19. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/azure_search.py +0 -0
  20. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/bigquery.py +0 -0
  21. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/bitbucket.py +0 -0
  22. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/browser.py +0 -0
  23. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/carrier.py +0 -0
  24. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/confluence.py +0 -0
  25. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/delta_lake.py +0 -0
  26. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/embedding.py +0 -0
  27. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/figma.py +0 -0
  28. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/github.py +0 -0
  29. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/gitlab.py +0 -0
  30. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/google_places.py +0 -0
  31. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/jira.py +0 -0
  32. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/pgvector.py +0 -0
  33. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/postman.py +0 -0
  34. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/qtest.py +0 -0
  35. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/rally.py +0 -0
  36. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/report_portal.py +0 -0
  37. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/salesforce.py +0 -0
  38. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/service_now.py +0 -0
  39. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/sharepoint.py +0 -0
  40. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/slack.py +0 -0
  41. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/sonar.py +0 -0
  42. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/sql.py +0 -0
  43. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/testio.py +0 -0
  44. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/testrail.py +0 -0
  45. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/xray.py +0 -0
  46. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/zephyr.py +0 -0
  47. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/zephyr_enterprise.py +0 -0
  48. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/configurations/zephyr_essential.py +0 -0
  49. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/__init__.py +0 -0
  50. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/clients/__init__.py +0 -0
  51. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/clients/client.py +0 -0
  52. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/clients/datasource.py +0 -0
  53. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/clients/prompt.py +0 -0
  54. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/__init__.py +0 -0
  55. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
  56. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
  57. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
  58. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/constants.py +0 -0
  59. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
  60. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
  61. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
  62. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
  63. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
  64. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
  65. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
  66. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
  67. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaJSONLoader.py +0 -0
  68. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
  69. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaMarkdownLoader.py +0 -0
  70. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaPDFLoader.py +0 -0
  71. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaPowerPointLoader.py +0 -0
  72. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaPythonLoader.py +0 -0
  73. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
  74. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
  75. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/AlitaTextLoader.py +0 -0
  76. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/ImageParser.py +0 -0
  77. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
  78. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
  79. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
  80. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/indexer.py +0 -0
  81. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
  82. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
  83. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
  84. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
  85. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
  86. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
  87. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
  88. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
  89. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
  90. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
  91. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/store_manager.py +0 -0
  92. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
  93. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
  94. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
  95. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
  96. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
  97. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
  98. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/tools/git.py +0 -0
  99. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/tools/log.py +0 -0
  100. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
  101. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/tools/state.py +0 -0
  102. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
  103. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
  104. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/langchain/utils.py +0 -0
  105. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/llms/__init__.py +0 -0
  106. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/llms/preloaded.py +0 -0
  107. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/toolkits/__init__.py +0 -0
  108. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/toolkits/application.py +0 -0
  109. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/toolkits/artifact.py +0 -0
  110. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/toolkits/configurations.py +0 -0
  111. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/toolkits/datasource.py +0 -0
  112. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/toolkits/prompt.py +0 -0
  113. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
  114. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/toolkits/tools.py +0 -0
  115. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
  116. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/__init__.py +0 -0
  117. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/agent.py +0 -0
  118. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/application.py +0 -0
  119. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/artifact.py +0 -0
  120. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/datasource.py +0 -0
  121. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/echo.py +0 -0
  122. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/graph.py +0 -0
  123. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/image_generation.py +0 -0
  124. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
  125. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/llm.py +0 -0
  126. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/loop.py +0 -0
  127. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/loop_output.py +0 -0
  128. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/mcp_server_tool.py +0 -0
  129. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
  130. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/prompt.py +0 -0
  131. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/router.py +0 -0
  132. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/tool.py +0 -0
  133. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/vectorstore.py +0 -0
  134. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/tools/vectorstore_base.py +0 -0
  135. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
  136. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/utils/__init__.py +0 -0
  137. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/utils/constants.py +0 -0
  138. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/utils/evaluate.py +0 -0
  139. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/utils/logging.py +0 -0
  140. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
  141. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/utils/streamlit.py +0 -0
  142. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/utils/toolkit_runtime.py +0 -0
  143. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/utils/toolkit_utils.py +0 -0
  144. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/runtime/utils/utils.py +0 -0
  145. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/__init__.py +0 -0
  146. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/ado/__init__.py +0 -0
  147. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/ado/repos/__init__.py +0 -0
  148. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
  149. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/ado/test_plan/__init__.py +0 -0
  150. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +0 -0
  151. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/ado/utils.py +0 -0
  152. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/ado/wiki/__init__.py +0 -0
  153. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
  154. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/ado/work_item/__init__.py +0 -0
  155. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/ado/work_item/ado_wrapper.py +0 -0
  156. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
  157. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
  158. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/aws/__init__.py +0 -0
  159. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/aws/delta_lake/__init__.py +0 -0
  160. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/aws/delta_lake/api_wrapper.py +0 -0
  161. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/aws/delta_lake/schemas.py +0 -0
  162. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/aws/delta_lake/tool.py +0 -0
  163. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/azure_ai/__init__.py +0 -0
  164. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
  165. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
  166. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/base/__init__.py +0 -0
  167. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/base/tool.py +0 -0
  168. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/base_indexer_toolkit.py +0 -0
  169. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/bitbucket/__init__.py +0 -0
  170. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
  171. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
  172. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +0 -0
  173. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/browser/__init__.py +0 -0
  174. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/browser/crawler.py +0 -0
  175. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
  176. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/browser/google_search_rag.py +0 -0
  177. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/browser/utils.py +0 -0
  178. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/browser/wiki.py +0 -0
  179. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/__init__.py +0 -0
  180. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/api_wrapper.py +0 -0
  181. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
  182. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/backend_tests_tool.py +0 -0
  183. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
  184. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/carrier_sdk.py +0 -0
  185. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
  186. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -0
  187. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
  188. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
  189. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -0
  190. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
  191. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/tools.py +0 -0
  192. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
  193. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
  194. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/carrier/utils.py +0 -0
  195. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/__init__.py +0 -0
  196. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/__init__.py +0 -0
  197. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
  198. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/constants.py +0 -0
  199. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
  200. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
  201. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
  202. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
  203. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
  204. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
  205. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
  206. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
  207. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
  208. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
  209. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
  210. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
  211. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
  212. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
  213. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
  214. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/models.py +0 -0
  215. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/sematic/__init__.py +0 -0
  216. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
  217. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/sematic/json_chunker.py +0 -0
  218. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
  219. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
  220. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
  221. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/chunkers/utils.py +0 -0
  222. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/cloud/__init__.py +0 -0
  223. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
  224. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
  225. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
  226. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
  227. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
  228. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
  229. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
  230. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
  231. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/code/__init__.py +0 -0
  232. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/code/linter/__init__.py +0 -0
  233. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
  234. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
  235. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/code/sonar/__init__.py +0 -0
  236. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
  237. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/code_indexer_toolkit.py +0 -0
  238. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/confluence/__init__.py +0 -0
  239. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/confluence/api_wrapper.py +0 -0
  240. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/confluence/loader.py +0 -0
  241. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/confluence/utils.py +0 -0
  242. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
  243. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
  244. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/elastic/__init__.py +0 -0
  245. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
  246. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/elitea_base.py +0 -0
  247. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/figma/__init__.py +0 -0
  248. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/figma/api_wrapper.py +0 -0
  249. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/github/__init__.py +0 -0
  250. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/github/api_wrapper.py +0 -0
  251. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/github/github_client.py +0 -0
  252. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
  253. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/github/schemas.py +0 -0
  254. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/github/tool.py +0 -0
  255. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/github/tool_prompts.py +0 -0
  256. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/gitlab/__init__.py +0 -0
  257. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/gitlab/api_wrapper.py +0 -0
  258. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/gitlab/tools.py +0 -0
  259. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/gitlab/utils.py +0 -0
  260. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
  261. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
  262. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/gmail/__init__.py +0 -0
  263. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
  264. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/gmail/utils.py +0 -0
  265. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/google/__init__.py +0 -0
  266. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/google/bigquery/__init__.py +0 -0
  267. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/google/bigquery/api_wrapper.py +0 -0
  268. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/google/bigquery/schemas.py +0 -0
  269. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/google/bigquery/tool.py +0 -0
  270. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/google_places/__init__.py +0 -0
  271. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
  272. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/jira/__init__.py +0 -0
  273. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/jira/api_wrapper.py +0 -0
  274. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/keycloak/__init__.py +0 -0
  275. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
  276. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/llm/__init__.py +0 -0
  277. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/llm/img_utils.py +0 -0
  278. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/llm/llm_utils.py +0 -0
  279. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/localgit/__init__.py +0 -0
  280. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/localgit/local_git.py +0 -0
  281. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/localgit/tool.py +0 -0
  282. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/memory/__init__.py +0 -0
  283. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/non_code_indexer_toolkit.py +0 -0
  284. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/ocr/__init__.py +0 -0
  285. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
  286. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/ocr/text_detection.py +0 -0
  287. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/openapi/__init__.py +0 -0
  288. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/__init__.py +0 -0
  289. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
  290. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
  291. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
  292. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
  293. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
  294. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
  295. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
  296. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
  297. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
  298. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
  299. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
  300. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
  301. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
  302. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
  303. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
  304. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
  305. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
  306. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
  307. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/postman/__init__.py +0 -0
  308. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/postman/api_wrapper.py +0 -0
  309. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/postman/postman_analysis.py +0 -0
  310. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pptx/__init__.py +0 -0
  311. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
  312. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/qtest/__init__.py +0 -0
  313. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/qtest/api_wrapper.py +0 -0
  314. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/qtest/tool.py +0 -0
  315. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/rally/__init__.py +0 -0
  316. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/rally/api_wrapper.py +0 -0
  317. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/report_portal/__init__.py +0 -0
  318. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
  319. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
  320. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/salesforce/__init__.py +0 -0
  321. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
  322. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/salesforce/model.py +0 -0
  323. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/servicenow/__init__.py +0 -0
  324. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
  325. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
  326. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/sharepoint/__init__.py +0 -0
  327. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/sharepoint/api_wrapper.py +0 -0
  328. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
  329. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/sharepoint/utils.py +0 -0
  330. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/slack/__init__.py +0 -0
  331. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/slack/api_wrapper.py +0 -0
  332. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/sql/__init__.py +0 -0
  333. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/sql/api_wrapper.py +0 -0
  334. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/sql/models.py +0 -0
  335. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/testio/__init__.py +0 -0
  336. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/testio/api_wrapper.py +0 -0
  337. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/testrail/__init__.py +0 -0
  338. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
  339. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/utils/__init__.py +0 -0
  340. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/utils/available_tools_decorator.py +0 -0
  341. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/utils/content_parser.py +0 -0
  342. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/vector_adapters/VectorStoreAdapter.py +0 -0
  343. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/vector_adapters/__init__.py +0 -0
  344. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/xray/__init__.py +0 -0
  345. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/xray/api_wrapper.py +0 -0
  346. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/yagmail/__init__.py +0 -0
  347. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
  348. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
  349. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr/__init__.py +0 -0
  350. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
  351. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr/rest_client.py +0 -0
  352. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
  353. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
  354. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
  355. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr_essential/__init__.py +0 -0
  356. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr_essential/api_wrapper.py +0 -0
  357. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr_essential/client.py +0 -0
  358. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
  359. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
  360. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr_squad/__init__.py +0 -0
  361. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -0
  362. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +0 -0
  363. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk.egg-info/dependency_links.txt +0 -0
  364. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk.egg-info/requires.txt +0 -0
  365. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/alita_sdk.egg-info/top_level.txt +0 -0
  366. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/setup.cfg +0 -0
  367. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/tests/test_ado_analysis.py +0 -0
  368. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/tests/test_github_analysis.py +0 -0
  369. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/tests/test_gitlab_analysis.py +0 -0
  370. {alita_sdk-0.3.373 → alita_sdk-0.3.374}/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.373
3
+ Version: 0.3.374
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 @@ from json import dumps
4
4
  import chardet
5
5
  import logging
6
6
 
7
- from alita_sdk.tools.utils.content_parser import parse_file_content
7
+ from ...tools.utils.content_parser import parse_file_content
8
8
 
9
9
  logger = logging.getLogger(__name__)
10
10
 
@@ -0,0 +1,365 @@
1
+ import logging
2
+ from typing import Dict, Optional
3
+ from urllib.parse import quote
4
+
5
+ import requests
6
+ from typing import Any
7
+ from json import dumps
8
+ import chardet
9
+
10
+ logger = logging.getLogger(__name__)
11
+
12
+
13
+ class ApiDetailsRequestError(Exception):
14
+ ...
15
+
16
+
17
+ class SandboxArtifact:
18
+ def __init__(self, client: Any, bucket_name: str):
19
+ self.client = client
20
+ self.bucket_name = bucket_name
21
+ if not self.client.bucket_exists(bucket_name):
22
+ self.client.create_bucket(bucket_name)
23
+
24
+ def create(self, artifact_name: str, artifact_data: Any, bucket_name: str = None):
25
+ try:
26
+ if not bucket_name:
27
+ bucket_name = self.bucket_name
28
+ return dumps(self.client.create_artifact(bucket_name, artifact_name, artifact_data))
29
+ except Exception as e:
30
+ logger.error(f'Error: {e}')
31
+ return f'Error: {e}'
32
+
33
+ def get(self,
34
+ artifact_name: str,
35
+ bucket_name: str = None,
36
+ is_capture_image: bool = False,
37
+ page_number: int = None,
38
+ sheet_name: str = None,
39
+ excel_by_sheets: bool = False,
40
+ llm=None):
41
+ if not bucket_name:
42
+ bucket_name = self.bucket_name
43
+ data = self.client.download_artifact(bucket_name, artifact_name)
44
+ if len(data) == 0:
45
+ # empty file might be created
46
+ return ''
47
+ if isinstance(data, dict) and data['error']:
48
+ return f'{data['error']}. {data['content'] if data['content'] else ''}'
49
+ detected = chardet.detect(data)
50
+ return data
51
+ # TODO: add proper handling for binary files (images, pdf, etc.) for sandbox
52
+ # if detected['encoding'] is not None:
53
+ # try:
54
+ # return data.decode(detected['encoding'])
55
+ # except Exception:
56
+ # logger.error('Error while default encoding')
57
+ # return parse_file_content(file_name=artifact_name,
58
+ # file_content=data,
59
+ # is_capture_image=is_capture_image,
60
+ # page_number=page_number,
61
+ # sheet_name=sheet_name,
62
+ # excel_by_sheets=excel_by_sheets,
63
+ # llm=llm)
64
+ # else:
65
+ # return parse_file_content(file_name=artifact_name,
66
+ # file_content=data,
67
+ # is_capture_image=is_capture_image,
68
+ # page_number=page_number,
69
+ # sheet_name=sheet_name,
70
+ # excel_by_sheets=excel_by_sheets,
71
+ # llm=llm)
72
+
73
+ def delete(self, artifact_name: str, bucket_name=None):
74
+ if not bucket_name:
75
+ bucket_name = self.bucket_name
76
+ self.client.delete_artifact(bucket_name, artifact_name)
77
+
78
+ def list(self, bucket_name: str = None, return_as_string=True) -> str | dict:
79
+ if not bucket_name:
80
+ bucket_name = self.bucket_name
81
+ artifacts = self.client.list_artifacts(bucket_name)
82
+ return str(artifacts) if return_as_string else artifacts
83
+
84
+ def append(self, artifact_name: str, additional_data: Any, bucket_name: str = None):
85
+ if not bucket_name:
86
+ bucket_name = self.bucket_name
87
+ data = self.get(artifact_name, bucket_name)
88
+ if data == 'Could not detect encoding':
89
+ return data
90
+ data += f'{additional_data}' if len(data) > 0 else additional_data
91
+ self.client.create_artifact(bucket_name, artifact_name, data)
92
+ return 'Data appended successfully'
93
+
94
+ def overwrite(self, artifact_name: str, new_data: Any, bucket_name: str = None):
95
+ if not bucket_name:
96
+ bucket_name = self.bucket_name
97
+ return self.create(artifact_name, new_data, bucket_name)
98
+
99
+ def get_content_bytes(self,
100
+ artifact_name: str,
101
+ bucket_name: str = None):
102
+ if not bucket_name:
103
+ bucket_name = self.bucket_name
104
+ return self.client.download_artifact(bucket_name, artifact_name)
105
+
106
+
107
+ class SandboxClient:
108
+ def __init__(self,
109
+ base_url: str,
110
+ project_id: int,
111
+ auth_token: str,
112
+ api_extra_headers: Optional[dict] = None,
113
+ configurations: Optional[list] = None,
114
+ **kwargs):
115
+
116
+ self.base_url = base_url.rstrip('/')
117
+ self.api_path = '/api/v1'
118
+ self.llm_path = '/llm/v1'
119
+ self.project_id = project_id
120
+ self.auth_token = auth_token
121
+ self.headers = {
122
+ 'Authorization': f'Bearer {auth_token}',
123
+ 'X-SECRET': kwargs.get('XSECRET', 'secret')
124
+ }
125
+ if api_extra_headers is not None:
126
+ self.headers.update(api_extra_headers)
127
+ self.predict_url = f'{self.base_url}{self.api_path}/prompt_lib/predict/prompt_lib/{self.project_id}'
128
+ self.prompt_versions = f'{self.base_url}{self.api_path}/prompt_lib/version/prompt_lib/{self.project_id}'
129
+ self.prompts = f'{self.base_url}{self.api_path}/prompt_lib/prompt/prompt_lib/{self.project_id}'
130
+ self.datasources = f'{self.base_url}{self.api_path}/datasources/datasource/prompt_lib/{self.project_id}'
131
+ self.datasources_predict = f'{self.base_url}{self.api_path}/datasources/predict/prompt_lib/{self.project_id}'
132
+ self.datasources_search = f'{self.base_url}{self.api_path}/datasources/search/prompt_lib/{self.project_id}'
133
+ self.app = f'{self.base_url}{self.api_path}/applications/application/prompt_lib/{self.project_id}'
134
+ self.mcp_tools_list = f'{self.base_url}{self.api_path}/mcp_sse/tools_list/{self.project_id}'
135
+ self.mcp_tools_call = f'{self.base_url}{self.api_path}/mcp_sse/tools_call/{self.project_id}'
136
+ self.application_versions = f'{self.base_url}{self.api_path}/applications/version/prompt_lib/{self.project_id}'
137
+ self.list_apps_url = f'{self.base_url}{self.api_path}/applications/applications/prompt_lib/{self.project_id}'
138
+ self.integration_details = f'{self.base_url}{self.api_path}/integrations/integration/{self.project_id}'
139
+ self.secrets_url = f'{self.base_url}{self.api_path}/secrets/secret/{self.project_id}'
140
+ self.artifacts_url = f'{self.base_url}{self.api_path}/artifacts/artifacts/default/{self.project_id}'
141
+ self.artifact_url = f'{self.base_url}{self.api_path}/artifacts/artifact/default/{self.project_id}'
142
+ self.bucket_url = f'{self.base_url}{self.api_path}/artifacts/buckets/{self.project_id}'
143
+ self.configurations_url = f'{self.base_url}{self.api_path}/integrations/integrations/default/{self.project_id}?section=configurations&unsecret=true'
144
+ self.ai_section_url = f'{self.base_url}{self.api_path}/integrations/integrations/default/{self.project_id}?section=ai'
145
+ self.image_generation_url = f'{self.base_url}{self.llm_path}/images/generations'
146
+ self.configurations: list = configurations or []
147
+ self.model_timeout = kwargs.get('model_timeout', 120)
148
+ self.model_image_generation = kwargs.get('model_image_generation')
149
+
150
+ def get_mcp_toolkits(self):
151
+ if user_id := self._get_real_user_id():
152
+ url = f'{self.mcp_tools_list}/{user_id}'
153
+ data = requests.get(url, headers=self.headers, verify=False).json()
154
+ return data
155
+ else:
156
+ return []
157
+
158
+ def mcp_tool_call(self, params: dict[str, Any]):
159
+ if user_id := self._get_real_user_id():
160
+ url = f'{self.mcp_tools_call}/{user_id}'
161
+ #
162
+ # This loop iterates over each key-value pair in the arguments dictionary,
163
+ # and if a value is a Pydantic object, it replaces it with its dictionary representation using .dict().
164
+ for arg_name, arg_value in params.get('params', {}).get('arguments', {}).items():
165
+ if isinstance(arg_value, list):
166
+ params['params']['arguments'][arg_name] = [
167
+ item.dict() if hasattr(item, 'dict') and callable(item.dict) else item
168
+ for item in arg_value
169
+ ]
170
+ elif hasattr(arg_value, 'dict') and callable(arg_value.dict):
171
+ params['params']['arguments'][arg_name] = arg_value.dict()
172
+ #
173
+ response = requests.post(url, headers=self.headers, json=params, verify=False)
174
+ try:
175
+ return response.json()
176
+ except (ValueError, TypeError):
177
+ return response.text
178
+ else:
179
+ return f'Error: Could not determine user ID for MCP tool call'
180
+
181
+ def get_app_details(self, application_id: int):
182
+ url = f'{self.app}/{application_id}'
183
+ data = requests.get(url, headers=self.headers, verify=False).json()
184
+ return data
185
+
186
+ def get_list_of_apps(self):
187
+ apps = []
188
+ limit = 10
189
+ offset = 0
190
+ total_count = None
191
+
192
+ while total_count is None or offset < total_count:
193
+ params = {'offset': offset, 'limit': limit}
194
+ resp = requests.get(self.list_apps_url, headers=self.headers, params=params, verify=False)
195
+
196
+ if resp.ok:
197
+ data = resp.json()
198
+ total_count = data.get('total')
199
+ apps.extend([{'name': app['name'], 'id': app['id']} for app in data.get('rows', [])])
200
+ offset += limit
201
+ else:
202
+ break
203
+
204
+ return apps
205
+
206
+ def fetch_available_configurations(self) -> list:
207
+ resp = requests.get(self.configurations_url, headers=self.headers, verify=False)
208
+ if resp.ok:
209
+ return resp.json()
210
+ return []
211
+
212
+ def all_models_and_integrations(self):
213
+ resp = requests.get(self.ai_section_url, headers=self.headers, verify=False)
214
+ if resp.ok:
215
+ return resp.json()
216
+ return []
217
+
218
+ def generate_image(self,
219
+ prompt: str,
220
+ n: int = 1,
221
+ size: str = 'auto',
222
+ quality: str = 'auto',
223
+ response_format: str = 'b64_json',
224
+ style: Optional[str] = None) -> dict:
225
+
226
+ if not self.model_image_generation:
227
+ raise ValueError('Image generation model is not configured for this client')
228
+
229
+ image_generation_data = {
230
+ 'prompt': prompt,
231
+ 'model': self.model_image_generation,
232
+ 'n': n,
233
+ 'response_format': response_format,
234
+ }
235
+
236
+ # Only add optional parameters if they have meaningful values
237
+ if size and size.lower() != 'auto':
238
+ image_generation_data['size'] = size
239
+
240
+ if quality and quality.lower() != 'auto':
241
+ image_generation_data['quality'] = quality
242
+
243
+ if style:
244
+ image_generation_data['style'] = style
245
+
246
+ # Standard headers for image generation
247
+ image_headers = self.headers.copy()
248
+ image_headers.update({
249
+ 'Content-Type': 'application/json',
250
+ })
251
+
252
+ logger.info(f'Generating image with model: {self.model_image_generation}, prompt: {prompt[:50]}...')
253
+
254
+ try:
255
+ response = requests.post(
256
+ self.image_generation_url,
257
+ headers=image_headers,
258
+ json=image_generation_data,
259
+ verify=False,
260
+ timeout=self.model_timeout
261
+ )
262
+ response.raise_for_status()
263
+ return response.json()
264
+
265
+ except requests.exceptions.HTTPError as e:
266
+ logger.error(f'Image generation failed: {e.response.status_code} - {e.response.text}')
267
+ raise
268
+ except requests.exceptions.RequestException as e:
269
+ logger.error(f'Image generation request failed: {e}')
270
+ raise
271
+
272
+ def get_app_version_details(self, application_id: int, application_version_id: int) -> dict:
273
+ url = f'{self.application_versions}/{application_id}/{application_version_id}'
274
+ if self.configurations:
275
+ configs = self.configurations
276
+ else:
277
+ configs = self.fetch_available_configurations()
278
+
279
+ resp = requests.patch(url, headers=self.headers, verify=False, json={'configurations': configs})
280
+ if resp.ok:
281
+ return resp.json()
282
+ logger.error(f'Failed to fetch application version details: {resp.status_code} - {resp.text}.'
283
+ f' Application ID: {application_id}, Version ID: {application_version_id}')
284
+ raise ApiDetailsRequestError(
285
+ f'Failed to fetch application version details for {application_id}/{application_version_id}.')
286
+
287
+ def get_integration_details(self, integration_id: str, format_for_model: bool = False):
288
+ url = f'{self.integration_details}/{integration_id}'
289
+ data = requests.get(url, headers=self.headers, verify=False).json()
290
+ return data
291
+
292
+ def unsecret(self, secret_name: str):
293
+ url = f'{self.secrets_url}/{secret_name}'
294
+ data = requests.get(url, headers=self.headers, verify=False).json()
295
+ logger.info(f'Unsecret response: {data}')
296
+ return data.get('value', None)
297
+
298
+ def artifact(self, bucket_name):
299
+ return SandboxArtifact(self, bucket_name)
300
+
301
+ def _process_requst(self, data: requests.Response) -> Dict[str, str]:
302
+ if data.status_code == 403:
303
+ return {'error': 'You are not authorized to access this resource'}
304
+ elif data.status_code == 404:
305
+ return {'error': 'Resource not found'}
306
+ elif data.status_code != 200:
307
+ return {
308
+ 'error': 'An error occurred while fetching the resource',
309
+ 'content': data.text
310
+ }
311
+ else:
312
+ return data.json()
313
+
314
+ def bucket_exists(self, bucket_name):
315
+ try:
316
+ resp = self._process_requst(
317
+ requests.get(f'{self.bucket_url}', headers=self.headers, verify=False)
318
+ )
319
+ for each in resp.get('rows', []):
320
+ if each['name'] == bucket_name:
321
+ return True
322
+ return False
323
+ except:
324
+ return False
325
+
326
+ def create_bucket(self, bucket_name, expiration_measure='months', expiration_value=1):
327
+ post_data = {
328
+ 'name': bucket_name,
329
+ 'expiration_measure': expiration_measure,
330
+ 'expiration_value': expiration_value
331
+ }
332
+ resp = requests.post(f'{self.bucket_url}', headers=self.headers, json=post_data, verify=False)
333
+ return self._process_requst(resp)
334
+
335
+ def list_artifacts(self, bucket_name: str):
336
+ # Ensure bucket name is lowercase as required by the API
337
+ url = f'{self.artifacts_url}/{bucket_name.lower()}'
338
+ data = requests.get(url, headers=self.headers, verify=False)
339
+ return self._process_requst(data)
340
+
341
+ def create_artifact(self, bucket_name, artifact_name, artifact_data):
342
+ url = f'{self.artifacts_url}/{bucket_name.lower()}'
343
+ data = requests.post(url, headers=self.headers, files={
344
+ 'file': (artifact_name, artifact_data)
345
+ }, verify=False)
346
+ return self._process_requst(data)
347
+
348
+ def download_artifact(self, bucket_name, artifact_name):
349
+ url = f'{self.artifact_url}/{bucket_name.lower()}/{artifact_name}'
350
+ data = requests.get(url, headers=self.headers, verify=False)
351
+ if data.status_code == 403:
352
+ return {'error': 'You are not authorized to access this resource'}
353
+ elif data.status_code == 404:
354
+ return {'error': 'Resource not found'}
355
+ elif data.status_code != 200:
356
+ return {
357
+ 'error': 'An error occurred while fetching the resource',
358
+ 'content': data.content
359
+ }
360
+ return data.content
361
+
362
+ def delete_artifact(self, bucket_name, artifact_name):
363
+ url = f'{self.artifact_url}/{bucket_name}'
364
+ data = requests.delete(url, headers=self.headers, verify=False, params={'filename': quote(artifact_name)})
365
+ return self._process_requst(data)
@@ -314,7 +314,8 @@ class Assistant:
314
314
  memory=checkpointer,
315
315
  store=self.store,
316
316
  debug=False,
317
- for_subgraph=False
317
+ for_subgraph=False,
318
+ alita_client=self.alita_client
318
319
  )
319
320
 
320
321
  return agent
@@ -328,7 +329,8 @@ class Assistant:
328
329
  #
329
330
  agent = create_graph(
330
331
  client=self.client, tools=self.tools,
331
- yaml_schema=self.prompt, memory=memory
332
+ yaml_schema=self.prompt, memory=memory,
333
+ alita_client=self.alita_client
332
334
  )
333
335
  #
334
336
  return agent
@@ -553,6 +553,18 @@ def create_graph(
553
553
  input_variables=node.get('input', ['messages']),
554
554
  structured_output=node.get('structured_output', False)))
555
555
  break
556
+ elif node_type == 'code':
557
+ from ..tools.sandbox import create_sandbox_tool
558
+ sandbox_tool = create_sandbox_tool(stateful=False, allow_net=True)
559
+ code = node.get('code', "return 'Code block is empty'")
560
+ lg_builder.add_node(node_id, FunctionTool(
561
+ tool=sandbox_tool, name=node['id'], return_type='dict',
562
+ output_variables=node.get('output', []),
563
+ input_mapping={'code': {'type': 'fixed', 'value': code}},
564
+ input_variables=node.get('input', ['messages']),
565
+ structured_output=node.get('structured_output', False),
566
+ alita_client=kwargs.get('alita_client', None)
567
+ ))
556
568
  elif node_type == 'llm':
557
569
  output_vars = node.get('output', [])
558
570
  output_vars_dict = {
@@ -0,0 +1,138 @@
1
+ import json
2
+ import logging
3
+ from copy import deepcopy
4
+ from json import dumps
5
+
6
+ from langchain_core.callbacks import dispatch_custom_event
7
+ from langchain_core.messages import ToolCall
8
+ from langchain_core.runnables import RunnableConfig
9
+ from langchain_core.tools import BaseTool, ToolException
10
+ from typing import Any, Optional, Union, Annotated
11
+ from langchain_core.utils.function_calling import convert_to_openai_tool
12
+ from pydantic import ValidationError
13
+
14
+ from ..langchain.utils import propagate_the_input_mapping
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+
19
+ class FunctionTool(BaseTool):
20
+ name: str = 'FunctionalTool'
21
+ description: str = 'This is direct call node for tools'
22
+ tool: BaseTool = None
23
+ return_type: str = "str"
24
+ input_variables: Optional[list[str]] = None
25
+ input_mapping: Optional[dict[str, dict]] = None
26
+ output_variables: Optional[list[str]] = None
27
+ structured_output: Optional[bool] = False
28
+ alita_client: Optional[Any] = None
29
+
30
+ def _prepare_pyodide_input(self, state: Union[str, dict, ToolCall]) -> str:
31
+ """Prepare input for PyodideSandboxTool by injecting state into the code block."""
32
+ # add state into the code block here since it might be changed during the execution of the code
33
+ state_copy = deepcopy(state)
34
+ # pickle state
35
+ import pickle
36
+
37
+ del state_copy['messages'] # remove messages to avoid issues with pickling without langchain-core
38
+ serialized_state = pickle.dumps(state_copy)
39
+ # inject state into the code block as alita_state variable
40
+ pyodide_predata = f"""import pickle\nalita_state = pickle.loads({serialized_state})\n"""
41
+ # add classes related to sandbox client
42
+ # read the content of alita_sdk/runtime/cliens/sandbox_client.py
43
+ try:
44
+ with open('alita_sdk/runtime/clients/sandbox_client.py', 'r') as f:
45
+ sandbox_client_code = f.read()
46
+ pyodide_predata += f"\n{sandbox_client_code}\n"
47
+ pyodide_predata += (f"alita_client = SandboxClient(base_url='{self.alita_client.base_url}',"
48
+ f"project_id={self.alita_client.project_id},"
49
+ f"auth_token='{self.alita_client.auth_token}')")
50
+ except FileNotFoundError:
51
+ logger.error("sandbox_client.py not found. Ensure 'alita_sdk/runtime/clients/sandbox_client.py' exists.")
52
+ return pyodide_predata
53
+
54
+ def _handle_pyodide_output(self, tool_result: Any) -> dict:
55
+ """Handle output processing for PyodideSandboxTool results."""
56
+ tool_result_converted = {}
57
+
58
+ if self.output_variables:
59
+ for var in self.output_variables:
60
+ if isinstance(tool_result, dict) and var in tool_result:
61
+ tool_result_converted[var] = tool_result[var]
62
+ else:
63
+ # handler in case user points to a var that is not in the output of the tool
64
+ tool_result_converted[var] = tool_result.get('result',
65
+ tool_result.get('error') if tool_result.get('error')
66
+ else 'Execution result is missing')
67
+ else:
68
+ tool_result_converted.update({"messages": [{"role": "assistant", "content": dumps(tool_result)}]})
69
+
70
+ if self.structured_output:
71
+ # execute code tool and update state variables
72
+ try:
73
+ result_value = tool_result.get('result', {})
74
+ tool_result_converted.update(result_value if isinstance(result_value, dict)
75
+ else json.loads(result_value))
76
+ except json.JSONDecodeError:
77
+ logger.error(f"JSONDecodeError: {tool_result}")
78
+
79
+ return tool_result_converted
80
+
81
+ def _is_pyodide_tool(self) -> bool:
82
+ """Check if the current tool is a PyodideSandboxTool."""
83
+ return self.tool.name.lower() == 'pyodide_sandbox'
84
+
85
+ def invoke(
86
+ self,
87
+ state: Union[str, dict, ToolCall],
88
+ config: Optional[RunnableConfig] = None,
89
+ **kwargs: Any,
90
+ ) -> Any:
91
+ params = convert_to_openai_tool(self.tool).get(
92
+ 'function', {'parameters': {}}).get(
93
+ 'parameters', {'properties': {}}).get('properties', {})
94
+
95
+ func_args = propagate_the_input_mapping(input_mapping=self.input_mapping, input_variables=self.input_variables,
96
+ state=state)
97
+
98
+ # special handler for PyodideSandboxTool
99
+ if self._is_pyodide_tool():
100
+ code = func_args['code']
101
+ func_args['code'] = f"{self._prepare_pyodide_input(state)}\n{code}"
102
+ try:
103
+ tool_result = self.tool.invoke(func_args, config, **kwargs)
104
+ dispatch_custom_event(
105
+ "on_function_tool_node", {
106
+ "input_mapping": self.input_mapping,
107
+ "input_variables": self.input_variables,
108
+ "state": state,
109
+ "tool_result": tool_result,
110
+ }, config=config
111
+ )
112
+ logger.info(f"ToolNode response: {tool_result}")
113
+
114
+ # handler for PyodideSandboxTool
115
+ if self._is_pyodide_tool():
116
+ return self._handle_pyodide_output(tool_result)
117
+
118
+ if not self.output_variables:
119
+ return {"messages": [{"role": "assistant", "content": dumps(tool_result)}]}
120
+ else:
121
+ if self.output_variables[0] == "messages":
122
+ return {
123
+ "messages": [{
124
+ "role": "assistant",
125
+ "content": dumps(tool_result) if not isinstance(tool_result, ToolException) else str(
126
+ tool_result)
127
+ }]
128
+ }
129
+ else:
130
+ return { self.output_variables[0]: tool_result }
131
+ except ValidationError:
132
+ return {"messages": [
133
+ {"role": "assistant", "content": f"""Tool input to the {self.tool.name} with value {func_args} raised ValidationError.
134
+ \n\nTool schema is {dumps(params)} \n\nand the input to LLM was
135
+ {func_args}"""}]}
136
+
137
+ def _run(self, *args, **kwargs):
138
+ return self.invoke(**kwargs)
@@ -1,10 +1,10 @@
1
- import logging
2
1
  import asyncio
2
+ import logging
3
3
  import subprocess
4
4
  import os
5
- from typing import Any, Type, Optional, Union, Dict
5
+ from typing import Any, Type, Optional, Dict
6
6
  from langchain_core.tools import BaseTool
7
- from pydantic import BaseModel, Field, create_model
7
+ from pydantic import BaseModel, create_model
8
8
  from pydantic.fields import FieldInfo
9
9
 
10
10
  logger = logging.getLogger(__name__)
@@ -190,30 +190,28 @@ class PyodideSandboxTool(BaseTool):
190
190
  self.session_bytes = result.session_bytes
191
191
  self.session_metadata = result.session_metadata
192
192
 
193
- # Format the output
194
- output_parts = []
195
-
193
+ result_dict = {}
194
+
196
195
  if result.result is not None:
197
- output_parts.append(f"Result: {result.result}")
198
-
196
+ result_dict["result"] = result.result
197
+
199
198
  if result.stdout:
200
- output_parts.append(f"Output: {result.stdout}")
201
-
199
+ result_dict["output"] = result.stdout
200
+
202
201
  if result.stderr:
203
- output_parts.append(f"Error: {result.stderr}")
204
-
202
+ result_dict["error"] = result.stderr
203
+
205
204
  if result.status == 'error':
206
- output_parts.append(f"Execution failed with status: {result.status}")
207
-
205
+ result_dict["status"] = "Execution failed"
206
+
208
207
  execution_info = f"Execution time: {result.execution_time:.2f}s"
209
208
  if result.session_metadata and 'packages' in result.session_metadata:
210
209
  packages = result.session_metadata.get('packages', [])
211
210
  if packages:
212
211
  execution_info += f", Packages: {', '.join(packages)}"
213
-
214
- output_parts.append(execution_info)
215
-
216
- return "\n".join(output_parts) if output_parts else "Code executed successfully (no output)"
212
+
213
+ result_dict["execution_info"] = execution_info
214
+ return result_dict
217
215
 
218
216
  except Exception as e:
219
217
  logger.error(f"Error executing code in sandbox: {e}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.373
3
+ Version: 0.3.374
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
@@ -47,6 +47,7 @@ alita_sdk/runtime/clients/artifact.py
47
47
  alita_sdk/runtime/clients/client.py
48
48
  alita_sdk/runtime/clients/datasource.py
49
49
  alita_sdk/runtime/clients/prompt.py
50
+ alita_sdk/runtime/clients/sandbox_client.py
50
51
  alita_sdk/runtime/langchain/__init__.py
51
52
  alita_sdk/runtime/langchain/assistant.py
52
53
  alita_sdk/runtime/langchain/chat_message_template.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "alita_sdk"
7
- version = "0.3.373"
7
+ version = "0.3.374"
8
8
  description = "SDK for building langchain agents using resources from Alita"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"