flyte 0.0.1b0__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 flyte might be problematic. Click here for more details.

Files changed (390) hide show
  1. flyte/__init__.py +62 -0
  2. flyte/_api_commons.py +3 -0
  3. flyte/_bin/__init__.py +0 -0
  4. flyte/_bin/runtime.py +126 -0
  5. flyte/_build.py +25 -0
  6. flyte/_cache/__init__.py +12 -0
  7. flyte/_cache/cache.py +146 -0
  8. flyte/_cache/defaults.py +9 -0
  9. flyte/_cache/policy_function_body.py +42 -0
  10. flyte/_cli/__init__.py +0 -0
  11. flyte/_cli/_common.py +287 -0
  12. flyte/_cli/_create.py +42 -0
  13. flyte/_cli/_delete.py +23 -0
  14. flyte/_cli/_deploy.py +140 -0
  15. flyte/_cli/_get.py +235 -0
  16. flyte/_cli/_run.py +152 -0
  17. flyte/_cli/main.py +72 -0
  18. flyte/_code_bundle/__init__.py +8 -0
  19. flyte/_code_bundle/_ignore.py +113 -0
  20. flyte/_code_bundle/_packaging.py +187 -0
  21. flyte/_code_bundle/_utils.py +339 -0
  22. flyte/_code_bundle/bundle.py +178 -0
  23. flyte/_context.py +146 -0
  24. flyte/_datastructures.py +342 -0
  25. flyte/_deploy.py +202 -0
  26. flyte/_doc.py +29 -0
  27. flyte/_docstring.py +32 -0
  28. flyte/_environment.py +43 -0
  29. flyte/_group.py +31 -0
  30. flyte/_hash.py +23 -0
  31. flyte/_image.py +760 -0
  32. flyte/_initialize.py +634 -0
  33. flyte/_interface.py +84 -0
  34. flyte/_internal/__init__.py +3 -0
  35. flyte/_internal/controllers/__init__.py +115 -0
  36. flyte/_internal/controllers/_local_controller.py +118 -0
  37. flyte/_internal/controllers/_trace.py +40 -0
  38. flyte/_internal/controllers/pbhash.py +39 -0
  39. flyte/_internal/controllers/remote/__init__.py +40 -0
  40. flyte/_internal/controllers/remote/_action.py +141 -0
  41. flyte/_internal/controllers/remote/_client.py +43 -0
  42. flyte/_internal/controllers/remote/_controller.py +361 -0
  43. flyte/_internal/controllers/remote/_core.py +402 -0
  44. flyte/_internal/controllers/remote/_informer.py +361 -0
  45. flyte/_internal/controllers/remote/_service_protocol.py +50 -0
  46. flyte/_internal/imagebuild/__init__.py +11 -0
  47. flyte/_internal/imagebuild/docker_builder.py +416 -0
  48. flyte/_internal/imagebuild/image_builder.py +241 -0
  49. flyte/_internal/imagebuild/remote_builder.py +0 -0
  50. flyte/_internal/resolvers/__init__.py +0 -0
  51. flyte/_internal/resolvers/_task_module.py +54 -0
  52. flyte/_internal/resolvers/common.py +31 -0
  53. flyte/_internal/resolvers/default.py +28 -0
  54. flyte/_internal/runtime/__init__.py +0 -0
  55. flyte/_internal/runtime/convert.py +199 -0
  56. flyte/_internal/runtime/entrypoints.py +135 -0
  57. flyte/_internal/runtime/io.py +136 -0
  58. flyte/_internal/runtime/resources_serde.py +138 -0
  59. flyte/_internal/runtime/task_serde.py +210 -0
  60. flyte/_internal/runtime/taskrunner.py +190 -0
  61. flyte/_internal/runtime/types_serde.py +54 -0
  62. flyte/_logging.py +124 -0
  63. flyte/_protos/__init__.py +0 -0
  64. flyte/_protos/common/authorization_pb2.py +66 -0
  65. flyte/_protos/common/authorization_pb2.pyi +108 -0
  66. flyte/_protos/common/authorization_pb2_grpc.py +4 -0
  67. flyte/_protos/common/identifier_pb2.py +71 -0
  68. flyte/_protos/common/identifier_pb2.pyi +82 -0
  69. flyte/_protos/common/identifier_pb2_grpc.py +4 -0
  70. flyte/_protos/common/identity_pb2.py +48 -0
  71. flyte/_protos/common/identity_pb2.pyi +72 -0
  72. flyte/_protos/common/identity_pb2_grpc.py +4 -0
  73. flyte/_protos/common/list_pb2.py +36 -0
  74. flyte/_protos/common/list_pb2.pyi +69 -0
  75. flyte/_protos/common/list_pb2_grpc.py +4 -0
  76. flyte/_protos/common/policy_pb2.py +37 -0
  77. flyte/_protos/common/policy_pb2.pyi +27 -0
  78. flyte/_protos/common/policy_pb2_grpc.py +4 -0
  79. flyte/_protos/common/role_pb2.py +37 -0
  80. flyte/_protos/common/role_pb2.pyi +53 -0
  81. flyte/_protos/common/role_pb2_grpc.py +4 -0
  82. flyte/_protos/common/runtime_version_pb2.py +28 -0
  83. flyte/_protos/common/runtime_version_pb2.pyi +24 -0
  84. flyte/_protos/common/runtime_version_pb2_grpc.py +4 -0
  85. flyte/_protos/logs/dataplane/payload_pb2.py +96 -0
  86. flyte/_protos/logs/dataplane/payload_pb2.pyi +168 -0
  87. flyte/_protos/logs/dataplane/payload_pb2_grpc.py +4 -0
  88. flyte/_protos/secret/definition_pb2.py +49 -0
  89. flyte/_protos/secret/definition_pb2.pyi +93 -0
  90. flyte/_protos/secret/definition_pb2_grpc.py +4 -0
  91. flyte/_protos/secret/payload_pb2.py +62 -0
  92. flyte/_protos/secret/payload_pb2.pyi +94 -0
  93. flyte/_protos/secret/payload_pb2_grpc.py +4 -0
  94. flyte/_protos/secret/secret_pb2.py +38 -0
  95. flyte/_protos/secret/secret_pb2.pyi +6 -0
  96. flyte/_protos/secret/secret_pb2_grpc.py +198 -0
  97. flyte/_protos/secret/secret_pb2_grpc_grpc.py +198 -0
  98. flyte/_protos/validate/validate/validate_pb2.py +76 -0
  99. flyte/_protos/workflow/node_execution_service_pb2.py +26 -0
  100. flyte/_protos/workflow/node_execution_service_pb2.pyi +4 -0
  101. flyte/_protos/workflow/node_execution_service_pb2_grpc.py +32 -0
  102. flyte/_protos/workflow/queue_service_pb2.py +106 -0
  103. flyte/_protos/workflow/queue_service_pb2.pyi +141 -0
  104. flyte/_protos/workflow/queue_service_pb2_grpc.py +172 -0
  105. flyte/_protos/workflow/run_definition_pb2.py +128 -0
  106. flyte/_protos/workflow/run_definition_pb2.pyi +310 -0
  107. flyte/_protos/workflow/run_definition_pb2_grpc.py +4 -0
  108. flyte/_protos/workflow/run_logs_service_pb2.py +41 -0
  109. flyte/_protos/workflow/run_logs_service_pb2.pyi +28 -0
  110. flyte/_protos/workflow/run_logs_service_pb2_grpc.py +69 -0
  111. flyte/_protos/workflow/run_service_pb2.py +133 -0
  112. flyte/_protos/workflow/run_service_pb2.pyi +175 -0
  113. flyte/_protos/workflow/run_service_pb2_grpc.py +412 -0
  114. flyte/_protos/workflow/state_service_pb2.py +58 -0
  115. flyte/_protos/workflow/state_service_pb2.pyi +71 -0
  116. flyte/_protos/workflow/state_service_pb2_grpc.py +138 -0
  117. flyte/_protos/workflow/task_definition_pb2.py +72 -0
  118. flyte/_protos/workflow/task_definition_pb2.pyi +65 -0
  119. flyte/_protos/workflow/task_definition_pb2_grpc.py +4 -0
  120. flyte/_protos/workflow/task_service_pb2.py +44 -0
  121. flyte/_protos/workflow/task_service_pb2.pyi +31 -0
  122. flyte/_protos/workflow/task_service_pb2_grpc.py +104 -0
  123. flyte/_resources.py +226 -0
  124. flyte/_retry.py +32 -0
  125. flyte/_reusable_environment.py +25 -0
  126. flyte/_run.py +411 -0
  127. flyte/_secret.py +61 -0
  128. flyte/_task.py +367 -0
  129. flyte/_task_environment.py +200 -0
  130. flyte/_timeout.py +47 -0
  131. flyte/_tools.py +27 -0
  132. flyte/_trace.py +128 -0
  133. flyte/_utils/__init__.py +20 -0
  134. flyte/_utils/asyn.py +119 -0
  135. flyte/_utils/coro_management.py +25 -0
  136. flyte/_utils/file_handling.py +72 -0
  137. flyte/_utils/helpers.py +108 -0
  138. flyte/_utils/lazy_module.py +54 -0
  139. flyte/_utils/uv_script_parser.py +49 -0
  140. flyte/_version.py +21 -0
  141. flyte/connectors/__init__.py +0 -0
  142. flyte/errors.py +143 -0
  143. flyte/extras/__init__.py +5 -0
  144. flyte/extras/_container.py +273 -0
  145. flyte/io/__init__.py +11 -0
  146. flyte/io/_dataframe.py +0 -0
  147. flyte/io/_dir.py +448 -0
  148. flyte/io/_file.py +468 -0
  149. flyte/io/pickle/__init__.py +0 -0
  150. flyte/io/pickle/transformer.py +117 -0
  151. flyte/io/structured_dataset/__init__.py +129 -0
  152. flyte/io/structured_dataset/basic_dfs.py +219 -0
  153. flyte/io/structured_dataset/structured_dataset.py +1061 -0
  154. flyte/py.typed +0 -0
  155. flyte/remote/__init__.py +25 -0
  156. flyte/remote/_client/__init__.py +0 -0
  157. flyte/remote/_client/_protocols.py +131 -0
  158. flyte/remote/_client/auth/__init__.py +12 -0
  159. flyte/remote/_client/auth/_authenticators/__init__.py +0 -0
  160. flyte/remote/_client/auth/_authenticators/base.py +397 -0
  161. flyte/remote/_client/auth/_authenticators/client_credentials.py +73 -0
  162. flyte/remote/_client/auth/_authenticators/device_code.py +118 -0
  163. flyte/remote/_client/auth/_authenticators/external_command.py +79 -0
  164. flyte/remote/_client/auth/_authenticators/factory.py +200 -0
  165. flyte/remote/_client/auth/_authenticators/pkce.py +516 -0
  166. flyte/remote/_client/auth/_channel.py +184 -0
  167. flyte/remote/_client/auth/_client_config.py +83 -0
  168. flyte/remote/_client/auth/_default_html.py +32 -0
  169. flyte/remote/_client/auth/_grpc_utils/__init__.py +0 -0
  170. flyte/remote/_client/auth/_grpc_utils/auth_interceptor.py +288 -0
  171. flyte/remote/_client/auth/_grpc_utils/default_metadata_interceptor.py +151 -0
  172. flyte/remote/_client/auth/_keyring.py +143 -0
  173. flyte/remote/_client/auth/_token_client.py +260 -0
  174. flyte/remote/_client/auth/errors.py +16 -0
  175. flyte/remote/_client/controlplane.py +95 -0
  176. flyte/remote/_console.py +18 -0
  177. flyte/remote/_data.py +155 -0
  178. flyte/remote/_logs.py +116 -0
  179. flyte/remote/_project.py +86 -0
  180. flyte/remote/_run.py +873 -0
  181. flyte/remote/_secret.py +132 -0
  182. flyte/remote/_task.py +227 -0
  183. flyte/report/__init__.py +3 -0
  184. flyte/report/_report.py +178 -0
  185. flyte/report/_template.html +124 -0
  186. flyte/storage/__init__.py +24 -0
  187. flyte/storage/_remote_fs.py +34 -0
  188. flyte/storage/_storage.py +251 -0
  189. flyte/storage/_utils.py +5 -0
  190. flyte/types/__init__.py +13 -0
  191. flyte/types/_interface.py +25 -0
  192. flyte/types/_renderer.py +162 -0
  193. flyte/types/_string_literals.py +120 -0
  194. flyte/types/_type_engine.py +2210 -0
  195. flyte/types/_utils.py +80 -0
  196. flyte-0.0.1b0.dist-info/METADATA +179 -0
  197. flyte-0.0.1b0.dist-info/RECORD +390 -0
  198. flyte-0.0.1b0.dist-info/WHEEL +5 -0
  199. flyte-0.0.1b0.dist-info/entry_points.txt +3 -0
  200. flyte-0.0.1b0.dist-info/top_level.txt +1 -0
  201. union/__init__.py +54 -0
  202. union/_api_commons.py +3 -0
  203. union/_bin/__init__.py +0 -0
  204. union/_bin/runtime.py +113 -0
  205. union/_build.py +25 -0
  206. union/_cache/__init__.py +12 -0
  207. union/_cache/cache.py +141 -0
  208. union/_cache/defaults.py +9 -0
  209. union/_cache/policy_function_body.py +42 -0
  210. union/_cli/__init__.py +0 -0
  211. union/_cli/_common.py +263 -0
  212. union/_cli/_create.py +40 -0
  213. union/_cli/_delete.py +23 -0
  214. union/_cli/_deploy.py +120 -0
  215. union/_cli/_get.py +162 -0
  216. union/_cli/_params.py +579 -0
  217. union/_cli/_run.py +150 -0
  218. union/_cli/main.py +72 -0
  219. union/_code_bundle/__init__.py +8 -0
  220. union/_code_bundle/_ignore.py +113 -0
  221. union/_code_bundle/_packaging.py +187 -0
  222. union/_code_bundle/_utils.py +342 -0
  223. union/_code_bundle/bundle.py +176 -0
  224. union/_context.py +146 -0
  225. union/_datastructures.py +295 -0
  226. union/_deploy.py +185 -0
  227. union/_doc.py +29 -0
  228. union/_docstring.py +26 -0
  229. union/_environment.py +43 -0
  230. union/_group.py +31 -0
  231. union/_hash.py +23 -0
  232. union/_image.py +760 -0
  233. union/_initialize.py +585 -0
  234. union/_interface.py +84 -0
  235. union/_internal/__init__.py +3 -0
  236. union/_internal/controllers/__init__.py +77 -0
  237. union/_internal/controllers/_local_controller.py +77 -0
  238. union/_internal/controllers/pbhash.py +39 -0
  239. union/_internal/controllers/remote/__init__.py +40 -0
  240. union/_internal/controllers/remote/_action.py +131 -0
  241. union/_internal/controllers/remote/_client.py +43 -0
  242. union/_internal/controllers/remote/_controller.py +169 -0
  243. union/_internal/controllers/remote/_core.py +341 -0
  244. union/_internal/controllers/remote/_informer.py +260 -0
  245. union/_internal/controllers/remote/_service_protocol.py +44 -0
  246. union/_internal/imagebuild/__init__.py +11 -0
  247. union/_internal/imagebuild/docker_builder.py +416 -0
  248. union/_internal/imagebuild/image_builder.py +243 -0
  249. union/_internal/imagebuild/remote_builder.py +0 -0
  250. union/_internal/resolvers/__init__.py +0 -0
  251. union/_internal/resolvers/_task_module.py +31 -0
  252. union/_internal/resolvers/common.py +24 -0
  253. union/_internal/resolvers/default.py +27 -0
  254. union/_internal/runtime/__init__.py +0 -0
  255. union/_internal/runtime/convert.py +163 -0
  256. union/_internal/runtime/entrypoints.py +121 -0
  257. union/_internal/runtime/io.py +136 -0
  258. union/_internal/runtime/resources_serde.py +134 -0
  259. union/_internal/runtime/task_serde.py +202 -0
  260. union/_internal/runtime/taskrunner.py +179 -0
  261. union/_internal/runtime/types_serde.py +53 -0
  262. union/_logging.py +124 -0
  263. union/_protos/__init__.py +0 -0
  264. union/_protos/common/authorization_pb2.py +66 -0
  265. union/_protos/common/authorization_pb2.pyi +106 -0
  266. union/_protos/common/authorization_pb2_grpc.py +4 -0
  267. union/_protos/common/identifier_pb2.py +71 -0
  268. union/_protos/common/identifier_pb2.pyi +82 -0
  269. union/_protos/common/identifier_pb2_grpc.py +4 -0
  270. union/_protos/common/identity_pb2.py +48 -0
  271. union/_protos/common/identity_pb2.pyi +72 -0
  272. union/_protos/common/identity_pb2_grpc.py +4 -0
  273. union/_protos/common/list_pb2.py +36 -0
  274. union/_protos/common/list_pb2.pyi +69 -0
  275. union/_protos/common/list_pb2_grpc.py +4 -0
  276. union/_protos/common/policy_pb2.py +37 -0
  277. union/_protos/common/policy_pb2.pyi +27 -0
  278. union/_protos/common/policy_pb2_grpc.py +4 -0
  279. union/_protos/common/role_pb2.py +37 -0
  280. union/_protos/common/role_pb2.pyi +51 -0
  281. union/_protos/common/role_pb2_grpc.py +4 -0
  282. union/_protos/common/runtime_version_pb2.py +28 -0
  283. union/_protos/common/runtime_version_pb2.pyi +24 -0
  284. union/_protos/common/runtime_version_pb2_grpc.py +4 -0
  285. union/_protos/logs/dataplane/payload_pb2.py +96 -0
  286. union/_protos/logs/dataplane/payload_pb2.pyi +168 -0
  287. union/_protos/logs/dataplane/payload_pb2_grpc.py +4 -0
  288. union/_protos/secret/definition_pb2.py +49 -0
  289. union/_protos/secret/definition_pb2.pyi +93 -0
  290. union/_protos/secret/definition_pb2_grpc.py +4 -0
  291. union/_protos/secret/payload_pb2.py +62 -0
  292. union/_protos/secret/payload_pb2.pyi +94 -0
  293. union/_protos/secret/payload_pb2_grpc.py +4 -0
  294. union/_protos/secret/secret_pb2.py +38 -0
  295. union/_protos/secret/secret_pb2.pyi +6 -0
  296. union/_protos/secret/secret_pb2_grpc.py +198 -0
  297. union/_protos/validate/validate/validate_pb2.py +76 -0
  298. union/_protos/workflow/node_execution_service_pb2.py +26 -0
  299. union/_protos/workflow/node_execution_service_pb2.pyi +4 -0
  300. union/_protos/workflow/node_execution_service_pb2_grpc.py +32 -0
  301. union/_protos/workflow/queue_service_pb2.py +75 -0
  302. union/_protos/workflow/queue_service_pb2.pyi +103 -0
  303. union/_protos/workflow/queue_service_pb2_grpc.py +172 -0
  304. union/_protos/workflow/run_definition_pb2.py +100 -0
  305. union/_protos/workflow/run_definition_pb2.pyi +256 -0
  306. union/_protos/workflow/run_definition_pb2_grpc.py +4 -0
  307. union/_protos/workflow/run_logs_service_pb2.py +41 -0
  308. union/_protos/workflow/run_logs_service_pb2.pyi +28 -0
  309. union/_protos/workflow/run_logs_service_pb2_grpc.py +69 -0
  310. union/_protos/workflow/run_service_pb2.py +133 -0
  311. union/_protos/workflow/run_service_pb2.pyi +173 -0
  312. union/_protos/workflow/run_service_pb2_grpc.py +412 -0
  313. union/_protos/workflow/state_service_pb2.py +58 -0
  314. union/_protos/workflow/state_service_pb2.pyi +69 -0
  315. union/_protos/workflow/state_service_pb2_grpc.py +138 -0
  316. union/_protos/workflow/task_definition_pb2.py +72 -0
  317. union/_protos/workflow/task_definition_pb2.pyi +65 -0
  318. union/_protos/workflow/task_definition_pb2_grpc.py +4 -0
  319. union/_protos/workflow/task_service_pb2.py +44 -0
  320. union/_protos/workflow/task_service_pb2.pyi +31 -0
  321. union/_protos/workflow/task_service_pb2_grpc.py +104 -0
  322. union/_resources.py +226 -0
  323. union/_retry.py +32 -0
  324. union/_reusable_environment.py +25 -0
  325. union/_run.py +374 -0
  326. union/_secret.py +61 -0
  327. union/_task.py +354 -0
  328. union/_task_environment.py +186 -0
  329. union/_timeout.py +47 -0
  330. union/_tools.py +27 -0
  331. union/_utils/__init__.py +11 -0
  332. union/_utils/asyn.py +119 -0
  333. union/_utils/file_handling.py +71 -0
  334. union/_utils/helpers.py +46 -0
  335. union/_utils/lazy_module.py +54 -0
  336. union/_utils/uv_script_parser.py +49 -0
  337. union/_version.py +21 -0
  338. union/connectors/__init__.py +0 -0
  339. union/errors.py +128 -0
  340. union/extras/__init__.py +5 -0
  341. union/extras/_container.py +263 -0
  342. union/io/__init__.py +11 -0
  343. union/io/_dataframe.py +0 -0
  344. union/io/_dir.py +425 -0
  345. union/io/_file.py +418 -0
  346. union/io/pickle/__init__.py +0 -0
  347. union/io/pickle/transformer.py +117 -0
  348. union/io/structured_dataset/__init__.py +122 -0
  349. union/io/structured_dataset/basic_dfs.py +219 -0
  350. union/io/structured_dataset/structured_dataset.py +1057 -0
  351. union/py.typed +0 -0
  352. union/remote/__init__.py +23 -0
  353. union/remote/_client/__init__.py +0 -0
  354. union/remote/_client/_protocols.py +129 -0
  355. union/remote/_client/auth/__init__.py +12 -0
  356. union/remote/_client/auth/_authenticators/__init__.py +0 -0
  357. union/remote/_client/auth/_authenticators/base.py +391 -0
  358. union/remote/_client/auth/_authenticators/client_credentials.py +73 -0
  359. union/remote/_client/auth/_authenticators/device_code.py +120 -0
  360. union/remote/_client/auth/_authenticators/external_command.py +77 -0
  361. union/remote/_client/auth/_authenticators/factory.py +200 -0
  362. union/remote/_client/auth/_authenticators/pkce.py +515 -0
  363. union/remote/_client/auth/_channel.py +184 -0
  364. union/remote/_client/auth/_client_config.py +83 -0
  365. union/remote/_client/auth/_default_html.py +32 -0
  366. union/remote/_client/auth/_grpc_utils/__init__.py +0 -0
  367. union/remote/_client/auth/_grpc_utils/auth_interceptor.py +204 -0
  368. union/remote/_client/auth/_grpc_utils/default_metadata_interceptor.py +144 -0
  369. union/remote/_client/auth/_keyring.py +154 -0
  370. union/remote/_client/auth/_token_client.py +258 -0
  371. union/remote/_client/auth/errors.py +16 -0
  372. union/remote/_client/controlplane.py +86 -0
  373. union/remote/_data.py +149 -0
  374. union/remote/_logs.py +74 -0
  375. union/remote/_project.py +86 -0
  376. union/remote/_run.py +820 -0
  377. union/remote/_secret.py +132 -0
  378. union/remote/_task.py +193 -0
  379. union/report/__init__.py +3 -0
  380. union/report/_report.py +178 -0
  381. union/report/_template.html +124 -0
  382. union/storage/__init__.py +24 -0
  383. union/storage/_remote_fs.py +34 -0
  384. union/storage/_storage.py +247 -0
  385. union/storage/_utils.py +5 -0
  386. union/types/__init__.py +11 -0
  387. union/types/_renderer.py +162 -0
  388. union/types/_string_literals.py +120 -0
  389. union/types/_type_engine.py +2131 -0
  390. union/types/_utils.py +80 -0
flyte/__init__.py ADDED
@@ -0,0 +1,62 @@
1
+ """
2
+ Flyte SDK for authoring Compound AI applications, services and workflows.
3
+
4
+ ## Environments
5
+
6
+ TaskEnvironment class to define a new environment for a set of tasks.
7
+
8
+ Example usage:
9
+
10
+ ```python
11
+ env = flyte.TaskEnvironment(name="my_env", image="my_image", resources=Resources(cpu="1", memory="1Gi"))
12
+
13
+ @env.task
14
+ async def my_task():
15
+ pass
16
+ ```
17
+ """
18
+
19
+ __all__ = [
20
+ "ABFS",
21
+ "GCS",
22
+ "GPU",
23
+ "S3",
24
+ "TPU",
25
+ "Cache",
26
+ "CachePolicy",
27
+ "CacheRequest",
28
+ "Device",
29
+ "Image",
30
+ "Resources",
31
+ "RetryStrategy",
32
+ "ReusePolicy",
33
+ "Secret",
34
+ "SecretRequest",
35
+ "TaskEnvironment",
36
+ "Timeout",
37
+ "TimeoutType",
38
+ "__version__",
39
+ "ctx",
40
+ "deploy",
41
+ "group",
42
+ "init",
43
+ "run",
44
+ "trace",
45
+ "with_runcontext",
46
+ ]
47
+
48
+ from ._cache import Cache, CachePolicy, CacheRequest
49
+ from ._context import ctx
50
+ from ._deploy import deploy
51
+ from ._group import group
52
+ from ._image import Image
53
+ from ._initialize import ABFS, GCS, S3, init
54
+ from ._resources import GPU, TPU, Device, Resources
55
+ from ._retry import RetryStrategy
56
+ from ._reusable_environment import ReusePolicy
57
+ from ._run import run, with_runcontext
58
+ from ._secret import Secret, SecretRequest
59
+ from ._task_environment import TaskEnvironment
60
+ from ._timeout import Timeout, TimeoutType
61
+ from ._trace import trace
62
+ from ._version import __version__
flyte/_api_commons.py ADDED
@@ -0,0 +1,3 @@
1
+ from synchronicity import Synchronizer
2
+
3
+ syncer = Synchronizer()
flyte/_bin/__init__.py ADDED
File without changes
flyte/_bin/runtime.py ADDED
@@ -0,0 +1,126 @@
1
+ """
2
+ Flyte runtime module, this is the entrypoint script for the Flyte runtime.
3
+
4
+ Caution: Startup time for this module is very important, as it is the entrypoint for the Flyte runtime.
5
+ Refrain from importing any modules here. If you need to import any modules, do it inside the main function.
6
+ """
7
+
8
+ import asyncio
9
+ import os
10
+ import sys
11
+ from typing import List
12
+
13
+ import click
14
+
15
+ # Todo: work with pvditt to make these the names
16
+ # ACTION_NAME = "_U_ACTION_NAME"
17
+ # RUN_NAME = "_U_RUN_NAME"
18
+ # PROJECT_NAME = "_U_PROJECT_NAME"
19
+ # DOMAIN_NAME = "_U_DOMAIN_NAME"
20
+ # ORG_NAME = "_U_ORG_NAME"
21
+
22
+ ACTION_NAME = "ACTION_NAME"
23
+ RUN_NAME = "RUN_NAME"
24
+ PROJECT_NAME = "FLYTE_INTERNAL_TASK_PROJECT"
25
+ DOMAIN_NAME = "FLYTE_INTERNAL_TASK_DOMAIN"
26
+ ORG_NAME = "_U_ORG_NAME"
27
+ ENDPOINT_OVERRIDE = "_U_EP_OVERRIDE"
28
+ RUN_OUTPUT_BASE_DIR = "_U_RUN_BASE"
29
+
30
+
31
+ @click.command("a0")
32
+ @click.option("--inputs", "-i", required=True)
33
+ @click.option("--outputs-path", "-o", required=True)
34
+ @click.option("--version", "-v", required=True)
35
+ @click.option("--run-base-dir", envvar=RUN_OUTPUT_BASE_DIR, required=True)
36
+ @click.option("--raw-data-path", "-r", required=False)
37
+ @click.option("--checkpoint-path", "-c", required=False)
38
+ @click.option("--prev-checkpoint", "-p", required=False)
39
+ @click.option("--name", envvar=ACTION_NAME, required=False)
40
+ @click.option("--run-name", envvar=RUN_NAME, required=False)
41
+ @click.option("--project", envvar=PROJECT_NAME, required=False)
42
+ @click.option("--domain", envvar=DOMAIN_NAME, required=False)
43
+ @click.option("--org", envvar=ORG_NAME, required=False)
44
+ @click.option("--image-cache", required=False)
45
+ @click.option("--tgz", required=False)
46
+ @click.option("--pkl", required=False)
47
+ @click.option("--dest", required=False)
48
+ @click.option("--resolver", required=False)
49
+ @click.argument(
50
+ "resolver-args",
51
+ type=click.UNPROCESSED,
52
+ nargs=-1,
53
+ )
54
+ def main(
55
+ run_name: str,
56
+ name: str,
57
+ project: str,
58
+ domain: str,
59
+ org: str,
60
+ image_cache: str,
61
+ version: str,
62
+ inputs: str,
63
+ run_base_dir: str,
64
+ outputs_path: str,
65
+ raw_data_path: str,
66
+ checkpoint_path: str,
67
+ prev_checkpoint: str,
68
+ tgz: str,
69
+ pkl: str,
70
+ dest: str,
71
+ resolver: str,
72
+ resolver_args: List[str],
73
+ ):
74
+ sys.path.insert(0, ".")
75
+
76
+ import flyte._utils as utils
77
+ from flyte._datastructures import ActionID, Checkpoints, CodeBundle, RawDataPath
78
+ from flyte._initialize import S3, initialize_in_cluster
79
+ from flyte._internal.controllers import create_controller
80
+ from flyte._internal.imagebuild.image_builder import ImageCache
81
+ from flyte._internal.runtime.entrypoints import load_and_run_task
82
+
83
+ assert org, "Org is required for now"
84
+ assert project, "Project is required"
85
+ assert domain, "Domain is required"
86
+ assert run_name, f"Run name is required {run_name}"
87
+ assert name, f"Action name is required {name}"
88
+
89
+ if run_name.startswith("{{"):
90
+ run_name = os.getenv("RUN_NAME", "")
91
+ if name.startswith("{{"):
92
+ name = os.getenv("ACTION_NAME", "")
93
+
94
+ ep = os.environ.get(ENDPOINT_OVERRIDE, "host.docker.internal:8090")
95
+
96
+ bundle = CodeBundle(tgz=tgz, pkl=pkl, destination=dest, computed_version=version)
97
+ # TODO configure storage correctly for cluster
98
+ initialize_in_cluster(storage=S3.auto())
99
+ controller = create_controller(ct="remote", endpoint=ep, insecure=True)
100
+
101
+ ic = ImageCache.from_transport(image_cache) if image_cache else None
102
+
103
+ # Create a coroutine to load the task and run it
104
+ task_coroutine = load_and_run_task(
105
+ resolver=resolver,
106
+ resolver_args=resolver_args,
107
+ action=ActionID(name=name, run_name=run_name, project=project, domain=domain, org=org),
108
+ raw_data_path=RawDataPath(path=raw_data_path),
109
+ checkpoints=Checkpoints(checkpoint_path, prev_checkpoint),
110
+ code_bundle=bundle,
111
+ input_path=inputs,
112
+ output_path=outputs_path,
113
+ run_base_dir=run_base_dir,
114
+ version=version,
115
+ controller=controller,
116
+ image_cache=ic,
117
+ )
118
+ # Create a coroutine to watch for errors
119
+ controller_failure = controller.watch_for_errors()
120
+
121
+ # Run both coroutines concurrently and wait for first to finish and cancel the other
122
+ async def _run_and_stop():
123
+ await utils.run_coros(controller_failure, task_coroutine)
124
+ await controller.stop()
125
+
126
+ asyncio.run(_run_and_stop())
flyte/_build.py ADDED
@@ -0,0 +1,25 @@
1
+ from __future__ import annotations
2
+
3
+ from ._api_commons import syncer
4
+ from ._image import Image
5
+
6
+
7
+ @syncer.wrap
8
+ async def build(image: Image) -> str:
9
+ """
10
+ Build an image. The existing async context will be used.
11
+
12
+ Example:
13
+ ```
14
+ import flyte
15
+ image = flyte.Image("example_image")
16
+ if __name__ == "__main__":
17
+ asyncio.run(flyte.build.aio(image))
18
+ ```
19
+
20
+ :param image: The image(s) to build.
21
+ :return: The image URI.
22
+ """
23
+ from flyte._internal.imagebuild.image_builder import ImageBuildEngine
24
+
25
+ return await ImageBuildEngine.build(image)
@@ -0,0 +1,12 @@
1
+ from .cache import Cache, CacheBehavior, CachePolicy, CacheRequest
2
+ from .defaults import get_default_policies
3
+ from .policy_function_body import FunctionBodyPolicy
4
+
5
+ __all__ = [
6
+ "Cache",
7
+ "CacheBehavior",
8
+ "CachePolicy",
9
+ "CacheRequest",
10
+ "FunctionBodyPolicy",
11
+ "get_default_policies",
12
+ ]
flyte/_cache/cache.py ADDED
@@ -0,0 +1,146 @@
1
+ import hashlib
2
+ from dataclasses import dataclass, field
3
+ from typing import (
4
+ Callable,
5
+ Generic,
6
+ List,
7
+ Optional,
8
+ Protocol,
9
+ Tuple,
10
+ Union,
11
+ runtime_checkable,
12
+ )
13
+
14
+ import rich.repr
15
+ from typing_extensions import Literal, ParamSpec, TypeVar, get_args
16
+
17
+ from flyte._datastructures import CodeBundle
18
+
19
+ # if TYPE_CHECKING:
20
+ from flyte._image import Image
21
+
22
+ P = ParamSpec("P")
23
+ FuncOut = TypeVar("FuncOut")
24
+
25
+ CacheBehavior = Literal["auto", "override", "disable", "enabled"]
26
+
27
+
28
+ @dataclass
29
+ class VersionParameters(Generic[P, FuncOut]):
30
+ """
31
+ Parameters used for cache version hash generation.
32
+
33
+ :param func: The function to generate a version for. This is a required parameter but can be any callable
34
+ :type func: Callable[P, FuncOut]
35
+ :param image: The container image to generate a version for. This can be a string representing the
36
+ image name or an Image object.
37
+ :type image: Optional[Union[str, Image]]
38
+ """
39
+
40
+ func: Callable[P, FuncOut] | None
41
+ image: Optional[Union[str, Image]] = None
42
+ code_bundle: Optional[CodeBundle] = None
43
+
44
+
45
+ @runtime_checkable
46
+ class CachePolicy(Protocol):
47
+ def get_version(self, salt: str, params: VersionParameters) -> str: ...
48
+
49
+
50
+ @rich.repr.auto
51
+ @dataclass
52
+ class Cache:
53
+ """
54
+ Cache configuration for a task.
55
+ :param behavior: The behavior of the cache. Can be "auto", "override" or "disable".
56
+ :param version_override: The version of the cache. If not provided, the version will be
57
+ generated based on the cache policies
58
+ :type version_override: Optional[str]
59
+ :param serialize: Boolean that indicates if identical (ie. same inputs) instances of this task should be executed in
60
+ serial when caching is enabled. This means that given multiple concurrent executions over identical inputs,
61
+ only a single instance executes and the rest wait to reuse the cached results.
62
+ :type serialize: bool
63
+ :param ignored_inputs: A tuple of input names to ignore when generating the version hash.
64
+ :type ignored_inputs: Union[Tuple[str, ...], str]
65
+ :param salt: A salt used in the hash generation.
66
+ :type salt: str
67
+ :param policies: A list of cache policies to generate the version hash.
68
+ :type policies: Optional[Union[List[CachePolicy], CachePolicy]]
69
+ """
70
+
71
+ behavior: CacheBehavior
72
+ version_override: Optional[str] = None
73
+ serialize: bool = False
74
+ ignored_inputs: Union[Tuple[str, ...], str] = field(default_factory=tuple)
75
+ salt: str = ""
76
+ policies: Optional[Union[List[CachePolicy], CachePolicy]] = None
77
+
78
+ def __post_init__(self):
79
+ if self.behavior not in get_args(CacheBehavior):
80
+ raise ValueError(f"Invalid cache behavior: {self.behavior}. Must be one of ['auto', 'override', 'disable']")
81
+ if self.behavior == "disable":
82
+ return
83
+
84
+ if isinstance(self.ignored_inputs, str):
85
+ self._ignored_inputs = (self.ignored_inputs,)
86
+ else:
87
+ self._ignored_inputs = self.ignored_inputs
88
+
89
+ # Normalize policies so that self._policies is always a list
90
+ if self.policies is None:
91
+ from flyte._cache.defaults import get_default_policies
92
+
93
+ self.policies = get_default_policies()
94
+ elif isinstance(self.policies, CachePolicy):
95
+ self.policies = [self.policies]
96
+
97
+ if self.version_override is None and not self.policies:
98
+ raise ValueError("If version is not defined then at least one cache policy needs to be set")
99
+
100
+ def is_enabled(self) -> bool:
101
+ """
102
+ Check if the cache policy is enabled.
103
+ """
104
+ return self.behavior in ["auto", "override"]
105
+
106
+ def get_ignored_inputs(self) -> Tuple[str, ...]:
107
+ return self._ignored_inputs
108
+
109
+ def get_version(self, params: Optional[VersionParameters] = None) -> str:
110
+ if not self.is_enabled():
111
+ return ""
112
+
113
+ if self.version_override is not None:
114
+ return self.version_override
115
+
116
+ if params is None:
117
+ raise ValueError("Version parameters must be provided when version_override is not set.")
118
+
119
+ if params.code_bundle is not None:
120
+ if params.code_bundle.pkl is not None:
121
+ return params.code_bundle.computed_version
122
+
123
+ task_hash = ""
124
+ if self.policies is None:
125
+ raise ValueError("Cache policies are not set.")
126
+ policies = self.policies if isinstance(self.policies, list) else [self.policies]
127
+ for policy in policies:
128
+ try:
129
+ task_hash += policy.get_version(self.salt, params)
130
+ except Exception as e:
131
+ raise ValueError(f"Failed to generate version for cache policy {policy}.") from e
132
+
133
+ hash_obj = hashlib.sha256(task_hash.encode())
134
+ return hash_obj.hexdigest()
135
+
136
+
137
+ CacheRequest = CacheBehavior | Cache
138
+
139
+
140
+ def cache_from_request(cache: CacheRequest) -> Cache:
141
+ """
142
+ Coerce user input into a cache object.
143
+ """
144
+ if isinstance(cache, Cache):
145
+ return cache
146
+ return Cache(behavior=cache)
@@ -0,0 +1,9 @@
1
+ from .cache import CachePolicy
2
+ from .policy_function_body import FunctionBodyPolicy
3
+
4
+
5
+ def get_default_policies() -> list[CachePolicy]:
6
+ """
7
+ Get default cache policies.
8
+ """
9
+ return [FunctionBodyPolicy()]
@@ -0,0 +1,42 @@
1
+ import ast
2
+ import hashlib
3
+ import inspect
4
+ import textwrap
5
+
6
+ from .cache import CachePolicy, VersionParameters
7
+
8
+
9
+ class FunctionBodyPolicy(CachePolicy):
10
+ """
11
+ A class that implements a versioning mechanism for functions by generating
12
+ a SHA-256 hash of the function's source code combined with a salt.
13
+ """
14
+
15
+ def get_version(self, salt: str, params: VersionParameters) -> str:
16
+ """
17
+ This method generates a version string for a function by hashing the function's source code
18
+ combined with a salt.
19
+
20
+ :param salt: A string that is used to salt the hash.
21
+ :param params: VersionParameters object that contains the parameters (e.g. function, ImageSpec, etc.) that are
22
+ used to generate the version.
23
+
24
+ :return: A string that represents the version of the function.
25
+ """
26
+ if params.func is None:
27
+ return ""
28
+
29
+ source = inspect.getsource(params.func)
30
+ dedented_source = textwrap.dedent(source)
31
+
32
+ # Parse the source code into an Abstract Syntax Tree (AST)
33
+ parsed_ast = ast.parse(dedented_source)
34
+
35
+ # Convert the AST into a string representation
36
+ ast_bytes = ast.dump(parsed_ast, include_attributes=False).encode("utf-8")
37
+
38
+ # Combine the AST bytes with the salt (encoded into bytes)
39
+ combined_data = ast_bytes + salt.encode("utf-8")
40
+
41
+ # Return the SHA-256 hash of the combined data (AST + salt)
42
+ return hashlib.sha256(combined_data).hexdigest()
flyte/_cli/__init__.py ADDED
File without changes