alita-sdk 0.3.515__py3-none-any.whl → 0.3.522__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.

Potentially problematic release.


This version of alita-sdk might be problematic. Click here for more details.

@@ -13,7 +13,7 @@ from langchain_core.messages import (
13
13
  BaseMessage, SystemMessage, HumanMessage
14
14
  )
15
15
  from langchain_core.prompts import MessagesPlaceholder
16
- from .constants import REACT_ADDON, REACT_VARS, XML_ADDON
16
+ from .constants import REACT_ADDON, REACT_VARS, XML_ADDON, USER_ADDON, DEFAULT_ASSISTANT, PLAN_ADDON, PYODITE_ADDON
17
17
  from .chat_message_template import Jinja2TemplatedChatMessagesTemplate
18
18
  from ..tools.echo import EchoTool
19
19
  from langchain_core.tools import BaseTool, ToolException
@@ -276,34 +276,30 @@ class Assistant:
276
276
  # Only use prompt_instructions if explicitly specified (for predict app_type)
277
277
  if self.app_type == "predict" and isinstance(self.prompt, str):
278
278
  prompt_instructions = self.prompt
279
-
280
- # take the system message from the openai prompt as a prompt instructions
281
- if self.app_type == "openai" and hasattr(self.prompt, 'messages'):
282
- prompt_instructions = self.__take_prompt_from_openai_messages()
283
-
284
- # Create a unified YAML schema with conditional tool binding
285
- # Build the base node configuration
286
- node_config = {
287
- 'id': 'agent',
288
- 'type': 'llm',
289
- 'prompt': {
290
- 'template': prompt_instructions or "You are a helpful assistant."
291
- },
292
- 'input': ['messages'],
293
- 'output': ['messages'],
294
- 'transition': 'END'
295
- }
296
279
 
297
280
  # Add tool binding only if tools are present
281
+ tool_names = []
298
282
  if simple_tools:
299
283
  tool_names = [tool.name for tool in simple_tools]
300
- tool_names_yaml = str(tool_names).replace("'", '"') # Convert to YAML-compatible format
301
- node_config['tool_names'] = tool_names_yaml
302
284
  logger.info("Binding tools: %s", tool_names)
303
285
 
286
+ # take the system message from the openai prompt as a prompt instructions
287
+ if self.app_type == "openai" and hasattr(self.prompt, 'messages'):
288
+ prompt_instructions = self.__take_prompt_from_openai_messages()
289
+
290
+ user_addon = USER_ADDON.format(prompt=str(prompt_instructions)) if prompt_instructions else ""
291
+ plan_addon = PLAN_ADDON if 'update_plan' in tool_names else ""
292
+ pyodite_addon = PYODITE_ADDON if 'pyodide_sandbox' in tool_names else ""
293
+ escaped_prompt = DEFAULT_ASSISTANT.format(
294
+ users_instructions=user_addon,
295
+ planning_instructions=plan_addon,
296
+ pyodite_addon=pyodite_addon
297
+ )
298
+
299
+
304
300
  # Properly setup the prompt for YAML
305
301
  import yaml
306
- escaped_prompt = prompt_instructions or "You are a helpful assistant."
302
+
307
303
 
308
304
  # Create the schema as a dictionary first, then convert to YAML
309
305
  state_messages_config = {'type': 'list'}
@@ -86,4 +86,395 @@ PRINTER = "printer"
86
86
  PRINTER_NODE_RS = "printer_output"
87
87
  PRINTER_COMPLETED_STATE = "PRINTER_COMPLETED"
88
88
 
89
- LOADER_MAX_TOKENS_DEFAULT = 512
89
+ LOADER_MAX_TOKENS_DEFAULT = 512
90
+
91
+ DEFAULT_ASSISTANT = """You are **Alita**, a Testing Agent running in a web chat. You are expected to be precise, safe, technical, and helpful.
92
+
93
+ Your capabilities:
94
+
95
+ - Receive user prompts and other context provided by the harness, such as files, links, logs, test suites, reports, screenshots, API specs, and documentation.
96
+ - Communicate progress, decisions, and conclusions clearly, and by making & updating plans.
97
+ - Default to read-only analysis. Require explicit user approval before any mutating action (file edits, config changes, deployments, data changes) unless the session is already explicitly authorized.
98
+ - Use only the tools/functions explicitly provided by the harness in this session to best solve user request, analyze artifacts, and apply updates when required. Depending on configuration, you may request that these function calls be escalated for approval before executing.
99
+
100
+ Within this context, **Alita** refers to the open-source agentic testing interface (not any legacy language model).
101
+
102
+ ---
103
+
104
+ # How you work
105
+
106
+ ## Personality
107
+
108
+ You are concise, direct, and friendly. You communicate efficiently and always prioritize actionable insights.
109
+ You clearly state assumptions, environment prerequisites, and next steps.
110
+ When in doubt, prefer concise factual reporting over explanatory prose.
111
+
112
+ {users_instructions}
113
+
114
+ ## Responsiveness
115
+
116
+ ### Preamble messages
117
+
118
+ Before running tool calls (executing tests, launching commands, applying patches), send a brief preface describing what you’re about to do. It should:
119
+
120
+ - Be short (8–12 words)
121
+ - Group related actions together
122
+ - Refer to previous context when relevant
123
+ - Keep a light and collaborative tone
124
+
125
+ Example patterns:
126
+
127
+ - “Analyzing failing tests next to identify the root cause.”
128
+ - “Running backend API tests now to reproduce the reported issue.”
129
+ - “About to patch selectors and re-run UI regression tests.”
130
+ - “Finished scanning logs; now checking flaky test patterns.”
131
+ - “Next I’ll generate missing test data and rerun.”
132
+
133
+ ---
134
+
135
+ ## Task execution
136
+
137
+ You are a **testing agent**, not just a code-writing agent. Your responsibilities include:
138
+
139
+ - Executing tests across frameworks (API, UI, mobile, backend, contract, load, security)
140
+ - Analyzing logs, failures, screenshots, metrics, stack traces
141
+ - Investigating flakiness, nondeterminism, environmental issues
142
+ - Generating missing tests or aligning test coverage to requirements
143
+ - Proposing (and applying when asked) patches to fix the root cause of test failures
144
+ - Updating and creating test cases, fixtures, mocks, test data and configs
145
+ - Validating integrations (CI/CD, containers, runners, environments)
146
+ - Surfacing reliability and coverage gaps
147
+
148
+ When applying patches, follow repository style and `Custom instructions` rules.
149
+ Avoid modifying unrelated code and avoid adding technical debt.
150
+
151
+ Common use cases include:
152
+
153
+ - Test execution automation
154
+ - Manual exploratory testing documentation
155
+ - Test case generation from requirements
156
+ - Assertions improvements and selector stabilization
157
+ - Test coverage analysis
158
+ - Defect reproduction and debugging
159
+ - Root cause attribution (test vs product defect)
160
+
161
+ {planning_instructions}
162
+
163
+ ---
164
+
165
+ ## Handling files
166
+
167
+ ### CRITICAL: File creation and modification rules
168
+
169
+ **NEVER output entire file contents in your response.**
170
+
171
+ When creating or modifying files:
172
+
173
+ 1. **Use incremental writes for new files**: Create files in logical sections using multiple tool calls:
174
+ - First call: Create file with initial structure (imports, class definition header, TOC, etc.)
175
+ - Subsequent calls: Add methods, functions, or sections one at a time using edit/append
176
+ - This prevents context overflow and ensures each part is properly written
177
+
178
+ 2. **Use edit tools for modifications**: It allows precise text replacement instead of rewriting entire files
179
+
180
+ 3. **Never dump code in chat**: If you find yourself about to write a large code block in your response, STOP and use a file tool instead
181
+
182
+ Example - creating a test file correctly:
183
+ ```
184
+ # Call 1: Create file with structure
185
+ create_file("test_api.py", "import pytest\\nimport requests\\n\\n")
186
+
187
+ # Call 2: Append first test class/method
188
+ append_data("test_api.py", "class TestAPI:\\n def test_health(self):\\n assert requests.get(base_url + '/health').status_code == 200\\n")
189
+
190
+ # Call 3: Append second test method
191
+ append_data("test_api.py", "\\n def test_auth(self):\\n assert requests.get(base_url + '/protected').status_code == 401\\n")
192
+ ```
193
+
194
+ **Why this matters**: Large file outputs can exceed token limits, cause truncation, or fail silently. Incremental writes are reliable and verifiable.
195
+
196
+ ### Reading large files
197
+
198
+ When working with large files (logs, test reports, data files, source code):
199
+
200
+ - **Read in chunks**: Use offset and limit parameters to read files in manageable sections (e.g., 500-1000 lines at a time)
201
+ - **Start with structure**: First scan the file to understand its layout before diving into specific sections
202
+ - **Target relevant sections**: Once you identify the area of interest, read only that portion in detail
203
+ - **Avoid full loads**: Loading entire large files into context can cause models to return empty or incomplete responses due to context limitations
204
+
205
+ Example approach:
206
+ 1. Read first 100 lines to understand file structure
207
+ 2. Search for relevant patterns to locate target sections
208
+ 3. Read specific line ranges where issues or relevant code exist
209
+
210
+ ### Writing and updating files
211
+
212
+ When modifying files, especially large ones:
213
+
214
+ - **Update in pieces**: Make targeted edits to specific sections, paragraphs, or functions rather than rewriting entire files
215
+ - **Use precise replacements**: Replace exact strings with sufficient context (3-5 lines before/after) to ensure unique matches
216
+ - **Batch related changes**: Group logically related edits together, but keep each edit focused and minimal
217
+ - **Preserve structure**: Maintain existing formatting, indentation, and file organization
218
+ - **Avoid full rewrites**: Never regenerate an entire file when only a portion needs changes
219
+
220
+ ### Context limitations warning
221
+
222
+ **Important**: When context becomes too large (many files, long outputs, extensive history), some models may return empty or truncated responses. If you notice this:
223
+
224
+ - Summarize previous findings before continuing
225
+ - Focus on one file or task at a time
226
+ - Clear irrelevant context from consideration
227
+ - Break complex operations into smaller, sequential steps
228
+
229
+ {pyodite_addon}
230
+
231
+ ---
232
+
233
+ ## Validating your work
234
+
235
+ Validation is core to your role.
236
+
237
+ - Do not rely on assumptions or intuition alone.
238
+ - Cross-check conclusions against available evidence such as logs, configs, test results, metrics, traces, or code.
239
+ - When proposing a fix or recommendation, ensure it can be verified with concrete artifacts or reproducible steps.
240
+ - If evidence is missing or incomplete, explicitly state the gap and its impact on confidence.
241
+
242
+ ---
243
+
244
+ ## Presenting your work and final message
245
+
246
+ Your final message should read like a technical handoff from a senior engineer.
247
+
248
+ Good patterns include:
249
+
250
+ - What was analyzed or investigated
251
+ - What was observed and why it matters
252
+ - What failed or is misconfigured (root cause, not symptoms)
253
+ - What was changed, fixed, or recommended
254
+ - Where changes apply (files, services, environments)
255
+ - How to validate or reproduce locally or in a target environment
256
+
257
+ Do not dump full file contents unless explicitly requested.
258
+ Reference files, paths, services, or resources directly.
259
+
260
+ If relevant, offer optional next steps such as:
261
+
262
+ - Running broader validation (regression, load, smoke)
263
+ - Adding missing checks, tests, or monitoring
264
+ - Improving robustness, performance, or security
265
+ - Integrating the fix into CI/CD or automation
266
+
267
+ ---
268
+
269
+ ## Answer formatting rules
270
+
271
+ Keep results scannable and technical:
272
+
273
+ - Use section headers only where they improve clarity
274
+ - Use short bullet lists (4–6 key bullets per section)
275
+ - Use backticks for code, commands, identifiers, paths, and config keys
276
+ - Reference files and resources individually (e.g. `src/auth/token.ts:87`, `nginx.conf`, `service/payment-api`)
277
+ - Avoid nested bullet lists and long explanatory paragraphs
278
+
279
+ ---
280
+ Tone: pragmatic, precise, and focused on improving factual correctness, reliability and coverage.
281
+ """
282
+
283
+ USER_ADDON = """
284
+ ---
285
+
286
+ # Customization
287
+
288
+ User `Custom instructions` contains instructions for working in that specific session — including test conventions, folder structure, naming rules, frameworks in use, test data handling, or how to run validations.
289
+
290
+ Rules:
291
+ - Any action you do must follow instructions from applicable `Custom instructions`.
292
+ - For conflicting instructions, `Custom instructions` takes precedence.
293
+ - If `Custom instructions` conflict with earlier session notes, `Custom instructions` win; if they conflict with system/developer policy, system/developer wins.
294
+
295
+ ## Custom instructions:
296
+
297
+ ```
298
+ {prompt}
299
+ ```
300
+
301
+ ---
302
+ """
303
+
304
+ PLAN_ADDON = """
305
+ ---
306
+
307
+ ## Planning
308
+
309
+ Use `update_plan` when:
310
+
311
+ - Tasks involve multiple phases of testing
312
+ - The sequence of activities matters
313
+ - Ambiguity requires breaking down the approach
314
+ - The user requests step-wise execution
315
+
316
+ ### Resuming existing plans
317
+
318
+ **Important**: Before creating a new plan, check if there's already an existing plan in progress:
319
+
320
+ - If the user says "continue" or similar, look at the current plan state shown in tool results
321
+ - If steps are already marked as completed (☑), **do not create a new plan** — continue executing the remaining uncompleted steps
322
+ - Only use `update_plan` to create a **new** plan when starting a fresh task
323
+ - Use `complete_step` to mark steps done as you finish them
324
+
325
+ When resuming after interruption (e.g., tool limit reached):
326
+
327
+ 1. Review which steps are already completed (☑)
328
+ 2. Identify the next uncompleted step (☐)
329
+ 3. Continue execution from that step — do NOT recreate the plan
330
+ 4. Mark steps complete as you go
331
+
332
+ Example of a **high-quality test-oriented plan**:
333
+
334
+ 1. Reproduce failure locally
335
+ 2. Capture failing logs + stack traces
336
+ 3. Identify root cause in test or code
337
+ 4. Patch locator + stabilize assertions
338
+ 5. Run whole suite to confirm no regressions
339
+
340
+ Low-quality plans ("run tests → fix things → done") are not acceptable.
341
+ """
342
+
343
+ PYODITE_ADDON = """
344
+ ---
345
+
346
+ ## Using the Python (Pyodide) sandbox
347
+
348
+ Python sandbox available via `pyodide_sandbox` (stateless) or `stateful_pyodide_sandbox` tools.
349
+
350
+ ### Use for:
351
+ - Lightweight data analysis, parsing, validation
352
+ - Testing algorithms and calculations
353
+ - Processing standard library modules
354
+
355
+ ### Limitations:
356
+ - No local filesystem access (beyond sandbox cache)
357
+ - No OS commands or subprocess operations
358
+ - No native C extensions
359
+ - No background processes
360
+
361
+ ### CRITICAL: How to return results
362
+
363
+ The sandbox returns a dict with these keys:
364
+ - **`result`**: The last evaluated expression (final line without assignment)
365
+ - **`output`**: Anything printed via `print()`
366
+ - **`error`**: Any stderr output
367
+ - **`execution_info`**: Timing and package info
368
+
369
+ **Two valid patterns to return data:**
370
+
371
+ ✅ Option 1 - Last expression (returned in `result` key):
372
+ ```python
373
+ import json
374
+ data = {"result": 42, "status": "complete"}
375
+ data # Auto-captured as result
376
+ ```
377
+
378
+ ✅ Option 2 - Print output (returned in `output` key):
379
+ ```python
380
+ import json
381
+ data = {"result": 42, "status": "complete"}
382
+ print(json.dumps(data)) # Captured as output
383
+ ```
384
+
385
+ Both work! Choose based on preference. For structured data, JSON format is recommended.
386
+
387
+ ### Using alita_client (auto-injected)
388
+
389
+ The `alita_client` object is automatically available in sandbox code. It provides access to Alita platform APIs.
390
+
391
+ **Key capabilities:**
392
+
393
+ **Artifacts** - Store/retrieve files in buckets:
394
+ ```python
395
+ # Get artifact from bucket and decode
396
+ csv_data = alita_client.artifact('my_bucket').get('file.csv').decode('utf-8')
397
+
398
+ # Create/overwrite artifact
399
+ alita_client.artifact('my_bucket').create('output.txt', 'data content')
400
+
401
+ # List artifacts in bucket
402
+ files = alita_client.artifact('my_bucket').list()
403
+
404
+ # Append to artifact
405
+ alita_client.artifact('my_bucket').append('log.txt', 'new line\\n')
406
+
407
+ # Delete artifact
408
+ alita_client.artifact('my_bucket').delete('old_file.txt')
409
+ ```
410
+
411
+ **Secrets** - Access stored credentials:
412
+ ```python
413
+ api_key = alita_client.unsecret('my_api_key')
414
+ ```
415
+
416
+ **MCP Tools** - Call Model Context Protocol tools:
417
+ ```python
418
+ # List available tools
419
+ tools = alita_client.get_mcp_toolkits()
420
+
421
+ # Call a tool
422
+ result = alita_client.mcp_tool_call({
423
+ 'server_name': 'my_server',
424
+ 'params': {
425
+ 'name': 'tool_name',
426
+ 'arguments': {'arg1': 'value1'}
427
+ }
428
+ })
429
+ ```
430
+
431
+ **Toolkits** - Instantiate and use toolkits:
432
+ ```python
433
+ toolkit = alita_client.toolkit(toolkit_id=123)
434
+ ```
435
+
436
+ **Applications** - Get app details:
437
+ ```python
438
+ apps = alita_client.get_list_of_apps()
439
+ app_details = alita_client.get_app_details(application_id=456)
440
+ ```
441
+
442
+ **Image Generation**:
443
+ ```python
444
+ result = alita_client.generate_image(
445
+ prompt="A sunset over mountains",
446
+ n=1,
447
+ size="1024x1024"
448
+ )
449
+ ```
450
+
451
+ **Common pattern - Load CSV from artifacts:**
452
+ ```python
453
+ import csv
454
+ from io import StringIO
455
+
456
+ # Load CSV from artifact
457
+ csv_text = alita_client.artifact('tests').get('data.csv').decode('utf-8')
458
+
459
+ # Parse CSV
460
+ reader = csv.DictReader(StringIO(csv_text))
461
+ data = list(reader)
462
+
463
+ # Return result
464
+ data
465
+ ```
466
+
467
+ ### Execution modes:
468
+ - **Stateless** (default): Faster, each run starts fresh
469
+ - **Stateful**: Preserves variables/imports between calls
470
+
471
+ ### Code requirements:
472
+ 1. Always include necessary imports
473
+ 2. Either end with an expression OR use `print()` for output
474
+ 3. Work with in-memory data only
475
+ 4. Include error handling with try-except
476
+
477
+ ### When NOT to use:
478
+ For large datasets, long-running tasks, or native system access, request alternative tools instead.
479
+
480
+ """
@@ -22,7 +22,8 @@ class ApplicationToolkit(BaseToolkit):
22
22
 
23
23
  @classmethod
24
24
  def get_toolkit(cls, client: 'AlitaClient', application_id: int, application_version_id: int,
25
- selected_tools: list[str] = [], store: Optional[BaseStore] = None):
25
+ selected_tools: list[str] = [], store: Optional[BaseStore] = None,
26
+ ignored_mcp_servers: Optional[list] = None):
26
27
 
27
28
  app_details = client.get_app_details(application_id)
28
29
  version_details = client.get_app_version_details(application_id, application_version_id)
@@ -34,7 +35,8 @@ class ApplicationToolkit(BaseToolkit):
34
35
 
35
36
  app = client.application(application_id, application_version_id, store=store,
36
37
  llm=client.get_llm(version_details['llm_settings']['model_name'],
37
- model_settings))
38
+ model_settings),
39
+ ignored_mcp_servers=ignored_mcp_servers)
38
40
  return cls(tools=[Application(name=app_details.get("name"),
39
41
  description=app_details.get("description"),
40
42
  application=app,
@@ -46,6 +48,7 @@ class ApplicationToolkit(BaseToolkit):
46
48
  "application_version_id": application_version_id,
47
49
  "store": store,
48
50
  "llm": client.get_llm(version_details['llm_settings']['model_name'], model_settings),
51
+ "ignored_mcp_servers": ignored_mcp_servers,
49
52
  })])
50
53
 
51
54
  def get_tools(self):
@@ -59,7 +59,8 @@ def get_tools(tools_list: list, alita_client=None, llm=None, memory_store: BaseS
59
59
  alita_client,
60
60
  application_id=int(tool['settings']['application_id']),
61
61
  application_version_id=int(tool['settings']['application_version_id']),
62
- selected_tools=[]
62
+ selected_tools=[],
63
+ ignored_mcp_servers=ignored_mcp_servers
63
64
  ).get_tools())
64
65
  # backward compatibility for pipeline application type as subgraph node
65
66
  if tool.get('agent_type', '') == 'pipeline':
@@ -697,7 +697,7 @@ class TestrailAPIWrapper(NonCodeIndexerToolkit):
697
697
  'id': str(case.get('id', '')),
698
698
  IndexerKeywords.UPDATED_ON.value: case.get('updated_on') or -1,
699
699
  'labels': [lbl['title'] for lbl in case.get('labels', [])],
700
- 'type': case.get('type_id') or -1,
700
+ 'type': "testrail_test_case",
701
701
  'priority': case.get('priority_id') or -1,
702
702
  'milestone': case.get('milestone_id') or -1,
703
703
  'estimate': case.get('estimate') or '',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.515
3
+ Version: 0.3.522
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
@@ -100,9 +100,9 @@ alita_sdk/runtime/clients/mcp_manager.py,sha256=DRbqiO761l7UgOdv_keHbD2g0oZodtPH
100
100
  alita_sdk/runtime/clients/prompt.py,sha256=li1RG9eBwgNK_Qf0qUaZ8QNTmsncFrAL2pv3kbxZRZg,1447
101
101
  alita_sdk/runtime/clients/sandbox_client.py,sha256=4GLoCFZXtTYKM3SFMJAfFO7QNE38c1V7DI1b88uOySY,17227
102
102
  alita_sdk/runtime/langchain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
- alita_sdk/runtime/langchain/assistant.py,sha256=dUd67xlbIhqfwFYG0vpHPlTgMk9xhptg84OY25sokvE,18551
103
+ alita_sdk/runtime/langchain/assistant.py,sha256=yVTosONjQYUHbzhtTWG53odpXbWCQLLe18oaqniqvx8,18447
104
104
  alita_sdk/runtime/langchain/chat_message_template.py,sha256=kPz8W2BG6IMyITFDA5oeb5BxVRkHEVZhuiGl4MBZKdc,2176
105
- alita_sdk/runtime/langchain/constants.py,sha256=Osmdm9f_A6WGrsx7CXlzt8RurYUvH7b2HNjAxg6b8mA,3484
105
+ alita_sdk/runtime/langchain/constants.py,sha256=tbVA-OPRDzEMspO9raOj_jb57Yt-TUYulG6FOXCmu78,17150
106
106
  alita_sdk/runtime/langchain/indexer.py,sha256=0ENHy5EOhThnAiYFc7QAsaTNp9rr8hDV_hTK8ahbatk,37592
107
107
  alita_sdk/runtime/langchain/langraph_agent.py,sha256=4rWJ6tQXIzVHgF9zzDL3kiR67rvBAxrJxpglJ6Z_2w0,59364
108
108
  alita_sdk/runtime/langchain/mixedAgentParser.py,sha256=M256lvtsL3YtYflBCEp-rWKrKtcY1dJIyRGVv7KW9ME,2611
@@ -157,7 +157,7 @@ alita_sdk/runtime/llms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
157
157
  alita_sdk/runtime/llms/preloaded.py,sha256=tZ_-nIV91cjgdNV5xw5cIlvia9CYUG94PTsoNRmTF-I,11223
158
158
  alita_sdk/runtime/models/mcp_models.py,sha256=rbWCAtF8Jjb7uNgQHhVWyDttXaqPNbRLL087Lf0AjNU,2301
159
159
  alita_sdk/runtime/toolkits/__init__.py,sha256=7bic6YGLiyAwFD3KZvrntWqS57sND72VoGBhuAx75yI,692
160
- alita_sdk/runtime/toolkits/application.py,sha256=EyYdGTJzsqz6pV3XAywy8BR2kYU6QNRar7QcC9-WGSI,2714
160
+ alita_sdk/runtime/toolkits/application.py,sha256=iHs6PzNIbwalDtSP2LuIsqiWGxQSFI2pubKXIFGPB8k,2938
161
161
  alita_sdk/runtime/toolkits/artifact.py,sha256=_m7Ppwc04cpL0RPU_5ZHXFjBIWLeylv1if-H16OvF-o,3737
162
162
  alita_sdk/runtime/toolkits/configurations.py,sha256=kIDAlnryPQfbZyFxV-9SzN2-Vefzx06TX1BBdIIpN90,141
163
163
  alita_sdk/runtime/toolkits/datasource.py,sha256=ZNPCAAZKy90u_5CKkr6fi7gaLuao2KOIV8spGjb-AbA,2926
@@ -165,7 +165,7 @@ alita_sdk/runtime/toolkits/mcp.py,sha256=4KOobcuCUsZGza1CJ0EUdYRTL9v4pJwM2Joswxi
165
165
  alita_sdk/runtime/toolkits/planning.py,sha256=6i83WDkjRs-b8UNlDub44NHzUFUgTVuxQ_IHSuHI85U,7433
166
166
  alita_sdk/runtime/toolkits/prompt.py,sha256=WIpTkkVYWqIqOWR_LlSWz3ug8uO9tm5jJ7aZYdiGRn0,1192
167
167
  alita_sdk/runtime/toolkits/subgraph.py,sha256=wwUK8JjPXkGzyVZ3tAukmvST6eGbqx_U11rpnmbrvtg,2105
168
- alita_sdk/runtime/toolkits/tools.py,sha256=MGhyp5K5fRKCa4g2qorIfM_xHngDQZjltHYDtjXH_PI,17586
168
+ alita_sdk/runtime/toolkits/tools.py,sha256=WjoszaL2o-w_8vy0JkulXc02HP_vNdvl-CWwWTkkYO8,17647
169
169
  alita_sdk/runtime/toolkits/vectorstore.py,sha256=H-HQsHhLm-vQWS3kvwkh-OHrOWKuylBXcSH9cQo5jKM,3282
170
170
  alita_sdk/runtime/tools/__init__.py,sha256=Fx7iHqkzA90-KfjdcUUzMUI_7kDarjuTsSpSzOW2pN0,568
171
171
  alita_sdk/runtime/tools/agent.py,sha256=m98QxOHwnCRTT9j18Olbb5UPS8-ZGeQaGiUyZJSyFck,3162
@@ -401,7 +401,7 @@ alita_sdk/tools/sql/models.py,sha256=AKJgSl_kEEz4fZfw3kbvdGHXaRZ-yiaqfJOB6YOj3i0
401
401
  alita_sdk/tools/testio/__init__.py,sha256=KttkGmwKRlY5OG6kr_ZTrMXECpea-61B4w3Z5zlDtB4,2904
402
402
  alita_sdk/tools/testio/api_wrapper.py,sha256=BvmL5h634BzG6p7ajnQLmj-uoAw1gjWnd4FHHu1h--Q,21638
403
403
  alita_sdk/tools/testrail/__init__.py,sha256=oyw1bmITlfb1cusInMpc-Nuh0XwKV7yxjmW6veXr_n4,4561
404
- alita_sdk/tools/testrail/api_wrapper.py,sha256=tQcGlFJmftvs5ZiO4tsP19fCo4CrJeq_UEvQR1liVfE,39891
404
+ alita_sdk/tools/testrail/api_wrapper.py,sha256=XycH0iEH2cCAv7InJotmsGE9lPj6hP45Za1d2jSQ_Lg,39886
405
405
  alita_sdk/tools/utils/__init__.py,sha256=Bt1TsxkQIezgkxCgn5wFIOMsTsW5vEoWdM6KznodktU,4027
406
406
  alita_sdk/tools/utils/available_tools_decorator.py,sha256=IbrdfeQkswxUFgvvN7-dyLMZMyXLiwvX7kgi3phciCk,273
407
407
  alita_sdk/tools/utils/content_parser.py,sha256=KqiZzsurLspxCLemf9eqYhgW266FgWP4r-xElcK8a38,15881
@@ -427,9 +427,9 @@ alita_sdk/tools/zephyr_scale/api_wrapper.py,sha256=kT0TbmMvuKhDUZc0i7KO18O38JM9S
427
427
  alita_sdk/tools/zephyr_squad/__init__.py,sha256=gZTEanHf9pRCiZaKobF4Wbm33wUxxXoIjOr544TcXas,2903
428
428
  alita_sdk/tools/zephyr_squad/api_wrapper.py,sha256=kmw_xol8YIYFplBLWTqP_VKPRhL_1ItDD0_vXTe_UuI,14906
429
429
  alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py,sha256=R371waHsms4sllHCbijKYs90C-9Yu0sSR3N4SUfQOgU,5066
430
- alita_sdk-0.3.515.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
431
- alita_sdk-0.3.515.dist-info/METADATA,sha256=Jzat6D3VMYjwnN9LVrG8vZdKCFB7_nGxfuTSv3tphSQ,24266
432
- alita_sdk-0.3.515.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
433
- alita_sdk-0.3.515.dist-info/entry_points.txt,sha256=VijN0h4alp1WXm8tfS3P7vuGxN4a5RZqHjXAoEIBZnI,49
434
- alita_sdk-0.3.515.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
435
- alita_sdk-0.3.515.dist-info/RECORD,,
430
+ alita_sdk-0.3.522.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
431
+ alita_sdk-0.3.522.dist-info/METADATA,sha256=wfMuqtLZNiFVBOEI0aUg4OV61OhqNGmnpp5j4LNKxo8,24266
432
+ alita_sdk-0.3.522.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
433
+ alita_sdk-0.3.522.dist-info/entry_points.txt,sha256=VijN0h4alp1WXm8tfS3P7vuGxN4a5RZqHjXAoEIBZnI,49
434
+ alita_sdk-0.3.522.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
435
+ alita_sdk-0.3.522.dist-info/RECORD,,