alita-sdk 0.3.263__py3-none-any.whl → 0.3.499__py3-none-any.whl
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/cli/__init__.py +10 -0
- alita_sdk/cli/__main__.py +17 -0
- alita_sdk/cli/agent/__init__.py +5 -0
- alita_sdk/cli/agent/default.py +258 -0
- alita_sdk/cli/agent_executor.py +155 -0
- alita_sdk/cli/agent_loader.py +215 -0
- alita_sdk/cli/agent_ui.py +228 -0
- alita_sdk/cli/agents.py +3601 -0
- alita_sdk/cli/callbacks.py +647 -0
- alita_sdk/cli/cli.py +168 -0
- alita_sdk/cli/config.py +306 -0
- alita_sdk/cli/context/__init__.py +30 -0
- alita_sdk/cli/context/cleanup.py +198 -0
- alita_sdk/cli/context/manager.py +731 -0
- alita_sdk/cli/context/message.py +285 -0
- alita_sdk/cli/context/strategies.py +289 -0
- alita_sdk/cli/context/token_estimation.py +127 -0
- alita_sdk/cli/formatting.py +182 -0
- alita_sdk/cli/input_handler.py +419 -0
- alita_sdk/cli/inventory.py +1256 -0
- alita_sdk/cli/mcp_loader.py +315 -0
- alita_sdk/cli/toolkit.py +327 -0
- alita_sdk/cli/toolkit_loader.py +85 -0
- alita_sdk/cli/tools/__init__.py +43 -0
- alita_sdk/cli/tools/approval.py +224 -0
- alita_sdk/cli/tools/filesystem.py +1751 -0
- alita_sdk/cli/tools/planning.py +389 -0
- alita_sdk/cli/tools/terminal.py +414 -0
- alita_sdk/community/__init__.py +64 -8
- alita_sdk/community/inventory/__init__.py +224 -0
- alita_sdk/community/inventory/config.py +257 -0
- alita_sdk/community/inventory/enrichment.py +2137 -0
- alita_sdk/community/inventory/extractors.py +1469 -0
- alita_sdk/community/inventory/ingestion.py +3172 -0
- alita_sdk/community/inventory/knowledge_graph.py +1457 -0
- alita_sdk/community/inventory/parsers/__init__.py +218 -0
- alita_sdk/community/inventory/parsers/base.py +295 -0
- alita_sdk/community/inventory/parsers/csharp_parser.py +907 -0
- alita_sdk/community/inventory/parsers/go_parser.py +851 -0
- alita_sdk/community/inventory/parsers/html_parser.py +389 -0
- alita_sdk/community/inventory/parsers/java_parser.py +593 -0
- alita_sdk/community/inventory/parsers/javascript_parser.py +629 -0
- alita_sdk/community/inventory/parsers/kotlin_parser.py +768 -0
- alita_sdk/community/inventory/parsers/markdown_parser.py +362 -0
- alita_sdk/community/inventory/parsers/python_parser.py +604 -0
- alita_sdk/community/inventory/parsers/rust_parser.py +858 -0
- alita_sdk/community/inventory/parsers/swift_parser.py +832 -0
- alita_sdk/community/inventory/parsers/text_parser.py +322 -0
- alita_sdk/community/inventory/parsers/yaml_parser.py +370 -0
- alita_sdk/community/inventory/patterns/__init__.py +61 -0
- alita_sdk/community/inventory/patterns/ast_adapter.py +380 -0
- alita_sdk/community/inventory/patterns/loader.py +348 -0
- alita_sdk/community/inventory/patterns/registry.py +198 -0
- alita_sdk/community/inventory/presets.py +535 -0
- alita_sdk/community/inventory/retrieval.py +1403 -0
- alita_sdk/community/inventory/toolkit.py +173 -0
- alita_sdk/community/inventory/visualize.py +1370 -0
- alita_sdk/configurations/__init__.py +10 -0
- alita_sdk/configurations/ado.py +4 -2
- alita_sdk/configurations/azure_search.py +1 -1
- alita_sdk/configurations/bigquery.py +1 -1
- alita_sdk/configurations/bitbucket.py +94 -2
- alita_sdk/configurations/browser.py +18 -0
- alita_sdk/configurations/carrier.py +19 -0
- alita_sdk/configurations/confluence.py +96 -1
- alita_sdk/configurations/delta_lake.py +1 -1
- alita_sdk/configurations/figma.py +0 -5
- alita_sdk/configurations/github.py +65 -1
- alita_sdk/configurations/gitlab.py +79 -0
- alita_sdk/configurations/google_places.py +17 -0
- alita_sdk/configurations/jira.py +103 -0
- alita_sdk/configurations/postman.py +1 -1
- alita_sdk/configurations/qtest.py +1 -3
- alita_sdk/configurations/report_portal.py +19 -0
- alita_sdk/configurations/salesforce.py +19 -0
- alita_sdk/configurations/service_now.py +1 -12
- alita_sdk/configurations/sharepoint.py +19 -0
- alita_sdk/configurations/sonar.py +18 -0
- alita_sdk/configurations/sql.py +20 -0
- alita_sdk/configurations/testio.py +18 -0
- alita_sdk/configurations/testrail.py +88 -0
- alita_sdk/configurations/xray.py +94 -1
- alita_sdk/configurations/zephyr_enterprise.py +94 -1
- alita_sdk/configurations/zephyr_essential.py +95 -0
- alita_sdk/runtime/clients/artifact.py +12 -2
- alita_sdk/runtime/clients/client.py +235 -66
- alita_sdk/runtime/clients/mcp_discovery.py +342 -0
- alita_sdk/runtime/clients/mcp_manager.py +262 -0
- alita_sdk/runtime/clients/sandbox_client.py +373 -0
- alita_sdk/runtime/langchain/assistant.py +123 -17
- alita_sdk/runtime/langchain/constants.py +8 -1
- alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +315 -3
- alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +209 -31
- alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +1 -1
- alita_sdk/runtime/langchain/document_loaders/AlitaJSONLoader.py +8 -2
- alita_sdk/runtime/langchain/document_loaders/AlitaMarkdownLoader.py +66 -0
- alita_sdk/runtime/langchain/document_loaders/AlitaPDFLoader.py +79 -10
- alita_sdk/runtime/langchain/document_loaders/AlitaPowerPointLoader.py +52 -15
- alita_sdk/runtime/langchain/document_loaders/AlitaPythonLoader.py +9 -0
- alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +1 -4
- alita_sdk/runtime/langchain/document_loaders/AlitaTextLoader.py +15 -2
- alita_sdk/runtime/langchain/document_loaders/ImageParser.py +30 -0
- alita_sdk/runtime/langchain/document_loaders/constants.py +187 -40
- alita_sdk/runtime/langchain/interfaces/llm_processor.py +4 -2
- alita_sdk/runtime/langchain/langraph_agent.py +406 -91
- alita_sdk/runtime/langchain/utils.py +51 -8
- alita_sdk/runtime/llms/preloaded.py +2 -6
- alita_sdk/runtime/models/mcp_models.py +61 -0
- alita_sdk/runtime/toolkits/__init__.py +26 -0
- alita_sdk/runtime/toolkits/application.py +9 -2
- alita_sdk/runtime/toolkits/artifact.py +19 -7
- alita_sdk/runtime/toolkits/datasource.py +13 -6
- alita_sdk/runtime/toolkits/mcp.py +780 -0
- alita_sdk/runtime/toolkits/planning.py +178 -0
- alita_sdk/runtime/toolkits/subgraph.py +11 -6
- alita_sdk/runtime/toolkits/tools.py +214 -60
- alita_sdk/runtime/toolkits/vectorstore.py +9 -4
- alita_sdk/runtime/tools/__init__.py +22 -0
- alita_sdk/runtime/tools/application.py +16 -4
- alita_sdk/runtime/tools/artifact.py +312 -19
- alita_sdk/runtime/tools/function.py +100 -4
- alita_sdk/runtime/tools/graph.py +81 -0
- alita_sdk/runtime/tools/image_generation.py +212 -0
- alita_sdk/runtime/tools/llm.py +539 -180
- alita_sdk/runtime/tools/mcp_inspect_tool.py +284 -0
- alita_sdk/runtime/tools/mcp_remote_tool.py +181 -0
- alita_sdk/runtime/tools/mcp_server_tool.py +3 -1
- alita_sdk/runtime/tools/planning/__init__.py +36 -0
- alita_sdk/runtime/tools/planning/models.py +246 -0
- alita_sdk/runtime/tools/planning/wrapper.py +607 -0
- alita_sdk/runtime/tools/router.py +2 -1
- alita_sdk/runtime/tools/sandbox.py +375 -0
- alita_sdk/runtime/tools/vectorstore.py +62 -63
- alita_sdk/runtime/tools/vectorstore_base.py +156 -85
- alita_sdk/runtime/utils/AlitaCallback.py +106 -20
- alita_sdk/runtime/utils/mcp_client.py +465 -0
- alita_sdk/runtime/utils/mcp_oauth.py +244 -0
- alita_sdk/runtime/utils/mcp_sse_client.py +405 -0
- alita_sdk/runtime/utils/mcp_tools_discovery.py +124 -0
- alita_sdk/runtime/utils/streamlit.py +41 -14
- alita_sdk/runtime/utils/toolkit_utils.py +28 -9
- alita_sdk/runtime/utils/utils.py +14 -0
- alita_sdk/tools/__init__.py +78 -35
- alita_sdk/tools/ado/__init__.py +0 -1
- alita_sdk/tools/ado/repos/__init__.py +10 -6
- alita_sdk/tools/ado/repos/repos_wrapper.py +12 -11
- alita_sdk/tools/ado/test_plan/__init__.py +10 -7
- alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +56 -23
- alita_sdk/tools/ado/wiki/__init__.py +10 -11
- alita_sdk/tools/ado/wiki/ado_wrapper.py +114 -28
- alita_sdk/tools/ado/work_item/__init__.py +10 -11
- alita_sdk/tools/ado/work_item/ado_wrapper.py +63 -10
- alita_sdk/tools/advanced_jira_mining/__init__.py +10 -7
- alita_sdk/tools/aws/delta_lake/__init__.py +13 -11
- alita_sdk/tools/azure_ai/search/__init__.py +11 -7
- alita_sdk/tools/base_indexer_toolkit.py +392 -86
- alita_sdk/tools/bitbucket/__init__.py +18 -11
- alita_sdk/tools/bitbucket/api_wrapper.py +52 -9
- alita_sdk/tools/bitbucket/cloud_api_wrapper.py +5 -5
- alita_sdk/tools/browser/__init__.py +40 -16
- alita_sdk/tools/browser/crawler.py +3 -1
- alita_sdk/tools/browser/utils.py +15 -6
- alita_sdk/tools/carrier/__init__.py +17 -17
- alita_sdk/tools/carrier/backend_reports_tool.py +8 -4
- alita_sdk/tools/carrier/excel_reporter.py +8 -4
- alita_sdk/tools/chunkers/__init__.py +3 -1
- alita_sdk/tools/chunkers/code/codeparser.py +1 -1
- alita_sdk/tools/chunkers/sematic/json_chunker.py +1 -0
- alita_sdk/tools/chunkers/sematic/markdown_chunker.py +97 -6
- alita_sdk/tools/chunkers/sematic/proposal_chunker.py +1 -1
- alita_sdk/tools/chunkers/universal_chunker.py +270 -0
- alita_sdk/tools/cloud/aws/__init__.py +9 -6
- alita_sdk/tools/cloud/azure/__init__.py +9 -6
- alita_sdk/tools/cloud/gcp/__init__.py +9 -6
- alita_sdk/tools/cloud/k8s/__init__.py +9 -6
- alita_sdk/tools/code/linter/__init__.py +7 -7
- alita_sdk/tools/code/loaders/codesearcher.py +3 -2
- alita_sdk/tools/code/sonar/__init__.py +18 -12
- alita_sdk/tools/code_indexer_toolkit.py +199 -0
- alita_sdk/tools/confluence/__init__.py +14 -11
- alita_sdk/tools/confluence/api_wrapper.py +198 -58
- alita_sdk/tools/confluence/loader.py +10 -0
- alita_sdk/tools/custom_open_api/__init__.py +9 -4
- alita_sdk/tools/elastic/__init__.py +8 -7
- alita_sdk/tools/elitea_base.py +543 -64
- alita_sdk/tools/figma/__init__.py +10 -8
- alita_sdk/tools/figma/api_wrapper.py +352 -153
- alita_sdk/tools/github/__init__.py +13 -11
- alita_sdk/tools/github/api_wrapper.py +9 -26
- alita_sdk/tools/github/github_client.py +75 -12
- alita_sdk/tools/github/schemas.py +2 -1
- alita_sdk/tools/gitlab/__init__.py +11 -10
- alita_sdk/tools/gitlab/api_wrapper.py +135 -45
- alita_sdk/tools/gitlab_org/__init__.py +11 -9
- alita_sdk/tools/google/bigquery/__init__.py +12 -13
- alita_sdk/tools/google_places/__init__.py +18 -10
- alita_sdk/tools/jira/__init__.py +14 -8
- alita_sdk/tools/jira/api_wrapper.py +315 -168
- alita_sdk/tools/keycloak/__init__.py +8 -7
- alita_sdk/tools/localgit/local_git.py +56 -54
- alita_sdk/tools/memory/__init__.py +27 -11
- alita_sdk/tools/non_code_indexer_toolkit.py +7 -2
- alita_sdk/tools/ocr/__init__.py +8 -7
- alita_sdk/tools/openapi/__init__.py +10 -1
- alita_sdk/tools/pandas/__init__.py +8 -7
- alita_sdk/tools/pandas/api_wrapper.py +7 -25
- alita_sdk/tools/postman/__init__.py +8 -10
- alita_sdk/tools/postman/api_wrapper.py +19 -8
- alita_sdk/tools/postman/postman_analysis.py +8 -1
- alita_sdk/tools/pptx/__init__.py +8 -9
- alita_sdk/tools/qtest/__init__.py +19 -13
- alita_sdk/tools/qtest/api_wrapper.py +1784 -88
- alita_sdk/tools/rally/__init__.py +10 -9
- alita_sdk/tools/report_portal/__init__.py +20 -15
- alita_sdk/tools/salesforce/__init__.py +19 -15
- alita_sdk/tools/servicenow/__init__.py +14 -11
- alita_sdk/tools/sharepoint/__init__.py +14 -13
- alita_sdk/tools/sharepoint/api_wrapper.py +179 -39
- alita_sdk/tools/sharepoint/authorization_helper.py +191 -1
- alita_sdk/tools/sharepoint/utils.py +8 -2
- alita_sdk/tools/slack/__init__.py +10 -7
- alita_sdk/tools/sql/__init__.py +19 -18
- alita_sdk/tools/sql/api_wrapper.py +71 -23
- alita_sdk/tools/testio/__init__.py +18 -12
- alita_sdk/tools/testrail/__init__.py +10 -10
- alita_sdk/tools/testrail/api_wrapper.py +213 -45
- alita_sdk/tools/utils/__init__.py +28 -4
- alita_sdk/tools/utils/content_parser.py +181 -61
- alita_sdk/tools/utils/text_operations.py +254 -0
- alita_sdk/tools/vector_adapters/VectorStoreAdapter.py +83 -27
- alita_sdk/tools/xray/__init__.py +12 -7
- alita_sdk/tools/xray/api_wrapper.py +58 -113
- alita_sdk/tools/zephyr/__init__.py +9 -6
- alita_sdk/tools/zephyr_enterprise/__init__.py +13 -8
- alita_sdk/tools/zephyr_enterprise/api_wrapper.py +17 -7
- alita_sdk/tools/zephyr_essential/__init__.py +13 -9
- alita_sdk/tools/zephyr_essential/api_wrapper.py +289 -47
- alita_sdk/tools/zephyr_essential/client.py +6 -4
- alita_sdk/tools/zephyr_scale/__init__.py +10 -7
- alita_sdk/tools/zephyr_scale/api_wrapper.py +6 -2
- alita_sdk/tools/zephyr_squad/__init__.py +9 -6
- {alita_sdk-0.3.263.dist-info → alita_sdk-0.3.499.dist-info}/METADATA +180 -33
- alita_sdk-0.3.499.dist-info/RECORD +433 -0
- alita_sdk-0.3.499.dist-info/entry_points.txt +2 -0
- alita_sdk-0.3.263.dist-info/RECORD +0 -342
- {alita_sdk-0.3.263.dist-info → alita_sdk-0.3.499.dist-info}/WHEEL +0 -0
- {alita_sdk-0.3.263.dist-info → alita_sdk-0.3.499.dist-info}/licenses/LICENSE +0 -0
- {alita_sdk-0.3.263.dist-info → alita_sdk-0.3.499.dist-info}/top_level.txt +0 -0
|
@@ -7,7 +7,8 @@ from pydantic import create_model, BaseModel, Field, SecretStr
|
|
|
7
7
|
|
|
8
8
|
from ..base.tool import BaseAction
|
|
9
9
|
from .api_wrapper import ZephyrV1ApiWrapper
|
|
10
|
-
from ..
|
|
10
|
+
from ..elitea_base import filter_missconfigured_index_tools
|
|
11
|
+
from ..utils import clean_string, get_max_toolkit_length
|
|
11
12
|
|
|
12
13
|
name = "zephyr"
|
|
13
14
|
|
|
@@ -22,15 +23,13 @@ def get_tools(tool):
|
|
|
22
23
|
|
|
23
24
|
class ZephyrToolkit(BaseToolkit):
|
|
24
25
|
tools: List[BaseTool] = []
|
|
25
|
-
toolkit_max_length: int = 0
|
|
26
26
|
|
|
27
27
|
@staticmethod
|
|
28
28
|
def toolkit_config_schema() -> BaseModel:
|
|
29
29
|
selected_tools = {x['name']: x['args_schema'].schema() for x in ZephyrV1ApiWrapper.model_construct().get_available_tools()}
|
|
30
|
-
ZephyrToolkit.toolkit_max_length = get_max_toolkit_length(selected_tools)
|
|
31
30
|
return create_model(
|
|
32
31
|
name,
|
|
33
|
-
base_url=(str, Field(description="Base URL"
|
|
32
|
+
base_url=(str, Field(description="Base URL")),
|
|
34
33
|
username=(str, Field(description="Username")),
|
|
35
34
|
password=(SecretStr, Field(description="Password", json_schema_extra={'secret': True})),
|
|
36
35
|
selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
|
|
@@ -45,19 +44,23 @@ class ZephyrToolkit(BaseToolkit):
|
|
|
45
44
|
)
|
|
46
45
|
|
|
47
46
|
@classmethod
|
|
47
|
+
@filter_missconfigured_index_tools
|
|
48
48
|
def get_toolkit(cls, selected_tools: list[str] | None = None, toolkit_name: Optional[str] = None, **kwargs):
|
|
49
49
|
zephyr_api_wrapper = ZephyrV1ApiWrapper(**kwargs)
|
|
50
|
-
prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
|
|
51
50
|
available_tools = zephyr_api_wrapper.get_available_tools()
|
|
52
51
|
tools = []
|
|
53
52
|
for tool in available_tools:
|
|
54
53
|
if selected_tools:
|
|
55
54
|
if tool["name"] not in selected_tools:
|
|
56
55
|
continue
|
|
56
|
+
description = tool["description"]
|
|
57
|
+
if toolkit_name:
|
|
58
|
+
description = f"Toolkit: {toolkit_name}\n{description}"
|
|
59
|
+
description = description[:1000]
|
|
57
60
|
tools.append(BaseAction(
|
|
58
61
|
api_wrapper=zephyr_api_wrapper,
|
|
59
62
|
name=tool["name"],
|
|
60
|
-
description=
|
|
63
|
+
description=description,
|
|
61
64
|
args_schema=tool["args_schema"]
|
|
62
65
|
))
|
|
63
66
|
return cls(tools=tools)
|
|
@@ -4,7 +4,8 @@ from typing import List, Literal, Optional
|
|
|
4
4
|
|
|
5
5
|
from .api_wrapper import ZephyrApiWrapper
|
|
6
6
|
from ..base.tool import BaseAction
|
|
7
|
-
from ..
|
|
7
|
+
from ..elitea_base import filter_missconfigured_index_tools
|
|
8
|
+
from ..utils import clean_string, get_max_toolkit_length
|
|
8
9
|
from ...configurations.pgvector import PgVectorConfiguration
|
|
9
10
|
from ...configurations.zephyr_enterprise import ZephyrEnterpriseConfiguration
|
|
10
11
|
|
|
@@ -27,23 +28,22 @@ def get_tools(tool):
|
|
|
27
28
|
|
|
28
29
|
class ZephyrEnterpriseToolkit(BaseToolkit):
|
|
29
30
|
tools: List[BaseTool] = []
|
|
30
|
-
toolkit_max_length: int = 0
|
|
31
31
|
|
|
32
32
|
@staticmethod
|
|
33
33
|
def toolkit_config_schema() -> BaseModel:
|
|
34
34
|
selected_tools = {x['name']: x['args_schema'].schema() for x in
|
|
35
35
|
ZephyrApiWrapper.model_construct().get_available_tools()}
|
|
36
|
-
ZephyrEnterpriseToolkit.toolkit_max_length = get_max_toolkit_length(selected_tools)
|
|
37
36
|
return create_model(
|
|
38
37
|
name,
|
|
39
|
-
zephyr_configuration=(
|
|
38
|
+
zephyr_configuration=(ZephyrEnterpriseConfiguration, Field(description="Zephyr Configuration", json_schema_extra={'configuration_types': ['zephyr_enterprise']})),
|
|
40
39
|
pgvector_configuration=(Optional[PgVectorConfiguration], Field(description="PgVector Configuration",
|
|
41
40
|
json_schema_extra={
|
|
42
41
|
'configuration_types': ['pgvector']},
|
|
43
42
|
default=None)),
|
|
44
43
|
# embedder settings
|
|
45
44
|
embedding_model=(Optional[str], Field(default=None, description="Embedding configuration.", json_schema_extra={'configuration_model': 'embedding'})),
|
|
46
|
-
selected_tools=(List[Literal[tuple(selected_tools)]],
|
|
45
|
+
selected_tools=(List[Literal[tuple(selected_tools)]],
|
|
46
|
+
Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
|
|
47
47
|
__config__=ConfigDict(json_schema_extra={
|
|
48
48
|
'metadata': {
|
|
49
49
|
"label": "Zephyr Enterprise", "icon_url": "zephyr.svg",
|
|
@@ -53,6 +53,7 @@ class ZephyrEnterpriseToolkit(BaseToolkit):
|
|
|
53
53
|
)
|
|
54
54
|
|
|
55
55
|
@classmethod
|
|
56
|
+
@filter_missconfigured_index_tools
|
|
56
57
|
def get_toolkit(cls, selected_tools: list[str] | None = None, toolkit_name: Optional[str] = None, **kwargs):
|
|
57
58
|
if selected_tools is None:
|
|
58
59
|
selected_tools = []
|
|
@@ -64,16 +65,20 @@ class ZephyrEnterpriseToolkit(BaseToolkit):
|
|
|
64
65
|
**(kwargs.get('embedding_configuration') or {}),
|
|
65
66
|
}
|
|
66
67
|
zephyr_api_wrapper = ZephyrApiWrapper(**wrapper_payload)
|
|
67
|
-
prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
|
|
68
68
|
available_tools = zephyr_api_wrapper.get_available_tools()
|
|
69
69
|
tools = []
|
|
70
70
|
for tool in available_tools:
|
|
71
71
|
if selected_tools and tool["name"] not in selected_tools:
|
|
72
72
|
continue
|
|
73
|
+
description = tool["description"]
|
|
74
|
+
if toolkit_name:
|
|
75
|
+
description = f"Toolkit: {toolkit_name}\n{description}"
|
|
76
|
+
description = description + "\nZephyr Enterprise instance: " + zephyr_api_wrapper.base_url
|
|
77
|
+
description = description[:1000]
|
|
73
78
|
tools.append(BaseAction(
|
|
74
79
|
api_wrapper=zephyr_api_wrapper,
|
|
75
|
-
name=
|
|
76
|
-
description=
|
|
80
|
+
name=tool["name"],
|
|
81
|
+
description=description,
|
|
77
82
|
args_schema=tool["args_schema"]
|
|
78
83
|
))
|
|
79
84
|
return cls(tools=tools)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import json
|
|
1
2
|
import logging
|
|
2
3
|
from typing import Optional, List, Generator, Literal
|
|
3
4
|
|
|
@@ -8,6 +9,8 @@ from langchain_core.documents import Document
|
|
|
8
9
|
from .zephyr_enterprise import ZephyrClient
|
|
9
10
|
from ..non_code_indexer_toolkit import NonCodeIndexerToolkit
|
|
10
11
|
from ..utils.available_tools_decorator import extend_with_parent_available_tools
|
|
12
|
+
from ..utils.content_parser import file_extension_by_chunker
|
|
13
|
+
from ...runtime.utils.utils import IndexerKeywords
|
|
11
14
|
|
|
12
15
|
logger = logging.getLogger(__name__)
|
|
13
16
|
|
|
@@ -152,17 +155,23 @@ class ZephyrApiWrapper(NonCodeIndexerToolkit):
|
|
|
152
155
|
Returns a list of fields for index_data args schema.
|
|
153
156
|
"""
|
|
154
157
|
return {
|
|
155
|
-
|
|
156
|
-
|
|
158
|
+
'chunking_tool': (Literal['json', ''], Field(description="Name of chunking tool", default='json')),
|
|
159
|
+
"zql": (str, Field(description=zql_description, examples=["folder=\"TestToolkit\"", "name~\"TestToolkit5\""]))
|
|
160
|
+
|
|
157
161
|
}
|
|
158
162
|
|
|
159
163
|
def _base_loader(self, zql: str, **kwargs) -> Generator[Document, None, None]:
|
|
160
|
-
|
|
164
|
+
self._chunking_tool = kwargs.get('chunking_tool', None)
|
|
165
|
+
test_cases = self.get_testcases_by_zql(zql=zql, return_as_list=True)
|
|
161
166
|
for test_case in test_cases:
|
|
162
167
|
metadata = {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
168
|
+
"updated_on": str(test_case.get("lastModifiedOn")),
|
|
169
|
+
"id": str(test_case.get("id")),
|
|
170
|
+
"name": test_case.get("name"),
|
|
171
|
+
"testcaseId": str(test_case.get("testcaseId")),
|
|
172
|
+
"projectId": test_case.get("projectId"),
|
|
173
|
+
"projectName": test_case.get("projectName"),
|
|
174
|
+
"testcaseType": test_case.get("testcaseType"),
|
|
166
175
|
}
|
|
167
176
|
yield Document(page_content='', metadata=metadata)
|
|
168
177
|
|
|
@@ -171,7 +180,8 @@ class ZephyrApiWrapper(NonCodeIndexerToolkit):
|
|
|
171
180
|
try:
|
|
172
181
|
id = document.metadata['id']
|
|
173
182
|
test_case_content = self.get_test_case_steps(id)
|
|
174
|
-
|
|
183
|
+
page_content = json.dumps(test_case_content)
|
|
184
|
+
document.metadata[IndexerKeywords.CONTENT_IN_BYTES.value] = page_content.encode('utf-8')
|
|
175
185
|
except Exception as e:
|
|
176
186
|
logging.error(f"Failed to process document: {e}")
|
|
177
187
|
yield document
|
|
@@ -5,15 +5,17 @@ from pydantic import create_model, BaseModel, Field
|
|
|
5
5
|
|
|
6
6
|
from .api_wrapper import ZephyrEssentialApiWrapper
|
|
7
7
|
from ..base.tool import BaseAction
|
|
8
|
-
from ..
|
|
8
|
+
from ..elitea_base import filter_missconfigured_index_tools
|
|
9
|
+
from ..utils import clean_string, get_max_toolkit_length
|
|
9
10
|
from ...configurations.pgvector import PgVectorConfiguration
|
|
11
|
+
from ...configurations.zephyr_essential import ZephyrEssentialConfiguration
|
|
10
12
|
|
|
11
13
|
name = "zephyr_essential"
|
|
12
14
|
|
|
13
15
|
def get_tools(tool):
|
|
14
16
|
return ZephyrEssentialToolkit().get_toolkit(
|
|
15
17
|
selected_tools=tool['settings'].get('selected_tools', []),
|
|
16
|
-
|
|
18
|
+
zephyr_essential_configuration=tool['settings']['zephyr_essential_configuration'],
|
|
17
19
|
toolkit_name=tool.get('toolkit_name'),
|
|
18
20
|
llm = tool['settings'].get('llm', None),
|
|
19
21
|
alita=tool['settings'].get('alita', None),
|
|
@@ -27,16 +29,13 @@ def get_tools(tool):
|
|
|
27
29
|
|
|
28
30
|
class ZephyrEssentialToolkit(BaseToolkit):
|
|
29
31
|
tools: List[BaseTool] = []
|
|
30
|
-
toolkit_max_length: int = 0
|
|
31
32
|
|
|
32
33
|
@staticmethod
|
|
33
34
|
def toolkit_config_schema() -> BaseModel:
|
|
34
35
|
selected_tools = {x['name']: x['args_schema'].schema() for x in ZephyrEssentialApiWrapper.model_construct().get_available_tools()}
|
|
35
|
-
ZephyrEssentialToolkit.toolkit_max_length = get_max_toolkit_length(selected_tools)
|
|
36
36
|
return create_model(
|
|
37
37
|
name,
|
|
38
|
-
|
|
39
|
-
base_url=(Optional[str], Field(description="Zephyr Essential base url", default=None)),
|
|
38
|
+
zephyr_essential_configuration=(ZephyrEssentialConfiguration, Field(description="Zephyr Essential Configuration", json_schema_extra={'configuration_types': ['zephyr_essential']})),
|
|
40
39
|
selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
|
|
41
40
|
pgvector_configuration=(Optional[PgVectorConfiguration], Field(default=None,
|
|
42
41
|
description="PgVector Configuration",
|
|
@@ -51,25 +50,30 @@ class ZephyrEssentialToolkit(BaseToolkit):
|
|
|
51
50
|
)
|
|
52
51
|
|
|
53
52
|
@classmethod
|
|
53
|
+
@filter_missconfigured_index_tools
|
|
54
54
|
def get_toolkit(cls, selected_tools: list[str] | None = None, toolkit_name: Optional[str] = None, **kwargs):
|
|
55
55
|
if selected_tools is None:
|
|
56
56
|
selected_tools = []
|
|
57
57
|
wrapper_payload = {
|
|
58
58
|
**kwargs,
|
|
59
|
+
**kwargs.get('zephyr_essential_configuration', {}),
|
|
59
60
|
**(kwargs.get('pgvector_configuration') or {}),
|
|
60
61
|
}
|
|
61
62
|
zephyr_api_wrapper = ZephyrEssentialApiWrapper(**wrapper_payload)
|
|
62
|
-
prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
|
|
63
63
|
available_tools = zephyr_api_wrapper.get_available_tools()
|
|
64
64
|
tools = []
|
|
65
65
|
for tool in available_tools:
|
|
66
66
|
if selected_tools:
|
|
67
67
|
if tool["name"] not in selected_tools:
|
|
68
68
|
continue
|
|
69
|
+
description = tool["description"]
|
|
70
|
+
if toolkit_name:
|
|
71
|
+
description = f"Toolkit: {toolkit_name}\n{description}"
|
|
72
|
+
description = description[:1000]
|
|
69
73
|
tools.append(BaseAction(
|
|
70
74
|
api_wrapper=zephyr_api_wrapper,
|
|
71
|
-
name=
|
|
72
|
-
description=
|
|
75
|
+
name=tool["name"],
|
|
76
|
+
description=description,
|
|
73
77
|
args_schema=tool["args_schema"]
|
|
74
78
|
))
|
|
75
79
|
return cls(tools=tools)
|