alita-sdk 0.3.387__py3-none-any.whl → 0.3.389__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.
- alita_sdk/runtime/langchain/langraph_agent.py +1 -1
- alita_sdk/runtime/toolkits/tools.py +1 -0
- alita_sdk/runtime/tools/function.py +5 -21
- alita_sdk/runtime/tools/sandbox.py +44 -14
- {alita_sdk-0.3.387.dist-info → alita_sdk-0.3.389.dist-info}/METADATA +1 -1
- {alita_sdk-0.3.387.dist-info → alita_sdk-0.3.389.dist-info}/RECORD +9 -9
- {alita_sdk-0.3.387.dist-info → alita_sdk-0.3.389.dist-info}/WHEEL +0 -0
- {alita_sdk-0.3.387.dist-info → alita_sdk-0.3.389.dist-info}/licenses/LICENSE +0 -0
- {alita_sdk-0.3.387.dist-info → alita_sdk-0.3.389.dist-info}/top_level.txt +0 -0
|
@@ -555,7 +555,7 @@ def create_graph(
|
|
|
555
555
|
break
|
|
556
556
|
elif node_type == 'code':
|
|
557
557
|
from ..tools.sandbox import create_sandbox_tool
|
|
558
|
-
sandbox_tool = create_sandbox_tool(stateful=False, allow_net=True)
|
|
558
|
+
sandbox_tool = create_sandbox_tool(stateful=False, allow_net=True, alita_client=kwargs.get('alita_client', None))
|
|
559
559
|
code_data = node.get('code', {'type': 'fixed', 'value': "return 'Code block is empty'"})
|
|
560
560
|
lg_builder.add_node(node_id, FunctionTool(
|
|
561
561
|
tool=sandbox_tool, name=node['id'], return_type='dict',
|
|
@@ -75,6 +75,7 @@ def get_tools(tools_list: list, alita_client, llm, memory_store: BaseStore = Non
|
|
|
75
75
|
tools += SandboxToolkit.get_toolkit(
|
|
76
76
|
stateful=False,
|
|
77
77
|
allow_net=True,
|
|
78
|
+
alita_client=alita_client,
|
|
78
79
|
).get_tools()
|
|
79
80
|
elif tool['name'] == 'image_generation':
|
|
80
81
|
if alita_client and alita_client.model_image_generation:
|
|
@@ -7,7 +7,7 @@ from langchain_core.callbacks import dispatch_custom_event
|
|
|
7
7
|
from langchain_core.messages import ToolCall
|
|
8
8
|
from langchain_core.runnables import RunnableConfig
|
|
9
9
|
from langchain_core.tools import BaseTool, ToolException
|
|
10
|
-
from typing import Any, Optional, Union
|
|
10
|
+
from typing import Any, Optional, Union
|
|
11
11
|
from langchain_core.utils.function_calling import convert_to_openai_tool
|
|
12
12
|
from pydantic import ValidationError
|
|
13
13
|
|
|
@@ -34,25 +34,7 @@ class FunctionTool(BaseTool):
|
|
|
34
34
|
|
|
35
35
|
del state_copy['messages'] # remove messages to avoid issues with pickling without langchain-core
|
|
36
36
|
# inject state into the code block as alita_state variable
|
|
37
|
-
pyodide_predata = f"
|
|
38
|
-
# add classes related to sandbox client
|
|
39
|
-
# read the content of alita_sdk/runtime/cliens/sandbox_client.py
|
|
40
|
-
try:
|
|
41
|
-
import os
|
|
42
|
-
from pathlib import Path
|
|
43
|
-
|
|
44
|
-
# Get the directory of the current file and construct the path to sandbox_client.py
|
|
45
|
-
current_dir = Path(__file__).parent
|
|
46
|
-
sandbox_client_path = current_dir.parent / 'clients' / 'sandbox_client.py'
|
|
47
|
-
|
|
48
|
-
with open(sandbox_client_path, 'r') as f:
|
|
49
|
-
sandbox_client_code = f.read()
|
|
50
|
-
pyodide_predata += f"\n{sandbox_client_code}\n"
|
|
51
|
-
pyodide_predata += (f"alita_client = SandboxClient(base_url='{self.alita_client.base_url}',"
|
|
52
|
-
f"project_id={self.alita_client.project_id},"
|
|
53
|
-
f"auth_token='{self.alita_client.auth_token}')")
|
|
54
|
-
except FileNotFoundError:
|
|
55
|
-
logger.error(f"sandbox_client.py not found at {sandbox_client_path}. Ensure the file exists.")
|
|
37
|
+
pyodide_predata = f"#state dict\nalita_state = {state_copy}\n"
|
|
56
38
|
return pyodide_predata
|
|
57
39
|
|
|
58
40
|
def _handle_pyodide_output(self, tool_result: Any) -> dict:
|
|
@@ -112,7 +94,9 @@ class FunctionTool(BaseTool):
|
|
|
112
94
|
# special handler for PyodideSandboxTool
|
|
113
95
|
if self._is_pyodide_tool():
|
|
114
96
|
code = func_args['code']
|
|
115
|
-
func_args['code'] = f"{self._prepare_pyodide_input(state)}\n{code}"
|
|
97
|
+
func_args['code'] = (f"{self._prepare_pyodide_input(state)}\n{code}"
|
|
98
|
+
# handle new lines in the code properly
|
|
99
|
+
.replace('\\n','\\\\n'))
|
|
116
100
|
try:
|
|
117
101
|
tool_result = self.tool.invoke(func_args, config, **kwargs)
|
|
118
102
|
dispatch_custom_event(
|
|
@@ -2,9 +2,12 @@ import asyncio
|
|
|
2
2
|
import logging
|
|
3
3
|
import subprocess
|
|
4
4
|
import os
|
|
5
|
-
from typing import Any, Type, Optional, Dict, List, Literal
|
|
5
|
+
from typing import Any, Type, Optional, Dict, List, Literal, Union
|
|
6
|
+
from copy import deepcopy
|
|
7
|
+
from pathlib import Path
|
|
6
8
|
|
|
7
9
|
from langchain_core.tools import BaseTool, BaseToolkit
|
|
10
|
+
from langchain_core.messages import ToolCall
|
|
8
11
|
from pydantic import BaseModel, create_model, ConfigDict, Field
|
|
9
12
|
from pydantic.fields import FieldInfo
|
|
10
13
|
|
|
@@ -19,7 +22,7 @@ def get_tools(tools_list: list, alita_client=None, llm=None, memory_store=None):
|
|
|
19
22
|
|
|
20
23
|
Args:
|
|
21
24
|
tools_list: List of tool configurations
|
|
22
|
-
alita_client: Alita client instance
|
|
25
|
+
alita_client: Alita client instance for sandbox tools
|
|
23
26
|
llm: LLM client instance (unused for sandbox)
|
|
24
27
|
memory_store: Optional memory store instance (unused for sandbox)
|
|
25
28
|
|
|
@@ -34,6 +37,7 @@ def get_tools(tools_list: list, alita_client=None, llm=None, memory_store=None):
|
|
|
34
37
|
toolkit_instance = SandboxToolkit.get_toolkit(
|
|
35
38
|
stateful=tool['settings'].get('stateful', False),
|
|
36
39
|
allow_net=tool['settings'].get('allow_net', True),
|
|
40
|
+
alita_client=alita_client,
|
|
37
41
|
toolkit_name=tool.get('toolkit_name', '')
|
|
38
42
|
)
|
|
39
43
|
all_tools.extend(toolkit_instance.get_tools())
|
|
@@ -126,6 +130,7 @@ class PyodideSandboxTool(BaseTool):
|
|
|
126
130
|
allow_net: bool = True
|
|
127
131
|
session_bytes: Optional[bytes] = None
|
|
128
132
|
session_metadata: Optional[Dict] = None
|
|
133
|
+
alita_client: Optional[Any] = None
|
|
129
134
|
|
|
130
135
|
def __init__(self, **kwargs: Any) -> None:
|
|
131
136
|
super().__init__(**kwargs)
|
|
@@ -134,6 +139,28 @@ class PyodideSandboxTool(BaseTool):
|
|
|
134
139
|
_setup_pyodide_cache_env()
|
|
135
140
|
self._initialize_sandbox()
|
|
136
141
|
|
|
142
|
+
def _prepare_pyodide_input(self, code: str) -> str:
|
|
143
|
+
"""Prepare input for PyodideSandboxTool by injecting state and alita_client into the code block."""
|
|
144
|
+
pyodide_predata = ""
|
|
145
|
+
|
|
146
|
+
# Add alita_client if available
|
|
147
|
+
if self.alita_client:
|
|
148
|
+
try:
|
|
149
|
+
# Get the directory of the current file and construct the path to sandbox_client.py
|
|
150
|
+
current_dir = Path(__file__).parent
|
|
151
|
+
sandbox_client_path = current_dir.parent / 'clients' / 'sandbox_client.py'
|
|
152
|
+
|
|
153
|
+
with open(sandbox_client_path, 'r') as f:
|
|
154
|
+
sandbox_client_code = f.read()
|
|
155
|
+
pyodide_predata += f"{sandbox_client_code}\n"
|
|
156
|
+
pyodide_predata += (f"alita_client = SandboxClient(base_url='{self.alita_client.base_url}',"
|
|
157
|
+
f"project_id={self.alita_client.project_id},"
|
|
158
|
+
f"auth_token='{self.alita_client.auth_token}')\n")
|
|
159
|
+
except FileNotFoundError:
|
|
160
|
+
logger.error(f"sandbox_client.py not found. Ensure the file exists.")
|
|
161
|
+
|
|
162
|
+
return f"#elitea simplified client\n{pyodide_predata}{code}"
|
|
163
|
+
|
|
137
164
|
def _initialize_sandbox(self) -> None:
|
|
138
165
|
"""Initialize the PyodideSandbox instance with optimized settings"""
|
|
139
166
|
try:
|
|
@@ -180,6 +207,9 @@ class PyodideSandboxTool(BaseTool):
|
|
|
180
207
|
if self._sandbox is None:
|
|
181
208
|
self._initialize_sandbox()
|
|
182
209
|
|
|
210
|
+
# Prepare code with state and client injection
|
|
211
|
+
prepared_code = self._prepare_pyodide_input(code)
|
|
212
|
+
|
|
183
213
|
# Check if we're already in an async context
|
|
184
214
|
try:
|
|
185
215
|
loop = asyncio.get_running_loop()
|
|
@@ -187,11 +217,11 @@ class PyodideSandboxTool(BaseTool):
|
|
|
187
217
|
# We'll need to use a different approach
|
|
188
218
|
import concurrent.futures
|
|
189
219
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
|
190
|
-
future = executor.submit(asyncio.run, self._arun(
|
|
220
|
+
future = executor.submit(asyncio.run, self._arun(prepared_code))
|
|
191
221
|
return future.result()
|
|
192
222
|
except RuntimeError:
|
|
193
223
|
# No running loop, safe to use asyncio.run
|
|
194
|
-
return asyncio.run(self._arun(
|
|
224
|
+
return asyncio.run(self._arun(prepared_code))
|
|
195
225
|
except (ImportError, RuntimeError) as e:
|
|
196
226
|
# Handle specific dependency errors gracefully
|
|
197
227
|
error_msg = str(e)
|
|
@@ -250,7 +280,7 @@ class PyodideSandboxTool(BaseTool):
|
|
|
250
280
|
|
|
251
281
|
except Exception as e:
|
|
252
282
|
logger.error(f"Error executing code in sandbox: {e}")
|
|
253
|
-
return f"Error executing code: {str(e)}"
|
|
283
|
+
return {"error": f"Error executing code: {str(e)}"}
|
|
254
284
|
|
|
255
285
|
|
|
256
286
|
class StatefulPyodideSandboxTool(PyodideSandboxTool):
|
|
@@ -278,7 +308,7 @@ class StatefulPyodideSandboxTool(PyodideSandboxTool):
|
|
|
278
308
|
|
|
279
309
|
|
|
280
310
|
# Factory function for creating sandbox tools
|
|
281
|
-
def create_sandbox_tool(stateful: bool = False, allow_net: bool = True) -> BaseTool:
|
|
311
|
+
def create_sandbox_tool(stateful: bool = False, allow_net: bool = True, alita_client: Optional[Any] = None) -> BaseTool:
|
|
282
312
|
"""
|
|
283
313
|
Factory function to create sandbox tools with specified configuration.
|
|
284
314
|
|
|
@@ -302,22 +332,22 @@ def create_sandbox_tool(stateful: bool = False, allow_net: bool = True) -> BaseT
|
|
|
302
332
|
- Cached wheels reduce package download time from ~4.76s to near-instant
|
|
303
333
|
"""
|
|
304
334
|
if stateful:
|
|
305
|
-
return StatefulPyodideSandboxTool(allow_net=allow_net)
|
|
335
|
+
return StatefulPyodideSandboxTool(allow_net=allow_net, alita_client=alita_client)
|
|
306
336
|
else:
|
|
307
|
-
return PyodideSandboxTool(stateful=False, allow_net=allow_net)
|
|
337
|
+
return PyodideSandboxTool(stateful=False, allow_net=allow_net, alita_client=alita_client)
|
|
308
338
|
|
|
309
339
|
|
|
310
340
|
class SandboxToolkit(BaseToolkit):
|
|
311
341
|
tools: List[BaseTool] = []
|
|
312
342
|
|
|
313
343
|
@staticmethod
|
|
314
|
-
def toolkit_config_schema() -> BaseModel:
|
|
344
|
+
def toolkit_config_schema() -> Type[BaseModel]:
|
|
315
345
|
# Create sample tools to get their schemas
|
|
316
346
|
sample_tools = [
|
|
317
347
|
PyodideSandboxTool(),
|
|
318
348
|
StatefulPyodideSandboxTool()
|
|
319
349
|
]
|
|
320
|
-
selected_tools = {x.name: x.args_schema.
|
|
350
|
+
selected_tools = {x.name: x.args_schema.model_json_schema() for x in sample_tools}
|
|
321
351
|
|
|
322
352
|
return create_model(
|
|
323
353
|
'sandbox',
|
|
@@ -338,24 +368,24 @@ class SandboxToolkit(BaseToolkit):
|
|
|
338
368
|
)
|
|
339
369
|
|
|
340
370
|
@classmethod
|
|
341
|
-
def get_toolkit(cls, stateful: bool = False, allow_net: bool = True, **kwargs):
|
|
371
|
+
def get_toolkit(cls, stateful: bool = False, allow_net: bool = True, alita_client=None, **kwargs):
|
|
342
372
|
"""
|
|
343
373
|
Get toolkit with sandbox tools.
|
|
344
374
|
|
|
345
375
|
Args:
|
|
346
376
|
stateful: Whether to maintain state between executions
|
|
347
377
|
allow_net: Whether to allow network access
|
|
378
|
+
alita_client: Alita client instance for sandbox tools
|
|
348
379
|
**kwargs: Additional arguments
|
|
349
380
|
"""
|
|
350
381
|
tools = []
|
|
351
382
|
|
|
352
383
|
if stateful:
|
|
353
|
-
tools.append(StatefulPyodideSandboxTool(allow_net=allow_net))
|
|
384
|
+
tools.append(StatefulPyodideSandboxTool(allow_net=allow_net, alita_client=alita_client))
|
|
354
385
|
else:
|
|
355
|
-
tools.append(PyodideSandboxTool(stateful=False, allow_net=allow_net))
|
|
386
|
+
tools.append(PyodideSandboxTool(stateful=False, allow_net=allow_net, alita_client=alita_client))
|
|
356
387
|
|
|
357
388
|
return cls(tools=tools)
|
|
358
389
|
|
|
359
390
|
def get_tools(self):
|
|
360
391
|
return self.tools
|
|
361
|
-
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: alita_sdk
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.389
|
|
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
|
|
@@ -45,7 +45,7 @@ alita_sdk/runtime/langchain/assistant.py,sha256=w6OUXNOWxWkju5n99Tfs_bbXlRsu397Q
|
|
|
45
45
|
alita_sdk/runtime/langchain/chat_message_template.py,sha256=kPz8W2BG6IMyITFDA5oeb5BxVRkHEVZhuiGl4MBZKdc,2176
|
|
46
46
|
alita_sdk/runtime/langchain/constants.py,sha256=eHVJ_beJNTf1WJo4yq7KMK64fxsRvs3lKc34QCXSbpk,3319
|
|
47
47
|
alita_sdk/runtime/langchain/indexer.py,sha256=0ENHy5EOhThnAiYFc7QAsaTNp9rr8hDV_hTK8ahbatk,37592
|
|
48
|
-
alita_sdk/runtime/langchain/langraph_agent.py,sha256=
|
|
48
|
+
alita_sdk/runtime/langchain/langraph_agent.py,sha256=p9okbdkZhG4qY0GHNm4PL6ZGQwVw-enWyoEPB_FKsDg,48706
|
|
49
49
|
alita_sdk/runtime/langchain/mixedAgentParser.py,sha256=M256lvtsL3YtYflBCEp-rWKrKtcY1dJIyRGVv7KW9ME,2611
|
|
50
50
|
alita_sdk/runtime/langchain/mixedAgentRenderes.py,sha256=asBtKqm88QhZRILditjYICwFVKF5KfO38hu2O-WrSWE,5964
|
|
51
51
|
alita_sdk/runtime/langchain/store_manager.py,sha256=i8Fl11IXJhrBXq1F1ukEVln57B1IBe-tqSUvfUmBV4A,2218
|
|
@@ -102,7 +102,7 @@ alita_sdk/runtime/toolkits/configurations.py,sha256=kIDAlnryPQfbZyFxV-9SzN2-Vefz
|
|
|
102
102
|
alita_sdk/runtime/toolkits/datasource.py,sha256=qk78OdPoReYPCWwahfkKLbKc4pfsu-061oXRryFLP6I,2498
|
|
103
103
|
alita_sdk/runtime/toolkits/prompt.py,sha256=WIpTkkVYWqIqOWR_LlSWz3ug8uO9tm5jJ7aZYdiGRn0,1192
|
|
104
104
|
alita_sdk/runtime/toolkits/subgraph.py,sha256=wwUK8JjPXkGzyVZ3tAukmvST6eGbqx_U11rpnmbrvtg,2105
|
|
105
|
-
alita_sdk/runtime/toolkits/tools.py,sha256=
|
|
105
|
+
alita_sdk/runtime/toolkits/tools.py,sha256=THBOuP6wfWCRScsIMBk4Tu675vhc6bYDVfAgz4ehn4Q,9321
|
|
106
106
|
alita_sdk/runtime/toolkits/vectorstore.py,sha256=BGppQADa1ZiLO17fC0uCACTTEvPHlodEDYEzUcBRbAA,2901
|
|
107
107
|
alita_sdk/runtime/tools/__init__.py,sha256=Fx7iHqkzA90-KfjdcUUzMUI_7kDarjuTsSpSzOW2pN0,568
|
|
108
108
|
alita_sdk/runtime/tools/agent.py,sha256=m98QxOHwnCRTT9j18Olbb5UPS8-ZGeQaGiUyZJSyFck,3162
|
|
@@ -110,7 +110,7 @@ alita_sdk/runtime/tools/application.py,sha256=z3vLZODs-_xEEnZFmGF0fKz1j3VtNJxqsA
|
|
|
110
110
|
alita_sdk/runtime/tools/artifact.py,sha256=u3szFwZqguHrPZ3tZJ7S_TiZl7cxlT3oHYd6zbdpRDE,13842
|
|
111
111
|
alita_sdk/runtime/tools/datasource.py,sha256=pvbaSfI-ThQQnjHG-QhYNSTYRnZB0rYtZFpjCfpzxYI,2443
|
|
112
112
|
alita_sdk/runtime/tools/echo.py,sha256=spw9eCweXzixJqHnZofHE1yWiSUa04L4VKycf3KCEaM,486
|
|
113
|
-
alita_sdk/runtime/tools/function.py,sha256=
|
|
113
|
+
alita_sdk/runtime/tools/function.py,sha256=jk_JrtuYByR9Df5EFOGFheB9HktNPJcOwf4jsTzV73w,6144
|
|
114
114
|
alita_sdk/runtime/tools/graph.py,sha256=7jImBBSEdP5Mjnn2keOiyUwdGDFhEXLUrgUiugO3mgA,3503
|
|
115
115
|
alita_sdk/runtime/tools/image_generation.py,sha256=Kls9D_ke_SK7xmVr7I9SlQcAEBJc86gf66haN0qIj9k,7469
|
|
116
116
|
alita_sdk/runtime/tools/indexer_tool.py,sha256=whSLPevB4WD6dhh2JDXEivDmTvbjiMV1MrPl9cz5eLA,4375
|
|
@@ -121,7 +121,7 @@ alita_sdk/runtime/tools/mcp_server_tool.py,sha256=MhLxZJ44LYrB_0GrojmkyqKoDRaqIH
|
|
|
121
121
|
alita_sdk/runtime/tools/pgvector_search.py,sha256=NN2BGAnq4SsDHIhUcFZ8d_dbEOM8QwB0UwpsWCYruXU,11692
|
|
122
122
|
alita_sdk/runtime/tools/prompt.py,sha256=nJafb_e5aOM1Rr3qGFCR-SKziU9uCsiP2okIMs9PppM,741
|
|
123
123
|
alita_sdk/runtime/tools/router.py,sha256=p7e0tX6YAWw2M2Nq0A_xqw1E2P-Xz1DaJvhUstfoZn4,1584
|
|
124
|
-
alita_sdk/runtime/tools/sandbox.py,sha256=
|
|
124
|
+
alita_sdk/runtime/tools/sandbox.py,sha256=7KpTAE4Fs1dvQIwAH__jwrxXG4QUa9GhcOhlkE8EKro,16049
|
|
125
125
|
alita_sdk/runtime/tools/tool.py,sha256=lE1hGi6qOAXG7qxtqxarD_XMQqTghdywf261DZawwno,5631
|
|
126
126
|
alita_sdk/runtime/tools/vectorstore.py,sha256=0SzfY1dYrGr7YUapJzXY01JFyzLv36dPjwHzs1XZIM4,34392
|
|
127
127
|
alita_sdk/runtime/tools/vectorstore_base.py,sha256=k_6LAhhBJEs5SXCQJI3bBvJLQli6_3pHjqF6SCQGJGc,28312
|
|
@@ -353,8 +353,8 @@ alita_sdk/tools/zephyr_scale/api_wrapper.py,sha256=kT0TbmMvuKhDUZc0i7KO18O38JM9S
|
|
|
353
353
|
alita_sdk/tools/zephyr_squad/__init__.py,sha256=0ne8XLJEQSLOWfzd2HdnqOYmQlUliKHbBED5kW_Vias,2895
|
|
354
354
|
alita_sdk/tools/zephyr_squad/api_wrapper.py,sha256=kmw_xol8YIYFplBLWTqP_VKPRhL_1ItDD0_vXTe_UuI,14906
|
|
355
355
|
alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py,sha256=R371waHsms4sllHCbijKYs90C-9Yu0sSR3N4SUfQOgU,5066
|
|
356
|
-
alita_sdk-0.3.
|
|
357
|
-
alita_sdk-0.3.
|
|
358
|
-
alita_sdk-0.3.
|
|
359
|
-
alita_sdk-0.3.
|
|
360
|
-
alita_sdk-0.3.
|
|
356
|
+
alita_sdk-0.3.389.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
357
|
+
alita_sdk-0.3.389.dist-info/METADATA,sha256=islqusegdEMMBtEZYtzDqn7HIbx_8CNNdu7Oq-HQn9A,19071
|
|
358
|
+
alita_sdk-0.3.389.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
359
|
+
alita_sdk-0.3.389.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
|
|
360
|
+
alita_sdk-0.3.389.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|