truefoundry 0.11.3rc1__tar.gz → 0.11.3rc2__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.

Potentially problematic release.


This version of truefoundry might be problematic. Click here for more details.

Files changed (390) hide show
  1. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/.gitignore +4 -0
  2. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/PKG-INFO +2 -2
  3. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/pyproject.toml +2 -2
  4. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/common/constants.py +2 -0
  5. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/__init__.py +1 -0
  6. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/_autogen/models.py +11 -2
  7. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/builder/__init__.py +2 -0
  8. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/builder/builders/__init__.py +2 -0
  9. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/builder/builders/tfy_python_buildpack/dockerfile_template.py +6 -83
  10. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/builder/builders/tfy_spark_buildpack/dockerfile_template.py +20 -72
  11. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/builder/builders/tfy_spark_buildpack/tfy_execute_notebook.py +14 -1
  12. truefoundry-0.11.3rc2/truefoundry/deploy/builder/builders/tfy_task_pyspark_buildpack/__init__.py +52 -0
  13. truefoundry-0.11.3rc2/truefoundry/deploy/builder/builders/tfy_task_pyspark_buildpack/dockerfile_template.py +121 -0
  14. truefoundry-0.11.3rc2/truefoundry/deploy/builder/utils.py +120 -0
  15. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/v2/lib/patched_models.py +6 -0
  16. truefoundry-0.11.3rc1/truefoundry/deploy/builder/utils.py +0 -37
  17. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/README.md +0 -0
  18. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/__init__.py +0 -0
  19. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/_ask/__init__.py +0 -0
  20. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/_ask/cli.py +0 -0
  21. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/_ask/client.py +0 -0
  22. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/_ask/llm_utils.py +0 -0
  23. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/_client.py +0 -0
  24. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/__init__.py +0 -0
  25. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/agents/__init__.py +0 -0
  26. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/agents/base.py +0 -0
  27. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/agents/developer.py +0 -0
  28. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/agents/project_identifier.py +0 -0
  29. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/agents/tester.py +0 -0
  30. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/cli.py +0 -0
  31. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/constants.py +0 -0
  32. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/exception.py +0 -0
  33. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/logger.py +0 -0
  34. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/tools/__init__.py +0 -0
  35. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/tools/ask.py +0 -0
  36. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/tools/base.py +0 -0
  37. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/tools/commit.py +0 -0
  38. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/tools/docker_build.py +0 -0
  39. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/tools/docker_run.py +0 -0
  40. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/tools/file_type_counts.py +0 -0
  41. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/tools/list_files.py +0 -0
  42. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/tools/read_file.py +0 -0
  43. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/tools/send_request.py +0 -0
  44. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/tools/write_file.py +0 -0
  45. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/utils/client.py +0 -0
  46. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/utils/diff.py +0 -0
  47. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/autodeploy/utils/pydantic_compat.py +0 -0
  48. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/cli/__init__.py +0 -0
  49. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/cli/__main__.py +0 -0
  50. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/cli/config.py +0 -0
  51. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/cli/console.py +0 -0
  52. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/cli/const.py +0 -0
  53. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/cli/display_util.py +0 -0
  54. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/cli/util.py +0 -0
  55. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/common/__init__.py +0 -0
  56. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/common/auth_service_client.py +0 -0
  57. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/common/credential_file_manager.py +0 -0
  58. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/common/credential_provider.py +0 -0
  59. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/common/entities.py +0 -0
  60. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/common/exceptions.py +0 -0
  61. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/common/request_utils.py +0 -0
  62. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/common/servicefoundry_client.py +0 -0
  63. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/common/session.py +0 -0
  64. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/common/storage_provider_utils.py +0 -0
  65. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/common/types.py +0 -0
  66. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/common/utils.py +0 -0
  67. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/common/warnings.py +0 -0
  68. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/builder/builders/dockerfile.py +0 -0
  69. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/builder/builders/tfy_notebook_buildpack/__init__.py +0 -0
  70. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/builder/builders/tfy_notebook_buildpack/dockerfile_template.py +0 -0
  71. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/builder/builders/tfy_python_buildpack/__init__.py +0 -0
  72. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/builder/builders/tfy_spark_buildpack/__init__.py +0 -0
  73. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/builder/constants.py +0 -0
  74. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/builder/docker_service.py +0 -0
  75. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/__init__.py +0 -0
  76. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/__init__.py +0 -0
  77. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/apply_command.py +0 -0
  78. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/build_command.py +0 -0
  79. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/delete_command.py +0 -0
  80. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/deploy_command.py +0 -0
  81. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/deploy_init_command.py +0 -0
  82. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/get_command.py +0 -0
  83. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/k8s_exec_credential_command.py +0 -0
  84. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/kubeconfig_command.py +0 -0
  85. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/login_command.py +0 -0
  86. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/logout_command.py +0 -0
  87. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/logs_command.py +0 -0
  88. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/patch_application_command.py +0 -0
  89. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/patch_command.py +0 -0
  90. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/terminate_comand.py +0 -0
  91. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/trigger_command.py +0 -0
  92. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/cli/commands/utils.py +0 -0
  93. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/core/__init__.py +0 -0
  94. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/core/login.py +0 -0
  95. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/core/logout.py +0 -0
  96. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/io/__init__.py +0 -0
  97. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/io/no_output_callback.py +0 -0
  98. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/io/output_callback.py +0 -0
  99. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/io/rich_output_callback.py +0 -0
  100. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/__init__.py +0 -0
  101. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/clients/__init__.py +0 -0
  102. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/clients/servicefoundry_client.py +0 -0
  103. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/const.py +0 -0
  104. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/dao/__init__.py +0 -0
  105. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/dao/application.py +0 -0
  106. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/dao/apply.py +0 -0
  107. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/dao/delete.py +0 -0
  108. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/dao/version.py +0 -0
  109. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/dao/workspace.py +0 -0
  110. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/diff_utils.py +0 -0
  111. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/logs_utils.py +0 -0
  112. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/messages.py +0 -0
  113. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/model/__init__.py +0 -0
  114. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/model/entity.py +0 -0
  115. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/session.py +0 -0
  116. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/util.py +0 -0
  117. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/lib/win32.py +0 -0
  118. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/python_deploy_codegen.py +0 -0
  119. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/v2/__init__.py +0 -0
  120. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/v2/lib/__init__.py +0 -0
  121. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/v2/lib/deploy.py +0 -0
  122. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/v2/lib/deploy_workflow.py +0 -0
  123. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/v2/lib/deployable_patched_models.py +0 -0
  124. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/v2/lib/models.py +0 -0
  125. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/deploy/v2/lib/source.py +0 -0
  126. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/logger.py +0 -0
  127. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/__init__.py +0 -0
  128. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/__init__.py +0 -0
  129. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/__init__.py +0 -0
  130. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/api/__init__.py +0 -0
  131. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/api/auth_api.py +0 -0
  132. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/api/deprecated_api.py +0 -0
  133. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/api/experiments_api.py +0 -0
  134. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/api/generate_code_snippet_api.py +0 -0
  135. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/api/health_api.py +0 -0
  136. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/api/metrics_api.py +0 -0
  137. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/api/mlfoundry_artifacts_api.py +0 -0
  138. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/api/run_artifacts_api.py +0 -0
  139. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/api/runs_api.py +0 -0
  140. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/api_client.py +0 -0
  141. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/api_response.py +0 -0
  142. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/configuration.py +0 -0
  143. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/exceptions.py +0 -0
  144. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/__init__.py +0 -0
  145. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/agent_app.py +0 -0
  146. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/agent_manifest.py +0 -0
  147. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/agent_open_api_tool_manifest.py +0 -0
  148. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/agent_open_api_tool_with_fqn.py +0 -0
  149. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/agent_with_fqn.py +0 -0
  150. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/apply_request_dto.py +0 -0
  151. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/apply_response_dto.py +0 -0
  152. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/artifact_dto.py +0 -0
  153. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/artifact_manifest.py +0 -0
  154. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/artifact_path.py +0 -0
  155. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/artifact_response_dto.py +0 -0
  156. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/artifact_type.py +0 -0
  157. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/artifact_version_dto.py +0 -0
  158. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/artifact_version_response_dto.py +0 -0
  159. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/artifact_version_serialization_format.py +0 -0
  160. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/artifact_version_status.py +0 -0
  161. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/assistant_message.py +0 -0
  162. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/authorize_user_for_model_request_dto.py +0 -0
  163. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/authorize_user_for_model_version_request_dto.py +0 -0
  164. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/blob_storage_reference.py +0 -0
  165. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/body_get_search_runs_get.py +0 -0
  166. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/chat_prompt_manifest.py +0 -0
  167. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/chat_prompt_manifest_messages_inner.py +0 -0
  168. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/columns_dto.py +0 -0
  169. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/command.py +0 -0
  170. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/content.py +0 -0
  171. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/content1.py +0 -0
  172. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/content2.py +0 -0
  173. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/content2_any_of_inner.py +0 -0
  174. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_artifact_request_dto.py +0 -0
  175. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_artifact_response_dto.py +0 -0
  176. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_artifact_version_request_dto.py +0 -0
  177. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_artifact_version_response_dto.py +0 -0
  178. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_dataset_request_dto.py +0 -0
  179. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_experiment_request_dto.py +0 -0
  180. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_experiment_response_dto.py +0 -0
  181. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_model_version_request_dto.py +0 -0
  182. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_multi_part_upload_for_dataset_request_dto.py +0 -0
  183. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_multi_part_upload_for_dataset_response_dto.py +0 -0
  184. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_multi_part_upload_request_dto.py +0 -0
  185. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_python_deployment_config_request_dto.py +0 -0
  186. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_python_deployment_config_response_dto.py +0 -0
  187. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_run_request_dto.py +0 -0
  188. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_run_response_dto.py +0 -0
  189. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/create_workflow_task_config_request_dto.py +0 -0
  190. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/data_directory_manifest.py +0 -0
  191. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/dataset_dto.py +0 -0
  192. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/dataset_response_dto.py +0 -0
  193. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/delete_artifact_versions_request_dto.py +0 -0
  194. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/delete_dataset_request_dto.py +0 -0
  195. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/delete_files_for_dataset_request_dto.py +0 -0
  196. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/delete_model_version_request_dto.py +0 -0
  197. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/delete_run_request.py +0 -0
  198. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/delete_tag_request_dto.py +0 -0
  199. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/experiment_dto.py +0 -0
  200. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/experiment_id_request_dto.py +0 -0
  201. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/experiment_response_dto.py +0 -0
  202. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/experiment_tag_dto.py +0 -0
  203. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/export_deployment_files_request_dto.py +0 -0
  204. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/external_blob_storage_source.py +0 -0
  205. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/fast_ai_framework.py +0 -0
  206. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/file_info_dto.py +0 -0
  207. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/finalize_artifact_version_request_dto.py +0 -0
  208. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/framework.py +0 -0
  209. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/get_artifact_version_aliases_response_dto.py +0 -0
  210. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/get_experiment_response_dto.py +0 -0
  211. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/get_latest_run_log_response_dto.py +0 -0
  212. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/get_metric_history_response.py +0 -0
  213. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/get_signed_url_for_dataset_write_request_dto.py +0 -0
  214. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_artifact_version_read_request_dto.py +0 -0
  215. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_artifact_version_read_response_dto.py +0 -0
  216. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_artifact_version_write_request_dto.py +0 -0
  217. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_artifact_version_write_response_dto.py +0 -0
  218. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_dataset_read_request_dto.py +0 -0
  219. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_dataset_read_response_dto.py +0 -0
  220. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_dataset_write_response_dto.py +0 -0
  221. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/get_tenant_id_response_dto.py +0 -0
  222. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/gluon_framework.py +0 -0
  223. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/h2_o_framework.py +0 -0
  224. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/http_validation_error.py +0 -0
  225. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/image_content_part.py +0 -0
  226. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/image_url.py +0 -0
  227. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/infer_method_name.py +0 -0
  228. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/keras_framework.py +0 -0
  229. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/latest_run_log_dto.py +0 -0
  230. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/library_name.py +0 -0
  231. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/light_gbm_framework.py +0 -0
  232. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_artifact_versions_request_dto.py +0 -0
  233. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_artifact_versions_response_dto.py +0 -0
  234. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_artifacts_request_dto.py +0 -0
  235. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_artifacts_response_dto.py +0 -0
  236. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_colums_response_dto.py +0 -0
  237. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_datasets_request_dto.py +0 -0
  238. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_datasets_response_dto.py +0 -0
  239. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_experiments_response_dto.py +0 -0
  240. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_files_for_artifact_version_request_dto.py +0 -0
  241. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_files_for_artifact_versions_response_dto.py +0 -0
  242. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_files_for_dataset_request_dto.py +0 -0
  243. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_files_for_dataset_response_dto.py +0 -0
  244. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_latest_run_logs_response_dto.py +0 -0
  245. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_metric_history_request_dto.py +0 -0
  246. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_metric_history_response_dto.py +0 -0
  247. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_model_version_response_dto.py +0 -0
  248. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_model_versions_request_dto.py +0 -0
  249. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_models_request_dto.py +0 -0
  250. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_models_response_dto.py +0 -0
  251. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_run_artifacts_response_dto.py +0 -0
  252. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/list_run_logs_response_dto.py +0 -0
  253. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/local_artifact_source.py +0 -0
  254. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/local_model_source.py +0 -0
  255. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/log_batch_request_dto.py +0 -0
  256. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/log_metric_request_dto.py +0 -0
  257. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/log_param_request_dto.py +0 -0
  258. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/manifest.py +0 -0
  259. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/manifest1.py +0 -0
  260. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/manifest2.py +0 -0
  261. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/method.py +0 -0
  262. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/metric_collection_dto.py +0 -0
  263. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/metric_dto.py +0 -0
  264. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/mime_type.py +0 -0
  265. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/model_configuration.py +0 -0
  266. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/model_dto.py +0 -0
  267. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/model_manifest.py +0 -0
  268. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/model_response_dto.py +0 -0
  269. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/model_server.py +0 -0
  270. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/model_version_dto.py +0 -0
  271. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/model_version_environment.py +0 -0
  272. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/model_version_response_dto.py +0 -0
  273. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/multi_part_upload_dto.py +0 -0
  274. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/multi_part_upload_response_dto.py +0 -0
  275. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/multi_part_upload_storage_provider.py +0 -0
  276. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/notify_artifact_version_failure_dto.py +0 -0
  277. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/onnx_framework.py +0 -0
  278. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/openapi_spec.py +0 -0
  279. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/paddle_framework.py +0 -0
  280. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/param_dto.py +0 -0
  281. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/parameters.py +0 -0
  282. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/py_torch_framework.py +0 -0
  283. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/resolve_agent_app_response_dto.py +0 -0
  284. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/restore_run_request_dto.py +0 -0
  285. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/run_data_dto.py +0 -0
  286. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/run_dto.py +0 -0
  287. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/run_info_dto.py +0 -0
  288. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/run_log_dto.py +0 -0
  289. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/run_log_input_dto.py +0 -0
  290. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/run_response_dto.py +0 -0
  291. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/run_tag_dto.py +0 -0
  292. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/search_runs_request_dto.py +0 -0
  293. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/search_runs_response_dto.py +0 -0
  294. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/set_experiment_tag_request_dto.py +0 -0
  295. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/set_tag_request_dto.py +0 -0
  296. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/signed_url_dto.py +0 -0
  297. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/sklearn_framework.py +0 -0
  298. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/sklearn_model_schema.py +0 -0
  299. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/sklearn_serialization_format.py +0 -0
  300. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/source.py +0 -0
  301. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/source1.py +0 -0
  302. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/source2.py +0 -0
  303. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/spa_cy_framework.py +0 -0
  304. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/stats_models_framework.py +0 -0
  305. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/stop.py +0 -0
  306. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/store_run_logs_request_dto.py +0 -0
  307. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/subject.py +0 -0
  308. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/subject_type.py +0 -0
  309. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/system_message.py +0 -0
  310. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/tensor_flow_framework.py +0 -0
  311. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/text.py +0 -0
  312. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/text_content_part.py +0 -0
  313. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/transformers_framework.py +0 -0
  314. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/trigger_job_run_config_request_dto.py +0 -0
  315. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/trigger_job_run_config_response_dto.py +0 -0
  316. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/true_foundry_managed_source.py +0 -0
  317. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/update_artifact_version_request_dto.py +0 -0
  318. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/update_dataset_request_dto.py +0 -0
  319. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/update_experiment_request_dto.py +0 -0
  320. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/update_model_version_request_dto.py +0 -0
  321. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/update_run_request_dto.py +0 -0
  322. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/update_run_response_dto.py +0 -0
  323. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/url.py +0 -0
  324. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/user_message.py +0 -0
  325. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/validate_external_storage_root_request_dto.py +0 -0
  326. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/validate_external_storage_root_response_dto.py +0 -0
  327. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/validation_error.py +0 -0
  328. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/validation_error_loc_inner.py +0 -0
  329. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/xg_boost_framework.py +0 -0
  330. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/xg_boost_model_schema.py +0 -0
  331. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/models/xg_boost_serialization_format.py +0 -0
  332. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client/rest.py +0 -0
  333. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/client_README.md +0 -0
  334. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/entities/artifacts.py +0 -0
  335. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/models/__init__.py +0 -0
  336. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/models/exceptions.py +0 -0
  337. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/models/schema.py +0 -0
  338. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/models/signature.py +0 -0
  339. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/_autogen/models/utils.py +0 -0
  340. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/artifact/__init__.py +0 -0
  341. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/artifact/truefoundry_artifact_repo.py +0 -0
  342. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/cli/__init__.py +0 -0
  343. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/cli/cli.py +0 -0
  344. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/cli/commands/__init__.py +0 -0
  345. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/cli/commands/download.py +0 -0
  346. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/cli/commands/model_init.py +0 -0
  347. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/cli/utils.py +0 -0
  348. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/clients/__init__.py +0 -0
  349. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/constants.py +0 -0
  350. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/entities.py +0 -0
  351. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/enums.py +0 -0
  352. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/exceptions.py +0 -0
  353. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/git_info.py +0 -0
  354. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/internal_namespace.py +0 -0
  355. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/__init__.py +0 -0
  356. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/artifacts/artifact.py +0 -0
  357. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/artifacts/constants.py +0 -0
  358. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/artifacts/dataset.py +0 -0
  359. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/artifacts/general_artifact.py +0 -0
  360. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/artifacts/model.py +0 -0
  361. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/artifacts/utils.py +0 -0
  362. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/image/__init__.py +0 -0
  363. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/image/constants.py +0 -0
  364. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/image/image.py +0 -0
  365. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/image/image_normalizer.py +0 -0
  366. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/image/types.py +0 -0
  367. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/plot.py +0 -0
  368. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/pydantic_base.py +0 -0
  369. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/log_types/utils.py +0 -0
  370. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/logger.py +0 -0
  371. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/mlfoundry_api.py +0 -0
  372. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/mlfoundry_run.py +0 -0
  373. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/model_framework.py +0 -0
  374. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/prompt_utils.py +0 -0
  375. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/run_utils.py +0 -0
  376. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/session.py +0 -0
  377. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/ml/validation_utils.py +0 -0
  378. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/pydantic_v1.py +0 -0
  379. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/version.py +0 -0
  380. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/workflow/__init__.py +0 -0
  381. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/workflow/container_task.py +0 -0
  382. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/workflow/map_task.py +0 -0
  383. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/workflow/python_task.py +0 -0
  384. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/workflow/remote_filesystem/__init__.py +0 -0
  385. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/workflow/remote_filesystem/logger.py +0 -0
  386. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/workflow/remote_filesystem/tfy_signed_url_client.py +0 -0
  387. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/workflow/remote_filesystem/tfy_signed_url_fs.py +0 -0
  388. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/workflow/spark_task.py +0 -0
  389. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/workflow/task.py +0 -0
  390. {truefoundry-0.11.3rc1 → truefoundry-0.11.3rc2}/truefoundry/workflow/workflow.py +0 -0
@@ -150,3 +150,7 @@ aclImdb/
150
150
  **/.DS_Store
151
151
 
152
152
  .mypy-errors.txt
153
+
154
+ almond-output*
155
+ rt*.jar
156
+ hsperfdata_*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: truefoundry
3
- Version: 0.11.3rc1
3
+ Version: 0.11.3rc2
4
4
  Summary: TrueFoundry CLI
5
5
  Author-email: TrueFoundry Team <abhishek@truefoundry.com>
6
6
  Requires-Python: <3.14,>=3.8.1
@@ -30,7 +30,7 @@ Requires-Dist: requirements-parser<0.12.0,>=0.11.0
30
30
  Requires-Dist: rich-click<2.0.0,>=1.2.1
31
31
  Requires-Dist: rich<14.0.0,>=13.7.1
32
32
  Requires-Dist: tqdm<5.0.0,>=4.0.0
33
- Requires-Dist: truefoundry-sdk<0.2.0,>=0.1.7
33
+ Requires-Dist: truefoundry-sdk<0.2.0,>=0.1.9
34
34
  Requires-Dist: typing-extensions>=4.0
35
35
  Requires-Dist: urllib3<3,>=1.26.18
36
36
  Requires-Dist: yq<4.0.0,>=3.1.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "truefoundry"
3
- version = "0.11.3rc1" # This is a placeholder version, it will be replaced when releasing
3
+ version = "0.11.3rc2" # This is a placeholder version, it will be replaced when releasing
4
4
  requires-python = ">=3.8.1,<3.14"
5
5
  description = "TrueFoundry CLI"
6
6
  authors = [{ name = "TrueFoundry Team", email = "abhishek@truefoundry.com" }]
@@ -31,7 +31,7 @@ dependencies = [
31
31
  "rich-click>=1.2.1,<2.0.0",
32
32
  "rich>=13.7.1,<14.0.0",
33
33
  "tqdm>=4.0.0,<5.0.0",
34
- "truefoundry-sdk>=0.1.7,<0.2.0",
34
+ "truefoundry-sdk>=0.1.9,<0.2.0",
35
35
  "typing-extensions>=4.0",
36
36
  "urllib3>=1.26.18,<3",
37
37
  "yq>=3.1.0,<4.0.0",
@@ -68,6 +68,8 @@ class TrueFoundrySdkEnv(BaseSettings):
68
68
  # TODO(gw): Use another image with more linient rate limits
69
69
  TFY_SPARK_BUILD_SPARK_IMAGE_REPO: str = "public.ecr.aws/bitnami/spark"
70
70
 
71
+ TFY_TASK_PYSPARK_BUILD_SPARK_IMAGE_REPO: str = "public.ecr.aws/bitnami/spark"
72
+
71
73
  # For local development, this enables futher configuration via _TFYServersConfig
72
74
  TFY_CLI_LOCAL_DEV_MODE: bool = False
73
75
 
@@ -120,6 +120,7 @@ from truefoundry.deploy.v2.lib.patched_models import (
120
120
  SparkJobPythonEntrypoint,
121
121
  SparkJobPythonNotebookEntrypoint,
122
122
  SparkJobScalaEntrypoint,
123
+ SparkJobScalaNotebookEntrypoint,
123
124
  SQSInputConfig,
124
125
  SQSOutputConfig,
125
126
  SQSQueueMetricConfig,
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: application.json
3
- # timestamp: 2025-07-16T09:53:23+00:00
3
+ # timestamp: 2025-07-28T14:11:36+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -103,7 +103,7 @@ class AsyncProcessorSidecar(BaseModel):
103
103
 
104
104
 
105
105
  class Autoshutdown(BaseModel):
106
- wait_time: conint(ge=0) = Field(
106
+ wait_time: conint(ge=0, le=604800) = Field(
107
107
  900,
108
108
  description="The period to wait after the last received request before scaling the replicas to 0. This value should be high enough to allow for the replicas of the service to come up to avoid premature scaling down.",
109
109
  )
@@ -957,6 +957,14 @@ class SparkJobScalaEntrypoint(BaseModel):
957
957
  )
958
958
 
959
959
 
960
+ class SparkJobScalaNotebookEntrypoint(BaseModel):
961
+ type: Literal["scala-notebook"] = Field(..., description="")
962
+ main_application_file: str = Field(
963
+ ...,
964
+ description="The main application file to be executed by the spark job. Relative path in case of git repository.",
965
+ )
966
+
967
+
960
968
  class StaticVolumeConfig(BaseModel):
961
969
  type: Literal["static"] = Field(..., description="Volume Type for the volume.")
962
970
  persistent_volume_name: str = Field(
@@ -1489,6 +1497,7 @@ class SparkJob(BaseModel):
1489
1497
  SparkJobScalaEntrypoint,
1490
1498
  SparkJobJavaEntrypoint,
1491
1499
  SparkJobPythonNotebookEntrypoint,
1500
+ SparkJobScalaNotebookEntrypoint,
1492
1501
  ] = Field(..., description="")
1493
1502
  driver_config: SparkDriverConfig
1494
1503
  executor_config: SparkExecutorConfig
@@ -5,6 +5,7 @@ from truefoundry.deploy._autogen.models import (
5
5
  PythonBuild,
6
6
  SparkBuild,
7
7
  TaskDockerFileBuild,
8
+ TaskPySparkBuild,
8
9
  TaskPythonBuild,
9
10
  )
10
11
  from truefoundry.deploy.builder.builders import get_builder
@@ -22,6 +23,7 @@ class _BuildConfig(BaseModel):
22
23
  TaskPythonBuild,
23
24
  TaskDockerFileBuild,
24
25
  SparkBuild,
26
+ TaskPySparkBuild,
25
27
  ] = Field(discriminator="type")
26
28
 
27
29
 
@@ -5,6 +5,7 @@ from truefoundry.deploy.builder.builders import (
5
5
  tfy_notebook_buildpack,
6
6
  tfy_python_buildpack,
7
7
  tfy_spark_buildpack,
8
+ tfy_task_pyspark_buildpack,
8
9
  )
9
10
 
10
11
  BUILD_REGISTRY: Dict[str, Callable] = {
@@ -12,6 +13,7 @@ BUILD_REGISTRY: Dict[str, Callable] = {
12
13
  "tfy-python-buildpack": tfy_python_buildpack.build,
13
14
  "tfy-notebook-buildpack": tfy_notebook_buildpack.build,
14
15
  "tfy-spark-buildpack": tfy_spark_buildpack.build,
16
+ "task-pyspark-build": tfy_task_pyspark_buildpack.build,
15
17
  }
16
18
 
17
19
  __all__ = ["get_builder"]
@@ -1,5 +1,4 @@
1
- import shlex
2
- from typing import Dict, List, Optional
1
+ from typing import Dict
3
2
 
4
3
  from mako.template import Template
5
4
 
@@ -7,9 +6,12 @@ from truefoundry.common.constants import ENV_VARS, PythonPackageManager
7
6
  from truefoundry.deploy._autogen.models import PythonBuild
8
7
  from truefoundry.deploy.builder.constants import (
9
8
  PIP_CONF_BUILDKIT_SECRET_MOUNT,
10
- PIP_CONF_SECRET_MOUNT_AS_ENV,
11
9
  UV_CONF_BUILDKIT_SECRET_MOUNT,
12
- UV_CONF_SECRET_MOUNT_AS_ENV,
10
+ )
11
+ from truefoundry.deploy.builder.utils import (
12
+ generate_apt_install_command,
13
+ generate_pip_install_command,
14
+ generate_uv_pip_install_command,
13
15
  )
14
16
  from truefoundry.deploy.v2.lib.patched_models import (
15
17
  CUDAVersion,
@@ -82,85 +84,6 @@ CUDA_VERSION_TO_IMAGE_TAG: Dict[str, str] = {
82
84
  }
83
85
 
84
86
 
85
- def generate_apt_install_command(apt_packages: Optional[List[str]]) -> Optional[str]:
86
- packages_list = None
87
- if apt_packages:
88
- packages_list = " ".join(p.strip() for p in apt_packages if p.strip())
89
- if not packages_list:
90
- return None
91
- apt_update_command = "apt update"
92
- apt_install_command = f"DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends {packages_list}"
93
- clear_apt_lists_command = "rm -rf /var/lib/apt/lists/*"
94
- return " && ".join(
95
- [apt_update_command, apt_install_command, clear_apt_lists_command]
96
- )
97
-
98
-
99
- def generate_pip_install_command(
100
- requirements_path: Optional[str],
101
- pip_packages: Optional[List[str]],
102
- mount_pip_conf_secret: bool = False,
103
- ) -> Optional[str]:
104
- upgrade_pip_command = "python -m pip install -U pip setuptools wheel"
105
- envs = []
106
- if mount_pip_conf_secret:
107
- envs.append(PIP_CONF_SECRET_MOUNT_AS_ENV)
108
-
109
- command = ["python", "-m", "pip", "install", "--use-pep517", "--no-cache-dir"]
110
- args = []
111
- if requirements_path:
112
- args.append("-r")
113
- args.append(requirements_path)
114
-
115
- if pip_packages:
116
- args.extend(pip_packages)
117
-
118
- if not args:
119
- return None
120
-
121
- final_pip_install_command = shlex.join(envs + command + args)
122
- final_docker_run_command = " && ".join(
123
- [upgrade_pip_command, final_pip_install_command]
124
- )
125
- return final_docker_run_command
126
-
127
-
128
- def generate_uv_pip_install_command(
129
- requirements_path: Optional[str],
130
- pip_packages: Optional[List[str]],
131
- mount_uv_conf_secret: bool = False,
132
- ) -> Optional[str]:
133
- upgrade_pip_command = "python -m pip install -U pip setuptools wheel"
134
- uv_mount = f"--mount=from={ENV_VARS.TFY_PYTHON_BUILD_UV_IMAGE_URI},source=/uv,target=/usr/local/bin/uv"
135
- envs = [
136
- "UV_LINK_MODE=copy",
137
- "UV_PYTHON_DOWNLOADS=never",
138
- "UV_INDEX_STRATEGY=unsafe-best-match",
139
- ]
140
- if mount_uv_conf_secret:
141
- envs.append(UV_CONF_SECRET_MOUNT_AS_ENV)
142
-
143
- command = ["uv", "pip", "install", "--no-cache-dir"]
144
-
145
- args = []
146
-
147
- if requirements_path:
148
- args.append("-r")
149
- args.append(requirements_path)
150
-
151
- if pip_packages:
152
- args.extend(pip_packages)
153
-
154
- if not args:
155
- return None
156
-
157
- uv_pip_install_command = shlex.join(envs + command + args)
158
- shell_commands = " && ".join([upgrade_pip_command, uv_pip_install_command])
159
- final_docker_run_command = " ".join([uv_mount, shell_commands])
160
-
161
- return final_docker_run_command
162
-
163
-
164
87
  def generate_dockerfile_content(
165
88
  build_configuration: PythonBuild,
166
89
  package_manager: str = ENV_VARS.TFY_PYTHON_BUILD_PACKAGE_MANAGER,
@@ -1,15 +1,14 @@
1
- import shlex
2
- from typing import List, Optional
3
-
4
1
  from mako.template import Template
5
2
 
6
3
  from truefoundry.common.constants import ENV_VARS, PythonPackageManager
7
4
  from truefoundry.deploy._autogen.models import SparkBuild
8
5
  from truefoundry.deploy.builder.constants import (
9
6
  PIP_CONF_BUILDKIT_SECRET_MOUNT,
10
- PIP_CONF_SECRET_MOUNT_AS_ENV,
11
7
  UV_CONF_BUILDKIT_SECRET_MOUNT,
12
- UV_CONF_SECRET_MOUNT_AS_ENV,
8
+ )
9
+ from truefoundry.deploy.builder.utils import (
10
+ generate_pip_install_command,
11
+ generate_uv_pip_install_command,
13
12
  )
14
13
  from truefoundry.deploy.v2.lib.patched_models import (
15
14
  _resolve_requirements_path,
@@ -26,8 +25,7 @@ RUN ${package_manager_config_secret_mount} ${python_packages_install_command}
26
25
  % endif
27
26
  ENV PYTHONDONTWRITEBYTECODE=1
28
27
  ENV IPYTHONDIR=/tmp/.ipython
29
- RUN groupadd --system --gid 1001 spark && useradd --system --uid 1001 --gid spark --no-create-home spark
30
- USER spark
28
+ USER 1001
31
29
  COPY . /app
32
30
  """
33
31
 
@@ -35,6 +33,20 @@ _POST_USER_TEMPLATE = """
35
33
  COPY tfy_execute_notebook.py /app/tfy_execute_notebook.py
36
34
  """
37
35
 
36
+ _ALMOND_INSTALL_TEMPLATE = """
37
+ ENV COURSIER_CACHE=/opt/coursier-cache
38
+ RUN install_packages curl
39
+ RUN curl -Lo coursier https://git.io/coursier-cli && \
40
+ chmod +x coursier && \
41
+ ./coursier launch almond:0.14.1 -- --install --global && \
42
+ chown -R 1001:0 /usr/local/share/jupyter && \
43
+ chown -R 1001:0 /opt/coursier-cache && \
44
+ rm -f coursier
45
+ """
46
+
47
+ # Docker image size with almond - 1.26GB
48
+ # Docker image size without almond - 1.1GB
49
+ # Not much harm in packaging almond by default
38
50
  DOCKERFILE_TEMPLATE = Template(
39
51
  """
40
52
  FROM ${spark_image_repo}:${spark_version}
@@ -43,6 +55,7 @@ RUN apt update && \
43
55
  DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends git && \
44
56
  rm -rf /var/lib/apt/lists/*
45
57
  """
58
+ + _ALMOND_INSTALL_TEMPLATE
46
59
  + _POST_PYTHON_INSTALL_TEMPLATE
47
60
  + _POST_USER_TEMPLATE
48
61
  )
@@ -55,71 +68,6 @@ ADDITIONAL_PIP_PACKAGES = [
55
68
  ]
56
69
 
57
70
 
58
- def generate_pip_install_command(
59
- requirements_path: Optional[str],
60
- pip_packages: Optional[List[str]],
61
- mount_pip_conf_secret: bool = False,
62
- ) -> Optional[str]:
63
- upgrade_pip_command = "python3 -m pip install -U pip setuptools wheel"
64
- envs = []
65
- if mount_pip_conf_secret:
66
- envs.append(PIP_CONF_SECRET_MOUNT_AS_ENV)
67
-
68
- command = ["python3", "-m", "pip", "install", "--use-pep517", "--no-cache-dir"]
69
- args = []
70
- if requirements_path:
71
- args.append("-r")
72
- args.append(requirements_path)
73
-
74
- if pip_packages:
75
- args.extend(pip_packages)
76
-
77
- if not args:
78
- return None
79
-
80
- final_pip_install_command = shlex.join(envs + command + args)
81
- final_docker_run_command = " && ".join(
82
- [upgrade_pip_command, final_pip_install_command]
83
- )
84
- return final_docker_run_command
85
-
86
-
87
- def generate_uv_pip_install_command(
88
- requirements_path: Optional[str],
89
- pip_packages: Optional[List[str]],
90
- mount_uv_conf_secret: bool = False,
91
- ) -> Optional[str]:
92
- upgrade_pip_command = "python3 -m pip install -U pip setuptools wheel"
93
- uv_mount = f"--mount=from={ENV_VARS.TFY_PYTHON_BUILD_UV_IMAGE_URI},source=/uv,target=/usr/local/bin/uv"
94
- envs = [
95
- "UV_LINK_MODE=copy",
96
- "UV_PYTHON_DOWNLOADS=never",
97
- "UV_INDEX_STRATEGY=unsafe-best-match",
98
- ]
99
- if mount_uv_conf_secret:
100
- envs.append(UV_CONF_SECRET_MOUNT_AS_ENV)
101
-
102
- command = ["uv", "pip", "install", "--no-cache-dir"]
103
-
104
- args = []
105
-
106
- if requirements_path:
107
- args.append("-r")
108
- args.append(requirements_path)
109
-
110
- if pip_packages:
111
- args.extend(pip_packages)
112
-
113
- if not args:
114
- return None
115
-
116
- uv_pip_install_command = shlex.join(envs + command + args)
117
- shell_commands = " && ".join([upgrade_pip_command, uv_pip_install_command])
118
- final_docker_run_command = " ".join([uv_mount, shell_commands])
119
-
120
- return final_docker_run_command
121
-
122
-
123
71
  def generate_dockerfile_content(
124
72
  build_configuration: SparkBuild,
125
73
  package_manager: str = ENV_VARS.TFY_PYTHON_BUILD_PACKAGE_MANAGER,
@@ -86,12 +86,24 @@ def execute_notebook(notebook_path, output_path="/tmp/output.ipynb", parameters=
86
86
  parameters = {}
87
87
 
88
88
  print(f"Starting execution of notebook: {notebook_path}")
89
+ notebook_type = os.environ.get("TFY_NOTEBOOK_TYPE", "").lower()
90
+ kernel_mapping = {"python": "python3", "scala": "scala"}
91
+
92
+ if notebook_type not in kernel_mapping:
93
+ supported_types = ", ".join(kernel_mapping.keys())
94
+ raise ValueError(
95
+ f"Unsupported notebook type: '{notebook_type}'. "
96
+ f"Supported types: [{supported_types}]"
97
+ )
98
+
99
+ kernel_name = kernel_mapping[notebook_type]
100
+
89
101
  pm.execute_notebook(
90
102
  input_path=notebook_path,
91
103
  output_path=output_path,
92
104
  parameters=parameters,
93
105
  # TODO(gw): Replace with kernel name for venv
94
- kernel_name="python3",
106
+ kernel_name=kernel_name,
95
107
  # Log cell by cell execution output
96
108
  # TODO(gw): Output logs to a file instead, so that they aren't merged with the container's logs
97
109
  log_output=True,
@@ -107,6 +119,7 @@ def validate_env_vars():
107
119
  "TFY_NOTEBOOK_OUTPUT_S3_BUCKET",
108
120
  "SPARK_APPLICATION_EVENT_LOG_JWT_TOKEN",
109
121
  "TFY_NOTEBOOK_OUTPUT_S3_SECRET_KEY",
122
+ "TFY_NOTEBOOK_TYPE",
110
123
  ]
111
124
  unset_keys = [key for key in keys if not os.environ.get(key)]
112
125
  if unset_keys:
@@ -0,0 +1,52 @@
1
+ import os
2
+ from tempfile import TemporaryDirectory
3
+ from typing import List, Optional
4
+
5
+ from truefoundry.deploy._autogen.models import DockerFileBuild, TaskPySparkBuild
6
+ from truefoundry.deploy.builder.builders import dockerfile
7
+ from truefoundry.deploy.builder.builders.tfy_task_pyspark_buildpack.dockerfile_template import (
8
+ generate_dockerfile_content,
9
+ )
10
+ from truefoundry.deploy.builder.utils import has_python_package_manager_conf_secret
11
+
12
+ __all__ = ["generate_dockerfile_content", "build"]
13
+
14
+
15
+ def _convert_to_dockerfile_build_config(
16
+ build_configuration: TaskPySparkBuild,
17
+ dockerfile_path: str,
18
+ mount_python_package_manager_conf_secret: bool = False,
19
+ ) -> DockerFileBuild:
20
+ dockerfile_content = generate_dockerfile_content(
21
+ build_configuration=build_configuration,
22
+ mount_python_package_manager_conf_secret=mount_python_package_manager_conf_secret,
23
+ )
24
+ with open(dockerfile_path, "w", encoding="utf8") as fp:
25
+ fp.write(dockerfile_content)
26
+
27
+ return DockerFileBuild(
28
+ type="dockerfile",
29
+ dockerfile_path=dockerfile_path,
30
+ )
31
+
32
+
33
+ def build(
34
+ tag: str,
35
+ build_configuration: TaskPySparkBuild,
36
+ extra_opts: Optional[List[str]] = None,
37
+ ):
38
+ mount_python_package_manager_conf_secret = (
39
+ has_python_package_manager_conf_secret(extra_opts) if extra_opts else False
40
+ )
41
+
42
+ with TemporaryDirectory() as local_dir:
43
+ docker_build_configuration = _convert_to_dockerfile_build_config(
44
+ build_configuration,
45
+ dockerfile_path=os.path.join(local_dir, "Dockerfile"),
46
+ mount_python_package_manager_conf_secret=mount_python_package_manager_conf_secret,
47
+ )
48
+ dockerfile.build(
49
+ tag=tag,
50
+ build_configuration=docker_build_configuration,
51
+ extra_opts=extra_opts,
52
+ )
@@ -0,0 +1,121 @@
1
+ from mako.template import Template
2
+
3
+ from truefoundry.common.constants import ENV_VARS, PythonPackageManager
4
+ from truefoundry.deploy._autogen.models import TaskPySparkBuild
5
+ from truefoundry.deploy.builder.constants import (
6
+ PIP_CONF_BUILDKIT_SECRET_MOUNT,
7
+ UV_CONF_BUILDKIT_SECRET_MOUNT,
8
+ )
9
+ from truefoundry.deploy.builder.utils import (
10
+ generate_apt_install_command,
11
+ generate_pip_install_command,
12
+ generate_uv_pip_install_command,
13
+ )
14
+ from truefoundry.deploy.v2.lib.patched_models import (
15
+ _resolve_requirements_path,
16
+ )
17
+
18
+ # TODO[GW]: Switch to a non-root user inside the container
19
+ _POST_PYTHON_INSTALL_TEMPLATE = """
20
+ % if apt_install_command is not None:
21
+ RUN ${apt_install_command}
22
+ % endif
23
+ % if requirements_path is not None:
24
+ COPY ${requirements_path} ${requirements_destination_path}
25
+ % endif
26
+ % if python_packages_install_command is not None:
27
+ RUN ${package_manager_config_secret_mount} ${python_packages_install_command}
28
+ % endif
29
+ COPY . /app
30
+ WORKDIR /app
31
+ """
32
+
33
+ # TODO[GW]: Check if the entrypoint for the image needs to change
34
+ # Using /opt/venv/ because flyte seems to be using it and this doesn't look configurable
35
+ # TODO[GW]: Double check this^
36
+ DOCKERFILE_TEMPLATE = Template(
37
+ """
38
+ FROM ${spark_image_repo}:${spark_version}
39
+ ENV PATH=/opt/venv/bin:$PATH
40
+ USER root
41
+ RUN mkdir -p /var/lib/apt/lists/partial && \
42
+ apt update && \
43
+ DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends git && \
44
+ python -m venv /opt/venv/ && \
45
+ rm -rf /var/lib/apt/lists/*
46
+ """
47
+ + _POST_PYTHON_INSTALL_TEMPLATE
48
+ )
49
+
50
+
51
+ def get_additional_pip_packages(build_configuration: TaskPySparkBuild):
52
+ return [
53
+ f"pyspark=={build_configuration.spark_version}",
54
+ ]
55
+
56
+
57
+ def generate_dockerfile_content(
58
+ build_configuration: TaskPySparkBuild,
59
+ package_manager: str = ENV_VARS.TFY_PYTHON_BUILD_PACKAGE_MANAGER,
60
+ mount_python_package_manager_conf_secret: bool = False,
61
+ ) -> str:
62
+ # TODO (chiragjn): Handle recursive references to other requirements files e.g. `-r requirements-gpu.txt`
63
+ requirements_path = _resolve_requirements_path(
64
+ build_context_path="",
65
+ requirements_path=build_configuration.requirements_path,
66
+ )
67
+ requirements_destination_path = (
68
+ "/tmp/requirements.txt" if requirements_path else None
69
+ )
70
+ # if not build_configuration.python_version:
71
+ # raise ValueError(
72
+ # "`python_version` is required for `tfy-python-buildpack` builder"
73
+ # )
74
+ pip_packages = get_additional_pip_packages(build_configuration) + (
75
+ build_configuration.pip_packages or []
76
+ )
77
+ if package_manager == PythonPackageManager.PIP.value:
78
+ python_packages_install_command = generate_pip_install_command(
79
+ requirements_path=requirements_destination_path,
80
+ pip_packages=pip_packages,
81
+ mount_pip_conf_secret=mount_python_package_manager_conf_secret,
82
+ )
83
+ elif package_manager == PythonPackageManager.UV.value:
84
+ python_packages_install_command = generate_uv_pip_install_command(
85
+ requirements_path=requirements_destination_path,
86
+ pip_packages=pip_packages,
87
+ mount_uv_conf_secret=mount_python_package_manager_conf_secret,
88
+ )
89
+ else:
90
+ raise ValueError(f"Unsupported package manager: {package_manager}")
91
+
92
+ apt_install_command = generate_apt_install_command(
93
+ apt_packages=build_configuration.apt_packages
94
+ )
95
+ template_args = {
96
+ "spark_image_repo": ENV_VARS.TFY_TASK_PYSPARK_BUILD_SPARK_IMAGE_REPO,
97
+ "spark_version": build_configuration.spark_version,
98
+ "apt_install_command": apt_install_command,
99
+ "requirements_path": requirements_path,
100
+ "requirements_destination_path": requirements_destination_path,
101
+ "python_packages_install_command": python_packages_install_command,
102
+ }
103
+
104
+ if mount_python_package_manager_conf_secret:
105
+ if package_manager == PythonPackageManager.PIP.value:
106
+ template_args["package_manager_config_secret_mount"] = (
107
+ PIP_CONF_BUILDKIT_SECRET_MOUNT
108
+ )
109
+ elif package_manager == PythonPackageManager.UV.value:
110
+ template_args["package_manager_config_secret_mount"] = (
111
+ UV_CONF_BUILDKIT_SECRET_MOUNT
112
+ )
113
+ else:
114
+ raise ValueError(f"Unsupported package manager: {package_manager}")
115
+ else:
116
+ template_args["package_manager_config_secret_mount"] = ""
117
+
118
+ template = DOCKERFILE_TEMPLATE
119
+
120
+ dockerfile_content = template.render(**template_args)
121
+ return dockerfile_content