truefoundry 0.4.2rc1__tar.gz → 0.4.2rc3__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.
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/PKG-INFO +1 -1
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/pyproject.toml +1 -1
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/common/constants.py +2 -1
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/common/servicefoundry_client.py +13 -7
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/common/utils.py +37 -10
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/auto_gen/models.py +11 -5
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/builder/__init__.py +2 -2
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/builder/builders/tfy_notebook_buildpack/__init__.py +7 -1
- truefoundry-0.4.2rc3/truefoundry/deploy/builder/builders/tfy_notebook_buildpack/dockerfile_template.py +79 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/builder/builders/tfy_python_buildpack/__init__.py +8 -2
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/builder/builders/tfy_python_buildpack/dockerfile_template.py +26 -3
- truefoundry-0.4.2rc3/truefoundry/deploy/builder/constants.py +7 -0
- truefoundry-0.4.2rc3/truefoundry/deploy/builder/utils.py +32 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/deploy_command.py +46 -2
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/util.py +4 -1
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/v2/lib/patched_models.py +4 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/clients/servicefoundry_client.py +1 -4
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/mlfoundry_run.py +29 -14
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/run_utils.py +0 -14
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/session.py +2 -5
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/workflow/example/hello_world_package/workflow.py +2 -2
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/workflow/example/package/test_workflow.py +14 -15
- truefoundry-0.4.2rc1/truefoundry/deploy/builder/builders/tfy_notebook_buildpack/dockerfile_template.py +0 -66
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/README.md +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/agents/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/agents/base.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/agents/developer.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/agents/project_identifier.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/agents/tester.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/cli.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/constants.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/exception.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/logger.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/tools/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/tools/ask.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/tools/base.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/tools/commit.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/tools/docker_build.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/tools/docker_run.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/tools/file_type_counts.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/tools/list_files.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/tools/read_file.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/tools/send_request.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/tools/write_file.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/utils/client.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/utils/diff.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/autodeploy/utils/pydantic_compat.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/cli/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/cli/__main__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/common/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/common/auth_service_client.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/common/credential_file_manager.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/common/credential_provider.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/common/entities.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/common/exceptions.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/common/request_utils.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/builder/builders/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/builder/builders/dockerfile.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/builder/docker_service.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/cli.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/apply_command.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/build_command.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/build_logs_command.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/create_command.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/delete_command.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/get_command.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/list_command.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/login_command.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/logout_command.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/logs_command.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/patch_application_command.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/patch_command.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/redeploy_command.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/terminate_comand.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/trigger_command.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/config.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/console.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/const.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/display_util.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/core/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/core/login.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/core/logout.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/function_service/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/function_service/__main__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/function_service/app.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/function_service/build.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/function_service/remote/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/function_service/remote/context.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/function_service/remote/method.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/function_service/remote/remote.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/function_service/route.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/function_service/service.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/function_service/utils.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/io/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/io/output_callback.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/io/rich_output_callback.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/json_util.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/auth/servicefoundry_session.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/clients/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/clients/servicefoundry_client.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/clients/shell_client.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/const.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/dao/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/dao/application.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/dao/apply.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/dao/version.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/dao/workspace.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/exceptions.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/logs_utils.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/messages.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/model/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/model/entity.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/session.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/util.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/lib/win32.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/python_deploy_codegen.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/v2/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/v2/lib/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/v2/lib/deploy.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/v2/lib/deploy_workflow.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/v2/lib/deployable_patched_models.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/v2/lib/models.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/v2/lib/source.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/langchain/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/langchain/deprecated.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/langchain/truefoundry_chat.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/langchain/truefoundry_embeddings.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/langchain/truefoundry_llm.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/langchain/utils.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/logger.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/artifact/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/artifact/truefoundry_artifact_repo.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/api/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/api/auth_api.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/api/deprecated_api.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/api/experiments_api.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/api/health_api.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/api/metrics_api.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/api/mlfoundry_artifacts_api.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/api/python_deployment_config_api.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/api/run_artifacts_api.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/api/runs_api.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/api_client.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/api_response.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/configuration.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/exceptions.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/add_custom_metrics_to_model_version_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/add_features_to_model_version_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/agent.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/agent_app.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/agent_open_api_tool.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/agent_open_api_tool_with_fqn.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/agent_with_fqn.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/artifact_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/artifact_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/artifact_type.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/artifact_version_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/artifact_version_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/artifact_version_status.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/assistant_message.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/authorize_user_for_model_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/authorize_user_for_model_version_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/blob_storage_reference.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/body_get_search_runs_get.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/chat_prompt.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/chat_prompt_messages_inner.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/columns_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/content.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/content1.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/content2.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/content2_any_of_inner.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_artifact_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_artifact_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_artifact_version_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_artifact_version_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_dataset_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_experiment_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_experiment_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_model_version_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_multi_part_upload_for_dataset_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_multi_part_upload_for_dataset_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_multi_part_upload_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_python_deployment_config_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_python_deployment_config_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_run_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/create_run_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/dataset_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/dataset_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/delete_artifact_versions_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/delete_dataset_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/delete_files_for_dataset_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/delete_model_version_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/delete_run_request.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/delete_tag_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/experiment_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/experiment_id_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/experiment_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/experiment_tag_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/feature_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/feature_value_type.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/file_info_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/finalize_artifact_version_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/get_experiment_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/get_latest_run_log_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/get_metric_history_response.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/get_signed_url_for_dataset_write_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/get_signed_urls_for_artifact_version_read_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/get_signed_urls_for_artifact_version_read_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/get_signed_urls_for_artifact_version_write_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/get_signed_urls_for_artifact_version_write_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/get_signed_urls_for_dataset_read_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/get_signed_urls_for_dataset_read_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/get_signed_urls_for_dataset_write_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/get_tenant_id_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/http_validation_error.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/image_content_part.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/image_url.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/internal_metadata.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/latest_run_log_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_artifact_versions_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_artifact_versions_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_artifacts_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_artifacts_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_colums_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_datasets_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_datasets_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_experiments_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_files_for_artifact_version_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_files_for_artifact_versions_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_files_for_dataset_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_files_for_dataset_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_latest_run_logs_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_metric_history_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_metric_history_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_model_version_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_model_versions_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_models_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_models_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_run_artifacts_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_run_logs_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/list_seed_experiments_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/log_batch_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/log_metric_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/log_param_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/method.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/metric_collection_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/metric_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/mime_type.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/model_configuration.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/model_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/model_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/model_schema_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/model_version_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/model_version_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/multi_part_upload_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/multi_part_upload_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/multi_part_upload_storage_provider.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/notify_artifact_version_failure_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/openapi_spec.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/param_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/parameters.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/prediction_type.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/resolve_agent_app_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/restore_run_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/run_data_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/run_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/run_info_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/run_log_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/run_log_input_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/run_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/run_tag_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/search_runs_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/search_runs_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/set_experiment_tag_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/set_tag_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/signed_url_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/stop.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/store_run_logs_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/system_message.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/text.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/text_content_part.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/update_artifact_version_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/update_dataset_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/update_experiment_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/update_model_version_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/update_run_request_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/update_run_response_dto.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/url.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/user_message.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/validation_error.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/models/validation_error_loc_inner.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client/rest.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/client_README.md +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/autogen/entities/artifacts.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/cli/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/cli/cli.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/cli/commands/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/cli/commands/download.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/clients/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/clients/entities.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/clients/utils.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/constants.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/entities.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/enums.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/env_vars.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/exceptions.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/git_info.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/internal_namespace.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/artifacts/artifact.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/artifacts/constants.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/artifacts/dataset.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/artifacts/general_artifact.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/artifacts/model.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/artifacts/model_extras.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/artifacts/utils.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/image/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/image/constants.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/image/image.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/image/image_normalizer.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/image/types.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/plot.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/pydantic_base.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/log_types/utils.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/logger.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/mlfoundry_api.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/validation_utils.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/pydantic_v1.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/version.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/workflow/__init__.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/workflow/container_task.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/workflow/example/deploy.sh +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/workflow/example/truefoundry.yaml +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/workflow/example/workflow.yaml +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/workflow/map_task.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/workflow/python_task.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/workflow/task.py +0 -0
- {truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/workflow/workflow.py +0 -0
|
@@ -5,8 +5,9 @@ CREDENTIAL_FILEPATH = TFY_CONFIG_DIR / "credentials.json"
|
|
|
5
5
|
|
|
6
6
|
TFY_HOST_ENV_KEY = "TFY_HOST"
|
|
7
7
|
TFY_API_KEY_ENV_KEY = "TFY_API_KEY"
|
|
8
|
-
|
|
8
|
+
TFY_CLI_LOCAL_DEV_MODE_ENV_KEY = "TFY_CLI_LOCAL_DEV_MODE"
|
|
9
9
|
|
|
10
10
|
API_SERVER_RELATIVE_PATH = "api/svc"
|
|
11
|
+
MLFOUNDRY_SERVER_RELATIVE_PATH = "api/ml"
|
|
11
12
|
VERSION_PREFIX = "v1"
|
|
12
13
|
SERVICEFOUNDRY_CLIENT_MAX_RETRIES = 2
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import functools
|
|
4
|
-
from urllib.parse import urlparse
|
|
5
4
|
|
|
6
5
|
import requests
|
|
7
6
|
from packaging import version
|
|
@@ -16,7 +15,7 @@ from truefoundry.common.entities import (
|
|
|
16
15
|
)
|
|
17
16
|
from truefoundry.common.request_utils import request_handling, requests_retry_session
|
|
18
17
|
from truefoundry.common.utils import (
|
|
19
|
-
|
|
18
|
+
get_tfy_servers_config,
|
|
20
19
|
timed_lru_cache,
|
|
21
20
|
)
|
|
22
21
|
from truefoundry.logger import logger
|
|
@@ -49,10 +48,10 @@ def session_with_retries() -> requests.Session:
|
|
|
49
48
|
|
|
50
49
|
|
|
51
50
|
@timed_lru_cache(seconds=30 * 60)
|
|
52
|
-
def _cached_get_tenant_info(api_server_url: str) -> TenantInfo:
|
|
51
|
+
def _cached_get_tenant_info(api_server_url: str, tenant_host: str) -> TenantInfo:
|
|
53
52
|
res = session_with_retries().get(
|
|
54
53
|
url=f"{api_server_url}/{VERSION_PREFIX}/tenant-id",
|
|
55
|
-
params={"hostName":
|
|
54
|
+
params={"hostName": tenant_host},
|
|
56
55
|
)
|
|
57
56
|
res = request_handling(res)
|
|
58
57
|
return TenantInfo.parse_obj(res)
|
|
@@ -71,7 +70,9 @@ class ServiceFoundryServiceClient:
|
|
|
71
70
|
# TODO (chiragjn): Rename base_url to tfy_host
|
|
72
71
|
def __init__(self, base_url: str):
|
|
73
72
|
self._base_url = base_url.strip("/")
|
|
74
|
-
|
|
73
|
+
tfy_servers_config = get_tfy_servers_config(self._base_url)
|
|
74
|
+
self._tenant_host = tfy_servers_config.tenant_host
|
|
75
|
+
self._api_server_url = tfy_servers_config.servicefoundry_server_url
|
|
75
76
|
|
|
76
77
|
@property
|
|
77
78
|
def base_url(self) -> str:
|
|
@@ -79,11 +80,16 @@ class ServiceFoundryServiceClient:
|
|
|
79
80
|
|
|
80
81
|
@property
|
|
81
82
|
def tenant_info(self) -> TenantInfo:
|
|
82
|
-
return _cached_get_tenant_info(
|
|
83
|
+
return _cached_get_tenant_info(
|
|
84
|
+
self._api_server_url,
|
|
85
|
+
tenant_host=self._tenant_host,
|
|
86
|
+
)
|
|
83
87
|
|
|
84
88
|
@property
|
|
85
89
|
def python_sdk_config(self) -> PythonSDKConfig:
|
|
86
|
-
return _cached_get_python_sdk_config(
|
|
90
|
+
return _cached_get_python_sdk_config(
|
|
91
|
+
self._api_server_url,
|
|
92
|
+
)
|
|
87
93
|
|
|
88
94
|
@functools.cached_property
|
|
89
95
|
def _min_cli_version_required(self) -> str:
|
|
@@ -3,17 +3,51 @@ import time
|
|
|
3
3
|
from functools import lru_cache, wraps
|
|
4
4
|
from time import monotonic_ns
|
|
5
5
|
from typing import Callable, Generator, Optional, TypeVar
|
|
6
|
-
from urllib.parse import urljoin,
|
|
6
|
+
from urllib.parse import urljoin, urlparse
|
|
7
7
|
|
|
8
8
|
from truefoundry.common.constants import (
|
|
9
9
|
API_SERVER_RELATIVE_PATH,
|
|
10
|
-
|
|
10
|
+
MLFOUNDRY_SERVER_RELATIVE_PATH,
|
|
11
|
+
TFY_CLI_LOCAL_DEV_MODE_ENV_KEY,
|
|
11
12
|
TFY_HOST_ENV_KEY,
|
|
12
13
|
)
|
|
14
|
+
from truefoundry.pydantic_v1 import BaseSettings
|
|
13
15
|
|
|
14
16
|
T = TypeVar("T")
|
|
15
17
|
|
|
16
18
|
|
|
19
|
+
class _TFYServersConfig(BaseSettings):
|
|
20
|
+
class Config:
|
|
21
|
+
env_prefix = "TFY_CLI_LOCAL_"
|
|
22
|
+
env_file = ".tfy-cli-local.env"
|
|
23
|
+
|
|
24
|
+
tenant_host: str
|
|
25
|
+
servicefoundry_server_url: str
|
|
26
|
+
mlfoundry_server_url: str
|
|
27
|
+
|
|
28
|
+
@classmethod
|
|
29
|
+
def from_base_url(cls, base_url: str) -> "_TFYServersConfig":
|
|
30
|
+
base_url = base_url.strip("/")
|
|
31
|
+
return cls(
|
|
32
|
+
tenant_host=urlparse(base_url).netloc,
|
|
33
|
+
servicefoundry_server_url=urljoin(base_url, API_SERVER_RELATIVE_PATH),
|
|
34
|
+
mlfoundry_server_url=urljoin(base_url, MLFOUNDRY_SERVER_RELATIVE_PATH),
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
_tfy_servers_config = None
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def get_tfy_servers_config(base_url: str) -> _TFYServersConfig:
|
|
42
|
+
global _tfy_servers_config
|
|
43
|
+
if _tfy_servers_config is None:
|
|
44
|
+
if os.getenv(TFY_CLI_LOCAL_DEV_MODE_ENV_KEY):
|
|
45
|
+
_tfy_servers_config = _TFYServersConfig() # type: ignore[call-arg]
|
|
46
|
+
else:
|
|
47
|
+
_tfy_servers_config = _TFYServersConfig.from_base_url(base_url)
|
|
48
|
+
return _tfy_servers_config
|
|
49
|
+
|
|
50
|
+
|
|
17
51
|
def relogin_error_message(message: str, host: str = "HOST") -> str:
|
|
18
52
|
suffix = ""
|
|
19
53
|
if host == "HOST":
|
|
@@ -53,7 +87,7 @@ def poll_for_function(
|
|
|
53
87
|
time.sleep(poll_after_secs)
|
|
54
88
|
|
|
55
89
|
|
|
56
|
-
def validate_tfy_host(tfy_host: str) ->
|
|
90
|
+
def validate_tfy_host(tfy_host: str) -> None:
|
|
57
91
|
if not (tfy_host.startswith("https://") or tfy_host.startswith("http://")):
|
|
58
92
|
raise ValueError(
|
|
59
93
|
f"Invalid host {tfy_host!r}. It should start with https:// or http://"
|
|
@@ -69,10 +103,3 @@ def resolve_tfy_host(tfy_host: Optional[str] = None) -> str:
|
|
|
69
103
|
tfy_host = tfy_host.strip("/")
|
|
70
104
|
validate_tfy_host(tfy_host)
|
|
71
105
|
return tfy_host
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
# TODO (chiragjn): Rename base_url to tfy_host
|
|
75
|
-
def append_servicefoundry_path_to_base_url(base_url: str):
|
|
76
|
-
if urlsplit(base_url).netloc.startswith("localhost"):
|
|
77
|
-
return os.getenv(SERVICEFOUNDRY_SERVER_URL_ENV_KEY)
|
|
78
|
-
return urljoin(base_url, API_SERVER_RELATIVE_PATH)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: application.json
|
|
3
|
-
# timestamp: 2024-
|
|
3
|
+
# timestamp: 2024-10-09T13:00:44+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -363,10 +363,12 @@ class HelmRepo(BaseModel):
|
|
|
363
363
|
description="+label=Helm repository URL\n+sort=1\n+message=Needs to be a valid URL.",
|
|
364
364
|
)
|
|
365
365
|
chart: str = Field(
|
|
366
|
-
...,
|
|
366
|
+
...,
|
|
367
|
+
description='+label=Chart name\n+sort=2\n+usage=The helm chart name\n+uiType=InputSelect\n+uiProps={"creatable":true, "searchable":true}',
|
|
367
368
|
)
|
|
368
369
|
version: str = Field(
|
|
369
|
-
...,
|
|
370
|
+
...,
|
|
371
|
+
description='+label=Version\n+sort=3\n+usage=Helm chart version\n+uiType=InputSelect\n+uiProps={"creatable":true, "searchable":true}',
|
|
370
372
|
)
|
|
371
373
|
|
|
372
374
|
|
|
@@ -448,10 +450,14 @@ class JobAlert(BaseModel):
|
|
|
448
450
|
+label=Alert
|
|
449
451
|
"""
|
|
450
452
|
|
|
451
|
-
notification_channel:
|
|
453
|
+
notification_channel: constr(min_length=1) = Field(
|
|
452
454
|
...,
|
|
453
455
|
description='+label=Notification Channel\n+usage=Specify the notification channel to send alerts to\n+uiType=IntegrationSelect\n+uiProps={"integrationType":"notification-channel"}\n+sort=660',
|
|
454
456
|
)
|
|
457
|
+
to_emails: Optional[List[constr(min_length=1)]] = Field(
|
|
458
|
+
None,
|
|
459
|
+
description="+label=To Emails\n+usage=List of recipients' email addresses if the notification channel is Email.\n+docs=Specify the emails to send alerts to\n+sort=665",
|
|
460
|
+
)
|
|
455
461
|
on_start: bool = Field(
|
|
456
462
|
False,
|
|
457
463
|
description="+label=On Start\n+usage=Send an alert when the job starts\n+sort=670",
|
|
@@ -1546,7 +1552,7 @@ class SSHServer(BaseWorkbenchInput):
|
|
|
1546
1552
|
image: WorkbenchImage
|
|
1547
1553
|
ssh_public_key: str = Field(
|
|
1548
1554
|
...,
|
|
1549
|
-
description="+label: SSH Public Key\n+usage=Add Your SSH Public Key, this will be used to authenticate you to the SSH Server.
|
|
1555
|
+
description="+label: SSH Public Key\n+usage=Add Your SSH Public Key, this will be used to authenticate you to the SSH Server. \\\nYou can find it using `cat ~/.ssh/id_rsa.pub` in Mac/Linux or `type $home\\.ssh\\id_rsa.pub` in Windows Powershell. \\\nYou can also generate a new SSH key pair using `ssh-keygen -t rsa` in your local terminal. (same for both Mac/Linux and Windows Powershell)\n+uiType=TextArea\n+sort=4",
|
|
1550
1556
|
)
|
|
1551
1557
|
|
|
1552
1558
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Dict, List, Optional, Union
|
|
1
|
+
from typing import Any, Dict, List, Optional, Union
|
|
2
2
|
|
|
3
3
|
from truefoundry.deploy.auto_gen.models import (
|
|
4
4
|
DockerFileBuild,
|
|
@@ -24,7 +24,7 @@ class _BuildConfig(BaseModel):
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def build(
|
|
27
|
-
build_configuration: Union[BaseModel, Dict],
|
|
27
|
+
build_configuration: Union[BaseModel, Dict[str, Any]],
|
|
28
28
|
tag: str,
|
|
29
29
|
extra_opts: Optional[List[str]] = None,
|
|
30
30
|
):
|
|
@@ -8,16 +8,20 @@ from truefoundry.deploy.builder.builders.tfy_notebook_buildpack.dockerfile_templ
|
|
|
8
8
|
NotebookImageBuild,
|
|
9
9
|
generate_dockerfile_content,
|
|
10
10
|
)
|
|
11
|
+
from truefoundry.deploy.builder.utils import has_pip_conf_secret
|
|
11
12
|
|
|
12
13
|
__all__ = ["generate_dockerfile_content", "build"]
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
def _convert_to_dockerfile_build_config(
|
|
16
|
-
build_configuration: NotebookImageBuild,
|
|
17
|
+
build_configuration: NotebookImageBuild,
|
|
18
|
+
local_dir: str,
|
|
19
|
+
mount_pip_conf_secret: bool = False,
|
|
17
20
|
) -> DockerFileBuild:
|
|
18
21
|
dockerfile_content = generate_dockerfile_content(
|
|
19
22
|
build_configuration=build_configuration,
|
|
20
23
|
local_dir=local_dir,
|
|
24
|
+
mount_pip_conf_secret=mount_pip_conf_secret,
|
|
21
25
|
)
|
|
22
26
|
dockerfile_path = os.path.join(local_dir, "Dockerfile")
|
|
23
27
|
with open(dockerfile_path, "w", encoding="utf8") as fp:
|
|
@@ -34,10 +38,12 @@ def build(
|
|
|
34
38
|
build_configuration: NotebookImageBuild,
|
|
35
39
|
extra_opts: Optional[List[str]] = None,
|
|
36
40
|
):
|
|
41
|
+
mount_pip_conf_secret = has_pip_conf_secret(extra_opts) if extra_opts else False
|
|
37
42
|
with TemporaryDirectory() as local_dir:
|
|
38
43
|
docker_build_configuration = _convert_to_dockerfile_build_config(
|
|
39
44
|
build_configuration,
|
|
40
45
|
local_dir=local_dir,
|
|
46
|
+
mount_pip_conf_secret=mount_pip_conf_secret,
|
|
41
47
|
)
|
|
42
48
|
dockerfile.build(
|
|
43
49
|
tag=tag,
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import hashlib
|
|
2
|
+
import os
|
|
3
|
+
from typing import Literal, Optional
|
|
4
|
+
|
|
5
|
+
from mako.template import Template
|
|
6
|
+
|
|
7
|
+
from truefoundry.deploy.builder.constants import (
|
|
8
|
+
PIP_CONF_BUILDKIT_SECRET_MOUNT,
|
|
9
|
+
PIP_CONF_SECRET_MOUNT_AS_ENV,
|
|
10
|
+
)
|
|
11
|
+
from truefoundry.pydantic_v1 import BaseModel
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class NotebookImageBuild(BaseModel):
|
|
15
|
+
type: Literal["tfy-notebook-buildpack"] = "tfy-notebook-buildpack"
|
|
16
|
+
base_image_uri: str
|
|
17
|
+
build_script: Optional[str] = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
DOCKERFILE_TEMPLATE = Template(
|
|
21
|
+
"""
|
|
22
|
+
FROM ${base_image_uri}
|
|
23
|
+
USER root
|
|
24
|
+
|
|
25
|
+
% if build_script_docker_commands is not None:
|
|
26
|
+
${build_script_docker_commands}
|
|
27
|
+
% endif
|
|
28
|
+
|
|
29
|
+
USER $NB_UID
|
|
30
|
+
"""
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def generate_build_script_docker_commands(
|
|
35
|
+
build_script: Optional[str],
|
|
36
|
+
local_dir: str,
|
|
37
|
+
mount_pip_conf_secret: bool = False,
|
|
38
|
+
) -> Optional[str]:
|
|
39
|
+
if not build_script:
|
|
40
|
+
return None
|
|
41
|
+
# we add build script's hash to the file name to ensure docker cache invalidation
|
|
42
|
+
script_hash = hashlib.sha256(build_script.encode("utf-8")).hexdigest()
|
|
43
|
+
build_script_path = os.path.join(local_dir, f"build-script-{script_hash}.sh")
|
|
44
|
+
with open(build_script_path, "w") as fp:
|
|
45
|
+
fp.write(build_script)
|
|
46
|
+
build_script_path = os.path.relpath(build_script_path, local_dir)
|
|
47
|
+
buildkit_secret_mounts = ""
|
|
48
|
+
environment_variables = ["DEBIAN_FRONTEND=noninteractive"]
|
|
49
|
+
if mount_pip_conf_secret:
|
|
50
|
+
buildkit_secret_mounts = PIP_CONF_BUILDKIT_SECRET_MOUNT
|
|
51
|
+
environment_variables.append(PIP_CONF_SECRET_MOUNT_AS_ENV)
|
|
52
|
+
all_environment_variables = " ".join(environment_variables)
|
|
53
|
+
run_build_script_command = f"""\
|
|
54
|
+
COPY {build_script_path} /tmp/user-build-script.sh
|
|
55
|
+
RUN {buildkit_secret_mounts} mkdir -p /var/log/ && {all_environment_variables} bash -ex /tmp/user-build-script.sh 2>&1 | tee /var/log/user-build-script-output.log
|
|
56
|
+
"""
|
|
57
|
+
return run_build_script_command
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def generate_dockerfile_content(
|
|
61
|
+
build_configuration: NotebookImageBuild,
|
|
62
|
+
local_dir: str,
|
|
63
|
+
mount_pip_conf_secret: bool = False,
|
|
64
|
+
) -> str:
|
|
65
|
+
build_script_docker_commands = generate_build_script_docker_commands(
|
|
66
|
+
build_script=build_configuration.build_script,
|
|
67
|
+
local_dir=local_dir,
|
|
68
|
+
mount_pip_conf_secret=mount_pip_conf_secret,
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
template_args = {
|
|
72
|
+
"base_image_uri": build_configuration.base_image_uri,
|
|
73
|
+
"build_script_docker_commands": build_script_docker_commands,
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
template = DOCKERFILE_TEMPLATE
|
|
77
|
+
|
|
78
|
+
dockerfile_content: str = template.render(**template_args)
|
|
79
|
+
return dockerfile_content
|
|
@@ -7,6 +7,7 @@ from truefoundry.deploy.builder.builders import dockerfile
|
|
|
7
7
|
from truefoundry.deploy.builder.builders.tfy_python_buildpack.dockerfile_template import (
|
|
8
8
|
generate_dockerfile_content,
|
|
9
9
|
)
|
|
10
|
+
from truefoundry.deploy.builder.utils import has_pip_conf_secret
|
|
10
11
|
|
|
11
12
|
__all__ = ["generate_dockerfile_content", "build"]
|
|
12
13
|
|
|
@@ -14,9 +15,11 @@ __all__ = ["generate_dockerfile_content", "build"]
|
|
|
14
15
|
def _convert_to_dockerfile_build_config(
|
|
15
16
|
build_configuration: PythonBuild,
|
|
16
17
|
dockerfile_path: str,
|
|
18
|
+
mount_pip_conf_secret: bool = False,
|
|
17
19
|
) -> DockerFileBuild:
|
|
18
20
|
dockerfile_content = generate_dockerfile_content(
|
|
19
|
-
build_configuration=build_configuration
|
|
21
|
+
build_configuration=build_configuration,
|
|
22
|
+
mount_pip_conf_secret=mount_pip_conf_secret,
|
|
20
23
|
)
|
|
21
24
|
with open(dockerfile_path, "w", encoding="utf8") as fp:
|
|
22
25
|
fp.write(dockerfile_content)
|
|
@@ -33,9 +36,12 @@ def build(
|
|
|
33
36
|
build_configuration: PythonBuild,
|
|
34
37
|
extra_opts: Optional[List[str]] = None,
|
|
35
38
|
):
|
|
39
|
+
mount_pip_conf_secret = has_pip_conf_secret(extra_opts) if extra_opts else False
|
|
36
40
|
with TemporaryDirectory() as local_dir:
|
|
37
41
|
docker_build_configuration = _convert_to_dockerfile_build_config(
|
|
38
|
-
build_configuration,
|
|
42
|
+
build_configuration,
|
|
43
|
+
dockerfile_path=os.path.join(local_dir, "Dockerfile"),
|
|
44
|
+
mount_pip_conf_secret=mount_pip_conf_secret,
|
|
39
45
|
)
|
|
40
46
|
dockerfile.build(
|
|
41
47
|
tag=tag,
|
|
@@ -4,6 +4,10 @@ from typing import Dict, List, Optional
|
|
|
4
4
|
from mako.template import Template
|
|
5
5
|
|
|
6
6
|
from truefoundry.deploy.auto_gen.models import PythonBuild
|
|
7
|
+
from truefoundry.deploy.builder.constants import (
|
|
8
|
+
PIP_CONF_BUILDKIT_SECRET_MOUNT,
|
|
9
|
+
PIP_CONF_SECRET_MOUNT_AS_ENV,
|
|
10
|
+
)
|
|
7
11
|
from truefoundry.deploy.v2.lib.patched_models import CUDAVersion
|
|
8
12
|
|
|
9
13
|
# TODO (chiragjn): Switch to a non-root user inside the container
|
|
@@ -18,7 +22,7 @@ COPY ${requirements_path} ${requirements_destination_path}
|
|
|
18
22
|
% endif
|
|
19
23
|
|
|
20
24
|
% if pip_install_command is not None:
|
|
21
|
-
RUN ${pip_install_command}
|
|
25
|
+
RUN ${pip_config_secret_mount} ${pip_install_command}
|
|
22
26
|
% endif
|
|
23
27
|
|
|
24
28
|
COPY . /app
|
|
@@ -27,7 +31,7 @@ WORKDIR /app
|
|
|
27
31
|
|
|
28
32
|
DOCKERFILE_TEMPLATE = Template(
|
|
29
33
|
"""
|
|
30
|
-
FROM --platform=linux/amd64 python:${python_version}
|
|
34
|
+
FROM --platform=linux/amd64 public.ecr.aws/docker/library/python:${python_version}
|
|
31
35
|
ENV PATH=/virtualenvs/venv/bin:$PATH
|
|
32
36
|
RUN apt update && \
|
|
33
37
|
DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends git && \
|
|
@@ -65,6 +69,11 @@ CUDA_VERSION_TO_IMAGE_TAG: Dict[str, str] = {
|
|
|
65
69
|
CUDAVersion.CUDA_12_0_CUDNN8.value: "12.0.1-cudnn8-runtime-ubuntu22.04",
|
|
66
70
|
CUDAVersion.CUDA_12_1_CUDNN8.value: "12.1.1-cudnn8-runtime-ubuntu22.04",
|
|
67
71
|
CUDAVersion.CUDA_12_2_CUDNN8.value: "12.2.2-cudnn8-runtime-ubuntu22.04",
|
|
72
|
+
CUDAVersion.CUDA_12_3_CUDNN9.value: "12.3.2-cudnn9-runtime-ubuntu22.04",
|
|
73
|
+
# From 12.4+ onwards, the image tags drop the cudnn version
|
|
74
|
+
CUDAVersion.CUDA_12_4_CUDNN9.value: "12.4.1-cudnn-runtime-ubuntu22.04",
|
|
75
|
+
CUDAVersion.CUDA_12_5_CUDNN9.value: "12.5.1-cudnn-runtime-ubuntu22.04",
|
|
76
|
+
CUDAVersion.CUDA_12_6_CUDNN9.value: "12.6.1-cudnn-runtime-ubuntu22.04",
|
|
68
77
|
}
|
|
69
78
|
|
|
70
79
|
|
|
@@ -100,7 +109,9 @@ def generate_apt_install_command(apt_packages: Optional[List[str]]) -> Optional[
|
|
|
100
109
|
|
|
101
110
|
|
|
102
111
|
def generate_pip_install_command(
|
|
103
|
-
requirements_path: Optional[str],
|
|
112
|
+
requirements_path: Optional[str],
|
|
113
|
+
pip_packages: Optional[List[str]],
|
|
114
|
+
mount_pip_conf_secret: bool = False,
|
|
104
115
|
) -> Optional[str]:
|
|
105
116
|
upgrade_pip_command = "python -m pip install -U pip setuptools wheel"
|
|
106
117
|
final_pip_install_command = None
|
|
@@ -119,11 +130,17 @@ def generate_pip_install_command(
|
|
|
119
130
|
if not final_pip_install_command:
|
|
120
131
|
return None
|
|
121
132
|
|
|
133
|
+
if mount_pip_conf_secret:
|
|
134
|
+
final_pip_install_command = (
|
|
135
|
+
f"{PIP_CONF_SECRET_MOUNT_AS_ENV} {final_pip_install_command}"
|
|
136
|
+
)
|
|
137
|
+
|
|
122
138
|
return " && ".join([upgrade_pip_command, final_pip_install_command])
|
|
123
139
|
|
|
124
140
|
|
|
125
141
|
def generate_dockerfile_content(
|
|
126
142
|
build_configuration: PythonBuild,
|
|
143
|
+
mount_pip_conf_secret: bool = False,
|
|
127
144
|
) -> str:
|
|
128
145
|
# TODO (chiragjn): Handle recursive references to other requirements files e.g. `-r requirements-gpu.txt`
|
|
129
146
|
requirements_path = resolve_requirements_txt_path(build_configuration)
|
|
@@ -133,6 +150,7 @@ def generate_dockerfile_content(
|
|
|
133
150
|
pip_install_command = generate_pip_install_command(
|
|
134
151
|
requirements_path=requirements_destination_path,
|
|
135
152
|
pip_packages=build_configuration.pip_packages,
|
|
153
|
+
mount_pip_conf_secret=mount_pip_conf_secret,
|
|
136
154
|
)
|
|
137
155
|
apt_install_command = generate_apt_install_command(
|
|
138
156
|
apt_packages=build_configuration.apt_packages
|
|
@@ -146,6 +164,11 @@ def generate_dockerfile_content(
|
|
|
146
164
|
"pip_install_command": pip_install_command,
|
|
147
165
|
}
|
|
148
166
|
|
|
167
|
+
if mount_pip_conf_secret:
|
|
168
|
+
template_args["pip_config_secret_mount"] = PIP_CONF_BUILDKIT_SECRET_MOUNT
|
|
169
|
+
else:
|
|
170
|
+
template_args["pip_config_secret_mount"] = ""
|
|
171
|
+
|
|
149
172
|
if build_configuration.cuda_version:
|
|
150
173
|
template = CUDA_DOCKERFILE_TEMPLATE
|
|
151
174
|
template_args["nvidia_cuda_image_tag"] = CUDA_VERSION_TO_IMAGE_TAG.get(
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from typing import List, Optional
|
|
2
|
+
|
|
3
|
+
from truefoundry.deploy.builder.constants import BUILDKIT_SECRET_MOUNT_PIP_CONF_ID
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def _get_id_from_buildkit_secret_value(value: str) -> Optional[str]:
|
|
7
|
+
parts = value.split(",")
|
|
8
|
+
secret_config = {}
|
|
9
|
+
for part in parts:
|
|
10
|
+
kv = part.split("=", 1)
|
|
11
|
+
if len(kv) != 2:
|
|
12
|
+
continue
|
|
13
|
+
key, value = kv
|
|
14
|
+
secret_config[key] = value
|
|
15
|
+
|
|
16
|
+
if "id" in secret_config and "src" in secret_config:
|
|
17
|
+
return secret_config["id"]
|
|
18
|
+
|
|
19
|
+
return None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def has_pip_conf_secret(docker_build_extra_args: List[str]) -> bool:
|
|
23
|
+
args = [arg.strip() for arg in docker_build_extra_args]
|
|
24
|
+
for i, arg in enumerate(docker_build_extra_args):
|
|
25
|
+
if (
|
|
26
|
+
arg == "--secret"
|
|
27
|
+
and i + 1 < len(args)
|
|
28
|
+
and _get_id_from_buildkit_secret_value(args[i + 1])
|
|
29
|
+
== BUILDKIT_SECRET_MOUNT_PIP_CONF_ID
|
|
30
|
+
):
|
|
31
|
+
return True
|
|
32
|
+
return False
|
{truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/deploy/cli/commands/deploy_command.py
RENAMED
|
@@ -9,7 +9,7 @@ from click.exceptions import ClickException
|
|
|
9
9
|
|
|
10
10
|
from truefoundry.autodeploy.cli import cli as autodeploy_cli
|
|
11
11
|
from truefoundry.autodeploy.exception import InvalidRequirementsException
|
|
12
|
-
from truefoundry.deploy.cli.const import GROUP_CLS
|
|
12
|
+
from truefoundry.deploy.cli.const import COMMAND_CLS, GROUP_CLS
|
|
13
13
|
from truefoundry.deploy.cli.util import handle_exception_wrapper
|
|
14
14
|
|
|
15
15
|
|
|
@@ -54,8 +54,13 @@ def _get_default_spec_file():
|
|
|
54
54
|
default=True,
|
|
55
55
|
help="Wait and tail the deployment progress",
|
|
56
56
|
)
|
|
57
|
+
@click.pass_context
|
|
57
58
|
@handle_exception_wrapper
|
|
58
|
-
def deploy_command(
|
|
59
|
+
def deploy_command(
|
|
60
|
+
ctx: click.Context, file: str, workspace_fqn: Optional[str], wait: bool
|
|
61
|
+
):
|
|
62
|
+
if ctx.invoked_subcommand is not None:
|
|
63
|
+
return
|
|
59
64
|
from truefoundry.deploy.lib.auth.servicefoundry_session import ServiceFoundrySession
|
|
60
65
|
from truefoundry.deploy.v2.lib.deployable_patched_models import Application
|
|
61
66
|
|
|
@@ -98,5 +103,44 @@ def deploy_command(file: str, workspace_fqn: Optional[str], wait: bool):
|
|
|
98
103
|
raise UsageError(message=str(e)) from e
|
|
99
104
|
|
|
100
105
|
|
|
106
|
+
@deploy_command.command(name="workflow", cls=COMMAND_CLS, help="Deploy a Workflow")
|
|
107
|
+
@click.option(
|
|
108
|
+
"-n",
|
|
109
|
+
"--name",
|
|
110
|
+
required=True,
|
|
111
|
+
help="Name of the Workflow",
|
|
112
|
+
)
|
|
113
|
+
@click.option(
|
|
114
|
+
"-f",
|
|
115
|
+
"--file",
|
|
116
|
+
type=click.Path(exists=True, dir_okay=False, resolve_path=True),
|
|
117
|
+
required=True,
|
|
118
|
+
help="Path to the Workflow file. e.g. workflow.py",
|
|
119
|
+
)
|
|
120
|
+
@click.option(
|
|
121
|
+
"-w",
|
|
122
|
+
"--workspace-fqn",
|
|
123
|
+
"--workspace_fqn",
|
|
124
|
+
required=True,
|
|
125
|
+
help="FQN of the Workspace to deploy to.",
|
|
126
|
+
)
|
|
127
|
+
@handle_exception_wrapper
|
|
128
|
+
def deploy_workflow_command(name: str, workflow_file: str, workspace_fqn: str):
|
|
129
|
+
from truefoundry.deploy.lib.auth.servicefoundry_session import ServiceFoundrySession
|
|
130
|
+
|
|
131
|
+
try:
|
|
132
|
+
_ = ServiceFoundrySession()
|
|
133
|
+
except Exception as e:
|
|
134
|
+
raise ClickException(message=str(e)) from e
|
|
135
|
+
|
|
136
|
+
from truefoundry.deploy.v2.lib.deployable_patched_models import Workflow
|
|
137
|
+
|
|
138
|
+
workflow = Workflow(
|
|
139
|
+
name=name,
|
|
140
|
+
workflow_file_path=workflow_file,
|
|
141
|
+
)
|
|
142
|
+
workflow.deploy(workspace_fqn=workspace_fqn)
|
|
143
|
+
|
|
144
|
+
|
|
101
145
|
def get_deploy_command():
|
|
102
146
|
return deploy_command
|
|
@@ -35,9 +35,12 @@ def handle_exception(exception):
|
|
|
35
35
|
border_style="red",
|
|
36
36
|
)
|
|
37
37
|
elif isinstance(exception, ConnectionError):
|
|
38
|
+
loc = ""
|
|
39
|
+
if exception.request:
|
|
40
|
+
loc = f" at {exception.request.url}"
|
|
38
41
|
print_dict_as_table_panel(
|
|
39
42
|
{
|
|
40
|
-
"Error": "Couldn't connect to TrueFoundry. Please make sure that the provided `--host` is correct."
|
|
43
|
+
"Error": f"Couldn't connect to TrueFoundry{loc}. Please make sure that the provided `--host` is correct."
|
|
41
44
|
},
|
|
42
45
|
title="Command Failed",
|
|
43
46
|
border_style="red",
|
|
@@ -84,6 +84,10 @@ class CUDAVersion(str, enum.Enum):
|
|
|
84
84
|
CUDA_12_0_CUDNN8 = "12.0-cudnn8"
|
|
85
85
|
CUDA_12_1_CUDNN8 = "12.1-cudnn8"
|
|
86
86
|
CUDA_12_2_CUDNN8 = "12.2-cudnn8"
|
|
87
|
+
CUDA_12_3_CUDNN9 = "12.3-cudnn9"
|
|
88
|
+
CUDA_12_4_CUDNN9 = "12.4-cudnn9"
|
|
89
|
+
CUDA_12_5_CUDNN9 = "12.5-cudnn9"
|
|
90
|
+
CUDA_12_6_CUDNN9 = "12.6-cudnn9"
|
|
87
91
|
|
|
88
92
|
|
|
89
93
|
class GPUType(str, enum.Enum):
|
{truefoundry-0.4.2rc1 → truefoundry-0.4.2rc3}/truefoundry/ml/clients/servicefoundry_client.py
RENAMED
|
@@ -12,16 +12,13 @@ from truefoundry.ml.clients.entities import (
|
|
|
12
12
|
)
|
|
13
13
|
from truefoundry.ml.clients.utils import http_request_safe
|
|
14
14
|
from truefoundry.ml.exceptions import MlFoundryException
|
|
15
|
-
from truefoundry.ml.run_utils import append_servicefoundry_path_to_tracking_uri
|
|
16
15
|
|
|
17
16
|
|
|
18
17
|
class ServiceFoundryServiceClient(BaseServiceFoundryServiceClient):
|
|
19
18
|
# TODO (chiragjn): Rename tracking_uri to tfy_host
|
|
20
19
|
def __init__(self, tracking_uri: str, token: Optional[str] = None):
|
|
21
20
|
super().__init__(base_url=tracking_uri)
|
|
22
|
-
self.host_creds = HostCreds(
|
|
23
|
-
host=append_servicefoundry_path_to_tracking_uri(tracking_uri), token=token
|
|
24
|
-
)
|
|
21
|
+
self.host_creds = HostCreds(host=self._api_server_url, token=token)
|
|
25
22
|
|
|
26
23
|
def get_integration_from_id(self, integration_id: str):
|
|
27
24
|
integration_id = integration_id or ""
|