truss 0.11.9rc503__tar.gz → 0.11.10__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 truss might be problematic. Click here for more details.

Files changed (414) hide show
  1. {truss-0.11.9rc503 → truss-0.11.10}/PKG-INFO +2 -2
  2. {truss-0.11.9rc503 → truss-0.11.10}/pyproject.toml +2 -2
  3. {truss-0.11.9rc503 → truss-0.11.10}/truss/base/trt_llm_config.py +1 -0
  4. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/logs/base_watcher.py +31 -12
  5. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/logs/model_log_watcher.py +24 -1
  6. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/train/core.py +19 -6
  7. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/train/deploy_checkpoints/deploy_checkpoints.py +40 -12
  8. truss-0.11.10/truss/cli/train/deploy_checkpoints/deploy_full_checkpoints.py +9 -0
  9. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/train/deploy_checkpoints/deploy_lora_checkpoints.py +1 -2
  10. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/train/deploy_checkpoints/deploy_whisper_checkpoints.py +1 -3
  11. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/train/types.py +19 -0
  12. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/train_commands.py +45 -3
  13. {truss-0.11.9rc503 → truss-0.11.10}/truss/contexts/image_builder/serving_image_builder.py +0 -11
  14. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/baseten/api.py +1 -1
  15. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/control/application.py +9 -7
  16. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/server.Dockerfile.jinja +1 -1
  17. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/cli/train/test_deploy_checkpoints.py +2 -3
  18. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/templates/control/control/test_server.py +1 -1
  19. truss-0.11.10/truss/util/__init__.py +0 -0
  20. {truss-0.11.9rc503 → truss-0.11.10}/truss-train/truss_train/definitions.py +3 -2
  21. {truss-0.11.9rc503 → truss-0.11.10}/truss-transfer/README.md +1 -1
  22. truss-0.11.9rc503/truss/cli/train/deploy_checkpoints/deploy_full_checkpoints.py +0 -35
  23. {truss-0.11.9rc503 → truss-0.11.10}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  24. {truss-0.11.9rc503 → truss-0.11.10}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  25. {truss-0.11.9rc503 → truss-0.11.10}/.github/pull_request_template.md +0 -0
  26. {truss-0.11.9rc503 → truss-0.11.10}/.gitignore +0 -0
  27. {truss-0.11.9rc503 → truss-0.11.10}/CODE_OF_CONDUCT.md +0 -0
  28. {truss-0.11.9rc503 → truss-0.11.10}/CONTRIBUTING.md +0 -0
  29. {truss-0.11.9rc503 → truss-0.11.10}/LICENSE +0 -0
  30. {truss-0.11.9rc503 → truss-0.11.10}/README.md +0 -0
  31. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/README.md +0 -0
  32. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/README.md +0 -0
  33. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/android-arm-eabi/README.md +0 -0
  34. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/android-arm64/README.md +0 -0
  35. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/darwin-arm64/README.md +0 -0
  36. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/darwin-universal/README.md +0 -0
  37. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/darwin-x64/README.md +0 -0
  38. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/freebsd-x64/README.md +0 -0
  39. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/linux-arm-gnueabihf/README.md +0 -0
  40. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/linux-arm-musleabihf/README.md +0 -0
  41. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/linux-arm64-gnu/README.md +0 -0
  42. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/linux-arm64-musl/README.md +0 -0
  43. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/linux-riscv64-gnu/README.md +0 -0
  44. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/linux-x64-gnu/README.md +0 -0
  45. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/linux-x64-musl/README.md +0 -0
  46. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/win32-arm64-msvc/README.md +0 -0
  47. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/win32-ia32-msvc/README.md +0 -0
  48. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/node_bindings/npm/win32-x64-msvc/README.md +0 -0
  49. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/python_bindings/README.md +0 -0
  50. {truss-0.11.9rc503 → truss-0.11.10}/baseten-performance-client/scripts/README_nodejs.md +0 -0
  51. {truss-0.11.9rc503 → truss-0.11.10}/context_builder.Dockerfile +0 -0
  52. {truss-0.11.9rc503 → truss-0.11.10}/docs/README.md +0 -0
  53. {truss-0.11.9rc503 → truss-0.11.10}/docs/chains/doc_gen/README.md +0 -0
  54. {truss-0.11.9rc503 → truss-0.11.10}/docs/contribute/base-images.md +0 -0
  55. {truss-0.11.9rc503 → truss-0.11.10}/docs/contribute/release.md +0 -0
  56. {truss-0.11.9rc503 → truss-0.11.10}/truss/__init__.py +0 -0
  57. {truss-0.11.9rc503 → truss-0.11.10}/truss/api/__init__.py +0 -0
  58. {truss-0.11.9rc503 → truss-0.11.10}/truss/api/definitions.py +0 -0
  59. {truss-0.11.9rc503 → truss-0.11.10}/truss/base/__init__.py +0 -0
  60. {truss-0.11.9rc503 → truss-0.11.10}/truss/base/constants.py +0 -0
  61. {truss-0.11.9rc503 → truss-0.11.10}/truss/base/custom_types.py +0 -0
  62. {truss-0.11.9rc503 → truss-0.11.10}/truss/base/errors.py +0 -0
  63. {truss-0.11.9rc503 → truss-0.11.10}/truss/base/truss_config.py +0 -0
  64. {truss-0.11.9rc503 → truss-0.11.10}/truss/base/truss_spec.py +0 -0
  65. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/chains_commands.py +0 -0
  66. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/cli.py +0 -0
  67. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/logs/training_log_watcher.py +0 -0
  68. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/logs/utils.py +0 -0
  69. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/remote_cli.py +0 -0
  70. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/train/common.py +0 -0
  71. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/train/deploy_checkpoints/__init__.py +0 -0
  72. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/train/deploy_checkpoints/deploy_checkpoints_helpers.py +0 -0
  73. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/train/deploy_from_checkpoint_config.yml +0 -0
  74. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/train/deploy_from_checkpoint_config_whisper.yml +0 -0
  75. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/train/metrics_watcher.py +0 -0
  76. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/train/poller.py +0 -0
  77. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/utils/common.py +0 -0
  78. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/utils/output.py +0 -0
  79. {truss-0.11.9rc503 → truss-0.11.10}/truss/cli/utils/self_upgrade.py +0 -0
  80. {truss-0.11.9rc503 → truss-0.11.10}/truss/contexts/docker_build_setup.py +0 -0
  81. {truss-0.11.9rc503 → truss-0.11.10}/truss/contexts/image_builder/cache_warmer.py +0 -0
  82. {truss-0.11.9rc503 → truss-0.11.10}/truss/contexts/image_builder/image_builder.py +0 -0
  83. {truss-0.11.9rc503 → truss-0.11.10}/truss/contexts/image_builder/util.py +0 -0
  84. {truss-0.11.9rc503 → truss-0.11.10}/truss/contexts/local_loader/docker_build_emulator.py +0 -0
  85. {truss-0.11.9rc503 → truss-0.11.10}/truss/contexts/local_loader/dockerfile_parser.py +0 -0
  86. {truss-0.11.9rc503 → truss-0.11.10}/truss/contexts/local_loader/load_model_local.py +0 -0
  87. {truss-0.11.9rc503 → truss-0.11.10}/truss/contexts/local_loader/truss_module_loader.py +0 -0
  88. {truss-0.11.9rc503 → truss-0.11.10}/truss/contexts/local_loader/utils.py +0 -0
  89. {truss-0.11.9rc503 → truss-0.11.10}/truss/contexts/truss_context.py +0 -0
  90. {truss-0.11.9rc503 → truss-0.11.10}/truss/local/local_config.py +0 -0
  91. {truss-0.11.9rc503 → truss-0.11.10}/truss/local/local_config_handler.py +0 -0
  92. {truss-0.11.9rc503 → truss-0.11.10}/truss/patch/__init__.py +0 -0
  93. {truss-0.11.9rc503 → truss-0.11.10}/truss/patch/hash.py +0 -0
  94. {truss-0.11.9rc503 → truss-0.11.10}/truss/patch/signature.py +0 -0
  95. {truss-0.11.9rc503 → truss-0.11.10}/truss/patch/truss_dir_patch_applier.py +0 -0
  96. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/baseten/__init__.py +0 -0
  97. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/baseten/auth.py +0 -0
  98. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/baseten/core.py +0 -0
  99. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/baseten/custom_types.py +0 -0
  100. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/baseten/error.py +0 -0
  101. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/baseten/remote.py +0 -0
  102. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/baseten/rest_client.py +0 -0
  103. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/baseten/service.py +0 -0
  104. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/baseten/utils/status.py +0 -0
  105. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/baseten/utils/tar.py +0 -0
  106. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/baseten/utils/time.py +0 -0
  107. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/baseten/utils/transfer.py +0 -0
  108. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/remote_factory.py +0 -0
  109. {truss-0.11.9rc503 → truss-0.11.10}/truss/remote/truss_remote.py +0 -0
  110. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/README.md.jinja +0 -0
  111. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/__init__.py +0 -0
  112. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/base.Dockerfile.jinja +0 -0
  113. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/cache.Dockerfile.jinja +0 -0
  114. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/cache_requirements.txt +0 -0
  115. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/control/endpoints.py +0 -0
  116. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/control/helpers/context_managers.py +0 -0
  117. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/control/helpers/custom_types.py +0 -0
  118. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/control/helpers/errors.py +0 -0
  119. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/control/helpers/inference_server_controller.py +0 -0
  120. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/control/helpers/inference_server_process_controller.py +0 -0
  121. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/control/helpers/inference_server_starter.py +0 -0
  122. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/control/helpers/truss_patch/__init__.py +0 -0
  123. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/control/helpers/truss_patch/model_code_patch_applier.py +0 -0
  124. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/control/helpers/truss_patch/model_container_patch_applier.py +0 -0
  125. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/control/helpers/truss_patch/requirement_name_identifier.py +0 -0
  126. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/control/helpers/truss_patch/system_packages.py +0 -0
  127. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/control/server.py +0 -0
  128. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/control/requirements.txt +0 -0
  129. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/copy_cache_files.Dockerfile.jinja +0 -0
  130. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/custom/examples.yaml +0 -0
  131. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/custom/model/__init__.py +0 -0
  132. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/custom/model/model.py +0 -0
  133. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/custom_python_dx/my_model.py +0 -0
  134. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/docker_server/proxy.conf.jinja +0 -0
  135. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/docker_server/supervisord.conf.jinja +0 -0
  136. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/docker_server_requirements.txt +0 -0
  137. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/server/__init__.py +0 -0
  138. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/server/common/__init__.py +0 -0
  139. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/server/common/errors.py +0 -0
  140. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/server/common/patches/whisper/patch.py +0 -0
  141. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/server/common/patches.py +0 -0
  142. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/server/common/retry.py +0 -0
  143. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/server/common/schema.py +0 -0
  144. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/server/common/tracing.py +0 -0
  145. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/server/main.py +0 -0
  146. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/server/model_wrapper.py +0 -0
  147. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/server/requirements.txt +0 -0
  148. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/server/truss_server.py +0 -0
  149. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/shared/__init__.py +0 -0
  150. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/shared/dynamic_config_resolver.py +0 -0
  151. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/shared/lazy_data_resolver.py +0 -0
  152. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/shared/log_config.py +0 -0
  153. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/shared/secrets_resolver.py +0 -0
  154. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/shared/serialization.py +0 -0
  155. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/shared/util.py +0 -0
  156. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/train/config.py +0 -0
  157. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/train/run.sh +0 -0
  158. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/trtllm-audio/model/model.py +0 -0
  159. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/trtllm-audio/packages/sigint_patch.py +0 -0
  160. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/trtllm-audio/packages/whisper_trt/__init__.py +0 -0
  161. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/trtllm-audio/packages/whisper_trt/assets.py +0 -0
  162. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/trtllm-audio/packages/whisper_trt/batching.py +0 -0
  163. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/trtllm-audio/packages/whisper_trt/custom_types.py +0 -0
  164. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/trtllm-audio/packages/whisper_trt/modeling.py +0 -0
  165. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/trtllm-audio/packages/whisper_trt/tokenizer.py +0 -0
  166. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/trtllm-audio/packages/whisper_trt/utils.py +0 -0
  167. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/trtllm-briton/README.md +0 -0
  168. {truss-0.11.9rc503 → truss-0.11.10}/truss/templates/trtllm-briton/src/extension.py +0 -0
  169. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/__init__.py +0 -0
  170. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/cli/test_cli.py +0 -0
  171. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/cli/train/resources/test_deploy_from_checkpoint_config.yml +0 -0
  172. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/cli/train/test_cache_view.py +0 -0
  173. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/cli/train/test_train_cli_core.py +0 -0
  174. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/cli/train/test_train_init.py +0 -0
  175. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/conftest.py +0 -0
  176. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/contexts/image_builder/test_serving_image_builder.py +0 -0
  177. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/contexts/local_loader/test_load_local.py +0 -0
  178. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/contexts/local_loader/test_truss_module_finder.py +0 -0
  179. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/helpers.py +0 -0
  180. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/local/test_local_config_handler.py +0 -0
  181. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/patch/test_calc_patch.py +0 -0
  182. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/patch/test_dir_signature.py +0 -0
  183. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/patch/test_hash.py +0 -0
  184. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/patch/test_signature.py +0 -0
  185. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/patch/test_truss_dir_patch_applier.py +0 -0
  186. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/patch/test_types.py +0 -0
  187. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/remote/baseten/conftest.py +0 -0
  188. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/remote/baseten/test_api.py +0 -0
  189. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/remote/baseten/test_auth.py +0 -0
  190. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/remote/baseten/test_core.py +0 -0
  191. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/remote/baseten/test_remote.py +0 -0
  192. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/remote/baseten/test_service.py +0 -0
  193. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/remote/test_remote_factory.py +0 -0
  194. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/remote/test_truss_remote.py +0 -0
  195. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/templates/control/control/conftest.py +0 -0
  196. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/templates/control/control/helpers/test_context_managers.py +0 -0
  197. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/templates/control/control/helpers/test_model_container_patch_applier.py +0 -0
  198. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/templates/control/control/helpers/test_requirement_name_identifier.py +0 -0
  199. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/templates/control/control/test_endpoints.py +0 -0
  200. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/templates/control/control/test_server_integration.py +0 -0
  201. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/templates/core/server/test_dynamic_config_resolver.py +0 -0
  202. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/templates/core/server/test_lazy_data_resolver_v2.py +0 -0
  203. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/templates/core/server/test_secrets_resolver.py +0 -0
  204. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/templates/server/common/test_retry.py +0 -0
  205. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/templates/server/test_model_wrapper.py +0 -0
  206. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/templates/server/test_schema.py +0 -0
  207. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/templates/server/test_truss_server.py +0 -0
  208. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_build.py +0 -0
  209. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_config.py +0 -0
  210. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_context_builder_image.py +0 -0
  211. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_control_truss_patching.py +0 -0
  212. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_custom_server.py +0 -0
  213. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/__init__.py +0 -0
  214. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/annotated_types_truss/__init__.py +0 -0
  215. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/annotated_types_truss/config.yaml +0 -0
  216. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/annotated_types_truss/model/__init__.py +0 -0
  217. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/annotated_types_truss/model/model.py +0 -0
  218. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/auto-mpg.data +0 -0
  219. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/context_builder_image_test/Dockerfile +0 -0
  220. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/context_builder_image_test/__init__.py +0 -0
  221. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/context_builder_image_test/test.py +0 -0
  222. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/gcs_fix/__init__.py +0 -0
  223. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/gcs_fix/config.yaml +0 -0
  224. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/gcs_fix/model/__init__.py +0 -0
  225. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/gcs_fix/model/model.py +0 -0
  226. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/happy.ipynb +0 -0
  227. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/model_load_failure_test/__init__.py +0 -0
  228. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/model_load_failure_test/config.yaml +0 -0
  229. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/model_load_failure_test/model/__init__.py +0 -0
  230. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/model_load_failure_test/model/model.py +0 -0
  231. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/patch_ping_test_server/__init__.py +0 -0
  232. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/patch_ping_test_server/app.py +0 -0
  233. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/pima-indians-diabetes.csv +0 -0
  234. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/readme_int_example.md +0 -0
  235. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/readme_no_example.md +0 -0
  236. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/readme_str_example.md +0 -0
  237. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/server.Dockerfile +0 -0
  238. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/server_conformance_test_truss/__init__.py +0 -0
  239. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/server_conformance_test_truss/config.yaml +0 -0
  240. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/server_conformance_test_truss/model/__init__.py +0 -0
  241. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/server_conformance_test_truss/model/model.py +0 -0
  242. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_async_truss/__init__.py +0 -0
  243. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_async_truss/config.yaml +0 -0
  244. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_async_truss/model/__init__.py +0 -0
  245. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_async_truss/model/model.py +0 -0
  246. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_basic_truss/__init__.py +0 -0
  247. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_basic_truss/config.yaml +0 -0
  248. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_basic_truss/model/__init__.py +0 -0
  249. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_basic_truss/model/model.py +0 -0
  250. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_build_commands/__init__.py +0 -0
  251. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_build_commands/config.yaml +0 -0
  252. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_build_commands/model/__init__.py +0 -0
  253. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_build_commands/model/model.py +0 -0
  254. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_build_commands_failure/__init__.py +0 -0
  255. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_build_commands_failure/config.yaml +0 -0
  256. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_build_commands_failure/model/__init__.py +0 -0
  257. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_build_commands_failure/model/model.py +0 -0
  258. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_concurrency_truss/__init__.py +0 -0
  259. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_concurrency_truss/config.yaml +0 -0
  260. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_concurrency_truss/model/__init__.py +0 -0
  261. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_concurrency_truss/model/model.py +0 -0
  262. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_custom_server_truss/__init__.py +0 -0
  263. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_custom_server_truss/config.yaml +0 -0
  264. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_custom_server_truss/test_docker_image/Dockerfile +0 -0
  265. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_custom_server_truss/test_docker_image/README.md +0 -0
  266. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_custom_server_truss/test_docker_image/VERSION +0 -0
  267. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_custom_server_truss/test_docker_image/__init__.py +0 -0
  268. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_custom_server_truss/test_docker_image/app.py +0 -0
  269. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_custom_server_truss/test_docker_image/build_upload_new_image.sh +0 -0
  270. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_env_vars/config.yaml +0 -0
  271. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_go_custom_server_truss/config.yaml +0 -0
  272. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_go_custom_server_truss/docker/Dockerfile +0 -0
  273. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_go_custom_server_truss/docker/README.md +0 -0
  274. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_go_custom_server_truss/docker/VERSION +0 -0
  275. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_go_custom_server_truss/docker/build_upload_new_image.sh +0 -0
  276. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_go_custom_server_truss/docker/main.go +0 -0
  277. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_openai/__init__.py +0 -0
  278. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_openai/config.yaml +0 -0
  279. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_openai/model/__init__.py +0 -0
  280. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_openai/model/model.py +0 -0
  281. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_pyantic_v1/__init__.py +0 -0
  282. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_pyantic_v1/config.yaml +0 -0
  283. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_pyantic_v1/model/__init__.py +0 -0
  284. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_pyantic_v1/model/model.py +0 -0
  285. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_pyantic_v1/requirements.txt +0 -0
  286. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_pyantic_v2/__init__.py +0 -0
  287. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_pyantic_v2/config.yaml +0 -0
  288. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_pyantic_v2/model/__init__.py +0 -0
  289. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_pyantic_v2/model/model.py +0 -0
  290. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_pyantic_v2/requirements.txt +0 -0
  291. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_requirements_file_truss/__init__.py +0 -0
  292. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_requirements_file_truss/config.yaml +0 -0
  293. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_requirements_file_truss/model/__init__.py +0 -0
  294. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_requirements_file_truss/model/model.py +0 -0
  295. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_requirements_file_truss/requirements.txt +0 -0
  296. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_async_generator_truss/__init__.py +0 -0
  297. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_async_generator_truss/config.yaml +0 -0
  298. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_async_generator_truss/model/__init__.py +0 -0
  299. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_async_generator_truss/model/model.py +0 -0
  300. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_read_timeout/__init__.py +0 -0
  301. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_read_timeout/config.yaml +0 -0
  302. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_read_timeout/model/__init__.py +0 -0
  303. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_read_timeout/model/model.py +0 -0
  304. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss/__init__.py +0 -0
  305. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss/config.yaml +0 -0
  306. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss/model/__init__.py +0 -0
  307. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss/model/model.py +0 -0
  308. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss_with_error/__init__.py +0 -0
  309. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss_with_error/config.yaml +0 -0
  310. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss_with_error/model/__init__.py +0 -0
  311. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss_with_error/model/model.py +0 -0
  312. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss_with_error/packages/__init__.py +0 -0
  313. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss_with_error/packages/helpers_1.py +0 -0
  314. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss_with_error/packages/helpers_2.py +0 -0
  315. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss_with_tracing/__init__.py +0 -0
  316. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss_with_tracing/config.yaml +0 -0
  317. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss_with_tracing/model/__init__.py +0 -0
  318. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_streaming_truss_with_tracing/model/model.py +0 -0
  319. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_trt_llm_truss/__init__.py +0 -0
  320. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_trt_llm_truss/config.yaml +0 -0
  321. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_trt_llm_truss/model/__init__.py +0 -0
  322. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_trt_llm_truss/model/model.py +0 -0
  323. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss/__init__.py +0 -0
  324. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss/config.yaml +0 -0
  325. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss/examples.yaml +0 -0
  326. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss/model/__init__.py +0 -0
  327. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss/model/dummy +0 -0
  328. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss/model/model.py +0 -0
  329. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss/packages/__init__.py +0 -0
  330. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss/packages/test_package/__init__.py +0 -0
  331. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss/packages/test_package/test.py +0 -0
  332. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_server_model_cache_v1/__init__.py +0 -0
  333. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_server_model_cache_v1/config.yaml +0 -0
  334. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_server_model_cache_v1/model/__init__.py +0 -0
  335. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_server_model_cache_v1/model/model.py +0 -0
  336. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_server_model_cache_v2/__init__.py +0 -0
  337. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_server_model_cache_v2/config.yaml +0 -0
  338. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_server_model_cache_v2/model/__init__.py +0 -0
  339. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_server_model_cache_v2/model/model.py +0 -0
  340. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_with_error/__init__.py +0 -0
  341. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_with_error/config.yaml +0 -0
  342. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_with_error/model/__init__.py +0 -0
  343. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_with_error/model/model.py +0 -0
  344. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_with_error/packages/__init__.py +0 -0
  345. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_with_error/packages/helpers_1.py +0 -0
  346. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_data/test_truss_with_error/packages/helpers_2.py +0 -0
  347. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_docker.py +0 -0
  348. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_model_inference.py +0 -0
  349. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_model_schema.py +0 -0
  350. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_testing_utilities_for_other_tests.py +0 -0
  351. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_truss_gatherer.py +0 -0
  352. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_truss_handle.py +0 -0
  353. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/test_util.py +0 -0
  354. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/trt_llm/test_trt_llm_config.py +0 -0
  355. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/trt_llm/test_validation.py +0 -0
  356. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/util/test_config_checks.py +0 -0
  357. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/util/test_env_vars.py +0 -0
  358. {truss-0.11.9rc503 → truss-0.11.10}/truss/tests/util/test_path.py +0 -0
  359. {truss-0.11.9rc503 → truss-0.11.10}/truss/trt_llm/config_checks.py +0 -0
  360. {truss-0.11.9rc503 → truss-0.11.10}/truss/trt_llm/validation.py +0 -0
  361. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/__init__.py +0 -0
  362. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/build.py +0 -0
  363. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/decorators.py +0 -0
  364. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/patch/__init__.py +0 -0
  365. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/patch/calc_patch.py +0 -0
  366. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/patch/constants.py +0 -0
  367. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/patch/custom_types.py +0 -0
  368. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/patch/dir_signature.py +0 -0
  369. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/patch/hash.py +0 -0
  370. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/patch/local_truss_patch_applier.py +0 -0
  371. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/patch/signature.py +0 -0
  372. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/patch/truss_dir_patch_applier.py +0 -0
  373. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/readme_generator.py +0 -0
  374. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/truss_gatherer.py +0 -0
  375. {truss-0.11.9rc503 → truss-0.11.10}/truss/truss_handle/truss_handle.py +0 -0
  376. {truss-0.11.9rc503 → truss-0.11.10}/truss/util/.truss_ignore +0 -0
  377. {truss-0.11.9rc503 → truss-0.11.10}/truss/util/docker.py +0 -0
  378. {truss-0.11.9rc503 → truss-0.11.10}/truss/util/download.py +0 -0
  379. {truss-0.11.9rc503 → truss-0.11.10}/truss/util/env_vars.py +0 -0
  380. {truss-0.11.9rc503 → truss-0.11.10}/truss/util/gpu.py +0 -0
  381. {truss-0.11.9rc503 → truss-0.11.10}/truss/util/jinja.py +0 -0
  382. {truss-0.11.9rc503 → truss-0.11.10}/truss/util/log_utils.py +0 -0
  383. {truss-0.11.9rc503 → truss-0.11.10}/truss/util/notebook.py +0 -0
  384. {truss-0.11.9rc503 → truss-0.11.10}/truss/util/path.py +0 -0
  385. {truss-0.11.9rc503 → truss-0.11.10}/truss/util/requirements.py +0 -0
  386. {truss-0.11.9rc503 → truss-0.11.10}/truss/util/user_config.py +0 -0
  387. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/examples/README.md +0 -0
  388. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/examples/audio-transcription/README.md +0 -0
  389. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/examples/rag/README.md +0 -0
  390. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/tests/itest_chain/requirements.txt +0 -0
  391. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/__init__.py +0 -0
  392. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/deployment/__init__.py +0 -0
  393. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/deployment/code_gen.py +0 -0
  394. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/deployment/deployment_client.py +0 -0
  395. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/framework.py +0 -0
  396. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/private_types.py +0 -0
  397. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/public_api.py +0 -0
  398. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/public_types.py +0 -0
  399. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/py.typed +0 -0
  400. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/pydantic_numpy.py +0 -0
  401. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/reference_code/reference_chainlet.py +0 -0
  402. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/reference_code/reference_model.py +0 -0
  403. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/remote_chainlet/__init__.py +0 -0
  404. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/remote_chainlet/model_skeleton.py +0 -0
  405. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/remote_chainlet/stub.py +0 -0
  406. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/remote_chainlet/utils.py +0 -0
  407. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/streaming.py +0 -0
  408. {truss-0.11.9rc503 → truss-0.11.10}/truss-chains/truss_chains/utils.py +0 -0
  409. {truss-0.11.9rc503 → truss-0.11.10}/truss-train/truss_train/__init__.py +0 -0
  410. {truss-0.11.9rc503 → truss-0.11.10}/truss-train/truss_train/deployment.py +0 -0
  411. {truss-0.11.9rc503 → truss-0.11.10}/truss-train/truss_train/loader.py +0 -0
  412. {truss-0.11.9rc503 → truss-0.11.10}/truss-train/truss_train/public_api.py +0 -0
  413. {truss-0.11.9rc503 → truss-0.11.10}/truss-train/truss_train/restore_from_checkpoint.py +0 -0
  414. {truss-0.11.9rc503 → truss-0.11.10}/truss-transfer/tests/README.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: truss
3
- Version: 0.11.9rc503
3
+ Version: 0.11.10
4
4
  Summary: A seamless bridge from model development to model delivery
5
5
  Project-URL: Repository, https://github.com/basetenlabs/truss
6
6
  Project-URL: Homepage, https://truss.baseten.co
@@ -37,7 +37,7 @@ Requires-Dist: rich<14,>=13.4.2
37
37
  Requires-Dist: ruff>=0.4.8
38
38
  Requires-Dist: tenacity>=8.0.1
39
39
  Requires-Dist: tomlkit>=0.13.2
40
- Requires-Dist: truss-transfer<0.0.35,>=0.0.30
40
+ Requires-Dist: truss-transfer<0.0.36,>=0.0.32
41
41
  Requires-Dist: watchfiles<0.20,>=0.19.0
42
42
  Description-Content-Type: text/markdown
43
43
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "truss"
3
- version = "0.11.9rc503"
3
+ version = "0.11.10"
4
4
  description = "A seamless bridge from model development to model delivery"
5
5
  authors = [
6
6
  { name = "Pankaj Gupta", email = "no-reply@baseten.co" },
@@ -43,7 +43,7 @@ dependencies = [
43
43
  "ruff>=0.4.8",
44
44
  "tenacity>=8.0.1",
45
45
  "watchfiles>=0.19.0,<0.20",
46
- "truss-transfer>=0.0.30,<0.0.35",
46
+ "truss-transfer>=0.0.32,<0.0.36",
47
47
  ]
48
48
 
49
49
  [project.urls]
@@ -577,6 +577,7 @@ class TRTLLMConfigurationV2(PydanticTrTBaseModel):
577
577
  "quantization_type",
578
578
  "quantization_config",
579
579
  "skip_build_result",
580
+ "num_builder_gpus",
580
581
  ]
581
582
 
582
583
  build_settings = self.build.model_dump(exclude_unset=True)
@@ -17,7 +17,9 @@ class LogWatcher(ABC):
17
17
  # NB(nikhil): we add buffer for clock skew, so this helps us detect duplicates.
18
18
  # TODO(nikhil): clean up hashes so this doesn't grow indefinitely.
19
19
  _log_hashes: set[str] = set()
20
- _last_poll_time: Optional[int] = None
20
+
21
+ _last_poll_time_ms: Optional[int] = None
22
+ _last_log_time_ms: Optional[int] = None
21
23
 
22
24
  def __init__(self, api: BasetenApi):
23
25
  self.api = api
@@ -26,37 +28,54 @@ class LogWatcher(ABC):
26
28
  log_str = f"{log.timestamp}-{log.message}-{log.replica}"
27
29
  return hashlib.sha256(log_str.encode("utf-8")).hexdigest()
28
30
 
29
- def _poll(self) -> Iterator[ParsedLog]:
30
- start_epoch: Optional[int] = None
31
- now = int(time.time() * 1000)
32
- if self._last_poll_time is not None:
33
- start_epoch = self._last_poll_time - CLOCK_SKEW_BUFFER_MS
31
+ def get_start_epoch_ms(self, now_ms: int) -> Optional[int]:
32
+ if self._last_poll_time_ms:
33
+ return self._last_poll_time_ms - CLOCK_SKEW_BUFFER_MS
34
+
35
+ return None
34
36
 
37
+ def fetch_and_parse_logs(
38
+ self, start_epoch_millis: Optional[int], end_epoch_millis: Optional[int]
39
+ ) -> Iterator[ParsedLog]:
35
40
  api_logs = self.fetch_logs(
36
- start_epoch_millis=start_epoch, end_epoch_millis=now + CLOCK_SKEW_BUFFER_MS
41
+ start_epoch_millis=start_epoch_millis, end_epoch_millis=end_epoch_millis
37
42
  )
38
43
 
39
44
  parsed_logs = parse_logs(api_logs)
45
+
40
46
  for log in parsed_logs:
41
- h = self._hash_log(log)
42
- if h not in self._log_hashes:
47
+ if (h := self._hash_log(log)) not in self._log_hashes:
43
48
  self._log_hashes.add(h)
49
+
44
50
  yield log
45
51
 
46
- self._last_poll_time = now
52
+ def poll(self) -> Iterator[ParsedLog]:
53
+ now_ms = int(time.time() * 1000)
54
+ start_epoch_ms = self.get_start_epoch_ms(now_ms)
55
+
56
+ for log in self.fetch_and_parse_logs(
57
+ start_epoch_millis=start_epoch_ms,
58
+ end_epoch_millis=now_ms + CLOCK_SKEW_BUFFER_MS,
59
+ ):
60
+ yield log
61
+
62
+ epoch_ns = int(log.timestamp)
63
+ self._last_log_time_ms = int(epoch_ns / 1e6)
64
+
65
+ self._last_poll_time_ms = now_ms
47
66
 
48
67
  def watch(self) -> Iterator[ParsedLog]:
49
68
  self.before_polling()
50
69
  with console.status("Polling logs", spinner="aesthetic"):
51
70
  while True:
52
- for log in self._poll():
71
+ for log in self.poll():
53
72
  yield log
54
73
  if self._log_hashes:
55
74
  break
56
75
  time.sleep(POLL_INTERVAL_SEC)
57
76
 
58
77
  while self.should_poll_again():
59
- for log in self._poll():
78
+ for log in self.poll():
60
79
  yield log
61
80
  time.sleep(POLL_INTERVAL_SEC)
62
81
  self.post_poll()
@@ -1,9 +1,12 @@
1
+ from functools import cached_property
1
2
  from typing import Any, List, Optional
2
3
 
3
4
  from truss.cli.logs.base_watcher import LogWatcher
4
5
  from truss.remote.baseten.api import BasetenApi
5
6
  from truss.remote.baseten.utils.status import MODEL_RUNNING_STATES
6
7
 
8
+ MAX_LOOK_BACK_MS = 1000 * 60 * 60 # 1 hour.
9
+
7
10
 
8
11
  class ModelDeploymentLogWatcher(LogWatcher):
9
12
  _model_id: str
@@ -25,11 +28,31 @@ class ModelDeploymentLogWatcher(LogWatcher):
25
28
  self._model_id, self._deployment_id, start_epoch_millis, end_epoch_millis
26
29
  )
27
30
 
31
+ def get_start_epoch_ms(self, now_ms: int) -> Optional[int]:
32
+ # NOTE(Tyron): If there can be multiple replicas,
33
+ # we can't use a timestamp cursor to poll for logs.
34
+ if not self._is_development:
35
+ return super().get_start_epoch_ms(now_ms)
36
+
37
+ # Cursor logic.
38
+
39
+ if self._last_log_time_ms:
40
+ return max(self._last_log_time_ms, now_ms - MAX_LOOK_BACK_MS)
41
+
42
+ return None
43
+
28
44
  def should_poll_again(self) -> bool:
29
45
  return self._current_status in MODEL_RUNNING_STATES
30
46
 
47
+ def _get_deployment(self) -> Any:
48
+ return self.api.get_deployment(self._model_id, self._deployment_id)
49
+
31
50
  def _get_current_status(self) -> str:
32
- return self.api.get_deployment(self._model_id, self._deployment_id)["status"]
51
+ return self._get_deployment()["status"]
52
+
53
+ @cached_property
54
+ def _is_development(self) -> bool:
55
+ return self._get_deployment()["is_development"]
33
56
 
34
57
  def post_poll(self) -> None:
35
58
  self._current_status = self._get_current_status()
@@ -16,7 +16,11 @@ from rich.text import Text
16
16
 
17
17
  from truss.cli.train import common, deploy_checkpoints
18
18
  from truss.cli.train.metrics_watcher import MetricsWatcher
19
- from truss.cli.train.types import DeployCheckpointArgs, DeployCheckpointsConfigComplete
19
+ from truss.cli.train.types import (
20
+ DeployCheckpointArgs,
21
+ DeployCheckpointsConfigComplete,
22
+ DeploySuccessResult,
23
+ )
20
24
  from truss.cli.utils import common as cli_common
21
25
  from truss.cli.utils.output import console
22
26
  from truss.remote.baseten.custom_types import (
@@ -244,17 +248,25 @@ def view_training_job_metrics(
244
248
 
245
249
  def create_model_version_from_inference_template(
246
250
  remote_provider: BasetenRemote, args: DeployCheckpointArgs
247
- ) -> DeployCheckpointsConfigComplete:
251
+ ) -> DeploySuccessResult:
248
252
  if not args.deploy_config_path:
249
253
  return deploy_checkpoints.create_model_version_from_inference_template(
250
- remote_provider, DeployCheckpointsConfig(), args.project_id, args.job_id
254
+ remote_provider,
255
+ DeployCheckpointsConfig(),
256
+ args.project_id,
257
+ args.job_id,
258
+ args.dry_run,
251
259
  )
252
260
  #### User provided a checkpoint deploy config file
253
261
  with loader.import_deploy_checkpoints_config(
254
262
  Path(args.deploy_config_path)
255
263
  ) as checkpoint_deploy:
256
264
  return deploy_checkpoints.create_model_version_from_inference_template(
257
- remote_provider, checkpoint_deploy, args.project_id, args.job_id
265
+ remote_provider,
266
+ checkpoint_deploy,
267
+ args.project_id,
268
+ args.job_id,
269
+ args.dry_run,
258
270
  )
259
271
 
260
272
 
@@ -262,7 +274,7 @@ def _get_checkpoint_names(
262
274
  checkpoint_deploy_config: DeployCheckpointsConfigComplete,
263
275
  ) -> list[str]:
264
276
  return [
265
- checkpoint.paths[0].strip("/").split("/")[-1]
277
+ checkpoint.checkpoint_name
266
278
  for checkpoint in checkpoint_deploy_config.checkpoint_details.checkpoints
267
279
  ]
268
280
 
@@ -299,9 +311,10 @@ def display_training_job(
299
311
  table.add_column("Value")
300
312
 
301
313
  # Basic job details
314
+ table.add_row("Job Name", job["name"])
315
+ table.add_row("Job ID", job["id"])
302
316
  table.add_row("Project ID", job["training_project"]["id"])
303
317
  table.add_row("Project Name", job["training_project"]["name"])
304
- table.add_row("Job ID", job["id"])
305
318
  table.add_row("Status", job["current_status"])
306
319
  table.add_row("Instance Type", job["instance_type"]["name"])
307
320
  table.add_row("Created", cli_common.format_localized_time(job["created_at"]))
@@ -1,3 +1,4 @@
1
+ import json
1
2
  import re
2
3
  from collections import OrderedDict
3
4
  from typing import List, Optional, Union
@@ -7,7 +8,11 @@ from InquirerPy import inquirer
7
8
 
8
9
  from truss.base import truss_config
9
10
  from truss.cli.train import common
10
- from truss.cli.train.types import DeployCheckpointsConfigComplete
11
+ from truss.cli.train.types import (
12
+ DeployCheckpointsConfigComplete,
13
+ DeploySuccessModelVersion,
14
+ DeploySuccessResult,
15
+ )
11
16
  from truss.cli.utils.output import console
12
17
  from truss.remote.baseten.remote import BasetenRemote
13
18
  from truss_train.definitions import (
@@ -35,13 +40,16 @@ def create_model_version_from_inference_template(
35
40
  checkpoint_deploy_config: DeployCheckpointsConfig,
36
41
  project_id: Optional[str],
37
42
  job_id: Optional[str],
38
- ) -> DeployCheckpointsConfigComplete:
43
+ dry_run: bool,
44
+ ) -> DeploySuccessResult:
39
45
  checkpoint_deploy_config = _hydrate_deploy_config(
40
46
  checkpoint_deploy_config, remote_provider, project_id, job_id
41
47
  )
42
48
 
43
49
  request_data = _build_inference_template_request(
44
- checkpoint_deploy_config, remote_provider
50
+ checkpoint_deploy_config=checkpoint_deploy_config,
51
+ remote_provider=remote_provider,
52
+ dry_run=dry_run,
45
53
  )
46
54
 
47
55
  # Call the GraphQL mutation to create model version from inference template
@@ -49,7 +57,9 @@ def create_model_version_from_inference_template(
49
57
  result = remote_provider.api.create_model_version_from_inference_template(
50
58
  request_data
51
59
  )
60
+ truss_config_result = _get_truss_config_from_result(result)
52
61
 
62
+ model_version = None
53
63
  if result and result.get("model_version"):
54
64
  console.print(
55
65
  f"Successfully created model version: {result['model_version']['name']}",
@@ -58,7 +68,10 @@ def create_model_version_from_inference_template(
58
68
  console.print(
59
69
  f"Model version ID: {result['model_version']['id']}", style="yellow"
60
70
  )
61
- else:
71
+ model_version = DeploySuccessModelVersion.model_validate(
72
+ result["model_version"]
73
+ )
74
+ elif not dry_run:
62
75
  console.print(
63
76
  "Warning: Unexpected response format from server", style="yellow"
64
77
  )
@@ -68,12 +81,31 @@ def create_model_version_from_inference_template(
68
81
  console.print(f"Error creating model version: {e}", style="red")
69
82
  raise
70
83
 
71
- return checkpoint_deploy_config
84
+ return DeploySuccessResult(
85
+ deploy_config=checkpoint_deploy_config,
86
+ truss_config=truss_config_result,
87
+ model_version=model_version,
88
+ )
89
+
90
+
91
+ def _get_truss_config_from_result(result: dict) -> Optional[truss_config.TrussConfig]:
92
+ if result and result.get("truss_config"):
93
+ truss_config_dict = json.loads(result["truss_config"])
94
+ return truss_config.TrussConfig.from_dict(truss_config_dict)
95
+ # Although this should never happen, we defensively allow ourselves to return None
96
+ # because we need a failure to handle the truss config doesn't necessarily mean we failed to deploy
97
+ # the model version.
98
+ console.print(
99
+ "No truss config returned. Reach out to Baseten for support if this persists.",
100
+ style="red",
101
+ )
102
+ return None
72
103
 
73
104
 
74
105
  def _build_inference_template_request(
75
106
  checkpoint_deploy_config: DeployCheckpointsConfigComplete,
76
107
  remote_provider: BasetenRemote,
108
+ dry_run: bool,
77
109
  ) -> dict:
78
110
  """
79
111
  Build the GraphQL request data structure for createModelVersionFromInferenceTemplate mutation.
@@ -83,18 +115,12 @@ def _build_inference_template_request(
83
115
  weights_sources = []
84
116
  for checkpoint in checkpoint_deploy_config.checkpoint_details.checkpoints:
85
117
  # Extract checkpoint name from the first path
86
- checkpoint_name = (
87
- checkpoint.paths[0].strip("/").split("/")[-1]
88
- if checkpoint.paths
89
- else "checkpoint"
90
- )
91
-
92
118
  weights_source = {
93
119
  "weight_source_type": "B10_CHECKPOINTING",
94
120
  "b10_training_checkpoint_weights_source": {
95
121
  "checkpoint": {
96
122
  "training_job_id": checkpoint.training_job_id,
97
- "checkpoint_name": checkpoint_name,
123
+ "checkpoint_name": checkpoint.checkpoint_name,
98
124
  }
99
125
  },
100
126
  }
@@ -126,6 +152,7 @@ def _build_inference_template_request(
126
152
  "weights_sources": weights_sources,
127
153
  "inference_stack": inference_stack,
128
154
  "instance_type_id": instance_type_id,
155
+ "dry_run": dry_run,
129
156
  }
130
157
 
131
158
  return request_data
@@ -276,6 +303,7 @@ def _ensure_checkpoint_details(
276
303
  job_id: Optional[str],
277
304
  ) -> CheckpointList:
278
305
  if checkpoint_details and checkpoint_details.checkpoints:
306
+ # TODO: check here
279
307
  return _process_user_provided_checkpoints(checkpoint_details, remote_provider)
280
308
  else:
281
309
  return _prompt_user_for_checkpoint_details(
@@ -0,0 +1,9 @@
1
+ from truss_train.definitions import FullCheckpoint
2
+
3
+
4
+ def hydrate_full_checkpoint(
5
+ job_id: str, checkpoint_id: str, checkpoint: dict
6
+ ) -> FullCheckpoint:
7
+ """Create a Checkpoint object for full model weights."""
8
+ # NOTE: Slash at the end is important since it means the checkpoint is a directory
9
+ return FullCheckpoint(training_job_id=job_id, checkpoint_name=checkpoint_id)
@@ -11,11 +11,10 @@ def hydrate_lora_checkpoint(
11
11
  ) -> LoRACheckpoint:
12
12
  """Create a LoRA-specific Checkpoint object."""
13
13
  # NOTE: Slash at the end is important since it means the checkpoint is a directory
14
- paths = [f"rank-0/{checkpoint_id}/"]
15
14
  return LoRACheckpoint(
16
15
  training_job_id=job_id,
17
- paths=paths,
18
16
  lora_details=LoRADetails(rank=_get_lora_rank(checkpoint)),
17
+ checkpoint_name=checkpoint_id,
19
18
  )
20
19
 
21
20
 
@@ -5,6 +5,4 @@ def hydrate_whisper_checkpoint(
5
5
  job_id: str, checkpoint_id: str, checkpoint: dict
6
6
  ) -> WhisperCheckpoint:
7
7
  """Create a Checkpoint object for whisper model weights."""
8
- # NOTE: Slash at the end is important since it means the checkpoint is a directory
9
- paths = [f"rank-0/{checkpoint_id}/"]
10
- return WhisperCheckpoint(training_job_id=job_id, paths=paths)
8
+ return WhisperCheckpoint(training_job_id=job_id, checkpoint_name=checkpoint_id)
@@ -1,6 +1,9 @@
1
1
  from dataclasses import dataclass
2
2
  from typing import Optional
3
3
 
4
+ from pydantic import BaseModel
5
+
6
+ from truss.base import truss_config
4
7
  from truss_train.definitions import (
5
8
  CheckpointList,
6
9
  Compute,
@@ -11,6 +14,7 @@ from truss_train.definitions import (
11
14
 
12
15
  @dataclass
13
16
  class DeployCheckpointArgs:
17
+ dry_run: bool
14
18
  project_id: Optional[str]
15
19
  job_id: Optional[str]
16
20
  deploy_config_path: Optional[str]
@@ -26,3 +30,18 @@ class DeployCheckpointsConfigComplete(DeployCheckpointsConfig):
26
30
  model_name: str
27
31
  runtime: DeployCheckpointsRuntime
28
32
  compute: Compute
33
+
34
+
35
+ class DeploySuccessModelVersion(BaseModel):
36
+ # allow extra fields to be forwards compatible with server
37
+ class Config:
38
+ extra = "allow"
39
+
40
+ name: str
41
+ id: str
42
+
43
+
44
+ class DeploySuccessResult(BaseModel):
45
+ deploy_config: DeployCheckpointsConfigComplete
46
+ truss_config: Optional[truss_config.TrussConfig]
47
+ model_version: Optional[DeploySuccessModelVersion]
@@ -1,5 +1,6 @@
1
1
  import os
2
2
  import sys
3
+ from datetime import datetime
3
4
  from pathlib import Path
4
5
  from typing import Optional, cast
5
6
 
@@ -22,6 +23,7 @@ from truss.cli.train.core import (
22
23
  SORT_ORDER_ASC,
23
24
  SORT_ORDER_DESC,
24
25
  )
26
+ from truss.cli.train.types import DeploySuccessResult
25
27
  from truss.cli.utils import common
26
28
  from truss.cli.utils.output import console, error_console
27
29
  from truss.remote.baseten.core import get_training_job_logs_with_pagination
@@ -306,6 +308,12 @@ def get_job_metrics(
306
308
  @click.option(
307
309
  "--dry-run", is_flag=True, help="Generate a truss config without deploying"
308
310
  )
311
+ @click.option(
312
+ "--truss-config-output-dir",
313
+ type=str,
314
+ required=False,
315
+ help="Path to output the truss config to. If not provided, will output to truss_configs/<model_version_name>_<model_version_id> or truss_configs/dry_run_<timestamp> if dry run.",
316
+ )
309
317
  @click.option("--remote", type=str, required=False, help="Remote to use")
310
318
  @common.common_options()
311
319
  def deploy_checkpoints(
@@ -315,6 +323,7 @@ def deploy_checkpoints(
315
323
  config: Optional[str],
316
324
  remote: Optional[str],
317
325
  dry_run: bool,
326
+ truss_config_output_dir: Optional[str],
318
327
  ):
319
328
  """
320
329
  Deploy a LoRA checkpoint via vLLM.
@@ -332,13 +341,46 @@ def deploy_checkpoints(
332
341
  result = train_cli.create_model_version_from_inference_template(
333
342
  remote_provider,
334
343
  train_cli.DeployCheckpointArgs(
335
- project_id=project_id, job_id=job_id, deploy_config_path=config
344
+ project_id=project_id,
345
+ job_id=job_id,
346
+ deploy_config_path=config,
347
+ dry_run=dry_run,
336
348
  ),
337
349
  )
338
350
 
339
351
  if dry_run:
340
- console.print("--dry-run flag provided, did not deploy", style="yellow")
341
- train_cli.print_deploy_checkpoints_success_message(result)
352
+ console.print("did not deploy because --dry-run flag provided", style="yellow")
353
+
354
+ _write_truss_config(result, truss_config_output_dir, dry_run)
355
+
356
+ if not dry_run:
357
+ train_cli.print_deploy_checkpoints_success_message(result.deploy_config)
358
+
359
+
360
+ def _write_truss_config(
361
+ result: DeploySuccessResult, truss_config_output_dir: Optional[str], dry_run: bool
362
+ ) -> None:
363
+ if not result.truss_config:
364
+ return
365
+ # format: 20251006_123456
366
+ datestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
367
+ folder_name = (
368
+ f"{result.model_version.name}_{result.model_version.id}"
369
+ if result.model_version
370
+ else f"dry_run_{datestamp}"
371
+ )
372
+ output_dir_str = truss_config_output_dir or f"truss_configs/{folder_name}"
373
+ output_dir = Path(output_dir_str)
374
+ output_path = output_dir / "config.yaml"
375
+ os.makedirs(output_dir, exist_ok=True)
376
+ console.print(f"Writing truss config to {output_path}", style="yellow")
377
+ console.print(f"👀 Run `cat {output_path}` to view the truss config", style="green")
378
+ if dry_run:
379
+ console.print(
380
+ f"🚀 Run `cd {output_dir} && truss push --publish` to deploy the truss",
381
+ style="green",
382
+ )
383
+ result.truss_config.write_to_yaml_file(output_path)
342
384
 
343
385
 
344
386
  @train.command(name="download")
@@ -784,16 +784,7 @@ class ServingImageBuilder(ImageBuilder):
784
784
  config
785
785
  )
786
786
 
787
- # Debug: Print the actual values
788
- non_root_user_env = os.getenv("BT_USE_NON_ROOT_USER")
789
- print(f"DEBUG: BT_USE_NON_ROOT_USER env var value: {repr(non_root_user_env)}")
790
- print(f"DEBUG: BT_USE_NON_ROOT_USER type: {type(non_root_user_env)}")
791
-
792
787
  non_root_user = os.getenv("BT_USE_NON_ROOT_USER", False)
793
- print(f"DEBUG: non_root_user value: {repr(non_root_user)}")
794
- print(f"DEBUG: non_root_user type: {type(non_root_user)}")
795
- print(f"DEBUG: non_root_user truthiness: {bool(non_root_user)}")
796
-
797
788
  dockerfile_contents = dockerfile_template.render(
798
789
  should_install_server_requirements=should_install_server_requirements,
799
790
  base_image_name_and_tag=base_image_name_and_tag,
@@ -836,5 +827,3 @@ class ServingImageBuilder(ImageBuilder):
836
827
  ).strip()
837
828
  docker_file_path = build_dir / MODEL_DOCKERFILE_NAME
838
829
  docker_file_path.write_text(dockerfile_contents)
839
- import time
840
- time.sleep(100000)
@@ -800,10 +800,10 @@ class BasetenApi:
800
800
  id
801
801
  name
802
802
  }
803
+ truss_config
803
804
  }
804
805
  }
805
806
  """
806
-
807
807
  resp = self._post_graphql_query(
808
808
  query_string, variables={"request": request_data}
809
809
  )
@@ -38,14 +38,17 @@ class SanitizedExceptionMiddleware(BaseHTTPMiddleware):
38
38
  try:
39
39
  return await call_next(request)
40
40
  except Exception as exc:
41
- sanitized_traceback = self._create_sanitized_traceback(exc)
42
- request.app.state.logger.error(sanitized_traceback)
43
-
41
+ # NB(nikhil): Intentionally bypass error logging for ModelLoadFailed, since health checks
42
+ # are noisy. The underlying model logs for why the load failed will still be visible.
44
43
  if isinstance(exc, ModelLoadFailed):
45
44
  return JSONResponse(
46
45
  {"error": str(exc)}, status_code=http.HTTPStatus.BAD_GATEWAY.value
47
46
  )
48
- elif isinstance(exc, PatchApplicatonError):
47
+
48
+ sanitized_traceback = self._create_sanitized_traceback(exc)
49
+ request.app.state.logger.error(sanitized_traceback)
50
+
51
+ if isinstance(exc, PatchApplicatonError):
49
52
  error_type = _camel_to_snake_case(type(exc).__name__)
50
53
  return JSONResponse({"error": {"type": error_type, "msg": str(exc)}})
51
54
  else:
@@ -84,10 +87,9 @@ def create_app(base_config: Dict):
84
87
  base_url=f"http://localhost:{app_state.inference_server_port}", limits=limits
85
88
  )
86
89
 
87
- pip_path = getattr(app_state, "pip_path", None)
88
-
90
+ uv_path = getattr(app_state, "uv_path", None)
89
91
  patch_applier = ModelContainerPatchApplier(
90
- Path(app_state.inference_server_home), app_logger, pip_path
92
+ Path(app_state.inference_server_home), app_logger, uv_path
91
93
  )
92
94
 
93
95
  oversee_inference_server = getattr(app_state, "oversee_inference_server", True)
@@ -69,7 +69,7 @@ COPY --chown={{ default_owner }} ./{{ config.data_dir }} ${APP_HOME}/data
69
69
 
70
70
  {%- if model_cache_v2 %}
71
71
  {# v0.0.9, keep synced with server_requirements.txt #}
72
- RUN curl -sSL --fail --retry 5 --retry-delay 2 -o /usr/local/bin/truss-transfer-cli https://github.com/basetenlabs/truss/releases/download/v0.10.11rc1/truss-transfer-cli-v0.10.11rc1-linux-x86_64-unknown-linux-musl
72
+ RUN curl -sSL --fail --retry 5 --retry-delay 2 -o /usr/local/bin/truss-transfer-cli https://github.com/basetenlabs/truss/releases/download/v0.11.10rc5/truss-transfer-cli-v0.11.10rc5-linux-x86_64-unknown-linux-musl
73
73
  RUN chmod +x /usr/local/bin/truss-transfer-cli
74
74
  RUN mkdir /static-bptr
75
75
  RUN echo "hash {{model_cache_hash}}"
@@ -115,8 +115,7 @@ def test_hydrate_full_checkpoint():
115
115
  assert isinstance(result, definitions.FullCheckpoint)
116
116
  assert result.training_job_id == job_id
117
117
  assert result.model_weight_format == ModelWeightsFormat.FULL
118
- assert len(result.paths) == 1
119
- assert result.paths[0] == f"rank-0/{checkpoint_id}/"
118
+ assert result.checkpoint_name == checkpoint_id
120
119
 
121
120
 
122
121
  def test_hydrate_checkpoint_dispatcher_full():
@@ -272,6 +271,6 @@ def test_hydrate_whisper_checkpoint():
272
271
  result = hydrate_whisper_checkpoint(job_id, checkpoint_id, checkpoint)
273
272
 
274
273
  assert result.training_job_id == job_id
275
- assert result.paths == [f"rank-0/{checkpoint_id}/"]
274
+ assert result.checkpoint_name == checkpoint_id
276
275
  assert result.model_weight_format == definitions.ModelWeightsFormat.WHISPER
277
276
  assert isinstance(result, definitions.WhisperCheckpoint)
@@ -53,7 +53,7 @@ def app(truss_container_fs, truss_original_hash, ports):
53
53
  "control_server_port": ports["control_server_port"],
54
54
  "inference_server_port": ports["inference_server_port"],
55
55
  "oversee_inference_server": False,
56
- "pip_path": "pip",
56
+ "uv_path": "uv",
57
57
  }
58
58
  )
59
59
  inference_server_controller = control_app.state.inference_server_controller
File without changes
@@ -185,12 +185,13 @@ class TrainingProject(custom_types.SafeModelNoExtra):
185
185
 
186
186
  class Checkpoint(custom_types.ConfigModel, ABC):
187
187
  training_job_id: str
188
- paths: List[str]
188
+ checkpoint_name: str
189
189
  model_weight_format: ModelWeightsFormat
190
190
 
191
191
  def to_truss_config(self) -> truss_config.TrainingArtifactReference:
192
192
  return truss_config.TrainingArtifactReference(
193
- training_job_id=self.training_job_id, paths=self.paths
193
+ training_job_id=self.training_job_id,
194
+ paths=[f"rank-0/{self.checkpoint_name}/"],
194
195
  )
195
196
 
196
197
 
@@ -284,7 +284,7 @@ The following environment variables can be used to configure truss-transfer beha
284
284
  - Number of concurrent download workers
285
285
  - Controls parallelism for file downloads
286
286
 
287
- - **`TRUSS_TRANSFER_USE_RANGE_DOWNLOAD`** (default: `false`)
287
+ - **`TRUSS_TRANSFER_USE_RANGE_DOWNLOAD`** (default: `true`)
288
288
  - Enable/disable range-based downloading for large files
289
289
  - Set to `1`, `true`, `yes`, or `y` to enable
290
290