alita-sdk 0.3.181__py3-none-any.whl → 0.3.183__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.
@@ -79,8 +79,8 @@ class RunTestByIDTool(BaseTool):
79
79
  description: str = "Execute test plan from the Carrier platform."
80
80
  args_schema: Type[BaseModel] = create_model(
81
81
  "RunTestByIdInput",
82
- test_id=(str, Field(default=None, description="Test id to execute")),
83
- name=(str, Field(default=None, description="Test name to execute")),
82
+ test_id=(int, Field(default=None, description="Test id to execute. Use test_id if user provide id in int format")),
83
+ name=(str, Field(default=None, description="Test name to execute. Use name if user provide name in str format")),
84
84
  test_parameters=(list, Field(
85
85
  default=None,
86
86
  description=(
@@ -89,9 +89,26 @@ class RunTestByIDTool(BaseTool):
89
89
  "contain parameter names and their values."
90
90
  )
91
91
  )),
92
+ location=(str, Field(
93
+ default=None,
94
+ description=(
95
+ "Location to execute the test. Choose from public_regions, project_regions, "
96
+ "or cloud_regions. For cloud_regions, additional parameters may be required."
97
+ )
98
+ )),
99
+ cloud_settings=(dict, Field(
100
+ default={},
101
+ description=(
102
+ "Additional parameters for cloud_regions. Provide as a dictionary, "
103
+ "e.g., {'region_name': 'us-west-1', 'instance_type': 't2.large'}. "
104
+ "Don't provide this parameter as string! It should be a dictionary!"
105
+ "If no changes are needed, respond with 'use default'."
106
+ "Ensure these settings are passed as a valid dictionary not string"
107
+ )
108
+ )),
92
109
  )
93
110
 
94
- def _run(self, test_id=None, name=None, test_parameters=None):
111
+ def _run(self, test_id=None, name=None, test_parameters=None, location=None, cloud_settings=None):
95
112
  try:
96
113
  if not test_id and not name:
97
114
  return {"message": "Please provide test id or test name to start"}
@@ -115,9 +132,18 @@ class RunTestByIDTool(BaseTool):
115
132
  # If no test_parameters are provided, return the default ones for confirmation
116
133
  if test_parameters is None:
117
134
  return {
118
- "message": "Please confirm or override the following test parameters to proceed with the test execution.",
135
+ "message": "The test requires confirmation or customization of the following parameters before execution.",
119
136
  "default_test_parameters": default_test_parameters,
120
- "instruction": "To override parameters, provide a list of dictionaries for 'test_parameters', e.g., [{'vUsers': '5', 'duration': '120'}].",
137
+ "instruction": (
138
+ "If the user has already indicated that default parameters should be used, "
139
+ "pass 'default_test_parameters' as 'test_parameters' and invoke the '_run' method again without prompting the user.\n"
140
+ "If the user wants to proceed with default parameters, respond with 'use default'.\n"
141
+ "In this case, the agent should pass 'default_test_parameters' as 'test_parameters' to the tool.\n"
142
+ "If the user provides specific overrides, parse them into a list of dictionaries in the following format:\n"
143
+ "[{'vUsers': '5', 'duration': '120'}].\n"
144
+ "Each dictionary should contain the parameter name and its desired value.\n"
145
+ "Ensure that you correctly parse and validate the user's input before invoking the '_run' method."
146
+ ),
121
147
  }
122
148
 
123
149
  # Normalize test_parameters if provided in an incorrect format
@@ -126,6 +152,55 @@ class RunTestByIDTool(BaseTool):
126
152
  # Apply user-provided test parameters
127
153
  updated_test_parameters = self._apply_test_parameters(default_test_parameters, test_parameters)
128
154
 
155
+ # Fetch available locations
156
+ available_locations = self.api_wrapper.get_available_locations()
157
+ # If location is not provided, prompt the user with available options
158
+ if not location:
159
+ return {
160
+ "message": "Please select a location to execute the test.",
161
+ "available_locations": {
162
+ "public_regions": available_locations["public_regions"],
163
+ "project_regions": available_locations["project_regions"],
164
+ "cloud_regions": [region["name"] for region in available_locations["cloud_regions"]],
165
+ },
166
+ "instruction": (
167
+ "For public_regions and project_regions, provide the region name. "
168
+ "For cloud_regions, provide the region name and optionally override cloud_settings."
169
+ )
170
+ }
171
+
172
+ # Handle cloud_regions with additional parameters
173
+ selected_cloud_region = next(
174
+ (region for region in available_locations["cloud_regions"] if region["name"] == location),
175
+ None
176
+ )
177
+
178
+ if selected_cloud_region:
179
+ # Extract available cloud_settings from the selected cloud region
180
+ available_cloud_settings = selected_cloud_region["cloud_settings"]
181
+
182
+ # Add default values for instance_type and ec2_instance_type
183
+ available_cloud_settings["instance_type"] = "spot"
184
+ available_cloud_settings["ec2_instance_type"] = "t2.medium"
185
+
186
+ # If cloud_settings are not provided, prompt the user with available parameters
187
+ if not cloud_settings:
188
+ return {
189
+ "message": f"Please confirm or override the following cloud settings for the selected location: {location}",
190
+ "available_cloud_settings": available_cloud_settings,
191
+ "instruction": (
192
+ "Provide a dictionary to override cloud settings, e.g., "
193
+ "{'region_name': 'us-west-1', 'instance_type': 't2.large'}. "
194
+ "Don't provide this parameter as string! It should be a dictionary! "
195
+ "Ensure these settings are passed to the 'cloud_settings' argument, not 'test_parameters'."
196
+ "Ensure these settings are passed as a valid dictionary not string"
197
+ )
198
+ }
199
+
200
+ # Validate and merge user-provided cloud_settings with available parameters
201
+ cloud_settings = self._merge_cloud_settings(available_cloud_settings, cloud_settings)
202
+
203
+
129
204
  # Build common_params dictionary
130
205
  common_params = {
131
206
  param["name"]: param
@@ -136,7 +211,8 @@ class RunTestByIDTool(BaseTool):
136
211
  # Add env_vars, parallel_runners, and location to common_params
137
212
  common_params["env_vars"] = test_data.get("env_vars", {})
138
213
  common_params["parallel_runners"] = test_data.get("parallel_runners")
139
- common_params["location"] = test_data.get("location")
214
+ common_params["location"] = location
215
+ common_params["env_vars"]["cloud_settings"] = cloud_settings or {}
140
216
 
141
217
  # Build the JSON body
142
218
  json_body = {
@@ -146,7 +222,7 @@ class RunTestByIDTool(BaseTool):
146
222
  }
147
223
 
148
224
  # Execute the test
149
- report_id = self.api_wrapper.run_test(test_id, json_body)
225
+ report_id = self.api_wrapper.run_test(test_data.get("id"), json_body)
150
226
  return f"Test started. Report id: {report_id}. Link to report:" \
151
227
  f"{self.api_wrapper.url.rstrip('/')}/-/performance/backend/results?result_id={report_id}"
152
228
 
@@ -207,6 +283,24 @@ class RunTestByIDTool(BaseTool):
207
283
  })
208
284
  return updated_parameters
209
285
 
286
+ def _merge_cloud_settings(self, available_cloud_settings, user_cloud_settings):
287
+ """
288
+ Merge user-provided cloud settings with available cloud settings.
289
+ Ensure that user-provided values override the defaults.
290
+ """
291
+ if not user_cloud_settings:
292
+ return available_cloud_settings
293
+
294
+ # Validate user-provided keys against available keys
295
+ invalid_keys = [key for key in user_cloud_settings if key not in available_cloud_settings]
296
+ if invalid_keys:
297
+ raise ValueError(
298
+ f"Invalid keys in cloud settings: {invalid_keys}. Allowed keys: {list(available_cloud_settings.keys())}")
299
+
300
+ # Merge the settings
301
+ merged_settings = {**available_cloud_settings, **user_cloud_settings}
302
+ return merged_settings
303
+
210
304
 
211
305
  class CreateBackendTestInput(BaseModel):
212
306
  test_name: str = Field(..., description="Test name")
@@ -103,6 +103,10 @@ class CarrierClient(BaseModel):
103
103
  endpoint = f"api/v1/integrations/integrations/{self.credentials.project_id}?name={name}"
104
104
  return self.request('get', endpoint)
105
105
 
106
+ def get_available_locations(self):
107
+ endpoint = f"api/v1/shared/locations/default/{self.credentials.project_id}"
108
+ return self.request('get', endpoint)
109
+
106
110
  def run_ui_test(self, test_id: str, json_body):
107
111
  """Run a UI test with the given test ID and JSON body."""
108
112
  endpoint = f"api/v1/ui_performance/test/{self.credentials.project_id}/{test_id}"
@@ -0,0 +1,57 @@
1
+ from typing import List, Optional
2
+
3
+ from langchain_core.tools import BaseToolkit, BaseTool
4
+ from pydantic import create_model, BaseModel, Field, SecretStr
5
+ from ..base.tool import BaseAction
6
+
7
+ from .api_wrapper import SlackApiWrapper
8
+ from ..utils import TOOLKIT_SPLITTER, clean_string, get_max_toolkit_length
9
+
10
+ name = "slack"
11
+
12
+ def get_tools(tool):
13
+ return SlackToolkit().get_toolkit(
14
+ selected_tools=tool['settings'].get('selected_tools', []),
15
+ slack_token=tool['settings'].get('slack_token'),
16
+ channel_id=tool['settings'].get('channel_id'),
17
+ toolkit_name=tool.get('toolkit_name')
18
+ ).get_tools()
19
+
20
+ class SlackToolkit(BaseToolkit):
21
+ tools: List[BaseTool] = []
22
+
23
+ @staticmethod
24
+ def toolkit_config_schema() -> BaseModel:
25
+ selected_tools = {x['name']: x['args_schema'].schema() for x in SlackApiWrapper.model_construct().get_available_tools()}
26
+ SlackToolkit.toolkit_max_length = get_max_toolkit_length(selected_tools)
27
+ return create_model(
28
+ name,
29
+ slack_token=(SecretStr, Field( description="Slack Bot/User OAuth Token like XOXB-*****-*****-*****-*****")),
30
+ channel_id=(str, Field(title="Channel ID", description="Channel ID, user ID, or conversation ID to send the message to. (like C12345678 for public channels, D12345678 for DMs)")),
31
+ selected_tools=(list[str], Field(title="Selected Tools", description="List of tools to enable", default=[])),
32
+ __config__={'json_schema_extra': {'metadata': {"label": "slack", "icon_url": None, "hidden": True}}}
33
+ )
34
+
35
+ @classmethod
36
+ def get_toolkit(cls, selected_tools: Optional[List[str]] = None, toolkit_name: Optional[str] = None, **kwargs):
37
+ if selected_tools is None:
38
+ selected_tools = []
39
+ slack_api_wrapper = SlackApiWrapper(**kwargs)
40
+ prefix = clean_string(toolkit_name, cls.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else ''
41
+ available_tools = slack_api_wrapper.get_available_tools()
42
+ tools = []
43
+ for tool in available_tools:
44
+ if selected_tools and tool["name"] not in selected_tools:
45
+ continue
46
+ tools.append(BaseAction(
47
+ api_wrapper=slack_api_wrapper,
48
+ name=prefix + tool["name"],
49
+ description=tool["description"],
50
+ args_schema=tool["args_schema"],
51
+ func=tool["ref"]
52
+ ))
53
+ return cls(tools=tools)
54
+
55
+ def get_tools(self) -> List[BaseTool]:
56
+ return self.tools
57
+
@@ -0,0 +1,190 @@
1
+ import logging
2
+ from typing import Optional
3
+ from pydantic import BaseModel, Field, SecretStr, create_model, model_validator
4
+ from slack_sdk import WebClient
5
+ from slack_sdk.errors import SlackApiError
6
+
7
+ from alita_sdk.tools.elitea_base import BaseToolApiWrapper
8
+
9
+
10
+ logger = logging.getLogger(__name__)
11
+
12
+ SendMessageModel = create_model(
13
+ "SendMessageModel",
14
+ message=(str, Field(description="The message text to send."))
15
+ )
16
+
17
+ ReadMessagesModel = create_model(
18
+ "ReadMessagesModel",
19
+ limit=(int, Field(default=10, description="The number of messages to fetch (default is 10)."))
20
+ )
21
+
22
+ CreateChannelModel = create_model(
23
+ "CreateChannelModel",
24
+ channel_name=(str, Field(description="Channel ID, user ID, or conversation ID to send the message to. (like C12345678 for public channels, D12345678 for DMs)")),
25
+ is_private=(bool, Field(default=False, description="Whether to make the channel private (default: False)."))
26
+ )
27
+
28
+ ListUsersModel = create_model(
29
+ "ListUsersModel"
30
+ )
31
+
32
+
33
+ class SlackApiWrapper(BaseToolApiWrapper):
34
+
35
+ """
36
+ Slack API wrapper for interacting with Slack channels and messages.
37
+ """
38
+ slack_token: Optional[SecretStr] = Field(default=None,description="Slack Bot/User OAuth Token like XOXB-*****-*****-*****-*****")
39
+ channel_id: Optional[str] = Field(default=None, description="Channel ID, user ID, or conversation ID to send the message to. (like C12345678 for public channels, D12345678 for DMs)")
40
+
41
+ @model_validator(mode="after")
42
+ @classmethod
43
+ def validate_toolkit(cls, values):
44
+ token = values.slack_token.get_secret_value() if values.slack_token else None
45
+ if not token:
46
+ logging.error("Slack token is required.")
47
+ raise ValueError("Slack token is required.")
48
+ try:
49
+ cls._client = WebClient(token=token)
50
+ logging.info("Authenticated with Slack token.")
51
+ except Exception as e:
52
+ logging.error(f"Failed to authenticate with Slack: {str(e)}")
53
+ raise ValueError(f"Failed to authenticate with Slack: {str(e)}")
54
+ return values
55
+
56
+ def _get_client(self):
57
+ if not self._client:
58
+ self._client = WebClient(token=self.slack_token.get_secret_value())
59
+ return self._client
60
+
61
+
62
+ def send_message(self, message: str):
63
+ """
64
+ Sends a message to a specified Slack channel, user, or conversation.
65
+ """
66
+
67
+ try:
68
+
69
+ client = self._get_client()
70
+ response = client.chat_postMessage(channel=self.channel_id, text=message)
71
+ logger.info(f"Message sent to {self.channel_id}: {message}")
72
+ return f"Message sent successfully to {self.channel_id}."
73
+
74
+ except SlackApiError as e:
75
+ logger.error(f"Failed to send message to {self.channel_id}: {e.response['error']}")
76
+ return f"Received the error : {e.response['error']}"
77
+
78
+ def read_messages(self, limit=10):
79
+ """
80
+ Reads the latest messages from a Slack channel or conversation.
81
+
82
+ :param limit: int: The number of messages to fetch (default is 10)
83
+ :return: list: Returns a list of messages with metadata.
84
+ """
85
+ try:
86
+
87
+ client = self._get_client()
88
+ # Fetch conversation history
89
+ response = client.conversations_history(
90
+ channel=self.channel_id,
91
+ limit=limit )
92
+
93
+ # Extract messages from the response
94
+ messages = self.extract_slack_messages(response.get('messages', []))
95
+
96
+ return messages
97
+
98
+ except SlackApiError as e:
99
+ # Handle errors from the Slack API
100
+ logger.error(f"Failed to read message from {self.channel_id}: {e.response['error']}")
101
+ return f"Received the error : {e.response['error']}"
102
+
103
+ def create_slack_channel(self, channel_name: str, is_private=False):
104
+ """
105
+ Creates a new Slack channel.
106
+
107
+ :param channel_name: str: Desired name for the channel (e.g., "my-new-channel").
108
+ :param is_private: bool: Whether to make the channel private (default: False).
109
+ :return: dict: Slack API response or error message.
110
+ """
111
+
112
+ try:
113
+ client = self._get_client()
114
+ response = client.conversations_create(
115
+ name=channel_name,
116
+ is_private=is_private
117
+ )
118
+ channel_id = response["channel"]["id"]
119
+ print(f"Channel '{channel_name}' created successfully! Channel ID: {channel_id}")
120
+ return {"success": True, "channel_id": channel_id}
121
+ except SlackApiError as e:
122
+ error_message = e.response.get("error", "unknown_error")
123
+ print(f"Failed to create channel '{channel_name}': {error_message}")
124
+ return {"success": False, "error": error_message}
125
+
126
+ def list_users(self):
127
+ """
128
+ Lists all users in the Slack workspace.
129
+
130
+ :return: list: List of users with their IDs and names.
131
+ """
132
+
133
+
134
+ try:
135
+ client = self._get_client()
136
+ print(client.auth_test())
137
+ response = client.users_list()
138
+ users = response["members"]
139
+ return [{"id": user["id"], "name": user["name"]} for user in users if not user["is_bot"]]
140
+
141
+ except SlackApiError as e:
142
+ logger.error(f"Failed to list users: {e.response['error']}")
143
+ return f"Received the error : {e.response['error']}"
144
+
145
+ def extract_slack_messages(self, data):
146
+ extracted_info = []
147
+
148
+ for item in data:
149
+ # Extract 'user' and 'text'
150
+ user = item.get("user", "Undefined User")
151
+ message = item.get("text", "No message")
152
+
153
+ # Extract 'app name'
154
+ app_name = item.get("bot_profile", {}).get("name", "No App Name")
155
+
156
+ # Append to result
157
+ extracted_info.append({"user": user, "message": message, "app_name": app_name})
158
+
159
+ return extracted_info
160
+
161
+
162
+ def get_available_tools(self):
163
+ return [
164
+ {
165
+ "name": "send_message",
166
+ "description": self.send_message.__doc__ or "Send a message to a Slack channel, user, or conversation.",
167
+ "args_schema": SendMessageModel,
168
+ "ref": self.send_message
169
+
170
+ },
171
+ {
172
+ "name": "read_messages",
173
+ "description": self.read_messages.__doc__ or "Send a message to a Slack channel, user, or conversation.",
174
+ "args_schema": ReadMessagesModel,
175
+ "ref": self.read_messages
176
+ },
177
+ {
178
+ "name": "create_channel",
179
+ "description": self.create_slack_channel.__doc__ or "Send a message to a Slack channel, user, or conversation.",
180
+ "args_schema": CreateChannelModel,
181
+ "ref": self.create_slack_channel
182
+ },
183
+ {
184
+ "name": "list_users",
185
+ "description": self.list_users.__doc__ or "List all users in the Slack workspace.",
186
+ "args_schema": ListUsersModel,
187
+ "ref": self.list_users
188
+ }
189
+
190
+ ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.181
3
+ Version: 0.3.183
4
4
  Summary: SDK for building langchain agents using resources from Alita
5
5
  Author-email: Artem Rozumenko <artyom.rozumenko@gmail.com>, Mikalai Biazruchka <mikalai_biazruchka@epam.com>, Roman Mitusov <roman_mitusov@epam.com>, Ivan Krakhmaliuk <lifedjik@gmail.com>, Artem Dubrovskiy <ad13box@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -32,7 +32,7 @@ Requires-Dist: langchain-openai~=0.3.0; extra == "runtime"
32
32
  Requires-Dist: langgraph-checkpoint-sqlite~=2.0.0; extra == "runtime"
33
33
  Requires-Dist: langgraph-checkpoint-postgres~=2.0.1; extra == "runtime"
34
34
  Requires-Dist: langsmith>=0.3.45; extra == "runtime"
35
- Requires-Dist: langgraph>=0.5; extra == "runtime"
35
+ Requires-Dist: langgraph<0.5,>=0.4.8; extra == "runtime"
36
36
  Requires-Dist: langchain_chroma~=0.2.2; extra == "runtime"
37
37
  Requires-Dist: langchain-unstructured~=0.1.6; extra == "runtime"
38
38
  Requires-Dist: langchain-postgres~=0.0.13; extra == "runtime"
@@ -124,6 +124,7 @@ Requires-Dist: shortuuid==1.0.13; extra == "tools"
124
124
  Requires-Dist: yarl==1.17.1; extra == "tools"
125
125
  Requires-Dist: langmem==0.0.27; extra == "tools"
126
126
  Requires-Dist: textract-py3==2.1.1; extra == "tools"
127
+ Requires-Dist: slack_sdk==3.35.0; extra == "tools"
127
128
  Provides-Extra: community
128
129
  Requires-Dist: retry-extended==0.2.3; extra == "community"
129
130
  Requires-Dist: pyobjtojson==0.3; extra == "community"
@@ -13,21 +13,20 @@ alita_sdk/community/analysis/jira_analyse/api_wrapper.py,sha256=Ui1GBWizIFGFOi98
13
13
  alita_sdk/runtime/__init__.py,sha256=4W0UF-nl3QF2bvET5lnah4o24CoTwSoKXhuN0YnwvEE,828
14
14
  alita_sdk/runtime/clients/__init__.py,sha256=BdehU5GBztN1Qi1Wul0cqlU46FxUfMnI6Vq2Zd_oq1M,296
15
15
  alita_sdk/runtime/clients/artifact.py,sha256=4N2t5x3GibyXLq3Fvrv2o_VA7Z000yNfc-UN4eGsHZg,2679
16
- alita_sdk/runtime/clients/client.py,sha256=f0-Re9KAjCer5vLqJNOn8qpq_tg7aT6YRbaJKgsZME0,19924
16
+ alita_sdk/runtime/clients/client.py,sha256=6ezOJ92CSw6b2PVs4uFMQKQdp40uT1awoFEqWAfBH_A,20029
17
17
  alita_sdk/runtime/clients/datasource.py,sha256=HAZovoQN9jBg0_-lIlGBQzb4FJdczPhkHehAiVG3Wx0,1020
18
18
  alita_sdk/runtime/clients/prompt.py,sha256=li1RG9eBwgNK_Qf0qUaZ8QNTmsncFrAL2pv3kbxZRZg,1447
19
19
  alita_sdk/runtime/langchain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- alita_sdk/runtime/langchain/assistant.py,sha256=QxFIwRdppm6TltoI7xrFMRlNlRjv54Q1lLHhNR8N6BY,9976
20
+ alita_sdk/runtime/langchain/assistant.py,sha256=8HbMMPsTFx7ZIP0IVzDsmbreghjVhnIHfjgSy9m7Yjo,12705
21
21
  alita_sdk/runtime/langchain/chat_message_template.py,sha256=kPz8W2BG6IMyITFDA5oeb5BxVRkHEVZhuiGl4MBZKdc,2176
22
22
  alita_sdk/runtime/langchain/constants.py,sha256=eHVJ_beJNTf1WJo4yq7KMK64fxsRvs3lKc34QCXSbpk,3319
23
23
  alita_sdk/runtime/langchain/indexer.py,sha256=0ENHy5EOhThnAiYFc7QAsaTNp9rr8hDV_hTK8ahbatk,37592
24
- alita_sdk/runtime/langchain/langraph_agent.py,sha256=HvBe8IWpAHcJmmXr3IsgEsqjn31NDmCzeQHdLLNe7tg,40499
24
+ alita_sdk/runtime/langchain/langraph_agent.py,sha256=ssPJOf_REAx8lx2tQdnZ0ccbdiZX8WwSRcX5ASgLyxs,43327
25
25
  alita_sdk/runtime/langchain/mixedAgentParser.py,sha256=M256lvtsL3YtYflBCEp-rWKrKtcY1dJIyRGVv7KW9ME,2611
26
26
  alita_sdk/runtime/langchain/mixedAgentRenderes.py,sha256=asBtKqm88QhZRILditjYICwFVKF5KfO38hu2O-WrSWE,5964
27
27
  alita_sdk/runtime/langchain/store_manager.py,sha256=w5-0GbPGJAw14g0CCD9BKFMznzk1I-iJ5OGj_HZJZgA,2211
28
28
  alita_sdk/runtime/langchain/utils.py,sha256=Npferkn10dvdksnKzLJLBI5bNGQyVWTBwqp3vQtUqmY,6631
29
29
  alita_sdk/runtime/langchain/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- alita_sdk/runtime/langchain/agents/react_agent.py,sha256=y461yEn2J7eP5GYbiPL3qaU3e9R8OmvyJNuFFvbZRCY,5971
31
30
  alita_sdk/runtime/langchain/agents/xml_chat.py,sha256=Mx7PK5T97_GrFCwHHZ3JZP42S7MwtUzV0W-_8j6Amt8,6212
32
31
  alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py,sha256=4kFU1ijrM1Jw7cywQv8mUiBHlE6w-uqfzSZP4hUV5P4,3771
33
32
  alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py,sha256=TBJuIFqweLDtd0JxgfPqrcY5eED-M617CT_EInp6Lmg,1949
@@ -64,7 +63,7 @@ alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py,sha256=DiEEOqDef2Xo3x
64
63
  alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py,sha256=l3AdjSQnNv1CE1NuHi7wts6h6AsCiK-iPu0PnPf3jf0,399
65
64
  alita_sdk/runtime/langchain/tools/bdd_parser/parser.py,sha256=1H1Nd_OH5Wx8A5YV1zUghBxo613yPptZ7fqNo8Eg48M,17289
66
65
  alita_sdk/runtime/llms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
- alita_sdk/runtime/llms/alita.py,sha256=-d0-U8epPeAz5DUMNlCxeWsNIWU2E4xFeTZNuzakNzE,9697
66
+ alita_sdk/runtime/llms/alita.py,sha256=aKvFQgKocwgHm90hngRhkZ6aaHC0-vXKXDWKSdqM6sY,10126
68
67
  alita_sdk/runtime/llms/preloaded.py,sha256=3AaUbZK3d8fvxAQMjR3ftOoYa0SnkCOL1EvdvDCXIHE,11321
69
68
  alita_sdk/runtime/toolkits/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
69
  alita_sdk/runtime/toolkits/application.py,sha256=akqUuaIL9u7-SsUmS-XgN4qxDEnXFhsK9do4n8inpSo,2432
@@ -82,10 +81,10 @@ alita_sdk/runtime/tools/datasource.py,sha256=pvbaSfI-ThQQnjHG-QhYNSTYRnZB0rYtZFp
82
81
  alita_sdk/runtime/tools/echo.py,sha256=spw9eCweXzixJqHnZofHE1yWiSUa04L4VKycf3KCEaM,486
83
82
  alita_sdk/runtime/tools/function.py,sha256=ZFpd7TGwIawze2e7BHlKwP0NHwNw42wwrmmnXyJQJhk,2600
84
83
  alita_sdk/runtime/tools/indexer_tool.py,sha256=whSLPevB4WD6dhh2JDXEivDmTvbjiMV1MrPl9cz5eLA,4375
85
- alita_sdk/runtime/tools/llm.py,sha256=UUd4U4CuCNImHxVJAF5daYbew-7X9H8k21bUWy2PDvg,3502
84
+ alita_sdk/runtime/tools/llm.py,sha256=qy3-TYhV-rvT4PzSNMw0vvJTMmgZI9nAmvW4NNhL5QU,14937
86
85
  alita_sdk/runtime/tools/loop.py,sha256=uds0WhZvwMxDVFI6MZHrcmMle637cQfBNg682iLxoJA,8335
87
86
  alita_sdk/runtime/tools/loop_output.py,sha256=U4hO9PCQgWlXwOq6jdmCGbegtAxGAPXObSxZQ3z38uk,8069
88
- alita_sdk/runtime/tools/mcp_server_tool.py,sha256=xcH9AiqfR2TYrwJ3Ixw-_A7XDodtJCnwmq1SsikXpYk,1930
87
+ alita_sdk/runtime/tools/mcp_server_tool.py,sha256=eI8QUt497xblwF4Zhbvi8wCg17yh2yoWjcw_AIzHwGE,2819
89
88
  alita_sdk/runtime/tools/pgvector_search.py,sha256=NN2BGAnq4SsDHIhUcFZ8d_dbEOM8QwB0UwpsWCYruXU,11692
90
89
  alita_sdk/runtime/tools/prompt.py,sha256=nJafb_e5aOM1Rr3qGFCR-SKziU9uCsiP2okIMs9PppM,741
91
90
  alita_sdk/runtime/tools/router.py,sha256=wCvZjVkdXK9dMMeEerrgKf5M790RudH68pDortnHSz0,1517
@@ -97,20 +96,20 @@ alita_sdk/runtime/utils/constants.py,sha256=Xntx1b_uxUzT4clwqHA_U6K8y5bBqf_4lSQw
97
96
  alita_sdk/runtime/utils/evaluate.py,sha256=iM1P8gzBLHTuSCe85_Ng_h30m52hFuGuhNXJ7kB1tgI,1872
98
97
  alita_sdk/runtime/utils/logging.py,sha256=svPyiW8ztDfhqHFITv5FBCj8UhLxz6hWcqGIY6wpJJE,3331
99
98
  alita_sdk/runtime/utils/save_dataframe.py,sha256=i-E1wp-t4wb17Zq3nA3xYwgSILjoXNizaQAA9opWvxY,1576
100
- alita_sdk/runtime/utils/streamlit.py,sha256=4xMucFDuU_S5ajtHYgaUBw29pbU5OygjuWe0CtTv7hw,85824
99
+ alita_sdk/runtime/utils/streamlit.py,sha256=gRwsT4lv4kujQfNSQripMPe1ZbmjbHNLSraW3FmL-qA,85710
101
100
  alita_sdk/runtime/utils/utils.py,sha256=dM8whOJAuFJFe19qJ69-FLzrUp6d2G-G6L7d4ss2XqM,346
102
- alita_sdk/tools/__init__.py,sha256=l3KxV-Qtu-04QQ9YYcovbLtEkZ30fGWDZ7o9nuRF16o,9967
101
+ alita_sdk/tools/__init__.py,sha256=UztP-wrR-MuJI2V0gcJzNoMhsNJV6mre07TJNPChAtM,10032
103
102
  alita_sdk/tools/elitea_base.py,sha256=NQaIxPX6DVIerHCb18jwUR6maZxxk73NZaTsFHkBQWE,21119
104
103
  alita_sdk/tools/ado/__init__.py,sha256=mD6GHcYMTtffPJkJvFPe2rzvye_IRmXmWfI7xYuZhO4,912
105
104
  alita_sdk/tools/ado/utils.py,sha256=PTCludvaQmPLakF2EbCGy66Mro4-rjDtavVP-xcB2Wc,1252
106
105
  alita_sdk/tools/ado/repos/__init__.py,sha256=cS7yON7bwQxAu7CI7-SeSLCB4c83awjbLj3ZB1mWN2I,6317
107
106
  alita_sdk/tools/ado/repos/repos_wrapper.py,sha256=_OWKAls7VFfFtEPTwqj_DxE1MSvpC0ivxdTIULEz3Tk,48206
108
107
  alita_sdk/tools/ado/test_plan/__init__.py,sha256=1DMvP4GjgBhrLPSQl6KNbNkInFqVFsDEeLBX99rEhfU,4248
109
- alita_sdk/tools/ado/test_plan/test_plan_wrapper.py,sha256=oIvVhLUMP5ZGctoAtK6sU0y6Si9gNv9-mbLqcWtw3gY,12525
108
+ alita_sdk/tools/ado/test_plan/test_plan_wrapper.py,sha256=lovTViAO7Q10fN7Lkbb24N-s04Buh6KEubiArSHrxkc,15276
110
109
  alita_sdk/tools/ado/wiki/__init__.py,sha256=eiV2uJ7s0hnok68v5eRr48bBSArraHr0bv_3AsxnZiQ,4597
111
110
  alita_sdk/tools/ado/wiki/ado_wrapper.py,sha256=l4bc2QoKSUXg9UqNcx0ylv7YL9JPPQd35Ti5MXyEgC4,12690
112
111
  alita_sdk/tools/ado/work_item/__init__.py,sha256=WxlxoAZKDMVqb2t7ijrCE7nCBAx5kKuCRes9t8RJv4M,4700
113
- alita_sdk/tools/ado/work_item/ado_wrapper.py,sha256=t0D9xubU0yy_JmRJ_zEtRCxwFLyanT1StbIrtHGaqpw,26108
112
+ alita_sdk/tools/ado/work_item/ado_wrapper.py,sha256=aLB-aSNQST0FCwP7I01OXanCpZHKVarZZB1u9j2H1LA,26253
114
113
  alita_sdk/tools/advanced_jira_mining/__init__.py,sha256=pUTzECqGvYaR5qWY3JPUhrImrZgc7pCXuqSe5eWIE80,4604
115
114
  alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py,sha256=nZPtuwVWp8VeHw1B8q9kdwf-6ZvHnlXTOGdcIMDkKpw,44211
116
115
  alita_sdk/tools/azure_ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -130,11 +129,11 @@ alita_sdk/tools/browser/google_search_rag.py,sha256=QVHFbVwymiJGuno_HLSJOK1c_Mpg
130
129
  alita_sdk/tools/browser/utils.py,sha256=4k3YM_f1Kqlhjz9vt2pNsGkvCjhy-EmY3nvcwdFCsLA,2501
131
130
  alita_sdk/tools/browser/wiki.py,sha256=Qh3HBFd4dkS2VavXbFJOm4b8SjVSIe5xSD7CY1vEkKE,1126
132
131
  alita_sdk/tools/carrier/__init__.py,sha256=pP-nk-dpqOkrvwcRY_szgwqoowyVNl_GobD4Inp-Qus,4435
133
- alita_sdk/tools/carrier/api_wrapper.py,sha256=R8fyGesykTDJ1D2t7z1h_W9TO9B5GaqKaWI7OU9tdRE,8877
132
+ alita_sdk/tools/carrier/api_wrapper.py,sha256=Lx3UcfRDV0Bt224fUrdhBiqtDpYYT565B8e5ucdlFKo,8971
134
133
  alita_sdk/tools/carrier/backend_reports_tool.py,sha256=2Z1DCt6f0XTrQcEoynxMFUnenhtYMuIt_epq4YBSLDE,12234
135
- alita_sdk/tools/carrier/backend_tests_tool.py,sha256=xfcp0-CHLW_yi5eNeoepd9w8He_1ls_knnhuWt_Kjv4,21723
134
+ alita_sdk/tools/carrier/backend_tests_tool.py,sha256=7kXnaEaxpFAqvsJq7WDmP4xQRm64K0s92IXgSl2Mt9Y,27126
136
135
  alita_sdk/tools/carrier/cancel_ui_test_tool.py,sha256=pD1sKEcZGBWJqFpgjeohMk93uuUPWruVJRPVVg90rpo,6438
137
- alita_sdk/tools/carrier/carrier_sdk.py,sha256=JDPgZ0MSUGEQf07ZBwBYpY-9RvYpXyyDj-cKZsx-3m0,14513
136
+ alita_sdk/tools/carrier/carrier_sdk.py,sha256=65ELjQyPNZb21sSmqIg-LdsCovpvNAguRcsj-f4xhPw,14682
138
137
  alita_sdk/tools/carrier/create_ui_excel_report_tool.py,sha256=8aSpkyIGXsOBTo8Ye_6p19v8OOl1y7QW47IJxZ6QDgM,20163
139
138
  alita_sdk/tools/carrier/create_ui_test_tool.py,sha256=knKvPOo9usI2XHqZtcbBEBzKwB9tS7GEl9KIX78vJiA,8184
140
139
  alita_sdk/tools/carrier/excel_reporter.py,sha256=fXptz7iaBDBcFSc8Ah8nZ9CSgugTONc5JMC1XcQEnfM,21487
@@ -271,6 +270,8 @@ alita_sdk/tools/sharepoint/__init__.py,sha256=HqKQDFboab1AYh20uJvHxs9HFLJSqVfVTj
271
270
  alita_sdk/tools/sharepoint/api_wrapper.py,sha256=qCHCIH4FRDtgdpIK22ewFhZJeOaTv9hT9BVivslxxlE,7119
272
271
  alita_sdk/tools/sharepoint/authorization_helper.py,sha256=n-nL5dlBoLMK70nHu7P2RYCb8C6c9HMA_gEaw8LxuhE,2007
273
272
  alita_sdk/tools/sharepoint/utils.py,sha256=fZ1YzAu5CTjKSZeslowpOPH974902S8vCp1Wu7L44LM,446
273
+ alita_sdk/tools/slack/__init__.py,sha256=_s4Ogro3O92AxHdUgWCp0SlrnBChRhCimZLbcDvNzeA,2550
274
+ alita_sdk/tools/slack/api_wrapper.py,sha256=yZWrJtXBowhq1fmF7YrrBVyChdnxkYF1XfwHxe8-_D8,7555
274
275
  alita_sdk/tools/sql/__init__.py,sha256=9Lh8YHKO8zD5eeolpR4O9swTUsjpXj9LVDn8fM-T5IM,3506
275
276
  alita_sdk/tools/sql/api_wrapper.py,sha256=Rky0_CX9HWDQ2mClHGAgP3LHjYVX4iymPuilZMtaDlQ,3687
276
277
  alita_sdk/tools/sql/models.py,sha256=AKJgSl_kEEz4fZfw3kbvdGHXaRZ-yiaqfJOB6YOj3i0,641
@@ -296,8 +297,8 @@ alita_sdk/tools/zephyr_scale/api_wrapper.py,sha256=UHVQUVqcBc3SZvDfO78HSuBzwAsRw
296
297
  alita_sdk/tools/zephyr_squad/__init__.py,sha256=rq4jOb3lRW2GXvAguk4H1KinO5f-zpygzhBJf-E1Ucw,2773
297
298
  alita_sdk/tools/zephyr_squad/api_wrapper.py,sha256=iOMxyE7vOc_LwFB_nBMiSFXkNtvbptA4i-BrTlo7M0A,5854
298
299
  alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py,sha256=IYUJoMFOMA70knLhLtAnuGoy3OK80RuqeQZ710oyIxE,3631
299
- alita_sdk-0.3.181.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
300
- alita_sdk-0.3.181.dist-info/METADATA,sha256=gY8Qcg5Vw_J_tOT5QAwfxp6SKcS1eJHUYsM0Iu1W1j8,18746
301
- alita_sdk-0.3.181.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
302
- alita_sdk-0.3.181.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
303
- alita_sdk-0.3.181.dist-info/RECORD,,
300
+ alita_sdk-0.3.183.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
301
+ alita_sdk-0.3.183.dist-info/METADATA,sha256=RGW4Mjq7G8LuOV4Aj7Uvi3xzcY68h6_HT7B84QZW9pA,18804
302
+ alita_sdk-0.3.183.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
303
+ alita_sdk-0.3.183.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
304
+ alita_sdk-0.3.183.dist-info/RECORD,,