malevich-coretools 0.3.51__tar.gz → 0.3.74__tar.gz
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.
- {malevich_coretools-0.3.51/malevich_coretools.egg-info → malevich_coretools-0.3.74}/PKG-INFO +1 -1
- malevich_coretools-0.3.74/VERSION +1 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/__init__.py +1 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/abstract/abstract.py +84 -10
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/abstract/pipeline.py +41 -10
- malevich_coretools-0.3.74/malevich_coretools/admin/utils.py +374 -0
- malevich_coretools-0.3.74/malevich_coretools/dm_utils.py +233 -0
- malevich_coretools-0.3.74/malevich_coretools/funcs/dm_funcs.py +162 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/funcs/funcs.py +243 -44
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/funcs/helpers.py +8 -14
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/secondary/config.py +1 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/secondary/const.py +47 -23
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/secondary/helpers.py +72 -30
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/utils.py +1373 -295
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74/malevich_coretools.egg-info}/PKG-INFO +1 -1
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/SOURCES.txt +2 -0
- malevich_coretools-0.3.51/VERSION +0 -1
- malevich_coretools-0.3.51/malevich_coretools/admin/utils.py +0 -99
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/LICENSE +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/MANIFEST.in +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/README.md +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/abstract/__init__.py +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/abstract/operations.py +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/abstract/statuses.py +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/admin/__init__.py +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/batch/__init__.py +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/batch/utils.py +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/funcs/__init__.py +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/funcs/checks.py +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/secondary/__init__.py +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/secondary/kafka_utils.py +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/tools/__init__.py +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/tools/abstract.py +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/tools/vast.py +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/dependency_links.txt +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/requires.txt +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/top_level.txt +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/pyproject.toml +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/requirements.txt +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/setup.cfg +0 -0
- {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/setup.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.3.74
|
{malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/abstract/abstract.py
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
1
|
+
from typing import Any, Dict, List, Optional, Set, Tuple, Union
|
|
2
2
|
|
|
3
3
|
from pydantic import BaseModel
|
|
4
4
|
|
|
@@ -28,6 +28,10 @@ class Operation(BaseModel):
|
|
|
28
28
|
operationId: Alias.Id
|
|
29
29
|
|
|
30
30
|
|
|
31
|
+
class Tags(BaseModel):
|
|
32
|
+
data: List[str]
|
|
33
|
+
|
|
34
|
+
|
|
31
35
|
class StopOperation(Operation):
|
|
32
36
|
withLogs: bool = False
|
|
33
37
|
infoUrl: Optional[str] = None
|
|
@@ -101,6 +105,7 @@ class JsonImage(BaseModel):
|
|
|
101
105
|
tag: str = ""
|
|
102
106
|
user: Optional[str] = None
|
|
103
107
|
token: Optional[str] = None
|
|
108
|
+
syncRef: bool = True
|
|
104
109
|
|
|
105
110
|
|
|
106
111
|
class UserApp(BaseModel):
|
|
@@ -132,6 +137,14 @@ class KeysValues(Operation):
|
|
|
132
137
|
data: Dict[str, str]
|
|
133
138
|
|
|
134
139
|
|
|
140
|
+
class Keys(BaseModel):
|
|
141
|
+
data: Dict[str, str]
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class Statuses(BaseModel):
|
|
145
|
+
data: Dict[str, str] # key - runId, value - one of: IN_PROGRESS, SUCCESS, FAILED
|
|
146
|
+
|
|
147
|
+
|
|
135
148
|
class ScaleInfo(BaseModel):
|
|
136
149
|
taskId: Optional[Alias.Id] = None
|
|
137
150
|
appId: Alias.Id
|
|
@@ -139,12 +152,8 @@ class ScaleInfo(BaseModel):
|
|
|
139
152
|
|
|
140
153
|
|
|
141
154
|
class TaskComponent(BaseModel):
|
|
142
|
-
|
|
143
|
-
control: Optional[str] = None
|
|
144
|
-
extra: Optional[str] = None
|
|
145
|
-
internal: Optional[str] = None
|
|
155
|
+
main: Optional[str] = None
|
|
146
156
|
keyValue: Optional[str] = None
|
|
147
|
-
minimal: Optional[str] = None
|
|
148
157
|
objectStorage: Optional[str] = None
|
|
149
158
|
|
|
150
159
|
|
|
@@ -197,6 +206,7 @@ class MainTask(BaseModel):
|
|
|
197
206
|
profileMode: Optional[str] = None
|
|
198
207
|
withLogs: bool = False # use only in prepare
|
|
199
208
|
saveFails: bool = True
|
|
209
|
+
clearDagLogs: bool = True
|
|
200
210
|
scaleCount: int = 1
|
|
201
211
|
scaleInfo: List[ScaleInfo]
|
|
202
212
|
component: TaskComponent
|
|
@@ -228,6 +238,7 @@ class MainPipeline(BaseModel):
|
|
|
228
238
|
run: bool = True
|
|
229
239
|
synthetic: bool = False
|
|
230
240
|
saveFails: bool = True
|
|
241
|
+
clearDagLogs: bool = True
|
|
231
242
|
scaleCount: int = 1
|
|
232
243
|
tags: Optional[Dict[str, str]] = None
|
|
233
244
|
|
|
@@ -241,6 +252,7 @@ class RunTask(Operation):
|
|
|
241
252
|
profileMode: Optional[str] = None
|
|
242
253
|
withLogs: bool = False
|
|
243
254
|
schedule: Optional[Schedule] = None
|
|
255
|
+
broadcast: bool = False
|
|
244
256
|
|
|
245
257
|
|
|
246
258
|
class AppManage(Operation):
|
|
@@ -254,6 +266,10 @@ class ResultIds(BaseModel):
|
|
|
254
266
|
ids: List[Alias.Id]
|
|
255
267
|
|
|
256
268
|
|
|
269
|
+
class ResultNames(BaseModel):
|
|
270
|
+
names: List[str]
|
|
271
|
+
|
|
272
|
+
|
|
257
273
|
class FilesDirs(BaseModel):
|
|
258
274
|
files: Dict[str, int]
|
|
259
275
|
directories: List[str]
|
|
@@ -385,8 +401,8 @@ class CollectionMetadata(BaseModel):
|
|
|
385
401
|
|
|
386
402
|
class LogsResult(BaseModel):
|
|
387
403
|
data: str
|
|
388
|
-
logs: Dict[str, str]
|
|
389
|
-
userLogs: Dict[str, str] = {}
|
|
404
|
+
logs: Optional[Dict[str, str]] = {}
|
|
405
|
+
userLogs: Optional[Dict[str, str]] = {}
|
|
390
406
|
|
|
391
407
|
|
|
392
408
|
class AppLog(BaseModel):
|
|
@@ -400,6 +416,7 @@ class PipelineRunInfo(BaseModel):
|
|
|
400
416
|
|
|
401
417
|
class AppLogs(BaseModel):
|
|
402
418
|
operationId: Alias.Id
|
|
419
|
+
runId: Optional[Alias.Id] = None
|
|
403
420
|
dagLogs: str = ""
|
|
404
421
|
data: Dict[str, AppLog] = {}
|
|
405
422
|
error: Optional[str] = None
|
|
@@ -449,6 +466,7 @@ class InputFunctionInfo(FunctionInfo):
|
|
|
449
466
|
|
|
450
467
|
class ProcessorFunctionInfo(FunctionInfo):
|
|
451
468
|
isStream: bool
|
|
469
|
+
objectDfConvert: bool = False
|
|
452
470
|
contextClass: Optional[Dict[str, Any]] = None # model_json_schema
|
|
453
471
|
|
|
454
472
|
|
|
@@ -501,6 +519,24 @@ class OperationOrNone(BaseModel):
|
|
|
501
519
|
operationId: Optional[Alias.Id] = None
|
|
502
520
|
|
|
503
521
|
|
|
522
|
+
class AdminRunInfoReq(OperationOrNone):
|
|
523
|
+
dmId: Optional[str] = None
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
class AdminDMRegister(BaseModel):
|
|
527
|
+
id: int
|
|
528
|
+
url: Optional[str]
|
|
529
|
+
secret: Optional[str]
|
|
530
|
+
appSecret: Optional[str]
|
|
531
|
+
login: Optional[str]
|
|
532
|
+
actuaryDMId: Optional[int]
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
class AdminDMUnregister(BaseModel):
|
|
536
|
+
id: str
|
|
537
|
+
actuaryDMId: Optional[int]
|
|
538
|
+
|
|
539
|
+
|
|
504
540
|
class AdminStopOperation(BaseModel):
|
|
505
541
|
operationId: Optional[Alias.Id] = None
|
|
506
542
|
withLogs: bool
|
|
@@ -603,7 +639,7 @@ class UserLimits(BaseModel):
|
|
|
603
639
|
defaultGpuDisk: int
|
|
604
640
|
|
|
605
641
|
|
|
606
|
-
class
|
|
642
|
+
class BasePlatformSettingsMain(BaseModel):
|
|
607
643
|
memoryRequest: Optional[int] = None
|
|
608
644
|
memoryLimit: Optional[int] = None
|
|
609
645
|
cpuRequest: Optional[int] = None
|
|
@@ -613,7 +649,11 @@ class BasePlatformSettings(BaseModel):
|
|
|
613
649
|
kubeconfig: Optional[str] = None
|
|
614
650
|
|
|
615
651
|
|
|
616
|
-
class
|
|
652
|
+
class BasePlatformSettings(BasePlatformSettingsMain):
|
|
653
|
+
allowKafka: bool = False
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
class Limits(BasePlatformSettingsMain):
|
|
617
657
|
gpuDisk: Optional[int] = None
|
|
618
658
|
|
|
619
659
|
|
|
@@ -675,3 +715,37 @@ class MCPToolCall(BaseModel):
|
|
|
675
715
|
class RunsFilter(BaseModel):
|
|
676
716
|
data: Optional[Dict[str, str]] = None
|
|
677
717
|
withTags: bool = False
|
|
718
|
+
|
|
719
|
+
|
|
720
|
+
class AppLocalScheme(BaseModel):
|
|
721
|
+
keys: List[str]
|
|
722
|
+
optionalKeys: Set[str]
|
|
723
|
+
|
|
724
|
+
|
|
725
|
+
class AppErrorInfo(BaseModel):
|
|
726
|
+
operationId: str
|
|
727
|
+
runId: str
|
|
728
|
+
bindId: str
|
|
729
|
+
funId: str
|
|
730
|
+
iteration: int
|
|
731
|
+
isProcessor: bool = True
|
|
732
|
+
trace: str
|
|
733
|
+
errType: str
|
|
734
|
+
errArgs: List[str]
|
|
735
|
+
isMalevichErr: bool
|
|
736
|
+
cfg: Optional[Dict[str, Any]]
|
|
737
|
+
schemes: Optional[Dict[str, AppLocalScheme]] = None
|
|
738
|
+
args: List[List[Union[Union[str, List[str]], List[Union[str, List[str]]]]]] = None # mb empty for send info structure
|
|
739
|
+
argsNames: List[str]
|
|
740
|
+
|
|
741
|
+
|
|
742
|
+
class AppErrorInfos(BaseModel):
|
|
743
|
+
data: List[AppErrorInfo]
|
|
744
|
+
|
|
745
|
+
|
|
746
|
+
class AppErrorInfoFilter(BaseModel):
|
|
747
|
+
operationId: str
|
|
748
|
+
runId: Optional[str] = None
|
|
749
|
+
bindId: Optional[str] = None
|
|
750
|
+
errType: Optional[str] = None
|
|
751
|
+
isMalevichErr: bool = False
|
{malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/abstract/pipeline.py
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import json
|
|
1
2
|
from enum import IntEnum
|
|
2
|
-
from typing import Dict, List, Optional, Union
|
|
3
|
+
from typing import Any, Dict, List, Optional, Union
|
|
3
4
|
|
|
4
5
|
from pydantic import BaseModel
|
|
5
6
|
|
|
@@ -7,6 +8,7 @@ from malevich_coretools.abstract.abstract import ( # noqa: F401
|
|
|
7
8
|
AdminRunInfo,
|
|
8
9
|
Alias,
|
|
9
10
|
JsonImage,
|
|
11
|
+
MainTaskCfg,
|
|
10
12
|
Restrictions,
|
|
11
13
|
ScaleInfo,
|
|
12
14
|
Schedule,
|
|
@@ -26,6 +28,14 @@ from malevich_coretools.abstract.operations import (
|
|
|
26
28
|
)
|
|
27
29
|
|
|
28
30
|
|
|
31
|
+
def _validation_common(arg: 'BaseArgument', other_k = 0) -> None:
|
|
32
|
+
k = (arg.id is not None) + (arg.collectionName is not None) + (arg.collectionId is not None) + other_k
|
|
33
|
+
if k == 0:
|
|
34
|
+
raise ValueError("argument construction requires exactly one parameter, got none")
|
|
35
|
+
if k > 1:
|
|
36
|
+
raise ValueError("argument construction requires exactly one parameter, multiple provided")
|
|
37
|
+
|
|
38
|
+
|
|
29
39
|
class PullCollectionPolicy(IntEnum):
|
|
30
40
|
INIT = 0
|
|
31
41
|
IF_NOT_EXIST = 1
|
|
@@ -42,7 +52,7 @@ class BaseArgument(BaseModel):
|
|
|
42
52
|
collectionId: Optional[str] = None # hardcode collection with id (or obj path)
|
|
43
53
|
|
|
44
54
|
def validation(self) -> None:
|
|
45
|
-
|
|
55
|
+
_validation_common(self)
|
|
46
56
|
|
|
47
57
|
|
|
48
58
|
class Argument(BaseArgument):
|
|
@@ -51,11 +61,11 @@ class Argument(BaseArgument):
|
|
|
51
61
|
|
|
52
62
|
def validation(self) -> None:
|
|
53
63
|
if self.group is not None:
|
|
54
|
-
|
|
64
|
+
_validation_common(self, 1)
|
|
55
65
|
for subarg in self.group:
|
|
56
66
|
subarg.validation()
|
|
57
67
|
else:
|
|
58
|
-
|
|
68
|
+
_validation_common(self)
|
|
59
69
|
|
|
60
70
|
|
|
61
71
|
class AlternativeArgument(BaseArgument):
|
|
@@ -64,23 +74,23 @@ class AlternativeArgument(BaseArgument):
|
|
|
64
74
|
|
|
65
75
|
def validation(self) -> None:
|
|
66
76
|
if self.group is not None:
|
|
67
|
-
|
|
77
|
+
_validation_common(self, 1)
|
|
68
78
|
for subarg in self.group:
|
|
69
79
|
subarg.validation()
|
|
70
80
|
elif self.alternative is not None:
|
|
71
81
|
for alt_arg in self.alternative:
|
|
72
82
|
if alt_arg.group is not None:
|
|
73
|
-
|
|
83
|
+
_validation_common(self, 1)
|
|
74
84
|
for subarg in alt_arg.group:
|
|
75
85
|
subarg.validation()
|
|
76
86
|
else:
|
|
77
|
-
|
|
87
|
+
_validation_common(self)
|
|
78
88
|
else:
|
|
79
|
-
|
|
89
|
+
_validation_common(self)
|
|
80
90
|
|
|
81
91
|
|
|
82
92
|
class AppEntity(BaseModel):
|
|
83
|
-
cfg: Optional[
|
|
93
|
+
cfg: Optional[Union[Alias.Json, Dict]] = None # local cfg for processor/condition
|
|
84
94
|
arguments: Dict[str, AlternativeArgument] = {} # TODO or List[Argument]?
|
|
85
95
|
conditions: Optional[Union[Dict[str, bool], List[Dict[str, bool]]]] = None # condition bindId to it result (list - any variant of them)
|
|
86
96
|
conditionsStructure: Optional[Union[Not, And, Or, InternalNot, InternalAnd, InternalOr, Value]] = None # set BoolOp, it transform to internal before send
|
|
@@ -92,6 +102,8 @@ class AppEntity(BaseModel):
|
|
|
92
102
|
image: JsonImage
|
|
93
103
|
platform: str = "base"
|
|
94
104
|
platformSettings: Optional[str] = None
|
|
105
|
+
requestedKeys: Optional[list[str]] = None # user secret keys
|
|
106
|
+
optionalKeys: Optional[list[str]] = None # user secret keys
|
|
95
107
|
|
|
96
108
|
def internal(self) -> None:
|
|
97
109
|
assert self.conditions is None or self.conditionsStructure is None, "should be set not more, than one of (conditions, conditionsStructure)"
|
|
@@ -105,6 +117,8 @@ class AppEntity(BaseModel):
|
|
|
105
117
|
self.loopConditions = [self.loopConditions]
|
|
106
118
|
if isinstance(self.loopConditionsStructure, BoolOp):
|
|
107
119
|
self.loopConditionsStructure = self.loopConditionsStructure.internal()
|
|
120
|
+
if isinstance(self.cfg, Dict):
|
|
121
|
+
self.cfg = json.dumps(self.cfg)
|
|
108
122
|
|
|
109
123
|
def simplify(self) -> None:
|
|
110
124
|
if isinstance(self.conditionsStructure, InternalBoolOp):
|
|
@@ -133,6 +147,7 @@ class Pipeline(BaseModel):
|
|
|
133
147
|
conditions: Dict[str, Condition] = {} # bindConditionId to Condition
|
|
134
148
|
results: Dict[str, List[Result]] = {} # bindProcessorId to results
|
|
135
149
|
pullCollectionPolicy: PullCollectionPolicy = PullCollectionPolicy.IF_NOT_EXIST
|
|
150
|
+
tags: List[str] = []
|
|
136
151
|
|
|
137
152
|
def internal(self) -> 'Pipeline':
|
|
138
153
|
for proc in self.processors.values():
|
|
@@ -156,7 +171,7 @@ class MainPipelineCfg(BaseModel):
|
|
|
156
171
|
conditions: Dict[str, Condition]
|
|
157
172
|
results: Dict[str, List[Result]]
|
|
158
173
|
pullCollectionPolicy: PullCollectionPolicy
|
|
159
|
-
cfg:
|
|
174
|
+
cfg: Alias.Json
|
|
160
175
|
infoUrl: Optional[str] = None
|
|
161
176
|
debugMode: bool
|
|
162
177
|
coreManage: bool
|
|
@@ -197,3 +212,19 @@ class AdminRunPipelineInfo(BaseModel):
|
|
|
197
212
|
class AdminRunsInfo(BaseModel):
|
|
198
213
|
tasks: List[AdminRunInfo]
|
|
199
214
|
pipelines: List[AdminRunPipelineInfo]
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
class TaskRunInfo(BaseModel):
|
|
218
|
+
logs: str
|
|
219
|
+
inputs: Dict[str, Union[str, Dict[str, Any]]] # collections from cfg
|
|
220
|
+
results: Dict[str, List[str]] # name -> collections list (1 collection common)
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
class RunInfo(BaseModel):
|
|
224
|
+
jsonMainTask: Optional[MainTaskCfg] = None
|
|
225
|
+
jsonMainPipeline: Optional[MainPipelineCfg] = None
|
|
226
|
+
tags: Optional[Dict[str, str]] = None
|
|
227
|
+
cfgId: str
|
|
228
|
+
runs: Dict[str, str] = {}
|
|
229
|
+
info: Dict[str, TaskRunInfo] = {}
|
|
230
|
+
stopped: bool
|