truefoundry 0.7.0rc6__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.

Files changed (386) hide show
  1. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/PKG-INFO +4 -3
  2. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/pyproject.toml +10 -5
  3. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/cli/__main__.py +24 -8
  4. truefoundry-0.7.1rc1/truefoundry/cli/config.py +10 -0
  5. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/cli/display_util.py +66 -4
  6. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/cli/util.py +2 -2
  7. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/common/constants.py +28 -0
  8. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/common/utils.py +3 -3
  9. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/__init__.py +1 -3
  10. truefoundry-0.7.1rc1/truefoundry/deploy/cli/commands/ask_command.py +152 -0
  11. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/delete_command.py +2 -2
  12. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/kubeconfig_command.py +2 -32
  13. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/login_command.py +7 -1
  14. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/utils.py +30 -0
  15. truefoundry-0.7.1rc1/truefoundry/deploy/lib/clients/_mcp_streamable_http.py +264 -0
  16. truefoundry-0.7.1rc1/truefoundry/deploy/lib/clients/ask_client.py +371 -0
  17. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/workflow/__init__.py +4 -1
  18. truefoundry-0.7.0rc6/truefoundry/cli/config.py +0 -10
  19. truefoundry-0.7.0rc6/truefoundry/deploy/cli/commands/create_command.py +0 -75
  20. truefoundry-0.7.0rc6/truefoundry/deploy/cli/commands/list_command.py +0 -171
  21. truefoundry-0.7.0rc6/truefoundry/deploy/cli/commands/redeploy_command.py +0 -41
  22. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/.gitignore +0 -0
  23. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/README.md +0 -0
  24. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/__init__.py +0 -0
  25. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/_client.py +0 -0
  26. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/__init__.py +0 -0
  27. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/agents/__init__.py +0 -0
  28. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/agents/base.py +0 -0
  29. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/agents/developer.py +0 -0
  30. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/agents/project_identifier.py +0 -0
  31. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/agents/tester.py +0 -0
  32. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/cli.py +0 -0
  33. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/constants.py +0 -0
  34. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/exception.py +0 -0
  35. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/logger.py +0 -0
  36. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/__init__.py +0 -0
  37. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/ask.py +0 -0
  38. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/base.py +0 -0
  39. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/commit.py +0 -0
  40. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/docker_build.py +0 -0
  41. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/docker_run.py +0 -0
  42. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/file_type_counts.py +0 -0
  43. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/list_files.py +0 -0
  44. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/read_file.py +0 -0
  45. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/send_request.py +0 -0
  46. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/tools/write_file.py +0 -0
  47. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/utils/client.py +0 -0
  48. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/utils/diff.py +0 -0
  49. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/autodeploy/utils/pydantic_compat.py +0 -0
  50. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/cli/__init__.py +0 -0
  51. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/cli/console.py +0 -0
  52. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/cli/const.py +0 -0
  53. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/common/__init__.py +0 -0
  54. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/common/auth_service_client.py +0 -0
  55. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/common/credential_file_manager.py +0 -0
  56. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/common/credential_provider.py +0 -0
  57. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/common/entities.py +0 -0
  58. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/common/exceptions.py +0 -0
  59. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/common/request_utils.py +0 -0
  60. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/common/servicefoundry_client.py +0 -0
  61. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/common/session.py +0 -0
  62. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/common/storage_provider_utils.py +0 -0
  63. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/common/types.py +0 -0
  64. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/common/warnings.py +0 -0
  65. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/__init__.py +0 -0
  66. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/_autogen/models.py +0 -0
  67. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/__init__.py +0 -0
  68. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/builders/__init__.py +0 -0
  69. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/builders/dockerfile.py +0 -0
  70. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/builders/tfy_notebook_buildpack/__init__.py +0 -0
  71. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/builders/tfy_notebook_buildpack/dockerfile_template.py +0 -0
  72. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/builders/tfy_python_buildpack/__init__.py +0 -0
  73. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/builders/tfy_python_buildpack/dockerfile_template.py +0 -0
  74. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/constants.py +0 -0
  75. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/docker_service.py +0 -0
  76. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/builder/utils.py +0 -0
  77. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/__init__.py +0 -0
  78. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/apply_command.py +0 -0
  79. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/build_command.py +0 -0
  80. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/deploy_command.py +0 -0
  81. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/deploy_init_command.py +0 -0
  82. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/get_command.py +0 -0
  83. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/k8s_exec_credential_command.py +0 -0
  84. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/logout_command.py +0 -0
  85. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/logs_command.py +0 -0
  86. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/patch_application_command.py +0 -0
  87. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/patch_command.py +0 -0
  88. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/terminate_comand.py +0 -0
  89. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/cli/commands/trigger_command.py +0 -0
  90. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/core/__init__.py +0 -0
  91. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/core/login.py +0 -0
  92. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/core/logout.py +0 -0
  93. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/io/__init__.py +0 -0
  94. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/io/no_output_callback.py +0 -0
  95. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/io/output_callback.py +0 -0
  96. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/io/rich_output_callback.py +0 -0
  97. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/__init__.py +0 -0
  98. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/clients/__init__.py +0 -0
  99. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/clients/servicefoundry_client.py +0 -0
  100. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/const.py +0 -0
  101. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/dao/__init__.py +0 -0
  102. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/dao/application.py +0 -0
  103. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/dao/apply.py +0 -0
  104. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/dao/delete.py +0 -0
  105. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/dao/version.py +0 -0
  106. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/dao/workspace.py +0 -0
  107. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/logs_utils.py +0 -0
  108. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/messages.py +0 -0
  109. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/model/__init__.py +0 -0
  110. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/model/entity.py +0 -0
  111. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/session.py +0 -0
  112. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/util.py +0 -0
  113. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/lib/win32.py +0 -0
  114. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/python_deploy_codegen.py +0 -0
  115. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/__init__.py +0 -0
  116. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/lib/__init__.py +0 -0
  117. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/lib/deploy.py +0 -0
  118. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/lib/deploy_workflow.py +0 -0
  119. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/lib/deployable_patched_models.py +0 -0
  120. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/lib/models.py +0 -0
  121. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/lib/patched_models.py +0 -0
  122. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/deploy/v2/lib/source.py +0 -0
  123. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/logger.py +0 -0
  124. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/__init__.py +0 -0
  125. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/__init__.py +0 -0
  126. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/__init__.py +0 -0
  127. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/__init__.py +0 -0
  128. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/auth_api.py +0 -0
  129. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/deprecated_api.py +0 -0
  130. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/experiments_api.py +0 -0
  131. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/generate_code_snippet_api.py +0 -0
  132. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/health_api.py +0 -0
  133. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/metrics_api.py +0 -0
  134. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/mlfoundry_artifacts_api.py +0 -0
  135. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/run_artifacts_api.py +0 -0
  136. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api/runs_api.py +0 -0
  137. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api_client.py +0 -0
  138. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/api_response.py +0 -0
  139. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/configuration.py +0 -0
  140. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/exceptions.py +0 -0
  141. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/__init__.py +0 -0
  142. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/agent_app.py +0 -0
  143. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/agent_manifest.py +0 -0
  144. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/agent_open_api_tool_manifest.py +0 -0
  145. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/agent_open_api_tool_with_fqn.py +0 -0
  146. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/agent_with_fqn.py +0 -0
  147. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/apply_request_dto.py +0 -0
  148. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/apply_response_dto.py +0 -0
  149. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_dto.py +0 -0
  150. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_manifest.py +0 -0
  151. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_path.py +0 -0
  152. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_response_dto.py +0 -0
  153. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_type.py +0 -0
  154. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_version_dto.py +0 -0
  155. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_version_response_dto.py +0 -0
  156. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_version_serialization_format.py +0 -0
  157. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/artifact_version_status.py +0 -0
  158. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/assistant_message.py +0 -0
  159. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/authorize_user_for_model_request_dto.py +0 -0
  160. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/authorize_user_for_model_version_request_dto.py +0 -0
  161. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/blob_storage_reference.py +0 -0
  162. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/body_get_search_runs_get.py +0 -0
  163. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/chat_prompt_manifest.py +0 -0
  164. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/chat_prompt_manifest_messages_inner.py +0 -0
  165. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/columns_dto.py +0 -0
  166. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/command.py +0 -0
  167. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/content.py +0 -0
  168. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/content1.py +0 -0
  169. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/content2.py +0 -0
  170. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/content2_any_of_inner.py +0 -0
  171. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_artifact_request_dto.py +0 -0
  172. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_artifact_response_dto.py +0 -0
  173. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_artifact_version_request_dto.py +0 -0
  174. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_artifact_version_response_dto.py +0 -0
  175. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_dataset_request_dto.py +0 -0
  176. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_experiment_request_dto.py +0 -0
  177. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_experiment_response_dto.py +0 -0
  178. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_model_version_request_dto.py +0 -0
  179. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_multi_part_upload_for_dataset_request_dto.py +0 -0
  180. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_multi_part_upload_for_dataset_response_dto.py +0 -0
  181. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_multi_part_upload_request_dto.py +0 -0
  182. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_python_deployment_config_request_dto.py +0 -0
  183. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_python_deployment_config_response_dto.py +0 -0
  184. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_run_request_dto.py +0 -0
  185. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_run_response_dto.py +0 -0
  186. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/create_workflow_task_config_request_dto.py +0 -0
  187. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/data_directory_manifest.py +0 -0
  188. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/dataset_dto.py +0 -0
  189. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/dataset_response_dto.py +0 -0
  190. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/delete_artifact_versions_request_dto.py +0 -0
  191. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/delete_dataset_request_dto.py +0 -0
  192. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/delete_files_for_dataset_request_dto.py +0 -0
  193. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/delete_model_version_request_dto.py +0 -0
  194. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/delete_run_request.py +0 -0
  195. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/delete_tag_request_dto.py +0 -0
  196. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/experiment_dto.py +0 -0
  197. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/experiment_id_request_dto.py +0 -0
  198. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/experiment_response_dto.py +0 -0
  199. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/experiment_tag_dto.py +0 -0
  200. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/export_deployment_files_request_dto.py +0 -0
  201. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/external_blob_storage_source.py +0 -0
  202. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/fast_ai_framework.py +0 -0
  203. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/file_info_dto.py +0 -0
  204. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/finalize_artifact_version_request_dto.py +0 -0
  205. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/framework.py +0 -0
  206. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_artifact_version_aliases_response_dto.py +0 -0
  207. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_experiment_response_dto.py +0 -0
  208. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_latest_run_log_response_dto.py +0 -0
  209. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_metric_history_response.py +0 -0
  210. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_url_for_dataset_write_request_dto.py +0 -0
  211. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_artifact_version_read_request_dto.py +0 -0
  212. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_artifact_version_read_response_dto.py +0 -0
  213. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_artifact_version_write_request_dto.py +0 -0
  214. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_artifact_version_write_response_dto.py +0 -0
  215. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_dataset_read_request_dto.py +0 -0
  216. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_dataset_read_response_dto.py +0 -0
  217. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_signed_urls_for_dataset_write_response_dto.py +0 -0
  218. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/get_tenant_id_response_dto.py +0 -0
  219. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/gluon_framework.py +0 -0
  220. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/h2_o_framework.py +0 -0
  221. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/http_validation_error.py +0 -0
  222. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/image_content_part.py +0 -0
  223. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/image_url.py +0 -0
  224. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/infer_method_name.py +0 -0
  225. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/keras_framework.py +0 -0
  226. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/latest_run_log_dto.py +0 -0
  227. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/library_name.py +0 -0
  228. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/light_gbm_framework.py +0 -0
  229. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_artifact_versions_request_dto.py +0 -0
  230. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_artifact_versions_response_dto.py +0 -0
  231. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_artifacts_request_dto.py +0 -0
  232. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_artifacts_response_dto.py +0 -0
  233. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_colums_response_dto.py +0 -0
  234. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_datasets_request_dto.py +0 -0
  235. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_datasets_response_dto.py +0 -0
  236. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_experiments_response_dto.py +0 -0
  237. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_files_for_artifact_version_request_dto.py +0 -0
  238. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_files_for_artifact_versions_response_dto.py +0 -0
  239. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_files_for_dataset_request_dto.py +0 -0
  240. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_files_for_dataset_response_dto.py +0 -0
  241. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_latest_run_logs_response_dto.py +0 -0
  242. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_metric_history_request_dto.py +0 -0
  243. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_metric_history_response_dto.py +0 -0
  244. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_model_version_response_dto.py +0 -0
  245. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_model_versions_request_dto.py +0 -0
  246. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_models_request_dto.py +0 -0
  247. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_models_response_dto.py +0 -0
  248. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_run_artifacts_response_dto.py +0 -0
  249. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/list_run_logs_response_dto.py +0 -0
  250. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/local_artifact_source.py +0 -0
  251. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/local_model_source.py +0 -0
  252. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/log_batch_request_dto.py +0 -0
  253. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/log_metric_request_dto.py +0 -0
  254. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/log_param_request_dto.py +0 -0
  255. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/manifest.py +0 -0
  256. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/manifest1.py +0 -0
  257. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/manifest2.py +0 -0
  258. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/method.py +0 -0
  259. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/metric_collection_dto.py +0 -0
  260. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/metric_dto.py +0 -0
  261. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/mime_type.py +0 -0
  262. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_configuration.py +0 -0
  263. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_dto.py +0 -0
  264. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_manifest.py +0 -0
  265. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_response_dto.py +0 -0
  266. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_server.py +0 -0
  267. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_version_dto.py +0 -0
  268. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_version_environment.py +0 -0
  269. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/model_version_response_dto.py +0 -0
  270. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/multi_part_upload_dto.py +0 -0
  271. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/multi_part_upload_response_dto.py +0 -0
  272. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/multi_part_upload_storage_provider.py +0 -0
  273. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/notify_artifact_version_failure_dto.py +0 -0
  274. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/onnx_framework.py +0 -0
  275. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/openapi_spec.py +0 -0
  276. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/paddle_framework.py +0 -0
  277. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/param_dto.py +0 -0
  278. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/parameters.py +0 -0
  279. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/py_torch_framework.py +0 -0
  280. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/resolve_agent_app_response_dto.py +0 -0
  281. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/restore_run_request_dto.py +0 -0
  282. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/run_data_dto.py +0 -0
  283. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/run_dto.py +0 -0
  284. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/run_info_dto.py +0 -0
  285. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/run_log_dto.py +0 -0
  286. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/run_log_input_dto.py +0 -0
  287. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/run_response_dto.py +0 -0
  288. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/run_tag_dto.py +0 -0
  289. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/search_runs_request_dto.py +0 -0
  290. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/search_runs_response_dto.py +0 -0
  291. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/set_experiment_tag_request_dto.py +0 -0
  292. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/set_tag_request_dto.py +0 -0
  293. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/signed_url_dto.py +0 -0
  294. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/sklearn_framework.py +0 -0
  295. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/sklearn_model_schema.py +0 -0
  296. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/sklearn_serialization_format.py +0 -0
  297. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/source.py +0 -0
  298. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/source1.py +0 -0
  299. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/source2.py +0 -0
  300. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/spa_cy_framework.py +0 -0
  301. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/stats_models_framework.py +0 -0
  302. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/stop.py +0 -0
  303. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/store_run_logs_request_dto.py +0 -0
  304. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/subject.py +0 -0
  305. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/subject_type.py +0 -0
  306. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/system_message.py +0 -0
  307. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/tensor_flow_framework.py +0 -0
  308. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/text.py +0 -0
  309. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/text_content_part.py +0 -0
  310. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/transformers_framework.py +0 -0
  311. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/trigger_job_run_config_request_dto.py +0 -0
  312. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/trigger_job_run_config_response_dto.py +0 -0
  313. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/true_foundry_managed_source.py +0 -0
  314. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/update_artifact_version_request_dto.py +0 -0
  315. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/update_dataset_request_dto.py +0 -0
  316. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/update_experiment_request_dto.py +0 -0
  317. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/update_model_version_request_dto.py +0 -0
  318. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/update_run_request_dto.py +0 -0
  319. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/update_run_response_dto.py +0 -0
  320. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/url.py +0 -0
  321. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/user_message.py +0 -0
  322. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/validate_external_storage_root_request_dto.py +0 -0
  323. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/validate_external_storage_root_response_dto.py +0 -0
  324. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/validation_error.py +0 -0
  325. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/validation_error_loc_inner.py +0 -0
  326. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/xg_boost_framework.py +0 -0
  327. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/xg_boost_model_schema.py +0 -0
  328. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/models/xg_boost_serialization_format.py +0 -0
  329. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client/rest.py +0 -0
  330. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/client_README.md +0 -0
  331. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/entities/artifacts.py +0 -0
  332. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/models/__init__.py +0 -0
  333. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/models/exceptions.py +0 -0
  334. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/models/schema.py +0 -0
  335. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/models/signature.py +0 -0
  336. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/_autogen/models/utils.py +0 -0
  337. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/artifact/__init__.py +0 -0
  338. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/artifact/truefoundry_artifact_repo.py +0 -0
  339. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/cli/__init__.py +0 -0
  340. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/cli/cli.py +0 -0
  341. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/cli/commands/__init__.py +0 -0
  342. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/cli/commands/download.py +0 -0
  343. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/cli/commands/model_init.py +0 -0
  344. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/cli/utils.py +0 -0
  345. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/clients/__init__.py +0 -0
  346. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/clients/servicefoundry_client.py +0 -0
  347. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/constants.py +0 -0
  348. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/entities.py +0 -0
  349. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/enums.py +0 -0
  350. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/exceptions.py +0 -0
  351. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/git_info.py +0 -0
  352. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/internal_namespace.py +0 -0
  353. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/__init__.py +0 -0
  354. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/artifacts/artifact.py +0 -0
  355. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/artifacts/constants.py +0 -0
  356. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/artifacts/dataset.py +0 -0
  357. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/artifacts/general_artifact.py +0 -0
  358. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/artifacts/model.py +0 -0
  359. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/artifacts/utils.py +0 -0
  360. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/image/__init__.py +0 -0
  361. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/image/constants.py +0 -0
  362. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/image/image.py +0 -0
  363. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/image/image_normalizer.py +0 -0
  364. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/image/types.py +0 -0
  365. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/plot.py +0 -0
  366. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/pydantic_base.py +0 -0
  367. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/log_types/utils.py +0 -0
  368. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/logger.py +0 -0
  369. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/mlfoundry_api.py +0 -0
  370. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/mlfoundry_run.py +0 -0
  371. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/model_framework.py +0 -0
  372. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/prompt_utils.py +0 -0
  373. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/run_utils.py +0 -0
  374. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/session.py +0 -0
  375. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/ml/validation_utils.py +0 -0
  376. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/pydantic_v1.py +0 -0
  377. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/version.py +0 -0
  378. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/workflow/container_task.py +0 -0
  379. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/workflow/map_task.py +0 -0
  380. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/workflow/python_task.py +0 -0
  381. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/workflow/remote_filesystem/__init__.py +0 -0
  382. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/workflow/remote_filesystem/logger.py +0 -0
  383. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/workflow/remote_filesystem/tfy_signed_url_client.py +0 -0
  384. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/workflow/remote_filesystem/tfy_signed_url_fs.py +0 -0
  385. {truefoundry-0.7.0rc6 → truefoundry-0.7.1rc1}/truefoundry/workflow/task.py +0 -0
  386. {truefoundry-0.7.0rc6 → 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.0rc6
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<25.0,>=20.0
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.15
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.0rc6" # This is a placeholder version, it will be replaced when releasing
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,<25.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.15",
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.utils import is_debug_env_set, is_internal_env_set
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
- default=is_debug_env_set,
45
- help="Set logging level to Debug. Can also be set using environment variable. E.g. SFY_DEBUG=1",
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 [b]tfy login[/]
62
+ To start, login to your TrueFoundry account with [code]tfy login[/]
63
+
64
+ Then start deploying with [code]tfy deploy[/]
55
65
 
56
- Then start deploying with [b]tfy deploy[/]
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
- # TODO (chiragjn): Change this to -o json|yaml|table|pager
63
- CliConfig.set("json", json)
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.
@@ -0,0 +1,10 @@
1
+ from dataclasses import dataclass
2
+
3
+
4
+ @dataclass
5
+ class _CliConfig:
6
+ json: bool = False
7
+ debug: bool = False
8
+
9
+
10
+ CliConfig = _CliConfig()
@@ -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.get("json"):
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.get("json"):
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.get("json"):
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 is_debug_env_set():
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"Please login again using `tfy login --host {host} --relogin` "
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 bool(os.getenv(TFY_DEBUG_ENV_KEY))
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 bool(os.getenv(TFY_INTERNAL_ENV_KEY))
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
@@ -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.get("json"):
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.get("json"):
102
+ if CliConfig.json:
103
103
  print_json(data=response)
104
104
 
105
105
 
@@ -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 = _select_cluster(cluster)
68
+ cluster = select_cluster(cluster)
99
69
 
100
70
  path = get_kubeconfig_path()
101
71
  kubeconfig = get_kubeconfig_content(path=path)
@@ -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("--host", type=click.STRING, required=True, envvar=TFY_HOST_ENV_KEY)
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