truefoundry 0.4.4rc3__tar.gz → 0.4.4rc5__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 (347) hide show
  1. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/PKG-INFO +2 -1
  2. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/pyproject.toml +2 -1
  3. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/common/constants.py +21 -0
  4. truefoundry-0.4.4rc5/truefoundry/common/tfy_signed_url_client.py +251 -0
  5. truefoundry-0.4.4rc5/truefoundry/common/tfy_signed_url_fs.py +232 -0
  6. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/python_deploy_codegen.py +12 -11
  7. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/workflow/__init__.py +5 -0
  8. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/README.md +0 -0
  9. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/__init__.py +0 -0
  10. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/__init__.py +0 -0
  11. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/agents/__init__.py +0 -0
  12. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/agents/base.py +0 -0
  13. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/agents/developer.py +0 -0
  14. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/agents/project_identifier.py +0 -0
  15. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/agents/tester.py +0 -0
  16. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/cli.py +0 -0
  17. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/constants.py +0 -0
  18. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/exception.py +0 -0
  19. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/logger.py +0 -0
  20. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/tools/__init__.py +0 -0
  21. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/tools/ask.py +0 -0
  22. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/tools/base.py +0 -0
  23. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/tools/commit.py +0 -0
  24. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/tools/docker_build.py +0 -0
  25. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/tools/docker_run.py +0 -0
  26. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/tools/file_type_counts.py +0 -0
  27. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/tools/list_files.py +0 -0
  28. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/tools/read_file.py +0 -0
  29. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/tools/send_request.py +0 -0
  30. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/tools/write_file.py +0 -0
  31. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/utils/client.py +0 -0
  32. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/utils/diff.py +0 -0
  33. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/autodeploy/utils/pydantic_compat.py +0 -0
  34. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/cli/__init__.py +0 -0
  35. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/cli/__main__.py +0 -0
  36. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/common/__init__.py +0 -0
  37. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/common/auth_service_client.py +0 -0
  38. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/common/credential_file_manager.py +0 -0
  39. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/common/credential_provider.py +0 -0
  40. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/common/entities.py +0 -0
  41. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/common/exceptions.py +0 -0
  42. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/common/request_utils.py +0 -0
  43. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/common/servicefoundry_client.py +0 -0
  44. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/common/utils.py +0 -0
  45. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/__init__.py +0 -0
  46. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/auto_gen/models.py +0 -0
  47. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/builder/__init__.py +0 -0
  48. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/builder/builders/__init__.py +0 -0
  49. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/builder/builders/dockerfile.py +0 -0
  50. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/builder/builders/tfy_notebook_buildpack/__init__.py +0 -0
  51. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/builder/builders/tfy_notebook_buildpack/dockerfile_template.py +0 -0
  52. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/builder/builders/tfy_python_buildpack/__init__.py +0 -0
  53. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/builder/builders/tfy_python_buildpack/dockerfile_template.py +0 -0
  54. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/builder/constants.py +0 -0
  55. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/builder/docker_service.py +0 -0
  56. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/builder/utils.py +0 -0
  57. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/__init__.py +0 -0
  58. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/cli.py +0 -0
  59. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/__init__.py +0 -0
  60. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/apply_command.py +0 -0
  61. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/build_command.py +0 -0
  62. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/build_logs_command.py +0 -0
  63. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/create_command.py +0 -0
  64. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/delete_command.py +0 -0
  65. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/deploy_command.py +0 -0
  66. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/get_command.py +0 -0
  67. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/list_command.py +0 -0
  68. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/login_command.py +0 -0
  69. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/logout_command.py +0 -0
  70. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/logs_command.py +0 -0
  71. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/patch_application_command.py +0 -0
  72. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/patch_command.py +0 -0
  73. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/redeploy_command.py +0 -0
  74. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/terminate_comand.py +0 -0
  75. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/commands/trigger_command.py +0 -0
  76. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/config.py +0 -0
  77. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/console.py +0 -0
  78. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/const.py +0 -0
  79. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/display_util.py +0 -0
  80. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/cli/util.py +0 -0
  81. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/core/__init__.py +0 -0
  82. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/core/login.py +0 -0
  83. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/core/logout.py +0 -0
  84. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/function_service/__init__.py +0 -0
  85. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/function_service/__main__.py +0 -0
  86. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/function_service/app.py +0 -0
  87. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/function_service/build.py +0 -0
  88. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/function_service/remote/__init__.py +0 -0
  89. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/function_service/remote/context.py +0 -0
  90. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/function_service/remote/method.py +0 -0
  91. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/function_service/remote/remote.py +0 -0
  92. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/function_service/route.py +0 -0
  93. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/function_service/service.py +0 -0
  94. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/function_service/utils.py +0 -0
  95. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/io/__init__.py +0 -0
  96. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/io/output_callback.py +0 -0
  97. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/io/rich_output_callback.py +0 -0
  98. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/json_util.py +0 -0
  99. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/__init__.py +0 -0
  100. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/auth/servicefoundry_session.py +0 -0
  101. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/clients/__init__.py +0 -0
  102. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/clients/servicefoundry_client.py +0 -0
  103. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/const.py +0 -0
  104. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/dao/__init__.py +0 -0
  105. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/dao/application.py +0 -0
  106. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/dao/apply.py +0 -0
  107. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/dao/version.py +0 -0
  108. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/dao/workspace.py +0 -0
  109. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/exceptions.py +0 -0
  110. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/logs_utils.py +0 -0
  111. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/messages.py +0 -0
  112. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/model/__init__.py +0 -0
  113. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/model/entity.py +0 -0
  114. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/session.py +0 -0
  115. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/util.py +0 -0
  116. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/lib/win32.py +0 -0
  117. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/v2/__init__.py +0 -0
  118. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/v2/lib/__init__.py +0 -0
  119. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/v2/lib/deploy.py +0 -0
  120. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/v2/lib/deploy_workflow.py +0 -0
  121. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/v2/lib/deployable_patched_models.py +0 -0
  122. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/v2/lib/models.py +0 -0
  123. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/v2/lib/patched_models.py +0 -0
  124. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/deploy/v2/lib/source.py +0 -0
  125. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/langchain/__init__.py +0 -0
  126. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/langchain/deprecated.py +0 -0
  127. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/langchain/truefoundry_chat.py +0 -0
  128. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/langchain/truefoundry_embeddings.py +0 -0
  129. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/langchain/truefoundry_llm.py +0 -0
  130. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/langchain/utils.py +0 -0
  131. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/logger.py +0 -0
  132. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/__init__.py +0 -0
  133. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/artifact/__init__.py +0 -0
  134. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/artifact/truefoundry_artifact_repo.py +0 -0
  135. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/__init__.py +0 -0
  136. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/__init__.py +0 -0
  137. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/api/__init__.py +0 -0
  138. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/api/auth_api.py +0 -0
  139. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/api/deprecated_api.py +0 -0
  140. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/api/experiments_api.py +0 -0
  141. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/api/health_api.py +0 -0
  142. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/api/metrics_api.py +0 -0
  143. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/api/mlfoundry_artifacts_api.py +0 -0
  144. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/api/python_deployment_config_api.py +0 -0
  145. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/api/run_artifacts_api.py +0 -0
  146. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/api/runs_api.py +0 -0
  147. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/api_client.py +0 -0
  148. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/api_response.py +0 -0
  149. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/configuration.py +0 -0
  150. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/exceptions.py +0 -0
  151. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/__init__.py +0 -0
  152. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/add_custom_metrics_to_model_version_request_dto.py +0 -0
  153. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/add_features_to_model_version_request_dto.py +0 -0
  154. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/agent.py +0 -0
  155. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/agent_app.py +0 -0
  156. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/agent_open_api_tool.py +0 -0
  157. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/agent_open_api_tool_with_fqn.py +0 -0
  158. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/agent_with_fqn.py +0 -0
  159. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/artifact_dto.py +0 -0
  160. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/artifact_response_dto.py +0 -0
  161. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/artifact_type.py +0 -0
  162. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/artifact_version_dto.py +0 -0
  163. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/artifact_version_response_dto.py +0 -0
  164. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/artifact_version_status.py +0 -0
  165. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/assistant_message.py +0 -0
  166. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/authorize_user_for_model_request_dto.py +0 -0
  167. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/authorize_user_for_model_version_request_dto.py +0 -0
  168. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/blob_storage_reference.py +0 -0
  169. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/body_get_search_runs_get.py +0 -0
  170. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/chat_prompt.py +0 -0
  171. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/chat_prompt_messages_inner.py +0 -0
  172. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/columns_dto.py +0 -0
  173. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/content.py +0 -0
  174. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/content1.py +0 -0
  175. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/content2.py +0 -0
  176. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/content2_any_of_inner.py +0 -0
  177. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_artifact_request_dto.py +0 -0
  178. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_artifact_response_dto.py +0 -0
  179. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_artifact_version_request_dto.py +0 -0
  180. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_artifact_version_response_dto.py +0 -0
  181. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_dataset_request_dto.py +0 -0
  182. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_experiment_request_dto.py +0 -0
  183. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_experiment_response_dto.py +0 -0
  184. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_model_version_request_dto.py +0 -0
  185. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_multi_part_upload_for_dataset_request_dto.py +0 -0
  186. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_multi_part_upload_for_dataset_response_dto.py +0 -0
  187. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_multi_part_upload_request_dto.py +0 -0
  188. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_python_deployment_config_request_dto.py +0 -0
  189. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_python_deployment_config_response_dto.py +0 -0
  190. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_run_request_dto.py +0 -0
  191. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/create_run_response_dto.py +0 -0
  192. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/dataset_dto.py +0 -0
  193. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/dataset_response_dto.py +0 -0
  194. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/delete_artifact_versions_request_dto.py +0 -0
  195. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/delete_dataset_request_dto.py +0 -0
  196. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/delete_files_for_dataset_request_dto.py +0 -0
  197. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/delete_model_version_request_dto.py +0 -0
  198. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/delete_run_request.py +0 -0
  199. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/delete_tag_request_dto.py +0 -0
  200. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/experiment_dto.py +0 -0
  201. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/experiment_id_request_dto.py +0 -0
  202. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/experiment_response_dto.py +0 -0
  203. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/experiment_tag_dto.py +0 -0
  204. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/feature_dto.py +0 -0
  205. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/feature_value_type.py +0 -0
  206. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/file_info_dto.py +0 -0
  207. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/finalize_artifact_version_request_dto.py +0 -0
  208. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/get_experiment_response_dto.py +0 -0
  209. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/get_latest_run_log_response_dto.py +0 -0
  210. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/get_metric_history_response.py +0 -0
  211. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/get_signed_url_for_dataset_write_request_dto.py +0 -0
  212. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/get_signed_urls_for_artifact_version_read_request_dto.py +0 -0
  213. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/get_signed_urls_for_artifact_version_read_response_dto.py +0 -0
  214. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/get_signed_urls_for_artifact_version_write_request_dto.py +0 -0
  215. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/get_signed_urls_for_artifact_version_write_response_dto.py +0 -0
  216. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/get_signed_urls_for_dataset_read_request_dto.py +0 -0
  217. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/get_signed_urls_for_dataset_read_response_dto.py +0 -0
  218. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/get_signed_urls_for_dataset_write_response_dto.py +0 -0
  219. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/get_tenant_id_response_dto.py +0 -0
  220. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/http_validation_error.py +0 -0
  221. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/image_content_part.py +0 -0
  222. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/image_url.py +0 -0
  223. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/internal_metadata.py +0 -0
  224. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/latest_run_log_dto.py +0 -0
  225. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_artifact_versions_request_dto.py +0 -0
  226. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_artifact_versions_response_dto.py +0 -0
  227. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_artifacts_request_dto.py +0 -0
  228. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_artifacts_response_dto.py +0 -0
  229. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_colums_response_dto.py +0 -0
  230. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_datasets_request_dto.py +0 -0
  231. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_datasets_response_dto.py +0 -0
  232. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_experiments_response_dto.py +0 -0
  233. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_files_for_artifact_version_request_dto.py +0 -0
  234. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_files_for_artifact_versions_response_dto.py +0 -0
  235. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_files_for_dataset_request_dto.py +0 -0
  236. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_files_for_dataset_response_dto.py +0 -0
  237. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_latest_run_logs_response_dto.py +0 -0
  238. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_metric_history_request_dto.py +0 -0
  239. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_metric_history_response_dto.py +0 -0
  240. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_model_version_response_dto.py +0 -0
  241. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_model_versions_request_dto.py +0 -0
  242. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_models_request_dto.py +0 -0
  243. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_models_response_dto.py +0 -0
  244. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_run_artifacts_response_dto.py +0 -0
  245. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_run_logs_response_dto.py +0 -0
  246. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/list_seed_experiments_response_dto.py +0 -0
  247. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/log_batch_request_dto.py +0 -0
  248. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/log_metric_request_dto.py +0 -0
  249. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/log_param_request_dto.py +0 -0
  250. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/method.py +0 -0
  251. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/metric_collection_dto.py +0 -0
  252. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/metric_dto.py +0 -0
  253. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/mime_type.py +0 -0
  254. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/model_configuration.py +0 -0
  255. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/model_dto.py +0 -0
  256. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/model_response_dto.py +0 -0
  257. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/model_schema_dto.py +0 -0
  258. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/model_version_dto.py +0 -0
  259. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/model_version_response_dto.py +0 -0
  260. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/multi_part_upload_dto.py +0 -0
  261. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/multi_part_upload_response_dto.py +0 -0
  262. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/multi_part_upload_storage_provider.py +0 -0
  263. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/notify_artifact_version_failure_dto.py +0 -0
  264. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/openapi_spec.py +0 -0
  265. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/param_dto.py +0 -0
  266. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/parameters.py +0 -0
  267. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/prediction_type.py +0 -0
  268. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/resolve_agent_app_response_dto.py +0 -0
  269. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/restore_run_request_dto.py +0 -0
  270. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/run_data_dto.py +0 -0
  271. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/run_dto.py +0 -0
  272. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/run_info_dto.py +0 -0
  273. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/run_log_dto.py +0 -0
  274. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/run_log_input_dto.py +0 -0
  275. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/run_response_dto.py +0 -0
  276. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/run_tag_dto.py +0 -0
  277. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/search_runs_request_dto.py +0 -0
  278. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/search_runs_response_dto.py +0 -0
  279. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/set_experiment_tag_request_dto.py +0 -0
  280. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/set_tag_request_dto.py +0 -0
  281. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/signed_url_dto.py +0 -0
  282. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/stop.py +0 -0
  283. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/store_run_logs_request_dto.py +0 -0
  284. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/system_message.py +0 -0
  285. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/text.py +0 -0
  286. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/text_content_part.py +0 -0
  287. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/update_artifact_version_request_dto.py +0 -0
  288. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/update_dataset_request_dto.py +0 -0
  289. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/update_experiment_request_dto.py +0 -0
  290. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/update_model_version_request_dto.py +0 -0
  291. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/update_run_request_dto.py +0 -0
  292. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/update_run_response_dto.py +0 -0
  293. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/url.py +0 -0
  294. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/user_message.py +0 -0
  295. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/validation_error.py +0 -0
  296. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/models/validation_error_loc_inner.py +0 -0
  297. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client/rest.py +0 -0
  298. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/client_README.md +0 -0
  299. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/autogen/entities/artifacts.py +0 -0
  300. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/cli/__init__.py +0 -0
  301. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/cli/cli.py +0 -0
  302. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/cli/commands/__init__.py +0 -0
  303. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/cli/commands/download.py +0 -0
  304. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/clients/__init__.py +0 -0
  305. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/clients/entities.py +0 -0
  306. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/clients/servicefoundry_client.py +0 -0
  307. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/clients/utils.py +0 -0
  308. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/constants.py +0 -0
  309. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/entities.py +0 -0
  310. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/enums.py +0 -0
  311. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/exceptions.py +0 -0
  312. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/git_info.py +0 -0
  313. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/internal_namespace.py +0 -0
  314. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/__init__.py +0 -0
  315. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/artifacts/artifact.py +0 -0
  316. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/artifacts/constants.py +0 -0
  317. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/artifacts/dataset.py +0 -0
  318. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/artifacts/general_artifact.py +0 -0
  319. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/artifacts/model.py +0 -0
  320. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/artifacts/model_extras.py +0 -0
  321. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/artifacts/utils.py +0 -0
  322. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/image/__init__.py +0 -0
  323. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/image/constants.py +0 -0
  324. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/image/image.py +0 -0
  325. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/image/image_normalizer.py +0 -0
  326. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/image/types.py +0 -0
  327. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/plot.py +0 -0
  328. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/pydantic_base.py +0 -0
  329. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/log_types/utils.py +0 -0
  330. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/logger.py +0 -0
  331. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/mlfoundry_api.py +0 -0
  332. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/mlfoundry_run.py +0 -0
  333. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/run_utils.py +0 -0
  334. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/session.py +0 -0
  335. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/ml/validation_utils.py +0 -0
  336. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/pydantic_v1.py +0 -0
  337. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/version.py +0 -0
  338. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/workflow/container_task.py +0 -0
  339. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/workflow/example/deploy.sh +0 -0
  340. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/workflow/example/hello_world_package/workflow.py +0 -0
  341. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/workflow/example/package/test_workflow.py +0 -0
  342. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/workflow/example/truefoundry.yaml +0 -0
  343. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/workflow/example/workflow.yaml +0 -0
  344. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/workflow/map_task.py +0 -0
  345. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/workflow/python_task.py +0 -0
  346. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/workflow/task.py +0 -0
  347. {truefoundry-0.4.4rc3 → truefoundry-0.4.4rc5}/truefoundry/workflow/workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: truefoundry
3
- Version: 0.4.4rc3
3
+ Version: 0.4.4rc5
4
4
  Summary: Truefoundry CLI
5
5
  Author: Abhishek Choudhary
6
6
  Author-email: abhishek@truefoundry.com
@@ -22,6 +22,7 @@ Requires-Dist: docker (>=6.1.2,<8.0.0)
22
22
  Requires-Dist: fastapi (>=0.56.0,<0.200.0)
23
23
  Requires-Dist: filelock (>=3.8.0,<4.0.0)
24
24
  Requires-Dist: flytekit (==1.12.2) ; extra == "workflow"
25
+ Requires-Dist: fsspec (>=2024.9.0,<2025.0.0)
25
26
  Requires-Dist: gitignorefile (>=1.1.2,<2.0.0)
26
27
  Requires-Dist: importlib-metadata (>=4.11.3,<9.0.0)
27
28
  Requires-Dist: importlib-resources (>=5.2.0,<7.0.0)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "truefoundry"
3
- version = "0.4.4rc3"
3
+ version = "0.4.4rc5"
4
4
  description = "Truefoundry CLI"
5
5
  authors = ["Abhishek Choudhary <abhishek@truefoundry.com>"]
6
6
  readme = "README.md"
@@ -54,6 +54,7 @@ pandas = [
54
54
  { version = ">=1.0.0,<3.0.0", python = "<3.10" },
55
55
  { version = ">=1.4.0,<3.0.0", python = ">=3.10" },
56
56
  ]
57
+ fsspec = "^2024.9.0"
57
58
 
58
59
 
59
60
  [tool.poetry.extras]
@@ -11,12 +11,33 @@ CREDENTIAL_FILEPATH = TFY_CONFIG_DIR / "credentials.json"
11
11
  TFY_HOST_ENV_KEY = "TFY_HOST"
12
12
  TFY_API_KEY_ENV_KEY = "TFY_API_KEY"
13
13
 
14
+ TFY_INTERNAL_SIGNED_URL_SERVER_HOST_ENV_KEY = "TFY_INTERNAL_SIGNED_URL_SERVER_HOST"
15
+ TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN_ENV_KEY = "TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN"
16
+ TFY_INTERNAL_SIGNED_URL_SERVER_DEFAULT_TTL_ENV_KEY = (
17
+ "TFY_INTERNAL_SIGNED_URL_SERVER_DEFAULT_TTL"
18
+ )
19
+ TFY_INTERNAL_SIGNED_URL_SERVER_MAX_TIMEOUT_ENV_KEY = (
20
+ "TFY_INTERNAL_SIGNED_URL_SERVER_MAX_TIMEOUT"
21
+ )
22
+
14
23
 
15
24
  class TrueFoundrySdkEnv(BaseSettings):
16
25
  # Note: Every field in this class should have a default value
17
26
  # Never expect the user to set these values
18
27
  TFY_HOST: Optional[str] = Field(default=None, env=TFY_HOST_ENV_KEY)
19
28
  TFY_API_KEY: Optional[SecretStr] = Field(default=None, env=TFY_API_KEY_ENV_KEY)
29
+ TFY_INTERNAL_SIGNED_URL_SERVER_HOST: Optional[str] = Field(
30
+ default=None, env=TFY_INTERNAL_SIGNED_URL_SERVER_HOST_ENV_KEY
31
+ )
32
+ TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN: Optional[str] = Field(
33
+ default=None, env=TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN_ENV_KEY
34
+ )
35
+ TFY_INTERNAL_SIGNED_URL_SERVER_DEFAULT_TTL: int = Field(
36
+ default=3600, env=TFY_INTERNAL_SIGNED_URL_SERVER_DEFAULT_TTL_ENV_KEY
37
+ ) # 1 hour
38
+ TFY_INTERNAL_SIGNED_URL_SERVER_MAX_TIMEOUT: int = Field(
39
+ default=5, env=TFY_INTERNAL_SIGNED_URL_SERVER_MAX_TIMEOUT_ENV_KEY
40
+ ) # 5 seconds
20
41
  TFY_ARTIFACTS_DOWNLOAD_CHUNK_SIZE_BYTES: int = 100 * 1000 * 1000
21
42
  TFY_ARTIFACTS_DOWNLOAD_MAX_WORKERS: int = max(min(32, (os.cpu_count() or 2) * 2), 4)
22
43
  TFY_ARTIFACTS_UPLOAD_MAX_WORKERS: int = max(min(32, (os.cpu_count() or 2) * 2), 4)
@@ -0,0 +1,251 @@
1
+ # file: client.py
2
+ from enum import Enum
3
+ from typing import Any, Dict, List, Optional
4
+ from urllib.parse import urlencode, urljoin
5
+
6
+ import requests
7
+ from requests.exceptions import RequestException
8
+
9
+ from truefoundry.common.constants import ENV_VARS
10
+ from truefoundry.pydantic_v1 import BaseModel, Field
11
+
12
+ DEFAULT_TTL = ENV_VARS.TFY_INTERNAL_SIGNED_URL_SERVER_DEFAULT_TTL
13
+ MAX_TIMEOUT = ENV_VARS.TFY_INTERNAL_SIGNED_URL_SERVER_MAX_TIMEOUT
14
+
15
+
16
+ class SignedURLAPIResponseDto(BaseModel):
17
+ uri: str
18
+ signed_url: str
19
+ headers: Optional[Dict[str, Any]] = None
20
+
21
+
22
+ class SignedURLIsDirectoryAPIResponseDto(BaseModel):
23
+ is_directory: bool = Field(..., alias="isDirectory")
24
+
25
+
26
+ class SignedURLExistsAPIResponseDto(BaseModel):
27
+ exists: bool
28
+
29
+
30
+ class FileInfo(BaseModel):
31
+ path: str
32
+ is_directoy: bool = Field(..., alias="isDirectory")
33
+ bytes: Optional[int] = None
34
+ signedUrl: Optional[str] = None
35
+
36
+
37
+ class PagedList(BaseModel):
38
+ items: List[FileInfo]
39
+ token: Optional[str] = None
40
+
41
+
42
+ class SignedURLServerEndpoint(str, Enum):
43
+ """Enumeration for Signed URL Server endpoints."""
44
+
45
+ READ = "/v1/signed-uri/read"
46
+ WRITE = "/v1/signed-uri/write"
47
+ EXISTS = "/v1/exists"
48
+ IS_DIRECTORY = "/v1/is-dir"
49
+ LIST_FILES = "/v1/list-files"
50
+
51
+
52
+ class SignedURLClient:
53
+ """Client to interact with the Signed URL Server for file operations."""
54
+
55
+ def __init__(
56
+ self,
57
+ base_url: Optional[str] = None,
58
+ token: Optional[str] = None,
59
+ ttl: int = DEFAULT_TTL,
60
+ ):
61
+ """
62
+ Initialize the SignedURLClient.
63
+
64
+ Args:
65
+ base_url (str): Base URL of the signed URL server (optional).
66
+ token (str): Token for authentication (optional).
67
+ ttl (int): Default time-to-live for signed URLs in seconds.
68
+ """
69
+ self.base_url = base_url or ENV_VARS.TFY_INTERNAL_SIGNED_URL_SERVER_HOST
70
+ self.token = token or ENV_VARS.TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN
71
+ self.ttl = ttl
72
+
73
+ self.headers = {
74
+ "Authorization": f"Bearer {self.token}",
75
+ "Content-Type": "application/json",
76
+ }
77
+
78
+ def _make_request(
79
+ self, endpoint: str, method: str = "GET", payload: Optional[Dict] = None
80
+ ) -> Dict:
81
+ """
82
+ Internal method to handle requests to the signed URL server.
83
+
84
+ Args:
85
+ endpoint (str): The endpoint for the request.
86
+ method (str): HTTP method (GET, POST, etc.).
87
+ payload (Dict, optional): JSON payload for the request.
88
+
89
+ Returns:
90
+ Dict: JSON response from the server.
91
+
92
+ Raises:
93
+ RuntimeError: For network errors or invalid responses.
94
+ """
95
+ url = urljoin(self.base_url, endpoint)
96
+ try:
97
+ response = requests.request(
98
+ method, url, headers=self.headers, json=payload, timeout=MAX_TIMEOUT
99
+ )
100
+ response.raise_for_status()
101
+ return response.json()
102
+ except RequestException as e:
103
+ raise RuntimeError(f"Error during request to {url}: {e}") from e
104
+
105
+ def _make_server_api_call(
106
+ self, endpoint: SignedURLServerEndpoint, params: Optional[Dict] = None
107
+ ) -> Dict:
108
+ """Get a signed URL for the specified operation and URI."""
109
+ query_string = urlencode(params or {})
110
+ endpoint_with_params = f"{endpoint.value}?{query_string}"
111
+ return self._make_request(endpoint_with_params)
112
+
113
+ def _upload_data(self, signed_url: str, data: Any) -> None:
114
+ """Helper method to upload data to the signed URL."""
115
+ try:
116
+ # TODO: Add TIMEOUT to this request
117
+ response = requests.put(
118
+ signed_url,
119
+ headers={"Content-Type": "application/octet-stream"},
120
+ data=data,
121
+ )
122
+ response.raise_for_status()
123
+ except Exception as e:
124
+ raise RuntimeError(f"Failed to upload data: {e}") from e
125
+
126
+ def upload_from_bytes(self, data: bytes, storage_uri: str) -> str:
127
+ """Upload bytes to the specified storage path using a signed URL."""
128
+ signed_object = self._make_server_api_call(
129
+ endpoint=SignedURLServerEndpoint.WRITE,
130
+ params={"uri": storage_uri, "expiryInSeconds": self.ttl},
131
+ )
132
+ pre_signed_object_dto = SignedURLAPIResponseDto.parse_obj(signed_object)
133
+ self._upload_data(pre_signed_object_dto.signed_url, data)
134
+ return storage_uri
135
+
136
+ def upload(self, file_path: str, storage_uri: str) -> str:
137
+ """Upload a file to the specified storage path using a signed URL."""
138
+ print(f"Uploading {file_path} to {storage_uri}")
139
+ response = self._make_server_api_call(
140
+ endpoint=SignedURLServerEndpoint.WRITE,
141
+ params={"uri": storage_uri, "expiryInSeconds": self.ttl},
142
+ )
143
+ pre_signed_object_dto = SignedURLAPIResponseDto.parse_obj(response)
144
+ with open(file_path, "rb") as file:
145
+ self._upload_data(pre_signed_object_dto.signed_url, file)
146
+ return storage_uri
147
+
148
+ def _download_file(
149
+ self, signed_url: str, local_path: Optional[str] = None
150
+ ) -> Optional[bytes]:
151
+ """Common method to download a file using a signed URL.
152
+
153
+ Args:
154
+ signed_url (str): The signed URL to download from.
155
+ local_path (Optional[str]): The local path to save the file. If None, the file will not be saved.
156
+
157
+ Returns:
158
+ Optional[bytes]: The content of the downloaded file if local_path is None; otherwise, None.
159
+ """
160
+ try:
161
+ # TODO: Add TIMEOUT to this request
162
+ response = requests.get(
163
+ signed_url,
164
+ stream=True,
165
+ headers=self.headers,
166
+ )
167
+ response.raise_for_status()
168
+
169
+ if local_path:
170
+ with open(local_path, "wb") as file:
171
+ for chunk in response.iter_content(chunk_size=8192):
172
+ file.write(chunk)
173
+ return None # File saved successfully; no need to return content.
174
+
175
+ return response.content # Return the content if not saving to a local path.
176
+
177
+ except requests.RequestException as e:
178
+ raise RuntimeError(f"Failed to download file from {signed_url}: {e}") from e
179
+
180
+ def download(self, storage_uri: str, local_path: str) -> Optional[str]:
181
+ """Download a file from the specified storage path to a local path using a signed URL.
182
+
183
+ Args:
184
+ storage_uri (str): The storage URI to download the file from.
185
+ local_path (str): The local path to save the downloaded file.
186
+
187
+ Returns:
188
+ Optional[str]: The local path if successful; None if the file is saved.
189
+ """
190
+ print(f"Dowloading {storage_uri} to {local_path}")
191
+ response = self._make_server_api_call(
192
+ endpoint=SignedURLServerEndpoint.READ,
193
+ params={"uri": storage_uri, "expiryInSeconds": self.ttl},
194
+ )
195
+ presigned_object = SignedURLAPIResponseDto.parse_obj(response)
196
+ self._download_file(presigned_object.signed_url, local_path)
197
+ return local_path # Indicate successful download.
198
+
199
+ def download_to_bytes(self, storage_uri: str) -> bytes:
200
+ """Download a file from the specified storage path and return it as bytes.
201
+
202
+ Args:
203
+ storage_uri (str): The storage URI to download the file from.
204
+
205
+ Returns:
206
+ bytes: The content of the downloaded file.
207
+ """
208
+ response = self._make_server_api_call(
209
+ endpoint=SignedURLServerEndpoint.READ,
210
+ params={"uri": storage_uri, "expiryInSeconds": self.ttl},
211
+ )
212
+ presigned_object = SignedURLAPIResponseDto.parse_obj(response)
213
+ return self._download_file(presigned_object.signed_url)
214
+
215
+ def exists(self, uri: str) -> bool:
216
+ """Check if a file exists at the specified path."""
217
+ response = self._make_server_api_call(
218
+ endpoint=SignedURLServerEndpoint.EXISTS, params={"uri": uri}
219
+ )
220
+ response_obj = SignedURLExistsAPIResponseDto.parse_obj(response)
221
+ return response_obj.exists
222
+
223
+ def is_directory(self, uri: str) -> bool:
224
+ """Check if the specified URI is a directory."""
225
+ response = self._make_server_api_call(
226
+ endpoint=SignedURLServerEndpoint.IS_DIRECTORY, params={"path": uri}
227
+ )
228
+ response_obj = SignedURLIsDirectoryAPIResponseDto.parse_obj(response)
229
+ print(f"Path {uri} is_directory: {response_obj.is_directory}")
230
+ return response_obj.is_directory
231
+
232
+ def list_files(self, path: str, detail: bool = False, max_results: int = 1000):
233
+ """List files in the specified directory."""
234
+ token = ""
235
+ items: List[FileInfo] = []
236
+ # Fetch all files in the specified path, in pages of max_results
237
+ while True:
238
+ response = self._make_server_api_call(
239
+ endpoint=SignedURLServerEndpoint.LIST_FILES,
240
+ params={"path": path, "maxResults": max_results, "pageToken": token},
241
+ )
242
+ response_obj = PagedList.parse_obj(response)
243
+ items.extend(response_obj.items)
244
+ token = response_obj.token
245
+ if not token:
246
+ break
247
+
248
+ # Return the items or paths based on the detail flag
249
+ if detail:
250
+ return items
251
+ return [item.path for item in items]
@@ -0,0 +1,232 @@
1
+ # file: tfy_signed_url_fs.py
2
+ # pylint: disable=W0223
3
+ import io
4
+ import os
5
+ from pathlib import Path
6
+ from typing import Optional
7
+
8
+ from fsspec.spec import DEFAULT_CALLBACK, AbstractBufferedFile, AbstractFileSystem
9
+
10
+ from truefoundry.common.constants import ENV_VARS
11
+ from truefoundry.common.tfy_signed_url_client import SignedURLClient
12
+
13
+
14
+ class SignedURLFileSystem(AbstractFileSystem):
15
+ def __init__(self, base_url: Optional[str] = None, token: Optional[str] = None):
16
+ super().__init__()
17
+ base_url = base_url or ENV_VARS.TFY_INTERNAL_SIGNED_URL_SERVER_HOST
18
+ token = token or ENV_VARS.TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN
19
+ self.client = SignedURLClient(base_url, token)
20
+
21
+ def exists(self, path, **kwargs):
22
+ """Is there a file at the given path"""
23
+ return self.client.exists(path)
24
+
25
+ def get(
26
+ self,
27
+ rpath,
28
+ lpath,
29
+ recursive=False,
30
+ callback=DEFAULT_CALLBACK,
31
+ maxdepth=None,
32
+ **kwargs,
33
+ ):
34
+ """Get file(s) to local"""
35
+ # TODO: Add support for ThreadPoolExecutor here
36
+ # TODO: Do a proper error handling here
37
+ # TODO: Add support for async download
38
+ if self.isdir(rpath):
39
+ if not recursive:
40
+ raise ValueError(
41
+ f"{rpath} is a directory, but recursive is not enabled."
42
+ )
43
+
44
+ # Handle recursive download
45
+ files = self.ls(rpath, detail=True)
46
+
47
+ for file_info in files:
48
+ file_path = file_info.path.rstrip("/").rsplit("/")[-1]
49
+
50
+ is_directory = file_info.is_directoy
51
+ # Construct the relative path for local download
52
+ relative_path = rpath.rstrip("/") + "/" + file_path
53
+ target_local_path = lpath.rstrip("/") + "/" + file_path
54
+
55
+ if is_directory:
56
+ # If it's a directory, create the directory locally
57
+ Path(target_local_path).mkdir(parents=True, exist_ok=True)
58
+ relative_path = relative_path + "/"
59
+ if recursive:
60
+ # Recursively download the contents of the directory
61
+ self.get(
62
+ relative_path,
63
+ target_local_path,
64
+ recursive=True,
65
+ maxdepth=maxdepth,
66
+ **kwargs,
67
+ )
68
+ else:
69
+ # Download the file
70
+ self.client.download(
71
+ storage_uri=relative_path, local_path=target_local_path
72
+ )
73
+
74
+ else:
75
+ target_local_path = lpath
76
+ if target_local_path.endswith("/"):
77
+ Path(target_local_path).mkdir(parents=True, exist_ok=True)
78
+ target_local_path = target_local_path + rpath.rsplit("/")[-1]
79
+ self.client.download(storage_uri=rpath, local_path=target_local_path)
80
+
81
+ def put(
82
+ self,
83
+ lpath,
84
+ rpath,
85
+ recursive=False,
86
+ callback=DEFAULT_CALLBACK,
87
+ maxdepth=None,
88
+ **kwargs,
89
+ ):
90
+ local_path = Path(lpath)
91
+ if local_path.is_dir():
92
+ if not recursive:
93
+ raise ValueError(
94
+ f"{lpath} is a directory, but recursive is set to False."
95
+ )
96
+
97
+ # Optionally limit recursion depth
98
+ max_depth = maxdepth if maxdepth is not None else float("inf")
99
+
100
+ # Walk through the directory structure
101
+ for root, _, files in os.walk(lpath):
102
+ current_depth = Path(root).relative_to(local_path).parts
103
+ if len(current_depth) > max_depth:
104
+ continue # Skip files deeper than the max depth
105
+
106
+ rel_dir = Path(root).relative_to(local_path)
107
+ remote_dir = (
108
+ rpath.rstrip("/")
109
+ if rel_dir == Path(".")
110
+ else rpath.rstrip("/") + "/" + str(rel_dir)
111
+ )
112
+
113
+ # Upload each file
114
+ for file in files:
115
+ local_file_path = Path(root) / file
116
+ remote_file_path = f"{remote_dir}/{file}"
117
+ self.client.upload(
118
+ file_path=str(local_file_path),
119
+ storage_uri=str(remote_file_path),
120
+ )
121
+ return None
122
+ else:
123
+ # Handle single file upload
124
+ return self.client.upload(
125
+ file_path=str(local_path), storage_uri=str(Path(rpath))
126
+ )
127
+
128
+ def isdir(self, path):
129
+ """Is this entry directory-like?"""
130
+ return self.client.is_directory(path)
131
+
132
+ def open(
133
+ self,
134
+ path,
135
+ mode="rb",
136
+ block_size=None,
137
+ cache_options=None,
138
+ compression=None,
139
+ **kwargs,
140
+ ):
141
+ """
142
+ Open a file for reading or writing.
143
+ """
144
+ if "r" in mode:
145
+ # Reading mode
146
+ file_content = self.client.download_to_bytes(path)
147
+ return io.BytesIO(file_content)
148
+ elif "w" in mode or "a" in mode:
149
+ # Writing mode (appending treated as writing)
150
+ buffer = io.BytesIO()
151
+ buffer.seek(0)
152
+
153
+ def on_close(buffer=buffer, path=path):
154
+ """
155
+ Callback when file is closed, automatically upload the content.
156
+ """
157
+ buffer.seek(0)
158
+ self.client.upload_from_bytes(buffer.read(), storage_uri=path)
159
+
160
+ # Wrapping the buffer to automatically upload on close
161
+ return io.BufferedWriter(buffer, on_close)
162
+
163
+ def write(self, path, data, **kwargs):
164
+ """
165
+ Write data to the file at the specified path (this could be tied to open's close).
166
+ """
167
+ if isinstance(data, io.BytesIO):
168
+ data.seek(0)
169
+ content = data.read()
170
+ elif isinstance(data, str):
171
+ content = data.encode() # Encode to bytes
172
+ else:
173
+ raise ValueError("Unsupported data type for writing")
174
+
175
+ # Upload the content to the remote file system
176
+ self.client.upload_from_bytes(content, storage_uri=path)
177
+
178
+ def ls(self, path, detail=True, **kwargs):
179
+ """List objects at path."""
180
+ return self.client.list_files(path, detail=detail)
181
+
182
+
183
+ class SignedURLBufferedFile(AbstractBufferedFile):
184
+ """
185
+ Buffered file implementation for Signed URL-based file system.
186
+ """
187
+
188
+ def __init__(
189
+ self, fs: SignedURLFileSystem, path: str, mode: str, block_size: int, **kwargs
190
+ ):
191
+ """
192
+ Initialize the buffered file, determining the mode (read/write).
193
+ """
194
+ super().__init__(fs, path, mode, block_size, **kwargs)
195
+ self.buffer = io.BytesIO()
196
+ self.client = fs.client
197
+
198
+ if "r" in mode:
199
+ # Download the file content for reading
200
+ file_content = fs.client.download_to_bytes(path)
201
+ self.buffer.write(file_content)
202
+ self.buffer.seek(0) # Reset buffer after writing content
203
+
204
+ def _upload_on_close(self):
205
+ """
206
+ Upload content back to the remote store when the file is closed.
207
+ """
208
+ self.buffer.seek(0)
209
+ self.client.upload_from_bytes(self.buffer.read(), storage_uri=self.path)
210
+
211
+ def close(self):
212
+ """
213
+ Close the file, ensuring the content is uploaded for write/append modes.
214
+ """
215
+ if self.writable():
216
+ self._upload_on_close()
217
+ self.buffer.close()
218
+ super().close()
219
+
220
+ def _fetch_range(self, start, end):
221
+ """
222
+ Fetch a specific byte range from the file. Useful for large files and range reads.
223
+ """
224
+ self.buffer.seek(start)
225
+ return self.buffer.read(end - start)
226
+
227
+ def _upload_chunk(self, final=False):
228
+ """
229
+ Upload a chunk of the file. For larger files, data may be uploaded in chunks.
230
+ """
231
+ if final:
232
+ self._upload_on_close()
@@ -107,16 +107,16 @@ def convert_deployment_config_to_python(workspace_fqn: str, application_spec: di
107
107
  Convert a deployment config to a python file that can be used to deploy to a workspace
108
108
  """
109
109
  application = Application.parse_obj(application_spec)
110
- application_type = application.__root__.type
111
-
110
+ application_obj = application.__root__
111
+ application_type = application_obj.type
112
112
  if (
113
- hasattr(application.__root__, "image")
114
- and application.__root__.image.type == "build"
115
- and application.__root__.image.build_source.type == "remote"
113
+ hasattr(application_obj, "image")
114
+ and application_obj.image.type == "build"
115
+ and application_obj.image.build_source.type == "remote"
116
116
  ):
117
- application.__root__.image.build_source = LocalSource(local_build=False)
117
+ application_obj.image.build_source = LocalSource(local_build=False)
118
118
 
119
- spec_repr = get_python_repr(application.__root__)
119
+ spec_repr = get_python_repr(application_obj)
120
120
  spec_repr = replace_enums_with_values(spec_repr)
121
121
  spec_repr = remove_none_type_fields(spec_repr)
122
122
  spec_repr = remove_type_field(spec_repr)
@@ -144,7 +144,8 @@ def convert_deployment_config_to_python(workspace_fqn: str, application_spec: di
144
144
  def generate_python_snippet_for_trigger_job(
145
145
  application_fqn: str, command: Optional[str], params: Optional[Dict[str, str]]
146
146
  ):
147
- job_run_python_template = """from truefoundry.deploy import trigger_job
147
+ job_run_python_template = """\
148
+ from truefoundry.deploy import trigger_job
148
149
 
149
150
  response = trigger_job(
150
151
  application_fqn="{{application_fqn}}",
@@ -160,16 +161,16 @@ print(response.jobRunName)
160
161
  )
161
162
 
162
163
  if command is not None:
163
- output_python_str = output_python_str.replace("{{command}}", repr(command))
164
164
  output_python_str = output_python_str.replace("# command", "command")
165
+ output_python_str = output_python_str.replace("{{command}}", repr(command))
165
166
  else:
166
167
  output_python_str = output_python_str.replace(
167
168
  "{{command}}", "<Enter Command Here>"
168
169
  )
169
170
 
170
171
  if params is not None:
171
- output_python_str = output_python_str.replace("{{params}}", repr(params))
172
172
  output_python_str = output_python_str.replace("# params", "params")
173
+ output_python_str = output_python_str.replace("{{params}}", repr(params))
173
174
  else:
174
175
  output_python_str = output_python_str.replace(
175
176
  "{{params}}", "<Enter Params(key-value pairs) here as python dict>"
@@ -195,7 +196,7 @@ def generate_curl_snippet_for_trigger_job(
195
196
  }'
196
197
  """
197
198
  output_curl_str = job_run_curl_request_template.replace(
198
- "{{control_plane_url}}", control_plane_url
199
+ "{{control_plane_url}}", control_plane_url.rstrip("/")
199
200
  )
200
201
  output_curl_str = output_curl_str.replace("{{application_id}}", application_id)
201
202
  output_curl_str = output_curl_str.replace(
@@ -1,4 +1,5 @@
1
1
  try:
2
+ import fsspec
2
3
  from flytekit import task as _
3
4
  except ImportError:
4
5
  print("To use workflows, please run 'pip install truefoundry[workflow]'.")
@@ -6,6 +7,7 @@ except ImportError:
6
7
  from flytekit import conditional
7
8
  from flytekit.types.directory import FlyteDirectory
8
9
 
10
+ from truefoundry.common.tfy_signed_url_fs import SignedURLFileSystem
9
11
  from truefoundry.deploy.v2.lib.patched_models import (
10
12
  ContainerTaskConfig,
11
13
  PythonTaskConfig,
@@ -32,3 +34,6 @@ __all__ = [
32
34
  "PythonTaskConfig",
33
35
  "ExecutionConfig",
34
36
  ]
37
+ print("SignedURL FS Spec registered for s3 and gs")
38
+ fsspec.register_implementation("s3", SignedURLFileSystem, clobber=True)
39
+ fsspec.register_implementation("gs", SignedURLFileSystem, clobber=True)
File without changes