alita-sdk 0.3.175__tar.gz → 0.3.177__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.175 → alita_sdk-0.3.177}/PKG-INFO +2 -2
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/community/__init__.py +7 -17
- {alita_sdk-0.3.175/alita_sdk/runtime/langchain → alita_sdk-0.3.177/alita_sdk/runtime/langchain/document_loaders}/__init__.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/runtime/langchain/agents → alita_sdk-0.3.177/alita_sdk/runtime/langchain/interfaces}/__init__.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/runtime/langchain/tools → alita_sdk-0.3.177/alita_sdk/runtime/llms}/__init__.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/runtime/langchain/tools/bdd_parser → alita_sdk-0.3.177/alita_sdk/runtime/toolkits}/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/carrier/api_wrapper.py +6 -0
- alita_sdk-0.3.177/alita_sdk/tools/carrier/backend_tests_tool.py +461 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/carrier/carrier_sdk.py +18 -0
- alita_sdk-0.3.177/alita_sdk/tools/carrier/create_ui_test_tool.py +180 -0
- alita_sdk-0.3.177/alita_sdk/tools/carrier/run_ui_test_tool.py +521 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/carrier/tools.py +2 -1
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/confluence/api_wrapper.py +1 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk.egg-info/PKG-INFO +2 -2
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk.egg-info/SOURCES.txt +0 -31
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk.egg-info/requires.txt +1 -1
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/pyproject.toml +3 -3
- alita_sdk-0.3.175/alita_sdk/community/browseruse/__init__.py +0 -73
- alita_sdk-0.3.175/alita_sdk/community/browseruse/api_wrapper.py +0 -288
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/__init__.py +0 -70
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/agents/__init__.py +0 -1
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/agents/baseclass.py +0 -182
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/agents/knowledge_gap_agent.py +0 -74
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/agents/long_writer_agent.py +0 -251
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/agents/planner_agent.py +0 -124
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/agents/proofreader_agent.py +0 -80
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/agents/thinking_agent.py +0 -64
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/agents/tool_agents/__init__.py +0 -20
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/agents/tool_agents/crawl_agent.py +0 -87
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/agents/tool_agents/search_agent.py +0 -96
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/agents/tool_selector_agent.py +0 -83
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/agents/utils/parse_output.py +0 -148
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/agents/writer_agent.py +0 -63
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/api_wrapper.py +0 -116
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/deep_research.py +0 -185
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/examples/deep_example.py +0 -30
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/examples/iterative_example.py +0 -34
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/examples/report_plan_example.py +0 -27
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/iterative_research.py +0 -419
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/llm_config.py +0 -87
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/main.py +0 -67
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/tools/__init__.py +0 -2
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/tools/crawl_website.py +0 -109
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/tools/web_search.py +0 -294
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/utils/md_to_pdf.py +0 -8
- alita_sdk-0.3.175/alita_sdk/community/deep_researcher/utils/os.py +0 -21
- alita_sdk-0.3.175/alita_sdk/tools/carrier/backend_tests_tool.py +0 -160
- alita_sdk-0.3.175/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -199
- alita_sdk-0.3.175/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -394
- alita_sdk-0.3.175/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
- alita_sdk-0.3.175/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/LICENSE +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/README.md +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/community/analysis/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/community/analysis/ado_analyse/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/community/analysis/ado_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/community/analysis/github_analyse/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/community/analysis/github_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/community/analysis/gitlab_analyse/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/community/analysis/gitlab_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/community/analysis/jira_analyse/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/community/analysis/jira_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/community/utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/clients/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/clients/artifact.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/clients/client.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/clients/datasource.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/clients/prompt.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/community/deep_researcher/agents/utils → alita_sdk-0.3.177/alita_sdk/runtime/langchain}/__init__.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/community/deep_researcher/utils → alita_sdk-0.3.177/alita_sdk/runtime/langchain/agents}/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/assistant.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/constants.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/indexer.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/langraph_agent.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/runtime/langchain/document_loaders → alita_sdk-0.3.177/alita_sdk/runtime/langchain/retrievers}/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/store_manager.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/runtime/langchain/interfaces → alita_sdk-0.3.177/alita_sdk/runtime/langchain/tools}/__init__.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/runtime/langchain/retrievers → alita_sdk-0.3.177/alita_sdk/runtime/langchain/tools/bdd_parser}/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/tools/git.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/tools/log.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/tools/state.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/langchain/utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/llms/alita.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/llms/preloaded.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/toolkits/application.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/toolkits/artifact.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/toolkits/datasource.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/toolkits/prompt.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/toolkits/tools.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/runtime/llms → alita_sdk-0.3.177/alita_sdk/runtime/tools}/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/agent.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/application.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/artifact.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/datasource.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/echo.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/function.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/llm.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/loop.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/loop_output.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/mcp_server_tool.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/prompt.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/router.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/tool.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/tools/vectorstore.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/runtime/toolkits → alita_sdk-0.3.177/alita_sdk/runtime/utils}/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/utils/constants.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/utils/evaluate.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/utils/logging.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/utils/streamlit.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/runtime/utils/utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/ado/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/ado/repos/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/ado/test_plan/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/ado/utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/ado/wiki/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/ado/work_item/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/ado/work_item/ado_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/runtime/tools → alita_sdk-0.3.177/alita_sdk/tools/azure_ai}/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/runtime/utils → alita_sdk-0.3.177/alita_sdk/tools/base}/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/base/tool.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/bitbucket/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/bitbucket/tools.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/browser/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/browser/crawler.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/browser/google_search_rag.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/browser/utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/browser/wiki.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/carrier/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/carrier/utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/__init__.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/tools/azure_ai → alita_sdk-0.3.177/alita_sdk/tools/chunkers/code}/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/constants.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/models.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/tools/base → alita_sdk-0.3.177/alita_sdk/tools/chunkers/sematic}/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/chunkers/utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/cloud/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/tools/chunkers → alita_sdk-0.3.177/alita_sdk/tools}/code/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/code/linter/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/code/sonar/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/confluence/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/confluence/loader.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/confluence/utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/elastic/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/elitea_base.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/figma/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/figma/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/github/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/github/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/github/github_client.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/github/schemas.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/github/tool.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/github/tool_prompts.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/gitlab/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/gitlab/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/gitlab/tools.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/gitlab/utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/gmail/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/gmail/utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/google_places/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/jira/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/jira/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/keycloak/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/tools/chunkers/sematic → alita_sdk-0.3.177/alita_sdk/tools/llm}/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/llm/img_utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/llm/llm_utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/localgit/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/localgit/local_git.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/localgit/tool.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/memory/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/ocr/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/ocr/text_detection.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/openapi/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/tools/code → alita_sdk-0.3.177/alita_sdk/tools/pandas/dataframe/executor}/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
- {alita_sdk-0.3.175/alita_sdk/tools/llm → alita_sdk-0.3.177/alita_sdk/tools/pandas/dataframe/generator}/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/postman/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/postman/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/postman/postman_analysis.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pptx/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/qtest/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/qtest/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/qtest/tool.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/rally/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/rally/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/report_portal/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/salesforce/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/salesforce/model.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/servicenow/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/sharepoint/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/sharepoint/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/sharepoint/utils.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/sql/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/sql/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/sql/models.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/testio/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/testio/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/testrail/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/utils/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/utils/content_parser.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/xray/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/xray/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/yagmail/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/zephyr/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/zephyr/rest_client.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/zephyr_squad/__init__.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk.egg-info/dependency_links.txt +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/alita_sdk.egg-info/top_level.txt +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/setup.cfg +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/tests/test_ado_analysis.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/tests/test_github_analysis.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/tests/test_gitlab_analysis.py +0 -0
- {alita_sdk-0.3.175 → alita_sdk-0.3.177}/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.177
|
4
4
|
Summary: SDK for building langchain agents using resources from Alita
|
5
5
|
Author-email: Artem Rozumenko <artyom.rozumenko@gmail.com>, Mikalai Biazruchka <mikalai_biazruchka@epam.com>, Roman Mitusov <roman_mitusov@epam.com>, Ivan Krakhmaliuk <lifedjik@gmail.com>, Artem Dubrovskiy <ad13box@gmail.com>
|
6
6
|
License-Expression: Apache-2.0
|
@@ -123,9 +123,9 @@ Requires-Dist: pysnc==1.1.10; extra == "tools"
|
|
123
123
|
Requires-Dist: shortuuid==1.0.13; extra == "tools"
|
124
124
|
Requires-Dist: yarl==1.17.1; extra == "tools"
|
125
125
|
Requires-Dist: langmem==0.0.27; extra == "tools"
|
126
|
+
Requires-Dist: textract-py3==2.1.1; extra == "tools"
|
126
127
|
Provides-Extra: community
|
127
128
|
Requires-Dist: retry-extended==0.2.3; extra == "community"
|
128
|
-
Requires-Dist: browser-use==0.1.43; extra == "community"
|
129
129
|
Requires-Dist: pyobjtojson==0.3; extra == "community"
|
130
130
|
Requires-Dist: elitea-analyse==0.1.2; extra == "community"
|
131
131
|
Provides-Extra: all
|
@@ -11,7 +11,7 @@ import importlib
|
|
11
11
|
__all__ = []
|
12
12
|
|
13
13
|
# Standard module imports with fallback
|
14
|
-
_modules = ['utils', 'analysis', '
|
14
|
+
_modules = ['utils', 'analysis', 'deep_researcher', 'eda']
|
15
15
|
|
16
16
|
for module_name in _modules:
|
17
17
|
try:
|
@@ -26,8 +26,7 @@ _toolkits = [
|
|
26
26
|
('analysis.jira_analyse', 'AnalyseJira'),
|
27
27
|
('analysis.ado_analyse', 'AnalyseAdo'),
|
28
28
|
('analysis.gitlab_analyse', 'AnalyseGitLab'),
|
29
|
-
('analysis.github_analyse', 'AnalyseGithub')
|
30
|
-
('browseruse', 'BrowserUseToolkit')
|
29
|
+
('analysis.github_analyse', 'AnalyseGithub')
|
31
30
|
]
|
32
31
|
|
33
32
|
for module_path, class_name in _toolkits:
|
@@ -61,8 +60,7 @@ def get_tools(tools_list: list, alita_client, llm) -> list:
|
|
61
60
|
'analyse_jira': 'AnalyseJira',
|
62
61
|
'analyse_ado': 'AnalyseAdo',
|
63
62
|
'analyse_gitlab': 'AnalyseGitLab',
|
64
|
-
'analyse_github': 'AnalyseGithub'
|
65
|
-
'browser_use': 'BrowserUseToolkit'
|
63
|
+
'analyse_github': 'AnalyseGithub'
|
66
64
|
}
|
67
65
|
|
68
66
|
for tool in tools_list:
|
@@ -72,18 +70,10 @@ def get_tools(tools_list: list, alita_client, llm) -> list:
|
|
72
70
|
if class_name and class_name in globals():
|
73
71
|
try:
|
74
72
|
toolkit_class = globals()[class_name]
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
toolkit_name=tool.get('toolkit_name', ''),
|
80
|
-
**tool['settings']
|
81
|
-
)
|
82
|
-
else:
|
83
|
-
toolkit = toolkit_class.get_toolkit(
|
84
|
-
client=alita_client,
|
85
|
-
**tool['settings']
|
86
|
-
)
|
73
|
+
toolkit = toolkit_class.get_toolkit(
|
74
|
+
client=alita_client,
|
75
|
+
**tool['settings']
|
76
|
+
)
|
87
77
|
tools.extend(toolkit.get_tools())
|
88
78
|
except Exception:
|
89
79
|
pass # Fail silently for robustness
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -64,6 +64,12 @@ class CarrierAPIWrapper(BaseModel):
|
|
64
64
|
def get_tests_list(self) -> List[Dict[str, Any]]:
|
65
65
|
return self._client.get_tests_list()
|
66
66
|
|
67
|
+
def create_test(self, data: dict):
|
68
|
+
return self._client.create_test(data)
|
69
|
+
|
70
|
+
def get_integrations(self, name: str):
|
71
|
+
return self._client.get_integrations(name)
|
72
|
+
|
67
73
|
def run_test(self, test_id: str, json_body):
|
68
74
|
return self._client.run_test(test_id, json_body)
|
69
75
|
|
@@ -0,0 +1,461 @@
|
|
1
|
+
import logging
|
2
|
+
import json
|
3
|
+
import traceback
|
4
|
+
from typing import Type, Optional, List, Dict, Union
|
5
|
+
from langchain_core.tools import BaseTool, ToolException
|
6
|
+
from pydantic.fields import Field
|
7
|
+
from pydantic import create_model, BaseModel
|
8
|
+
from .api_wrapper import CarrierAPIWrapper
|
9
|
+
|
10
|
+
|
11
|
+
logger = logging.getLogger(__name__)
|
12
|
+
|
13
|
+
|
14
|
+
class GetTestsTool(BaseTool):
|
15
|
+
api_wrapper: CarrierAPIWrapper = Field(..., description="Carrier API Wrapper instance")
|
16
|
+
name: str = "get_tests"
|
17
|
+
description: str = "Get list of tests from the Carrier platform."
|
18
|
+
args_schema: Type[BaseModel] = create_model(
|
19
|
+
"GetTestsInput",
|
20
|
+
)
|
21
|
+
|
22
|
+
def _run(self):
|
23
|
+
try:
|
24
|
+
tests = self.api_wrapper.get_tests_list()
|
25
|
+
|
26
|
+
# Fields to keep in each test
|
27
|
+
base_fields = {
|
28
|
+
"id", "name", "entrypoint", "runner", "location", "job_type", "source"
|
29
|
+
}
|
30
|
+
|
31
|
+
trimmed_tests = []
|
32
|
+
for test in tests:
|
33
|
+
# Keep only desired base fields
|
34
|
+
trimmed = {k: test[k] for k in base_fields if k in test}
|
35
|
+
|
36
|
+
# Simplify test_parameters from test_config
|
37
|
+
trimmed["test_parameters"] = [
|
38
|
+
{"name": param["name"], "default": param["default"]}
|
39
|
+
for param in test.get("test_parameters", [])
|
40
|
+
]
|
41
|
+
|
42
|
+
trimmed_tests.append(trimmed)
|
43
|
+
|
44
|
+
return json.dumps(trimmed_tests)
|
45
|
+
except Exception:
|
46
|
+
stacktrace = traceback.format_exc()
|
47
|
+
logger.error(f"Error getting tests: {stacktrace}")
|
48
|
+
raise ToolException(stacktrace)
|
49
|
+
|
50
|
+
|
51
|
+
class GetTestByIDTool(BaseTool):
|
52
|
+
api_wrapper: CarrierAPIWrapper = Field(..., description="Carrier API Wrapper instance")
|
53
|
+
name: str = "get_test_by_id"
|
54
|
+
description: str = "Get test data from the Carrier platform."
|
55
|
+
args_schema: Type[BaseModel] = create_model(
|
56
|
+
"GetTestByIdInput",
|
57
|
+
test_id=(str, Field(description="Test id to retrieve")),
|
58
|
+
)
|
59
|
+
|
60
|
+
def _run(self, test_id: str):
|
61
|
+
try:
|
62
|
+
tests = self.api_wrapper.get_tests_list()
|
63
|
+
test_data = {}
|
64
|
+
for test in tests:
|
65
|
+
if test_id == str(test["id"]):
|
66
|
+
test_data = test
|
67
|
+
break
|
68
|
+
|
69
|
+
return json.dumps(test_data)
|
70
|
+
except Exception:
|
71
|
+
stacktrace = traceback.format_exc()
|
72
|
+
logger.error(f"Test not found: {stacktrace}")
|
73
|
+
raise ToolException(stacktrace)
|
74
|
+
|
75
|
+
|
76
|
+
class RunTestByIDTool(BaseTool):
|
77
|
+
api_wrapper: CarrierAPIWrapper = Field(..., description="Carrier API Wrapper instance")
|
78
|
+
name: str = "run_test_by_id"
|
79
|
+
description: str = "Execute test plan from the Carrier platform."
|
80
|
+
args_schema: Type[BaseModel] = create_model(
|
81
|
+
"RunTestByIdInput",
|
82
|
+
test_id=(str, Field(default=None, description="Test id to execute")),
|
83
|
+
name=(str, Field(default=None, description="Test name to execute")),
|
84
|
+
test_parameters=(list, Field(
|
85
|
+
default=None,
|
86
|
+
description=(
|
87
|
+
"Test parameters to override. Provide as a list of dictionaries, "
|
88
|
+
"e.g., [{'vUsers': '5', 'duration': '120'}]. Each dictionary should "
|
89
|
+
"contain parameter names and their values."
|
90
|
+
)
|
91
|
+
)),
|
92
|
+
)
|
93
|
+
|
94
|
+
def _run(self, test_id=None, name=None, test_parameters=None):
|
95
|
+
try:
|
96
|
+
if not test_id and not name:
|
97
|
+
return {"message": "Please provide test id or test name to start"}
|
98
|
+
|
99
|
+
# Fetch test data
|
100
|
+
tests = self.api_wrapper.get_tests_list()
|
101
|
+
|
102
|
+
# Find the test data based on test_id or name
|
103
|
+
test_data = next(
|
104
|
+
(test for test in tests if
|
105
|
+
(test_id and str(test["id"]) == test_id) or (name and str(test["name"]) == name)),
|
106
|
+
None
|
107
|
+
)
|
108
|
+
|
109
|
+
if not test_data:
|
110
|
+
raise ValueError(f"Test with id {test_id} or name {name} not found.")
|
111
|
+
|
112
|
+
# Default test parameters
|
113
|
+
default_test_parameters = test_data.get("test_parameters", [])
|
114
|
+
|
115
|
+
# If no test_parameters are provided, return the default ones for confirmation
|
116
|
+
if test_parameters is None:
|
117
|
+
return {
|
118
|
+
"message": "Please confirm or override the following test parameters to proceed with the test execution.",
|
119
|
+
"default_test_parameters": default_test_parameters,
|
120
|
+
"instruction": "To override parameters, provide a list of dictionaries for 'test_parameters', e.g., [{'vUsers': '5', 'duration': '120'}].",
|
121
|
+
}
|
122
|
+
|
123
|
+
# Normalize test_parameters if provided in an incorrect format
|
124
|
+
test_parameters = self._normalize_test_parameters(test_parameters)
|
125
|
+
|
126
|
+
# Apply user-provided test parameters
|
127
|
+
updated_test_parameters = self._apply_test_parameters(default_test_parameters, test_parameters)
|
128
|
+
|
129
|
+
# Build common_params dictionary
|
130
|
+
common_params = {
|
131
|
+
param["name"]: param
|
132
|
+
for param in default_test_parameters
|
133
|
+
if param["name"] in {"test_name", "test_type", "env_type"}
|
134
|
+
}
|
135
|
+
|
136
|
+
# Add env_vars, parallel_runners, and location to common_params
|
137
|
+
common_params["env_vars"] = test_data.get("env_vars", {})
|
138
|
+
common_params["parallel_runners"] = test_data.get("parallel_runners")
|
139
|
+
common_params["location"] = test_data.get("location")
|
140
|
+
|
141
|
+
# Build the JSON body
|
142
|
+
json_body = {
|
143
|
+
"common_params": common_params,
|
144
|
+
"test_parameters": updated_test_parameters,
|
145
|
+
"integrations": test_data.get("integrations", {})
|
146
|
+
}
|
147
|
+
|
148
|
+
# Execute the test
|
149
|
+
report_id = self.api_wrapper.run_test(test_id, json_body)
|
150
|
+
return f"Test started. Report id: {report_id}. Link to report:" \
|
151
|
+
f"{self.api_wrapper.url.rstrip('/')}/-/performance/backend/results?result_id={report_id}"
|
152
|
+
|
153
|
+
except Exception:
|
154
|
+
stacktrace = traceback.format_exc()
|
155
|
+
logger.error(f"Test not found: {stacktrace}")
|
156
|
+
raise ToolException(stacktrace)
|
157
|
+
|
158
|
+
def _normalize_test_parameters(self, test_parameters):
|
159
|
+
"""
|
160
|
+
Normalize test_parameters to ensure they are in the correct list-of-dictionaries format.
|
161
|
+
If test_parameters are provided as a list of strings (e.g., ['vUsers=5', 'duration=120']),
|
162
|
+
convert them to a list of dictionaries (e.g., [{'vUsers': '5', 'duration': '120'}]).
|
163
|
+
"""
|
164
|
+
if isinstance(test_parameters, list):
|
165
|
+
# Check if the list contains strings in the format "key=value"
|
166
|
+
if all(isinstance(param, str) and "=" in param for param in test_parameters):
|
167
|
+
normalized_parameters = []
|
168
|
+
for param in test_parameters:
|
169
|
+
name, value = param.split("=", 1)
|
170
|
+
normalized_parameters.append({name.strip(): value.strip()})
|
171
|
+
return normalized_parameters
|
172
|
+
# Check if the list already contains dictionaries
|
173
|
+
elif all(isinstance(param, dict) for param in test_parameters):
|
174
|
+
return test_parameters
|
175
|
+
else:
|
176
|
+
raise ValueError(
|
177
|
+
"Invalid format for test_parameters. Provide as a list of 'key=value' strings "
|
178
|
+
"or a list of dictionaries."
|
179
|
+
)
|
180
|
+
elif isinstance(test_parameters, dict):
|
181
|
+
# Convert a single dictionary to a list of dictionaries
|
182
|
+
return [test_parameters]
|
183
|
+
else:
|
184
|
+
raise ValueError(
|
185
|
+
"Invalid format for test_parameters. Provide as a list of 'key=value' strings "
|
186
|
+
"or a list of dictionaries."
|
187
|
+
)
|
188
|
+
|
189
|
+
def _apply_test_parameters(self, default_test_parameters, user_parameters):
|
190
|
+
"""
|
191
|
+
Apply user-provided parameters to the default test parameters.
|
192
|
+
"""
|
193
|
+
updated_parameters = []
|
194
|
+
for param in default_test_parameters:
|
195
|
+
name = param["name"]
|
196
|
+
# Find the matching user parameter
|
197
|
+
user_param = next((p for p in user_parameters if name in p), None)
|
198
|
+
if user_param:
|
199
|
+
# Override the parameter value with the user-provided value
|
200
|
+
param["default"] = user_param[name]
|
201
|
+
# Ensure the parameter structure remains consistent
|
202
|
+
updated_parameters.append({
|
203
|
+
"name": param["name"],
|
204
|
+
"type": param["type"],
|
205
|
+
"description": param["description"],
|
206
|
+
"default": param["default"]
|
207
|
+
})
|
208
|
+
return updated_parameters
|
209
|
+
|
210
|
+
|
211
|
+
class CreateBackendTestInput(BaseModel):
|
212
|
+
test_name: str = Field(..., description="Test name")
|
213
|
+
test_type: str = Field(..., description="Test type")
|
214
|
+
env_type: str = Field(..., description="Env type")
|
215
|
+
entrypoint: str = Field(..., description="Entrypoint for the test (JMeter script path or Gatling simulation path)")
|
216
|
+
custom_cmd: str = Field(..., description="Custom command line to execute the test (e.g., -l /tmp/reports/jmeter.jtl -e -o /tmp/reports/html_report)")
|
217
|
+
runner: str = Field(..., description="Test runner (Gatling or JMeter)")
|
218
|
+
source: Optional[Dict[str, Optional[str]]] = Field(
|
219
|
+
None,
|
220
|
+
description=(
|
221
|
+
"Test source configuration (Git repo). The dictionary should include the following keys:\n"
|
222
|
+
"- 'name' (required): The type of source (e.g., 'git_https').\n"
|
223
|
+
"- 'repo' (required): The URL of the Git repository.\n"
|
224
|
+
"- 'branch' (optional): The branch of the repository to use.\n"
|
225
|
+
"- 'username' (optional): The username for accessing the repository.\n"
|
226
|
+
"- 'password' (optional): The password or token for accessing the repository."
|
227
|
+
),
|
228
|
+
example={
|
229
|
+
"name": "git_https",
|
230
|
+
"repo": "https://your_git_repo.git",
|
231
|
+
"branch": "main",
|
232
|
+
"username": "your_username",
|
233
|
+
"password": "your_password",
|
234
|
+
},
|
235
|
+
)
|
236
|
+
test_parameters: Optional[List[Dict[str, str]]] = Field(
|
237
|
+
None,
|
238
|
+
description=(
|
239
|
+
"Test parameters as a list of dictionaries. Each dictionary should include the following keys:\n"
|
240
|
+
"- 'name' (required): The name of the parameter (e.g., 'VUSERS').\n"
|
241
|
+
"- 'default' (required): The value of the parameter (e.g., '5')."
|
242
|
+
),
|
243
|
+
example=[
|
244
|
+
{"name": "VUSERS", "default": "5"},
|
245
|
+
{"name": "DURATION", "default": "60"},
|
246
|
+
{"name": "RAMP_UP", "default": "30"},
|
247
|
+
],
|
248
|
+
)
|
249
|
+
email_integration: Optional[Dict[str, Optional[Union[int, List[str]]]]] = Field(
|
250
|
+
None,
|
251
|
+
description=(
|
252
|
+
"Email integration configuration. The dictionary should include the following keys:\n"
|
253
|
+
"- 'integration_id' (required): The ID of the selected email integration (integer).\n"
|
254
|
+
"- 'recipients' (required): A list of email addresses to receive notifications."
|
255
|
+
),
|
256
|
+
example={
|
257
|
+
"integration_id": 1,
|
258
|
+
"recipients": ["example@example.com", "user@example.com"],
|
259
|
+
},
|
260
|
+
)
|
261
|
+
|
262
|
+
|
263
|
+
class CreateBackendTestTool(BaseTool):
|
264
|
+
api_wrapper: CarrierAPIWrapper = Field(..., description="Carrier API Wrapper instance")
|
265
|
+
name: str = "create_backend_test"
|
266
|
+
description: str = "Create a new backend test plan in the Carrier platform."
|
267
|
+
args_schema: Type[BaseModel] = CreateBackendTestInput
|
268
|
+
|
269
|
+
def _run(self, test_name=None, test_type=None, env_type=None, entrypoint=None, custom_cmd=None, runner=None,
|
270
|
+
source=None, test_parameters=None, email_integration=None):
|
271
|
+
try:
|
272
|
+
# Validate required fields
|
273
|
+
if not test_name:
|
274
|
+
return {"message": "Please provide test name"}
|
275
|
+
if not test_type:
|
276
|
+
return {
|
277
|
+
"message": "Please provide performance test type (capacity, baseline, response time, stable, stress, etc)"}
|
278
|
+
if not env_type:
|
279
|
+
return {"message": "Please provide test env (stage, prod, dev, etc)"}
|
280
|
+
if not entrypoint:
|
281
|
+
return {"message": "Please provide test entrypoint (JMeter script path or Gatling simulation path)"}
|
282
|
+
if not custom_cmd:
|
283
|
+
return {
|
284
|
+
"message": "Please provide custom_cmd. This parameter is optional. (e.g., -l /tmp/reports/jmeter.jtl -e -o /tmp/reports/html_report)"}
|
285
|
+
|
286
|
+
# Validate runner
|
287
|
+
available_runners = {
|
288
|
+
"JMeter_v5.6.3": "v5.6.3",
|
289
|
+
"JMeter_v5.5": "v5.5",
|
290
|
+
"Gatling_v3.7": "v3.7",
|
291
|
+
"Gatling_maven": "maven",
|
292
|
+
}
|
293
|
+
|
294
|
+
if not runner:
|
295
|
+
return {
|
296
|
+
"message": (
|
297
|
+
"Please provide a valid test runner. The test runner specifies the tool and version to use for running the test."
|
298
|
+
),
|
299
|
+
"instructions": (
|
300
|
+
"You can choose a test runner by providing either the key or the value from the available options below. "
|
301
|
+
"For example, you can provide 'JMeter_v5.5' or 'v5.5'."
|
302
|
+
),
|
303
|
+
"available_runners": available_runners,
|
304
|
+
"example": "For JMeter 5.5, you can provide either 'JMeter_v5.5' or 'v5.5'.",
|
305
|
+
}
|
306
|
+
|
307
|
+
# Normalize the runner input to ensure we always use the value in the final data
|
308
|
+
if runner in available_runners:
|
309
|
+
runner_value = available_runners[runner] # User provided the key (e.g., 'JMeter_v5.5')
|
310
|
+
elif runner in available_runners.values():
|
311
|
+
runner_value = runner # User provided the value directly (e.g., 'v5.5')
|
312
|
+
else:
|
313
|
+
return {
|
314
|
+
"message": (
|
315
|
+
"Invalid test runner provided. Please choose a valid test runner from the available options."
|
316
|
+
),
|
317
|
+
"instructions": (
|
318
|
+
"You can choose a test runner by providing either the key or the value from the available options below. "
|
319
|
+
"For example, you can provide 'JMeter_v5.5' or 'v5.5'."
|
320
|
+
),
|
321
|
+
"available_runners": available_runners,
|
322
|
+
"example": "For JMeter 5.5, you can provide either 'JMeter_v5.5' or 'v5.5'.",
|
323
|
+
}
|
324
|
+
|
325
|
+
# Validate source
|
326
|
+
if not source:
|
327
|
+
return {
|
328
|
+
"message": (
|
329
|
+
"Please provide the test source configuration. The source configuration is required to specify "
|
330
|
+
"the Git repository details for the test. Ensure all fields are provided in the correct format."
|
331
|
+
),
|
332
|
+
"instructions": (
|
333
|
+
"The 'source' parameter should be a dictionary with the following keys:\n"
|
334
|
+
"- 'name' (required): The type of source (e.g., 'git_https').\n"
|
335
|
+
"- 'repo' (required): The URL of the Git repository.\n"
|
336
|
+
"- 'branch' (optional): The branch of the repository to use.\n"
|
337
|
+
"- 'username' (optional): The username for accessing the repository.\n"
|
338
|
+
"- 'password' (optional): The password or token for accessing the repository."
|
339
|
+
),
|
340
|
+
"example_source": {
|
341
|
+
"name": "git_https",
|
342
|
+
"repo": "https://your_git_repo.git",
|
343
|
+
"branch": "main",
|
344
|
+
"username": "",
|
345
|
+
"password": "",
|
346
|
+
},
|
347
|
+
}
|
348
|
+
|
349
|
+
# Validate test_parameters
|
350
|
+
if test_parameters is None:
|
351
|
+
return {
|
352
|
+
"message": (
|
353
|
+
"Do you want to add test parameters? Test parameters allow you to configure the test with specific values."
|
354
|
+
),
|
355
|
+
"instructions": (
|
356
|
+
"Provide test parameters as a list of dictionaries in the format:\n"
|
357
|
+
"- {'name': 'VUSERS', 'default': '5'}\n"
|
358
|
+
"- {'name': 'DURATION', 'default': '60'}\n"
|
359
|
+
"- {'name': 'RAMP_UP', 'default': '30'}\n"
|
360
|
+
"You can provide multiple parameters as a list, e.g., [{'name': 'VUSERS', 'default': '5'}, {'name': 'DURATION', 'default': '60'}].\n"
|
361
|
+
"If no parameters are needed, respond with 'no'."
|
362
|
+
),
|
363
|
+
"example_parameters": [
|
364
|
+
{"name": "VUSERS", "default": "5"},
|
365
|
+
{"name": "DURATION", "default": "60"},
|
366
|
+
{"name": "RAMP_UP", "default": "30"},
|
367
|
+
],
|
368
|
+
}
|
369
|
+
|
370
|
+
# Ensure test_parameters is an empty list if the user indicates no parameters are needed
|
371
|
+
if isinstance(test_parameters, str) and test_parameters.lower() == "no":
|
372
|
+
test_parameters = []
|
373
|
+
|
374
|
+
# Fetch available integrations
|
375
|
+
integrations_list = self.api_wrapper.get_integrations(name="reporter_email")
|
376
|
+
|
377
|
+
# Validate email_integration
|
378
|
+
if email_integration is None:
|
379
|
+
# Return instructions for configuring email integration
|
380
|
+
return {
|
381
|
+
"message": "Do you want to configure email integration?",
|
382
|
+
"instructions": (
|
383
|
+
"If yes, select an integration from the available options below and provide email recipients.\n"
|
384
|
+
"If no, respond with 'no'."
|
385
|
+
),
|
386
|
+
"available_integrations": [
|
387
|
+
{
|
388
|
+
"id": integration["id"],
|
389
|
+
"name": integration["config"]["name"],
|
390
|
+
"description": integration["section"]["integration_description"],
|
391
|
+
}
|
392
|
+
for integration in integrations_list
|
393
|
+
],
|
394
|
+
"example_response": {
|
395
|
+
"integration_id": 1,
|
396
|
+
"recipients": ["example@example.com", "user@example.com"],
|
397
|
+
},
|
398
|
+
}
|
399
|
+
|
400
|
+
# Prepare the final data dictionary
|
401
|
+
data = {
|
402
|
+
"common_params": {
|
403
|
+
"name": test_name,
|
404
|
+
"test_type": test_type,
|
405
|
+
"env_type": env_type,
|
406
|
+
"entrypoint": entrypoint,
|
407
|
+
"runner": runner_value,
|
408
|
+
"source": source,
|
409
|
+
"env_vars": {
|
410
|
+
"cpu_quota": 1,
|
411
|
+
"memory_quota": 4,
|
412
|
+
"cloud_settings": {},
|
413
|
+
"custom_cmd": custom_cmd,
|
414
|
+
},
|
415
|
+
"parallel_runners": 1,
|
416
|
+
"cc_env_vars": {},
|
417
|
+
"customization": {},
|
418
|
+
"location": "default", # TODO update location
|
419
|
+
},
|
420
|
+
"test_parameters": test_parameters,
|
421
|
+
"integrations": {
|
422
|
+
"reporters": {
|
423
|
+
"reporter_email": {
|
424
|
+
"id": email_integration["integration_id"],
|
425
|
+
"is_local": True,
|
426
|
+
"project_id": integrations_list[0]["project_id"], # Example project_id
|
427
|
+
"recipients": email_integration["recipients"],
|
428
|
+
}
|
429
|
+
}
|
430
|
+
},
|
431
|
+
"scheduling": [],
|
432
|
+
"run_test": False,
|
433
|
+
}
|
434
|
+
|
435
|
+
response = self.api_wrapper.create_test(data)
|
436
|
+
try:
|
437
|
+
info = "Test created successfully"
|
438
|
+
test_info = response.json()
|
439
|
+
except:
|
440
|
+
info = "Failed to create the test"
|
441
|
+
test_info = response.text
|
442
|
+
return f"{info}. {test_info}"
|
443
|
+
|
444
|
+
except Exception as e:
|
445
|
+
stacktrace = traceback.format_exc()
|
446
|
+
logger.error(f"Error while creating test: {stacktrace}")
|
447
|
+
raise ToolException(stacktrace)
|
448
|
+
|
449
|
+
# data = {"common_params":{"name":"toolkit_demo","test_type":"toolkit_demo","env_type":"toolkit_demo",
|
450
|
+
# "entrypoint":"tests/BasicEcommerceWithTransaction.jmx","runner":"v5.6.3",
|
451
|
+
# "source":{"name":"git_https","repo":"https://git.epam.com/epm-perf/boilerplate.git",
|
452
|
+
# "branch":"jmeter","username":"mykhailo_hunko@epam.com",
|
453
|
+
# "password":"{{secret.mykhailo_gitlab}}"},
|
454
|
+
# "env_vars":{"cpu_quota":2,"memory_quota":6,"cloud_settings":{},
|
455
|
+
# "custom_cmd":"-l /tmp/reports/jmeter.jtl -e -o /tmp/reports/html_report"},
|
456
|
+
# "parallel_runners":1,"cc_env_vars":{},"customization":{},"location":"default"},
|
457
|
+
# "test_parameters":[{"name":"VUSERS","default":"5","type":"string","description":"","action":""},
|
458
|
+
# {"name":"DURATION","default":"60","type":"string","description":"","action":""}],
|
459
|
+
# "integrations":{"reporters":{"reporter_email":{"id":1,"is_local":True,"project_id":36,
|
460
|
+
# "recipients":["mykhailo_hunko@epam.com"]}}},
|
461
|
+
# "scheduling":[],"run_test":True}
|
@@ -81,10 +81,28 @@ class CarrierClient(BaseModel):
|
|
81
81
|
endpoint = f"api/v1/backend_performance/tests/{self.credentials.project_id}"
|
82
82
|
return self.request('get', endpoint).get("rows", [])
|
83
83
|
|
84
|
+
def create_test(self, data):
|
85
|
+
endpoint = f"api/v1/backend_performance/tests/{self.credentials.project_id}"
|
86
|
+
full_url = f"{self.credentials.url.rstrip('/')}/{endpoint.lstrip('/')}"
|
87
|
+
headers = {'Authorization': f'bearer {self.credentials.token}'}
|
88
|
+
from json import dumps
|
89
|
+
# Serialize the `data` dictionary into a JSON string
|
90
|
+
form_data = {"data": dumps(data)}
|
91
|
+
# Send the POST request
|
92
|
+
res = requests.post(full_url, headers=headers, data=form_data)
|
93
|
+
print("************************* response")
|
94
|
+
print(res.text)
|
95
|
+
print("**********************************")
|
96
|
+
return res
|
97
|
+
|
84
98
|
def run_test(self, test_id: str, json_body):
|
85
99
|
endpoint = f"api/v1/backend_performance/test/{self.credentials.project_id}/{test_id}"
|
86
100
|
return self.request('post', endpoint, json=json_body).get("result_id", "")
|
87
101
|
|
102
|
+
def get_integrations(self, name: str):
|
103
|
+
endpoint = f"api/v1/integrations/integrations/{self.credentials.project_id}?name={name}"
|
104
|
+
return self.request('get', endpoint)
|
105
|
+
|
88
106
|
def run_ui_test(self, test_id: str, json_body):
|
89
107
|
"""Run a UI test with the given test ID and JSON body."""
|
90
108
|
endpoint = f"api/v1/ui_performance/test/{self.credentials.project_id}/{test_id}"
|