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.
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/PKG-INFO +2 -1
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/clients/client.py +38 -0
- alita_sdk-0.3.184/alita_sdk/runtime/langchain/assistant.py +305 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/langraph_agent.py +65 -8
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/llms/alita.py +1 -1
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/tools.py +48 -0
- alita_sdk-0.3.184/alita_sdk/runtime/tools/llm.py +293 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/mcp_server_tool.py +15 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/streamlit.py +2 -1
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/__init__.py +1 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +55 -3
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/work_item/ado_wrapper.py +10 -6
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/api_wrapper.py +3 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/backend_tests_tool.py +101 -7
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/carrier_sdk.py +4 -0
- alita_sdk-0.3.184/alita_sdk/tools/slack/__init__.py +57 -0
- alita_sdk-0.3.184/alita_sdk/tools/slack/api_wrapper.py +190 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk.egg-info/PKG-INFO +2 -1
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk.egg-info/SOURCES.txt +2 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk.egg-info/requires.txt +1 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/pyproject.toml +2 -2
- alita_sdk-0.3.182/alita_sdk/runtime/langchain/assistant.py +0 -171
- alita_sdk-0.3.182/alita_sdk/runtime/tools/llm.py +0 -74
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/LICENSE +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/README.md +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/ado_analyse/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/ado_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/github_analyse/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/github_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/gitlab_analyse/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/gitlab_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/jira_analyse/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/analysis/jira_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/community/utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/clients/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/clients/artifact.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/clients/datasource.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/clients/prompt.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/constants.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/indexer.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/store_manager.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/git.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/log.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/state.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/langchain/utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/llms/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/llms/preloaded.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/application.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/artifact.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/datasource.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/prompt.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/agent.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/application.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/artifact.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/datasource.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/echo.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/function.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/loop.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/loop_output.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/prompt.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/router.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/tool.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/tools/vectorstore.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/constants.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/evaluate.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/logging.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/runtime/utils/utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/repos/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/test_plan/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/wiki/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ado/work_item/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/azure_ai/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/base/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/base/tool.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/bitbucket/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/bitbucket/tools.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/browser/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/browser/crawler.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/browser/google_search_rag.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/browser/utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/browser/wiki.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/tools.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/carrier/utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/constants.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/models.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/sematic/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/chunkers/utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/code/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/code/linter/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/code/sonar/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/confluence/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/confluence/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/confluence/loader.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/confluence/utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/elastic/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/elitea_base.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/figma/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/figma/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/github/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/github/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/github/github_client.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/github/schemas.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/github/tool.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/github/tool_prompts.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gitlab/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gitlab/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gitlab/tools.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gitlab/utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gmail/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/gmail/utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/google_places/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/jira/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/jira/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/keycloak/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/llm/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/llm/img_utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/llm/llm_utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/localgit/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/localgit/local_git.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/localgit/tool.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/memory/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ocr/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/ocr/text_detection.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/openapi/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/postman/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/postman/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/postman/postman_analysis.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pptx/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/qtest/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/qtest/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/qtest/tool.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/rally/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/rally/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/report_portal/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/salesforce/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/salesforce/model.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/servicenow/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/sharepoint/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/sharepoint/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/sharepoint/utils.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/sql/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/sql/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/sql/models.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/testio/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/testio/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/testrail/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/utils/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/utils/content_parser.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/xray/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/xray/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/yagmail/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr/rest_client.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_squad/__init__.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk.egg-info/dependency_links.txt +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/alita_sdk.egg-info/top_level.txt +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/setup.cfg +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/tests/test_ado_analysis.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/tests/test_github_analysis.py +0 -0
- {alita_sdk-0.3.182 → alita_sdk-0.3.184}/tests/test_gitlab_analysis.py +0 -0
- {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.
|
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,
|
503
|
-
|
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
|
-
|
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
|
-
|
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()
|