alita-sdk 0.3.419__tar.gz → 0.3.421__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.419 → alita_sdk-0.3.421}/PKG-INFO +1 -1
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/utils.py +9 -1
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/llm.py +4 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/base_indexer_toolkit.py +16 -1
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/qtest/api_wrapper.py +291 -41
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk.egg-info/PKG-INFO +1 -1
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/pyproject.toml +1 -1
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/LICENSE +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/README.md +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/community/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/community/utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/ado.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/azure_search.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/bigquery.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/bitbucket.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/browser.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/carrier.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/confluence.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/delta_lake.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/embedding.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/figma.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/github.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/gitlab.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/google_places.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/jira.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/pgvector.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/postman.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/qtest.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/rally.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/report_portal.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/salesforce.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/service_now.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/sharepoint.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/slack.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/sonar.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/sql.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/testio.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/testrail.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/xray.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/zephyr.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/zephyr_enterprise.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/configurations/zephyr_essential.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/clients/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/clients/artifact.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/clients/client.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/clients/datasource.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/clients/prompt.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/clients/sandbox_client.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/assistant.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/constants.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaJSONLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaMarkdownLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaPDFLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaPowerPointLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaPythonLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/AlitaTextLoader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/ImageParser.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/indexer.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/langraph_agent.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/store_manager.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/tools/git.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/tools/log.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/tools/state.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/llms/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/llms/preloaded.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/toolkits/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/toolkits/application.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/toolkits/artifact.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/toolkits/configurations.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/toolkits/datasource.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/toolkits/prompt.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/toolkits/tools.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/agent.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/application.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/artifact.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/datasource.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/echo.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/function.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/graph.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/image_generation.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/loop.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/loop_output.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/mcp_server_tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/prompt.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/router.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/sandbox.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/vectorstore.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/tools/vectorstore_base.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/utils/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/utils/constants.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/utils/evaluate.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/utils/logging.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/utils/streamlit.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/utils/toolkit_runtime.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/utils/toolkit_utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/utils/utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/ado/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/ado/repos/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/ado/test_plan/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/ado/utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/ado/wiki/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/ado/work_item/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/ado/work_item/ado_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/aws/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/aws/delta_lake/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/aws/delta_lake/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/aws/delta_lake/schemas.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/aws/delta_lake/tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/azure_ai/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/base/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/base/tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/bitbucket/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/browser/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/browser/crawler.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/browser/google_search_rag.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/browser/utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/browser/wiki.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/backend_tests_tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/carrier_sdk.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/tools.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/carrier/utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/constants.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/models.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/sematic/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/sematic/json_chunker.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/chunkers/utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/cloud/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/code/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/code/linter/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/code/sonar/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/code_indexer_toolkit.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/confluence/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/confluence/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/confluence/loader.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/confluence/utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/elastic/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/elitea_base.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/figma/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/figma/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/github/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/github/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/github/github_client.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/github/schemas.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/github/tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/github/tool_prompts.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/gitlab/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/gitlab/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/gitlab/tools.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/gitlab/utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/gmail/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/gmail/utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/google/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/google/bigquery/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/google/bigquery/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/google/bigquery/schemas.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/google/bigquery/tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/google_places/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/jira/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/jira/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/keycloak/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/llm/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/llm/img_utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/llm/llm_utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/localgit/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/localgit/local_git.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/localgit/tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/memory/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/non_code_indexer_toolkit.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/ocr/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/ocr/text_detection.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/openapi/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/postman/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/postman/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/postman/postman_analysis.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pptx/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/qtest/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/qtest/tool.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/rally/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/rally/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/report_portal/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/salesforce/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/salesforce/model.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/servicenow/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/sharepoint/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/sharepoint/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/sharepoint/utils.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/slack/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/slack/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/sql/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/sql/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/sql/models.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/testio/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/testio/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/testrail/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/utils/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/utils/available_tools_decorator.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/utils/content_parser.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/vector_adapters/VectorStoreAdapter.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/vector_adapters/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/xray/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/xray/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/yagmail/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr/rest_client.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr_essential/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr_essential/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr_essential/client.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr_squad/__init__.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk.egg-info/SOURCES.txt +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk.egg-info/dependency_links.txt +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk.egg-info/requires.txt +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk.egg-info/top_level.txt +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/setup.cfg +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/tests/test_ado_analysis.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/tests/test_github_analysis.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/tests/test_gitlab_analysis.py +0 -0
- {alita_sdk-0.3.419 → alita_sdk-0.3.421}/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.421
|
|
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
|
|
@@ -138,6 +138,7 @@ def create_state(data: Optional[dict] = None):
|
|
|
138
138
|
for key, value in data.items():
|
|
139
139
|
# support of old & new UI
|
|
140
140
|
value = value['type'] if isinstance(value, dict) else value
|
|
141
|
+
value = 'str' if value == 'string' else value # normalize string type (old state support)
|
|
141
142
|
if key == 'messages':
|
|
142
143
|
state_dict[key] = Annotated[list[AnyMessage], add_messages]
|
|
143
144
|
elif value in ['str', 'int', 'float', 'bool', 'list', 'dict', 'number', 'dict']:
|
|
@@ -184,7 +185,7 @@ def propagate_the_input_mapping(input_mapping: dict[str, dict], input_variables:
|
|
|
184
185
|
logger.error(f"KeyError in fstring formatting for key '{key}'. Attempt to find proper data in state.\n{e}")
|
|
185
186
|
try:
|
|
186
187
|
# search for variables in state if not found in var_dict
|
|
187
|
-
input_data[key] = value['value']
|
|
188
|
+
input_data[key] = safe_format(value['value'], state)
|
|
188
189
|
except KeyError as no_var_exception:
|
|
189
190
|
logger.error(f"KeyError in fstring formatting for key '{key}' with state data.\n{no_var_exception}")
|
|
190
191
|
# leave value as is if still not found (could be a constant string marked as fstring by mistake)
|
|
@@ -195,6 +196,13 @@ def propagate_the_input_mapping(input_mapping: dict[str, dict], input_variables:
|
|
|
195
196
|
input_data[key] = source.get(value['value'], "")
|
|
196
197
|
return input_data
|
|
197
198
|
|
|
199
|
+
def safe_format(template, mapping):
|
|
200
|
+
"""Format a template string using a mapping, leaving placeholders unchanged if keys are missing."""
|
|
201
|
+
|
|
202
|
+
def replacer(match):
|
|
203
|
+
key = match.group(1)
|
|
204
|
+
return str(mapping.get(key, f'{{{key}}}'))
|
|
205
|
+
return re.sub(r'\{(\w+)\}', replacer, template)
|
|
198
206
|
|
|
199
207
|
def create_pydantic_model(model_name: str, variables: dict[str, dict]):
|
|
200
208
|
fields = {}
|
|
@@ -91,6 +91,10 @@ class LLMNode(BaseTool):
|
|
|
91
91
|
f"Actual params: {func_args}")
|
|
92
92
|
# cast to str in case user passes variable different from str
|
|
93
93
|
messages = [SystemMessage(content=str(func_args.get('system'))), *func_args.get('chat_history', []), HumanMessage(content=str(func_args.get('task')))]
|
|
94
|
+
# Remove pre-last item if last two messages are same type and content
|
|
95
|
+
if len(messages) >= 2 and type(messages[-1]) == type(messages[-2]) and messages[-1].content == messages[
|
|
96
|
+
-2].content:
|
|
97
|
+
messages.pop(-2)
|
|
94
98
|
else:
|
|
95
99
|
# Flow for chat-based LLM node w/o prompt/task from pipeline but with messages in state
|
|
96
100
|
# verify messages structure
|
|
@@ -474,9 +474,10 @@ class BaseIndexerToolkit(VectorStoreWrapperBase):
|
|
|
474
474
|
"index_configuration": index_configuration,
|
|
475
475
|
"created_on": created_on,
|
|
476
476
|
"updated_on": created_on,
|
|
477
|
-
"history": "[]",
|
|
478
477
|
"task_id": None,
|
|
478
|
+
"conversation_id": None,
|
|
479
479
|
}
|
|
480
|
+
metadata["history"] = json.dumps([metadata])
|
|
480
481
|
index_meta_doc = Document(page_content=f"{IndexerKeywords.INDEX_META_TYPE.value}_{index_name}", metadata=metadata)
|
|
481
482
|
add_documents(vectorstore=self.vectorstore, documents=[index_meta_doc])
|
|
482
483
|
|
|
@@ -489,6 +490,20 @@ class BaseIndexerToolkit(VectorStoreWrapperBase):
|
|
|
489
490
|
metadata["indexed"] = result
|
|
490
491
|
metadata["state"] = state
|
|
491
492
|
metadata["updated_on"] = time.time()
|
|
493
|
+
#
|
|
494
|
+
history_raw = metadata.pop("history", "[]")
|
|
495
|
+
try:
|
|
496
|
+
history = json.loads(history_raw) if history_raw.strip() else []
|
|
497
|
+
# replace the last history item with updated metadata
|
|
498
|
+
if history and isinstance(history, list):
|
|
499
|
+
history[-1] = metadata
|
|
500
|
+
else:
|
|
501
|
+
history = [metadata]
|
|
502
|
+
except (json.JSONDecodeError, TypeError):
|
|
503
|
+
logger.warning(f"Failed to load index history: {history_raw}. Create new with only current item.")
|
|
504
|
+
history = [metadata]
|
|
505
|
+
#
|
|
506
|
+
metadata["history"] = json.dumps(history)
|
|
492
507
|
index_meta_doc = Document(page_content=index_meta_raw.get("content", ""), metadata=metadata)
|
|
493
508
|
add_documents(vectorstore=self.vectorstore, documents=[index_meta_doc], ids=[index_meta_raw.get("id")])
|
|
494
509
|
|
|
@@ -9,7 +9,7 @@ import swagger_client
|
|
|
9
9
|
from langchain_core.tools import ToolException
|
|
10
10
|
from pydantic import Field, PrivateAttr, model_validator, create_model, SecretStr
|
|
11
11
|
from sklearn.feature_extraction.text import strip_tags
|
|
12
|
-
from swagger_client import TestCaseApi, SearchApi, PropertyResource, ModuleApi
|
|
12
|
+
from swagger_client import TestCaseApi, SearchApi, PropertyResource, ModuleApi, ProjectApi, FieldApi
|
|
13
13
|
from swagger_client.rest import ApiException
|
|
14
14
|
|
|
15
15
|
from ..elitea_base import BaseToolApiWrapper
|
|
@@ -26,21 +26,25 @@ If generated data was used, put appropriate note to the test case description fi
|
|
|
26
26
|
### CRITERIA
|
|
27
27
|
1. The structure should be as in EXAMPLE.
|
|
28
28
|
2. Case and spaces for field names should be exactly the same as in NOTES.
|
|
29
|
-
3. Extra fields are allowed.
|
|
29
|
+
3. Extra fields are allowed and will be mapped to project's custom fields if they exist.
|
|
30
30
|
4. "{QTEST_ID}" is required to update, change or replace values in test case.
|
|
31
31
|
5. Do not provide "Id" and "{QTEST_ID}" to create test case.
|
|
32
|
-
6
|
|
32
|
+
6. "Steps" is a list of test step objects with fields "Test Step Number", "Test Step Description", "Test Step Expected Result".
|
|
33
|
+
7. For updates, provide ONLY the fields you want to change. Omitted fields will remain unchanged.
|
|
33
34
|
|
|
34
35
|
### NOTES
|
|
35
|
-
Id: Unique identifier (e.g., TC-123).
|
|
36
|
-
QTest id: Unique identifier (e.g., 4626964).
|
|
37
|
-
Name: Brief title.
|
|
38
|
-
Description: Short purpose.
|
|
39
|
-
Type: 'Manual'
|
|
40
|
-
Status:
|
|
41
|
-
Priority:
|
|
42
|
-
Test Type:
|
|
43
|
-
Precondition:
|
|
36
|
+
Id: Unique identifier (e.g., TC-123). Read-only.
|
|
37
|
+
QTest id: Unique identifier (e.g., 4626964). Required for updates.
|
|
38
|
+
Name: Brief title of the test case.
|
|
39
|
+
Description: Short description of the test purpose.
|
|
40
|
+
Type: Type of test (e.g., 'Manual', 'Automation - UTAF').
|
|
41
|
+
Status: Current status (e.g., 'New', 'In Progress', 'Completed').
|
|
42
|
+
Priority: Priority level (e.g., 'High', 'Medium', 'Low').
|
|
43
|
+
Test Type: Category of test (e.g., 'Functional', 'Regression', 'Smoke').
|
|
44
|
+
Precondition: Prerequisites for the test, formatted as: <Step1> <Step2> Leave blank if none.
|
|
45
|
+
Steps: Array of test steps with Description and Expected Result.
|
|
46
|
+
|
|
47
|
+
**For Updates**: Include only the fields you want to modify. The system will validate property values against project configuration.
|
|
44
48
|
|
|
45
49
|
### EXAMPLE
|
|
46
50
|
{{
|
|
@@ -118,6 +122,17 @@ GetModules = create_model(
|
|
|
118
122
|
|
|
119
123
|
)
|
|
120
124
|
|
|
125
|
+
GetAllTestCasesFieldsForProject = create_model(
|
|
126
|
+
"GetAllTestCasesFieldsForProject",
|
|
127
|
+
force_refresh=(Optional[bool],
|
|
128
|
+
Field(description="Set to true to reload field definitions from API if project configuration has changed (new fields added, dropdown values modified). Default: false (uses cached data).",
|
|
129
|
+
default=False)),
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
NoInput = create_model(
|
|
133
|
+
"NoInput"
|
|
134
|
+
)
|
|
135
|
+
|
|
121
136
|
class QtestApiWrapper(BaseToolApiWrapper):
|
|
122
137
|
base_url: str
|
|
123
138
|
qtest_project_id: int
|
|
@@ -126,6 +141,7 @@ class QtestApiWrapper(BaseToolApiWrapper):
|
|
|
126
141
|
page: int = 1
|
|
127
142
|
no_of_tests_shown_in_dql_search: int = 10
|
|
128
143
|
_client: Any = PrivateAttr()
|
|
144
|
+
_field_definitions_cache: Optional[dict] = PrivateAttr(default=None)
|
|
129
145
|
llm: Any
|
|
130
146
|
|
|
131
147
|
@model_validator(mode='before')
|
|
@@ -160,33 +176,177 @@ class QtestApiWrapper(BaseToolApiWrapper):
|
|
|
160
176
|
def __instantiate_module_api_instance(self) -> ModuleApi:
|
|
161
177
|
return swagger_client.ModuleApi(self._client)
|
|
162
178
|
|
|
179
|
+
def __instantiate_fields_api_instance(self) -> FieldApi:
|
|
180
|
+
return swagger_client.FieldApi(self._client)
|
|
181
|
+
|
|
182
|
+
def __get_field_definitions_cached(self) -> dict:
|
|
183
|
+
"""Get field definitions with session-level caching.
|
|
184
|
+
|
|
185
|
+
Field definitions are cached for the lifetime of this wrapper instance.
|
|
186
|
+
If project field configuration changes, call refresh_field_definitions_cache()
|
|
187
|
+
to reload the definitions.
|
|
188
|
+
|
|
189
|
+
Returns:
|
|
190
|
+
dict: Field definitions mapping
|
|
191
|
+
"""
|
|
192
|
+
if self._field_definitions_cache is None:
|
|
193
|
+
self._field_definitions_cache = self.__get_project_field_definitions()
|
|
194
|
+
return self._field_definitions_cache
|
|
195
|
+
|
|
196
|
+
def refresh_field_definitions_cache(self) -> dict:
|
|
197
|
+
"""Manually refresh the field definitions cache.
|
|
198
|
+
|
|
199
|
+
Call this method if project field configuration has been updated
|
|
200
|
+
(new fields added, dropdown values changed, etc.) and you need to
|
|
201
|
+
reload the definitions within the same agent session.
|
|
202
|
+
|
|
203
|
+
Returns:
|
|
204
|
+
dict: Freshly loaded field definitions
|
|
205
|
+
"""
|
|
206
|
+
self._field_definitions_cache = None
|
|
207
|
+
return self.__get_field_definitions_cached()
|
|
208
|
+
|
|
209
|
+
def __map_properties_to_api_format(self, test_case_data: dict, field_definitions: dict,
|
|
210
|
+
base_properties: list = None) -> list:
|
|
211
|
+
"""
|
|
212
|
+
Convert user-friendly property names/values to QTest API PropertyResource format.
|
|
213
|
+
|
|
214
|
+
Args:
|
|
215
|
+
test_case_data: Dict with property names as keys (e.g., {"Status": "New", "Priority": "High"})
|
|
216
|
+
field_definitions: Output from __get_project_field_definitions()
|
|
217
|
+
base_properties: Existing properties from a test case (for updates, optional)
|
|
218
|
+
|
|
219
|
+
Returns:
|
|
220
|
+
list[PropertyResource]: Properties ready for API submission
|
|
221
|
+
|
|
222
|
+
Raises:
|
|
223
|
+
ValueError: If any field names are unknown or values are invalid (shows ALL errors)
|
|
224
|
+
"""
|
|
225
|
+
# Start with base properties or empty dict
|
|
226
|
+
props_dict = {}
|
|
227
|
+
if base_properties:
|
|
228
|
+
for prop in base_properties:
|
|
229
|
+
field_name = prop.get('field_name')
|
|
230
|
+
if field_name:
|
|
231
|
+
props_dict[field_name] = {
|
|
232
|
+
'field_id': prop['field_id'],
|
|
233
|
+
'field_name': field_name,
|
|
234
|
+
'field_value': prop['field_value'],
|
|
235
|
+
'field_value_name': prop.get('field_value_name')
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
# Collect ALL validation errors before raising
|
|
239
|
+
validation_errors = []
|
|
240
|
+
|
|
241
|
+
# Map incoming properties from test_case_data
|
|
242
|
+
for field_name, field_value in test_case_data.items():
|
|
243
|
+
# Skip non-property fields (these are handled separately)
|
|
244
|
+
if field_name in ['Name', 'Description', 'Precondition', 'Steps', 'Id', QTEST_ID]:
|
|
245
|
+
continue
|
|
246
|
+
|
|
247
|
+
# Skip None or empty string values (don't update these fields)
|
|
248
|
+
if field_value is None or field_value == '':
|
|
249
|
+
continue
|
|
250
|
+
|
|
251
|
+
# Validate field exists in project - STRICT validation
|
|
252
|
+
if field_name not in field_definitions:
|
|
253
|
+
validation_errors.append(
|
|
254
|
+
f"❌ Unknown field '{field_name}' - not defined in project configuration"
|
|
255
|
+
)
|
|
256
|
+
continue # Skip to next field, keep collecting errors
|
|
257
|
+
|
|
258
|
+
field_def = field_definitions[field_name]
|
|
259
|
+
field_id = field_def['field_id']
|
|
260
|
+
|
|
261
|
+
# Validate value for dropdown fields (only if field has allowed values)
|
|
262
|
+
if field_def['values']:
|
|
263
|
+
# Field has allowed values (dropdown/combobox) - validate strictly
|
|
264
|
+
if field_value not in field_def['values']:
|
|
265
|
+
available = ", ".join(sorted(field_def['values'].keys()))
|
|
266
|
+
validation_errors.append(
|
|
267
|
+
f"❌ Invalid value '{field_value}' for field '{field_name}'. "
|
|
268
|
+
f"Allowed values: {available}"
|
|
269
|
+
)
|
|
270
|
+
continue # Skip to next field, keep collecting errors
|
|
271
|
+
field_value_id = field_def['values'][field_value]
|
|
272
|
+
field_value_name = field_value
|
|
273
|
+
else:
|
|
274
|
+
# Text field or field without restricted values - use value directly
|
|
275
|
+
# No validation needed - users can write anything (by design)
|
|
276
|
+
field_value_id = field_value
|
|
277
|
+
field_value_name = field_value if isinstance(field_value, str) else None
|
|
278
|
+
|
|
279
|
+
# Update or add property (only if no errors for this field)
|
|
280
|
+
props_dict[field_name] = {
|
|
281
|
+
'field_id': field_id,
|
|
282
|
+
'field_name': field_name,
|
|
283
|
+
'field_value': field_value_id,
|
|
284
|
+
'field_value_name': field_value_name
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
# If ANY validation errors found, raise comprehensive error with all issues
|
|
288
|
+
if validation_errors:
|
|
289
|
+
available_fields = ", ".join(sorted(field_definitions.keys()))
|
|
290
|
+
error_msg = (
|
|
291
|
+
f"Found {len(validation_errors)} validation error(s) in test case properties:\n\n" +
|
|
292
|
+
"\n".join(validation_errors) +
|
|
293
|
+
f"\n\n📋 Available fields for this project: {available_fields}\n\n"
|
|
294
|
+
f"💡 Tip: Use 'get_all_test_cases_fields_for_project' tool to see all fields with their allowed values."
|
|
295
|
+
)
|
|
296
|
+
raise ValueError(error_msg)
|
|
297
|
+
|
|
298
|
+
# Convert to PropertyResource list, filtering out special fields
|
|
299
|
+
result = []
|
|
300
|
+
for field_name, prop_data in props_dict.items():
|
|
301
|
+
if field_name in ['Shared', 'Projects Shared to']:
|
|
302
|
+
continue
|
|
303
|
+
result.append(PropertyResource(
|
|
304
|
+
field_id=prop_data['field_id'],
|
|
305
|
+
field_name=prop_data['field_name'],
|
|
306
|
+
field_value=prop_data['field_value'],
|
|
307
|
+
field_value_name=prop_data.get('field_value_name')
|
|
308
|
+
))
|
|
309
|
+
|
|
310
|
+
return result
|
|
311
|
+
|
|
163
312
|
def __build_body_for_create_test_case(self, test_cases_data: list[dict],
|
|
164
313
|
folder_to_place_test_cases_to: str = '') -> list:
|
|
165
|
-
|
|
314
|
+
# Get field definitions for property mapping (cached for session)
|
|
315
|
+
field_definitions = self.__get_field_definitions_cached()
|
|
316
|
+
|
|
166
317
|
modules = self._parse_modules()
|
|
167
318
|
parent_id = ''.join(str(module['module_id']) for module in modules if
|
|
168
319
|
folder_to_place_test_cases_to and module['full_module_name'] == folder_to_place_test_cases_to)
|
|
169
|
-
|
|
170
|
-
for prop in initial_project_properties:
|
|
171
|
-
if prop.get('field_name', '') == 'Shared' or prop.get('field_name', '') == 'Projects Shared to':
|
|
172
|
-
continue
|
|
173
|
-
props.append(PropertyResource(field_id=prop['field_id'], field_name=prop['field_name'],
|
|
174
|
-
field_value_name=prop.get('field_value_name', None),
|
|
175
|
-
field_value=prop['field_value']))
|
|
320
|
+
|
|
176
321
|
bodies = []
|
|
177
322
|
for test_case in test_cases_data:
|
|
323
|
+
# Map properties from user format to API format
|
|
324
|
+
props = self.__map_properties_to_api_format(test_case, field_definitions)
|
|
325
|
+
|
|
178
326
|
body = swagger_client.TestCaseWithCustomFieldResource(properties=props)
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
327
|
+
|
|
328
|
+
# Only set fields if they are explicitly provided in the input
|
|
329
|
+
# This prevents overwriting existing values with None during partial updates
|
|
330
|
+
if 'Name' in test_case:
|
|
331
|
+
body.name = test_case['Name']
|
|
332
|
+
if 'Precondition' in test_case:
|
|
333
|
+
body.precondition = test_case['Precondition']
|
|
334
|
+
if 'Description' in test_case:
|
|
335
|
+
body.description = test_case['Description']
|
|
336
|
+
|
|
182
337
|
if parent_id:
|
|
183
338
|
body.parent_id = parent_id
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
339
|
+
|
|
340
|
+
# Only set test_steps if Steps are provided in the input
|
|
341
|
+
# This prevents overwriting existing steps during partial updates
|
|
342
|
+
if 'Steps' in test_case and test_case['Steps'] is not None:
|
|
343
|
+
test_steps_resources = []
|
|
344
|
+
for step in test_case['Steps']:
|
|
345
|
+
test_steps_resources.append(
|
|
346
|
+
swagger_client.TestStepResource(description=step.get('Test Step Description'),
|
|
347
|
+
expected=step.get('Test Step Expected Result')))
|
|
348
|
+
body.test_steps = test_steps_resources
|
|
349
|
+
|
|
190
350
|
bodies.append(body)
|
|
191
351
|
return bodies
|
|
192
352
|
|
|
@@ -203,6 +363,100 @@ class QtestApiWrapper(BaseToolApiWrapper):
|
|
|
203
363
|
Exception: \n {stacktrace}""")
|
|
204
364
|
return modules
|
|
205
365
|
|
|
366
|
+
def __get_project_field_definitions(self) -> dict:
|
|
367
|
+
"""
|
|
368
|
+
Get structured field definitions for test cases in the project.
|
|
369
|
+
|
|
370
|
+
Returns:
|
|
371
|
+
dict: Mapping of field names to their IDs and allowed values.
|
|
372
|
+
Example: {
|
|
373
|
+
'Status': {
|
|
374
|
+
'field_id': 12345,
|
|
375
|
+
'required': True,
|
|
376
|
+
'values': {'New': 1, 'In Progress': 2, 'Completed': 3}
|
|
377
|
+
},
|
|
378
|
+
'Priority': {
|
|
379
|
+
'field_id': 12346,
|
|
380
|
+
'required': False,
|
|
381
|
+
'values': {'High': 1, 'Medium': 2, 'Low': 3}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
"""
|
|
385
|
+
fields_api = self.__instantiate_fields_api_instance()
|
|
386
|
+
qtest_object = 'test-cases'
|
|
387
|
+
|
|
388
|
+
try:
|
|
389
|
+
fields = fields_api.get_fields(self.qtest_project_id, qtest_object)
|
|
390
|
+
except ApiException as e:
|
|
391
|
+
stacktrace = format_exc()
|
|
392
|
+
logger.error(f"Exception when calling FieldAPI->get_fields:\n {stacktrace}")
|
|
393
|
+
raise ValueError(
|
|
394
|
+
f"Unable to get test case fields for project {self.qtest_project_id}. Exception: \n {stacktrace}")
|
|
395
|
+
|
|
396
|
+
# Build structured mapping
|
|
397
|
+
field_mapping = {}
|
|
398
|
+
for field in fields:
|
|
399
|
+
field_name = field.label
|
|
400
|
+
field_mapping[field_name] = {
|
|
401
|
+
'field_id': field.id,
|
|
402
|
+
'required': getattr(field, 'required', False),
|
|
403
|
+
'values': {}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
# Map allowed values if field has them (dropdown/combobox fields)
|
|
407
|
+
if hasattr(field, 'allowed_values') and field.allowed_values:
|
|
408
|
+
for allowed_value in field.allowed_values:
|
|
409
|
+
# AllowedValueResource has 'label' for the display name and 'value' for the ID
|
|
410
|
+
# Note: 'value' is the field_value, not 'id'
|
|
411
|
+
value_label = allowed_value.label
|
|
412
|
+
value_id = allowed_value.value
|
|
413
|
+
field_mapping[field_name]['values'][value_label] = value_id
|
|
414
|
+
|
|
415
|
+
return field_mapping
|
|
416
|
+
|
|
417
|
+
def __format_field_info_for_display(self, field_definitions: dict) -> str:
|
|
418
|
+
"""
|
|
419
|
+
Format field definitions in human-readable format for LLM.
|
|
420
|
+
|
|
421
|
+
Args:
|
|
422
|
+
field_definitions: Output from __get_project_field_definitions()
|
|
423
|
+
|
|
424
|
+
Returns:
|
|
425
|
+
Formatted string with field information
|
|
426
|
+
"""
|
|
427
|
+
output = [f"Available Test Case Fields for Project {self.qtest_project_id}:\n"]
|
|
428
|
+
|
|
429
|
+
for field_name, field_info in sorted(field_definitions.items()):
|
|
430
|
+
required_marker = " (Required)" if field_info.get('required') else ""
|
|
431
|
+
output.append(f"\n{field_name}{required_marker}:")
|
|
432
|
+
|
|
433
|
+
if field_info.get('values'):
|
|
434
|
+
for value_name, value_id in sorted(field_info['values'].items()):
|
|
435
|
+
output.append(f" - {value_name} (id: {value_id})")
|
|
436
|
+
else:
|
|
437
|
+
output.append(" Type: text")
|
|
438
|
+
|
|
439
|
+
output.append("\n\nUse these exact value names when creating or updating test cases.")
|
|
440
|
+
return ''.join(output)
|
|
441
|
+
|
|
442
|
+
def get_all_test_cases_fields_for_project(self, force_refresh: bool = False) -> str:
|
|
443
|
+
"""
|
|
444
|
+
Get formatted information about available test case fields and their values.
|
|
445
|
+
This method is exposed as a tool for LLM to query field information.
|
|
446
|
+
|
|
447
|
+
Args:
|
|
448
|
+
force_refresh: If True, reload field definitions from API instead of using cache.
|
|
449
|
+
Use this if project configuration has changed (new fields added,
|
|
450
|
+
dropdown values modified, etc.).
|
|
451
|
+
|
|
452
|
+
Returns:
|
|
453
|
+
Formatted string with field names and allowed values
|
|
454
|
+
"""
|
|
455
|
+
if force_refresh:
|
|
456
|
+
self.refresh_field_definitions_cache()
|
|
457
|
+
field_defs = self.__get_field_definitions_cached()
|
|
458
|
+
return self.__format_field_info_for_display(field_defs)
|
|
459
|
+
|
|
206
460
|
def _parse_modules(self) -> list[dict]:
|
|
207
461
|
modules = self.__get_all_modules_for_project()
|
|
208
462
|
result = []
|
|
@@ -320,18 +574,7 @@ class QtestApiWrapper(BaseToolApiWrapper):
|
|
|
320
574
|
parsed_data = self.__perform_search_by_dql(dql)
|
|
321
575
|
return parsed_data[0]['QTest Id']
|
|
322
576
|
|
|
323
|
-
def
|
|
324
|
-
test_api_instance = self.__instantiate_test_api_instance()
|
|
325
|
-
expand_props = 'true'
|
|
326
|
-
try:
|
|
327
|
-
response = test_api_instance.get_test_cases(self.qtest_project_id, 1, 1, expand_props=expand_props)
|
|
328
|
-
return response[0]['properties']
|
|
329
|
-
except ApiException as e:
|
|
330
|
-
stacktrace = format_exc()
|
|
331
|
-
logger.error(f"Exception when calling TestCaseApi->get_test_cases: \n {stacktrace}")
|
|
332
|
-
raise e
|
|
333
|
-
|
|
334
|
-
def __is_jira_requirement_present(self, jira_issue_id: str) -> (bool, dict):
|
|
577
|
+
def __is_jira_requirement_present(self, jira_issue_id: str) -> tuple[bool, dict]:
|
|
335
578
|
""" Define if particular Jira requirement is present in qtest or not """
|
|
336
579
|
dql = f"'External Id' = '{jira_issue_id}'"
|
|
337
580
|
search_instance: SearchApi = swagger_client.SearchApi(self._client)
|
|
@@ -505,5 +748,12 @@ class QtestApiWrapper(BaseToolApiWrapper):
|
|
|
505
748
|
"description": self.get_modules.__doc__,
|
|
506
749
|
"args_schema": GetModules,
|
|
507
750
|
"ref": self.get_modules,
|
|
751
|
+
},
|
|
752
|
+
{
|
|
753
|
+
"name": "get_all_test_cases_fields_for_project",
|
|
754
|
+
"mode": "get_all_test_cases_fields_for_project",
|
|
755
|
+
"description": "Get information about available test case fields and their valid values for the project. Shows which property values are allowed (e.g., Status: 'New', 'In Progress', 'Completed') based on the project configuration. Use force_refresh=true if project configuration has changed.",
|
|
756
|
+
"args_schema": GetAllTestCasesFieldsForProject,
|
|
757
|
+
"ref": self.get_all_test_cases_fields_for_project,
|
|
508
758
|
}
|
|
509
759
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: alita_sdk
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.421
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{alita_sdk-0.3.419 → alita_sdk-0.3.421}/alita_sdk/runtime/langchain/chat_message_template.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|