truss 0.10.13__tar.gz → 0.11.1rc2__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 (409) hide show
  1. {truss-0.10.13 → truss-0.11.1rc2}/PKG-INFO +1 -1
  2. {truss-0.10.13 → truss-0.11.1rc2}/pyproject.toml +1 -1
  3. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/train/core.py +82 -31
  4. {truss-0.10.13 → truss-0.11.1rc2}/truss/contexts/image_builder/serving_image_builder.py +7 -0
  5. {truss-0.10.13 → truss-0.11.1rc2}/truss/contexts/local_loader/docker_build_emulator.py +32 -8
  6. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/baseten/custom_types.py +7 -0
  7. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/base.Dockerfile.jinja +35 -6
  8. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/cache.Dockerfile.jinja +8 -7
  9. truss-0.11.1rc2/truss/templates/copy_cache_files.Dockerfile.jinja +3 -0
  10. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/docker_server/supervisord.conf.jinja +1 -0
  11. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/server/common/tracing.py +0 -24
  12. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/server.Dockerfile.jinja +33 -19
  13. truss-0.11.1rc2/truss/tests/cli/train/test_train_cli_core.py +444 -0
  14. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/contexts/image_builder/test_serving_image_builder.py +1 -1
  15. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/templates/control/control/test_server_integration.py +62 -41
  16. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/templates/server/test_truss_server.py +19 -12
  17. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/server.Dockerfile +13 -10
  18. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_model_inference.py +4 -2
  19. truss-0.10.13/truss/templates/copy_cache_files.Dockerfile.jinja +0 -3
  20. truss-0.10.13/truss/tests/cli/train/test_train_cli_core.py +0 -191
  21. {truss-0.10.13 → truss-0.11.1rc2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  22. {truss-0.10.13 → truss-0.11.1rc2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  23. {truss-0.10.13 → truss-0.11.1rc2}/.github/pull_request_template.md +0 -0
  24. {truss-0.10.13 → truss-0.11.1rc2}/.gitignore +0 -0
  25. {truss-0.10.13 → truss-0.11.1rc2}/CODE_OF_CONDUCT.md +0 -0
  26. {truss-0.10.13 → truss-0.11.1rc2}/CONTRIBUTING.md +0 -0
  27. {truss-0.10.13 → truss-0.11.1rc2}/LICENSE +0 -0
  28. {truss-0.10.13 → truss-0.11.1rc2}/README.md +0 -0
  29. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/README.md +0 -0
  30. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/README.md +0 -0
  31. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/android-arm-eabi/README.md +0 -0
  32. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/android-arm64/README.md +0 -0
  33. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/darwin-arm64/README.md +0 -0
  34. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/darwin-universal/README.md +0 -0
  35. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/darwin-x64/README.md +0 -0
  36. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/freebsd-x64/README.md +0 -0
  37. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/linux-arm-gnueabihf/README.md +0 -0
  38. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/linux-arm-musleabihf/README.md +0 -0
  39. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/linux-arm64-gnu/README.md +0 -0
  40. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/linux-arm64-musl/README.md +0 -0
  41. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/linux-riscv64-gnu/README.md +0 -0
  42. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/linux-x64-gnu/README.md +0 -0
  43. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/linux-x64-musl/README.md +0 -0
  44. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/win32-arm64-msvc/README.md +0 -0
  45. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/win32-ia32-msvc/README.md +0 -0
  46. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/node_bindings/npm/win32-x64-msvc/README.md +0 -0
  47. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/python_bindings/README.md +0 -0
  48. {truss-0.10.13 → truss-0.11.1rc2}/baseten-performance-client/scripts/README_nodejs.md +0 -0
  49. {truss-0.10.13 → truss-0.11.1rc2}/context_builder.Dockerfile +0 -0
  50. {truss-0.10.13 → truss-0.11.1rc2}/docs/README.md +0 -0
  51. {truss-0.10.13 → truss-0.11.1rc2}/docs/chains/doc_gen/README.md +0 -0
  52. {truss-0.10.13 → truss-0.11.1rc2}/docs/contribute/base-images.md +0 -0
  53. {truss-0.10.13 → truss-0.11.1rc2}/docs/contribute/release.md +0 -0
  54. {truss-0.10.13 → truss-0.11.1rc2}/truss/__init__.py +0 -0
  55. {truss-0.10.13 → truss-0.11.1rc2}/truss/api/__init__.py +0 -0
  56. {truss-0.10.13 → truss-0.11.1rc2}/truss/api/definitions.py +0 -0
  57. {truss-0.10.13 → truss-0.11.1rc2}/truss/base/__init__.py +0 -0
  58. {truss-0.10.13 → truss-0.11.1rc2}/truss/base/constants.py +0 -0
  59. {truss-0.10.13 → truss-0.11.1rc2}/truss/base/custom_types.py +0 -0
  60. {truss-0.10.13 → truss-0.11.1rc2}/truss/base/errors.py +0 -0
  61. {truss-0.10.13 → truss-0.11.1rc2}/truss/base/trt_llm_config.py +0 -0
  62. {truss-0.10.13 → truss-0.11.1rc2}/truss/base/truss_config.py +0 -0
  63. {truss-0.10.13 → truss-0.11.1rc2}/truss/base/truss_spec.py +0 -0
  64. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/chains_commands.py +0 -0
  65. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/cli.py +0 -0
  66. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/logs/base_watcher.py +0 -0
  67. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/logs/model_log_watcher.py +0 -0
  68. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/logs/training_log_watcher.py +0 -0
  69. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/logs/utils.py +0 -0
  70. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/remote_cli.py +0 -0
  71. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/train/common.py +0 -0
  72. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/train/deploy_checkpoints/__init__.py +0 -0
  73. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/train/deploy_checkpoints/deploy_checkpoints.py +0 -0
  74. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/train/deploy_checkpoints/deploy_checkpoints_helpers.py +0 -0
  75. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/train/deploy_checkpoints/deploy_full_checkpoints.py +0 -0
  76. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/train/deploy_checkpoints/deploy_lora_checkpoints.py +0 -0
  77. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/train/deploy_checkpoints/deploy_whisper_checkpoints.py +0 -0
  78. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/train/deploy_from_checkpoint_config.yml +0 -0
  79. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/train/deploy_from_checkpoint_config_whisper.yml +0 -0
  80. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/train/metrics_watcher.py +0 -0
  81. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/train/poller.py +0 -0
  82. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/train/types.py +0 -0
  83. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/train_commands.py +0 -0
  84. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/utils/common.py +0 -0
  85. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/utils/output.py +0 -0
  86. {truss-0.10.13 → truss-0.11.1rc2}/truss/cli/utils/self_upgrade.py +0 -0
  87. {truss-0.10.13 → truss-0.11.1rc2}/truss/contexts/docker_build_setup.py +0 -0
  88. {truss-0.10.13 → truss-0.11.1rc2}/truss/contexts/image_builder/cache_warmer.py +0 -0
  89. {truss-0.10.13 → truss-0.11.1rc2}/truss/contexts/image_builder/image_builder.py +0 -0
  90. {truss-0.10.13 → truss-0.11.1rc2}/truss/contexts/image_builder/util.py +0 -0
  91. {truss-0.10.13 → truss-0.11.1rc2}/truss/contexts/local_loader/dockerfile_parser.py +0 -0
  92. {truss-0.10.13 → truss-0.11.1rc2}/truss/contexts/local_loader/load_model_local.py +0 -0
  93. {truss-0.10.13 → truss-0.11.1rc2}/truss/contexts/local_loader/truss_module_loader.py +0 -0
  94. {truss-0.10.13 → truss-0.11.1rc2}/truss/contexts/local_loader/utils.py +0 -0
  95. {truss-0.10.13 → truss-0.11.1rc2}/truss/contexts/truss_context.py +0 -0
  96. {truss-0.10.13 → truss-0.11.1rc2}/truss/local/local_config.py +0 -0
  97. {truss-0.10.13 → truss-0.11.1rc2}/truss/local/local_config_handler.py +0 -0
  98. {truss-0.10.13 → truss-0.11.1rc2}/truss/patch/__init__.py +0 -0
  99. {truss-0.10.13 → truss-0.11.1rc2}/truss/patch/hash.py +0 -0
  100. {truss-0.10.13 → truss-0.11.1rc2}/truss/patch/signature.py +0 -0
  101. {truss-0.10.13 → truss-0.11.1rc2}/truss/patch/truss_dir_patch_applier.py +0 -0
  102. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/baseten/__init__.py +0 -0
  103. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/baseten/api.py +0 -0
  104. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/baseten/auth.py +0 -0
  105. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/baseten/core.py +0 -0
  106. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/baseten/error.py +0 -0
  107. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/baseten/remote.py +0 -0
  108. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/baseten/rest_client.py +0 -0
  109. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/baseten/service.py +0 -0
  110. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/baseten/utils/status.py +0 -0
  111. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/baseten/utils/tar.py +0 -0
  112. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/baseten/utils/time.py +0 -0
  113. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/baseten/utils/transfer.py +0 -0
  114. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/remote_factory.py +0 -0
  115. {truss-0.10.13 → truss-0.11.1rc2}/truss/remote/truss_remote.py +0 -0
  116. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/README.md.jinja +0 -0
  117. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/__init__.py +0 -0
  118. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/cache_requirements.txt +0 -0
  119. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/control/application.py +0 -0
  120. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/control/endpoints.py +0 -0
  121. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/control/helpers/context_managers.py +0 -0
  122. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/control/helpers/custom_types.py +0 -0
  123. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/control/helpers/errors.py +0 -0
  124. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/control/helpers/inference_server_controller.py +0 -0
  125. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/control/helpers/inference_server_process_controller.py +0 -0
  126. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/control/helpers/inference_server_starter.py +0 -0
  127. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/control/helpers/truss_patch/__init__.py +0 -0
  128. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/control/helpers/truss_patch/model_code_patch_applier.py +0 -0
  129. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/control/helpers/truss_patch/model_container_patch_applier.py +0 -0
  130. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/control/helpers/truss_patch/requirement_name_identifier.py +0 -0
  131. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/control/helpers/truss_patch/system_packages.py +0 -0
  132. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/control/server.py +0 -0
  133. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/control/requirements.txt +0 -0
  134. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/custom/examples.yaml +0 -0
  135. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/custom/model/__init__.py +0 -0
  136. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/custom/model/model.py +0 -0
  137. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/custom_python_dx/my_model.py +0 -0
  138. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/docker_server/proxy.conf.jinja +0 -0
  139. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/docker_server_requirements.txt +0 -0
  140. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/server/__init__.py +0 -0
  141. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/server/common/__init__.py +0 -0
  142. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/server/common/errors.py +0 -0
  143. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/server/common/patches/whisper/patch.py +0 -0
  144. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/server/common/patches.py +0 -0
  145. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/server/common/retry.py +0 -0
  146. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/server/common/schema.py +0 -0
  147. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/server/main.py +0 -0
  148. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/server/model_wrapper.py +0 -0
  149. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/server/requirements.txt +0 -0
  150. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/server/truss_server.py +0 -0
  151. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/shared/__init__.py +0 -0
  152. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/shared/dynamic_config_resolver.py +0 -0
  153. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/shared/lazy_data_resolver.py +0 -0
  154. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/shared/log_config.py +0 -0
  155. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/shared/secrets_resolver.py +0 -0
  156. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/shared/serialization.py +0 -0
  157. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/shared/util.py +0 -0
  158. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/trtllm-audio/model/model.py +0 -0
  159. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/trtllm-audio/packages/sigint_patch.py +0 -0
  160. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/trtllm-audio/packages/whisper_trt/__init__.py +0 -0
  161. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/trtllm-audio/packages/whisper_trt/assets.py +0 -0
  162. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/trtllm-audio/packages/whisper_trt/batching.py +0 -0
  163. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/trtllm-audio/packages/whisper_trt/custom_types.py +0 -0
  164. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/trtllm-audio/packages/whisper_trt/modeling.py +0 -0
  165. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/trtllm-audio/packages/whisper_trt/tokenizer.py +0 -0
  166. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/trtllm-audio/packages/whisper_trt/utils.py +0 -0
  167. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/trtllm-briton/README.md +0 -0
  168. {truss-0.10.13 → truss-0.11.1rc2}/truss/templates/trtllm-briton/src/extension.py +0 -0
  169. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/__init__.py +0 -0
  170. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/cli/test_cli.py +0 -0
  171. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/cli/train/resources/test_deploy_from_checkpoint_config.yml +0 -0
  172. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/cli/train/test_cache_view.py +0 -0
  173. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/cli/train/test_deploy_checkpoints.py +0 -0
  174. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/conftest.py +0 -0
  175. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/contexts/local_loader/test_load_local.py +0 -0
  176. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/contexts/local_loader/test_truss_module_finder.py +0 -0
  177. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/helpers.py +0 -0
  178. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/local/test_local_config_handler.py +0 -0
  179. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/patch/test_calc_patch.py +0 -0
  180. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/patch/test_dir_signature.py +0 -0
  181. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/patch/test_hash.py +0 -0
  182. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/patch/test_signature.py +0 -0
  183. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/patch/test_truss_dir_patch_applier.py +0 -0
  184. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/patch/test_types.py +0 -0
  185. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/remote/baseten/conftest.py +0 -0
  186. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/remote/baseten/test_api.py +0 -0
  187. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/remote/baseten/test_auth.py +0 -0
  188. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/remote/baseten/test_core.py +0 -0
  189. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/remote/baseten/test_remote.py +0 -0
  190. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/remote/baseten/test_service.py +0 -0
  191. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/remote/test_remote_factory.py +0 -0
  192. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/remote/test_truss_remote.py +0 -0
  193. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/templates/control/control/helpers/test_context_managers.py +0 -0
  194. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/templates/control/control/helpers/test_model_container_patch_applier.py +0 -0
  195. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/templates/control/control/helpers/test_requirement_name_identifier.py +0 -0
  196. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/templates/control/control/test_endpoints.py +0 -0
  197. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/templates/control/control/test_server.py +0 -0
  198. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/templates/core/server/test_dynamic_config_resolver.py +0 -0
  199. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/templates/core/server/test_lazy_data_resolver_v2.py +0 -0
  200. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/templates/core/server/test_secrets_resolver.py +0 -0
  201. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/templates/server/common/test_retry.py +0 -0
  202. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/templates/server/test_model_wrapper.py +0 -0
  203. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/templates/server/test_schema.py +0 -0
  204. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_build.py +0 -0
  205. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_config.py +0 -0
  206. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_context_builder_image.py +0 -0
  207. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_control_truss_patching.py +0 -0
  208. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_custom_server.py +0 -0
  209. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/__init__.py +0 -0
  210. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/annotated_types_truss/__init__.py +0 -0
  211. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/annotated_types_truss/config.yaml +0 -0
  212. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/annotated_types_truss/model/__init__.py +0 -0
  213. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/annotated_types_truss/model/model.py +0 -0
  214. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/auto-mpg.data +0 -0
  215. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/context_builder_image_test/Dockerfile +0 -0
  216. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/context_builder_image_test/__init__.py +0 -0
  217. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/context_builder_image_test/test.py +0 -0
  218. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/gcs_fix/__init__.py +0 -0
  219. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/gcs_fix/config.yaml +0 -0
  220. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/gcs_fix/model/__init__.py +0 -0
  221. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/gcs_fix/model/model.py +0 -0
  222. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/happy.ipynb +0 -0
  223. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/model_load_failure_test/__init__.py +0 -0
  224. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/model_load_failure_test/config.yaml +0 -0
  225. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/model_load_failure_test/model/__init__.py +0 -0
  226. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/model_load_failure_test/model/model.py +0 -0
  227. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/patch_ping_test_server/__init__.py +0 -0
  228. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/patch_ping_test_server/app.py +0 -0
  229. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/pima-indians-diabetes.csv +0 -0
  230. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/readme_int_example.md +0 -0
  231. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/readme_no_example.md +0 -0
  232. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/readme_str_example.md +0 -0
  233. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/server_conformance_test_truss/__init__.py +0 -0
  234. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/server_conformance_test_truss/config.yaml +0 -0
  235. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/server_conformance_test_truss/model/__init__.py +0 -0
  236. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/server_conformance_test_truss/model/model.py +0 -0
  237. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_async_truss/__init__.py +0 -0
  238. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_async_truss/config.yaml +0 -0
  239. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_async_truss/model/__init__.py +0 -0
  240. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_async_truss/model/model.py +0 -0
  241. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_basic_truss/__init__.py +0 -0
  242. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_basic_truss/config.yaml +0 -0
  243. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_basic_truss/model/__init__.py +0 -0
  244. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_basic_truss/model/model.py +0 -0
  245. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_build_commands/__init__.py +0 -0
  246. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_build_commands/config.yaml +0 -0
  247. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_build_commands/model/__init__.py +0 -0
  248. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_build_commands/model/model.py +0 -0
  249. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_build_commands_failure/__init__.py +0 -0
  250. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_build_commands_failure/config.yaml +0 -0
  251. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_build_commands_failure/model/__init__.py +0 -0
  252. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_build_commands_failure/model/model.py +0 -0
  253. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_concurrency_truss/__init__.py +0 -0
  254. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_concurrency_truss/config.yaml +0 -0
  255. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_concurrency_truss/model/__init__.py +0 -0
  256. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_concurrency_truss/model/model.py +0 -0
  257. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_custom_server_truss/__init__.py +0 -0
  258. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_custom_server_truss/config.yaml +0 -0
  259. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_custom_server_truss/test_docker_image/Dockerfile +0 -0
  260. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_custom_server_truss/test_docker_image/README.md +0 -0
  261. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_custom_server_truss/test_docker_image/VERSION +0 -0
  262. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_custom_server_truss/test_docker_image/__init__.py +0 -0
  263. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_custom_server_truss/test_docker_image/app.py +0 -0
  264. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_custom_server_truss/test_docker_image/build_upload_new_image.sh +0 -0
  265. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_env_vars/config.yaml +0 -0
  266. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_go_custom_server_truss/config.yaml +0 -0
  267. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_go_custom_server_truss/docker/Dockerfile +0 -0
  268. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_go_custom_server_truss/docker/README.md +0 -0
  269. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_go_custom_server_truss/docker/VERSION +0 -0
  270. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_go_custom_server_truss/docker/build_upload_new_image.sh +0 -0
  271. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_go_custom_server_truss/docker/main.go +0 -0
  272. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_openai/__init__.py +0 -0
  273. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_openai/config.yaml +0 -0
  274. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_openai/model/__init__.py +0 -0
  275. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_openai/model/model.py +0 -0
  276. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_pyantic_v1/__init__.py +0 -0
  277. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_pyantic_v1/config.yaml +0 -0
  278. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_pyantic_v1/model/__init__.py +0 -0
  279. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_pyantic_v1/model/model.py +0 -0
  280. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_pyantic_v1/requirements.txt +0 -0
  281. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_pyantic_v2/__init__.py +0 -0
  282. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_pyantic_v2/config.yaml +0 -0
  283. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_pyantic_v2/model/__init__.py +0 -0
  284. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_pyantic_v2/model/model.py +0 -0
  285. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_pyantic_v2/requirements.txt +0 -0
  286. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_requirements_file_truss/__init__.py +0 -0
  287. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_requirements_file_truss/config.yaml +0 -0
  288. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_requirements_file_truss/model/__init__.py +0 -0
  289. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_requirements_file_truss/model/model.py +0 -0
  290. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_requirements_file_truss/requirements.txt +0 -0
  291. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_async_generator_truss/__init__.py +0 -0
  292. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_async_generator_truss/config.yaml +0 -0
  293. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_async_generator_truss/model/__init__.py +0 -0
  294. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_async_generator_truss/model/model.py +0 -0
  295. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_read_timeout/__init__.py +0 -0
  296. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_read_timeout/config.yaml +0 -0
  297. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_read_timeout/model/__init__.py +0 -0
  298. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_read_timeout/model/model.py +0 -0
  299. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss/__init__.py +0 -0
  300. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss/config.yaml +0 -0
  301. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss/model/__init__.py +0 -0
  302. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss/model/model.py +0 -0
  303. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss_with_error/__init__.py +0 -0
  304. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss_with_error/config.yaml +0 -0
  305. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss_with_error/model/__init__.py +0 -0
  306. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss_with_error/model/model.py +0 -0
  307. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss_with_error/packages/__init__.py +0 -0
  308. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss_with_error/packages/helpers_1.py +0 -0
  309. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss_with_error/packages/helpers_2.py +0 -0
  310. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss_with_tracing/__init__.py +0 -0
  311. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss_with_tracing/config.yaml +0 -0
  312. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss_with_tracing/model/__init__.py +0 -0
  313. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_streaming_truss_with_tracing/model/model.py +0 -0
  314. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_trt_llm_truss/__init__.py +0 -0
  315. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_trt_llm_truss/config.yaml +0 -0
  316. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_trt_llm_truss/model/__init__.py +0 -0
  317. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_trt_llm_truss/model/model.py +0 -0
  318. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss/__init__.py +0 -0
  319. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss/config.yaml +0 -0
  320. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss/examples.yaml +0 -0
  321. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss/model/__init__.py +0 -0
  322. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss/model/dummy +0 -0
  323. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss/model/model.py +0 -0
  324. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss/packages/__init__.py +0 -0
  325. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss/packages/test_package/__init__.py +0 -0
  326. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss/packages/test_package/test.py +0 -0
  327. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_server_model_cache_v1/__init__.py +0 -0
  328. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_server_model_cache_v1/config.yaml +0 -0
  329. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_server_model_cache_v1/model/__init__.py +0 -0
  330. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_server_model_cache_v1/model/model.py +0 -0
  331. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_server_model_cache_v2/__init__.py +0 -0
  332. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_server_model_cache_v2/config.yaml +0 -0
  333. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_server_model_cache_v2/model/__init__.py +0 -0
  334. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_server_model_cache_v2/model/model.py +0 -0
  335. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_with_error/__init__.py +0 -0
  336. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_with_error/config.yaml +0 -0
  337. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_with_error/model/__init__.py +0 -0
  338. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_with_error/model/model.py +0 -0
  339. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_with_error/packages/__init__.py +0 -0
  340. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_with_error/packages/helpers_1.py +0 -0
  341. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_data/test_truss_with_error/packages/helpers_2.py +0 -0
  342. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_docker.py +0 -0
  343. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_model_schema.py +0 -0
  344. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_testing_utilities_for_other_tests.py +0 -0
  345. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_truss_gatherer.py +0 -0
  346. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_truss_handle.py +0 -0
  347. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/test_util.py +0 -0
  348. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/trt_llm/test_trt_llm_config.py +0 -0
  349. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/trt_llm/test_validation.py +0 -0
  350. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/util/test_config_checks.py +0 -0
  351. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/util/test_env_vars.py +0 -0
  352. {truss-0.10.13 → truss-0.11.1rc2}/truss/tests/util/test_path.py +0 -0
  353. {truss-0.10.13 → truss-0.11.1rc2}/truss/trt_llm/config_checks.py +0 -0
  354. {truss-0.10.13 → truss-0.11.1rc2}/truss/trt_llm/validation.py +0 -0
  355. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/__init__.py +0 -0
  356. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/build.py +0 -0
  357. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/decorators.py +0 -0
  358. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/patch/__init__.py +0 -0
  359. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/patch/calc_patch.py +0 -0
  360. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/patch/constants.py +0 -0
  361. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/patch/custom_types.py +0 -0
  362. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/patch/dir_signature.py +0 -0
  363. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/patch/hash.py +0 -0
  364. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/patch/local_truss_patch_applier.py +0 -0
  365. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/patch/signature.py +0 -0
  366. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/patch/truss_dir_patch_applier.py +0 -0
  367. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/readme_generator.py +0 -0
  368. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/truss_gatherer.py +0 -0
  369. {truss-0.10.13 → truss-0.11.1rc2}/truss/truss_handle/truss_handle.py +0 -0
  370. {truss-0.10.13 → truss-0.11.1rc2}/truss/util/.truss_ignore +0 -0
  371. {truss-0.10.13 → truss-0.11.1rc2}/truss/util/docker.py +0 -0
  372. {truss-0.10.13 → truss-0.11.1rc2}/truss/util/download.py +0 -0
  373. {truss-0.10.13 → truss-0.11.1rc2}/truss/util/env_vars.py +0 -0
  374. {truss-0.10.13 → truss-0.11.1rc2}/truss/util/gpu.py +0 -0
  375. {truss-0.10.13 → truss-0.11.1rc2}/truss/util/jinja.py +0 -0
  376. {truss-0.10.13 → truss-0.11.1rc2}/truss/util/log_utils.py +0 -0
  377. {truss-0.10.13 → truss-0.11.1rc2}/truss/util/notebook.py +0 -0
  378. {truss-0.10.13 → truss-0.11.1rc2}/truss/util/path.py +0 -0
  379. {truss-0.10.13 → truss-0.11.1rc2}/truss/util/requirements.py +0 -0
  380. {truss-0.10.13 → truss-0.11.1rc2}/truss/util/user_config.py +0 -0
  381. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/examples/README.md +0 -0
  382. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/examples/audio-transcription/README.md +0 -0
  383. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/examples/rag/README.md +0 -0
  384. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/tests/itest_chain/requirements.txt +0 -0
  385. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/__init__.py +0 -0
  386. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/deployment/__init__.py +0 -0
  387. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/deployment/code_gen.py +0 -0
  388. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/deployment/deployment_client.py +0 -0
  389. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/framework.py +0 -0
  390. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/private_types.py +0 -0
  391. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/public_api.py +0 -0
  392. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/public_types.py +0 -0
  393. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/py.typed +0 -0
  394. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/pydantic_numpy.py +0 -0
  395. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/reference_code/reference_chainlet.py +0 -0
  396. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/reference_code/reference_model.py +0 -0
  397. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/remote_chainlet/__init__.py +0 -0
  398. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/remote_chainlet/model_skeleton.py +0 -0
  399. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/remote_chainlet/stub.py +0 -0
  400. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/remote_chainlet/utils.py +0 -0
  401. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/streaming.py +0 -0
  402. {truss-0.10.13 → truss-0.11.1rc2}/truss-chains/truss_chains/utils.py +0 -0
  403. {truss-0.10.13 → truss-0.11.1rc2}/truss-train/truss_train/__init__.py +0 -0
  404. {truss-0.10.13 → truss-0.11.1rc2}/truss-train/truss_train/definitions.py +0 -0
  405. {truss-0.10.13 → truss-0.11.1rc2}/truss-train/truss_train/deployment.py +0 -0
  406. {truss-0.10.13 → truss-0.11.1rc2}/truss-train/truss_train/loader.py +0 -0
  407. {truss-0.10.13 → truss-0.11.1rc2}/truss-train/truss_train/public_api.py +0 -0
  408. {truss-0.10.13 → truss-0.11.1rc2}/truss-transfer/README.md +0 -0
  409. {truss-0.10.13 → truss-0.11.1rc2}/truss-transfer/tests/README.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: truss
3
- Version: 0.10.13
3
+ Version: 0.11.1rc2
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "truss"
3
- version = "0.10.13"
3
+ version = "0.11.1rc2"
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" },
@@ -1,4 +1,5 @@
1
1
  import json
2
+ import os
2
3
  import tarfile
3
4
  import tempfile
4
5
  from dataclasses import dataclass
@@ -16,6 +17,11 @@ from truss.cli.train.metrics_watcher import MetricsWatcher
16
17
  from truss.cli.train.types import PrepareCheckpointArgs, PrepareCheckpointResult
17
18
  from truss.cli.utils import common as cli_common
18
19
  from truss.cli.utils.output import console
20
+ from truss.remote.baseten.custom_types import (
21
+ FileSummary,
22
+ FileSummaryWithTotalSize,
23
+ GetCacheSummaryResponseV1,
24
+ )
19
25
  from truss.remote.baseten.remote import BasetenRemote
20
26
  from truss_train import loader
21
27
  from truss_train.definitions import DeployCheckpointsConfig
@@ -446,6 +452,44 @@ def fetch_project_by_name_or_id(
446
452
  raise click.ClickException(f"Error fetching project: {str(e)}")
447
453
 
448
454
 
455
+ def create_file_summary_with_directory_sizes(
456
+ files: list[FileSummary],
457
+ ) -> list[FileSummaryWithTotalSize]:
458
+ directory_sizes = calculate_directory_sizes(files)
459
+ return [
460
+ FileSummaryWithTotalSize(
461
+ file_summary=file_info,
462
+ total_size=directory_sizes.get(file_info.path, file_info.size_bytes),
463
+ )
464
+ for file_info in files
465
+ ]
466
+
467
+
468
+ def calculate_directory_sizes(
469
+ files: list[FileSummary], max_depth: int = 100
470
+ ) -> dict[str, int]:
471
+ directory_sizes = {}
472
+
473
+ for file_info in files:
474
+ if file_info.file_type == "directory":
475
+ directory_sizes[file_info.path] = 0
476
+
477
+ for file_info in files:
478
+ current_path = file_info.path
479
+ for i in range(max_depth):
480
+ if current_path is None:
481
+ break
482
+ if current_path in directory_sizes:
483
+ directory_sizes[current_path] += file_info.size_bytes
484
+ # Move to parent directory
485
+ parent = os.path.dirname(current_path)
486
+ if parent == current_path: # Reached root
487
+ break
488
+ current_path = parent
489
+
490
+ return directory_sizes
491
+
492
+
449
493
  def view_cache_summary(
450
494
  remote_provider: BasetenRemote,
451
495
  project_id: str,
@@ -454,12 +498,14 @@ def view_cache_summary(
454
498
  ):
455
499
  """View cache summary for a training project."""
456
500
  try:
457
- cache_data = remote_provider.api.get_cache_summary(project_id)
501
+ raw_cache_data = remote_provider.api.get_cache_summary(project_id)
458
502
 
459
- if not cache_data:
503
+ if not raw_cache_data:
460
504
  console.print("No cache summary found for this project.", style="yellow")
461
505
  return
462
506
 
507
+ cache_data = GetCacheSummaryResponseV1.model_validate(raw_cache_data)
508
+
463
509
  table = rich.table.Table(title=f"Cache summary for project: {project_id}")
464
510
  table.add_column("File Path", style="cyan")
465
511
  table.add_column("Size", style="green")
@@ -467,58 +513,48 @@ def view_cache_summary(
467
513
  table.add_column("Type")
468
514
  table.add_column("Permissions", style="magenta")
469
515
 
470
- files = cache_data.get("file_summaries", [])
516
+ files = cache_data.file_summaries
471
517
  if not files:
472
518
  console.print("No files found in cache.", style="yellow")
473
519
  return
474
520
 
475
- reverse = order == SORT_ORDER_DESC
521
+ files_with_total_sizes = create_file_summary_with_directory_sizes(files)
476
522
 
477
- if sort_by == SORT_BY_FILEPATH:
478
- files.sort(key=lambda x: x.get("path", ""), reverse=reverse)
479
- elif sort_by == SORT_BY_SIZE:
480
- files.sort(key=lambda x: x.get("size_bytes", 0), reverse=reverse)
481
- elif sort_by == SORT_BY_MODIFIED:
482
- files.sort(key=lambda x: x.get("modified", ""), reverse=reverse)
483
- elif sort_by == SORT_BY_TYPE:
484
- files.sort(key=lambda x: x.get("file_type", ""), reverse=reverse)
485
- elif sort_by == SORT_BY_PERMISSIONS:
486
- files.sort(key=lambda x: x.get("permissions", ""), reverse=reverse)
487
-
488
- total_size = 0
489
- for file_info in files:
490
- total_size += file_info.get("size_bytes", 0)
523
+ reverse = order == SORT_ORDER_DESC
524
+ sort_key = _get_sort_key(sort_by)
525
+ files_with_total_sizes.sort(key=sort_key, reverse=reverse)
491
526
 
527
+ total_size = sum(
528
+ file_info.file_summary.size_bytes for file_info in files_with_total_sizes
529
+ )
492
530
  total_size_str = common.format_bytes_to_human_readable(total_size)
493
531
 
494
532
  console.print(
495
- f"📅 Cache captured at: {cache_data.get('timestamp', 'Unknown')}",
496
- style="bold blue",
533
+ f"📅 Cache captured at: {cache_data.timestamp}", style="bold blue"
497
534
  )
535
+ console.print(f"📁 Project ID: {cache_data.project_id}", style="bold blue")
536
+ console.print()
498
537
  console.print(
499
- f"📁 Project ID: {cache_data.get('project_id', 'Unknown')}",
500
- style="bold blue",
538
+ f"📊 Total files: {len(files_with_total_sizes)}", style="bold green"
501
539
  )
502
- console.print()
503
- console.print(f"📊 Total files: {len(files)}", style="bold green")
504
540
  console.print(f"💾 Total size: {total_size_str}", style="bold green")
505
541
  console.print()
506
542
 
507
- for file_info in files:
508
- size_bytes = file_info.get("size_bytes", 0)
543
+ for file_info in files_with_total_sizes:
544
+ total_size = file_info.total_size
509
545
 
510
- size_str = cli_common.format_bytes_to_human_readable(int(size_bytes))
546
+ size_str = cli_common.format_bytes_to_human_readable(int(total_size))
511
547
 
512
548
  modified_str = cli_common.format_localized_time(
513
- file_info.get("modified", "Unknown")
549
+ file_info.file_summary.modified
514
550
  )
515
551
 
516
552
  table.add_row(
517
- file_info.get("path", "Unknown"),
553
+ file_info.file_summary.path,
518
554
  size_str,
519
555
  modified_str,
520
- file_info.get("file_type", "Unknown"),
521
- file_info.get("permissions", "Unknown"),
556
+ file_info.file_summary.file_type or "Unknown",
557
+ file_info.file_summary.permissions or "Unknown",
522
558
  )
523
559
 
524
560
  console.print(table)
@@ -528,6 +564,21 @@ def view_cache_summary(
528
564
  raise
529
565
 
530
566
 
567
+ def _get_sort_key(sort_by: str) -> Callable[[FileSummaryWithTotalSize], Any]:
568
+ if sort_by == SORT_BY_FILEPATH:
569
+ return lambda x: x.file_summary.path
570
+ elif sort_by == SORT_BY_SIZE:
571
+ return lambda x: x.total_size
572
+ elif sort_by == SORT_BY_MODIFIED:
573
+ return lambda x: x.file_summary.modified
574
+ elif sort_by == SORT_BY_TYPE:
575
+ return lambda x: x.file_summary.file_type or ""
576
+ elif sort_by == SORT_BY_PERMISSIONS:
577
+ return lambda x: x.file_summary.permissions or ""
578
+ else:
579
+ raise ValueError(f"Invalid --sort argument: {sort_by}")
580
+
581
+
531
582
  def view_cache_summary_by_project(
532
583
  remote_provider: BasetenRemote,
533
584
  project_identifier: str,
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import json
4
4
  import logging
5
+ import os
5
6
  import re
6
7
  import shutil
7
8
  from abc import ABC, abstractmethod
@@ -783,6 +784,10 @@ class ServingImageBuilder(ImageBuilder):
783
784
  config
784
785
  )
785
786
 
787
+ non_root_user = os.getenv("BT_USE_NON_ROOT_USER", False)
788
+ enable_model_container_admin_commands = os.getenv(
789
+ "BT_ENABLE_MODEL_CONTAINER_ADMIN_CMDS"
790
+ )
786
791
  dockerfile_contents = dockerfile_template.render(
787
792
  should_install_server_requirements=should_install_server_requirements,
788
793
  base_image_name_and_tag=base_image_name_and_tag,
@@ -816,6 +821,8 @@ class ServingImageBuilder(ImageBuilder):
816
821
  build_commands=build_commands,
817
822
  use_local_src=config.use_local_src,
818
823
  passthrough_environment_variables=passthrough_environment_variables,
824
+ non_root_user=non_root_user,
825
+ enable_model_container_admin_commands=enable_model_container_admin_commands,
819
826
  **FILENAME_CONSTANTS_MAP,
820
827
  )
821
828
  # Consolidate repeated empty lines to single empty lines.
@@ -1,3 +1,4 @@
1
+ import re
1
2
  from dataclasses import dataclass, field
2
3
  from pathlib import Path
3
4
  from typing import Dict, List
@@ -31,12 +32,32 @@ class DockerBuildEmulator:
31
32
  self._context_dir = context_dir
32
33
 
33
34
  def run(self, fs_root_dir: Path) -> DockerBuildEmulatorResult:
34
- def _resolve_env(key: str) -> str:
35
- if key.startswith("$"):
36
- key = key.replace("$", "", 1)
37
- v = result.env[key]
38
- return v
39
- return key
35
+ def _resolve_env(in_value: str) -> str:
36
+ # Valid environment variable name pattern
37
+ var_name_pattern = r"[A-Za-z_][A-Za-z0-9_]*"
38
+
39
+ # Handle ${VAR} syntax
40
+ def replace_braced_var(match):
41
+ var_name = match.group(1)
42
+ return result.env.get(
43
+ var_name, match.group(0)
44
+ ) # Return original if not found
45
+
46
+ # Handle $VAR syntax (word boundary ensures we don't match parts of other vars)
47
+ def replace_simple_var(match):
48
+ var_name = match.group(1)
49
+ return result.env.get(
50
+ var_name, match.group(0)
51
+ ) # Return original if not found
52
+
53
+ # Replace ${VAR} patterns first, using % substitution to avoid additional braces noise with f-strings
54
+ value = re.sub(
55
+ r"\$\{(%s)\}" % var_name_pattern, replace_braced_var, in_value
56
+ )
57
+ # Then replace remaining $VAR patterns (only at word boundaries)
58
+ value = re.sub(r"\$(%s)\b" % var_name_pattern, replace_simple_var, value)
59
+
60
+ return value
40
61
 
41
62
  def _resolve_values(keys: List[str]) -> List[str]:
42
63
  return list(map(_resolve_env, keys))
@@ -53,11 +74,14 @@ class DockerBuildEmulator:
53
74
  if cmd.instruction == DockerInstruction.ENTRYPOINT:
54
75
  result.entrypoint = list(values)
55
76
  if cmd.instruction == DockerInstruction.COPY:
77
+ # Filter out --chown flags
78
+ filtered_values = [v for v in values if not v.startswith("--chown")]
79
+
56
80
  # NB(nikhil): Skip COPY commands with --from flag (multi-stage builds)
57
- if len(values) != 2:
81
+ if len(filtered_values) != 2:
58
82
  continue
59
83
 
60
- src, dst = values
84
+ src, dst = filtered_values
61
85
  src = src.replace("./", "", 1)
62
86
  dst = dst.replace("/", "", 1)
63
87
  copy_tree_or_file(self._context_dir / src, fs_root_dir / dst)
@@ -138,6 +138,13 @@ class FileSummary(pydantic.BaseModel):
138
138
  )
139
139
 
140
140
 
141
+ class FileSummaryWithTotalSize(pydantic.BaseModel):
142
+ file_summary: FileSummary
143
+ total_size: int = pydantic.Field(
144
+ description="Total size of the file and all its subdirectories"
145
+ )
146
+
147
+
141
148
  class GetCacheSummaryResponseV1(pydantic.BaseModel):
142
149
  """Response for getting cache summary."""
143
150
 
@@ -8,6 +8,35 @@ FROM {{ base_image_name_and_tag }} AS truss_server
8
8
  {%- set python_executable = config.base_image.python_executable_path or 'python3' %}
9
9
  ENV PYTHON_EXECUTABLE="{{ python_executable }}"
10
10
 
11
+ {%- set app_username = "app" %} {# needed later for USER directive#}
12
+ {% block user_setup %}
13
+ {%- set app_user_uid = 60000 %}
14
+ {%- set control_server_dir = "/control" %}
15
+ {%- set default_owner = "root:root" %}
16
+ {# The non-root user's home directory. #}
17
+ {# uv will use $HOME to install packages. #}
18
+ ENV HOME=/home/{{ app_username }}
19
+ {# Directory containing inference server code. #}
20
+ ENV APP_HOME=/{{ app_username }}
21
+ RUN mkdir -p ${APP_HOME} {{ control_server_dir }}
22
+ {# Create a non-root user to run model containers. #}
23
+ RUN useradd -u {{ app_user_uid }} -ms /bin/bash {{ app_username }}
24
+ {% endblock %} {#- endblock user_setup #}
25
+
26
+ {#- at the very beginning, set non-interactive mode for apt #}
27
+ ENV DEBIAN_FRONTEND=noninteractive
28
+
29
+ {# If non-root user is enabled and model container admin commands are enabled, install sudo #}
30
+ {# to allow the non-root user to install packages. #}
31
+ {%- if non_root_user and enable_model_container_admin_commands %}
32
+ RUN apt update && apt install -y sudo
33
+ {%- set allowed_admin_commands = ["/usr/bin/apt install *", "/usr/bin/apt update"] %}
34
+ RUN echo "Defaults:{{ app_username }} passwd_tries=0\n{{ app_username }} ALL=(root) NOPASSWD: {{ allowed_admin_commands | join(", ") }}" > /etc/sudoers.d/app-packages
35
+ RUN chmod 0440 /etc/sudoers.d/app-packages
36
+ {#- optional but good practice: check if the sudoers file is valid #}
37
+ RUN visudo -c
38
+ {%- endif %} {#- endif non_root_user and enable_model_container_admin_commands #}
39
+
11
40
  {%- set UV_VERSION = "0.7.19" %}
12
41
  {#
13
42
  NB(nikhil): We use a semi-complex uv installation command across the board:
@@ -39,7 +68,8 @@ RUN if ! command -v uv >/dev/null 2>&1; then \
39
68
  command -v curl >/dev/null 2>&1 || (apt update && apt install -y curl) && \
40
69
  curl -LsSf --retry 5 --retry-delay 5 https://astral.sh/uv/{{ UV_VERSION }}/install.sh | sh; \
41
70
  fi
42
- ENV PATH="/root/.local/bin:$PATH"
71
+ {# Add the user's local bin to the path, used by uv. #}
72
+ ENV PATH=${PATH}:${HOME}/.local/bin
43
73
  {% endblock %}
44
74
 
45
75
  {% block base_image_patch %}
@@ -57,7 +87,7 @@ RUN {{ sys_pip_install_command }} install mkl
57
87
 
58
88
  {% block install_system_requirements %}
59
89
  {%- if should_install_system_requirements %}
60
- COPY ./{{ system_packages_filename }} {{ system_packages_filename }}
90
+ COPY --chown={{ default_owner }} ./{{ system_packages_filename }} {{ system_packages_filename }}
61
91
  RUN apt-get update && apt-get install --yes --no-install-recommends $(cat {{ system_packages_filename }}) \
62
92
  && apt-get autoremove -y \
63
93
  && apt-get clean -y \
@@ -68,11 +98,11 @@ RUN apt-get update && apt-get install --yes --no-install-recommends $(cat {{ sys
68
98
 
69
99
  {% block install_requirements %}
70
100
  {%- if should_install_user_requirements_file %}
71
- COPY ./{{ user_supplied_requirements_filename }} {{ user_supplied_requirements_filename }}
101
+ COPY --chown={{ default_owner }} ./{{ user_supplied_requirements_filename }} {{ user_supplied_requirements_filename }}
72
102
  RUN {{ sys_pip_install_command }} -r {{ user_supplied_requirements_filename }} --no-cache-dir
73
103
  {%- endif %}
74
104
  {%- if should_install_requirements %}
75
- COPY ./{{ config_requirements_filename }} {{ config_requirements_filename }}
105
+ COPY --chown={{ default_owner }} ./{{ config_requirements_filename }} {{ config_requirements_filename }}
76
106
  RUN {{ sys_pip_install_command }} -r {{ config_requirements_filename }} --no-cache-dir
77
107
  {%- endif %}
78
108
  {% endblock %}
@@ -80,7 +110,6 @@ RUN {{ sys_pip_install_command }} -r {{ config_requirements_filename }} --no-cac
80
110
 
81
111
 
82
112
  {%- if not config.docker_server %}
83
- ENV APP_HOME="/app"
84
113
  WORKDIR $APP_HOME
85
114
  {%- endif %}
86
115
 
@@ -90,7 +119,7 @@ WORKDIR $APP_HOME
90
119
 
91
120
  {% block bundled_packages_copy %}
92
121
  {%- if bundled_packages_dir_exists %}
93
- COPY ./{{ config.bundled_packages_dir }} /packages
122
+ COPY --chown={{ default_owner }} ./{{ config.bundled_packages_dir }} /packages
94
123
  {%- endif %}
95
124
  {% endblock %}
96
125
 
@@ -1,20 +1,21 @@
1
1
  FROM python:3.11-slim AS cache_warmer
2
2
 
3
- RUN mkdir -p /app/model_cache
4
- WORKDIR /app
3
+ ENV APP_HOME=/app
4
+ RUN mkdir -p ${APP_HOME}/model_cache
5
+ WORKDIR ${APP_HOME}
5
6
 
6
7
  {% if hf_access_token %}
7
8
  ENV HUGGING_FACE_HUB_TOKEN="{{hf_access_token}}"
8
9
  {% endif %}
9
10
 
10
11
  RUN apt-get -y update; apt-get -y install curl; curl -s https://baseten-public.s3.us-west-2.amazonaws.com/bin/b10cp-5fe8dc7da-linux-amd64 -o /app/b10cp; chmod +x /app/b10cp
11
- ENV B10CP_PATH_TRUSS="/app/b10cp"
12
- COPY ./cache_requirements.txt /app/cache_requirements.txt
13
- RUN pip install -r /app/cache_requirements.txt --no-cache-dir && rm -rf /root/.cache/pip
14
- COPY ./cache_warmer.py /cache_warmer.py
12
+ ENV B10CP_PATH_TRUSS="${APP_HOME}/b10cp"
13
+ COPY --chown={{ default_owner }} ./cache_requirements.txt ${APP_HOME}/cache_requirements.txt
14
+ RUN pip install -r ${APP_HOME}/cache_requirements.txt --no-cache-dir && rm -rf /root/.cache/pip
15
+ COPY --chown={{ default_owner }} ./cache_warmer.py /cache_warmer.py
15
16
 
16
17
  {% for credential in credentials_to_cache %}
17
- COPY ./{{credential}} /app/{{credential}}
18
+ COPY ./{{credential}} ${APP_HOME}/{{credential}}
18
19
  {% endfor %}
19
20
 
20
21
  {% for repo, hf_dir in models.items() %}
@@ -0,0 +1,3 @@
1
+ {% for file in cached_files %}
2
+ COPY --chown={{ default_owner }} --from=cache_warmer {{file.source}} {{file.dst}}
3
+ {% endfor %}
@@ -1,4 +1,5 @@
1
1
  [supervisord]
2
+ pidfile=/tmp/supervisord.pid ; Set PID file location to /tmp to be writable by the non-root user
2
3
  nodaemon=true ; Run supervisord in the foreground (useful for containers)
3
4
  logfile=/dev/null ; Disable logging to file (send logs to /dev/null)
4
5
  logfile_maxbytes=0 ; No size limit on logfile (since logging is disabled)
@@ -6,7 +6,6 @@ import pathlib
6
6
  import time
7
7
  from typing import Iterator, List, Optional, Sequence
8
8
 
9
- import opentelemetry.exporter.otlp.proto.http.trace_exporter as oltp_exporter
10
9
  import opentelemetry.sdk.resources as resources
11
10
  import opentelemetry.sdk.trace as sdk_trace
12
11
  import opentelemetry.sdk.trace.export as trace_export
@@ -16,7 +15,6 @@ from shared import secrets_resolver
16
15
  logger = logging.getLogger(__name__)
17
16
 
18
17
  ATTR_NAME_DURATION = "duration_sec"
19
- OTEL_EXPORTER_OTLP_ENDPOINT = "OTEL_EXPORTER_OTLP_ENDPOINT"
20
18
  # Writing trace data to a file is only intended for testing / debugging.
21
19
  OTEL_TRACING_NDJSON_FILE = "OTEL_TRACING_NDJSON_FILE"
22
20
  # Exporting trace data to a public honeycomb instance (not our cluster collector)
@@ -67,13 +65,6 @@ def get_truss_tracer(secrets: secrets_resolver.Secrets, config) -> trace.Tracer:
67
65
  return _truss_tracer
68
66
 
69
67
  span_processors: List[sdk_trace.SpanProcessor] = []
70
- if otlp_endpoint := os.getenv(OTEL_EXPORTER_OTLP_ENDPOINT):
71
- if enable_tracing_data:
72
- logger.info(f"Exporting trace data to {OTEL_EXPORTER_OTLP_ENDPOINT}.")
73
- otlp_exporter = oltp_exporter.OTLPSpanExporter(endpoint=otlp_endpoint)
74
- otlp_processor = sdk_trace.export.BatchSpanProcessor(otlp_exporter)
75
- span_processors.append(otlp_processor)
76
-
77
68
  if tracing_log_file := os.getenv(OTEL_TRACING_NDJSON_FILE):
78
69
  if enable_tracing_data:
79
70
  logger.info(f"Exporting trace data to file `{tracing_log_file}`.")
@@ -81,21 +72,6 @@ def get_truss_tracer(secrets: secrets_resolver.Secrets, config) -> trace.Tracer:
81
72
  file_processor = sdk_trace.export.SimpleSpanProcessor(json_file_exporter)
82
73
  span_processors.append(file_processor)
83
74
 
84
- if (
85
- honeycomb_dataset := os.getenv(HONEYCOMB_DATASET)
86
- ) and HONEYCOMB_API_KEY in secrets:
87
- honeycomb_api_key = secrets[HONEYCOMB_API_KEY]
88
- logger.info("Exporting trace data to honeycomb.")
89
- honeycomb_exporter = oltp_exporter.OTLPSpanExporter(
90
- endpoint="https://api.honeycomb.io/v1/traces",
91
- headers={
92
- "x-honeycomb-team": honeycomb_api_key,
93
- "x-honeycomb-dataset": honeycomb_dataset,
94
- },
95
- )
96
- honeycomb_processor = sdk_trace.export.BatchSpanProcessor(honeycomb_exporter)
97
- span_processors.append(honeycomb_processor)
98
-
99
75
  if span_processors and enable_tracing_data:
100
76
  logger.info("Instantiating truss tracer.")
101
77
  resource = resources.Resource.create({resources.SERVICE_NAME: "truss-server"})
@@ -11,7 +11,6 @@
11
11
  {% if config.base_image %}
12
12
  {%- if not config.docker_server %}
13
13
  ENV PYTHONUNBUFFERED="True"
14
- ENV DEBIAN_FRONTEND="noninteractive"
15
14
 
16
15
  {# Install common dependencies #}
17
16
  RUN apt update && \
@@ -20,7 +19,7 @@ RUN apt update && \
20
19
  && apt-get clean -y \
21
20
  && rm -rf /var/lib/apt/lists/*
22
21
 
23
- COPY ./{{ base_server_requirements_filename }} {{ base_server_requirements_filename }}
22
+ COPY --chown={{ default_owner }} ./{{ base_server_requirements_filename }} {{ base_server_requirements_filename }}
24
23
  RUN {{ sys_pip_install_command }} -r {{ base_server_requirements_filename }} --no-cache-dir
25
24
  {%- endif %} {#- endif not config.docker_server #}
26
25
 
@@ -38,7 +37,7 @@ RUN ln -sf {{ config.base_image.python_executable_path }} /usr/local/bin/python
38
37
 
39
38
  {% block install_requirements %}
40
39
  {%- if should_install_server_requirements %}
41
- COPY ./{{ server_requirements_filename }} {{ server_requirements_filename }}
40
+ COPY --chown={{ default_owner }} ./{{ server_requirements_filename }} {{ server_requirements_filename }}
42
41
  RUN {{ sys_pip_install_command }} -r {{ server_requirements_filename }} --no-cache-dir
43
42
  {%- endif %} {#- endif should_install_server_requirements #}
44
43
  {{ super() }}
@@ -47,7 +46,7 @@ RUN {{ sys_pip_install_command }} -r {{ server_requirements_filename }} --no-cac
47
46
 
48
47
  {% block app_copy %}
49
48
  {%- if model_cache_v1 %}
50
- # Copy data before code for better caching
49
+ {# Copy data before code for better caching #}
51
50
  {%- include "copy_cache_files.Dockerfile.jinja" -%}
52
51
  {%- endif %} {#- endif model_cache_v1 #}
53
52
 
@@ -65,47 +64,55 @@ RUN {% for secret,path in config.build.secret_to_path_mapping.items() %} --mount
65
64
 
66
65
  {# Copy data before code for better caching #}
67
66
  {%- if data_dir_exists %}
68
- COPY ./{{ config.data_dir }} /app/data
67
+ COPY --chown={{ default_owner }} ./{{ config.data_dir }} ${APP_HOME}/data
69
68
  {%- endif %} {#- endif data_dir_exists #}
70
69
 
71
70
  {%- if model_cache_v2 %}
72
- # v0.0.9, keep synced with server_requirements.txt
71
+ {# v0.0.9, keep synced with server_requirements.txt #}
73
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
74
73
  RUN chmod +x /usr/local/bin/truss-transfer-cli
75
74
  RUN mkdir /static-bptr
76
75
  RUN echo "hash {{model_cache_hash}}"
77
- COPY ./bptr-manifest /static-bptr/static-bptr-manifest.json
76
+ COPY --chown={{ default_owner }} ./bptr-manifest /static-bptr/static-bptr-manifest.json
78
77
  {%- endif %} {#- endif model_cache_v2 #}
79
78
 
80
79
  {%- if not config.docker_server %}
81
- COPY ./server /app
80
+ COPY --chown={{ default_owner }} ./server ${APP_HOME}
82
81
  {%- endif %} {#- endif not config.docker_server #}
83
82
 
84
83
  {%- if use_local_src %}
85
84
  {# This path takes precedence over site-packages. #}
86
- COPY ./truss_chains /app/truss_chains
87
- COPY ./truss /app/truss
85
+ COPY --chown={{ default_owner }} ./truss_chains ${APP_HOME}/truss_chains
86
+ COPY --chown={{ default_owner }} ./truss ${APP_HOME}/truss
88
87
  {%- endif %} {#- endif use_local_src #}
89
88
 
90
- COPY ./config.yaml /app/config.yaml
89
+ COPY --chown={{ default_owner }} ./config.yaml ${APP_HOME}/config.yaml
91
90
  {%- if requires_live_reload %}
92
91
  RUN uv python install {{ control_python_version }}
93
92
  RUN uv venv /control/.env --python {{ control_python_version }}
94
93
 
95
- COPY ./control /control
94
+ COPY --chown={{ default_owner }} ./control /control
96
95
  RUN uv pip install -r /control/requirements.txt --python /control/.env/bin/python --no-cache-dir
97
96
  {%- endif %} {#- endif requires_live_reload #}
98
97
 
99
98
  {%- if model_dir_exists %}
100
- COPY ./{{ config.model_module_dir }} /app/model
99
+ COPY --chown={{ default_owner }} ./{{ config.model_module_dir }} ${APP_HOME}/model
101
100
  {%- endif %} {#- endif model_dir_exists #}
102
101
  {% endblock %} {#- endblock app_copy #}
103
102
 
104
103
  {% block run %}
104
+ {# Macro to change ownership of directories and switch to regular user #}
105
+ {%- macro chown_and_switch_to_regular_user_if_enabled(additional_chown_dirs=[]) -%}
106
+ {%- if non_root_user %}
107
+ RUN chown -R {{ app_username }}:{{ app_username }} {% for dir in additional_chown_dirs %}{{ dir }} {% endfor %}${HOME} ${APP_HOME}
108
+ USER {{ app_username }}
109
+ {%- endif %} {#- endif non_root_user #}
110
+ {%- endmacro -%}
111
+
105
112
  {%- if config.docker_server %}
106
- RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
113
+ RUN apt-get update -y && apt-get install -y --no-install-recommends \
107
114
  curl nginx && rm -rf /var/lib/apt/lists/*
108
- COPY ./docker_server_requirements.txt /app/docker_server_requirements.txt
115
+ COPY --chown={{ default_owner }} ./docker_server_requirements.txt ${APP_HOME}/docker_server_requirements.txt
109
116
 
110
117
  {# NB(nikhil): Use the same python version for custom server proxy as the control server, for consistency. #}
111
118
  RUN uv python install {{ control_python_version }}
@@ -113,23 +120,30 @@ RUN uv venv /docker_server/.venv --python {{ control_python_version }}
113
120
  RUN uv pip install --python /docker_server/.venv/bin/python -r /app/docker_server_requirements.txt --no-cache-dir
114
121
  {% set proxy_config_path = "/etc/nginx/conf.d/proxy.conf" %}
115
122
  {% set supervisor_config_path = "/etc/supervisor/supervisord.conf" %}
116
- {% set supervisor_log_dir = "/var/log/supervisor" %}
117
123
  {% set supervisor_server_url = "http://localhost:8080" %}
118
- COPY ./proxy.conf {{ proxy_config_path }}
119
- RUN mkdir -p {{ supervisor_log_dir }}
120
- COPY supervisord.conf {{ supervisor_config_path }}
124
+ COPY --chown={{ default_owner }} ./proxy.conf {{ proxy_config_path }}
125
+ COPY --chown={{ default_owner }} ./supervisord.conf {{ supervisor_config_path }}
121
126
  ENV SUPERVISOR_SERVER_URL="{{ supervisor_server_url }}"
122
127
  ENV SERVER_START_CMD="/docker_server/.venv/bin/supervisord -c {{ supervisor_config_path }}"
128
+ {#- default configuration uses port 80, which requires root privileges, so we remove it #}
129
+ RUN rm -f /etc/nginx/sites-enabled/default
130
+ {#- nginx writes to /var/lib/nginx, /var/log/nginx, and /run directories #}
131
+ {{ chown_and_switch_to_regular_user_if_enabled(["/var/lib/nginx", "/var/log/nginx", "/run"]) }}
123
132
  ENTRYPOINT ["/docker_server/.venv/bin/supervisord", "-c", "{{ supervisor_config_path }}"]
133
+
124
134
  {%- elif requires_live_reload %} {#- elif requires_live_reload #}
125
135
  ENV HASH_TRUSS="{{ truss_hash }}"
126
136
  ENV CONTROL_SERVER_PORT="8080"
127
137
  ENV INFERENCE_SERVER_PORT="8090"
128
138
  ENV SERVER_START_CMD="/control/.env/bin/python /control/control/server.py"
139
+ {{ chown_and_switch_to_regular_user_if_enabled() }}
129
140
  ENTRYPOINT ["/control/.env/bin/python", "/control/control/server.py"]
141
+
130
142
  {%- else %} {#- else (default inference server) #}
131
143
  ENV INFERENCE_SERVER_PORT="8080"
132
144
  ENV SERVER_START_CMD="{{ python_executable }} /app/main.py"
145
+ {{ chown_and_switch_to_regular_user_if_enabled() }}
133
146
  ENTRYPOINT ["{{ python_executable }}", "/app/main.py"]
134
147
  {%- endif %} {#- endif config.docker_server / live_reload #}
148
+
135
149
  {% endblock %} {#- endblock run #}