alita-sdk 0.3.423__tar.gz → 0.3.458__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of alita-sdk might be problematic. Click here for more details.
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/PKG-INFO +2 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/clients/client.py +45 -9
- alita_sdk-0.3.458/alita_sdk/runtime/clients/mcp_discovery.py +342 -0
- alita_sdk-0.3.458/alita_sdk/runtime/clients/mcp_manager.py +262 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/assistant.py +10 -2
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/constants.py +1 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/langraph_agent.py +61 -16
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/utils.py +19 -3
- alita_sdk-0.3.458/alita_sdk/runtime/models/mcp_models.py +61 -0
- alita_sdk-0.3.458/alita_sdk/runtime/toolkits/__init__.py +24 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/artifact.py +5 -6
- alita_sdk-0.3.458/alita_sdk/runtime/toolkits/mcp.py +895 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/tools.py +62 -3
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/function.py +2 -1
- alita_sdk-0.3.458/alita_sdk/runtime/tools/mcp_inspect_tool.py +284 -0
- alita_sdk-0.3.458/alita_sdk/runtime/tools/mcp_remote_tool.py +166 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/mcp_server_tool.py +3 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/vectorstore_base.py +17 -2
- alita_sdk-0.3.458/alita_sdk/runtime/utils/mcp_oauth.py +164 -0
- alita_sdk-0.3.458/alita_sdk/runtime/utils/mcp_sse_client.py +405 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/streamlit.py +34 -3
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/toolkit_utils.py +14 -4
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/__init__.py +5 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/ado/repos/__init__.py +1 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/ado/test_plan/__init__.py +1 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/ado/wiki/__init__.py +1 -5
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/ado/work_item/__init__.py +1 -5
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/base_indexer_toolkit.py +10 -6
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/bitbucket/__init__.py +1 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +1 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/code/sonar/__init__.py +1 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/confluence/__init__.py +2 -2
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/github/__init__.py +2 -2
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/gitlab/__init__.py +2 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/gitlab/api_wrapper.py +5 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/gitlab_org/__init__.py +1 -2
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/google_places/__init__.py +2 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/jira/__init__.py +1 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/memory/__init__.py +1 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/__init__.py +1 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/postman/__init__.py +2 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pptx/__init__.py +2 -2
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/qtest/__init__.py +3 -3
- alita_sdk-0.3.458/alita_sdk/tools/qtest/api_wrapper.py +2081 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/rally/__init__.py +1 -2
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/report_portal/__init__.py +1 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/salesforce/__init__.py +1 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/servicenow/__init__.py +2 -3
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/sharepoint/__init__.py +1 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/sharepoint/api_wrapper.py +22 -2
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/sharepoint/authorization_helper.py +17 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/slack/__init__.py +1 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/sql/__init__.py +2 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/testio/__init__.py +1 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/testrail/__init__.py +1 -3
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/xray/__init__.py +2 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr/__init__.py +2 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_enterprise/__init__.py +1 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_essential/__init__.py +1 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_scale/__init__.py +1 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_squad/__init__.py +1 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk.egg-info/PKG-INFO +2 -1
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk.egg-info/SOURCES.txt +8 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk.egg-info/requires.txt +1 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/pyproject.toml +2 -2
- alita_sdk-0.3.423/alita_sdk/tools/qtest/api_wrapper.py +0 -759
- alita_sdk-0.3.423/alita_sdk/tools/vector_adapters/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/LICENSE +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/README.md +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/community/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/community/utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/ado.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/azure_search.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/bigquery.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/bitbucket.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/browser.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/carrier.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/confluence.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/delta_lake.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/embedding.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/figma.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/github.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/gitlab.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/google_places.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/jira.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/pgvector.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/postman.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/qtest.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/rally.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/report_portal.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/salesforce.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/service_now.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/sharepoint.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/slack.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/sonar.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/sql.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/testio.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/testrail.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/xray.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/zephyr.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/zephyr_enterprise.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/configurations/zephyr_essential.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/clients/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/clients/artifact.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/clients/datasource.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/clients/prompt.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/clients/sandbox_client.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaJSONLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaMarkdownLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaPDFLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaPowerPointLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaPythonLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaTextLoader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/ImageParser.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/indexer.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/store_manager.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/git.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/log.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/state.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/llms/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/llms/preloaded.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/application.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/configurations.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/datasource.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/prompt.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/agent.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/application.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/artifact.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/datasource.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/echo.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/graph.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/image_generation.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/llm.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/loop.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/loop_output.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/prompt.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/router.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/sandbox.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/vectorstore.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
- {alita_sdk-0.3.423/alita_sdk/runtime/toolkits → alita_sdk-0.3.458/alita_sdk/runtime/utils}/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/constants.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/evaluate.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/logging.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/toolkit_runtime.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/ado/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/ado/utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/ado/work_item/ado_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/aws/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/aws/delta_lake/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/aws/delta_lake/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/aws/delta_lake/schemas.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/aws/delta_lake/tool.py +0 -0
- {alita_sdk-0.3.423/alita_sdk/runtime/utils → alita_sdk-0.3.458/alita_sdk/tools/azure_ai}/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
- {alita_sdk-0.3.423/alita_sdk/tools/azure_ai → alita_sdk-0.3.458/alita_sdk/tools/base}/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/base/tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/browser/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/browser/crawler.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/browser/google_search_rag.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/browser/utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/browser/wiki.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/backend_tests_tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/carrier_sdk.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/tools.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/__init__.py +0 -0
- {alita_sdk-0.3.423/alita_sdk/tools/base → alita_sdk-0.3.458/alita_sdk/tools/chunkers/code}/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/constants.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/models.py +0 -0
- {alita_sdk-0.3.423/alita_sdk/tools/chunkers/code → alita_sdk-0.3.458/alita_sdk/tools/chunkers/sematic}/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/sematic/json_chunker.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
- {alita_sdk-0.3.423/alita_sdk/tools/chunkers/sematic → alita_sdk-0.3.458/alita_sdk/tools/code}/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/code/linter/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/code_indexer_toolkit.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/confluence/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/confluence/loader.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/confluence/utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/elastic/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/elitea_base.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/figma/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/figma/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/github/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/github/github_client.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/github/schemas.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/github/tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/github/tool_prompts.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/gitlab/tools.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/gitlab/utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/gmail/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/gmail/utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/google/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/google/bigquery/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/google/bigquery/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/google/bigquery/schemas.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/google/bigquery/tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/jira/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/keycloak/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
- {alita_sdk-0.3.423/alita_sdk/tools/code → alita_sdk-0.3.458/alita_sdk/tools/llm}/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/llm/img_utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/llm/llm_utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/localgit/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/localgit/local_git.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/localgit/tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/non_code_indexer_toolkit.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/ocr/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/ocr/text_detection.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/openapi/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
- {alita_sdk-0.3.423/alita_sdk/tools/llm → alita_sdk-0.3.458/alita_sdk/tools/pandas/dataframe/executor}/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
- {alita_sdk-0.3.423/alita_sdk/tools/pandas/dataframe/executor → alita_sdk-0.3.458/alita_sdk/tools/pandas/dataframe/generator}/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/postman/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/postman/postman_analysis.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/qtest/tool.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/rally/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/salesforce/model.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/sharepoint/utils.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/slack/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/sql/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/sql/models.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/testio/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/utils/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/utils/available_tools_decorator.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/utils/content_parser.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/vector_adapters/VectorStoreAdapter.py +0 -0
- {alita_sdk-0.3.423/alita_sdk/tools/pandas/dataframe/generator → alita_sdk-0.3.458/alita_sdk/tools/vector_adapters}/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/xray/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/yagmail/__init__.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr/rest_client.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_essential/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_essential/client.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk.egg-info/dependency_links.txt +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/alita_sdk.egg-info/top_level.txt +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/setup.cfg +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/tests/test_ado_analysis.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/tests/test_github_analysis.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/tests/test_gitlab_analysis.py +0 -0
- {alita_sdk-0.3.423 → alita_sdk-0.3.458}/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.458
|
|
4
4
|
Summary: SDK for building langchain agents using resources from Alita
|
|
5
5
|
Author-email: Artem Rozumenko <artyom.rozumenko@gmail.com>, Mikalai Biazruchka <mikalai_biazruchka@epam.com>, Roman Mitusov <roman_mitusov@epam.com>, Ivan Krakhmaliuk <lifedj27@gmail.com>, Artem Dubrovskiy <ad13box@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -24,6 +24,7 @@ Requires-Dist: fastapi==0.115.9
|
|
|
24
24
|
Requires-Dist: httpcore==1.0.7
|
|
25
25
|
Requires-Dist: urllib3>=2
|
|
26
26
|
Requires-Dist: certifi==2024.8.30
|
|
27
|
+
Requires-Dist: aiohttp>=3.9.0
|
|
27
28
|
Provides-Extra: runtime
|
|
28
29
|
Requires-Dist: streamlit>=1.28.0; extra == "runtime"
|
|
29
30
|
Requires-Dist: langchain_core<0.4.0,>=0.3.76; extra == "runtime"
|
|
@@ -303,7 +303,7 @@ class AlitaClient:
|
|
|
303
303
|
app_type=None, memory=None, runtime='langchain',
|
|
304
304
|
application_variables: Optional[dict] = None,
|
|
305
305
|
version_details: Optional[dict] = None, store: Optional[BaseStore] = None,
|
|
306
|
-
llm: Optional[ChatOpenAI] = None):
|
|
306
|
+
llm: Optional[ChatOpenAI] = None, mcp_tokens: Optional[dict] = None):
|
|
307
307
|
if tools is None:
|
|
308
308
|
tools = []
|
|
309
309
|
if chat_history is None:
|
|
@@ -342,13 +342,16 @@ class AlitaClient:
|
|
|
342
342
|
app_type = "react"
|
|
343
343
|
elif app_type == 'autogen':
|
|
344
344
|
app_type = "react"
|
|
345
|
+
|
|
346
|
+
# LangChainAssistant constructor calls get_tools() which may raise McpAuthorizationRequired
|
|
347
|
+
# The exception will propagate naturally to the indexer worker's outer handler
|
|
345
348
|
if runtime == 'nonrunnable':
|
|
346
349
|
return LangChainAssistant(self, data, llm, chat_history, app_type,
|
|
347
|
-
tools=tools, memory=memory, store=store)
|
|
350
|
+
tools=tools, memory=memory, store=store, mcp_tokens=mcp_tokens)
|
|
348
351
|
if runtime == 'langchain':
|
|
349
352
|
return LangChainAssistant(self, data, llm,
|
|
350
353
|
chat_history, app_type,
|
|
351
|
-
tools=tools, memory=memory, store=store).runnable()
|
|
354
|
+
tools=tools, memory=memory, store=store, mcp_tokens=mcp_tokens).runnable()
|
|
352
355
|
elif runtime == 'llama':
|
|
353
356
|
raise NotImplementedError("LLama runtime is not supported")
|
|
354
357
|
|
|
@@ -568,14 +571,17 @@ class AlitaClient:
|
|
|
568
571
|
def predict_agent(self, llm: ChatOpenAI, instructions: str = "You are a helpful assistant.",
|
|
569
572
|
tools: Optional[list] = None, chat_history: Optional[List[Any]] = None,
|
|
570
573
|
memory=None, runtime='langchain', variables: Optional[list] = None,
|
|
571
|
-
store: Optional[BaseStore] = None, debug_mode: Optional[bool] = False
|
|
574
|
+
store: Optional[BaseStore] = None, debug_mode: Optional[bool] = False,
|
|
575
|
+
mcp_tokens: Optional[dict] = None):
|
|
572
576
|
"""
|
|
573
577
|
Create a predict-type agent with minimal configuration.
|
|
574
578
|
|
|
575
579
|
Args:
|
|
576
580
|
llm: The LLM to use
|
|
577
581
|
instructions: System instructions for the agent
|
|
578
|
-
tools: Optional list of
|
|
582
|
+
tools: Optional list of tool configurations (not tool instances) to provide to the agent.
|
|
583
|
+
Tool configs will be processed through get_tools() to create tool instances.
|
|
584
|
+
Each tool config should have 'type', 'settings', etc.
|
|
579
585
|
chat_history: Optional chat history
|
|
580
586
|
memory: Optional memory/checkpointer
|
|
581
587
|
runtime: Runtime type (default: 'langchain')
|
|
@@ -595,13 +601,27 @@ class AlitaClient:
|
|
|
595
601
|
|
|
596
602
|
# Create a minimal data structure for predict agent
|
|
597
603
|
# All LLM settings are taken from the passed client instance
|
|
604
|
+
# Note: 'tools' here are tool CONFIGURATIONS, not tool instances
|
|
605
|
+
# They will be converted to tool instances by LangChainAssistant via get_tools()
|
|
598
606
|
agent_data = {
|
|
599
607
|
'instructions': instructions,
|
|
600
|
-
'tools': tools, #
|
|
608
|
+
'tools': tools, # Tool configs that will be processed by get_tools()
|
|
601
609
|
'variables': variables
|
|
602
610
|
}
|
|
603
|
-
|
|
604
|
-
|
|
611
|
+
|
|
612
|
+
# LangChainAssistant constructor calls get_tools() which may raise McpAuthorizationRequired
|
|
613
|
+
# The exception will propagate naturally to the indexer worker's outer handler
|
|
614
|
+
return LangChainAssistant(
|
|
615
|
+
self,
|
|
616
|
+
agent_data,
|
|
617
|
+
llm,
|
|
618
|
+
chat_history,
|
|
619
|
+
"predict",
|
|
620
|
+
memory=memory,
|
|
621
|
+
store=store,
|
|
622
|
+
debug_mode=debug_mode,
|
|
623
|
+
mcp_tokens=mcp_tokens
|
|
624
|
+
).runnable()
|
|
605
625
|
|
|
606
626
|
def test_toolkit_tool(self, toolkit_config: dict, tool_name: str, tool_params: dict = None,
|
|
607
627
|
runtime_config: dict = None, llm_model: str = None,
|
|
@@ -742,7 +762,23 @@ class AlitaClient:
|
|
|
742
762
|
}
|
|
743
763
|
|
|
744
764
|
# Instantiate the toolkit with client and LLM support
|
|
745
|
-
|
|
765
|
+
try:
|
|
766
|
+
tools = instantiate_toolkit_with_client(toolkit_config, llm, self)
|
|
767
|
+
except Exception as toolkit_error:
|
|
768
|
+
# Re-raise McpAuthorizationRequired to allow proper handling upstream
|
|
769
|
+
from ..utils.mcp_oauth import McpAuthorizationRequired
|
|
770
|
+
if isinstance(toolkit_error, McpAuthorizationRequired):
|
|
771
|
+
raise
|
|
772
|
+
# For other errors, return error response
|
|
773
|
+
return {
|
|
774
|
+
"success": False,
|
|
775
|
+
"error": f"Failed to instantiate toolkit '{toolkit_config.get('toolkit_name')}': {str(toolkit_error)}",
|
|
776
|
+
"tool_name": tool_name,
|
|
777
|
+
"toolkit_config": toolkit_config_parsed_json,
|
|
778
|
+
"llm_model": llm_model,
|
|
779
|
+
"events_dispatched": events_dispatched,
|
|
780
|
+
"execution_time_seconds": 0.0
|
|
781
|
+
}
|
|
746
782
|
|
|
747
783
|
if not tools:
|
|
748
784
|
return {
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Dynamic MCP Server Discovery Client.
|
|
3
|
+
Implements the MCP protocol for discovering tools from remote servers.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import asyncio
|
|
7
|
+
import json
|
|
8
|
+
import logging
|
|
9
|
+
import time
|
|
10
|
+
from dataclasses import dataclass, field
|
|
11
|
+
from typing import Dict, List, Optional, Any, Set
|
|
12
|
+
from urllib.parse import urlparse
|
|
13
|
+
import aiohttp
|
|
14
|
+
from datetime import datetime, timedelta
|
|
15
|
+
|
|
16
|
+
from ..models.mcp_models import McpConnectionConfig, McpToolMetadata
|
|
17
|
+
|
|
18
|
+
logger = logging.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@dataclass
|
|
22
|
+
class McpServerInfo:
|
|
23
|
+
"""Information about an MCP server."""
|
|
24
|
+
name: str
|
|
25
|
+
url: str
|
|
26
|
+
headers: Optional[Dict[str, str]] = None
|
|
27
|
+
last_discovery: Optional[datetime] = None
|
|
28
|
+
tools: List[McpToolMetadata] = field(default_factory=list)
|
|
29
|
+
status: str = "unknown" # unknown, online, offline, error
|
|
30
|
+
error: Optional[str] = None
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class McpDiscoveryClient:
|
|
34
|
+
"""
|
|
35
|
+
Client for dynamically discovering tools from MCP servers.
|
|
36
|
+
Implements the MCP protocol for tool discovery.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__(
|
|
40
|
+
self,
|
|
41
|
+
discovery_interval: int = 300, # 5 minutes
|
|
42
|
+
request_timeout: int = 30,
|
|
43
|
+
max_retries: int = 3,
|
|
44
|
+
cache_ttl: int = 600 # 10 minutes
|
|
45
|
+
):
|
|
46
|
+
self.discovery_interval = discovery_interval
|
|
47
|
+
self.request_timeout = request_timeout
|
|
48
|
+
self.max_retries = max_retries
|
|
49
|
+
self.cache_ttl = cache_ttl
|
|
50
|
+
|
|
51
|
+
# Server registry
|
|
52
|
+
self.servers: Dict[str, McpServerInfo] = {}
|
|
53
|
+
self.session: Optional[aiohttp.ClientSession] = None
|
|
54
|
+
|
|
55
|
+
# Discovery state
|
|
56
|
+
self._discovery_task: Optional[asyncio.Task] = None
|
|
57
|
+
self._running = False
|
|
58
|
+
|
|
59
|
+
async def __aenter__(self):
|
|
60
|
+
"""Async context manager entry."""
|
|
61
|
+
await self.start()
|
|
62
|
+
return self
|
|
63
|
+
|
|
64
|
+
async def __aexit__(self, exc_type, exc_val, exc_tb):
|
|
65
|
+
"""Async context manager exit."""
|
|
66
|
+
await self.stop()
|
|
67
|
+
|
|
68
|
+
async def start(self):
|
|
69
|
+
"""Start the discovery client."""
|
|
70
|
+
if self._running:
|
|
71
|
+
return
|
|
72
|
+
|
|
73
|
+
self.session = aiohttp.ClientSession(
|
|
74
|
+
timeout=aiohttp.ClientTimeout(total=self.request_timeout)
|
|
75
|
+
)
|
|
76
|
+
self._running = True
|
|
77
|
+
|
|
78
|
+
# Start background discovery task
|
|
79
|
+
self._discovery_task = asyncio.create_task(self._discovery_loop())
|
|
80
|
+
logger.info("MCP Discovery Client started")
|
|
81
|
+
|
|
82
|
+
async def stop(self):
|
|
83
|
+
"""Stop the discovery client."""
|
|
84
|
+
if not self._running:
|
|
85
|
+
return
|
|
86
|
+
|
|
87
|
+
self._running = False
|
|
88
|
+
|
|
89
|
+
if self._discovery_task:
|
|
90
|
+
self._discovery_task.cancel()
|
|
91
|
+
try:
|
|
92
|
+
await self._discovery_task
|
|
93
|
+
except asyncio.CancelledError:
|
|
94
|
+
pass
|
|
95
|
+
|
|
96
|
+
if self.session:
|
|
97
|
+
await self.session.close()
|
|
98
|
+
|
|
99
|
+
logger.info("MCP Discovery Client stopped")
|
|
100
|
+
|
|
101
|
+
def add_server(self, server_name: str, connection_config: McpConnectionConfig):
|
|
102
|
+
"""Add an MCP server to discovery."""
|
|
103
|
+
server_info = McpServerInfo(
|
|
104
|
+
name=server_name,
|
|
105
|
+
url=connection_config.url,
|
|
106
|
+
headers=connection_config.headers
|
|
107
|
+
)
|
|
108
|
+
self.servers[server_name] = server_info
|
|
109
|
+
logger.info(f"Added MCP server for discovery: {server_name} at {connection_config.url}")
|
|
110
|
+
|
|
111
|
+
def remove_server(self, server_name: str):
|
|
112
|
+
"""Remove an MCP server from discovery."""
|
|
113
|
+
if server_name in self.servers:
|
|
114
|
+
del self.servers[server_name]
|
|
115
|
+
logger.info(f"Removed MCP server from discovery: {server_name}")
|
|
116
|
+
|
|
117
|
+
async def discover_server_tools(self, server_name: str, force: bool = False) -> List[McpToolMetadata]:
|
|
118
|
+
"""Discover tools from a specific MCP server."""
|
|
119
|
+
if server_name not in self.servers:
|
|
120
|
+
raise ValueError(f"Server {server_name} not registered for discovery")
|
|
121
|
+
|
|
122
|
+
server_info = self.servers[server_name]
|
|
123
|
+
|
|
124
|
+
# Check cache unless force refresh
|
|
125
|
+
if not force and self._is_cache_valid(server_info):
|
|
126
|
+
logger.debug(f"Using cached tools for server {server_name}")
|
|
127
|
+
return server_info.tools
|
|
128
|
+
|
|
129
|
+
try:
|
|
130
|
+
tools = await self._fetch_server_tools(server_info)
|
|
131
|
+
server_info.tools = tools
|
|
132
|
+
server_info.last_discovery = datetime.now()
|
|
133
|
+
server_info.status = "online"
|
|
134
|
+
server_info.error = None
|
|
135
|
+
|
|
136
|
+
logger.info(f"Discovered {len(tools)} tools from server {server_name}")
|
|
137
|
+
return tools
|
|
138
|
+
|
|
139
|
+
except Exception as e:
|
|
140
|
+
error_msg = f"Failed to discover tools from {server_name}: {e}"
|
|
141
|
+
logger.error(error_msg)
|
|
142
|
+
server_info.status = "error"
|
|
143
|
+
server_info.error = str(e)
|
|
144
|
+
return []
|
|
145
|
+
|
|
146
|
+
async def get_all_tools(self) -> Dict[str, List[McpToolMetadata]]:
|
|
147
|
+
"""Get all discovered tools from all servers."""
|
|
148
|
+
all_tools = {}
|
|
149
|
+
|
|
150
|
+
for server_name in self.servers:
|
|
151
|
+
tools = await self.discover_server_tools(server_name)
|
|
152
|
+
all_tools[server_name] = tools
|
|
153
|
+
|
|
154
|
+
return all_tools
|
|
155
|
+
|
|
156
|
+
def get_server_status(self, server_name: str) -> Optional[McpServerInfo]:
|
|
157
|
+
"""Get status information for a server."""
|
|
158
|
+
return self.servers.get(server_name)
|
|
159
|
+
|
|
160
|
+
def get_all_server_status(self) -> Dict[str, McpServerInfo]:
|
|
161
|
+
"""Get status information for all servers."""
|
|
162
|
+
return self.servers.copy()
|
|
163
|
+
|
|
164
|
+
async def _discovery_loop(self):
|
|
165
|
+
"""Background task for periodic tool discovery."""
|
|
166
|
+
while self._running:
|
|
167
|
+
try:
|
|
168
|
+
await self._perform_discovery()
|
|
169
|
+
await asyncio.sleep(self.discovery_interval)
|
|
170
|
+
except asyncio.CancelledError:
|
|
171
|
+
break
|
|
172
|
+
except Exception as e:
|
|
173
|
+
logger.error(f"Error in discovery loop: {e}")
|
|
174
|
+
await asyncio.sleep(60) # Wait before retrying
|
|
175
|
+
|
|
176
|
+
async def _perform_discovery(self):
|
|
177
|
+
"""Perform discovery on all registered servers."""
|
|
178
|
+
if not self.servers:
|
|
179
|
+
return
|
|
180
|
+
|
|
181
|
+
discovery_tasks = [
|
|
182
|
+
self.discover_server_tools(server_name)
|
|
183
|
+
for server_name in self.servers
|
|
184
|
+
]
|
|
185
|
+
|
|
186
|
+
results = await asyncio.gather(*discovery_tasks, return_exceptions=True)
|
|
187
|
+
|
|
188
|
+
# Log any errors
|
|
189
|
+
for i, result in enumerate(results):
|
|
190
|
+
if isinstance(result, Exception):
|
|
191
|
+
server_name = list(self.servers.keys())[i]
|
|
192
|
+
logger.error(f"Discovery failed for server {server_name}: {result}")
|
|
193
|
+
|
|
194
|
+
async def _fetch_server_tools(self, server_info: McpServerInfo) -> List[McpToolMetadata]:
|
|
195
|
+
"""Fetch tools from an MCP server using HTTP requests."""
|
|
196
|
+
if not self.session:
|
|
197
|
+
raise RuntimeError("Discovery client not started")
|
|
198
|
+
|
|
199
|
+
# MCP protocol: list_tools request
|
|
200
|
+
mcp_request = {
|
|
201
|
+
"jsonrpc": "2.0",
|
|
202
|
+
"id": f"discover_{int(time.time())}",
|
|
203
|
+
"method": "tools/list",
|
|
204
|
+
"params": {}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
headers = {"Content-Type": "application/json"}
|
|
208
|
+
if server_info.headers:
|
|
209
|
+
headers.update(server_info.headers)
|
|
210
|
+
|
|
211
|
+
async with self.session.post(
|
|
212
|
+
server_info.url,
|
|
213
|
+
json=mcp_request,
|
|
214
|
+
headers=headers
|
|
215
|
+
) as response:
|
|
216
|
+
|
|
217
|
+
if response.status != 200:
|
|
218
|
+
raise Exception(f"HTTP {response.status}: {await response.text()}")
|
|
219
|
+
|
|
220
|
+
data = await response.json()
|
|
221
|
+
|
|
222
|
+
if "error" in data:
|
|
223
|
+
raise Exception(f"MCP Error: {data['error']}")
|
|
224
|
+
|
|
225
|
+
# Parse MCP response
|
|
226
|
+
tools_data = data.get("result", {}).get("tools", [])
|
|
227
|
+
tools = []
|
|
228
|
+
|
|
229
|
+
for tool_data in tools_data:
|
|
230
|
+
try:
|
|
231
|
+
tool_metadata = McpToolMetadata(
|
|
232
|
+
name=tool_data.get("name", ""),
|
|
233
|
+
description=tool_data.get("description", ""),
|
|
234
|
+
server=server_info.name,
|
|
235
|
+
input_schema=tool_data.get("inputSchema", {}),
|
|
236
|
+
enabled=True
|
|
237
|
+
)
|
|
238
|
+
tools.append(tool_metadata)
|
|
239
|
+
except Exception as e:
|
|
240
|
+
logger.warning(f"Failed to parse tool from {server_info.name}: {e}")
|
|
241
|
+
|
|
242
|
+
return tools
|
|
243
|
+
|
|
244
|
+
def _is_cache_valid(self, server_info: McpServerInfo) -> bool:
|
|
245
|
+
"""Check if cached tools are still valid."""
|
|
246
|
+
if not server_info.last_discovery:
|
|
247
|
+
return False
|
|
248
|
+
|
|
249
|
+
cache_age = datetime.now() - server_info.last_discovery
|
|
250
|
+
return cache_age.total_seconds() < self.cache_ttl
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
class McpDiscoveryService:
|
|
254
|
+
"""
|
|
255
|
+
High-level service for managing MCP server discovery.
|
|
256
|
+
Integrates with the existing toolkit system.
|
|
257
|
+
"""
|
|
258
|
+
|
|
259
|
+
def __init__(self, discovery_client: Optional[McpDiscoveryClient] = None):
|
|
260
|
+
self.client = discovery_client or McpDiscoveryClient()
|
|
261
|
+
self._started = False
|
|
262
|
+
|
|
263
|
+
async def start(self):
|
|
264
|
+
"""Start the discovery service."""
|
|
265
|
+
if not self._started:
|
|
266
|
+
await self.client.start()
|
|
267
|
+
self._started = True
|
|
268
|
+
|
|
269
|
+
async def stop(self):
|
|
270
|
+
"""Stop the discovery service."""
|
|
271
|
+
if self._started:
|
|
272
|
+
await self.client.stop()
|
|
273
|
+
self._started = False
|
|
274
|
+
|
|
275
|
+
async def register_server(self, server_name: str, connection_config: McpConnectionConfig):
|
|
276
|
+
"""Register an MCP server for discovery."""
|
|
277
|
+
self.client.add_server(server_name, connection_config)
|
|
278
|
+
|
|
279
|
+
# Perform immediate discovery
|
|
280
|
+
await self.client.discover_server_tools(server_name, force=True)
|
|
281
|
+
|
|
282
|
+
def unregister_server(self, server_name: str):
|
|
283
|
+
"""Unregister an MCP server."""
|
|
284
|
+
self.client.remove_server(server_name)
|
|
285
|
+
|
|
286
|
+
async def get_server_tools(self, server_name: str) -> List[McpToolMetadata]:
|
|
287
|
+
"""Get tools from a specific server."""
|
|
288
|
+
return await self.client.discover_server_tools(server_name)
|
|
289
|
+
|
|
290
|
+
async def get_all_available_tools(self) -> Dict[str, List[McpToolMetadata]]:
|
|
291
|
+
"""Get all available tools from all registered servers."""
|
|
292
|
+
return await self.client.get_all_tools()
|
|
293
|
+
|
|
294
|
+
def get_server_health(self) -> Dict[str, Dict[str, Any]]:
|
|
295
|
+
"""Get health status of all servers."""
|
|
296
|
+
status_info = {}
|
|
297
|
+
|
|
298
|
+
for name, server_info in self.client.get_all_server_status().items():
|
|
299
|
+
status_info[name] = {
|
|
300
|
+
"status": server_info.status,
|
|
301
|
+
"url": server_info.url,
|
|
302
|
+
"last_discovery": server_info.last_discovery.isoformat() if server_info.last_discovery else None,
|
|
303
|
+
"tool_count": len(server_info.tools),
|
|
304
|
+
"error": server_info.error
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
return status_info
|
|
308
|
+
|
|
309
|
+
async def refresh_server(self, server_name: str):
|
|
310
|
+
"""Force refresh tools from a specific server."""
|
|
311
|
+
await self.client.discover_server_tools(server_name, force=True)
|
|
312
|
+
|
|
313
|
+
async def refresh_all_servers(self):
|
|
314
|
+
"""Force refresh tools from all servers."""
|
|
315
|
+
for server_name in self.client.servers:
|
|
316
|
+
await self.client.discover_server_tools(server_name, force=True)
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
# Global discovery service instance
|
|
320
|
+
_discovery_service: Optional[McpDiscoveryService] = None
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
def get_discovery_service() -> McpDiscoveryService:
|
|
324
|
+
"""Get the global MCP discovery service instance."""
|
|
325
|
+
global _discovery_service
|
|
326
|
+
if _discovery_service is None:
|
|
327
|
+
_discovery_service = McpDiscoveryService()
|
|
328
|
+
return _discovery_service
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
async def init_discovery_service():
|
|
332
|
+
"""Initialize the global discovery service."""
|
|
333
|
+
service = get_discovery_service()
|
|
334
|
+
await service.start()
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
async def shutdown_discovery_service():
|
|
338
|
+
"""Shutdown the global discovery service."""
|
|
339
|
+
global _discovery_service
|
|
340
|
+
if _discovery_service:
|
|
341
|
+
await _discovery_service.stop()
|
|
342
|
+
_discovery_service = None
|