alita-sdk 0.3.182__tar.gz → 0.3.184__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/PKG-INFO +2 -1
  2. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/clients/client.py +38 -0
  3. alita_sdk-0.3.184/alita_sdk/runtime/langchain/assistant.py +305 -0
  4. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/langraph_agent.py +65 -8
  5. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/llms/alita.py +1 -1
  6. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/tools.py +48 -0
  7. alita_sdk-0.3.184/alita_sdk/runtime/tools/llm.py +293 -0
  8. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/mcp_server_tool.py +15 -0
  9. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/streamlit.py +2 -1
  10. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/__init__.py +1 -0
  11. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +55 -3
  12. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/work_item/ado_wrapper.py +10 -6
  13. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/api_wrapper.py +3 -0
  14. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/backend_tests_tool.py +101 -7
  15. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/carrier_sdk.py +4 -0
  16. alita_sdk-0.3.184/alita_sdk/tools/slack/__init__.py +57 -0
  17. alita_sdk-0.3.184/alita_sdk/tools/slack/api_wrapper.py +190 -0
  18. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk.egg-info/PKG-INFO +2 -1
  19. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk.egg-info/SOURCES.txt +2 -0
  20. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk.egg-info/requires.txt +1 -0
  21. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/pyproject.toml +2 -2
  22. alita_sdk-0.3.182/alita_sdk/runtime/langchain/assistant.py +0 -171
  23. alita_sdk-0.3.182/alita_sdk/runtime/tools/llm.py +0 -74
  24. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/LICENSE +0 -0
  25. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/README.md +0 -0
  26. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/__init__.py +0 -0
  27. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/__init__.py +0 -0
  28. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/__init__.py +0 -0
  29. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/ado_analyse/__init__.py +0 -0
  30. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/ado_analyse/api_wrapper.py +0 -0
  31. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/github_analyse/__init__.py +0 -0
  32. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/github_analyse/api_wrapper.py +0 -0
  33. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/gitlab_analyse/__init__.py +0 -0
  34. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/gitlab_analyse/api_wrapper.py +0 -0
  35. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/jira_analyse/__init__.py +0 -0
  36. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/jira_analyse/api_wrapper.py +0 -0
  37. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/utils.py +0 -0
  38. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/__init__.py +0 -0
  39. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/clients/__init__.py +0 -0
  40. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/clients/artifact.py +0 -0
  41. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/clients/datasource.py +0 -0
  42. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/clients/prompt.py +0 -0
  43. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/__init__.py +0 -0
  44. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
  45. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
  46. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
  47. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/constants.py +0 -0
  48. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
  49. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
  50. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
  51. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
  52. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
  53. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
  54. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
  55. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
  56. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
  57. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
  58. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
  59. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
  60. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
  61. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
  62. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/indexer.py +0 -0
  63. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
  64. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
  65. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
  66. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
  67. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
  68. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
  69. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
  70. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
  71. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
  72. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
  73. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/store_manager.py +0 -0
  74. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
  75. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
  76. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
  77. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
  78. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
  79. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
  80. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/git.py +0 -0
  81. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/log.py +0 -0
  82. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
  83. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/state.py +0 -0
  84. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
  85. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
  86. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/utils.py +0 -0
  87. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/llms/__init__.py +0 -0
  88. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/llms/preloaded.py +0 -0
  89. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/__init__.py +0 -0
  90. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/application.py +0 -0
  91. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/artifact.py +0 -0
  92. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/datasource.py +0 -0
  93. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/prompt.py +0 -0
  94. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
  95. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
  96. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/__init__.py +0 -0
  97. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/agent.py +0 -0
  98. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/application.py +0 -0
  99. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/artifact.py +0 -0
  100. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/datasource.py +0 -0
  101. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/echo.py +0 -0
  102. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/function.py +0 -0
  103. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
  104. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/loop.py +0 -0
  105. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/loop_output.py +0 -0
  106. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
  107. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/prompt.py +0 -0
  108. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/router.py +0 -0
  109. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/tool.py +0 -0
  110. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/vectorstore.py +0 -0
  111. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
  112. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/__init__.py +0 -0
  113. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/constants.py +0 -0
  114. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/evaluate.py +0 -0
  115. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/logging.py +0 -0
  116. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
  117. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/utils.py +0 -0
  118. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/__init__.py +0 -0
  119. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/repos/__init__.py +0 -0
  120. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
  121. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/test_plan/__init__.py +0 -0
  122. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/utils.py +0 -0
  123. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/wiki/__init__.py +0 -0
  124. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
  125. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/work_item/__init__.py +0 -0
  126. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
  127. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
  128. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/azure_ai/__init__.py +0 -0
  129. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
  130. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
  131. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/base/__init__.py +0 -0
  132. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/base/tool.py +0 -0
  133. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/bitbucket/__init__.py +0 -0
  134. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
  135. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
  136. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +0 -0
  137. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/bitbucket/tools.py +0 -0
  138. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/browser/__init__.py +0 -0
  139. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/browser/crawler.py +0 -0
  140. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
  141. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/browser/google_search_rag.py +0 -0
  142. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/browser/utils.py +0 -0
  143. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/browser/wiki.py +0 -0
  144. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/__init__.py +0 -0
  145. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
  146. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
  147. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
  148. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -0
  149. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
  150. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
  151. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -0
  152. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
  153. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/tools.py +0 -0
  154. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
  155. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
  156. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/utils.py +0 -0
  157. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/__init__.py +0 -0
  158. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/__init__.py +0 -0
  159. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
  160. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/constants.py +0 -0
  161. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
  162. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
  163. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
  164. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
  165. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
  166. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
  167. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
  168. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
  169. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
  170. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
  171. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
  172. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
  173. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
  174. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
  175. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
  176. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/models.py +0 -0
  177. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/sematic/__init__.py +0 -0
  178. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
  179. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
  180. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
  181. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
  182. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/utils.py +0 -0
  183. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/__init__.py +0 -0
  184. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
  185. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
  186. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
  187. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
  188. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
  189. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
  190. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
  191. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
  192. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/code/__init__.py +0 -0
  193. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/code/linter/__init__.py +0 -0
  194. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
  195. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
  196. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/code/sonar/__init__.py +0 -0
  197. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
  198. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/confluence/__init__.py +0 -0
  199. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/confluence/api_wrapper.py +0 -0
  200. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/confluence/loader.py +0 -0
  201. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/confluence/utils.py +0 -0
  202. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
  203. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
  204. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/elastic/__init__.py +0 -0
  205. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
  206. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/elitea_base.py +0 -0
  207. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/figma/__init__.py +0 -0
  208. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/figma/api_wrapper.py +0 -0
  209. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/github/__init__.py +0 -0
  210. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/github/api_wrapper.py +0 -0
  211. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/github/github_client.py +0 -0
  212. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
  213. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/github/schemas.py +0 -0
  214. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/github/tool.py +0 -0
  215. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/github/tool_prompts.py +0 -0
  216. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gitlab/__init__.py +0 -0
  217. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gitlab/api_wrapper.py +0 -0
  218. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gitlab/tools.py +0 -0
  219. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gitlab/utils.py +0 -0
  220. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
  221. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
  222. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gmail/__init__.py +0 -0
  223. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
  224. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gmail/utils.py +0 -0
  225. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/google_places/__init__.py +0 -0
  226. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
  227. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/jira/__init__.py +0 -0
  228. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/jira/api_wrapper.py +0 -0
  229. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/keycloak/__init__.py +0 -0
  230. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
  231. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/llm/__init__.py +0 -0
  232. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/llm/img_utils.py +0 -0
  233. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/llm/llm_utils.py +0 -0
  234. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/localgit/__init__.py +0 -0
  235. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/localgit/local_git.py +0 -0
  236. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/localgit/tool.py +0 -0
  237. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/memory/__init__.py +0 -0
  238. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ocr/__init__.py +0 -0
  239. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
  240. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ocr/text_detection.py +0 -0
  241. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/openapi/__init__.py +0 -0
  242. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/__init__.py +0 -0
  243. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
  244. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
  245. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
  246. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
  247. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
  248. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
  249. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
  250. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
  251. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
  252. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
  253. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
  254. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
  255. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
  256. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
  257. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
  258. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
  259. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
  260. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
  261. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/postman/__init__.py +0 -0
  262. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/postman/api_wrapper.py +0 -0
  263. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/postman/postman_analysis.py +0 -0
  264. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pptx/__init__.py +0 -0
  265. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
  266. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/qtest/__init__.py +0 -0
  267. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/qtest/api_wrapper.py +0 -0
  268. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/qtest/tool.py +0 -0
  269. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/rally/__init__.py +0 -0
  270. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/rally/api_wrapper.py +0 -0
  271. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/report_portal/__init__.py +0 -0
  272. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
  273. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
  274. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/salesforce/__init__.py +0 -0
  275. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
  276. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/salesforce/model.py +0 -0
  277. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/servicenow/__init__.py +0 -0
  278. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
  279. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
  280. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/sharepoint/__init__.py +0 -0
  281. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/sharepoint/api_wrapper.py +0 -0
  282. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
  283. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/sharepoint/utils.py +0 -0
  284. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/sql/__init__.py +0 -0
  285. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/sql/api_wrapper.py +0 -0
  286. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/sql/models.py +0 -0
  287. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/testio/__init__.py +0 -0
  288. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/testio/api_wrapper.py +0 -0
  289. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/testrail/__init__.py +0 -0
  290. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
  291. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/utils/__init__.py +0 -0
  292. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/utils/content_parser.py +0 -0
  293. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/xray/__init__.py +0 -0
  294. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/xray/api_wrapper.py +0 -0
  295. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/yagmail/__init__.py +0 -0
  296. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
  297. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
  298. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr/__init__.py +0 -0
  299. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
  300. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr/rest_client.py +0 -0
  301. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
  302. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
  303. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
  304. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
  305. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
  306. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_squad/__init__.py +0 -0
  307. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -0
  308. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +0 -0
  309. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk.egg-info/dependency_links.txt +0 -0
  310. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk.egg-info/top_level.txt +0 -0
  311. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/setup.cfg +0 -0
  312. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/tests/test_ado_analysis.py +0 -0
  313. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/tests/test_github_analysis.py +0 -0
  314. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/tests/test_gitlab_analysis.py +0 -0
  315. {alita_sdk-0.3.182 → alita_sdk-0.3.184}/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.182
3
+ Version: 0.3.184
4
4
  Summary: SDK for building langchain agents using resources from Alita
5
5
  Author-email: Artem Rozumenko <artyom.rozumenko@gmail.com>, Mikalai Biazruchka <mikalai_biazruchka@epam.com>, Roman Mitusov <roman_mitusov@epam.com>, Ivan Krakhmaliuk <lifedjik@gmail.com>, Artem Dubrovskiy <ad13box@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -124,6 +124,7 @@ Requires-Dist: shortuuid==1.0.13; extra == "tools"
124
124
  Requires-Dist: yarl==1.17.1; extra == "tools"
125
125
  Requires-Dist: langmem==0.0.27; extra == "tools"
126
126
  Requires-Dist: textract-py3==2.1.1; extra == "tools"
127
+ Requires-Dist: slack_sdk==3.35.0; extra == "tools"
127
128
  Provides-Extra: community
128
129
  Requires-Dist: retry-extended==0.2.3; extra == "community"
129
130
  Requires-Dist: pyobjtojson==0.3; extra == "community"
@@ -432,3 +432,41 @@ class AlitaClient:
432
432
  except Exception as e:
433
433
  logger.warning(f"Error: Could not determine user ID for MCP tool: {e}")
434
434
  return None
435
+
436
+ def predict_agent(self, client: Any, instructions: str = "You are a helpful assistant.",
437
+ tools: Optional[list] = None, chat_history: Optional[List[Any]] = None,
438
+ memory=None, runtime='langchain', variables: Optional[list] = None,
439
+ store: Optional[BaseStore] = None):
440
+ """
441
+ Create a predict-type agent with minimal configuration.
442
+
443
+ Args:
444
+ client: The LLM client to use
445
+ instructions: System instructions for the agent
446
+ tools: Optional list of tools to provide to the agent
447
+ chat_history: Optional chat history
448
+ memory: Optional memory/checkpointer
449
+ runtime: Runtime type (default: 'langchain')
450
+ variables: Optional list of variables for the agent
451
+ store: Optional store for memory
452
+
453
+ Returns:
454
+ Runnable agent ready for execution
455
+ """
456
+ if tools is None:
457
+ tools = []
458
+ if chat_history is None:
459
+ chat_history = []
460
+ if variables is None:
461
+ variables = []
462
+
463
+ # Create a minimal data structure for predict agent
464
+ # All LLM settings are taken from the passed client instance
465
+ agent_data = {
466
+ 'instructions': instructions,
467
+ 'tools': tools, # Tools are handled separately in predict agents
468
+ 'variables': variables
469
+ }
470
+ return LangChainAssistant(self, agent_data, client,
471
+ chat_history, "predict", memory=memory, store=store).runnable()
472
+
@@ -0,0 +1,305 @@
1
+ import logging
2
+ import importlib
3
+ from copy import deepcopy as copy
4
+ from typing import Any, Optional
5
+ from langchain.agents import (
6
+ AgentExecutor, create_openai_tools_agent,
7
+ create_json_chat_agent)
8
+ from langgraph.store.base import BaseStore
9
+ from .agents.xml_chat import create_xml_chat_agent
10
+ from .langraph_agent import create_graph
11
+ from langchain_core.messages import (
12
+ BaseMessage, SystemMessage, HumanMessage
13
+ )
14
+ from langchain_core.prompts import MessagesPlaceholder
15
+ from .constants import REACT_ADDON, REACT_VARS, XML_ADDON
16
+ from .chat_message_template import Jinja2TemplatedChatMessagesTemplate
17
+ from ..tools.echo import EchoTool
18
+ from langchain_core.tools import BaseTool, ToolException
19
+
20
+ logger = logging.getLogger(__name__)
21
+
22
+ class Assistant:
23
+ def __init__(self,
24
+ alita: 'AlitaClient',
25
+ data: dict,
26
+ client: 'LLMLikeObject',
27
+ chat_history: list[BaseMessage] = [],
28
+ app_type: str = "openai",
29
+ tools: Optional[list] = [],
30
+ memory: Optional[Any] = None,
31
+ store: Optional[BaseStore] = None):
32
+
33
+ self.app_type = app_type
34
+ self.memory = memory
35
+ self.store = store
36
+
37
+ logger.debug("Data for agent creation: %s", data)
38
+ logger.info("App type: %s", app_type)
39
+
40
+ # For predict agents, use the client as-is since it's already configured
41
+ if app_type == "predict":
42
+ self.client = client
43
+ else:
44
+ # For other agent types, configure client from llm_settings
45
+ self.client = copy(client)
46
+ self.client.max_tokens = data['llm_settings']['max_tokens']
47
+ self.client.temperature = data['llm_settings']['temperature']
48
+ self.client.top_p = data['llm_settings']['top_p']
49
+ self.client.top_k = data['llm_settings']['top_k']
50
+ self.client.model_name = data['llm_settings']['model_name']
51
+ self.client.integration_uid = data['llm_settings']['integration_uid']
52
+
53
+ model_type = data["llm_settings"]["indexer_config"]["ai_model"]
54
+ model_params = data["llm_settings"]["indexer_config"]["ai_model_params"]
55
+ #
56
+ target_pkg, target_name = model_type.rsplit(".", 1)
57
+ target_cls = getattr(
58
+ importlib.import_module(target_pkg),
59
+ target_name
60
+ )
61
+ self.client = target_cls(**model_params)
62
+ # validate agents compatibility: non-pipeline agents cannot have pipelines as toolkits
63
+ if app_type not in ["pipeline", "predict"]:
64
+ tools_to_check = data.get('tools', [])
65
+ if any(tool['agent_type'] == 'pipeline' for tool in tools_to_check):
66
+ raise ToolException("Non-pipeline agents cannot have pipelines as a toolkits. "
67
+ "Review toolkits configuration or use pipeline as master agent.")
68
+
69
+ # configure memory store if memory tool is defined (not needed for predict agents)
70
+ if app_type != "predict":
71
+ memory_tool = next((tool for tool in data.get('tools', []) if tool['type'] == 'memory'), None)
72
+ self._configure_store(memory_tool)
73
+ else:
74
+ # For predict agents, initialize memory store to None since they don't use memory
75
+ self.store = None
76
+
77
+ # Lazy import to avoid circular dependency
78
+ from ..toolkits.tools import get_tools
79
+
80
+ self.tools = get_tools(data['tools'], alita_client=alita, llm=self.client, memory_store=self.store)
81
+ if tools:
82
+ self.tools += tools
83
+ # Handle prompt setup
84
+ if app_type in ["pipeline", "predict", "react"]:
85
+ self.prompt = data['instructions']
86
+ else:
87
+ messages = [SystemMessage(content=data['instructions'])]
88
+ messages.append(MessagesPlaceholder("chat_history"))
89
+ if app_type == "react":
90
+ messages.append(HumanMessage(REACT_ADDON))
91
+ elif app_type == "xml":
92
+ messages.append(HumanMessage(XML_ADDON))
93
+ elif app_type in ['openai', 'dial']:
94
+ messages.append(HumanMessage("{{input}}"))
95
+ messages.append(MessagesPlaceholder("agent_scratchpad"))
96
+ variables = {}
97
+ input_variables = []
98
+ for variable in data['variables']:
99
+ if variable['value'] != "":
100
+ variables[variable['name']] = variable['value']
101
+ else:
102
+ input_variables.append(variable['name'])
103
+ if app_type in ["react", "xml"]:
104
+ input_variables = list(set(input_variables + REACT_VARS))
105
+
106
+ if chat_history and isinstance(chat_history, list):
107
+ messages.extend(chat_history)
108
+ self.prompt = Jinja2TemplatedChatMessagesTemplate(messages=messages)
109
+ if input_variables:
110
+ self.prompt.input_variables = input_variables
111
+ if variables:
112
+ self.prompt.partial_variables = variables
113
+ try:
114
+ logger.info(f"Client was created with client setting: temperature - {self.client._get_model_default_parameters}")
115
+ except Exception as e:
116
+ logger.info(f"Client was created with client setting: temperature - {self.client.temperature} : {self.client.max_tokens}")
117
+
118
+ def _configure_store(self, memory_tool: dict | None) -> None:
119
+ """
120
+ Configure the memory store based on a memory_tool definition.
121
+ Only creates a new store if one does not already exist.
122
+ """
123
+ if not memory_tool or self.store is not None:
124
+ return
125
+ from .store_manager import get_manager
126
+ conn_str = memory_tool.get('settings', {}).get('connection_string', '')
127
+ store = get_manager().get_store(conn_str)
128
+ self.store = store
129
+
130
+ def runnable(self):
131
+ if self.app_type == 'pipeline':
132
+ return self.pipeline()
133
+ elif self.app_type == 'openai':
134
+ return self.getOpenAIToolsAgentExecutor()
135
+ elif self.app_type == 'xml':
136
+ return self.getXMLAgentExecutor()
137
+ elif self.app_type in ['predict', 'react']:
138
+ return self.getLangGraphReactAgent()
139
+ else:
140
+ self.tools = [EchoTool()] + self.tools
141
+ return self.getAgentExecutor()
142
+
143
+ def _agent_executor(self, agent: Any):
144
+ return AgentExecutor.from_agent_and_tools(agent=agent, tools=self.tools,
145
+ verbose=True, handle_parsing_errors=True,
146
+ max_execution_time=None, return_intermediate_steps=True)
147
+
148
+ def getAgentExecutor(self):
149
+ # Exclude compiled graph runnables from simple tool agents
150
+ simple_tools = [t for t in self.tools if isinstance(t, BaseTool)]
151
+ agent = create_json_chat_agent(llm=self.client, tools=simple_tools, prompt=self.prompt)
152
+ return self._agent_executor(agent)
153
+
154
+
155
+ def getXMLAgentExecutor(self):
156
+ # Exclude compiled graph runnables from simple tool agents
157
+ simple_tools = [t for t in self.tools if isinstance(t, BaseTool)]
158
+ agent = create_xml_chat_agent(llm=self.client, tools=simple_tools, prompt=self.prompt)
159
+ return self._agent_executor(agent)
160
+
161
+ def getOpenAIToolsAgentExecutor(self):
162
+ # Exclude compiled graph runnables from simple tool agents
163
+ simple_tools = [t for t in self.tools if isinstance(t, BaseTool)]
164
+ agent = create_openai_tools_agent(llm=self.client, tools=simple_tools, prompt=self.prompt)
165
+ return self._agent_executor(agent)
166
+
167
+ def getLangGraphReactAgent(self):
168
+ """
169
+ Create a LangGraph react agent using a tool-calling agent pattern.
170
+ This creates a proper LangGraphAgentRunnable with modern tool support.
171
+ """
172
+ # Exclude compiled graph runnables from simple tool agents
173
+ simple_tools = [t for t in self.tools if isinstance(t, BaseTool)]
174
+
175
+ # Set up memory/checkpointer if available
176
+ checkpointer = None
177
+ if self.memory is not None:
178
+ checkpointer = self.memory
179
+ elif self.store is not None:
180
+ # Convert store to checkpointer if needed
181
+ from langgraph.checkpoint.memory import MemorySaver
182
+ checkpointer = MemorySaver()
183
+ else:
184
+ # Ensure we have a checkpointer for conversation persistence
185
+ from langgraph.checkpoint.memory import MemorySaver
186
+ checkpointer = MemorySaver()
187
+ logger.info("Using default MemorySaver for conversation persistence")
188
+
189
+ # Extract all messages from prompt/chat history for LangGraph
190
+ chat_history_messages = []
191
+ prompt_instructions = None
192
+
193
+ if hasattr(self.prompt, 'messages') and self.prompt.messages:
194
+ # Extract all messages from the prompt to use as chat history
195
+ for message in self.prompt.messages:
196
+ # Skip placeholders (MessagesPlaceholder instances) as they are not actual messages
197
+ if hasattr(message, 'variable_name'): # MessagesPlaceholder has variable_name attribute
198
+ continue
199
+ # Skip template messages (contains {{variable}} patterns)
200
+ if hasattr(message, 'content') and isinstance(message.content, str) and '{{' in message.content and '}}' in message.content:
201
+ continue
202
+ # Include actual chat history messages
203
+ chat_history_messages.append(message)
204
+
205
+ # Only use prompt_instructions if explicitly specified (for predict app_type)
206
+ if self.app_type == "predict" and isinstance(self.prompt, str):
207
+ prompt_instructions = self.prompt
208
+
209
+ # Create a unified YAML schema with conditional tool binding
210
+ # Build the base node configuration
211
+ node_config = {
212
+ 'id': 'agent',
213
+ 'type': 'llm',
214
+ 'prompt': {
215
+ 'template': prompt_instructions or "You are a helpful assistant."
216
+ },
217
+ 'input': ['messages'],
218
+ 'output': ['messages'],
219
+ 'transition': 'END'
220
+ }
221
+
222
+ # Add tool binding only if tools are present
223
+ if simple_tools:
224
+ tool_names = [tool.name for tool in simple_tools]
225
+ tool_names_yaml = str(tool_names).replace("'", '"') # Convert to YAML-compatible format
226
+ node_config['tool_names'] = tool_names_yaml
227
+ logger.info("Binding tools: %s", tool_names)
228
+
229
+ # Properly setup the prompt for YAML
230
+ import yaml
231
+ escaped_prompt = prompt_instructions or "You are a helpful assistant."
232
+
233
+ # Create the schema as a dictionary first, then convert to YAML
234
+ state_messages_config = {'type': 'list'}
235
+
236
+ # Only set initial messages if there's actual conversation history (not just system prompts)
237
+ actual_conversation_messages = [
238
+ msg for msg in chat_history_messages
239
+ if not isinstance(msg, SystemMessage) # Exclude system messages as they're handled by prompt template
240
+ ]
241
+
242
+ if actual_conversation_messages:
243
+ state_messages_config['value'] = actual_conversation_messages
244
+ logger.info(f"Setting initial conversation history with {len(actual_conversation_messages)} messages")
245
+
246
+ schema_dict = {
247
+ 'name': 'react_agent',
248
+ 'state': {
249
+ 'messages': state_messages_config
250
+ },
251
+ 'nodes': [{
252
+ 'id': 'agent',
253
+ 'type': 'llm',
254
+ 'prompt': {
255
+ 'template': escaped_prompt
256
+ },
257
+ 'input': ['messages'],
258
+ 'output': ['messages'],
259
+ 'transition': 'END'
260
+ }],
261
+ 'entry_point': 'agent'
262
+ }
263
+
264
+ # Add tool-specific parameters only if tools exist
265
+ if simple_tools:
266
+ schema_dict['nodes'][0]['tool_names'] = tool_names
267
+
268
+ # Convert to YAML string
269
+ yaml_schema = yaml.dump(schema_dict, default_flow_style=False, allow_unicode=True)
270
+
271
+ # Use create_graph function to build the agent like other graph types
272
+ from .langraph_agent import create_graph
273
+
274
+ agent = create_graph(
275
+ client=self.client,
276
+ yaml_schema=yaml_schema,
277
+ tools=simple_tools,
278
+ memory=checkpointer,
279
+ store=self.store,
280
+ debug=False,
281
+ for_subgraph=False
282
+ )
283
+
284
+ return agent
285
+
286
+ def pipeline(self):
287
+ memory = self.memory
288
+ #
289
+ if memory is None:
290
+ from langgraph.checkpoint.memory import MemorySaver # pylint: disable=E0401,C0415
291
+ memory = MemorySaver()
292
+ #
293
+ agent = create_graph(
294
+ client=self.client, tools=self.tools,
295
+ yaml_schema=self.prompt, memory=memory
296
+ )
297
+ #
298
+ return agent
299
+
300
+ # This one is used only in Alita and OpenAI
301
+ def apredict(self, messages: list[BaseMessage]):
302
+ yield from self.client.ainvoke(messages)
303
+
304
+ def predict(self, messages: list[BaseMessage]):
305
+ return self.client.invoke(messages)
@@ -6,7 +6,7 @@ from typing import Dict
6
6
  import yaml
7
7
  import ast
8
8
  from langchain_core.callbacks import dispatch_custom_event
9
- from langchain_core.messages import HumanMessage
9
+ from langchain_core.messages import HumanMessage, AIMessage, SystemMessage, BaseMessage
10
10
  from langchain_core.runnables import Runnable
11
11
  from langchain_core.runnables import RunnableConfig
12
12
  from langchain_core.tools import BaseTool
@@ -498,14 +498,36 @@ def create_graph(
498
498
  var: get_type_hints(state_class).get(var, str).__name__
499
499
  for var in output_vars
500
500
  }
501
+
502
+ # Check if tools should be bound to this LLM node
503
+ tool_names = node.get('tool_names', []) if isinstance(node.get('tool_names'), list) else []
504
+
505
+ # Filter tools if specific tool names are provided
506
+ available_tools = []
507
+
508
+ if tool_names:
509
+ # Filter tools by name
510
+ tool_dict = {tool.name: tool for tool in tools if isinstance(tool, BaseTool)}
511
+ available_tools = [tool_dict[name] for name in tool_names if name in tool_dict]
512
+ if len(available_tools) != len(tool_names):
513
+ missing_tools = [name for name in tool_names if name not in tool_dict]
514
+ logger.warning(f"Some tools not found for LLM node {node_id}: {missing_tools}")
515
+ else:
516
+ # Use all available tools
517
+ available_tools = [tool for tool in tools if isinstance(tool, BaseTool)]
518
+
501
519
  lg_builder.add_node(node_id, LLMNode(
502
- client=client, prompt=node.get('prompt', {}),
503
- name=node['id'], return_type='dict',
520
+ client=client,
521
+ prompt=node.get('prompt', {}),
522
+ name=node['id'],
523
+ return_type='dict',
504
524
  response_key=node.get('response_key', 'messages'),
505
525
  structured_output_dict=output_vars_dict,
506
526
  output_variables=output_vars,
507
527
  input_variables=node.get('input', ['messages']),
508
- structured_output=node.get('structured_output', False)))
528
+ structured_output=node.get('structured_output', False),
529
+ available_tools=available_tools,
530
+ tool_names=tool_names))
509
531
  elif node_type == 'router':
510
532
  # Add a RouterNode as an independent node
511
533
  lg_builder.add_node(node_id, RouterNode(
@@ -604,6 +626,29 @@ def create_graph(
604
626
  return compiled.validate()
605
627
 
606
628
 
629
+ def convert_dict_to_message(msg_dict):
630
+ """Convert a dictionary message to a LangChain message object."""
631
+ if isinstance(msg_dict, BaseMessage):
632
+ return msg_dict # Already a LangChain message
633
+
634
+ if isinstance(msg_dict, dict):
635
+ role = msg_dict.get('role', 'user')
636
+ content = msg_dict.get('content', '')
637
+
638
+ if role == 'user':
639
+ return HumanMessage(content=content)
640
+ elif role == 'assistant':
641
+ return AIMessage(content=content)
642
+ elif role == 'system':
643
+ return SystemMessage(content=content)
644
+ else:
645
+ # Default to HumanMessage for unknown roles
646
+ return HumanMessage(content=content)
647
+
648
+ # If it's neither dict nor BaseMessage, convert to string and make HumanMessage
649
+ return HumanMessage(content=str(msg_dict))
650
+
651
+
607
652
  class LangGraphAgentRunnable(CompiledStateGraph):
608
653
  def __init__(self, *args, output_variables=None, **kwargs):
609
654
  super().__init__(*args, **kwargs)
@@ -612,16 +657,28 @@ class LangGraphAgentRunnable(CompiledStateGraph):
612
657
  def invoke(self, input: Union[dict[str, Any], Any],
613
658
  config: Optional[RunnableConfig] = None,
614
659
  *args, **kwargs):
615
-
660
+ logger.info(f"Incomming Input: {input}")
616
661
  if not config.get("configurable", {}).get("thread_id"):
617
662
  config["configurable"] = {"thread_id": str(uuid4())}
618
663
  thread_id = config.get("configurable", {}).get("thread_id")
664
+ # Handle chat history and current input properly
619
665
  if input.get('chat_history') and not input.get('messages'):
620
- input['messages'] = input.pop('chat_history')
666
+ # Convert chat history dict messages to LangChain message objects
667
+ chat_history = input.pop('chat_history')
668
+ input['messages'] = [convert_dict_to_message(msg) for msg in chat_history]
669
+
670
+ # Append current input to existing messages instead of overwriting
621
671
  if input.get('input'):
622
- input['messages'] = [{"role": "user", "content": input.get('input')}]
672
+ current_message = HumanMessage(content=input.get('input'))
673
+ if input.get('messages'):
674
+ # Ensure existing messages are LangChain objects
675
+ input['messages'] = [convert_dict_to_message(msg) for msg in input['messages']]
676
+ # Append to existing messages
677
+ input['messages'].append(current_message)
678
+ else:
679
+ # No existing messages, create new list
680
+ input['messages'] = [current_message]
623
681
  logging.info(f"Input: {thread_id} - {input}")
624
-
625
682
  if self.checkpointer and self.checkpointer.get_tuple(config):
626
683
  self.update_state(config, input)
627
684
  result = super().invoke(None, config=config, *args, **kwargs)
@@ -35,7 +35,7 @@ from langchain_core.messages import (AIMessageChunk, BaseMessage, HumanMessage,
35
35
  from langchain_core.outputs import ChatGeneration, ChatGenerationChunk, ChatResult
36
36
  from langchain_core.runnables import run_in_executor
37
37
  from langchain_community.chat_models.openai import generate_from_stream, _convert_delta_to_message_chunk
38
- from ..clients import AlitaClient
38
+ from ..clients.client import AlitaClient
39
39
  from pydantic import Field, model_validator, field_validator, ValidationInfo
40
40
 
41
41
  logger = logging.getLogger(__name__)
@@ -99,9 +99,57 @@ def get_tools(tools_list: list, alita_client, llm, memory_store: BaseStore = Non
99
99
  # Add MCP tools
100
100
  tools += _mcp_tools(tools_list, alita_client)
101
101
 
102
+ # Sanitize tool names to meet OpenAI's function naming requirements
103
+ tools = _sanitize_tool_names(tools)
104
+
102
105
  return tools
103
106
 
104
107
 
108
+ def _sanitize_tool_names(tools: list) -> list:
109
+ """
110
+ Sanitize tool names to meet OpenAI's function naming requirements.
111
+ OpenAI function names must match pattern ^[a-zA-Z0-9_\\.-]+$
112
+ """
113
+ import re
114
+ from langchain_core.tools import BaseTool
115
+
116
+ def sanitize_name(name):
117
+ """Sanitize a single tool name"""
118
+ # Replace spaces and other invalid characters with underscores
119
+ sanitized = re.sub(r'[^a-zA-Z0-9_.-]', '_', name)
120
+ # Remove multiple consecutive underscores
121
+ sanitized = re.sub(r'_{2,}', '_', sanitized)
122
+ # Remove leading/trailing underscores
123
+ sanitized = sanitized.strip('_')
124
+ return sanitized
125
+
126
+ sanitized_tools = []
127
+ name_mapping = {}
128
+
129
+ for tool in tools:
130
+ if isinstance(tool, BaseTool):
131
+ original_name = tool.name
132
+ sanitized_name = sanitize_name(original_name)
133
+
134
+ # Only update if the name actually changed
135
+ if original_name != sanitized_name:
136
+ logger.info(f"Sanitizing tool name: '{original_name}' -> '{sanitized_name}'")
137
+ # Create a new tool instance with the sanitized name
138
+ # We need to be careful here to preserve all other tool properties
139
+ tool.name = sanitized_name
140
+ name_mapping[original_name] = sanitized_name
141
+
142
+ sanitized_tools.append(tool)
143
+ else:
144
+ # For non-BaseTool objects (like CompiledStateGraph), just pass through
145
+ sanitized_tools.append(tool)
146
+
147
+ if name_mapping:
148
+ logger.info(f"Tool name sanitization complete. Mapped {len(name_mapping)} tool names.")
149
+
150
+ return sanitized_tools
151
+
152
+
105
153
  def _mcp_tools(tools_list, alita):
106
154
  try:
107
155
  all_available_toolkits = alita.get_mcp_toolkits()