flyte 0.0.1b0__py3-none-any.whl → 2.0.0b46__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. flyte/__init__.py +83 -30
  2. flyte/_bin/connect.py +61 -0
  3. flyte/_bin/debug.py +38 -0
  4. flyte/_bin/runtime.py +87 -19
  5. flyte/_bin/serve.py +351 -0
  6. flyte/_build.py +3 -2
  7. flyte/_cache/cache.py +6 -5
  8. flyte/_cache/local_cache.py +216 -0
  9. flyte/_code_bundle/_ignore.py +31 -5
  10. flyte/_code_bundle/_packaging.py +42 -11
  11. flyte/_code_bundle/_utils.py +57 -34
  12. flyte/_code_bundle/bundle.py +130 -27
  13. flyte/_constants.py +1 -0
  14. flyte/_context.py +21 -5
  15. flyte/_custom_context.py +73 -0
  16. flyte/_debug/constants.py +37 -0
  17. flyte/_debug/utils.py +17 -0
  18. flyte/_debug/vscode.py +315 -0
  19. flyte/_deploy.py +396 -75
  20. flyte/_deployer.py +109 -0
  21. flyte/_environment.py +94 -11
  22. flyte/_excepthook.py +37 -0
  23. flyte/_group.py +2 -1
  24. flyte/_hash.py +1 -16
  25. flyte/_image.py +544 -234
  26. flyte/_initialize.py +443 -294
  27. flyte/_interface.py +40 -5
  28. flyte/_internal/controllers/__init__.py +22 -8
  29. flyte/_internal/controllers/_local_controller.py +159 -35
  30. flyte/_internal/controllers/_trace.py +18 -10
  31. flyte/_internal/controllers/remote/__init__.py +38 -9
  32. flyte/_internal/controllers/remote/_action.py +82 -12
  33. flyte/_internal/controllers/remote/_client.py +6 -2
  34. flyte/_internal/controllers/remote/_controller.py +290 -64
  35. flyte/_internal/controllers/remote/_core.py +155 -95
  36. flyte/_internal/controllers/remote/_informer.py +40 -20
  37. flyte/_internal/controllers/remote/_service_protocol.py +2 -2
  38. flyte/_internal/imagebuild/__init__.py +2 -10
  39. flyte/_internal/imagebuild/docker_builder.py +391 -84
  40. flyte/_internal/imagebuild/image_builder.py +111 -55
  41. flyte/_internal/imagebuild/remote_builder.py +409 -0
  42. flyte/_internal/imagebuild/utils.py +79 -0
  43. flyte/_internal/resolvers/_app_env_module.py +92 -0
  44. flyte/_internal/resolvers/_task_module.py +5 -38
  45. flyte/_internal/resolvers/app_env.py +26 -0
  46. flyte/_internal/resolvers/common.py +8 -1
  47. flyte/_internal/resolvers/default.py +2 -2
  48. flyte/_internal/runtime/convert.py +322 -33
  49. flyte/_internal/runtime/entrypoints.py +106 -18
  50. flyte/_internal/runtime/io.py +71 -23
  51. flyte/_internal/runtime/resources_serde.py +21 -7
  52. flyte/_internal/runtime/reuse.py +125 -0
  53. flyte/_internal/runtime/rusty.py +196 -0
  54. flyte/_internal/runtime/task_serde.py +239 -66
  55. flyte/_internal/runtime/taskrunner.py +48 -8
  56. flyte/_internal/runtime/trigger_serde.py +162 -0
  57. flyte/_internal/runtime/types_serde.py +7 -16
  58. flyte/_keyring/file.py +115 -0
  59. flyte/_link.py +30 -0
  60. flyte/_logging.py +241 -42
  61. flyte/_map.py +312 -0
  62. flyte/_metrics.py +59 -0
  63. flyte/_module.py +74 -0
  64. flyte/_pod.py +30 -0
  65. flyte/_resources.py +296 -33
  66. flyte/_retry.py +1 -7
  67. flyte/_reusable_environment.py +72 -7
  68. flyte/_run.py +461 -132
  69. flyte/_secret.py +47 -11
  70. flyte/_serve.py +333 -0
  71. flyte/_task.py +245 -56
  72. flyte/_task_environment.py +219 -97
  73. flyte/_task_plugins.py +47 -0
  74. flyte/_tools.py +8 -8
  75. flyte/_trace.py +15 -24
  76. flyte/_trigger.py +1027 -0
  77. flyte/_utils/__init__.py +12 -1
  78. flyte/_utils/asyn.py +3 -1
  79. flyte/_utils/async_cache.py +139 -0
  80. flyte/_utils/coro_management.py +5 -4
  81. flyte/_utils/description_parser.py +19 -0
  82. flyte/_utils/docker_credentials.py +173 -0
  83. flyte/_utils/helpers.py +45 -19
  84. flyte/_utils/module_loader.py +123 -0
  85. flyte/_utils/org_discovery.py +57 -0
  86. flyte/_utils/uv_script_parser.py +8 -1
  87. flyte/_version.py +16 -3
  88. flyte/app/__init__.py +27 -0
  89. flyte/app/_app_environment.py +362 -0
  90. flyte/app/_connector_environment.py +40 -0
  91. flyte/app/_deploy.py +130 -0
  92. flyte/app/_parameter.py +343 -0
  93. flyte/app/_runtime/__init__.py +3 -0
  94. flyte/app/_runtime/app_serde.py +383 -0
  95. flyte/app/_types.py +113 -0
  96. flyte/app/extras/__init__.py +9 -0
  97. flyte/app/extras/_auth_middleware.py +217 -0
  98. flyte/app/extras/_fastapi.py +93 -0
  99. flyte/app/extras/_model_loader/__init__.py +3 -0
  100. flyte/app/extras/_model_loader/config.py +7 -0
  101. flyte/app/extras/_model_loader/loader.py +288 -0
  102. flyte/cli/__init__.py +12 -0
  103. flyte/cli/_abort.py +28 -0
  104. flyte/cli/_build.py +114 -0
  105. flyte/cli/_common.py +493 -0
  106. flyte/cli/_create.py +371 -0
  107. flyte/cli/_delete.py +45 -0
  108. flyte/cli/_deploy.py +401 -0
  109. flyte/cli/_gen.py +316 -0
  110. flyte/cli/_get.py +446 -0
  111. flyte/cli/_option.py +33 -0
  112. {union/_cli → flyte/cli}/_params.py +152 -153
  113. flyte/cli/_plugins.py +209 -0
  114. flyte/cli/_prefetch.py +292 -0
  115. flyte/cli/_run.py +690 -0
  116. flyte/cli/_serve.py +338 -0
  117. flyte/cli/_update.py +86 -0
  118. flyte/cli/_user.py +20 -0
  119. flyte/cli/main.py +246 -0
  120. flyte/config/__init__.py +3 -0
  121. flyte/config/_config.py +248 -0
  122. flyte/config/_internal.py +73 -0
  123. flyte/config/_reader.py +225 -0
  124. flyte/connectors/__init__.py +11 -0
  125. flyte/connectors/_connector.py +330 -0
  126. flyte/connectors/_server.py +194 -0
  127. flyte/connectors/utils.py +159 -0
  128. flyte/errors.py +134 -2
  129. flyte/extend.py +24 -0
  130. flyte/extras/_container.py +69 -56
  131. flyte/git/__init__.py +3 -0
  132. flyte/git/_config.py +279 -0
  133. flyte/io/__init__.py +8 -1
  134. flyte/io/{structured_dataset → _dataframe}/__init__.py +32 -30
  135. flyte/io/{structured_dataset → _dataframe}/basic_dfs.py +75 -68
  136. flyte/io/{structured_dataset/structured_dataset.py → _dataframe/dataframe.py} +207 -242
  137. flyte/io/_dir.py +575 -113
  138. flyte/io/_file.py +587 -141
  139. flyte/io/_hashing_io.py +342 -0
  140. flyte/io/extend.py +7 -0
  141. flyte/models.py +635 -0
  142. flyte/prefetch/__init__.py +22 -0
  143. flyte/prefetch/_hf_model.py +563 -0
  144. flyte/remote/__init__.py +14 -3
  145. flyte/remote/_action.py +879 -0
  146. flyte/remote/_app.py +346 -0
  147. flyte/remote/_auth_metadata.py +42 -0
  148. flyte/remote/_client/_protocols.py +62 -4
  149. flyte/remote/_client/auth/_auth_utils.py +19 -0
  150. flyte/remote/_client/auth/_authenticators/base.py +8 -2
  151. flyte/remote/_client/auth/_authenticators/device_code.py +4 -5
  152. flyte/remote/_client/auth/_authenticators/factory.py +4 -0
  153. flyte/remote/_client/auth/_authenticators/passthrough.py +79 -0
  154. flyte/remote/_client/auth/_authenticators/pkce.py +17 -18
  155. flyte/remote/_client/auth/_channel.py +47 -18
  156. flyte/remote/_client/auth/_client_config.py +5 -3
  157. flyte/remote/_client/auth/_keyring.py +15 -2
  158. flyte/remote/_client/auth/_token_client.py +3 -3
  159. flyte/remote/_client/controlplane.py +206 -18
  160. flyte/remote/_common.py +66 -0
  161. flyte/remote/_data.py +107 -22
  162. flyte/remote/_logs.py +116 -33
  163. flyte/remote/_project.py +21 -19
  164. flyte/remote/_run.py +164 -631
  165. flyte/remote/_secret.py +72 -29
  166. flyte/remote/_task.py +387 -46
  167. flyte/remote/_trigger.py +368 -0
  168. flyte/remote/_user.py +43 -0
  169. flyte/report/_report.py +10 -6
  170. flyte/storage/__init__.py +13 -1
  171. flyte/storage/_config.py +237 -0
  172. flyte/storage/_parallel_reader.py +289 -0
  173. flyte/storage/_storage.py +268 -59
  174. flyte/syncify/__init__.py +56 -0
  175. flyte/syncify/_api.py +414 -0
  176. flyte/types/__init__.py +39 -0
  177. flyte/types/_interface.py +22 -7
  178. flyte/{io/pickle/transformer.py → types/_pickle.py} +37 -9
  179. flyte/types/_string_literals.py +8 -9
  180. flyte/types/_type_engine.py +230 -129
  181. flyte/types/_utils.py +1 -1
  182. flyte-2.0.0b46.data/scripts/debug.py +38 -0
  183. flyte-2.0.0b46.data/scripts/runtime.py +194 -0
  184. flyte-2.0.0b46.dist-info/METADATA +352 -0
  185. flyte-2.0.0b46.dist-info/RECORD +221 -0
  186. flyte-2.0.0b46.dist-info/entry_points.txt +8 -0
  187. flyte-2.0.0b46.dist-info/licenses/LICENSE +201 -0
  188. flyte/_api_commons.py +0 -3
  189. flyte/_cli/_common.py +0 -287
  190. flyte/_cli/_create.py +0 -42
  191. flyte/_cli/_delete.py +0 -23
  192. flyte/_cli/_deploy.py +0 -140
  193. flyte/_cli/_get.py +0 -235
  194. flyte/_cli/_run.py +0 -152
  195. flyte/_cli/main.py +0 -72
  196. flyte/_datastructures.py +0 -342
  197. flyte/_internal/controllers/pbhash.py +0 -39
  198. flyte/_protos/common/authorization_pb2.py +0 -66
  199. flyte/_protos/common/authorization_pb2.pyi +0 -108
  200. flyte/_protos/common/authorization_pb2_grpc.py +0 -4
  201. flyte/_protos/common/identifier_pb2.py +0 -71
  202. flyte/_protos/common/identifier_pb2.pyi +0 -82
  203. flyte/_protos/common/identifier_pb2_grpc.py +0 -4
  204. flyte/_protos/common/identity_pb2.py +0 -48
  205. flyte/_protos/common/identity_pb2.pyi +0 -72
  206. flyte/_protos/common/identity_pb2_grpc.py +0 -4
  207. flyte/_protos/common/list_pb2.py +0 -36
  208. flyte/_protos/common/list_pb2.pyi +0 -69
  209. flyte/_protos/common/list_pb2_grpc.py +0 -4
  210. flyte/_protos/common/policy_pb2.py +0 -37
  211. flyte/_protos/common/policy_pb2.pyi +0 -27
  212. flyte/_protos/common/policy_pb2_grpc.py +0 -4
  213. flyte/_protos/common/role_pb2.py +0 -37
  214. flyte/_protos/common/role_pb2.pyi +0 -53
  215. flyte/_protos/common/role_pb2_grpc.py +0 -4
  216. flyte/_protos/common/runtime_version_pb2.py +0 -28
  217. flyte/_protos/common/runtime_version_pb2.pyi +0 -24
  218. flyte/_protos/common/runtime_version_pb2_grpc.py +0 -4
  219. flyte/_protos/logs/dataplane/payload_pb2.py +0 -96
  220. flyte/_protos/logs/dataplane/payload_pb2.pyi +0 -168
  221. flyte/_protos/logs/dataplane/payload_pb2_grpc.py +0 -4
  222. flyte/_protos/secret/definition_pb2.py +0 -49
  223. flyte/_protos/secret/definition_pb2.pyi +0 -93
  224. flyte/_protos/secret/definition_pb2_grpc.py +0 -4
  225. flyte/_protos/secret/payload_pb2.py +0 -62
  226. flyte/_protos/secret/payload_pb2.pyi +0 -94
  227. flyte/_protos/secret/payload_pb2_grpc.py +0 -4
  228. flyte/_protos/secret/secret_pb2.py +0 -38
  229. flyte/_protos/secret/secret_pb2.pyi +0 -6
  230. flyte/_protos/secret/secret_pb2_grpc.py +0 -198
  231. flyte/_protos/secret/secret_pb2_grpc_grpc.py +0 -198
  232. flyte/_protos/validate/validate/validate_pb2.py +0 -76
  233. flyte/_protos/workflow/node_execution_service_pb2.py +0 -26
  234. flyte/_protos/workflow/node_execution_service_pb2.pyi +0 -4
  235. flyte/_protos/workflow/node_execution_service_pb2_grpc.py +0 -32
  236. flyte/_protos/workflow/queue_service_pb2.py +0 -106
  237. flyte/_protos/workflow/queue_service_pb2.pyi +0 -141
  238. flyte/_protos/workflow/queue_service_pb2_grpc.py +0 -172
  239. flyte/_protos/workflow/run_definition_pb2.py +0 -128
  240. flyte/_protos/workflow/run_definition_pb2.pyi +0 -310
  241. flyte/_protos/workflow/run_definition_pb2_grpc.py +0 -4
  242. flyte/_protos/workflow/run_logs_service_pb2.py +0 -41
  243. flyte/_protos/workflow/run_logs_service_pb2.pyi +0 -28
  244. flyte/_protos/workflow/run_logs_service_pb2_grpc.py +0 -69
  245. flyte/_protos/workflow/run_service_pb2.py +0 -133
  246. flyte/_protos/workflow/run_service_pb2.pyi +0 -175
  247. flyte/_protos/workflow/run_service_pb2_grpc.py +0 -412
  248. flyte/_protos/workflow/state_service_pb2.py +0 -58
  249. flyte/_protos/workflow/state_service_pb2.pyi +0 -71
  250. flyte/_protos/workflow/state_service_pb2_grpc.py +0 -138
  251. flyte/_protos/workflow/task_definition_pb2.py +0 -72
  252. flyte/_protos/workflow/task_definition_pb2.pyi +0 -65
  253. flyte/_protos/workflow/task_definition_pb2_grpc.py +0 -4
  254. flyte/_protos/workflow/task_service_pb2.py +0 -44
  255. flyte/_protos/workflow/task_service_pb2.pyi +0 -31
  256. flyte/_protos/workflow/task_service_pb2_grpc.py +0 -104
  257. flyte/io/_dataframe.py +0 -0
  258. flyte/io/pickle/__init__.py +0 -0
  259. flyte/remote/_console.py +0 -18
  260. flyte-0.0.1b0.dist-info/METADATA +0 -179
  261. flyte-0.0.1b0.dist-info/RECORD +0 -390
  262. flyte-0.0.1b0.dist-info/entry_points.txt +0 -3
  263. union/__init__.py +0 -54
  264. union/_api_commons.py +0 -3
  265. union/_bin/__init__.py +0 -0
  266. union/_bin/runtime.py +0 -113
  267. union/_build.py +0 -25
  268. union/_cache/__init__.py +0 -12
  269. union/_cache/cache.py +0 -141
  270. union/_cache/defaults.py +0 -9
  271. union/_cache/policy_function_body.py +0 -42
  272. union/_cli/__init__.py +0 -0
  273. union/_cli/_common.py +0 -263
  274. union/_cli/_create.py +0 -40
  275. union/_cli/_delete.py +0 -23
  276. union/_cli/_deploy.py +0 -120
  277. union/_cli/_get.py +0 -162
  278. union/_cli/_run.py +0 -150
  279. union/_cli/main.py +0 -72
  280. union/_code_bundle/__init__.py +0 -8
  281. union/_code_bundle/_ignore.py +0 -113
  282. union/_code_bundle/_packaging.py +0 -187
  283. union/_code_bundle/_utils.py +0 -342
  284. union/_code_bundle/bundle.py +0 -176
  285. union/_context.py +0 -146
  286. union/_datastructures.py +0 -295
  287. union/_deploy.py +0 -185
  288. union/_doc.py +0 -29
  289. union/_docstring.py +0 -26
  290. union/_environment.py +0 -43
  291. union/_group.py +0 -31
  292. union/_hash.py +0 -23
  293. union/_image.py +0 -760
  294. union/_initialize.py +0 -585
  295. union/_interface.py +0 -84
  296. union/_internal/__init__.py +0 -3
  297. union/_internal/controllers/__init__.py +0 -77
  298. union/_internal/controllers/_local_controller.py +0 -77
  299. union/_internal/controllers/pbhash.py +0 -39
  300. union/_internal/controllers/remote/__init__.py +0 -40
  301. union/_internal/controllers/remote/_action.py +0 -131
  302. union/_internal/controllers/remote/_client.py +0 -43
  303. union/_internal/controllers/remote/_controller.py +0 -169
  304. union/_internal/controllers/remote/_core.py +0 -341
  305. union/_internal/controllers/remote/_informer.py +0 -260
  306. union/_internal/controllers/remote/_service_protocol.py +0 -44
  307. union/_internal/imagebuild/__init__.py +0 -11
  308. union/_internal/imagebuild/docker_builder.py +0 -416
  309. union/_internal/imagebuild/image_builder.py +0 -243
  310. union/_internal/imagebuild/remote_builder.py +0 -0
  311. union/_internal/resolvers/__init__.py +0 -0
  312. union/_internal/resolvers/_task_module.py +0 -31
  313. union/_internal/resolvers/common.py +0 -24
  314. union/_internal/resolvers/default.py +0 -27
  315. union/_internal/runtime/__init__.py +0 -0
  316. union/_internal/runtime/convert.py +0 -163
  317. union/_internal/runtime/entrypoints.py +0 -121
  318. union/_internal/runtime/io.py +0 -136
  319. union/_internal/runtime/resources_serde.py +0 -134
  320. union/_internal/runtime/task_serde.py +0 -202
  321. union/_internal/runtime/taskrunner.py +0 -179
  322. union/_internal/runtime/types_serde.py +0 -53
  323. union/_logging.py +0 -124
  324. union/_protos/__init__.py +0 -0
  325. union/_protos/common/authorization_pb2.py +0 -66
  326. union/_protos/common/authorization_pb2.pyi +0 -106
  327. union/_protos/common/authorization_pb2_grpc.py +0 -4
  328. union/_protos/common/identifier_pb2.py +0 -71
  329. union/_protos/common/identifier_pb2.pyi +0 -82
  330. union/_protos/common/identifier_pb2_grpc.py +0 -4
  331. union/_protos/common/identity_pb2.py +0 -48
  332. union/_protos/common/identity_pb2.pyi +0 -72
  333. union/_protos/common/identity_pb2_grpc.py +0 -4
  334. union/_protos/common/list_pb2.py +0 -36
  335. union/_protos/common/list_pb2.pyi +0 -69
  336. union/_protos/common/list_pb2_grpc.py +0 -4
  337. union/_protos/common/policy_pb2.py +0 -37
  338. union/_protos/common/policy_pb2.pyi +0 -27
  339. union/_protos/common/policy_pb2_grpc.py +0 -4
  340. union/_protos/common/role_pb2.py +0 -37
  341. union/_protos/common/role_pb2.pyi +0 -51
  342. union/_protos/common/role_pb2_grpc.py +0 -4
  343. union/_protos/common/runtime_version_pb2.py +0 -28
  344. union/_protos/common/runtime_version_pb2.pyi +0 -24
  345. union/_protos/common/runtime_version_pb2_grpc.py +0 -4
  346. union/_protos/logs/dataplane/payload_pb2.py +0 -96
  347. union/_protos/logs/dataplane/payload_pb2.pyi +0 -168
  348. union/_protos/logs/dataplane/payload_pb2_grpc.py +0 -4
  349. union/_protos/secret/definition_pb2.py +0 -49
  350. union/_protos/secret/definition_pb2.pyi +0 -93
  351. union/_protos/secret/definition_pb2_grpc.py +0 -4
  352. union/_protos/secret/payload_pb2.py +0 -62
  353. union/_protos/secret/payload_pb2.pyi +0 -94
  354. union/_protos/secret/payload_pb2_grpc.py +0 -4
  355. union/_protos/secret/secret_pb2.py +0 -38
  356. union/_protos/secret/secret_pb2.pyi +0 -6
  357. union/_protos/secret/secret_pb2_grpc.py +0 -198
  358. union/_protos/validate/validate/validate_pb2.py +0 -76
  359. union/_protos/workflow/node_execution_service_pb2.py +0 -26
  360. union/_protos/workflow/node_execution_service_pb2.pyi +0 -4
  361. union/_protos/workflow/node_execution_service_pb2_grpc.py +0 -32
  362. union/_protos/workflow/queue_service_pb2.py +0 -75
  363. union/_protos/workflow/queue_service_pb2.pyi +0 -103
  364. union/_protos/workflow/queue_service_pb2_grpc.py +0 -172
  365. union/_protos/workflow/run_definition_pb2.py +0 -100
  366. union/_protos/workflow/run_definition_pb2.pyi +0 -256
  367. union/_protos/workflow/run_definition_pb2_grpc.py +0 -4
  368. union/_protos/workflow/run_logs_service_pb2.py +0 -41
  369. union/_protos/workflow/run_logs_service_pb2.pyi +0 -28
  370. union/_protos/workflow/run_logs_service_pb2_grpc.py +0 -69
  371. union/_protos/workflow/run_service_pb2.py +0 -133
  372. union/_protos/workflow/run_service_pb2.pyi +0 -173
  373. union/_protos/workflow/run_service_pb2_grpc.py +0 -412
  374. union/_protos/workflow/state_service_pb2.py +0 -58
  375. union/_protos/workflow/state_service_pb2.pyi +0 -69
  376. union/_protos/workflow/state_service_pb2_grpc.py +0 -138
  377. union/_protos/workflow/task_definition_pb2.py +0 -72
  378. union/_protos/workflow/task_definition_pb2.pyi +0 -65
  379. union/_protos/workflow/task_definition_pb2_grpc.py +0 -4
  380. union/_protos/workflow/task_service_pb2.py +0 -44
  381. union/_protos/workflow/task_service_pb2.pyi +0 -31
  382. union/_protos/workflow/task_service_pb2_grpc.py +0 -104
  383. union/_resources.py +0 -226
  384. union/_retry.py +0 -32
  385. union/_reusable_environment.py +0 -25
  386. union/_run.py +0 -374
  387. union/_secret.py +0 -61
  388. union/_task.py +0 -354
  389. union/_task_environment.py +0 -186
  390. union/_timeout.py +0 -47
  391. union/_tools.py +0 -27
  392. union/_utils/__init__.py +0 -11
  393. union/_utils/asyn.py +0 -119
  394. union/_utils/file_handling.py +0 -71
  395. union/_utils/helpers.py +0 -46
  396. union/_utils/lazy_module.py +0 -54
  397. union/_utils/uv_script_parser.py +0 -49
  398. union/_version.py +0 -21
  399. union/connectors/__init__.py +0 -0
  400. union/errors.py +0 -128
  401. union/extras/__init__.py +0 -5
  402. union/extras/_container.py +0 -263
  403. union/io/__init__.py +0 -11
  404. union/io/_dataframe.py +0 -0
  405. union/io/_dir.py +0 -425
  406. union/io/_file.py +0 -418
  407. union/io/pickle/__init__.py +0 -0
  408. union/io/pickle/transformer.py +0 -117
  409. union/io/structured_dataset/__init__.py +0 -122
  410. union/io/structured_dataset/basic_dfs.py +0 -219
  411. union/io/structured_dataset/structured_dataset.py +0 -1057
  412. union/py.typed +0 -0
  413. union/remote/__init__.py +0 -23
  414. union/remote/_client/__init__.py +0 -0
  415. union/remote/_client/_protocols.py +0 -129
  416. union/remote/_client/auth/__init__.py +0 -12
  417. union/remote/_client/auth/_authenticators/__init__.py +0 -0
  418. union/remote/_client/auth/_authenticators/base.py +0 -391
  419. union/remote/_client/auth/_authenticators/client_credentials.py +0 -73
  420. union/remote/_client/auth/_authenticators/device_code.py +0 -120
  421. union/remote/_client/auth/_authenticators/external_command.py +0 -77
  422. union/remote/_client/auth/_authenticators/factory.py +0 -200
  423. union/remote/_client/auth/_authenticators/pkce.py +0 -515
  424. union/remote/_client/auth/_channel.py +0 -184
  425. union/remote/_client/auth/_client_config.py +0 -83
  426. union/remote/_client/auth/_default_html.py +0 -32
  427. union/remote/_client/auth/_grpc_utils/__init__.py +0 -0
  428. union/remote/_client/auth/_grpc_utils/auth_interceptor.py +0 -204
  429. union/remote/_client/auth/_grpc_utils/default_metadata_interceptor.py +0 -144
  430. union/remote/_client/auth/_keyring.py +0 -154
  431. union/remote/_client/auth/_token_client.py +0 -258
  432. union/remote/_client/auth/errors.py +0 -16
  433. union/remote/_client/controlplane.py +0 -86
  434. union/remote/_data.py +0 -149
  435. union/remote/_logs.py +0 -74
  436. union/remote/_project.py +0 -86
  437. union/remote/_run.py +0 -820
  438. union/remote/_secret.py +0 -132
  439. union/remote/_task.py +0 -193
  440. union/report/__init__.py +0 -3
  441. union/report/_report.py +0 -178
  442. union/report/_template.html +0 -124
  443. union/storage/__init__.py +0 -24
  444. union/storage/_remote_fs.py +0 -34
  445. union/storage/_storage.py +0 -247
  446. union/storage/_utils.py +0 -5
  447. union/types/__init__.py +0 -11
  448. union/types/_renderer.py +0 -162
  449. union/types/_string_literals.py +0 -120
  450. union/types/_type_engine.py +0 -2131
  451. union/types/_utils.py +0 -80
  452. /flyte/{_cli → _debug}/__init__.py +0 -0
  453. /flyte/{_protos → _keyring}/__init__.py +0 -0
  454. {flyte-0.0.1b0.dist-info → flyte-2.0.0b46.dist-info}/WHEEL +0 -0
  455. {flyte-0.0.1b0.dist-info → flyte-2.0.0b46.dist-info}/top_level.txt +0 -0
@@ -1,77 +0,0 @@
1
- import threading
2
- from typing import Any, Literal, Optional, Protocol
3
-
4
- from union._datastructures import ActionID
5
- from union._task import TaskTemplate
6
-
7
- __all__ = ["Controller", "ControllerType", "create_controller", "get_controller"]
8
-
9
- ControllerType = Literal["local", "remote"]
10
-
11
-
12
- class Controller(Protocol):
13
- """
14
- Controller interface, that is used to execute tasks. The implementation of this interface,
15
- can execute tasks in different ways, such as locally, remotely etc.
16
- """
17
-
18
- async def submit(self, _task: TaskTemplate, *args, **kwargs) -> Any:
19
- """
20
- Submit a node to the controller asynchronously and wait for the result. This is async and will block
21
- the current coroutine until the result is available.
22
- """
23
- ...
24
-
25
- async def finalize_parent_action(self, action: ActionID):
26
- """
27
- Finalize the parent action. This can be called to cleanup the action and should be called after the parent
28
- task completes
29
- :param action: Action ID
30
- :return:
31
- """
32
- ...
33
-
34
- def stop(self):
35
- """
36
- Stops the engine and should be called when the engine is no longer needed.
37
- """
38
- ...
39
-
40
-
41
- # Internal state holder
42
- class _ControllerState:
43
- controller: Optional[Controller] = None
44
- lock = threading.Lock()
45
-
46
-
47
- async def get_controller() -> Controller:
48
- """
49
- Get the controller instance. Raise an error if it has not been created.
50
- """
51
- if _ControllerState.controller is not None:
52
- return _ControllerState.controller
53
- raise RuntimeError("Controller is not initialized. Please call get_or_create_controller() first.")
54
-
55
-
56
- def create_controller(
57
- ct: ControllerType,
58
- **kwargs,
59
- ) -> Controller:
60
- """
61
- Create a new instance of the controller, based on the kind and the given configuration.
62
- """
63
- match ct:
64
- case "local":
65
- from ._local_controller import LocalController
66
-
67
- controller = LocalController()
68
- case ("remote" | "hybrid"):
69
- from union._internal.controllers.remote import create_remote_controller
70
-
71
- controller = create_remote_controller(**kwargs)
72
- case _:
73
- raise ValueError(f"{ct} is not a valid controller type.")
74
-
75
- with _ControllerState.lock:
76
- _ControllerState.controller = controller
77
- return controller
@@ -1,77 +0,0 @@
1
- from typing import Any, Tuple
2
-
3
- from union import storage
4
- from union._context import internal_ctx
5
- from union._datastructures import ActionID, RawDataPath
6
- from union._internal.controllers import pbhash
7
- from union._internal.runtime.convert import (
8
- Inputs,
9
- convert_error_to_native,
10
- convert_from_native_to_inputs,
11
- convert_outputs_to_native,
12
- )
13
- from union._internal.runtime.entrypoints import direct_dispatch
14
- from union._logging import log, logger
15
- from union._task import TaskTemplate
16
-
17
-
18
- class LocalController:
19
- def __init__(self):
20
- logger.debug("LocalController init")
21
-
22
- def _get_run_params(self, inputs: Inputs) -> Tuple[ActionID, RawDataPath]:
23
- ctx = internal_ctx()
24
- parent_run = ctx.data.task_context.action
25
- # TODO assuming the raw_data_path is local, and for now not getting manipulated by the controller
26
- # We will need to change this in case of remote execution, or create data sandboxes.
27
- new_raw_data_path = ctx.data.raw_data_path
28
- # TODO ideally we should generate the name deterministically using the inputs etc
29
- sub_run = parent_run.new_sub_action()
30
- return sub_run, new_raw_data_path
31
-
32
- @log
33
- async def submit(self, _task: TaskTemplate, *args, **kwargs) -> Any:
34
- """
35
- Submit a node to the controller
36
- """
37
- ctx = internal_ctx()
38
- tctx = ctx.data.task_context
39
- current_action_id = tctx.action
40
- current_output_path = tctx.output_path
41
-
42
- inputs = await convert_from_native_to_inputs(_task.native_interface, *args, **kwargs)
43
- inputs_hash = self._input_hash(inputs)
44
- sub_action_id = current_action_id.new_sub_action_from(
45
- input_hash=inputs_hash,
46
- group=tctx.group_data.name if tctx.group_data else None,
47
- )
48
- sub_action_output_path = storage.join(current_output_path, sub_action_id.name)
49
- sub_action_raw_data_path = RawDataPath(path=sub_action_output_path)
50
- out, err = await direct_dispatch(
51
- _task,
52
- controller=self,
53
- action=sub_action_id,
54
- raw_data_path=sub_action_raw_data_path,
55
- inputs=inputs,
56
- version=tctx.version,
57
- checkpoints=tctx.checkpoints,
58
- code_bundle=tctx.code_bundle,
59
- output_path=sub_action_output_path,
60
- )
61
- if err:
62
- raise convert_error_to_native(err)
63
- if _task.native_interface.outputs:
64
- out = await convert_outputs_to_native(_task.native_interface, out)
65
- return out
66
-
67
- async def finalize_parent_action(self, action: ActionID):
68
- pass
69
-
70
- def stop(self):
71
- pass
72
-
73
- def _input_hash(self, inputs: Inputs) -> str:
74
- """
75
- Returns the hash of the inputs
76
- """
77
- return pbhash.compute_hash_string(inputs.proto_inputs)
@@ -1,39 +0,0 @@
1
- # This is a module that provides hashing utilities for Protobuf objects.
2
- import base64
3
- import hashlib
4
- import json
5
-
6
- from google.protobuf import json_format
7
- from google.protobuf.message import Message
8
-
9
-
10
- def compute_hash(pb: Message) -> bytes:
11
- """
12
- Computes a deterministic hash in bytes for the Protobuf object.
13
- """
14
- try:
15
- pb_dict = json_format.MessageToDict(pb)
16
- # json.dumps with sorted keys to ensure stability
17
- stable_json_str = json.dumps(
18
- pb_dict, sort_keys=True, separators=(",", ":")
19
- ) # separators to ensure no extra spaces
20
- except Exception as e:
21
- raise ValueError(f"Failed to marshal Protobuf object {pb} to JSON with error: {e}")
22
-
23
- try:
24
- # Deterministically hash the JSON object to a byte array. Using SHA-256 for hashing here,
25
- # assuming it provides a consistent hash output.
26
- hash_obj = hashlib.sha256(stable_json_str.encode("utf-8"))
27
- except Exception as e:
28
- raise ValueError(f"Failed to hash JSON for Protobuf object {pb} with error: {e}")
29
-
30
- # The digest is guaranteed to be 32 bytes long
31
- return hash_obj.digest()
32
-
33
-
34
- def compute_hash_string(pb: Message) -> str:
35
- """
36
- Computes a deterministic hash in base64 encoded string for the Protobuf object
37
- """
38
- hash_bytes = compute_hash(pb)
39
- return base64.b64encode(hash_bytes).decode("utf-8")
@@ -1,40 +0,0 @@
1
- from typing import List
2
-
3
- from union.remote._client.auth import AuthType, ClientConfig
4
-
5
- from ._controller import RemoteController
6
-
7
- __all__ = ["RemoteController", "create_remote_controller"]
8
-
9
-
10
- def create_remote_controller(
11
- *,
12
- api_key: str | None = None,
13
- auth_type: AuthType = "Pkce",
14
- endpoint: str | None = None,
15
- client_config: ClientConfig | None = None,
16
- headless: bool = False,
17
- insecure: bool = False,
18
- insecure_skip_verify: bool = False,
19
- ca_cert_file_path: str | None = None,
20
- command: List[str] | None = None,
21
- proxy_command: List[str] | None = None,
22
- client_id: str | None = None,
23
- client_credentials_secret: str | None = None,
24
- rpc_retries: int = 3,
25
- http_proxy_url: str | None = None,
26
- ) -> RemoteController:
27
- """
28
- Create a new instance of the remote controller.
29
- """
30
- from ._client import ControllerClient
31
- from ._controller import RemoteController
32
-
33
- controller = RemoteController(
34
- client_coro=ControllerClient.for_endpoint(
35
- endpoint=endpoint, insecure=insecure, insecure_skip_verify=insecure_skip_verify
36
- ),
37
- workers=10,
38
- max_system_retries=5,
39
- )
40
- return controller
@@ -1,131 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from dataclasses import dataclass
4
-
5
- from flyteidl.core import execution_pb2
6
-
7
- from union._datastructures import GroupData
8
- from union._protos.workflow import run_definition_pb2, state_service_pb2, task_definition_pb2
9
-
10
-
11
- @dataclass
12
- class Action:
13
- """
14
- Coroutine safe, as we never do await operations in any method.
15
- Holds the inmemory state of a task. It is combined representation of local and remote states.
16
- """
17
-
18
- action_id: run_definition_pb2.ActionIdentifier
19
- parent_action_name: str
20
- friendly_name: str | None = None
21
- group: GroupData | None = None
22
- task: task_definition_pb2.TaskSpec | None = None
23
- inputs_uri: str | None = None
24
- outputs_uri: str | None = None
25
- err: execution_pb2.ExecutionError | None = None
26
- phase: run_definition_pb2.Phase | None = None
27
- started: bool = False
28
- retries: int = 0
29
- client_err: Exception | None = None # This error is set when something goes wrong in the controller.
30
-
31
- @property
32
- def name(self) -> str:
33
- return self.action_id.name
34
-
35
- @property
36
- def run_name(self) -> str:
37
- return self.action_id.run.name
38
-
39
- def is_terminal(self) -> bool:
40
- """Check if resource has reached terminal state"""
41
- if self.phase is None:
42
- return False
43
- return self.phase in [
44
- run_definition_pb2.Phase.PHASE_FAILED,
45
- run_definition_pb2.Phase.PHASE_SUCCEEDED,
46
- run_definition_pb2.Phase.PHASE_ABORTED,
47
- run_definition_pb2.Phase.PHASE_TIMED_OUT,
48
- ]
49
-
50
- def increment_retries(self):
51
- self.retries += 1
52
-
53
- def is_started(self) -> bool:
54
- """Check if resource has been started."""
55
- return self.started
56
-
57
- def mark_started(self):
58
- self.started = True
59
- self.task = None
60
-
61
- def merge_state(self, obj: state_service_pb2.ActionUpdate):
62
- """
63
- This method is invoked when the watch API sends an update about the state of the action. We need to merge
64
- the state of the action with the current state of the action. It is possible that we have no phase information
65
- prior to this.
66
- :param obj:
67
- :return:
68
- """
69
- if self.phase != obj.phase:
70
- self.phase = obj.phase
71
- self.err = obj.error if obj.HasField("error") else None
72
- self.started = True
73
-
74
- def merge_in_action_from_submit(self, action: Action):
75
- """
76
- This method is invoked when parent_action submits an action that was observed previously observed from the
77
- watch. We need to merge in the contents of the action, while preserving the observed phase.
78
-
79
- :param action: The submitted action
80
- """
81
- self.outputs_uri = action.outputs_uri
82
- self.inputs_uri = action.inputs_uri
83
- self.group = action.group
84
- self.friendly_name = action.friendly_name
85
- if not self.started:
86
- self.task = action.task
87
-
88
- def set_client_error(self, exc: Exception):
89
- self.client_err = exc
90
-
91
- def has_error(self) -> bool:
92
- return self.client_err is not None or self.err is not None
93
-
94
- @classmethod
95
- def from_task(
96
- cls,
97
- parent_action_name: str,
98
- sub_action_id: run_definition_pb2.ActionIdentifier,
99
- group_data: GroupData,
100
- task_spec: task_definition_pb2.TaskSpec,
101
- inputs_uri: str,
102
- outputs_prefix_uri: str,
103
- ) -> Action:
104
- return cls(
105
- action_id=sub_action_id,
106
- parent_action_name=parent_action_name,
107
- friendly_name=task_spec.task_template.id.name,
108
- group=group_data,
109
- task=task_spec,
110
- inputs_uri=inputs_uri,
111
- outputs_uri=outputs_prefix_uri,
112
- )
113
-
114
- @classmethod
115
- def from_state(cls, parent_action_name: str, obj: state_service_pb2.ActionUpdate) -> Action:
116
- """
117
- This creates a new action, from the watch api. This is possible in the case of a recovery, where the
118
- stateservice knows about future actions and sends this information to the informer. We may not have encountered
119
- the "task" itself yet, but we know about the action id and the state of the action.
120
-
121
- :param parent_action_name:
122
- :param obj:
123
- :return:
124
- """
125
- return cls(
126
- action_id=obj.action_id,
127
- parent_action_name=parent_action_name,
128
- phase=obj.phase,
129
- started=True,
130
- err=obj.error if obj.HasField("error") else None,
131
- )
@@ -1,43 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import grpc.aio
4
-
5
- from union._protos.workflow import queue_service_pb2_grpc, state_service_pb2_grpc
6
- from union.remote import create_channel
7
-
8
- from ._service_protocol import QueueService, StateService
9
-
10
-
11
- class ControllerClient:
12
- """
13
- A client for the Controller API.
14
- """
15
-
16
- def __init__(self, channel: grpc.aio.Channel):
17
- self._channel = channel
18
- self._state_service = state_service_pb2_grpc.StateServiceStub(channel=channel)
19
- self._queue_service = queue_service_pb2_grpc.QueueServiceStub(channel=channel)
20
-
21
- @classmethod
22
- async def for_endpoint(cls, endpoint: str, *, insecure: bool = False, **kwargs) -> ControllerClient:
23
- return cls(await create_channel(endpoint, insecure=insecure, **kwargs))
24
-
25
- @property
26
- def state_service(self) -> StateService:
27
- """
28
- The state service.
29
- """
30
- return self._state_service
31
-
32
- @property
33
- def queue_service(self) -> QueueService:
34
- """
35
- The queue service.
36
- """
37
- return self._queue_service
38
-
39
- def close(self, grace: float | None = None):
40
- """
41
- Close the channel.
42
- """
43
- return self._channel.close(grace=grace)
@@ -1,169 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import asyncio
4
- from collections import defaultdict
5
- from typing import Any, Awaitable
6
-
7
- import union.storage as storage
8
- from union._code_bundle import build_pkl_bundle
9
- from union._context import internal_ctx
10
- from union._datastructures import ActionID, SerializationContext
11
- from union._internal.controllers import pbhash
12
- from union._internal.controllers.remote._action import Action
13
- from union._internal.controllers.remote._core import Controller
14
- from union._internal.controllers.remote._service_protocol import ClientSet
15
- from union._internal.runtime import io
16
- from union._internal.runtime.convert import (
17
- Inputs,
18
- convert_error_to_native,
19
- convert_from_native_to_inputs,
20
- convert_outputs_to_native,
21
- )
22
- from union._internal.runtime.task_serde import translate_task_to_wire
23
- from union._logging import logger
24
- from union._protos.workflow import run_definition_pb2
25
- from union._task import TaskTemplate
26
- from union.errors import RuntimeSystemError
27
-
28
-
29
- class RemoteController(Controller):
30
- """
31
- This a specialized controller that wraps the core controller and performs IO, serialization and deserialization
32
- """
33
-
34
- def __init__(
35
- self,
36
- client_coro: Awaitable[ClientSet],
37
- workers: int,
38
- max_system_retries: int,
39
- default_parent_concurrency: int = 100,
40
- ):
41
- """ """
42
- super().__init__(
43
- client_coro=client_coro,
44
- workers=workers,
45
- max_system_retries=max_system_retries,
46
- )
47
- self._default_parent_concurrency = default_parent_concurrency
48
- self._parent_action_semaphore = defaultdict(lambda: asyncio.Semaphore(default_parent_concurrency))
49
-
50
- async def _submit(self, _task: TaskTemplate, *args, **kwargs) -> Any:
51
- ctx = internal_ctx()
52
- tctx = ctx.data.task_context
53
- current_action_id = tctx.action
54
- current_output_path = tctx.output_path
55
-
56
- inputs = await convert_from_native_to_inputs(_task.native_interface, *args, **kwargs)
57
- inputs_hash = self._input_hash(inputs)
58
- sub_action_id = current_action_id.new_sub_action_from(
59
- input_hash=inputs_hash,
60
- group=tctx.group_data.name if tctx.group_data else None,
61
- )
62
- sub_run_output_path = storage.join(current_output_path, sub_action_id.name)
63
- # In the case of a regular code bundle, we will just pass it down as it is to the downstream tasks
64
- # It is not allowed to change the code bundle (for regular code bundles) in the middle of a run.
65
- code_bundle = tctx.code_bundle
66
-
67
- if code_bundle:
68
- # but if we are using a pkl bundle, we need to build a new one for the downstream tasks
69
- if code_bundle.pkl:
70
- logger.debug(f"Building new pkl bundle for task {sub_action_id.name}")
71
- code_bundle = await build_pkl_bundle(
72
- _task,
73
- upload_to_controlplane=False,
74
- upload_from_dataplane_path=io.pkl_path(sub_run_output_path),
75
- )
76
-
77
- inputs_uri = io.inputs_path(sub_run_output_path)
78
- try:
79
- # TODO Add retry decorator to this
80
- await io.upload_inputs(inputs, inputs_uri)
81
- except Exception as e:
82
- logger.exception("Failed to upload inputs", e)
83
- raise RuntimeSystemError(type(e).__name__, str(e)) from e
84
- new_serialization_context = SerializationContext(
85
- project=current_action_id.project,
86
- domain=current_action_id.domain,
87
- org=current_action_id.org,
88
- code_bundle=code_bundle,
89
- version=tctx.version,
90
- # supplied version.
91
- input_path=inputs_uri,
92
- output_path=sub_run_output_path,
93
- image_cache=ctx.data.task_context.compiled_image_cache,
94
- )
95
-
96
- task_spec = translate_task_to_wire(_task, new_serialization_context)
97
-
98
- action = Action.from_task(
99
- sub_action_id=run_definition_pb2.ActionIdentifier(
100
- name=sub_action_id.name,
101
- run=run_definition_pb2.RunIdentifier(
102
- name=current_action_id.run_name,
103
- project=current_action_id.project,
104
- domain=current_action_id.domain,
105
- org=current_action_id.org,
106
- ),
107
- ),
108
- parent_action_name=current_action_id.name,
109
- group_data=tctx.group_data,
110
- task_spec=task_spec,
111
- inputs_uri=inputs_uri,
112
- outputs_prefix_uri=sub_run_output_path,
113
- )
114
-
115
- n = await self.submit_action(action)
116
-
117
- if n.has_error() or n.phase == run_definition_pb2.PHASE_FAILED:
118
- err = n.err or n.client_err
119
- if not err and n.phase == run_definition_pb2.PHASE_FAILED:
120
- logger.error(f"Server reported failure for action {n.action_id.name}, checking error file.")
121
- error_path = io.error_path(n.outputs_uri)
122
- # It is possible that the error file is not present in the case of a image pull failure or
123
- # other reasons for failure. Ideally the err message should be sent by the server, but incase its
124
- # missing, failed with unknown error
125
- try:
126
- err = await io.load_error(error_path)
127
- except Exception as e:
128
- logger.exception("Failed to load error file", e)
129
- err = RuntimeSystemError(
130
- type(e).__name__,
131
- f"Failed to load error file: {e}",
132
- )
133
- else:
134
- logger.error(f"Server reported failure for action {n.action_id.name}, error: {err}")
135
- raise convert_error_to_native(err)
136
-
137
- if _task.native_interface.outputs:
138
- outputs_file_path = io.outputs_path(n.outputs_uri)
139
- o = await io.load_outputs(outputs_file_path)
140
- return await convert_outputs_to_native(_task.native_interface, o)
141
- return None
142
-
143
- async def submit(self, _task: TaskTemplate, *args, **kwargs) -> Any:
144
- """
145
- Submit a task to the remote controller.This creates a new action on the queue service.
146
- """
147
- from union._context import internal_ctx
148
-
149
- ctx = internal_ctx()
150
- current_action_id = ctx.data.task_context.action
151
- async with self._parent_action_semaphore[current_action_id.name]:
152
- return await self._submit(_task, *args, **kwargs)
153
-
154
- async def finalize_parent_action(self, action_id: ActionID):
155
- """
156
- This method is invoked when the parent action is finished. It will finalize the run and upload the outputs
157
- to the control plane.
158
- """
159
- run_id = run_definition_pb2.RunIdentifier(
160
- name=action_id.run_name,
161
- project=action_id.project,
162
- domain=action_id.domain,
163
- org=action_id.org,
164
- )
165
- await super()._finalize_parent_action(run_id=run_id, parent_action_name=action_id.name)
166
- self._parent_action_semaphore.pop(action_id.name, None)
167
-
168
- def _input_hash(self, inputs: Inputs) -> str:
169
- return pbhash.compute_hash_string(inputs.proto_inputs)