alita-sdk 0.3.149__tar.gz → 0.3.151__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.149 → alita_sdk-0.3.151}/PKG-INFO +1 -1
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/__init__.py +9 -9
- alita_sdk-0.3.151/alita_sdk/runtime/__init__.py +33 -0
- alita_sdk-0.3.151/alita_sdk/runtime/clients/__init__.py +12 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/clients/client.py +4 -3
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/assistant.py +21 -3
- alita_sdk-0.3.151/alita_sdk/runtime/langchain/store_manager.py +46 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/llms/preloaded.py +5 -1
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/toolkits/application.py +5 -3
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/toolkits/tools.py +15 -5
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/utils/logging.py +7 -1
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/utils/save_dataframe.py +5 -2
- alita_sdk-0.3.151/alita_sdk/tools/__init__.py +205 -0
- alita_sdk-0.3.151/alita_sdk/tools/memory/__init__.py +48 -0
- alita_sdk-0.3.151/alita_sdk/tools/postman/__init__.py +103 -0
- alita_sdk-0.3.151/alita_sdk/tools/postman/api_wrapper.py +2032 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk.egg-info/PKG-INFO +1 -1
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk.egg-info/SOURCES.txt +4 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/pyproject.toml +1 -1
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/tests/test_ado_analysis.py +1 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/tests/test_github_analysis.py +1 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/tests/test_gitlab_analysis.py +1 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/tests/test_jira_analysis.py +1 -0
- alita_sdk-0.3.149/alita_sdk/runtime/__init__.py +0 -29
- alita_sdk-0.3.149/alita_sdk/runtime/clients/__init__.py +0 -1
- alita_sdk-0.3.149/alita_sdk/tools/__init__.py +0 -178
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/LICENSE +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/README.md +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/analysis/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/analysis/ado_analyse/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/analysis/ado_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/analysis/github_analyse/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/analysis/github_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/analysis/gitlab_analyse/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/analysis/gitlab_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/analysis/jira_analyse/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/analysis/jira_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/browseruse/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/browseruse/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/agents/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/agents/baseclass.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/agents/knowledge_gap_agent.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/agents/long_writer_agent.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/agents/planner_agent.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/agents/proofreader_agent.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/agents/thinking_agent.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/agents/tool_agents/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/agents/tool_agents/crawl_agent.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/agents/tool_agents/search_agent.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/agents/tool_selector_agent.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/agents/utils/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/agents/utils/parse_output.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/agents/writer_agent.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/deep_research.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/examples/deep_example.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/examples/iterative_example.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/examples/report_plan_example.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/iterative_research.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/llm_config.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/main.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/tools/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/tools/crawl_website.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/tools/web_search.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/utils/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/utils/md_to_pdf.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/deep_researcher/utils/os.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/community/utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/clients/artifact.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/clients/datasource.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/clients/prompt.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/constants.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/indexer.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/langraph_agent.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/tools/git.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/tools/log.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/tools/state.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/langchain/utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/llms/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/llms/alita.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/toolkits/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/toolkits/artifact.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/toolkits/datasource.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/toolkits/prompt.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/agent.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/application.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/artifact.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/datasource.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/echo.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/function.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/llm.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/loop.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/loop_output.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/mcp_server_tool.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/prompt.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/router.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/tool.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/tools/vectorstore.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/utils/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/utils/constants.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/utils/evaluate.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/utils/streamlit.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/runtime/utils/utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/ado/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/ado/repos/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/ado/test_plan/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/ado/utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/ado/wiki/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/ado/work_item/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/ado/work_item/ado_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/azure_ai/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/base/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/base/tool.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/bitbucket/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/bitbucket/tools.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/browser/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/browser/crawler.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/browser/google_search_rag.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/browser/utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/browser/wiki.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/carrier/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/carrier/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/carrier/backend_tests_tool.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/carrier/carrier_sdk.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/carrier/tools.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/carrier/utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/constants.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/models.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/sematic/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/chunkers/utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/cloud/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/code/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/code/linter/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/code/sonar/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/confluence/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/confluence/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/confluence/loader.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/confluence/utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/elastic/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/elitea_base.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/figma/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/figma/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/github/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/github/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/github/github_client.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/github/schemas.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/github/tool.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/github/tool_prompts.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/gitlab/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/gitlab/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/gitlab/tools.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/gitlab/utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/gmail/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/gmail/utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/google_places/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/jira/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/jira/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/keycloak/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/llm/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/llm/img_utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/llm/llm_utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/localgit/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/localgit/local_git.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/localgit/tool.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/ocr/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/ocr/text_detection.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/openapi/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pptx/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/qtest/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/qtest/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/qtest/tool.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/rally/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/rally/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/report_portal/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/salesforce/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/salesforce/model.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/servicenow/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/sharepoint/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/sharepoint/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/sharepoint/utils.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/sql/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/sql/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/sql/models.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/testio/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/testio/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/testrail/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/utils/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/utils/content_parser.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/xray/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/xray/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/yagmail/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/zephyr/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/zephyr/rest_client.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk.egg-info/dependency_links.txt +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk.egg-info/requires.txt +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/alita_sdk.egg-info/top_level.txt +0 -0
- {alita_sdk-0.3.149 → alita_sdk-0.3.151}/setup.cfg +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.151
|
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>
|
6
6
|
License-Expression: Apache-2.0
|
@@ -9,13 +9,13 @@ This package contains three main modules:
|
|
9
9
|
|
10
10
|
__version__ = "0.3.142"
|
11
11
|
|
12
|
-
|
13
|
-
from .runtime import *
|
14
|
-
from .tools import *
|
15
|
-
from .community import *
|
12
|
+
__all__ = ["runtime", "tools", "community"]
|
16
13
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
14
|
+
import importlib
|
15
|
+
|
16
|
+
def __getattr__(name):
|
17
|
+
if name in __all__:
|
18
|
+
module = importlib.import_module(f".{name}", __name__)
|
19
|
+
globals()[name] = module
|
20
|
+
return module
|
21
|
+
raise AttributeError(f"module {__name__} has no attribute {name}")
|
@@ -0,0 +1,33 @@
|
|
1
|
+
"""
|
2
|
+
Alita SDK Runtime Module
|
3
|
+
|
4
|
+
This module contains the core runtime functionality for building langchain agents.
|
5
|
+
Includes agents, clients, language models, and utilities.
|
6
|
+
"""
|
7
|
+
|
8
|
+
import importlib
|
9
|
+
|
10
|
+
_modules = [
|
11
|
+
"agents",
|
12
|
+
"clients",
|
13
|
+
"langchain",
|
14
|
+
"llamaindex",
|
15
|
+
"llms",
|
16
|
+
"toolkits",
|
17
|
+
"tools",
|
18
|
+
"utils",
|
19
|
+
]
|
20
|
+
|
21
|
+
__all__ = _modules + ["get_tools", "get_toolkits"]
|
22
|
+
|
23
|
+
def __getattr__(name):
|
24
|
+
if name in _modules:
|
25
|
+
module = importlib.import_module(f".{name}", __name__)
|
26
|
+
globals()[name] = module
|
27
|
+
return module
|
28
|
+
if name in {"get_tools", "get_toolkits"}:
|
29
|
+
toolkits = importlib.import_module(".toolkits.tools", __name__)
|
30
|
+
value = getattr(toolkits, name)
|
31
|
+
globals()[name] = value
|
32
|
+
return value
|
33
|
+
raise AttributeError(f"module {__name__} has no attribute {name}")
|
@@ -0,0 +1,12 @@
|
|
1
|
+
"""
|
2
|
+
Runtime clients package.
|
3
|
+
"""
|
4
|
+
|
5
|
+
try:
|
6
|
+
from .client import AlitaClient
|
7
|
+
__all__ = ['AlitaClient']
|
8
|
+
except ImportError as e:
|
9
|
+
# Handle case where dependencies are not available
|
10
|
+
import logging
|
11
|
+
logging.getLogger(__name__).debug(f"Failed to import AlitaClient: {e}")
|
12
|
+
__all__ = []
|
@@ -9,6 +9,7 @@ from langchain_core.messages import (
|
|
9
9
|
SystemMessage, BaseMessage,
|
10
10
|
)
|
11
11
|
from langchain_core.tools import ToolException
|
12
|
+
from langgraph.store.base import BaseStore
|
12
13
|
|
13
14
|
from ..langchain.assistant import Assistant as LangChainAssistant
|
14
15
|
# from ..llamaindex.assistant import Assistant as LLamaAssistant
|
@@ -178,7 +179,7 @@ class AlitaClient:
|
|
178
179
|
tools: Optional[list] = None, chat_history: Optional[List[Any]] = None,
|
179
180
|
app_type=None, memory=None, runtime='langchain',
|
180
181
|
application_variables: Optional[dict] = None,
|
181
|
-
version_details: Optional[dict] = None):
|
182
|
+
version_details: Optional[dict] = None, store: Optional[BaseStore] = None):
|
182
183
|
if tools is None:
|
183
184
|
tools = []
|
184
185
|
if chat_history is None:
|
@@ -210,11 +211,11 @@ class AlitaClient:
|
|
210
211
|
app_type = "openai"
|
211
212
|
if runtime == 'nonrunnable':
|
212
213
|
return LangChainAssistant(self, data, client, chat_history, app_type,
|
213
|
-
tools=tools, memory=memory)
|
214
|
+
tools=tools, memory=memory, store=store)
|
214
215
|
if runtime == 'langchain':
|
215
216
|
return LangChainAssistant(self, data, client,
|
216
217
|
chat_history, app_type,
|
217
|
-
tools=tools, memory=memory).runnable()
|
218
|
+
tools=tools, memory=memory, store=store).runnable()
|
218
219
|
elif runtime == 'llama':
|
219
220
|
raise NotImplementedError("LLama runtime is not supported")
|
220
221
|
|
@@ -5,8 +5,9 @@ from typing import Any, Optional
|
|
5
5
|
from langchain.agents import (
|
6
6
|
AgentExecutor, create_openai_tools_agent,
|
7
7
|
create_json_chat_agent)
|
8
|
+
from langgraph.store.base import BaseStore
|
9
|
+
|
8
10
|
from .agents.xml_chat import create_xml_chat_agent
|
9
|
-
# from ..langchain.mixedAgentRenderes import render_react_text_description_and_args
|
10
11
|
from .langraph_agent import create_graph
|
11
12
|
from langchain_core.messages import (
|
12
13
|
BaseMessage, SystemMessage, HumanMessage
|
@@ -28,7 +29,8 @@ class Assistant:
|
|
28
29
|
chat_history: list[BaseMessage] = [],
|
29
30
|
app_type: str = "openai",
|
30
31
|
tools: Optional[list] = [],
|
31
|
-
memory: Optional[Any] = None
|
32
|
+
memory: Optional[Any] = None,
|
33
|
+
store: Optional[BaseStore] = None):
|
32
34
|
|
33
35
|
self.client = copy(client)
|
34
36
|
self.client.max_tokens = data['llm_settings']['max_tokens']
|
@@ -40,6 +42,7 @@ class Assistant:
|
|
40
42
|
|
41
43
|
self.app_type = app_type
|
42
44
|
self.memory = memory
|
45
|
+
self.store = store
|
43
46
|
|
44
47
|
logger.debug("Data for agent creation: %s", data)
|
45
48
|
logger.info("App type: %s", app_type)
|
@@ -58,7 +61,10 @@ class Assistant:
|
|
58
61
|
raise ToolException("Non-pipeline agents cannot have pipelines as a toolkits. "
|
59
62
|
"Review toolkits configuration or use pipeline as master agent.")
|
60
63
|
|
61
|
-
|
64
|
+
# configure memory store if memory tool is defined
|
65
|
+
memory_tool = next((tool for tool in data['tools'] if tool['type'] == 'memory'), None)
|
66
|
+
self._configure_store(memory_tool)
|
67
|
+
self.tools = get_tools(data['tools'], alita_client=alita, llm=self.client, memory_store=self.store)
|
62
68
|
if app_type == "pipeline":
|
63
69
|
self.prompt = data['instructions']
|
64
70
|
else:
|
@@ -94,6 +100,18 @@ class Assistant:
|
|
94
100
|
except Exception as e:
|
95
101
|
logger.info(f"Client was created with client setting: temperature - {self.client.temperature} : {self.client.max_tokens}")
|
96
102
|
|
103
|
+
def _configure_store(self, memory_tool: dict | None) -> None:
|
104
|
+
"""
|
105
|
+
Configure the memory store based on a memory_tool definition.
|
106
|
+
Only creates a new store if one does not already exist.
|
107
|
+
"""
|
108
|
+
if not memory_tool or self.store is not None:
|
109
|
+
return
|
110
|
+
from .store_manager import get_manager
|
111
|
+
conn_str = memory_tool.get('settings', {}).get('connection_string', '')
|
112
|
+
store = get_manager().get_store(conn_str)
|
113
|
+
self.store = store
|
114
|
+
|
97
115
|
def runnable(self):
|
98
116
|
if self.app_type == 'pipeline':
|
99
117
|
return self.pipeline()
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import threading
|
2
|
+
import atexit
|
3
|
+
import logging
|
4
|
+
from psycopg import Connection
|
5
|
+
from langgraph.store.postgres import PostgresStore
|
6
|
+
|
7
|
+
logger = logging.getLogger(__name__)
|
8
|
+
|
9
|
+
class StoreManager:
|
10
|
+
_instance = None
|
11
|
+
_lock = threading.Lock()
|
12
|
+
|
13
|
+
def __new__(cls):
|
14
|
+
if cls._instance is None:
|
15
|
+
with cls._lock:
|
16
|
+
if cls._instance is None:
|
17
|
+
cls._instance = super().__new__(cls)
|
18
|
+
cls._instance._stores = {}
|
19
|
+
return cls._instance
|
20
|
+
|
21
|
+
def get_store(self, conn_str: str) -> PostgresStore:
|
22
|
+
store = self._stores.get(conn_str)
|
23
|
+
if store is None:
|
24
|
+
logger.info(f"Creating new PostgresStore for connection: {conn_str}")
|
25
|
+
conn = Connection.connect(conn_str, autocommit=True, prepare_threshold=0)
|
26
|
+
store = PostgresStore(conn)
|
27
|
+
store.setup()
|
28
|
+
self._stores[conn_str] = store
|
29
|
+
return store
|
30
|
+
|
31
|
+
def shutdown(self) -> None:
|
32
|
+
logger.info("Shutting down StoreManager and closing all stores")
|
33
|
+
for store in list(self._stores.values()):
|
34
|
+
try:
|
35
|
+
conn = getattr(store, 'conn', None)
|
36
|
+
if conn:
|
37
|
+
conn.close()
|
38
|
+
except Exception:
|
39
|
+
pass
|
40
|
+
self._stores.clear()
|
41
|
+
|
42
|
+
_store_manager = StoreManager()
|
43
|
+
atexit.register(_store_manager.shutdown)
|
44
|
+
|
45
|
+
def get_manager() -> StoreManager:
|
46
|
+
return _store_manager
|
@@ -30,7 +30,11 @@ from langchain_core.language_models import BaseChatModel # pylint: disable=E040
|
|
30
30
|
from langchain_core.messages import AIMessage, AIMessageChunk # pylint: disable=E0401
|
31
31
|
from langchain_core.outputs import ChatGeneration, ChatGenerationChunk, ChatResult # pylint: disable=E0401
|
32
32
|
|
33
|
-
|
33
|
+
try:
|
34
|
+
from ..langchain.tools import log
|
35
|
+
except ImportError:
|
36
|
+
import logging as _logging
|
37
|
+
log = _logging.getLogger(__name__)
|
34
38
|
|
35
39
|
|
36
40
|
class PreloadedEmbeddings(Embeddings):
|
@@ -1,4 +1,6 @@
|
|
1
1
|
from typing import List, Any, Optional
|
2
|
+
|
3
|
+
from langgraph.store.base import BaseStore
|
2
4
|
from pydantic import create_model, BaseModel, Field
|
3
5
|
from langchain_community.agent_toolkits.base import BaseToolkit
|
4
6
|
from langchain_core.tools import BaseTool
|
@@ -19,8 +21,8 @@ class ApplicationToolkit(BaseToolkit):
|
|
19
21
|
)
|
20
22
|
|
21
23
|
@classmethod
|
22
|
-
def get_toolkit(cls, client: Any, application_id: int, application_version_id: int, app_api_key: str,
|
23
|
-
selected_tools: list[str] = []):
|
24
|
+
def get_toolkit(cls, client: Any, application_id: int, application_version_id: int, app_api_key: str,
|
25
|
+
selected_tools: list[str] = [], store: Optional[BaseStore] = None):
|
24
26
|
from ..llms.alita import AlitaChatModel
|
25
27
|
|
26
28
|
app_details = client.get_app_details(application_id)
|
@@ -37,7 +39,7 @@ class ApplicationToolkit(BaseToolkit):
|
|
37
39
|
"temperature": version_details['llm_settings']['temperature'],
|
38
40
|
}
|
39
41
|
|
40
|
-
app = client.application(AlitaChatModel(**settings), application_id, application_version_id)
|
42
|
+
app = client.application(AlitaChatModel(**settings), application_id, application_version_id, store=store)
|
41
43
|
return cls(tools=[Application(name=app_details.get("name"),
|
42
44
|
description=app_details.get("description"),
|
43
45
|
application=app,
|
@@ -1,19 +1,20 @@
|
|
1
1
|
import logging
|
2
2
|
|
3
|
+
from langchain_core.tools import ToolException
|
4
|
+
from langgraph.store.base import BaseStore
|
5
|
+
|
3
6
|
from alita_sdk.tools import get_toolkits as alita_toolkits
|
4
7
|
from alita_sdk.tools import get_tools as alita_tools
|
5
|
-
|
6
8
|
from .application import ApplicationToolkit
|
7
9
|
from .artifact import ArtifactToolkit
|
8
10
|
from .datasource import DatasourcesToolkit
|
9
11
|
from .prompt import PromptToolkit
|
10
12
|
from .subgraph import SubgraphToolkit
|
11
13
|
from .vectorstore import VectorStoreToolkit
|
12
|
-
|
14
|
+
from ..tools.mcp_server_tool import McpServerTool
|
13
15
|
# Import community tools
|
14
16
|
from ...community import get_toolkits as community_toolkits, get_tools as community_tools
|
15
|
-
|
16
|
-
from ..tools.mcp_server_tool import McpServerTool
|
17
|
+
from ...tools.memory import MemoryToolkit
|
17
18
|
|
18
19
|
logger = logging.getLogger(__name__)
|
19
20
|
|
@@ -24,13 +25,14 @@ def get_toolkits():
|
|
24
25
|
# DatasourcesToolkit.toolkit_config_schema(),
|
25
26
|
# ApplicationToolkit.toolkit_config_schema(),
|
26
27
|
ArtifactToolkit.toolkit_config_schema(),
|
28
|
+
MemoryToolkit.toolkit_config_schema(),
|
27
29
|
VectorStoreToolkit.toolkit_config_schema()
|
28
30
|
]
|
29
31
|
|
30
32
|
return core_toolkits + community_toolkits() + alita_toolkits()
|
31
33
|
|
32
34
|
|
33
|
-
def get_tools(tools_list: list, alita_client, llm) -> list:
|
35
|
+
def get_tools(tools_list: list, alita_client, llm, memory_store: BaseStore = None) -> list:
|
34
36
|
prompts = []
|
35
37
|
tools = []
|
36
38
|
|
@@ -65,6 +67,14 @@ def get_tools(tools_list: list, alita_client, llm) -> list:
|
|
65
67
|
selected_tools=[],
|
66
68
|
llm=llm
|
67
69
|
))
|
70
|
+
elif tool['type'] == 'memory':
|
71
|
+
if memory_store is None:
|
72
|
+
raise ToolException(f"Memory store is not provided for memory tool: {tool['name']}")
|
73
|
+
tools += MemoryToolkit.get_toolkit(
|
74
|
+
namespace=tool['settings'].get('namespace', str(tool['id'])),
|
75
|
+
store=memory_store,
|
76
|
+
toolkit_name=tool.get('toolkit_name', '')
|
77
|
+
).get_tools()
|
68
78
|
elif tool['type'] == 'artifact':
|
69
79
|
tools.extend(ArtifactToolkit.get_toolkit(
|
70
80
|
client=alita_client,
|
@@ -1,7 +1,12 @@
|
|
1
1
|
import logging
|
2
2
|
from functools import wraps
|
3
3
|
|
4
|
-
|
4
|
+
try:
|
5
|
+
from langchain_core.callbacks import dispatch_custom_event
|
6
|
+
except ImportError:
|
7
|
+
# Fallback stub if langchain_core is unavailable
|
8
|
+
def dispatch_custom_event(name: str, data: dict): # pragma: no cover
|
9
|
+
pass
|
5
10
|
|
6
11
|
|
7
12
|
class StreamlitCallbackHandler(logging.Handler):
|
@@ -42,6 +47,7 @@ def setup_streamlit_logging(
|
|
42
47
|
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
|
43
48
|
handler.setFormatter(formatter)
|
44
49
|
logger.addHandler(handler)
|
50
|
+
logger.setLevel(logging.INFO)
|
45
51
|
|
46
52
|
return handler
|
47
53
|
|
@@ -6,13 +6,16 @@ from typing import Any, Dict, Optional
|
|
6
6
|
from langchain_core.tools import ToolException
|
7
7
|
import pandas as pd
|
8
8
|
|
9
|
-
from
|
9
|
+
from typing import TYPE_CHECKING
|
10
|
+
|
11
|
+
if TYPE_CHECKING: # pragma: no cover - avoid heavy imports at runtime
|
12
|
+
from ..tools.artifact import ArtifactWrapper
|
10
13
|
|
11
14
|
logger = logging.getLogger(__name__)
|
12
15
|
|
13
16
|
|
14
17
|
def save_dataframe_to_artifact(
|
15
|
-
artifacts_wrapper: ArtifactWrapper,
|
18
|
+
artifacts_wrapper: 'ArtifactWrapper',
|
16
19
|
df: pd.DataFrame,
|
17
20
|
target_file: str,
|
18
21
|
csv_options: Optional[Dict[str, Any]] = None,
|
@@ -0,0 +1,205 @@
|
|
1
|
+
import logging
|
2
|
+
from importlib import import_module
|
3
|
+
|
4
|
+
logger = logging.getLogger(__name__)
|
5
|
+
|
6
|
+
# Available tools and toolkits - populated by safe imports
|
7
|
+
AVAILABLE_TOOLS = {}
|
8
|
+
AVAILABLE_TOOLKITS = {}
|
9
|
+
FAILED_IMPORTS = {}
|
10
|
+
|
11
|
+
def _safe_import_tool(tool_name, module_path, get_tools_name=None, toolkit_class_name=None):
|
12
|
+
"""Safely import a tool module and register available functions/classes."""
|
13
|
+
try:
|
14
|
+
module = __import__(f'alita_sdk.tools.{module_path}', fromlist=[''])
|
15
|
+
|
16
|
+
imported = {}
|
17
|
+
if get_tools_name and hasattr(module, get_tools_name):
|
18
|
+
imported['get_tools'] = getattr(module, get_tools_name)
|
19
|
+
|
20
|
+
if toolkit_class_name and hasattr(module, toolkit_class_name):
|
21
|
+
imported['toolkit_class'] = getattr(module, toolkit_class_name)
|
22
|
+
AVAILABLE_TOOLKITS[toolkit_class_name] = getattr(module, toolkit_class_name)
|
23
|
+
|
24
|
+
if imported:
|
25
|
+
AVAILABLE_TOOLS[tool_name] = imported
|
26
|
+
logger.debug(f"Successfully imported {tool_name}")
|
27
|
+
|
28
|
+
except Exception as e:
|
29
|
+
FAILED_IMPORTS[tool_name] = str(e)
|
30
|
+
logger.debug(f"Failed to import {tool_name}: {e}")
|
31
|
+
|
32
|
+
# Safe imports for all tools
|
33
|
+
_safe_import_tool('github', 'github', 'get_tools', 'AlitaGitHubToolkit')
|
34
|
+
_safe_import_tool('openapi', 'openapi', 'get_tools')
|
35
|
+
_safe_import_tool('jira', 'jira', 'get_tools', 'JiraToolkit')
|
36
|
+
_safe_import_tool('confluence', 'confluence', 'get_tools', 'ConfluenceToolkit')
|
37
|
+
_safe_import_tool('service_now', 'servicenow', 'get_tools', 'ServiceNowToolkit')
|
38
|
+
_safe_import_tool('gitlab', 'gitlab', 'get_tools', 'AlitaGitlabToolkit')
|
39
|
+
_safe_import_tool('gitlab_org', 'gitlab_org', 'get_tools', 'AlitaGitlabSpaceToolkit')
|
40
|
+
_safe_import_tool('zephyr', 'zephyr', 'get_tools', 'ZephyrToolkit')
|
41
|
+
_safe_import_tool('browser', 'browser', 'get_tools', 'BrowserToolkit')
|
42
|
+
_safe_import_tool('report_portal', 'report_portal', 'get_tools', 'ReportPortalToolkit')
|
43
|
+
_safe_import_tool('bitbucket', 'bitbucket', 'get_tools', 'AlitaBitbucketToolkit')
|
44
|
+
_safe_import_tool('testrail', 'testrail', 'get_tools', 'TestrailToolkit')
|
45
|
+
_safe_import_tool('testio', 'testio', 'get_tools', 'TestIOToolkit')
|
46
|
+
_safe_import_tool('xray_cloud', 'xray', 'get_tools', 'XrayToolkit')
|
47
|
+
_safe_import_tool('sharepoint', 'sharepoint', 'get_tools', 'SharepointToolkit')
|
48
|
+
_safe_import_tool('qtest', 'qtest', 'get_tools', 'QtestToolkit')
|
49
|
+
_safe_import_tool('zephyr_scale', 'zephyr_scale', 'get_tools', 'ZephyrScaleToolkit')
|
50
|
+
_safe_import_tool('zephyr_enterprise', 'zephyr_enterprise', 'get_tools', 'ZephyrEnterpriseToolkit')
|
51
|
+
_safe_import_tool('ado', 'ado', 'get_tools')
|
52
|
+
_safe_import_tool('ado_repos', 'ado.repos', 'get_tools', 'AzureDevOpsReposToolkit')
|
53
|
+
_safe_import_tool('ado_plans', 'ado.test_plan', None, 'AzureDevOpsPlansToolkit')
|
54
|
+
_safe_import_tool('ado_work_items', 'ado.work_item', None, 'AzureDevOpsWorkItemsToolkit')
|
55
|
+
_safe_import_tool('ado_wiki', 'ado.wiki', None, 'AzureDevOpsWikiToolkit')
|
56
|
+
_safe_import_tool('rally', 'rally', 'get_tools', 'RallyToolkit')
|
57
|
+
_safe_import_tool('sql', 'sql', 'get_tools', 'SQLToolkit')
|
58
|
+
_safe_import_tool('sonar', 'code.sonar', 'get_tools', 'SonarToolkit')
|
59
|
+
_safe_import_tool('google_places', 'google_places', 'get_tools', 'GooglePlacesToolkit')
|
60
|
+
_safe_import_tool('yagmail', 'yagmail', 'get_tools', 'AlitaYagmailToolkit')
|
61
|
+
_safe_import_tool('aws', 'cloud.aws', None, 'AWSToolkit')
|
62
|
+
_safe_import_tool('azure', 'cloud.azure', None, 'AzureToolkit')
|
63
|
+
_safe_import_tool('gcp', 'cloud.gcp', None, 'GCPToolkit')
|
64
|
+
_safe_import_tool('k8s', 'cloud.k8s', None, 'KubernetesToolkit')
|
65
|
+
_safe_import_tool('custom_open_api', 'custom_open_api', None, 'OpenApiToolkit')
|
66
|
+
_safe_import_tool('elastic', 'elastic', None, 'ElasticToolkit')
|
67
|
+
_safe_import_tool('keycloak', 'keycloak', None, 'KeycloakToolkit')
|
68
|
+
_safe_import_tool('localgit', 'localgit', None, 'AlitaLocalGitToolkit')
|
69
|
+
_safe_import_tool('pandas', 'pandas', 'get_tools', 'PandasToolkit')
|
70
|
+
_safe_import_tool('azure_search', 'azure_ai.search', 'get_tools', 'AzureSearchToolkit')
|
71
|
+
_safe_import_tool('figma', 'figma', 'get_tools', 'FigmaToolkit')
|
72
|
+
_safe_import_tool('salesforce', 'salesforce', 'get_tools', 'SalesforceToolkit')
|
73
|
+
_safe_import_tool('carrier', 'carrier', 'get_tools', 'AlitaCarrierToolkit')
|
74
|
+
_safe_import_tool('ocr', 'ocr', 'get_tools', 'OCRToolkit')
|
75
|
+
_safe_import_tool('pptx', 'pptx', 'get_tools', 'PPTXToolkit')
|
76
|
+
_safe_import_tool('postman', 'postman', 'get_tools', 'PostmanToolkit')
|
77
|
+
|
78
|
+
# Log import summary
|
79
|
+
available_count = len(AVAILABLE_TOOLS)
|
80
|
+
total_attempted = len(AVAILABLE_TOOLS) + len(FAILED_IMPORTS)
|
81
|
+
logger.info(f"Tool imports completed: {available_count}/{total_attempted} successful")
|
82
|
+
|
83
|
+
def get_tools(tools_list, alita, llm, *args, **kwargs):
|
84
|
+
tools = []
|
85
|
+
for tool in tools_list:
|
86
|
+
# validate tool name syntax - it cannot be started with _
|
87
|
+
for tool_name in tool.get('settings', {}).get('selected_tools', []):
|
88
|
+
if isinstance(tool_name, str) and tool_name.startswith('_'):
|
89
|
+
raise ValueError(f"Tool name '{tool_name}' from toolkit '{tool.get('type', '')}' cannot start with '_'")
|
90
|
+
|
91
|
+
tool['settings']['alita'] = alita
|
92
|
+
tool['settings']['llm'] = llm
|
93
|
+
tool_type = tool['type']
|
94
|
+
|
95
|
+
# Check if tool is available and has get_tools function
|
96
|
+
if tool_type in AVAILABLE_TOOLS and 'get_tools' in AVAILABLE_TOOLS[tool_type]:
|
97
|
+
try:
|
98
|
+
get_tools_func = AVAILABLE_TOOLS[tool_type]['get_tools']
|
99
|
+
|
100
|
+
# Handle special cases for ADO tools
|
101
|
+
if tool_type in ['ado_boards', 'ado_wiki', 'ado_plans']:
|
102
|
+
tools.extend(get_tools_func(tool_type, tool))
|
103
|
+
else:
|
104
|
+
tools.extend(get_tools_func(tool))
|
105
|
+
|
106
|
+
except Exception as e:
|
107
|
+
logger.error(f"Error getting tools for {tool_type}: {e}")
|
108
|
+
|
109
|
+
# Handle ADO repos special case (it might be requested as azure_devops_repos)
|
110
|
+
elif tool_type in ['ado_repos', 'azure_devops_repos'] and 'ado_repos' in AVAILABLE_TOOLS:
|
111
|
+
try:
|
112
|
+
get_tools_func = AVAILABLE_TOOLS['ado_repos']['get_tools']
|
113
|
+
tools.extend(get_tools_func(tool))
|
114
|
+
except Exception as e:
|
115
|
+
logger.error(f"Error getting ADO repos tools: {e}")
|
116
|
+
|
117
|
+
# Handle custom modules
|
118
|
+
elif tool.get("settings", {}).get("module"):
|
119
|
+
try:
|
120
|
+
settings = tool.get("settings", {})
|
121
|
+
mod = import_module(settings.pop("module"))
|
122
|
+
tkitclass = getattr(mod, settings.pop("class"))
|
123
|
+
toolkit = tkitclass.get_toolkit(**tool["settings"])
|
124
|
+
tools.extend(toolkit.get_tools())
|
125
|
+
except Exception as e:
|
126
|
+
logger.error(f"Error in getting custom toolkit: {e}")
|
127
|
+
|
128
|
+
else:
|
129
|
+
# Tool not available or not found
|
130
|
+
if tool_type in FAILED_IMPORTS:
|
131
|
+
logger.warning(f"Tool '{tool_type}' is not available: {FAILED_IMPORTS[tool_type]}")
|
132
|
+
else:
|
133
|
+
logger.warning(f"Unknown tool type: {tool_type}")
|
134
|
+
|
135
|
+
return tools
|
136
|
+
|
137
|
+
def get_toolkits():
|
138
|
+
"""Return toolkit configurations for all successfully imported toolkits."""
|
139
|
+
toolkit_configs = []
|
140
|
+
|
141
|
+
for toolkit_name, toolkit_class in AVAILABLE_TOOLKITS.items():
|
142
|
+
try:
|
143
|
+
if hasattr(toolkit_class, 'toolkit_config_schema'):
|
144
|
+
toolkit_configs.append(toolkit_class.toolkit_config_schema())
|
145
|
+
else:
|
146
|
+
logger.debug(f"Toolkit {toolkit_name} does not have toolkit_config_schema method")
|
147
|
+
except Exception as e:
|
148
|
+
logger.error(f"Error getting config schema for {toolkit_name}: {e}")
|
149
|
+
|
150
|
+
logger.info(f"Successfully loaded {len(toolkit_configs)} toolkit configurations")
|
151
|
+
return toolkit_configs
|
152
|
+
|
153
|
+
def get_available_tools():
|
154
|
+
"""Return list of available tool types."""
|
155
|
+
return list(AVAILABLE_TOOLS.keys())
|
156
|
+
|
157
|
+
def get_failed_imports():
|
158
|
+
"""Return dictionary of failed imports and their error messages."""
|
159
|
+
return FAILED_IMPORTS.copy()
|
160
|
+
|
161
|
+
def get_available_toolkits():
|
162
|
+
"""Return list of available toolkit class names."""
|
163
|
+
return list(AVAILABLE_TOOLKITS.keys())
|
164
|
+
|
165
|
+
def diagnose_imports():
|
166
|
+
"""Print diagnostic information about tool imports."""
|
167
|
+
available_count = len(AVAILABLE_TOOLS)
|
168
|
+
failed_count = len(FAILED_IMPORTS)
|
169
|
+
total_count = available_count + failed_count
|
170
|
+
|
171
|
+
print(f"=== Tool Import Diagnostic ===")
|
172
|
+
print(f"Total tools: {total_count}")
|
173
|
+
print(f"Successfully imported: {available_count}")
|
174
|
+
print(f"Failed imports: {failed_count}")
|
175
|
+
print(f"Success rate: {(available_count/total_count*100):.1f}%")
|
176
|
+
|
177
|
+
if AVAILABLE_TOOLS:
|
178
|
+
print(f"\n✅ Available tools ({len(AVAILABLE_TOOLS)}):")
|
179
|
+
for tool_name in sorted(AVAILABLE_TOOLS.keys()):
|
180
|
+
functions = []
|
181
|
+
if 'get_tools' in AVAILABLE_TOOLS[tool_name]:
|
182
|
+
functions.append('get_tools')
|
183
|
+
if 'toolkit_class' in AVAILABLE_TOOLS[tool_name]:
|
184
|
+
functions.append('toolkit')
|
185
|
+
print(f" - {tool_name}: {', '.join(functions)}")
|
186
|
+
|
187
|
+
if FAILED_IMPORTS:
|
188
|
+
print(f"\n❌ Failed imports ({len(FAILED_IMPORTS)}):")
|
189
|
+
for tool_name, error in FAILED_IMPORTS.items():
|
190
|
+
print(f" - {tool_name}: {error}")
|
191
|
+
|
192
|
+
if AVAILABLE_TOOLKITS:
|
193
|
+
print(f"\n🔧 Available toolkits ({len(AVAILABLE_TOOLKITS)}):")
|
194
|
+
for toolkit_name in sorted(AVAILABLE_TOOLKITS.keys()):
|
195
|
+
print(f" - {toolkit_name}")
|
196
|
+
|
197
|
+
# Export useful functions
|
198
|
+
__all__ = [
|
199
|
+
'get_tools',
|
200
|
+
'get_toolkits',
|
201
|
+
'get_available_tools',
|
202
|
+
'get_failed_imports',
|
203
|
+
'get_available_toolkits',
|
204
|
+
'diagnose_imports'
|
205
|
+
]
|
@@ -0,0 +1,48 @@
|
|
1
|
+
from typing import Optional, List
|
2
|
+
|
3
|
+
from langchain_core.tools import BaseToolkit, BaseTool
|
4
|
+
from langgraph.store.postgres import PostgresStore
|
5
|
+
try:
|
6
|
+
from langmem import create_manage_memory_tool, create_search_memory_tool
|
7
|
+
except ImportError:
|
8
|
+
# langmem is optional; define stubs to avoid import errors
|
9
|
+
def create_manage_memory_tool(*args, **kwargs): # pragma: no cover
|
10
|
+
raise ImportError("langmem is required for MemoryToolkit")
|
11
|
+
|
12
|
+
def create_search_memory_tool(*args, **kwargs): # pragma: no cover
|
13
|
+
raise ImportError("langmem is required for MemoryToolkit")
|
14
|
+
from pydantic import create_model, BaseModel, ConfigDict, Field, SecretStr
|
15
|
+
|
16
|
+
name = "memory"
|
17
|
+
|
18
|
+
class MemoryToolkit(BaseToolkit):
|
19
|
+
tools: List[BaseTool] = []
|
20
|
+
|
21
|
+
|
22
|
+
@staticmethod
|
23
|
+
def toolkit_config_schema() -> BaseModel:
|
24
|
+
return create_model(
|
25
|
+
name,
|
26
|
+
namespace=(str, Field(description="Memory namespace", json_schema_extra={'toolkit_name': True})),
|
27
|
+
connection_string=(Optional[SecretStr], Field(description="Connection string for vectorstore",
|
28
|
+
default=None,
|
29
|
+
json_schema_extra={'secret': True})),
|
30
|
+
__config__=ConfigDict(json_schema_extra={
|
31
|
+
'metadata': {
|
32
|
+
"label": "Memory",
|
33
|
+
"icon_url": "jira-icon.svg",
|
34
|
+
"categories": ["other"],
|
35
|
+
"extra_categories": ["long-term memory", "langmem"],
|
36
|
+
}
|
37
|
+
})
|
38
|
+
)
|
39
|
+
|
40
|
+
@classmethod
|
41
|
+
def get_toolkit(cls, namespace: str, store: PostgresStore, **kwargs):
|
42
|
+
return cls(tools=[
|
43
|
+
create_manage_memory_tool(namespace=namespace, store=store),
|
44
|
+
create_search_memory_tool(namespace=namespace, store=store)
|
45
|
+
])
|
46
|
+
|
47
|
+
def get_tools(self):
|
48
|
+
return self.tools
|