alita-sdk 0.3.145__py3-none-any.whl → 0.3.147__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.
Files changed (45) hide show
  1. alita_sdk/runtime/tools/function.py +0 -2
  2. alita_sdk/runtime/tools/indexer_tool.py +4 -2
  3. alita_sdk/tools/ado/repos/__init__.py +3 -1
  4. alita_sdk/tools/ado/test_plan/__init__.py +2 -0
  5. alita_sdk/tools/ado/wiki/__init__.py +17 -15
  6. alita_sdk/tools/ado/work_item/__init__.py +4 -1
  7. alita_sdk/tools/advanced_jira_mining/__init__.py +10 -1
  8. alita_sdk/tools/azure_ai/search/__init__.py +7 -1
  9. alita_sdk/tools/bitbucket/__init__.py +9 -1
  10. alita_sdk/tools/browser/__init__.py +1 -1
  11. alita_sdk/tools/carrier/__init__.py +2 -4
  12. alita_sdk/tools/cloud/aws/__init__.py +10 -1
  13. alita_sdk/tools/code/linter/__init__.py +5 -1
  14. alita_sdk/tools/code/sonar/__init__.py +11 -2
  15. alita_sdk/tools/confluence/__init__.py +3 -1
  16. alita_sdk/tools/custom_open_api/__init__.py +4 -1
  17. alita_sdk/tools/elastic/__init__.py +2 -1
  18. alita_sdk/tools/figma/__init__.py +3 -1
  19. alita_sdk/tools/github/__init__.py +5 -2
  20. alita_sdk/tools/gitlab/__init__.py +3 -1
  21. alita_sdk/tools/gitlab_org/__init__.py +3 -1
  22. alita_sdk/tools/google_places/__init__.py +11 -2
  23. alita_sdk/tools/jira/__init__.py +4 -2
  24. alita_sdk/tools/keycloak/__init__.py +3 -2
  25. alita_sdk/tools/ocr/__init__.py +6 -2
  26. alita_sdk/tools/pandas/__init__.py +5 -2
  27. alita_sdk/tools/pptx/__init__.py +5 -2
  28. alita_sdk/tools/qtest/__init__.py +3 -1
  29. alita_sdk/tools/rally/__init__.py +4 -2
  30. alita_sdk/tools/report_portal/__init__.py +3 -1
  31. alita_sdk/tools/salesforce/__init__.py +5 -1
  32. alita_sdk/tools/servicenow/__init__.py +3 -1
  33. alita_sdk/tools/sharepoint/__init__.py +6 -1
  34. alita_sdk/tools/sql/__init__.py +9 -2
  35. alita_sdk/tools/testio/__init__.py +3 -1
  36. alita_sdk/tools/testrail/__init__.py +5 -1
  37. alita_sdk/tools/xray/__init__.py +9 -1
  38. alita_sdk/tools/zephyr/__init__.py +10 -2
  39. alita_sdk/tools/zephyr_enterprise/__init__.py +8 -2
  40. alita_sdk/tools/zephyr_scale/__init__.py +2 -0
  41. {alita_sdk-0.3.145.dist-info → alita_sdk-0.3.147.dist-info}/METADATA +218 -30
  42. {alita_sdk-0.3.145.dist-info → alita_sdk-0.3.147.dist-info}/RECORD +45 -45
  43. {alita_sdk-0.3.145.dist-info → alita_sdk-0.3.147.dist-info}/WHEEL +0 -0
  44. {alita_sdk-0.3.145.dist-info → alita_sdk-0.3.147.dist-info}/licenses/LICENSE +0 -0
  45. {alita_sdk-0.3.145.dist-info → alita_sdk-0.3.147.dist-info}/top_level.txt +0 -0
@@ -7,8 +7,6 @@ from langchain_core.runnables import RunnableConfig
7
7
  from langchain_core.tools import BaseTool
8
8
  from typing import Any, Optional, Union, Annotated
9
9
  from langchain_core.utils.function_calling import convert_to_openai_tool
10
- from langgraph.prebuilt import InjectedStore
11
- from langgraph.store.base import BaseStore
12
10
  from pydantic import ValidationError
13
11
  from ..langchain.utils import propagate_the_input_mapping
14
12
 
@@ -4,7 +4,7 @@ from traceback import format_exc
4
4
 
5
5
  from langchain_core.callbacks import dispatch_custom_event
6
6
  from langchain_core.runnables import RunnableConfig
7
- from langchain_core.tools import BaseTool
7
+ from langchain_core.tools import BaseTool, ToolException
8
8
  from typing import Any, Optional, Union
9
9
  from langchain_core.messages import ToolCall
10
10
  from langchain_core.utils.function_calling import convert_to_openai_tool
@@ -72,6 +72,8 @@ class IndexerNode(BaseTool):
72
72
  logger.error(f"Chunking error: {format_exc()}")
73
73
  return {"messages": [{"role": "assistant", "content": f"""Chunking tool {self.chunking_tool} raised an error.\n\nError: {format_exc()}"""}]}
74
74
  index_results = self.index_tool.invoke({"documents": chunks if chunks else result}, config=config, kwargs=kwargs)
75
+ if isinstance(index_results, ToolException):
76
+ raise index_results
75
77
  logger.info(f"IndexNode response: {index_results}")
76
78
  total_time = round((time() - start_time), 2)
77
79
  index_results['total_time'] = total_time
@@ -84,7 +86,7 @@ class IndexerNode(BaseTool):
84
86
  return {
85
87
  "messages": [{"role": "assistant", "content": f"""Tool input to the {self.tool.name} with value {result} raised ValidationError.
86
88
  \n\nTool schema is {dumps(params)} \n\nand the input to LLM was
87
- {func_args}"""}]}
89
+ {func_args}\n{e}"""}]}
88
90
 
89
91
  def _run(self, *args, **kwargs):
90
92
  return self.invoke(**kwargs)
@@ -72,7 +72,9 @@ class AzureDevOpsReposToolkit(BaseToolkit):
72
72
  }
73
73
  ]
74
74
  }
75
- }
75
+ },
76
+ "categories": ["code repositories"],
77
+ "extra_categories": ["code", "repository", "version control"]
76
78
  }}}
77
79
  )
78
80
 
@@ -31,6 +31,8 @@ class AzureDevOpsPlansToolkit(BaseToolkit):
31
31
  {
32
32
  "label": "ADO plans",
33
33
  "icon_url": "ado-plans.svg",
34
+ "categories": ["test management"],
35
+ "extra_categories": ["test case management", "qa"],
34
36
  "sections": {
35
37
  "auth": {
36
38
  "required": True,
@@ -31,22 +31,23 @@ class AzureDevOpsWikiToolkit(BaseToolkit):
31
31
  Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
32
32
  __config__={
33
33
  'json_schema_extra': {
34
- 'metadata':
35
- {
36
- "label": "ADO wiki",
37
- "icon_url": None,
38
- "sections": {
39
- "auth": {
40
- "required": True,
41
- "subsections": [
42
- {
43
- "name": "Token",
44
- "fields": ["token"]
45
- }
46
- ]
47
- }
34
+ 'metadata': {
35
+ "label": "ADO wiki",
36
+ "icon_url": None,
37
+ "categories": ["documentation"],
38
+ "extra_categories": ["knowledge base", "documentation management", "wiki"],
39
+ "sections": {
40
+ "auth": {
41
+ "required": True,
42
+ "subsections": [
43
+ {
44
+ "name": "Token",
45
+ "fields": ["token"]
46
+ }
47
+ ]
48
48
  }
49
49
  }
50
+ }
50
51
  }
51
52
  }
52
53
  )
@@ -75,4 +76,5 @@ class AzureDevOpsWikiToolkit(BaseToolkit):
75
76
  return cls(tools=tools)
76
77
 
77
78
  def get_tools(self):
78
- return self.tools
79
+ return self.tools
80
+
@@ -34,6 +34,8 @@ class AzureDevOpsWorkItemsToolkit(BaseToolkit):
34
34
  'metadata': {
35
35
  "label": "ADO boards",
36
36
  "icon_url": None,
37
+ "categories": ["project management"],
38
+ "extra_categories": ["work item management", "issue tracking", "agile boards"],
37
39
  "sections": {
38
40
  "auth": {
39
41
  "required": True,
@@ -75,4 +77,5 @@ class AzureDevOpsWorkItemsToolkit(BaseToolkit):
75
77
  return cls(tools=tools)
76
78
 
77
79
  def get_tools(self):
78
- return self.tools
80
+ return self.tools
81
+
@@ -46,7 +46,16 @@ class AdvancedJiraMiningToolkit(BaseToolkit):
46
46
  is_jira_cloud=(bool, Field(default=True, title="Cloud", description="JIRA Cloud")),
47
47
  verify_ssl=(bool, Field(default=True, title="Verify SSL", description="Verify SSL")),
48
48
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
49
- __config__={'json_schema_extra': {'metadata': {"label": "Advanced JIRA mining", "icon_url": "jira-icon.svg", "hidden": True}}}
49
+ __config__={
50
+ 'json_schema_extra':
51
+ {'metadata':
52
+ {
53
+ "label": "Advanced JIRA mining", "icon_url": "jira-icon.svg", "hidden": True,
54
+ "categories": ["project management"],
55
+ "extra_categories": ["jira", "confluence", "issue tracking", "agile management"],
56
+ }
57
+ }
58
+ }
50
59
  )
51
60
 
52
61
  @classmethod
@@ -45,7 +45,13 @@ class AzureSearchToolkit(BaseToolkit):
45
45
  openai_api_key=(Optional[str], Field(description="Azure OpenAI API Key", default=None, json_schema_extra={'secret': True})),
46
46
  model_name=(str, Field(description="Model name for Embeddings model", default=None)),
47
47
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
48
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Azure Search", "icon_url": None, "hidden": True}})
48
+ __config__=ConfigDict(json_schema_extra={
49
+ 'metadata': {
50
+ "label": "Azure Search", "icon_url": None, "hidden": True,
51
+ "categories": ["other"],
52
+ "extra_categories": ["azure cognitive search", "vector database", "knowledge base"]
53
+ }
54
+ })
49
55
  )
50
56
 
51
57
  @classmethod
@@ -45,7 +45,15 @@ class AlitaBitbucketToolkit(BaseToolkit):
45
45
  password=(SecretStr, Field(description="GitLab private token", json_schema_extra={'secret': True})),
46
46
  cloud=(Optional[bool], Field(description="Hosting Option", default=None)),
47
47
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
48
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Bitbucket", "icon_url": "bitbucket-icon.svg"}})
48
+ __config__=ConfigDict(json_schema_extra=
49
+ {
50
+ 'metadata':
51
+ {
52
+ "label": "Bitbucket", "icon_url": "bitbucket-icon.svg",
53
+ "categories": ["code repositories"],
54
+ "extra_categories": ["bitbucket", "git", "repository", "code", "version control"],
55
+ }
56
+ })
49
57
  )
50
58
 
51
59
  @classmethod
@@ -50,7 +50,7 @@ class BrowserToolkit(BaseToolkit):
50
50
 
51
51
  return create_model(
52
52
  name,
53
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Browser", "icon_url": None}}),
53
+ __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Browser", "icon_url": None, "categories": ["testing"], "extra_categories": ["web scraping", "search", "crawler"]}}),
54
54
  google_cse_id=(Optional[str], Field(description="Google CSE id", default=None)),
55
55
  google_api_key=(Optional[SecretStr],
56
56
  Field(description="Google API key", default=None, json_schema_extra={'secret': True})),
@@ -42,10 +42,8 @@ class AlitaCarrierToolkit(BaseToolkit):
42
42
  "label": "Carrier",
43
43
  "version": "2.0.1",
44
44
  "icon_url": "carrier.svg",
45
- "capabilities": {
46
- "total_tools": len(selected_tools),
47
- "tool_categories": ["Ticket Management", "Reporting", "Audit Logs"]
48
- }
45
+ "categories": ["testing"],
46
+ "extra_categories": ["carrier", "ticket management", "log management"],
49
47
  }
50
48
  })
51
49
  )
@@ -33,7 +33,16 @@ class AWSToolkit(BaseToolkit):
33
33
  access_key_id=(Optional[str], Field(default=None, title="Access Key ID", description="AWS access key ID")),
34
34
  secret_access_key=(Optional[SecretStr], Field(default=None, title="Secret Access Key", description="AWS secret access key", json_schema_extra={'secret': True})),
35
35
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
36
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Cloud AWS", "icon_url": None, "hidden": True}})
36
+ __config__=ConfigDict(json_schema_extra=
37
+ {
38
+ 'metadata':
39
+ {
40
+ "label": "Cloud AWS", "icon_url": None, "hidden": True,
41
+ "categories": ["cloud"],
42
+ "extra_categories": ["aws", "amazon web services", "cloud computing",
43
+ "infrastructure as a service"]
44
+ }
45
+ })
37
46
  )
38
47
 
39
48
  @classmethod
@@ -27,6 +27,9 @@ class PythonLinterToolkit(BaseToolkit):
27
27
  return create_model(
28
28
  name,
29
29
  error_codes=(str, Field(description="Error codes to be used by the linter")),
30
+ __config__={'json_schema_extra': {'metadata': {"label": "Python Linter", "icon_url": None, "hidden": True,
31
+ "categories": ["development"],
32
+ "extra_categories": ["code linter", "python linter"]}}}
30
33
  )
31
34
 
32
35
  @classmethod
@@ -50,4 +53,5 @@ class PythonLinterToolkit(BaseToolkit):
50
53
  return cls(tools=tools)
51
54
 
52
55
  def get_tools(self) -> list[BaseTool]:
53
- return self.tools
56
+ return self.tools
57
+
@@ -32,7 +32,15 @@ class SonarToolkit(BaseToolkit):
32
32
  sonar_token=(SecretStr, Field(description="SonarQube user token for authentication", json_schema_extra={'secret': True})),
33
33
  sonar_project_name=(str, Field(description="Project name of the desired repository")),
34
34
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
35
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Sonar", "icon_url": "sonar-icon.svg"}})
35
+ __config__=ConfigDict(json_schema_extra=
36
+ {
37
+ 'metadata':
38
+ {
39
+ "label": "Sonar", "icon_url": "sonar-icon.svg",
40
+ "categories": ["development"],
41
+ "extra_categories": ["code quality", "code security", "code coverage", "quality", "sonarqube"]
42
+ }
43
+ })
36
44
  )
37
45
 
38
46
  @classmethod
@@ -55,4 +63,5 @@ class SonarToolkit(BaseToolkit):
55
63
  return cls(tools=tools)
56
64
 
57
65
  def get_tools(self) -> list[BaseTool]:
58
- return self.tools
66
+ return self.tools
67
+
@@ -86,7 +86,9 @@ class ConfluenceToolkit(BaseToolkit):
86
86
  }
87
87
  ]
88
88
  }
89
- }
89
+ },
90
+ "categories": ["documentation"],
91
+ "extra_categories": ["confluence", "wiki", "knowledge base", "documentation", "atlassian"]
90
92
  }
91
93
  })
92
94
  )
@@ -30,7 +30,10 @@ class OpenApiToolkit(BaseToolkit):
30
30
  spec=(str, Field(default="", title="Specification", description="OpenAPI specification")),
31
31
  api_key=(str, Field(default="", title="API key", description="API key", json_schema_extra={'secret': True})),
32
32
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
33
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "OpenAPI", "icon_url": None}})
33
+ __config__=ConfigDict(json_schema_extra={'metadata':
34
+ {"label": "OpenAPI", "icon_url": None,
35
+ "categories": ["testing"],
36
+ "extra_categories": [ "openapi", "swagger"]}})
34
37
  )
35
38
 
36
39
  @classmethod
@@ -61,4 +61,5 @@ class ElasticToolkit(BaseToolkit):
61
61
  return cls(tools=tools)
62
62
 
63
63
  def get_tools(self) -> list[BaseTool]:
64
- return self.tools
64
+ return self.tools
65
+
@@ -65,7 +65,9 @@ class FigmaToolkit(BaseToolkit):
65
65
  }
66
66
  ]
67
67
  }
68
- }
68
+ },
69
+ "categories": ["other"],
70
+ "extra_categories": ["figma", "design", "ui/ux", "prototyping", "collaboration"],
69
71
  }
70
72
  }
71
73
  ),
@@ -71,7 +71,9 @@ class AlitaGitHubToolkit(BaseToolkit):
71
71
  }
72
72
  ]
73
73
  },
74
- }
74
+ },
75
+ "categories": ["code repositories"],
76
+ "extra_categories": ["github", "git", "repository", "code", "version control"],
75
77
  },
76
78
  }
77
79
  ),
@@ -119,4 +121,5 @@ class AlitaGitHubToolkit(BaseToolkit):
119
121
  return cls(tools=tools)
120
122
 
121
123
  def get_tools(self):
122
- return self.tools
124
+ return self.tools
125
+
@@ -53,7 +53,9 @@ class AlitaGitlabToolkit(BaseToolkit):
53
53
  }
54
54
  ]
55
55
  }
56
- }
56
+ },
57
+ "categories": ["code repositories"],
58
+ "extra_categories": ["gitlab", "git", "repository", "code", "version control"],
57
59
  }
58
60
  })
59
61
  )
@@ -50,7 +50,9 @@ class AlitaGitlabSpaceToolkit(BaseToolkit):
50
50
  }
51
51
  ]
52
52
  }
53
- }
53
+ },
54
+ "categories": ["code repositories"],
55
+ "extra_categories": ["gitlab", "git", "repository", "code", "version control"],
54
56
  }
55
57
  })
56
58
  )
@@ -31,7 +31,16 @@ class GooglePlacesToolkit(BaseToolkit):
31
31
  api_key=(SecretStr, Field(description="Google Places API key", json_schema_extra={'secret': True, 'max_toolkit_length': GooglePlacesToolkit.toolkit_max_length})),
32
32
  results_count=(Optional[int], Field(description="Results number to show", default=None)),
33
33
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
34
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Google Places", "icon_url": "gplaces-icon.svg"}})
34
+ __config__=ConfigDict(json_schema_extra=
35
+ {
36
+ 'metadata':
37
+ {
38
+ "label": "Google Places", "icon_url": "gplaces-icon.svg",
39
+ "categories": ["other"],
40
+ "extra_categories": ["google", "places", "maps", "location",
41
+ "geolocation"],
42
+ }
43
+ })
35
44
  )
36
45
 
37
46
  @classmethod
@@ -54,4 +63,4 @@ class GooglePlacesToolkit(BaseToolkit):
54
63
  return cls(tools=tools)
55
64
 
56
65
  def get_tools(self) -> list[BaseTool]:
57
- return self.tools
66
+ return self.tools
@@ -51,7 +51,7 @@ class JiraToolkit(BaseToolkit):
51
51
  api_key=(Optional[SecretStr], Field(description="API key", default=None, json_schema_extra={'secret': True, 'configuration': True})),
52
52
  username=(Optional[str], Field(description="Jira Username", default=None, json_schema_extra={'configuration': True})),
53
53
  token=(Optional[SecretStr], Field(description="Jira token", default=None, json_schema_extra={'secret': True, 'configuration': True})),
54
- limit=(int, Field(description="Limit issues", default=5)),
54
+ limit=(int, Field(description="Limit issues")),
55
55
  labels=(Optional[str], Field(
56
56
  description="List of comma separated labels used for labeling of agent's created or updated entities",
57
57
  default=None,
@@ -78,7 +78,9 @@ class JiraToolkit(BaseToolkit):
78
78
  }
79
79
  ]
80
80
  }
81
- }
81
+ },
82
+ "categories": ["project management"],
83
+ "extra_categories": ["jira", "atlassian", "issue tracking", "project management", "task management"],
82
84
  }
83
85
  })
84
86
  )
@@ -34,7 +34,7 @@ class KeycloakToolkit(BaseToolkit):
34
34
  client_id=(str, Field(default="", title="Client ID", description="Keycloak client ID")),
35
35
  client_secret=(SecretStr, Field(default="", title="Client sercet", description="Keycloak client secret", json_schema_extra={'secret': True})),
36
36
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
37
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Keycloak", "icon_url": None, "hidden": True}})
37
+ __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Keycloak", "icon_url": None, "hidden": True, "categories": ["authentication", "identity management"]}})
38
38
  )
39
39
 
40
40
  @classmethod
@@ -57,4 +57,5 @@ class KeycloakToolkit(BaseToolkit):
57
57
  return cls(tools=tools)
58
58
 
59
59
  def get_tools(self) -> list[BaseTool]:
60
- return self.tools
60
+ return self.tools
61
+
@@ -36,7 +36,10 @@ class OCRToolkit(BaseToolkit):
36
36
  structured_output=(bool, Field(description="Whether to return structured JSON output", default=False)),
37
37
  expected_fields=(dict, Field(description="Expected fields for structured output", default={})),
38
38
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
39
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "OCR", "icon_url": None, "hidden": True}})
39
+ __config__=ConfigDict(json_schema_extra={'metadata': {"label": "OCR", "icon_url": None, "hidden": True,
40
+ "categories": ["analysis"],
41
+ "extra_categories": ["optical character recognition", "text extraction"]
42
+ }})
40
43
  )
41
44
 
42
45
  @classmethod
@@ -59,4 +62,5 @@ class OCRToolkit(BaseToolkit):
59
62
  return cls(tools=tools)
60
63
 
61
64
  def get_tools(self) -> list[BaseTool]:
62
- return self.tools
65
+ return self.tools
66
+
@@ -31,7 +31,9 @@ class PandasToolkit(BaseToolkit):
31
31
  name,
32
32
  bucket_name=(str, Field(default=None, title="Bucket name", description="Bucket where the content file is stored", json_schema_extra={'toolkit_name': True, 'max_toolkit_length': PandasToolkit.toolkit_max_length})),
33
33
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
34
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Pandas", "icon_url": "pandas-icon.svg"}})
34
+ __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Pandas", "icon_url": "pandas-icon.svg",
35
+ "categories": ["analysis"],
36
+ "extra_categories": ["data science", "data manipulation", "dataframes"]}})
35
37
  )
36
38
 
37
39
  @classmethod
@@ -54,4 +56,5 @@ class PandasToolkit(BaseToolkit):
54
56
  return cls(tools=tools)
55
57
 
56
58
  def get_tools(self):
57
- return self.tools
59
+ return self.tools
60
+
@@ -51,7 +51,9 @@ class PPTXToolkit(BaseToolkit):
51
51
  __config__=ConfigDict(json_schema_extra={
52
52
  'metadata': {
53
53
  "label": "PPTX",
54
- "icon_url": None
54
+ "icon_url": None,
55
+ "categories": ["office"],
56
+ "extra_categories": ["presentation", "office automation", "document"]
55
57
  }
56
58
  })
57
59
  )
@@ -94,4 +96,5 @@ class PPTXToolkit(BaseToolkit):
94
96
  """
95
97
  Return all tools in the toolkit.
96
98
  """
97
- return self.tools
99
+ return self.tools
100
+
@@ -36,7 +36,9 @@ class QtestToolkit(BaseToolkit):
36
36
  qtest_project_id=(int, Field(description="QTest project id", json_schema_extra={'toolkit_name': True, 'max_toolkit_length': QtestToolkit.toolkit_max_length})),
37
37
  qtest_api_token=(SecretStr, Field(description="QTest API token", json_schema_extra={'secret': True, 'configuration': True})),
38
38
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
39
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "QTest", "icon_url": "qtest.svg"}})
39
+ __config__=ConfigDict(json_schema_extra={'metadata': {"label": "QTest", "icon_url": "qtest.svg",
40
+ "categories": ["test management"],
41
+ "extra_categories": ["quality assurance", "test case management", "test planning"]}})
40
42
  )
41
43
 
42
44
  @check_connection_response
@@ -55,7 +55,9 @@ class RallyToolkit(BaseToolkit):
55
55
  }
56
56
  ]
57
57
  }
58
- }
58
+ },
59
+ "categories": ["project management"],
60
+ "extra_categories": ["agile management", "test management", "scrum", "kanban"]
59
61
  }
60
62
  })
61
63
  )
@@ -81,4 +83,4 @@ class RallyToolkit(BaseToolkit):
81
83
  return cls(tools=tools)
82
84
 
83
85
  def get_tools(self):
84
- return self.tools
86
+ return self.tools
@@ -34,7 +34,9 @@ class ReportPortalToolkit(BaseToolkit):
34
34
  project=(str, Field(description="Report Portal project")),
35
35
  api_key=(SecretStr, Field(description="User API key", json_schema_extra={'secret': True})),
36
36
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
37
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Report Portal", "icon_url": "reportportal-icon.svg"}})
37
+ __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Report Portal", "icon_url": "reportportal-icon.svg",
38
+ "categories": ["testing"],
39
+ "extra_categories": ["test reporting", "test automation"]}})
38
40
  )
39
41
 
40
42
  @classmethod
@@ -30,7 +30,11 @@ class SalesforceToolkit(BaseToolkit):
30
30
  client_secret=(SecretStr, Field(description="Salesforce Connected App Client Secret", json_schema_extra={'secret': True})),
31
31
  api_version=(str, Field(description="Salesforce API Version", default='v59.0')),
32
32
  selected_tools=(List[Literal[tuple(available_tools)]], Field(default=[], json_schema_extra={'args_schemas': available_tools})),
33
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Salesforce", "icon_url": "salesforce-icon.svg"}})
33
+ __config__=ConfigDict(json_schema_extra={'metadata': {
34
+ "label": "Salesforce", "icon_url": "salesforce-icon.svg",
35
+ "categories": ["other"],
36
+ "extra_categories": ["customer relationship management", "cloud computing", "marketing automation", "salesforce"]
37
+ }})
34
38
  )
35
39
 
36
40
  @classmethod
@@ -58,7 +58,9 @@ class ServiceNowToolkit(BaseToolkit):
58
58
  }
59
59
  ]
60
60
  }
61
- }
61
+ },
62
+ "categories": ["other"],
63
+ "extra_categories": ["incident management", "problem management", "change management", "service catalog"]
62
64
  }
63
65
  })
64
66
  )
@@ -32,7 +32,12 @@ class SharepointToolkit(BaseToolkit):
32
32
  client_id=(str, Field(description="Client ID")),
33
33
  client_secret=(SecretStr, Field(description="Client Secret", json_schema_extra={'secret': True})),
34
34
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
35
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Sharepoint", "icon_url": "sharepoint.svg"}})
35
+ __config__=ConfigDict(json_schema_extra={
36
+ 'metadata': {
37
+ "label": "Sharepoint", "icon_url": "sharepoint.svg",
38
+ "categories": ["office"],
39
+ "extra_categories": ["microsoft", "cloud storage", "team collaboration", "content management"]
40
+ }})
36
41
  )
37
42
 
38
43
  @classmethod
@@ -41,7 +41,13 @@ class SQLToolkit(BaseToolkit):
41
41
  password=(SecretStr, Field(description="Database password", json_schema_extra={'secret': True})),
42
42
  database_name=(str, Field(description="Database name", json_schema_extra={'toolkit_name': True, 'max_toolkit_length': SQLToolkit.toolkit_max_length})),
43
43
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
44
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "SQL", "icon_url": "sql-icon.svg"}})
44
+ __config__=ConfigDict(json_schema_extra=
45
+ {
46
+ 'metadata':
47
+ {
48
+ "label": "SQL", "icon_url": "sql-icon.svg",
49
+ "categories": ["development"],
50
+ "extra_categories": ["sql", "data management", "data analysis"]}})
45
51
  )
46
52
 
47
53
  @classmethod
@@ -64,4 +70,5 @@ class SQLToolkit(BaseToolkit):
64
70
  return cls(tools=tools)
65
71
 
66
72
  def get_tools(self) -> list[BaseTool]:
67
- return self.tools
73
+ return self.tools
74
+
@@ -32,7 +32,9 @@ class TestIOToolkit(BaseToolkit):
32
32
  endpoint=(str, Field(description="TestIO endpoint", json_schema_extra={'toolkit_name': True, 'max_toolkit_length': TOOLKIT_MAX_LENGTH})),
33
33
  api_key=(SecretStr, Field(description="API key", json_schema_extra={'secret': True})),
34
34
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
35
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "TestIO", "icon_url": "testio-icon.svg"}})
35
+ __config__=ConfigDict(json_schema_extra={'metadata': {"label": "TestIO", "icon_url": "testio-icon.svg",
36
+ "categories": ["testing"],
37
+ "extra_categories": ["test automation", "test case management", "test planning"]}})
36
38
  )
37
39
 
38
40
  @classmethod
@@ -45,7 +45,11 @@ class TestrailToolkit(BaseToolkit):
45
45
  email=(str, Field(description="User's email", json_schema_extra={'configuration': True})),
46
46
  password=(SecretStr, Field(description="User's password", json_schema_extra={'secret': True, 'configuration': True})),
47
47
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
48
- __config__=ConfigDict(json_schema_extra={'metadata': {"label": "Testrail", "icon_url": "testrail-icon.svg"}})
48
+ __config__=ConfigDict(json_schema_extra={'metadata':
49
+ {"label": "Testrail", "icon_url": "testrail-icon.svg",
50
+ "categories": ["test management"],
51
+ "extra_categories": ["quality assurance", "test case management", "test planning"]
52
+ }})
49
53
  )
50
54
 
51
55
  @check_connection_response
@@ -39,7 +39,15 @@ class XrayToolkit(BaseToolkit):
39
39
  client_secret=(SecretStr, Field(description="Client secret", json_schema_extra={'secret': True})),
40
40
  limit=(Optional[int], Field(description="Limit", default=100)),
41
41
  selected_tools=(List[Literal[tuple(selected_tools)]], Field(default=[], json_schema_extra={'args_schemas': selected_tools})),
42
- __config__={'json_schema_extra': {'metadata': {"label": "XRAY cloud", "icon_url": "xray.svg"}}}
42
+ __config__={'json_schema_extra':
43
+ {
44
+ 'metadata': {
45
+ "label": "XRAY cloud", "icon_url": "xray.svg",
46
+ "categories": ["test management"],
47
+ "extra_categories": ["test automation", "test case management", "test planning"]
48
+ }
49
+ }
50
+ }
43
51
  )
44
52
 
45
53
  @classmethod