truefoundry 0.7.0rc5__tar.gz → 0.7.1rc1__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.7.0rc5 → truefoundry-0.7.1rc1}/PKG-INFO +4 -3
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/pyproject.toml +10 -5
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/cli/__main__.py +24 -8
- truefoundry-0.7.1rc1/truefoundry/cli/config.py +10 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/cli/display_util.py +66 -4
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/cli/util.py +2 -2
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/common/constants.py +28 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/common/utils.py +3 -3
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/__init__.py +1 -3
- truefoundry-0.7.1rc1/truefoundry/deploy/cli/commands/ask_command.py +152 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/delete_command.py +2 -2
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/kubeconfig_command.py +2 -32
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/login_command.py +7 -1
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/utils.py +30 -0
- truefoundry-0.7.1rc1/truefoundry/deploy/lib/clients/_mcp_streamable_http.py +264 -0
- truefoundry-0.7.1rc1/truefoundry/deploy/lib/clients/ask_client.py +371 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/lib/deploy.py +5 -4
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/prompt_utils.py +14 -9
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/workflow/__init__.py +4 -1
- truefoundry-0.7.0rc5/truefoundry/cli/config.py +0 -10
- truefoundry-0.7.0rc5/truefoundry/deploy/cli/commands/create_command.py +0 -75
- truefoundry-0.7.0rc5/truefoundry/deploy/cli/commands/list_command.py +0 -171
- truefoundry-0.7.0rc5/truefoundry/deploy/cli/commands/redeploy_command.py +0 -41
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/.gitignore +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/README.md +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/_client.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/agents/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/agents/base.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/agents/developer.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/agents/project_identifier.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/agents/tester.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/cli.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/constants.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/exception.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/logger.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/ask.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/base.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/commit.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/docker_build.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/docker_run.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/file_type_counts.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/list_files.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/read_file.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/send_request.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/write_file.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/utils/client.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/utils/diff.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/utils/pydantic_compat.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/cli/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/cli/console.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/cli/const.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/common/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/common/auth_service_client.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/common/credential_file_manager.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/common/credential_provider.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/common/entities.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/common/exceptions.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/common/request_utils.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/common/servicefoundry_client.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/common/session.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/common/storage_provider_utils.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/common/types.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/common/warnings.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/_autogen/models.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/builders/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/builders/dockerfile.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/builders/tfy_notebook_buildpack/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/builders/tfy_notebook_buildpack/dockerfile_template.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/builders/tfy_python_buildpack/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/builders/tfy_python_buildpack/dockerfile_template.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/constants.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/docker_service.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/utils.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/apply_command.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/build_command.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/deploy_command.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/deploy_init_command.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/get_command.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/k8s_exec_credential_command.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/logout_command.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/logs_command.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/patch_application_command.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/patch_command.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/terminate_comand.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/trigger_command.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/core/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/core/login.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/core/logout.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/io/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/io/no_output_callback.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/io/output_callback.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/io/rich_output_callback.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/clients/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/clients/servicefoundry_client.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/const.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/dao/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/dao/application.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/dao/apply.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/dao/delete.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/dao/version.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/dao/workspace.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/logs_utils.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/messages.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/model/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/model/entity.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/session.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/util.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/win32.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/python_deploy_codegen.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/lib/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/lib/deploy_workflow.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/lib/deployable_patched_models.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/lib/models.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/lib/patched_models.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/lib/source.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/logger.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/auth_api.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/deprecated_api.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/experiments_api.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/generate_code_snippet_api.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/health_api.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/metrics_api.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/mlfoundry_artifacts_api.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/run_artifacts_api.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/runs_api.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api_client.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api_response.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/configuration.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/exceptions.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/agent_app.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/agent_manifest.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/agent_open_api_tool_manifest.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/agent_open_api_tool_with_fqn.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/agent_with_fqn.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/apply_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/apply_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_manifest.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_path.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_type.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_version_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_version_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_version_serialization_format.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_version_status.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/assistant_message.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/authorize_user_for_model_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/authorize_user_for_model_version_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/blob_storage_reference.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/body_get_search_runs_get.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/chat_prompt_manifest.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/chat_prompt_manifest_messages_inner.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/columns_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/command.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/content.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/content1.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/content2.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/content2_any_of_inner.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_artifact_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_artifact_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_artifact_version_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_artifact_version_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_dataset_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_experiment_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_experiment_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_model_version_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_multi_part_upload_for_dataset_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_multi_part_upload_for_dataset_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_multi_part_upload_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_python_deployment_config_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_python_deployment_config_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_run_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_run_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_workflow_task_config_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/data_directory_manifest.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/dataset_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/dataset_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/delete_artifact_versions_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/delete_dataset_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/delete_files_for_dataset_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/delete_model_version_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/delete_run_request.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/delete_tag_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/experiment_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/experiment_id_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/experiment_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/experiment_tag_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/export_deployment_files_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/external_blob_storage_source.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/fast_ai_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/file_info_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/finalize_artifact_version_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_artifact_version_aliases_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_experiment_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_latest_run_log_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_metric_history_response.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_url_for_dataset_write_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_artifact_version_read_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_artifact_version_read_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_artifact_version_write_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_artifact_version_write_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_dataset_read_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_dataset_read_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_dataset_write_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_tenant_id_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/gluon_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/h2_o_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/http_validation_error.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/image_content_part.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/image_url.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/infer_method_name.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/keras_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/latest_run_log_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/library_name.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/light_gbm_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_artifact_versions_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_artifact_versions_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_artifacts_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_artifacts_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_colums_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_datasets_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_datasets_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_experiments_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_files_for_artifact_version_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_files_for_artifact_versions_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_files_for_dataset_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_files_for_dataset_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_latest_run_logs_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_metric_history_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_metric_history_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_model_version_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_model_versions_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_models_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_models_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_run_artifacts_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_run_logs_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/local_artifact_source.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/local_model_source.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/log_batch_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/log_metric_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/log_param_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/manifest.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/manifest1.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/manifest2.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/method.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/metric_collection_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/metric_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/mime_type.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_configuration.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_manifest.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_server.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_version_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_version_environment.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_version_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/multi_part_upload_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/multi_part_upload_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/multi_part_upload_storage_provider.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/notify_artifact_version_failure_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/onnx_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/openapi_spec.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/paddle_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/param_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/parameters.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/py_torch_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/resolve_agent_app_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/restore_run_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/run_data_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/run_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/run_info_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/run_log_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/run_log_input_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/run_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/run_tag_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/search_runs_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/search_runs_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/set_experiment_tag_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/set_tag_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/signed_url_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/sklearn_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/sklearn_model_schema.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/sklearn_serialization_format.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/source.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/source1.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/source2.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/spa_cy_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/stats_models_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/stop.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/store_run_logs_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/subject.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/subject_type.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/system_message.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/tensor_flow_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/text.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/text_content_part.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/transformers_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/trigger_job_run_config_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/trigger_job_run_config_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/true_foundry_managed_source.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/update_artifact_version_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/update_dataset_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/update_experiment_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/update_model_version_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/update_run_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/update_run_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/url.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/user_message.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/validate_external_storage_root_request_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/validate_external_storage_root_response_dto.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/validation_error.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/validation_error_loc_inner.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/xg_boost_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/xg_boost_model_schema.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/xg_boost_serialization_format.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/rest.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client_README.md +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/entities/artifacts.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/models/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/models/exceptions.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/models/schema.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/models/signature.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/models/utils.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/artifact/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/artifact/truefoundry_artifact_repo.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/cli/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/cli/cli.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/cli/commands/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/cli/commands/download.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/cli/commands/model_init.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/cli/utils.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/clients/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/clients/servicefoundry_client.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/constants.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/entities.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/enums.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/exceptions.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/git_info.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/internal_namespace.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/artifacts/artifact.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/artifacts/constants.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/artifacts/dataset.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/artifacts/general_artifact.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/artifacts/model.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/artifacts/utils.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/image/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/image/constants.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/image/image.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/image/image_normalizer.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/image/types.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/plot.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/pydantic_base.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/utils.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/logger.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/mlfoundry_api.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/mlfoundry_run.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/model_framework.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/run_utils.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/session.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/ml/validation_utils.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/pydantic_v1.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/version.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/workflow/container_task.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/workflow/map_task.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/workflow/python_task.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/workflow/remote_filesystem/__init__.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/workflow/remote_filesystem/logger.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/workflow/remote_filesystem/tfy_signed_url_client.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/workflow/remote_filesystem/tfy_signed_url_fs.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/workflow/task.py +0 -0
- {truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/workflow/workflow.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: truefoundry
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.1rc1
|
|
4
4
|
Summary: TrueFoundry CLI
|
|
5
5
|
Author-email: TrueFoundry Team <abhishek@truefoundry.com>
|
|
6
6
|
Requires-Python: <3.14,>=3.8.1
|
|
@@ -14,9 +14,10 @@ Requires-Dist: gitpython<4.0.0,>=3.1.43
|
|
|
14
14
|
Requires-Dist: importlib-metadata<9.0.0,>=4.11.3
|
|
15
15
|
Requires-Dist: importlib-resources<7.0.0,>=5.2.0
|
|
16
16
|
Requires-Dist: mako<2.0.0,>=1.1.6
|
|
17
|
+
Requires-Dist: mcp==1.6.0; python_version >= '3.10'
|
|
17
18
|
Requires-Dist: numpy<3.0.0,>=1.23.0
|
|
18
19
|
Requires-Dist: openai<2.0.0,>=1.16.2
|
|
19
|
-
Requires-Dist: packaging<
|
|
20
|
+
Requires-Dist: packaging<26.0,>=20.0
|
|
20
21
|
Requires-Dist: pydantic<3.0.0,>=1.8.2
|
|
21
22
|
Requires-Dist: pygments<3.0.0,>=2.12.0
|
|
22
23
|
Requires-Dist: pyjwt<3.0.0,>=2.0.0
|
|
@@ -30,7 +31,7 @@ Requires-Dist: requirements-parser<0.12.0,>=0.11.0
|
|
|
30
31
|
Requires-Dist: rich-click<2.0.0,>=1.2.1
|
|
31
32
|
Requires-Dist: rich<14.0.0,>=13.7.1
|
|
32
33
|
Requires-Dist: tqdm<5.0.0,>=4.0.0
|
|
33
|
-
Requires-Dist: truefoundry-sdk==0.0.
|
|
34
|
+
Requires-Dist: truefoundry-sdk==0.0.16
|
|
34
35
|
Requires-Dist: typing-extensions>=4.0
|
|
35
36
|
Requires-Dist: urllib3<3,>=1.26.18
|
|
36
37
|
Requires-Dist: yq<4.0.0,>=3.1.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "truefoundry"
|
|
3
|
-
version = "0.7.
|
|
3
|
+
version = "0.7.1rc1" # This is a placeholder version, it will be replaced when releasing
|
|
4
4
|
requires-python = ">=3.8.1,<3.14"
|
|
5
5
|
description = "TrueFoundry CLI"
|
|
6
6
|
authors = [{ name = "TrueFoundry Team", email = "abhishek@truefoundry.com" }]
|
|
@@ -16,8 +16,9 @@ dependencies = [
|
|
|
16
16
|
"importlib-metadata>=4.11.3,<9.0.0",
|
|
17
17
|
"importlib-resources>=5.2.0,<7.0.0",
|
|
18
18
|
"Mako>=1.1.6,<2.0.0",
|
|
19
|
+
"mcp==1.6.0 ; python_version >= '3.10'",
|
|
19
20
|
"openai>=1.16.2,<2.0.0",
|
|
20
|
-
"packaging>=20.0,<
|
|
21
|
+
"packaging>=20.0,<26.0",
|
|
21
22
|
"pydantic>=1.8.2,<3.0.0",
|
|
22
23
|
"pygments>=2.12.0,<3.0.0",
|
|
23
24
|
"PyJWT>=2.0.0,<3.0.0",
|
|
@@ -28,19 +29,20 @@ dependencies = [
|
|
|
28
29
|
"questionary>=1.10.0,<2.0.0",
|
|
29
30
|
"requests>=2.18.0,<3.0.0",
|
|
30
31
|
"requirements-parser>=0.11.0,<0.12.0",
|
|
31
|
-
"rich>=13.7.1,<14.0.0",
|
|
32
32
|
"rich-click>=1.2.1,<2.0.0",
|
|
33
|
+
"rich>=13.7.1,<14.0.0",
|
|
33
34
|
"tqdm>=4.0.0,<5.0.0",
|
|
34
|
-
"truefoundry-sdk==0.0.
|
|
35
|
+
"truefoundry-sdk==0.0.16",
|
|
35
36
|
"typing-extensions>=4.0",
|
|
36
37
|
"urllib3>=1.26.18,<3",
|
|
37
38
|
"yq>=3.1.0,<4.0.0",
|
|
38
39
|
# Check and try to eliminate libs below this comment
|
|
39
40
|
"numpy>=1.23.0,<3.0.0",
|
|
41
|
+
|
|
40
42
|
]
|
|
41
43
|
|
|
42
44
|
[project.optional-dependencies]
|
|
43
|
-
workflow = ["flytekit==1.15.3; python_version >= '3.9' and python_version < '3.13'"]
|
|
45
|
+
workflow = ["flytekit==1.15.3 ; python_version >= '3.9' and python_version < '3.13'"]
|
|
44
46
|
|
|
45
47
|
[project.scripts]
|
|
46
48
|
tfy = "truefoundry.cli.__main__:main"
|
|
@@ -90,6 +92,8 @@ build-backend = "hatchling.build"
|
|
|
90
92
|
include = [
|
|
91
93
|
"truefoundry/"
|
|
92
94
|
]
|
|
95
|
+
[tool.hatch.metadata]
|
|
96
|
+
allow-direct-references = true
|
|
93
97
|
|
|
94
98
|
[tool.ruff]
|
|
95
99
|
target-version = "py38"
|
|
@@ -124,6 +128,7 @@ inline-quotes = "double"
|
|
|
124
128
|
"truefoundry/ml/_autogen/models/*" = ["E721"]
|
|
125
129
|
"truefoundry/ml/_autogen/client/models/*" = ["F821"]
|
|
126
130
|
"truefoundry/ml/_autogen/client/api_client.py" = ["E721"]
|
|
131
|
+
"truefoundry/deploy/lib/clients/_mcp_streamable_http.py" = ["C901", "ASYNC109"]
|
|
127
132
|
|
|
128
133
|
[tool.ruff.format]
|
|
129
134
|
quote-style = "double"
|
|
@@ -7,9 +7,11 @@ from truefoundry import logger
|
|
|
7
7
|
from truefoundry.cli.config import CliConfig
|
|
8
8
|
from truefoundry.cli.const import GROUP_CLS
|
|
9
9
|
from truefoundry.cli.util import setup_rich_click
|
|
10
|
-
from truefoundry.common.
|
|
10
|
+
from truefoundry.common.constants import TFY_DEBUG_ENV_KEY
|
|
11
|
+
from truefoundry.common.utils import is_internal_env_set
|
|
11
12
|
from truefoundry.deploy.cli.commands import (
|
|
12
13
|
get_apply_command,
|
|
14
|
+
get_ask_command,
|
|
13
15
|
get_build_command,
|
|
14
16
|
get_delete_command,
|
|
15
17
|
get_deploy_command,
|
|
@@ -36,31 +38,39 @@ CONTEXT_SETTINGS = dict(help_option_names=["-h", "--help"]) # noqa: C408
|
|
|
36
38
|
@click.option(
|
|
37
39
|
"--json",
|
|
38
40
|
is_flag=True,
|
|
41
|
+
type=click.BOOL,
|
|
39
42
|
help="Output entities in json format instead of formatted tables",
|
|
40
43
|
)
|
|
41
44
|
@click.option(
|
|
42
45
|
"--debug",
|
|
43
46
|
is_flag=True,
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
type=click.BOOL,
|
|
48
|
+
envvar=TFY_DEBUG_ENV_KEY,
|
|
49
|
+
show_envvar=True,
|
|
50
|
+
show_default=True,
|
|
51
|
+
help="Set logging level to Debug. Can also be set using environment variable. E.g. TFY_DEBUG=1",
|
|
52
|
+
)
|
|
53
|
+
@click.version_option(
|
|
54
|
+
version=__version__, message="TrueFoundry CLI: version %(version)s"
|
|
46
55
|
)
|
|
47
|
-
@click.version_option(__version__)
|
|
48
56
|
@click.pass_context
|
|
49
57
|
def truefoundry_cli(ctx, json, debug):
|
|
50
58
|
"""
|
|
51
59
|
TrueFoundry provides an easy way to deploy your Services, Jobs and Models.
|
|
52
60
|
\b
|
|
53
61
|
|
|
54
|
-
To start, login to your TrueFoundry account with [
|
|
62
|
+
To start, login to your TrueFoundry account with [code]tfy login[/]
|
|
63
|
+
|
|
64
|
+
Then start deploying with [code]tfy deploy[/]
|
|
55
65
|
|
|
56
|
-
|
|
66
|
+
Ask questions and troubleshoot your clusters with [code]tfy ask[/]
|
|
57
67
|
|
|
58
68
|
And more: [link=https://docs.truefoundry.com/docs]https://docs.truefoundry.com/docs[/]
|
|
59
69
|
|
|
60
70
|
"""
|
|
61
71
|
setup_rich_click()
|
|
62
|
-
|
|
63
|
-
CliConfig.
|
|
72
|
+
CliConfig.json = json
|
|
73
|
+
CliConfig.debug = debug
|
|
64
74
|
if ctx.invoked_subcommand is None:
|
|
65
75
|
click.echo(ctx.get_help())
|
|
66
76
|
log_level = logging.INFO
|
|
@@ -96,10 +106,16 @@ def create_truefoundry_cli() -> click.Group:
|
|
|
96
106
|
|
|
97
107
|
if is_internal_env_set():
|
|
98
108
|
cli.add_command(get_build_command())
|
|
109
|
+
cli.add_command(get_ask_command())
|
|
99
110
|
return cli
|
|
100
111
|
|
|
101
112
|
|
|
102
113
|
def main():
|
|
114
|
+
try:
|
|
115
|
+
# We try and import readline to enable better prompt editing in the CLI
|
|
116
|
+
import readline # noqa: F401
|
|
117
|
+
except ImportError:
|
|
118
|
+
pass
|
|
103
119
|
# Exit the interpreter by raising SystemExit(status).
|
|
104
120
|
# If the status is omitted or None, it defaults to zero (i.e., success).
|
|
105
121
|
# If the status is an integer, it will be used as the system exit status.
|
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import datetime
|
|
2
2
|
import json
|
|
3
|
-
|
|
3
|
+
from collections.abc import Iterable
|
|
4
|
+
from typing import Optional, cast
|
|
5
|
+
|
|
6
|
+
from openai.types.chat import (
|
|
7
|
+
ChatCompletionMessageParam,
|
|
8
|
+
ChatCompletionMessageToolCall,
|
|
9
|
+
ChatCompletionMessageToolCallParam,
|
|
10
|
+
)
|
|
4
11
|
from rich import box
|
|
5
12
|
from rich import print_json as _rich_print_json
|
|
13
|
+
from rich.console import Console, Group
|
|
14
|
+
from rich.markdown import Markdown
|
|
15
|
+
from rich.panel import Panel
|
|
6
16
|
from rich.table import Table
|
|
17
|
+
from rich.text import Text
|
|
7
18
|
|
|
8
19
|
from truefoundry.cli.config import CliConfig
|
|
9
20
|
from truefoundry.cli.console import console
|
|
@@ -60,7 +71,7 @@ def display_time_passed(seconds: float) -> str:
|
|
|
60
71
|
|
|
61
72
|
def print_entity_list(title, items):
|
|
62
73
|
items = [item.list_row_data() for item in items]
|
|
63
|
-
if CliConfig.
|
|
74
|
+
if CliConfig.json:
|
|
64
75
|
print_json(data=items)
|
|
65
76
|
return
|
|
66
77
|
|
|
@@ -82,7 +93,7 @@ def print_entity_list(title, items):
|
|
|
82
93
|
|
|
83
94
|
|
|
84
95
|
def print_obj(title, item, columns=None):
|
|
85
|
-
if CliConfig.
|
|
96
|
+
if CliConfig.json:
|
|
86
97
|
print_json(data=item)
|
|
87
98
|
return
|
|
88
99
|
|
|
@@ -103,7 +114,7 @@ def print_obj(title, item, columns=None):
|
|
|
103
114
|
|
|
104
115
|
|
|
105
116
|
def print_entity_obj(title, entity):
|
|
106
|
-
if CliConfig.
|
|
117
|
+
if CliConfig.json:
|
|
107
118
|
print_json(data=entity)
|
|
108
119
|
return
|
|
109
120
|
|
|
@@ -121,3 +132,54 @@ def print_entity_obj(title, entity):
|
|
|
121
132
|
for key in keys:
|
|
122
133
|
table.add_row(f"[bold]{stringify(key)}[/]", stringify(entity_data[key]))
|
|
123
134
|
console.print(table)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def log_chat_completion_message(
|
|
138
|
+
message: ChatCompletionMessageParam, console_: Optional[Console] = None
|
|
139
|
+
) -> None:
|
|
140
|
+
timestamp = datetime.datetime.now().astimezone().strftime("%Y-%m-%d %H:%M:%S")
|
|
141
|
+
code_theme = "github-dark"
|
|
142
|
+
target_console = console_ or console
|
|
143
|
+
try:
|
|
144
|
+
_content = message.get("content") or ""
|
|
145
|
+
message_content = f"```json\n{json.dumps(json.loads(_content), indent=2)}\n```"
|
|
146
|
+
except (TypeError, ValueError):
|
|
147
|
+
message_content = str(message.get("content") or "")
|
|
148
|
+
|
|
149
|
+
tool_calls: Iterable[ChatCompletionMessageToolCallParam] = cast(
|
|
150
|
+
list[ChatCompletionMessageToolCallParam],
|
|
151
|
+
message.get("tool_calls", []),
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
rendered_content: list[Markdown | Text] = []
|
|
155
|
+
|
|
156
|
+
if bool(message_content.strip()):
|
|
157
|
+
rendered_content.append(Markdown(markup=message_content, code_theme=code_theme))
|
|
158
|
+
|
|
159
|
+
for call in tool_calls:
|
|
160
|
+
assert isinstance(call, ChatCompletionMessageToolCall)
|
|
161
|
+
name = call.function.name
|
|
162
|
+
args = call.function.arguments
|
|
163
|
+
rendered_content.append(
|
|
164
|
+
Text.from_markup(
|
|
165
|
+
"[bold magenta]Tool Calls:[/bold magenta]\n",
|
|
166
|
+
overflow="fold",
|
|
167
|
+
)
|
|
168
|
+
)
|
|
169
|
+
rendered_content.append(
|
|
170
|
+
Markdown(markup=f"```python\n▶ {name}({args})\n```", code_theme=code_theme)
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
if not rendered_content:
|
|
174
|
+
return
|
|
175
|
+
|
|
176
|
+
panel = Panel(
|
|
177
|
+
Group(*rendered_content, fit=True),
|
|
178
|
+
title=f"[bold blue]{timestamp}[/bold blue]",
|
|
179
|
+
title_align="left",
|
|
180
|
+
border_style="bright_blue",
|
|
181
|
+
padding=(1, 2),
|
|
182
|
+
expand=True,
|
|
183
|
+
width=console.width,
|
|
184
|
+
)
|
|
185
|
+
target_console.print(panel)
|
|
@@ -10,9 +10,9 @@ from rich.padding import Padding
|
|
|
10
10
|
from rich.panel import Panel
|
|
11
11
|
from rich.table import Table
|
|
12
12
|
|
|
13
|
+
from truefoundry.cli.config import CliConfig
|
|
13
14
|
from truefoundry.cli.console import console
|
|
14
15
|
from truefoundry.common.exceptions import HttpRequestException
|
|
15
|
-
from truefoundry.common.utils import is_debug_env_set
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
def setup_rich_click():
|
|
@@ -23,7 +23,7 @@ def setup_rich_click():
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
def handle_exception(exception):
|
|
26
|
-
if
|
|
26
|
+
if CliConfig.debug:
|
|
27
27
|
console.print_exception(show_locals=True)
|
|
28
28
|
if isinstance(exception, HttpRequestException):
|
|
29
29
|
print_dict_as_table_panel(
|
|
@@ -17,6 +17,17 @@ TFY_INTERNAL_ENV_KEY = "TFY_INTERNAL"
|
|
|
17
17
|
TFY_INTERNAL_SIGNED_URL_SERVER_HOST_ENV_KEY = "TFY_INTERNAL_SIGNED_URL_SERVER_HOST"
|
|
18
18
|
TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN_ENV_KEY = "TFY_INTERNAL_SIGNED_URL_SERVER_TOKEN"
|
|
19
19
|
|
|
20
|
+
# === Global Constants for OpenAI Integration ===
|
|
21
|
+
OPENAI_API_KEY_KEY = "OPENAI_API_KEY"
|
|
22
|
+
OPENAI_MODEL_KEY = "OPENAI_MODEL"
|
|
23
|
+
|
|
24
|
+
# === Ask Command Specific Environment Variables for TrueFoundry ===
|
|
25
|
+
TFY_ASK_OPENAI_API_KEY_KEY = "TFY_ASK_OPENAI_API_KEY"
|
|
26
|
+
TFY_ASK_OPENAI_BASE_URL_KEY = "TFY_ASK_OPENAI_BASE_URL"
|
|
27
|
+
TFY_ASK_MODEL_NAME_KEY = "TFY_ASK_OPENAI_MODEL"
|
|
28
|
+
|
|
29
|
+
TFY_ASK_SYSTEM_PROMPT_NAME_KEY = "TFY_ASK_SYSTEM_PROMPT_NAME"
|
|
30
|
+
|
|
20
31
|
|
|
21
32
|
class PythonPackageManager(str, enum.Enum):
|
|
22
33
|
PIP = "pip"
|
|
@@ -62,6 +73,23 @@ class TrueFoundrySdkEnv(BaseSettings):
|
|
|
62
73
|
TFY_PYTHON_BUILD_PACKAGE_MANAGER: PythonPackageManager = PythonPackageManager.UV
|
|
63
74
|
TFY_PYTHON_BUILD_UV_IMAGE_URI: str = "ghcr.io/astral-sh/uv:latest"
|
|
64
75
|
|
|
76
|
+
# Global Constants for OpenAI Integration
|
|
77
|
+
OPENAI_API_KEY: Optional[str] = Field(default=None, env=OPENAI_API_KEY_KEY)
|
|
78
|
+
OPENAI_MODEL: Optional[str] = Field(default=None, env=OPENAI_MODEL_KEY)
|
|
79
|
+
|
|
80
|
+
# Ask Command Specific Environment Variables for TrueFoundry
|
|
81
|
+
TFY_ASK_OPENAI_API_KEY: Optional[str] = Field(
|
|
82
|
+
default=None, env=TFY_ASK_OPENAI_API_KEY_KEY
|
|
83
|
+
)
|
|
84
|
+
TFY_ASK_OPENAI_BASE_URL: Optional[str] = Field(
|
|
85
|
+
default=None, env=TFY_ASK_OPENAI_BASE_URL_KEY
|
|
86
|
+
)
|
|
87
|
+
TFY_ASK_MODEL_NAME: Optional[str] = Field(default=None, env=TFY_ASK_MODEL_NAME_KEY)
|
|
88
|
+
|
|
89
|
+
TFY_ASK_SYSTEM_PROMPT_NAME: str = Field(
|
|
90
|
+
default="tfy-ask-k8s-prompt", env=TFY_ASK_SYSTEM_PROMPT_NAME_KEY
|
|
91
|
+
)
|
|
92
|
+
|
|
65
93
|
# This is a hack to fresh read the env vars because people can end up importing this file
|
|
66
94
|
# before setting the correct env vars. E.g. in notebook environments.
|
|
67
95
|
@property
|
|
@@ -67,7 +67,7 @@ def relogin_error_message(message: str, host: str = "HOST") -> str:
|
|
|
67
67
|
suffix = " where HOST is TrueFoundry platform URL"
|
|
68
68
|
return (
|
|
69
69
|
f"{message}\n"
|
|
70
|
-
f"
|
|
70
|
+
f"To relogin, use `tfy login --host {host} --relogin` "
|
|
71
71
|
f"or `truefoundry.login(host={host!r}, relogin=True)` function" + suffix
|
|
72
72
|
)
|
|
73
73
|
|
|
@@ -192,11 +192,11 @@ def list_pip_packages_installed(
|
|
|
192
192
|
|
|
193
193
|
|
|
194
194
|
def is_debug_env_set() -> bool:
|
|
195
|
-
return
|
|
195
|
+
return (os.getenv(TFY_DEBUG_ENV_KEY) or "").lower() in ["true", "1"]
|
|
196
196
|
|
|
197
197
|
|
|
198
198
|
def is_internal_env_set() -> bool:
|
|
199
|
-
return
|
|
199
|
+
return (os.getenv(TFY_INTERNAL_ENV_KEY) or "").lower() in ["true", "1"]
|
|
200
200
|
|
|
201
201
|
|
|
202
202
|
def get_user_agent() -> str:
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
from truefoundry.deploy.cli.commands.apply_command import get_apply_command
|
|
2
|
+
from truefoundry.deploy.cli.commands.ask_command import get_ask_command
|
|
2
3
|
from truefoundry.deploy.cli.commands.build_command import get_build_command
|
|
3
|
-
from truefoundry.deploy.cli.commands.create_command import get_create_command
|
|
4
4
|
from truefoundry.deploy.cli.commands.delete_command import get_delete_command
|
|
5
5
|
from truefoundry.deploy.cli.commands.deploy_command import get_deploy_command
|
|
6
6
|
from truefoundry.deploy.cli.commands.deploy_init_command import get_deploy_init_command
|
|
7
7
|
from truefoundry.deploy.cli.commands.get_command import get_get_command
|
|
8
|
-
from truefoundry.deploy.cli.commands.list_command import get_list_command
|
|
9
8
|
from truefoundry.deploy.cli.commands.login_command import get_login_command
|
|
10
9
|
from truefoundry.deploy.cli.commands.logout_command import get_logout_command
|
|
11
10
|
from truefoundry.deploy.cli.commands.logs_command import get_logs_command
|
|
@@ -13,6 +12,5 @@ from truefoundry.deploy.cli.commands.patch_application_command import (
|
|
|
13
12
|
get_patch_application_command,
|
|
14
13
|
)
|
|
15
14
|
from truefoundry.deploy.cli.commands.patch_command import get_patch_command
|
|
16
|
-
from truefoundry.deploy.cli.commands.redeploy_command import get_redeploy_command
|
|
17
15
|
from truefoundry.deploy.cli.commands.terminate_comand import get_terminate_command
|
|
18
16
|
from truefoundry.deploy.cli.commands.trigger_command import get_trigger_command
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import logging
|
|
3
|
+
from typing import Tuple
|
|
4
|
+
|
|
5
|
+
import rich_click as click
|
|
6
|
+
from openai import AsyncOpenAI
|
|
7
|
+
from rich.console import Console
|
|
8
|
+
|
|
9
|
+
from truefoundry.cli.config import CliConfig
|
|
10
|
+
from truefoundry.cli.const import COMMAND_CLS
|
|
11
|
+
from truefoundry.cli.util import handle_exception_wrapper
|
|
12
|
+
from truefoundry.common.constants import (
|
|
13
|
+
ENV_VARS,
|
|
14
|
+
OPENAI_API_KEY_KEY,
|
|
15
|
+
OPENAI_MODEL_KEY,
|
|
16
|
+
TFY_ASK_MODEL_NAME_KEY,
|
|
17
|
+
TFY_ASK_OPENAI_API_KEY_KEY,
|
|
18
|
+
TFY_ASK_OPENAI_BASE_URL_KEY,
|
|
19
|
+
)
|
|
20
|
+
from truefoundry.common.session import Session
|
|
21
|
+
from truefoundry.common.utils import get_tfy_servers_config
|
|
22
|
+
from truefoundry.deploy.cli.commands.utils import select_cluster
|
|
23
|
+
|
|
24
|
+
console = Console()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _get_openai_client() -> Tuple[AsyncOpenAI, str]:
|
|
28
|
+
"""
|
|
29
|
+
Returns an AsyncOpenAI client using either user-provided credentials or TrueFoundry LLM gateway.
|
|
30
|
+
"""
|
|
31
|
+
console.print("")
|
|
32
|
+
default_model = "gpt-4o"
|
|
33
|
+
if ENV_VARS.TFY_ASK_OPENAI_BASE_URL and ENV_VARS.TFY_ASK_OPENAI_API_KEY:
|
|
34
|
+
console.print(
|
|
35
|
+
f"Found custom OpenAI API settings ([green]{TFY_ASK_OPENAI_BASE_URL_KEY}[/green], [green]{TFY_ASK_OPENAI_API_KEY_KEY}[/green]) in env"
|
|
36
|
+
)
|
|
37
|
+
client = AsyncOpenAI(
|
|
38
|
+
base_url=ENV_VARS.TFY_ASK_OPENAI_BASE_URL,
|
|
39
|
+
api_key=ENV_VARS.TFY_ASK_OPENAI_API_KEY,
|
|
40
|
+
)
|
|
41
|
+
if ENV_VARS.TFY_ASK_MODEL_NAME:
|
|
42
|
+
openai_model = ENV_VARS.TFY_ASK_MODEL_NAME
|
|
43
|
+
console.print(
|
|
44
|
+
f"Using custom OpenAI model from env [green]{TFY_ASK_MODEL_NAME_KEY}[/green]: [yellow]{openai_model}[/yellow]"
|
|
45
|
+
)
|
|
46
|
+
else:
|
|
47
|
+
openai_model = default_model
|
|
48
|
+
console.print(
|
|
49
|
+
f"Using default OpenAI model: [yellow]{openai_model}[/yellow]"
|
|
50
|
+
f"\n[dim]Tip: To use a different model, set the env var "
|
|
51
|
+
f"[green]{TFY_ASK_MODEL_NAME_KEY}[/green] to the model name you want to use.[/dim]"
|
|
52
|
+
)
|
|
53
|
+
console.print(
|
|
54
|
+
"[dim][yellow]This operation will use tokens from your model provider and may incur costs.[/yellow][/dim]"
|
|
55
|
+
)
|
|
56
|
+
console.print("")
|
|
57
|
+
return client, openai_model
|
|
58
|
+
elif ENV_VARS.OPENAI_API_KEY:
|
|
59
|
+
console.print(f"Found [green]{OPENAI_API_KEY_KEY}[/green] in env")
|
|
60
|
+
client = AsyncOpenAI(
|
|
61
|
+
api_key=ENV_VARS.OPENAI_API_KEY,
|
|
62
|
+
)
|
|
63
|
+
if ENV_VARS.OPENAI_MODEL:
|
|
64
|
+
openai_model = ENV_VARS.OPENAI_MODEL
|
|
65
|
+
console.print(
|
|
66
|
+
f"Using custom OpenAI model from env [green]{OPENAI_MODEL_KEY}[/green]: [yellow]{openai_model}[/yellow]"
|
|
67
|
+
)
|
|
68
|
+
else:
|
|
69
|
+
openai_model = default_model
|
|
70
|
+
console.print(
|
|
71
|
+
f"Using default OpenAI model: [yellow]{openai_model}[/yellow]"
|
|
72
|
+
f"\n[dim]Tip: To use a different OpenAI model, set the env var "
|
|
73
|
+
f"[green]{OPENAI_MODEL_KEY}[/green] to the model name you want to use.[/dim]"
|
|
74
|
+
)
|
|
75
|
+
console.print(
|
|
76
|
+
f"[dim]Tip: To use your own OpenAI API compatible model for the ask command, set the env vars "
|
|
77
|
+
f"[green]{TFY_ASK_OPENAI_BASE_URL_KEY}[/], "
|
|
78
|
+
f"[green]{TFY_ASK_OPENAI_API_KEY_KEY}[/], and "
|
|
79
|
+
f"[green]{TFY_ASK_MODEL_NAME_KEY}[/].[/dim]"
|
|
80
|
+
)
|
|
81
|
+
console.print(
|
|
82
|
+
"[dim][yellow]This operation will use tokens from your OpenAI account and may incur costs.[/yellow][/dim]"
|
|
83
|
+
)
|
|
84
|
+
console.print("")
|
|
85
|
+
return client, openai_model
|
|
86
|
+
else:
|
|
87
|
+
llm_env_instruction = (
|
|
88
|
+
"[dim]No OpenAI API key found in env."
|
|
89
|
+
f"\n- To use your own OpenAI API compatible model for the ask command, set the env vars "
|
|
90
|
+
f"[green]{TFY_ASK_OPENAI_BASE_URL_KEY}[/], "
|
|
91
|
+
f"[green]{TFY_ASK_OPENAI_API_KEY_KEY}[/], and "
|
|
92
|
+
f"[green]{TFY_ASK_MODEL_NAME_KEY}[/] (default: {default_model})."
|
|
93
|
+
f"\n- Alternatively, you can use the default OpenAI model by setting the env vars "
|
|
94
|
+
f"[green]{OPENAI_API_KEY_KEY}[/], "
|
|
95
|
+
f"[green]{OPENAI_MODEL_KEY}[/] (default: {default_model}).[/dim]"
|
|
96
|
+
)
|
|
97
|
+
raise ValueError(llm_env_instruction)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
@click.command(name="ask", cls=COMMAND_CLS)
|
|
101
|
+
@click.option(
|
|
102
|
+
"-c",
|
|
103
|
+
"--cluster",
|
|
104
|
+
type=str,
|
|
105
|
+
required=False,
|
|
106
|
+
help="The cluster id from TrueFoundry. If not provided, an interactive prompt will list available clusters",
|
|
107
|
+
)
|
|
108
|
+
@click.pass_context
|
|
109
|
+
@handle_exception_wrapper
|
|
110
|
+
def ask_command(ctx, cluster: str) -> None:
|
|
111
|
+
"""
|
|
112
|
+
Ask questions related to your Cluster in TrueFoundry.
|
|
113
|
+
"""
|
|
114
|
+
from truefoundry.deploy.lib.clients.ask_client import ask_client_main
|
|
115
|
+
|
|
116
|
+
debug = CliConfig.debug
|
|
117
|
+
if debug:
|
|
118
|
+
_mcp_logger = logging.getLogger("mcp")
|
|
119
|
+
_mcp_logger.setLevel(logging.DEBUG)
|
|
120
|
+
_mcp_logger.addHandler(logging.StreamHandler())
|
|
121
|
+
|
|
122
|
+
session = Session.new()
|
|
123
|
+
console.print(
|
|
124
|
+
"\n[bold green]Welcome to the Ask Command![/bold green]\n"
|
|
125
|
+
"Use this command to ask questions and troubleshoot issues in your Kubernetes cluster managed by the TrueFoundry Control Plane.\n"
|
|
126
|
+
"It helps you investigate and identify potential problems across services, pods, deployments, and more.\n"
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
if not cluster:
|
|
130
|
+
console.print(
|
|
131
|
+
"[dim]Tip: You can specify a cluster using the '--cluster' option, or select one interactively from the list.[/dim]\n"
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
# Get the cluster id from the command line argument
|
|
135
|
+
cluster = select_cluster(cluster)
|
|
136
|
+
openai_client, openai_model = _get_openai_client()
|
|
137
|
+
tfy_servers_config = get_tfy_servers_config(session.tfy_host)
|
|
138
|
+
mcp_server_url = f"{tfy_servers_config.servicefoundry_server_url}/v1/k8s-mcp"
|
|
139
|
+
asyncio.run(
|
|
140
|
+
ask_client_main(
|
|
141
|
+
cluster=cluster,
|
|
142
|
+
server_url=mcp_server_url,
|
|
143
|
+
token=session.access_token,
|
|
144
|
+
openai_client=openai_client,
|
|
145
|
+
openai_model=openai_model,
|
|
146
|
+
debug=debug,
|
|
147
|
+
)
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def get_ask_command():
|
|
152
|
+
return ask_command
|
{truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/delete_command.py
RENAMED
|
@@ -78,7 +78,7 @@ def delete_workspace(workspace_fqn):
|
|
|
78
78
|
)
|
|
79
79
|
output_hook = RichOutputCallBack()
|
|
80
80
|
output_hook.print_line(PROMPT_DELETED_WORKSPACE.format(workspace_fqn))
|
|
81
|
-
if CliConfig.
|
|
81
|
+
if CliConfig.json:
|
|
82
82
|
print_json(data=deleted_workspace.dict())
|
|
83
83
|
|
|
84
84
|
|
|
@@ -99,7 +99,7 @@ def delete_application(application_fqn):
|
|
|
99
99
|
)
|
|
100
100
|
output_hook = RichOutputCallBack()
|
|
101
101
|
output_hook.print_line(PROMPT_DELETED_APPLICATION.format(application_fqn))
|
|
102
|
-
if CliConfig.
|
|
102
|
+
if CliConfig.json:
|
|
103
103
|
print_json(data=response)
|
|
104
104
|
|
|
105
105
|
|
{truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/kubeconfig_command.py
RENAMED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from typing import Any, Dict, Optional
|
|
2
2
|
from urllib.parse import urljoin
|
|
3
3
|
|
|
4
|
-
import questionary
|
|
5
4
|
import rich_click as click
|
|
6
5
|
from rich.console import Console
|
|
7
6
|
|
|
@@ -15,41 +14,12 @@ from truefoundry.deploy.cli.commands.utils import (
|
|
|
15
14
|
get_kubeconfig_content,
|
|
16
15
|
get_kubeconfig_path,
|
|
17
16
|
save_kubeconfig,
|
|
17
|
+
select_cluster,
|
|
18
18
|
)
|
|
19
19
|
|
|
20
20
|
console = Console()
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
def _select_cluster(cluster: Optional[str] = None) -> str:
|
|
24
|
-
"""
|
|
25
|
-
Retrieve available clusters and either return the specified one after validation
|
|
26
|
-
or allow the user to interactively select from the list.
|
|
27
|
-
"""
|
|
28
|
-
from truefoundry.deploy.lib.clients.servicefoundry_client import (
|
|
29
|
-
ServiceFoundryServiceClient,
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
clusters = ServiceFoundryServiceClient().list_clusters()
|
|
33
|
-
|
|
34
|
-
if not clusters:
|
|
35
|
-
raise click.ClickException("No clusters found in your account.")
|
|
36
|
-
|
|
37
|
-
if cluster:
|
|
38
|
-
if not any(c.id == cluster for c in clusters):
|
|
39
|
-
raise click.ClickException(
|
|
40
|
-
f"Cluster {cluster} not found. Either it does not exist or you might not be autthorized to access it"
|
|
41
|
-
)
|
|
42
|
-
return cluster
|
|
43
|
-
|
|
44
|
-
choices = {cluster.id: cluster for cluster in clusters}
|
|
45
|
-
cluster = questionary.select(
|
|
46
|
-
"Available Clusters:", choices=list(choices.keys())
|
|
47
|
-
).ask()
|
|
48
|
-
if not cluster:
|
|
49
|
-
raise click.ClickException("No cluster selected.")
|
|
50
|
-
return cluster
|
|
51
|
-
|
|
52
|
-
|
|
53
23
|
def _construct_k8s_proxy_server(host: str, cluster: str) -> str:
|
|
54
24
|
"""
|
|
55
25
|
Construct the Kubernetes proxy server URL.
|
|
@@ -95,7 +65,7 @@ def kubeconfig_command(cluster: Optional[str] = None, overwrite: bool = False) -
|
|
|
95
65
|
By default, credentials are written to ~/.kube/config. You can provide an alternate path by setting the KUBECONFIG environment variable. If KUBECONFIG contains multiple paths, the first one is used.
|
|
96
66
|
"""
|
|
97
67
|
session = Session.new()
|
|
98
|
-
cluster =
|
|
68
|
+
cluster = select_cluster(cluster)
|
|
99
69
|
|
|
100
70
|
path = get_kubeconfig_path()
|
|
101
71
|
kubeconfig = get_kubeconfig_content(path=path)
|
{truefoundry-0.7.0rc5 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/login_command.py
RENAMED
|
@@ -12,7 +12,13 @@ from truefoundry.deploy.lib.session import login
|
|
|
12
12
|
|
|
13
13
|
@click.command(name="login", cls=COMMAND_CLS)
|
|
14
14
|
@click.option("--relogin", type=click.BOOL, is_flag=True, default=False)
|
|
15
|
-
@click.option(
|
|
15
|
+
@click.option(
|
|
16
|
+
"--host",
|
|
17
|
+
type=click.STRING,
|
|
18
|
+
required=True,
|
|
19
|
+
envvar=TFY_HOST_ENV_KEY,
|
|
20
|
+
show_envvar=True,
|
|
21
|
+
)
|
|
16
22
|
@click.option(
|
|
17
23
|
"--api-key",
|
|
18
24
|
"--api_key",
|
|
@@ -2,6 +2,8 @@ import os
|
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
from typing import Any, Dict, List, Optional
|
|
4
4
|
|
|
5
|
+
import questionary
|
|
6
|
+
import rich_click as click
|
|
5
7
|
import yaml
|
|
6
8
|
|
|
7
9
|
DEFAULT_KUBECONFIG_PATH: Path = Path.home() / ".kube" / "config"
|
|
@@ -116,3 +118,31 @@ def get_cluster_server_url(config: Dict[str, Any], cluster: str) -> Optional[str
|
|
|
116
118
|
if cluster:
|
|
117
119
|
return cluster["cluster"].get("server")
|
|
118
120
|
return None
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def select_cluster(cluster: Optional[str] = None) -> str:
|
|
124
|
+
"""
|
|
125
|
+
Retrieve available clusters and either return the specified one after validation
|
|
126
|
+
or allow the user to interactively select from the list.
|
|
127
|
+
"""
|
|
128
|
+
from truefoundry.deploy.lib.clients.servicefoundry_client import (
|
|
129
|
+
ServiceFoundryServiceClient,
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
clusters = ServiceFoundryServiceClient().list_clusters()
|
|
133
|
+
|
|
134
|
+
if not clusters:
|
|
135
|
+
raise click.ClickException("No clusters found in your account.")
|
|
136
|
+
|
|
137
|
+
if cluster:
|
|
138
|
+
if not any(c.id == cluster for c in clusters):
|
|
139
|
+
raise click.ClickException(
|
|
140
|
+
f"Cluster {cluster} not found. Either it does not exist or you might not be autthorized to access it"
|
|
141
|
+
)
|
|
142
|
+
return cluster
|
|
143
|
+
|
|
144
|
+
choices = {cluster.id: cluster for cluster in clusters}
|
|
145
|
+
cluster = questionary.select("Pick a Cluster:", choices=list(choices.keys())).ask()
|
|
146
|
+
if not cluster:
|
|
147
|
+
raise click.ClickException("No cluster selected.")
|
|
148
|
+
return cluster
|