alita-sdk 0.3.248__tar.gz → 0.3.250__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 (349) hide show
  1. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/PKG-INFO +1 -1
  2. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/__init__.py +1 -0
  3. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/vectorstore.py +2 -1
  4. alita_sdk-0.3.250/alita_sdk/runtime/tools/vectorstore_base.py +624 -0
  5. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/ado/work_item/ado_wrapper.py +9 -9
  6. alita_sdk-0.3.250/alita_sdk/tools/base_indexer_toolkit.py +426 -0
  7. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/elitea_base.py +29 -22
  8. alita_sdk-0.3.250/alita_sdk/tools/non_code_indexer_toolkit.py +23 -0
  9. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/utils/content_parser.py +60 -0
  10. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk.egg-info/PKG-INFO +1 -1
  11. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk.egg-info/SOURCES.txt +3 -0
  12. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/pyproject.toml +1 -1
  13. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/LICENSE +0 -0
  14. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/README.md +0 -0
  15. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/__init__.py +0 -0
  16. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/community/__init__.py +0 -0
  17. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/community/utils.py +0 -0
  18. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/ado.py +0 -0
  19. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/azure_search.py +0 -0
  20. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/bigquery.py +0 -0
  21. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/bitbucket.py +0 -0
  22. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/confluence.py +0 -0
  23. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/delta_lake.py +0 -0
  24. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/embedding.py +0 -0
  25. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/figma.py +0 -0
  26. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/github.py +0 -0
  27. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/gitlab.py +0 -0
  28. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/jira.py +0 -0
  29. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/pgvector.py +0 -0
  30. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/postman.py +0 -0
  31. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/qtest.py +0 -0
  32. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/rally.py +0 -0
  33. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/service_now.py +0 -0
  34. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/slack.py +0 -0
  35. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/testrail.py +0 -0
  36. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/xray.py +0 -0
  37. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/zephyr.py +0 -0
  38. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/configurations/zephyr_enterprise.py +0 -0
  39. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/__init__.py +0 -0
  40. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/clients/__init__.py +0 -0
  41. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/clients/artifact.py +0 -0
  42. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/clients/client.py +0 -0
  43. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/clients/datasource.py +0 -0
  44. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/clients/prompt.py +0 -0
  45. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/__init__.py +0 -0
  46. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
  47. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
  48. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/assistant.py +0 -0
  49. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
  50. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/constants.py +0 -0
  51. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
  52. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
  53. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
  54. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
  55. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
  56. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
  57. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
  58. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
  59. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
  60. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/AlitaPDFLoader.py +0 -0
  61. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/AlitaPowerPointLoader.py +0 -0
  62. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
  63. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
  64. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/AlitaTextLoader.py +0 -0
  65. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
  66. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
  67. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
  68. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/indexer.py +0 -0
  69. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
  70. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
  71. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
  72. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
  73. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
  74. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/langraph_agent.py +0 -0
  75. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
  76. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
  77. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
  78. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
  79. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
  80. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/store_manager.py +0 -0
  81. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
  82. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
  83. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
  84. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
  85. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
  86. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
  87. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/tools/git.py +0 -0
  88. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/tools/log.py +0 -0
  89. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
  90. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/tools/state.py +0 -0
  91. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
  92. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
  93. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/langchain/utils.py +0 -0
  94. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/llms/__init__.py +0 -0
  95. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/llms/preloaded.py +0 -0
  96. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/toolkits/__init__.py +0 -0
  97. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/toolkits/application.py +0 -0
  98. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/toolkits/artifact.py +0 -0
  99. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/toolkits/configurations.py +0 -0
  100. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/toolkits/datasource.py +0 -0
  101. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/toolkits/prompt.py +0 -0
  102. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
  103. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/toolkits/tools.py +0 -0
  104. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
  105. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/__init__.py +0 -0
  106. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/agent.py +0 -0
  107. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/application.py +0 -0
  108. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/artifact.py +0 -0
  109. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/datasource.py +0 -0
  110. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/echo.py +0 -0
  111. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/function.py +0 -0
  112. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
  113. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/llm.py +0 -0
  114. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/loop.py +0 -0
  115. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/loop_output.py +0 -0
  116. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/mcp_server_tool.py +0 -0
  117. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
  118. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/prompt.py +0 -0
  119. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/router.py +0 -0
  120. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/tools/tool.py +0 -0
  121. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
  122. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/utils/__init__.py +0 -0
  123. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/utils/constants.py +0 -0
  124. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/utils/evaluate.py +0 -0
  125. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/utils/logging.py +0 -0
  126. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
  127. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/utils/streamlit.py +0 -0
  128. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/utils/toolkit_runtime.py +0 -0
  129. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/utils/toolkit_utils.py +0 -0
  130. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/runtime/utils/utils.py +0 -0
  131. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/__init__.py +0 -0
  132. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/ado/__init__.py +0 -0
  133. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/ado/repos/__init__.py +0 -0
  134. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
  135. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/ado/test_plan/__init__.py +0 -0
  136. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +0 -0
  137. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/ado/utils.py +0 -0
  138. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/ado/wiki/__init__.py +0 -0
  139. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
  140. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/ado/work_item/__init__.py +0 -0
  141. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
  142. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
  143. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/aws/__init__.py +0 -0
  144. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/aws/delta_lake/__init__.py +0 -0
  145. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/aws/delta_lake/api_wrapper.py +0 -0
  146. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/aws/delta_lake/schemas.py +0 -0
  147. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/aws/delta_lake/tool.py +0 -0
  148. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/azure_ai/__init__.py +0 -0
  149. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
  150. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
  151. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/base/__init__.py +0 -0
  152. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/base/tool.py +0 -0
  153. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/bitbucket/__init__.py +0 -0
  154. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
  155. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
  156. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +0 -0
  157. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/bitbucket/tools.py +0 -0
  158. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/browser/__init__.py +0 -0
  159. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/browser/crawler.py +0 -0
  160. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
  161. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/browser/google_search_rag.py +0 -0
  162. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/browser/utils.py +0 -0
  163. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/browser/wiki.py +0 -0
  164. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/__init__.py +0 -0
  165. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/api_wrapper.py +0 -0
  166. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
  167. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/backend_tests_tool.py +0 -0
  168. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
  169. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/carrier_sdk.py +0 -0
  170. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
  171. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -0
  172. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
  173. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
  174. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -0
  175. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
  176. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/tools.py +0 -0
  177. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
  178. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
  179. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/carrier/utils.py +0 -0
  180. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/__init__.py +0 -0
  181. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/__init__.py +0 -0
  182. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
  183. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/constants.py +0 -0
  184. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
  185. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
  186. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
  187. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
  188. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
  189. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
  190. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
  191. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
  192. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
  193. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
  194. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
  195. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
  196. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
  197. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
  198. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
  199. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/models.py +0 -0
  200. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/sematic/__init__.py +0 -0
  201. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
  202. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
  203. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
  204. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
  205. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/chunkers/utils.py +0 -0
  206. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/cloud/__init__.py +0 -0
  207. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
  208. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
  209. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
  210. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
  211. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
  212. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
  213. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
  214. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
  215. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/code/__init__.py +0 -0
  216. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/code/linter/__init__.py +0 -0
  217. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
  218. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
  219. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/code/sonar/__init__.py +0 -0
  220. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
  221. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/confluence/__init__.py +0 -0
  222. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/confluence/api_wrapper.py +0 -0
  223. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/confluence/loader.py +0 -0
  224. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/confluence/utils.py +0 -0
  225. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
  226. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
  227. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/elastic/__init__.py +0 -0
  228. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
  229. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/figma/__init__.py +0 -0
  230. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/figma/api_wrapper.py +0 -0
  231. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/github/__init__.py +0 -0
  232. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/github/api_wrapper.py +0 -0
  233. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/github/github_client.py +0 -0
  234. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
  235. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/github/schemas.py +0 -0
  236. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/github/tool.py +0 -0
  237. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/github/tool_prompts.py +0 -0
  238. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/gitlab/__init__.py +0 -0
  239. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/gitlab/api_wrapper.py +0 -0
  240. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/gitlab/tools.py +0 -0
  241. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/gitlab/utils.py +0 -0
  242. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
  243. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
  244. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/gmail/__init__.py +0 -0
  245. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
  246. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/gmail/utils.py +0 -0
  247. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/google/__init__.py +0 -0
  248. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/google/bigquery/__init__.py +0 -0
  249. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/google/bigquery/api_wrapper.py +0 -0
  250. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/google/bigquery/schemas.py +0 -0
  251. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/google/bigquery/tool.py +0 -0
  252. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/google_places/__init__.py +0 -0
  253. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
  254. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/jira/__init__.py +0 -0
  255. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/jira/api_wrapper.py +0 -0
  256. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/keycloak/__init__.py +0 -0
  257. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
  258. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/llm/__init__.py +0 -0
  259. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/llm/img_utils.py +0 -0
  260. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/llm/llm_utils.py +0 -0
  261. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/localgit/__init__.py +0 -0
  262. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/localgit/local_git.py +0 -0
  263. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/localgit/tool.py +0 -0
  264. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/memory/__init__.py +0 -0
  265. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/ocr/__init__.py +0 -0
  266. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
  267. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/ocr/text_detection.py +0 -0
  268. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/openapi/__init__.py +0 -0
  269. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/__init__.py +0 -0
  270. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
  271. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
  272. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
  273. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
  274. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
  275. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
  276. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
  277. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
  278. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
  279. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
  280. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
  281. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
  282. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
  283. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
  284. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
  285. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
  286. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
  287. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
  288. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/postman/__init__.py +0 -0
  289. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/postman/api_wrapper.py +0 -0
  290. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/postman/postman_analysis.py +0 -0
  291. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pptx/__init__.py +0 -0
  292. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
  293. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/qtest/__init__.py +0 -0
  294. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/qtest/api_wrapper.py +0 -0
  295. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/qtest/tool.py +0 -0
  296. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/rally/__init__.py +0 -0
  297. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/rally/api_wrapper.py +0 -0
  298. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/report_portal/__init__.py +0 -0
  299. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
  300. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
  301. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/salesforce/__init__.py +0 -0
  302. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
  303. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/salesforce/model.py +0 -0
  304. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/servicenow/__init__.py +0 -0
  305. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
  306. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
  307. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/sharepoint/__init__.py +0 -0
  308. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/sharepoint/api_wrapper.py +0 -0
  309. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
  310. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/sharepoint/utils.py +0 -0
  311. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/slack/__init__.py +0 -0
  312. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/slack/api_wrapper.py +0 -0
  313. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/sql/__init__.py +0 -0
  314. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/sql/api_wrapper.py +0 -0
  315. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/sql/models.py +0 -0
  316. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/testio/__init__.py +0 -0
  317. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/testio/api_wrapper.py +0 -0
  318. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/testrail/__init__.py +0 -0
  319. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
  320. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/utils/__init__.py +0 -0
  321. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/vector_adapters/VectorStoreAdapter.py +0 -0
  322. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/vector_adapters/__init__.py +0 -0
  323. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/xray/__init__.py +0 -0
  324. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/xray/api_wrapper.py +0 -0
  325. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/yagmail/__init__.py +0 -0
  326. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
  327. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
  328. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr/__init__.py +0 -0
  329. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
  330. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr/rest_client.py +0 -0
  331. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
  332. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
  333. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
  334. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr_essential/__init__.py +0 -0
  335. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr_essential/api_wrapper.py +0 -0
  336. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr_essential/client.py +0 -0
  337. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
  338. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
  339. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr_squad/__init__.py +0 -0
  340. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -0
  341. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +0 -0
  342. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk.egg-info/dependency_links.txt +0 -0
  343. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk.egg-info/requires.txt +0 -0
  344. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/alita_sdk.egg-info/top_level.txt +0 -0
  345. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/setup.cfg +0 -0
  346. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/tests/test_ado_analysis.py +0 -0
  347. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/tests/test_github_analysis.py +0 -0
  348. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/tests/test_gitlab_analysis.py +0 -0
  349. {alita_sdk-0.3.248 → alita_sdk-0.3.250}/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.248
3
+ Version: 0.3.250
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
@@ -40,6 +40,7 @@ _safe_import_configuration('delta_lake', 'delta_lake', 'DeltaLakeConfiguration')
40
40
  _safe_import_configuration('bigquery', 'bigquery', 'BigQueryConfiguration')
41
41
  _safe_import_configuration('xray', 'xray', 'XrayConfiguration')
42
42
  _safe_import_configuration('zephyr', 'zephyr', 'ZephyrConfiguration')
43
+ _safe_import_configuration('zephyr_enterprise', 'zephyr_enterprise', 'ZephyrEnterpriseConfiguration')
43
44
  _safe_import_configuration('figma', 'figma', 'FigmaConfiguration')
44
45
  _safe_import_configuration('rally', 'rally', 'RallyConfiguration')
45
46
 
@@ -585,7 +585,8 @@ class VectorStoreWrapper(BaseToolApiWrapper):
585
585
 
586
586
  # Apply cutoff filter
587
587
  if cut_off:
588
- combined_items = [item for item in combined_items if abs(item[1]) >= cut_off]
588
+ # Filter out items above the cutoff score (since the lower the score, the better)
589
+ combined_items = [item for item in combined_items if abs(item[1]) <= cut_off]
589
590
 
590
591
  # Sort by score and limit results
591
592
  # DISABLED: for chroma we want ascending order (lower score is better), for others descending
@@ -0,0 +1,624 @@
1
+ import json
2
+ import math
3
+ import types
4
+ from typing import Any, Optional, List, Dict, Callable, Generator
5
+
6
+ from langchain_core.documents import Document
7
+ from pydantic import BaseModel, model_validator, Field
8
+ from ..langchain.tools.vector import VectorAdapter
9
+ from langchain_core.messages import HumanMessage
10
+ from alita_sdk.tools.elitea_base import BaseToolApiWrapper
11
+ from alita_sdk.tools.vector_adapters.VectorStoreAdapter import VectorStoreAdapterFactory
12
+ from logging import getLogger
13
+
14
+ from ..utils.logging import dispatch_custom_event
15
+ from ..utils.utils import IndexerKeywords
16
+
17
+ logger = getLogger(__name__)
18
+
19
+ class IndexDocumentsModel(BaseModel):
20
+ documents: Any = Field(description="Generator of documents to index")
21
+
22
+ class SearchDocumentsModel(BaseModel):
23
+ query: str = Field(description="Search query")
24
+ doctype: str = Field(description="Document type")
25
+ filter: Optional[dict | str] = Field(
26
+ description='Filter for metadata of documents. Use JSON format for complex filters.',
27
+ default=None)
28
+ search_top: Optional[int] = Field(description="Number of search results", default=10)
29
+ cut_off: Optional[float] = Field(description="Cut off value for search results", default=0.5)
30
+ full_text_search: Optional[Dict[str, Any]] = Field(
31
+ description="""Full text search configuration. Example:
32
+ {
33
+ "enabled": true,
34
+ "weight": 0.3,
35
+ "fields": ["content", "title"],
36
+ "language": "english"
37
+ }""",
38
+ default=None
39
+ )
40
+ reranking_config: Optional[Dict[str, Dict[str, Any]]] = Field(
41
+ description="""Reranking configuration. Example:
42
+ {
43
+ "field_name": {
44
+ "weight": 1.0,
45
+ "rules": {
46
+ "contains": "keyword",
47
+ "priority": "value",
48
+ "sort": "desc"
49
+ }
50
+ }
51
+ }""",
52
+ default=None
53
+ )
54
+ extended_search: Optional[List[str]] = Field(
55
+ description="List of chunk types to search for (title, summary, propositions, keywords, documents)",
56
+ default=None
57
+ )
58
+
59
+ class StepBackSearchDocumentsModel(BaseModel):
60
+ query: str = Field(description="Search query")
61
+ doctype: str = Field(description="Document type")
62
+ messages: Optional[list] = Field(description="Conversation history", default=[])
63
+ filter: Optional[dict] = Field(description='Filter for metadata of documents. Use JSON format for complex filters.', default=None)
64
+ search_top: Optional[int] = Field(description="Number of search results", default=10)
65
+ cut_off: Optional[float] = Field(description="Cut off value for search results", default=0.5)
66
+ full_text_search: Optional[Dict[str, Any]] = Field(
67
+ description="""Full text search configuration. Example:
68
+ {
69
+ "enabled": true,
70
+ "weight": 0.3,
71
+ "fields": ["content", "title"],
72
+ "language": "english"
73
+ }""",
74
+ default=None
75
+ )
76
+ reranking_config: Optional[Dict[str, Dict[str, Any]]] = Field(
77
+ description="""Reranking configuration. Example:
78
+ {
79
+ "field_name": {
80
+ "weight": 1.0,
81
+ "rules": {
82
+ "contains": "keyword",
83
+ "priority": "value",
84
+ "sort": "desc"
85
+ }
86
+ }
87
+ }""",
88
+ default=None
89
+ )
90
+ extended_search: Optional[List[str]] = Field(
91
+ description="List of chunk types to search for (title, summary, propositions, keywords, documents)",
92
+ default=None
93
+ )
94
+
95
+ STEPBACK_PROMPT = """Your task is to convert provided question into a more generic question that will be used for similarity search.
96
+ Remove all not important words, question words, but save all names, dates and acronym as in original question.
97
+
98
+ <input>
99
+ {input}
100
+ </input>
101
+
102
+ Output:
103
+ """
104
+
105
+ GET_ANSWER_PROMPT = """<search_results>
106
+ {search_results}
107
+ </search_results>
108
+
109
+ <conversation_history>
110
+ {messages}
111
+ </conversation_history>
112
+
113
+ Please answer the question based on provided search results.
114
+ Provided information is already processed and available in the context as list of possibly relevant pieces of the documents.
115
+ Use only provided information. Do not make up answer.
116
+ If you have no answer and you can not derive it from the context, please provide "I have no answer".
117
+ <question>
118
+ {input}
119
+ </question>
120
+ ## Answer
121
+ Add <ANSWER> here
122
+
123
+ ## Score
124
+ Score the answer from 0 to 100, where 0 is not relevant and 100 is very relevant.
125
+
126
+ ## Citations
127
+ - source (score)
128
+ - source (score)
129
+ Make sure to provide unique source for each citation.
130
+
131
+ ## Explanation
132
+ How did you come up with the answer?
133
+ """
134
+
135
+ class VectorStoreWrapperBase(BaseToolApiWrapper):
136
+ llm: Any
137
+ embedding_model: str
138
+ embedding_model_params: dict
139
+ vectorstore_type: str
140
+ vectorstore_params: dict
141
+ max_docs_per_add: int = 100
142
+ dataset: str = None
143
+ embedding: Any = None
144
+ vectorstore: Any = None
145
+ # Review usage of old adapter
146
+ vectoradapter: Any = None
147
+ pg_helper: Any = None
148
+ embeddings: Any = None
149
+ # New adapter for vector database operations
150
+ vector_adapter: Any = None
151
+
152
+ @model_validator(mode='before')
153
+ @classmethod
154
+ def validate_toolkit(cls, values):
155
+ from ..langchain.interfaces.llm_processor import get_embeddings, get_vectorstore
156
+ logger.debug(f"Validating toolkit: {values}")
157
+ if not values.get('vectorstore_type'):
158
+ raise ValueError("Vectorstore type is required.")
159
+ if not values.get('embedding_model'):
160
+ raise ValueError("Embedding model is required.")
161
+ if not values.get('vectorstore_params'):
162
+ raise ValueError("Vectorstore parameters are required.")
163
+ if not values.get('embedding_model_params'):
164
+ raise ValueError("Embedding model parameters are required.")
165
+ values["dataset"] = values.get('vectorstore_params').get('collection_name')
166
+ if not values["dataset"]:
167
+ raise ValueError("Collection name is required.")
168
+ if not values.get('embeddings'):
169
+ values['embeddings'] = get_embeddings(values['embedding_model'], values['embedding_model_params'])
170
+ values['vectorstore'] = get_vectorstore(values['vectorstore_type'], values['vectorstore_params'], embedding_func=values['embeddings'])
171
+ values['vectoradapter'] = VectorAdapter(
172
+ vectorstore=values['vectorstore'],
173
+ embeddings=values['embeddings'],
174
+ quota_params=None,
175
+ )
176
+ # Initialize the new vector adapter
177
+ values['vector_adapter'] = VectorStoreAdapterFactory.create_adapter(values['vectorstore_type'])
178
+ logger.debug(f"Vectorstore wrapper initialized: {values}")
179
+ return values
180
+
181
+ def _init_pg_helper(self, language='english'):
182
+ """Initialize PGVector helper if needed and not already initialized"""
183
+ if self.pg_helper is None and hasattr(self.vectorstore, 'connection_string') and hasattr(self.vectorstore, 'collection_name'):
184
+ try:
185
+ from .pgvector_search import PGVectorSearch
186
+ self.pg_helper = PGVectorSearch(
187
+ self.vectorstore.connection_string,
188
+ self.vectorstore.collection_name,
189
+ language=language
190
+ )
191
+ except ImportError:
192
+ logger.warning("PGVectorSearch not available - full-text search will be limited")
193
+ except Exception as e:
194
+ logger.error(f"Failed to initialize PGVectorSearch: {str(e)}")
195
+
196
+ def list_collections(self) -> List[str]:
197
+ """List all collections in the vectorstore."""
198
+
199
+ return self.vector_adapter.list_collections(self)
200
+
201
+ def _clean_collection(self, collection_suffix: str = ''):
202
+ """
203
+ Clean the vectorstore collection by deleting all indexed data.
204
+ """
205
+ self._log_data(
206
+ f"Cleaning collection '{self.dataset}'",
207
+ tool_name="_clean_collection"
208
+ )
209
+ self.vector_adapter.clean_collection(self, collection_suffix)
210
+ self._log_data(
211
+ f"Collection '{self.dataset}' has been cleaned. ",
212
+ tool_name="_clean_collection"
213
+ )
214
+
215
+ def _add_to_collection(self, entry_id, new_collection_value):
216
+ """Add a new collection name to the `collection` key in the `metadata` column."""
217
+ self.vector_adapter.add_to_collection(self, entry_id, new_collection_value)
218
+
219
+ def index_documents(self, documents: Generator[Document, None, None], collection_suffix: str, progress_step: int = 20, clean_index: bool = True):
220
+ """ Index documents in the vectorstore.
221
+
222
+ Args:
223
+ documents (Any): Generator or list of documents to index.
224
+ progress_step (int): Step for progress reporting, default is 20.
225
+ clean_index (bool): If True, clean the index before re-indexing all documents.
226
+ """
227
+ if clean_index:
228
+ self._clean_index(collection_suffix)
229
+
230
+ return self._save_index(list(documents), collection_suffix, progress_step)
231
+
232
+ def _clean_index(self, collection_suffix: str):
233
+ logger.info("Cleaning index before re-indexing all documents.")
234
+ self._log_data("Cleaning index before re-indexing all documents. Previous index will be removed", tool_name="index_documents")
235
+ try:
236
+ self._clean_collection(collection_suffix)
237
+ self.vectoradapter.persist()
238
+ self.vectoradapter.vacuum()
239
+ self._log_data("Previous index has been removed",
240
+ tool_name="index_documents")
241
+ except Exception as e:
242
+ logger.warning(f"Failed to clean index: {str(e)}. Continuing with re-indexing.")
243
+
244
+ def _save_index(self, documents: list[Document], collection_suffix: Optional[str] = None, progress_step: int = 20):
245
+ from ..langchain.interfaces.llm_processor import add_documents
246
+ #
247
+ for doc in documents:
248
+ if 'id' not in doc.metadata or 'updated_on' not in doc.metadata:
249
+ logger.warning(f"Document is missing required metadata field 'id' or 'updated_on': {doc.metadata}")
250
+
251
+ logger.debug(f"Indexing documents: {documents}")
252
+ logger.debug(self.vectoradapter)
253
+
254
+ # if collection_suffix is provided, add it to metadata of each document
255
+ if collection_suffix:
256
+ for doc in documents:
257
+ if not doc.metadata.get('collection'):
258
+ doc.metadata['collection'] = collection_suffix
259
+ else:
260
+ doc.metadata['collection'] += f";{collection_suffix}"
261
+
262
+ total_docs = len(documents)
263
+ documents_count = 0
264
+ _documents = []
265
+
266
+ # set default progress step to 20 if out of 0...100 or None
267
+ progress_step = 20 if progress_step not in range(0, 100) else progress_step
268
+ next_progress_point = progress_step
269
+ for document in documents:
270
+ documents_count += 1
271
+ # logger.debug(f"Indexing document: {document}")
272
+ try:
273
+ _documents.append(document)
274
+ if len(_documents) >= self.max_docs_per_add:
275
+ add_documents(vectorstore=self.vectorstore, documents=_documents)
276
+ _documents = []
277
+
278
+ percent = math.floor((documents_count / total_docs) * 100)
279
+ if percent >= next_progress_point:
280
+ msg = f"Indexing progress: {percent}%. Processed {documents_count} of {total_docs} documents."
281
+ logger.debug(msg)
282
+ self._log_data(msg)
283
+ next_progress_point += progress_step
284
+ except Exception:
285
+ from traceback import format_exc
286
+ logger.error(f"Error: {format_exc()}")
287
+ return {"status": "error", "message": f"Error: {format_exc()}"}
288
+ if _documents:
289
+ add_documents(vectorstore=self.vectorstore, documents=_documents)
290
+ return {"status": "ok", "message": f"successfully indexed {documents_count} documents"}
291
+
292
+ def search_documents(self, query:str, doctype: str = 'code',
293
+ filter:dict|str={}, cut_off: float=0.5,
294
+ search_top:int=10, full_text_search: Optional[Dict[str, Any]] = None,
295
+ extended_search: Optional[List[str]] = None,
296
+ reranker: dict = {}, reranking_config: Optional[Dict[str, Dict[str, Any]]] = None
297
+ ):
298
+ """Enhanced search documents method using JSON configurations for full-text search and reranking"""
299
+ from alita_sdk.tools.code.loaders.codesearcher import search_format as code_format
300
+
301
+ if not filter:
302
+ filter = None
303
+ else:
304
+ if isinstance(filter, str):
305
+ filter = json.loads(filter)
306
+
307
+ # Extended search implementation
308
+ if extended_search:
309
+ # Track unique documents by source and chunk_id
310
+ unique_docs = {}
311
+ chunk_type_scores = {} # Store scores by document identifier
312
+ # Create initial set of results from documents
313
+ if filter is None:
314
+ document_filter = {"chunk_type": {"$eq": "document"}}
315
+ else:
316
+ document_filter = {
317
+ "$and": [
318
+ filter,
319
+ {"chunk_type": {"$eq": "document"}}
320
+ ]
321
+ }
322
+
323
+ try:
324
+ document_items = self.vectorstore.similarity_search_with_score(
325
+ query, filter=document_filter, k=search_top
326
+ )
327
+ # Add document results to unique docs
328
+ vector_items = document_items
329
+ for doc, score in document_items:
330
+ source = doc.metadata.get('source')
331
+ chunk_id = doc.metadata.get('chunk_id')
332
+ doc_id = f"{source}_{chunk_id}" if source and chunk_id else str(doc.metadata.get('id', id(doc)))
333
+
334
+ if doc_id not in unique_docs or score > chunk_type_scores.get(doc_id, 0):
335
+ unique_docs[doc_id] = doc
336
+ chunk_type_scores[doc_id] = score
337
+ except Exception as e:
338
+ logger.warning(f"Error searching for document chunks: {str(e)}")
339
+
340
+ # First search for specified chunk types (title, summary, propositions, keywords)
341
+ valid_chunk_types = ["title", "summary", "propositions", "keywords"]
342
+ chunk_types_to_search = [ct for ct in extended_search if ct in valid_chunk_types]
343
+
344
+ # Search for each chunk type separately
345
+ for chunk_type in chunk_types_to_search:
346
+ if filter is None:
347
+ chunk_filter = {"chunk_type": {"$eq": chunk_type}}
348
+ else:
349
+ chunk_filter = {
350
+ "$and": [
351
+ filter,
352
+ {"chunk_type": {"$eq": chunk_type}}
353
+ ]
354
+ }
355
+
356
+ try:
357
+ chunk_items = self.vectorstore.similarity_search_with_score(
358
+ query, filter=chunk_filter, k=search_top
359
+ )
360
+
361
+ logger.debug(f"Chunk items for {chunk_type}: {chunk_items[0]}")
362
+
363
+ for doc, score in chunk_items:
364
+ # Create unique identifier for document
365
+ source = doc.metadata.get('source')
366
+ chunk_id = doc.metadata.get('chunk_id')
367
+ doc_id = f"{source}_{chunk_id}" if source and chunk_id else str(doc.metadata.get('id', id(doc)))
368
+
369
+ # Store document and its score
370
+ if doc_id not in unique_docs:
371
+ unique_docs[doc_id] = doc
372
+ chunk_type_scores[doc_id] = score
373
+ # Create a filter with proper operators
374
+ doc_filter_parts = [
375
+ {"source": {"$eq": source}},
376
+ {"chunk_id": {"$eq": chunk_id}},
377
+ {"chunk_type": {"$eq": "document"}}
378
+ ]
379
+
380
+ if filter is not None:
381
+ doc_filter = {
382
+ "$and": [filter] + doc_filter_parts
383
+ }
384
+ else:
385
+ doc_filter = {
386
+ "$and": doc_filter_parts
387
+ }
388
+
389
+ try:
390
+ fetch_items = self.vectorstore.similarity_search_with_score(
391
+ query, filter=doc_filter, k=1
392
+ )
393
+ if fetch_items:
394
+ vector_items.append(fetch_items[0])
395
+
396
+ except Exception as e:
397
+ logger.warning(f"Error retrieving document chunk for {source}_{chunk_id}: {str(e)}")
398
+ except Exception as e:
399
+ logger.warning(f"Error searching for chunk type {chunk_type}: {str(e)}")
400
+
401
+ else:
402
+ # Default search behavior (unchanged)
403
+ max_search_results = 30 if search_top * 3 > 30 else search_top * 3
404
+ vector_items = self.vectorstore.similarity_search_with_score(
405
+ query, filter=filter, k=max_search_results
406
+ )
407
+
408
+ # Initialize document map for tracking by ID
409
+ doc_map = {
410
+ f"{doc.metadata.get('id', f'idx_{i}')}_{doc.metadata['chunk_id']}"
411
+ if 'chunk_id' in doc.metadata
412
+ else doc.metadata.get('id', f"idx_{i}"): (doc, score)
413
+ for i, (doc, score) in enumerate(vector_items)
414
+ }
415
+
416
+ # Process full-text search if configured
417
+ if full_text_search and full_text_search.get('enabled') and full_text_search.get('fields'):
418
+ language = full_text_search.get('language', 'english')
419
+ self._init_pg_helper(language)
420
+ if self.pg_helper:
421
+ vector_weight = 1.0 # Default vector weight
422
+ text_weight = full_text_search.get('weight', 0.3)
423
+
424
+ # Query each specified field
425
+ for field_name in full_text_search.get('fields', []):
426
+ try:
427
+ text_results = self.pg_helper.full_text_search(field_name, query)
428
+
429
+ # Combine text search results with vector results
430
+ for result in text_results:
431
+ doc_id = result['id']
432
+ text_score = result['text_score']
433
+
434
+ if doc_id in doc_map:
435
+ # Document exists in vector results, combine scores
436
+ doc, vector_score = doc_map[doc_id]
437
+ combined_score = (vector_score * vector_weight) + (text_score * text_weight)
438
+ doc_map[doc_id] = (doc, combined_score)
439
+ else:
440
+ # Document is new from text search, fetch and add if possible
441
+ doc_data = self.pg_helper.get_documents_by_ids([doc_id]).get(doc_id)
442
+ if doc_data:
443
+ from langchain_core.documents import Document
444
+ doc = Document(
445
+ page_content=doc_data.get('document', ''),
446
+ metadata=doc_data.get('cmetadata', {})
447
+ )
448
+ # Use weighted text score for new documents
449
+ doc_map[doc_id] = (doc, text_score * text_weight)
450
+ except Exception as e:
451
+ logger.error(f"Full-text search error on field {field_name}: {str(e)}")
452
+
453
+ # Convert the document map back to a list
454
+ combined_items = list(doc_map.values())
455
+
456
+ # Apply reranking rules
457
+ if reranking_config:
458
+ combined_items = self._apply_reranking(combined_items, reranking_config)
459
+ elif reranker: # Fallback to legacy reranker parameter
460
+ combined_items = self._apply_reranking(combined_items, reranker)
461
+
462
+ # Apply cutoff filter
463
+ if cut_off:
464
+ combined_items = [item for item in combined_items if abs(item[1]) >= cut_off]
465
+
466
+ # Sort by score and limit results
467
+ # DISABLED: for chroma we want ascending order (lower score is better), for others descending
468
+ # combined_items.sort(key=lambda x: x[1], reverse= self.vectorstore_type.lower() != 'chroma')
469
+ combined_items = combined_items[:search_top]
470
+
471
+ # Format output based on doctype
472
+ if doctype == 'code':
473
+ return code_format(combined_items)
474
+ else:
475
+ response = []
476
+ for doc, score in combined_items:
477
+ response.append({
478
+ 'page_content': doc.page_content,
479
+ 'metadata': doc.metadata,
480
+ 'score': score
481
+ })
482
+ return response
483
+
484
+ def _apply_reranking(self, items, reranker):
485
+ """Apply reranking rules to search results"""
486
+ if not items:
487
+ return items
488
+
489
+ # Create a copy of items with mutable scores for reranking
490
+ reranked_items = [(doc, score) for doc, score in items]
491
+
492
+ for field_name, config in reranker.items():
493
+ weight = config.get("weight", 1.0)
494
+ rules = config.get("rules", {})
495
+
496
+ for i, (doc, score) in enumerate(reranked_items):
497
+ metadata = doc.metadata
498
+ field_value = metadata.get(field_name)
499
+
500
+ if field_value is not None:
501
+ # Apply rules-based reranking
502
+ for rule_type, rule_value in rules.items():
503
+ if rule_type == "contains" and isinstance(rule_value, str) and isinstance(field_value, str):
504
+ if rule_value.lower() in field_value.lower():
505
+ # Boost score if field contains the rule value
506
+ reranked_items[i] = (doc, score * (1 + weight))
507
+
508
+ elif rule_type == "priority":
509
+ # Apply priority rule based on exact match
510
+ if str(field_value).lower() == str(rule_value).lower():
511
+ reranked_items[i] = (doc, score * (1 + weight))
512
+
513
+ # Handle sort rules after individual score adjustments
514
+ for field_name, config in reranker.items():
515
+ rules = config.get("rules", {})
516
+ if "sort" in rules:
517
+ sort_direction = rules["sort"]
518
+ # Assuming sort can be "asc" or "desc"
519
+ reverse_sort = sort_direction.lower() == "desc"
520
+
521
+ # Sort based on the specified field
522
+ reranked_items.sort(
523
+ key=lambda x: (x[0].metadata.get(field_name, None) is not None,
524
+ x[0].metadata.get(field_name, ""),
525
+ x[1]),
526
+ reverse=reverse_sort
527
+ )
528
+
529
+ # Re-sort by score if no sort rules were applied
530
+ if not any("sort" in config.get("rules", {}) for config in reranker.values()):
531
+ reranked_items.sort(key=lambda x: x[1], reverse=True)
532
+
533
+ return reranked_items
534
+
535
+ def stepback_search(self, query:str, messages: list, doctype: str = 'code',
536
+ filter:dict={}, cut_off: float=0.5, search_top:int=10,
537
+ full_text_search: Optional[Dict[str, Any]] = None,
538
+ reranking_config: Optional[Dict[str, Dict[str, Any]]] = None,
539
+ extended_search: Optional[List[str]] = None):
540
+ """Enhanced stepback search using JSON configs for full-text search and reranking"""
541
+ result = self.llm.invoke([
542
+ HumanMessage(
543
+ content=[
544
+ {
545
+ "type": "text",
546
+ "text": STEPBACK_PROMPT.format(input=query, messages=messages)
547
+ }
548
+ ]
549
+ )
550
+ ])
551
+ search_results = self.search_documents(
552
+ result.content, doctype, filter, cut_off, search_top,
553
+ full_text_search=full_text_search,
554
+ reranking_config=reranking_config,
555
+ extended_search=extended_search
556
+ )
557
+ return search_results
558
+
559
+ def stepback_summary(self, query:str, messages: list, doctype: str = 'code',
560
+ filter:dict={}, cut_off: float=0.5, search_top:int=10,
561
+ full_text_search: Optional[Dict[str, Any]] = None,
562
+ reranking_config: Optional[Dict[str, Dict[str, Any]]] = None,
563
+ extended_search: Optional[List[str]] = None):
564
+ """Enhanced stepback summary using JSON configs for full-text search and reranking"""
565
+ search_results = self.stepback_search(
566
+ query, messages, doctype, filter, cut_off, search_top,
567
+ full_text_search=full_text_search,
568
+ reranking_config=reranking_config,
569
+ extended_search=extended_search
570
+ )
571
+ result = self.llm.invoke([
572
+ HumanMessage(
573
+ content=[
574
+ {
575
+ "type": "text",
576
+ "text": GET_ANSWER_PROMPT.format(input=query, search_results=search_results, messages=messages)
577
+ }
578
+ ]
579
+ )
580
+ ])
581
+ return result.content
582
+
583
+ def _log_data(self, message: str, tool_name: str = "index_data"):
584
+ """Log data and dispatch custom event for indexing progress"""
585
+
586
+ try:
587
+ dispatch_custom_event(
588
+ name="thinking_step",
589
+ data={
590
+ "message": message,
591
+ "tool_name": tool_name,
592
+ "toolkit": "vectorstore",
593
+ },
594
+ )
595
+ except Exception as e:
596
+ logger.warning(f"Failed to dispatch progress event: {str(e)}")
597
+
598
+ def get_available_tools(self):
599
+ return [
600
+ {
601
+ "ref": self.index_documents,
602
+ "name": "indexDocuments",
603
+ "description": "Index documents in the vectorstore",
604
+ "args_schema": IndexDocumentsModel
605
+ },
606
+ {
607
+ "ref": self.search_documents,
608
+ "name": "searchDocuments",
609
+ "description": "Search documents in the vectorstore",
610
+ "args_schema": SearchDocumentsModel
611
+ },
612
+ {
613
+ "ref": self.stepback_search,
614
+ "name": "stepbackSearch",
615
+ "description": "Search in the vectorstore using stepback technique",
616
+ "args_schema": StepBackSearchDocumentsModel
617
+ },
618
+ {
619
+ "ref": self.stepback_summary,
620
+ "name": "stepbackSummary",
621
+ "description": "Get summary of search results using stepback technique",
622
+ "args_schema": StepBackSearchDocumentsModel
623
+ }
624
+ ]