truss 0.10.0rc1__py3-none-any.whl → 0.60.0__py3-none-any.whl

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 (362) hide show
  1. truss/__init__.py +10 -3
  2. truss/api/__init__.py +123 -0
  3. truss/api/definitions.py +51 -0
  4. truss/base/constants.py +116 -0
  5. truss/base/custom_types.py +29 -0
  6. truss/{errors.py → base/errors.py} +4 -0
  7. truss/base/trt_llm_config.py +310 -0
  8. truss/{truss_config.py → base/truss_config.py} +344 -31
  9. truss/{truss_spec.py → base/truss_spec.py} +20 -6
  10. truss/{validation.py → base/validation.py} +60 -11
  11. truss/cli/cli.py +841 -88
  12. truss/{remote → cli}/remote_cli.py +2 -7
  13. truss/contexts/docker_build_setup.py +67 -0
  14. truss/contexts/image_builder/cache_warmer.py +2 -8
  15. truss/contexts/image_builder/image_builder.py +1 -1
  16. truss/contexts/image_builder/serving_image_builder.py +292 -46
  17. truss/contexts/image_builder/util.py +1 -3
  18. truss/contexts/local_loader/docker_build_emulator.py +58 -0
  19. truss/contexts/local_loader/load_model_local.py +2 -2
  20. truss/contexts/local_loader/truss_module_loader.py +1 -1
  21. truss/contexts/local_loader/utils.py +1 -1
  22. truss/local/local_config.py +2 -6
  23. truss/local/local_config_handler.py +20 -5
  24. truss/patch/__init__.py +1 -0
  25. truss/patch/hash.py +4 -70
  26. truss/patch/signature.py +4 -16
  27. truss/patch/truss_dir_patch_applier.py +3 -78
  28. truss/remote/baseten/api.py +308 -23
  29. truss/remote/baseten/auth.py +3 -3
  30. truss/remote/baseten/core.py +257 -50
  31. truss/remote/baseten/custom_types.py +44 -0
  32. truss/remote/baseten/error.py +4 -0
  33. truss/remote/baseten/remote.py +369 -118
  34. truss/remote/baseten/service.py +118 -11
  35. truss/remote/baseten/utils/status.py +29 -0
  36. truss/remote/baseten/utils/tar.py +34 -22
  37. truss/remote/baseten/utils/transfer.py +36 -23
  38. truss/remote/remote_factory.py +14 -5
  39. truss/remote/truss_remote.py +72 -45
  40. truss/templates/base.Dockerfile.jinja +18 -16
  41. truss/templates/cache.Dockerfile.jinja +3 -3
  42. truss/{server → templates/control}/control/application.py +14 -35
  43. truss/{server → templates/control}/control/endpoints.py +39 -9
  44. truss/{server/control/patch/types.py → templates/control/control/helpers/custom_types.py} +13 -52
  45. truss/{server → templates/control}/control/helpers/inference_server_controller.py +4 -8
  46. truss/{server → templates/control}/control/helpers/inference_server_process_controller.py +2 -4
  47. truss/{server → templates/control}/control/helpers/inference_server_starter.py +5 -10
  48. truss/{server/control → templates/control/control/helpers}/truss_patch/model_code_patch_applier.py +8 -6
  49. truss/{server/control/patch → templates/control/control/helpers/truss_patch}/model_container_patch_applier.py +18 -26
  50. truss/templates/control/control/helpers/truss_patch/requirement_name_identifier.py +66 -0
  51. truss/{server → templates/control}/control/server.py +11 -6
  52. truss/templates/control/requirements.txt +9 -0
  53. truss/templates/custom_python_dx/my_model.py +28 -0
  54. truss/templates/docker_server/proxy.conf.jinja +42 -0
  55. truss/templates/docker_server/supervisord.conf.jinja +27 -0
  56. truss/templates/docker_server_requirements.txt +1 -0
  57. truss/templates/server/common/errors.py +231 -0
  58. truss/{server → templates/server}/common/patches/whisper/patch.py +1 -0
  59. truss/{server/common/patches/__init__.py → templates/server/common/patches.py} +1 -3
  60. truss/{server → templates/server}/common/retry.py +1 -0
  61. truss/{server → templates/server}/common/schema.py +11 -9
  62. truss/templates/server/common/tracing.py +157 -0
  63. truss/templates/server/main.py +9 -0
  64. truss/templates/server/model_wrapper.py +961 -0
  65. truss/templates/server/requirements.txt +21 -0
  66. truss/templates/server/truss_server.py +447 -0
  67. truss/templates/server.Dockerfile.jinja +62 -14
  68. truss/templates/shared/dynamic_config_resolver.py +28 -0
  69. truss/templates/shared/lazy_data_resolver.py +164 -0
  70. truss/templates/shared/log_config.py +125 -0
  71. truss/{server → templates}/shared/secrets_resolver.py +1 -2
  72. truss/{server → templates}/shared/serialization.py +31 -9
  73. truss/{server → templates}/shared/util.py +3 -13
  74. truss/templates/trtllm-audio/model/model.py +49 -0
  75. truss/templates/trtllm-audio/packages/sigint_patch.py +14 -0
  76. truss/templates/trtllm-audio/packages/whisper_trt/__init__.py +215 -0
  77. truss/templates/trtllm-audio/packages/whisper_trt/assets.py +25 -0
  78. truss/templates/trtllm-audio/packages/whisper_trt/batching.py +52 -0
  79. truss/templates/trtllm-audio/packages/whisper_trt/custom_types.py +26 -0
  80. truss/templates/trtllm-audio/packages/whisper_trt/modeling.py +184 -0
  81. truss/templates/trtllm-audio/packages/whisper_trt/tokenizer.py +185 -0
  82. truss/templates/trtllm-audio/packages/whisper_trt/utils.py +245 -0
  83. truss/templates/trtllm-briton/src/extension.py +64 -0
  84. truss/tests/conftest.py +302 -94
  85. truss/tests/contexts/image_builder/test_serving_image_builder.py +74 -31
  86. truss/tests/contexts/local_loader/test_load_local.py +2 -2
  87. truss/tests/contexts/local_loader/test_truss_module_finder.py +1 -1
  88. truss/tests/patch/test_calc_patch.py +439 -127
  89. truss/tests/patch/test_dir_signature.py +3 -12
  90. truss/tests/patch/test_hash.py +1 -1
  91. truss/tests/patch/test_signature.py +1 -1
  92. truss/tests/patch/test_truss_dir_patch_applier.py +23 -11
  93. truss/tests/patch/test_types.py +2 -2
  94. truss/tests/remote/baseten/test_api.py +153 -58
  95. truss/tests/remote/baseten/test_auth.py +2 -1
  96. truss/tests/remote/baseten/test_core.py +160 -12
  97. truss/tests/remote/baseten/test_remote.py +489 -77
  98. truss/tests/remote/baseten/test_service.py +55 -0
  99. truss/tests/remote/test_remote_factory.py +16 -18
  100. truss/tests/remote/test_truss_remote.py +26 -17
  101. truss/tests/templates/control/control/helpers/test_context_managers.py +11 -0
  102. truss/tests/templates/control/control/helpers/test_model_container_patch_applier.py +184 -0
  103. truss/tests/templates/control/control/helpers/test_requirement_name_identifier.py +89 -0
  104. truss/tests/{server → templates/control}/control/test_server.py +79 -24
  105. truss/tests/{server → templates/control}/control/test_server_integration.py +24 -16
  106. truss/tests/templates/core/server/test_dynamic_config_resolver.py +108 -0
  107. truss/tests/templates/core/server/test_lazy_data_resolver.py +329 -0
  108. truss/tests/templates/core/server/test_lazy_data_resolver_v2.py +79 -0
  109. truss/tests/{server → templates}/core/server/test_secrets_resolver.py +1 -1
  110. truss/tests/{server → templates/server}/common/test_retry.py +3 -3
  111. truss/tests/templates/server/test_model_wrapper.py +248 -0
  112. truss/tests/{server → templates/server}/test_schema.py +3 -5
  113. truss/tests/{server/core/server/common → templates/server}/test_truss_server.py +8 -5
  114. truss/tests/test_build.py +9 -52
  115. truss/tests/test_config.py +336 -77
  116. truss/tests/test_context_builder_image.py +3 -11
  117. truss/tests/test_control_truss_patching.py +7 -12
  118. truss/tests/test_custom_server.py +38 -0
  119. truss/tests/test_data/context_builder_image_test/test.py +3 -0
  120. truss/tests/test_data/happy.ipynb +56 -0
  121. truss/tests/test_data/model_load_failure_test/config.yaml +2 -0
  122. truss/tests/test_data/model_load_failure_test/model/__init__.py +0 -0
  123. truss/tests/test_data/patch_ping_test_server/__init__.py +0 -0
  124. truss/{test_data → tests/test_data}/patch_ping_test_server/app.py +3 -9
  125. truss/{test_data → tests/test_data}/server.Dockerfile +20 -21
  126. truss/tests/test_data/server_conformance_test_truss/__init__.py +0 -0
  127. truss/tests/test_data/server_conformance_test_truss/model/__init__.py +0 -0
  128. truss/{test_data → tests/test_data}/server_conformance_test_truss/model/model.py +1 -3
  129. truss/tests/test_data/test_async_truss/__init__.py +0 -0
  130. truss/tests/test_data/test_async_truss/model/__init__.py +0 -0
  131. truss/tests/test_data/test_basic_truss/__init__.py +0 -0
  132. truss/tests/test_data/test_basic_truss/config.yaml +16 -0
  133. truss/tests/test_data/test_basic_truss/model/__init__.py +0 -0
  134. truss/tests/test_data/test_build_commands/__init__.py +0 -0
  135. truss/tests/test_data/test_build_commands/config.yaml +13 -0
  136. truss/tests/test_data/test_build_commands/model/__init__.py +0 -0
  137. truss/{test_data/test_streaming_async_generator_truss → tests/test_data/test_build_commands}/model/model.py +2 -3
  138. truss/tests/test_data/test_build_commands_failure/__init__.py +0 -0
  139. truss/tests/test_data/test_build_commands_failure/config.yaml +14 -0
  140. truss/tests/test_data/test_build_commands_failure/model/__init__.py +0 -0
  141. truss/tests/test_data/test_build_commands_failure/model/model.py +17 -0
  142. truss/tests/test_data/test_concurrency_truss/__init__.py +0 -0
  143. truss/tests/test_data/test_concurrency_truss/config.yaml +4 -0
  144. truss/tests/test_data/test_concurrency_truss/model/__init__.py +0 -0
  145. truss/tests/test_data/test_custom_server_truss/__init__.py +0 -0
  146. truss/tests/test_data/test_custom_server_truss/config.yaml +20 -0
  147. truss/tests/test_data/test_custom_server_truss/test_docker_image/Dockerfile +17 -0
  148. truss/tests/test_data/test_custom_server_truss/test_docker_image/README.md +10 -0
  149. truss/tests/test_data/test_custom_server_truss/test_docker_image/VERSION +1 -0
  150. truss/tests/test_data/test_custom_server_truss/test_docker_image/__init__.py +0 -0
  151. truss/tests/test_data/test_custom_server_truss/test_docker_image/app.py +19 -0
  152. truss/tests/test_data/test_custom_server_truss/test_docker_image/build_upload_new_image.sh +6 -0
  153. truss/tests/test_data/test_openai/__init__.py +0 -0
  154. truss/{test_data/test_basic_truss → tests/test_data/test_openai}/config.yaml +1 -2
  155. truss/tests/test_data/test_openai/model/__init__.py +0 -0
  156. truss/tests/test_data/test_openai/model/model.py +15 -0
  157. truss/tests/test_data/test_pyantic_v1/__init__.py +0 -0
  158. truss/tests/test_data/test_pyantic_v1/model/__init__.py +0 -0
  159. truss/tests/test_data/test_pyantic_v1/model/model.py +28 -0
  160. truss/tests/test_data/test_pyantic_v1/requirements.txt +1 -0
  161. truss/tests/test_data/test_pyantic_v2/__init__.py +0 -0
  162. truss/tests/test_data/test_pyantic_v2/config.yaml +13 -0
  163. truss/tests/test_data/test_pyantic_v2/model/__init__.py +0 -0
  164. truss/tests/test_data/test_pyantic_v2/model/model.py +30 -0
  165. truss/tests/test_data/test_pyantic_v2/requirements.txt +1 -0
  166. truss/tests/test_data/test_requirements_file_truss/__init__.py +0 -0
  167. truss/tests/test_data/test_requirements_file_truss/config.yaml +13 -0
  168. truss/tests/test_data/test_requirements_file_truss/model/__init__.py +0 -0
  169. truss/{test_data → tests/test_data}/test_requirements_file_truss/model/model.py +1 -0
  170. truss/tests/test_data/test_streaming_async_generator_truss/__init__.py +0 -0
  171. truss/tests/test_data/test_streaming_async_generator_truss/config.yaml +4 -0
  172. truss/tests/test_data/test_streaming_async_generator_truss/model/__init__.py +0 -0
  173. truss/tests/test_data/test_streaming_async_generator_truss/model/model.py +7 -0
  174. truss/tests/test_data/test_streaming_read_timeout/__init__.py +0 -0
  175. truss/tests/test_data/test_streaming_read_timeout/model/__init__.py +0 -0
  176. truss/tests/test_data/test_streaming_truss/__init__.py +0 -0
  177. truss/tests/test_data/test_streaming_truss/config.yaml +4 -0
  178. truss/tests/test_data/test_streaming_truss/model/__init__.py +0 -0
  179. truss/tests/test_data/test_streaming_truss_with_error/__init__.py +0 -0
  180. truss/tests/test_data/test_streaming_truss_with_error/model/__init__.py +0 -0
  181. truss/{test_data → tests/test_data}/test_streaming_truss_with_error/model/model.py +3 -11
  182. truss/tests/test_data/test_streaming_truss_with_error/packages/__init__.py +0 -0
  183. truss/tests/test_data/test_streaming_truss_with_error/packages/helpers_1.py +5 -0
  184. truss/tests/test_data/test_streaming_truss_with_error/packages/helpers_2.py +2 -0
  185. truss/tests/test_data/test_streaming_truss_with_tracing/__init__.py +0 -0
  186. truss/tests/test_data/test_streaming_truss_with_tracing/config.yaml +43 -0
  187. truss/tests/test_data/test_streaming_truss_with_tracing/model/__init__.py +0 -0
  188. truss/tests/test_data/test_streaming_truss_with_tracing/model/model.py +65 -0
  189. truss/tests/test_data/test_trt_llm_truss/__init__.py +0 -0
  190. truss/tests/test_data/test_trt_llm_truss/config.yaml +15 -0
  191. truss/tests/test_data/test_trt_llm_truss/model/__init__.py +0 -0
  192. truss/tests/test_data/test_trt_llm_truss/model/model.py +15 -0
  193. truss/tests/test_data/test_truss/__init__.py +0 -0
  194. truss/tests/test_data/test_truss/config.yaml +4 -0
  195. truss/tests/test_data/test_truss/model/__init__.py +0 -0
  196. truss/tests/test_data/test_truss/model/dummy +0 -0
  197. truss/tests/test_data/test_truss/packages/__init__.py +0 -0
  198. truss/tests/test_data/test_truss/packages/test_package/__init__.py +0 -0
  199. truss/tests/test_data/test_truss_server_caching_truss/__init__.py +0 -0
  200. truss/tests/test_data/test_truss_server_caching_truss/model/__init__.py +0 -0
  201. truss/tests/test_data/test_truss_with_error/__init__.py +0 -0
  202. truss/tests/test_data/test_truss_with_error/config.yaml +4 -0
  203. truss/tests/test_data/test_truss_with_error/model/__init__.py +0 -0
  204. truss/tests/test_data/test_truss_with_error/model/model.py +8 -0
  205. truss/tests/test_data/test_truss_with_error/packages/__init__.py +0 -0
  206. truss/tests/test_data/test_truss_with_error/packages/helpers_1.py +5 -0
  207. truss/tests/test_data/test_truss_with_error/packages/helpers_2.py +2 -0
  208. truss/tests/test_docker.py +2 -1
  209. truss/tests/test_model_inference.py +1340 -292
  210. truss/tests/test_model_schema.py +33 -26
  211. truss/tests/test_testing_utilities_for_other_tests.py +50 -5
  212. truss/tests/test_truss_gatherer.py +3 -5
  213. truss/tests/test_truss_handle.py +62 -59
  214. truss/tests/test_util.py +2 -1
  215. truss/tests/test_validation.py +15 -13
  216. truss/tests/trt_llm/test_trt_llm_config.py +41 -0
  217. truss/tests/trt_llm/test_validation.py +91 -0
  218. truss/tests/util/test_config_checks.py +40 -0
  219. truss/tests/util/test_env_vars.py +14 -0
  220. truss/tests/util/test_path.py +10 -23
  221. truss/trt_llm/config_checks.py +43 -0
  222. truss/trt_llm/validation.py +42 -0
  223. truss/truss_handle/__init__.py +0 -0
  224. truss/truss_handle/build.py +122 -0
  225. truss/{decorators.py → truss_handle/decorators.py} +1 -1
  226. truss/truss_handle/patch/__init__.py +0 -0
  227. truss/{patch → truss_handle/patch}/calc_patch.py +146 -92
  228. truss/{types.py → truss_handle/patch/custom_types.py} +35 -27
  229. truss/{patch → truss_handle/patch}/dir_signature.py +1 -1
  230. truss/truss_handle/patch/hash.py +71 -0
  231. truss/{patch → truss_handle/patch}/local_truss_patch_applier.py +6 -4
  232. truss/truss_handle/patch/signature.py +22 -0
  233. truss/truss_handle/patch/truss_dir_patch_applier.py +87 -0
  234. truss/{readme_generator.py → truss_handle/readme_generator.py} +3 -2
  235. truss/{truss_gatherer.py → truss_handle/truss_gatherer.py} +3 -2
  236. truss/{truss_handle.py → truss_handle/truss_handle.py} +174 -78
  237. truss/util/.truss_ignore +3 -0
  238. truss/{docker.py → util/docker.py} +6 -2
  239. truss/util/download.py +6 -15
  240. truss/util/env_vars.py +41 -0
  241. truss/util/log_utils.py +52 -0
  242. truss/util/path.py +20 -20
  243. truss/util/requirements.py +11 -0
  244. {truss-0.10.0rc1.dist-info → truss-0.60.0.dist-info}/METADATA +18 -16
  245. truss-0.60.0.dist-info/RECORD +324 -0
  246. {truss-0.10.0rc1.dist-info → truss-0.60.0.dist-info}/WHEEL +1 -1
  247. truss-0.60.0.dist-info/entry_points.txt +4 -0
  248. truss_chains/__init__.py +71 -0
  249. truss_chains/definitions.py +756 -0
  250. truss_chains/deployment/__init__.py +0 -0
  251. truss_chains/deployment/code_gen.py +816 -0
  252. truss_chains/deployment/deployment_client.py +871 -0
  253. truss_chains/framework.py +1480 -0
  254. truss_chains/public_api.py +231 -0
  255. truss_chains/py.typed +0 -0
  256. truss_chains/pydantic_numpy.py +131 -0
  257. truss_chains/reference_code/reference_chainlet.py +34 -0
  258. truss_chains/reference_code/reference_model.py +10 -0
  259. truss_chains/remote_chainlet/__init__.py +0 -0
  260. truss_chains/remote_chainlet/model_skeleton.py +60 -0
  261. truss_chains/remote_chainlet/stub.py +380 -0
  262. truss_chains/remote_chainlet/utils.py +332 -0
  263. truss_chains/streaming.py +378 -0
  264. truss_chains/utils.py +178 -0
  265. CODE_OF_CONDUCT.md +0 -131
  266. CONTRIBUTING.md +0 -48
  267. README.md +0 -137
  268. context_builder.Dockerfile +0 -24
  269. truss/blob/blob_backend.py +0 -10
  270. truss/blob/blob_backend_registry.py +0 -23
  271. truss/blob/http_public_blob_backend.py +0 -23
  272. truss/build/__init__.py +0 -2
  273. truss/build/build.py +0 -143
  274. truss/build/configure.py +0 -63
  275. truss/cli/__init__.py +0 -2
  276. truss/cli/console.py +0 -5
  277. truss/cli/create.py +0 -5
  278. truss/config/trt_llm.py +0 -81
  279. truss/constants.py +0 -61
  280. truss/model_inference.py +0 -123
  281. truss/patch/types.py +0 -30
  282. truss/pytest.ini +0 -7
  283. truss/server/common/errors.py +0 -100
  284. truss/server/common/termination_handler_middleware.py +0 -64
  285. truss/server/common/truss_server.py +0 -389
  286. truss/server/control/patch/model_code_patch_applier.py +0 -46
  287. truss/server/control/patch/requirement_name_identifier.py +0 -17
  288. truss/server/inference_server.py +0 -29
  289. truss/server/model_wrapper.py +0 -434
  290. truss/server/shared/logging.py +0 -81
  291. truss/templates/trtllm/model/model.py +0 -97
  292. truss/templates/trtllm/packages/build_engine_utils.py +0 -34
  293. truss/templates/trtllm/packages/constants.py +0 -11
  294. truss/templates/trtllm/packages/schema.py +0 -216
  295. truss/templates/trtllm/packages/tensorrt_llm_model_repository/ensemble/config.pbtxt +0 -246
  296. truss/templates/trtllm/packages/tensorrt_llm_model_repository/postprocessing/1/model.py +0 -181
  297. truss/templates/trtllm/packages/tensorrt_llm_model_repository/postprocessing/config.pbtxt +0 -64
  298. truss/templates/trtllm/packages/tensorrt_llm_model_repository/preprocessing/1/model.py +0 -260
  299. truss/templates/trtllm/packages/tensorrt_llm_model_repository/preprocessing/config.pbtxt +0 -99
  300. truss/templates/trtllm/packages/tensorrt_llm_model_repository/tensorrt_llm/config.pbtxt +0 -208
  301. truss/templates/trtllm/packages/triton_client.py +0 -150
  302. truss/templates/trtllm/packages/utils.py +0 -43
  303. truss/test_data/context_builder_image_test/test.py +0 -4
  304. truss/test_data/happy.ipynb +0 -54
  305. truss/test_data/model_load_failure_test/config.yaml +0 -2
  306. truss/test_data/test_concurrency_truss/config.yaml +0 -2
  307. truss/test_data/test_streaming_async_generator_truss/config.yaml +0 -2
  308. truss/test_data/test_streaming_truss/config.yaml +0 -3
  309. truss/test_data/test_truss/config.yaml +0 -2
  310. truss/tests/server/common/test_termination_handler_middleware.py +0 -93
  311. truss/tests/server/control/test_model_container_patch_applier.py +0 -203
  312. truss/tests/server/core/server/common/test_util.py +0 -19
  313. truss/tests/server/test_model_wrapper.py +0 -87
  314. truss/util/data_structures.py +0 -16
  315. truss-0.10.0rc1.dist-info/RECORD +0 -216
  316. truss-0.10.0rc1.dist-info/entry_points.txt +0 -3
  317. truss/{server/shared → base}/__init__.py +0 -0
  318. truss/{server → templates/control}/control/helpers/context_managers.py +0 -0
  319. truss/{server/control → templates/control/control/helpers}/errors.py +0 -0
  320. truss/{server/control/patch → templates/control/control/helpers/truss_patch}/__init__.py +0 -0
  321. truss/{server/control/patch → templates/control/control/helpers/truss_patch}/system_packages.py +0 -0
  322. truss/{test_data/annotated_types_truss/model → templates/server}/__init__.py +0 -0
  323. truss/{server → templates/server}/common/__init__.py +0 -0
  324. truss/{test_data/gcs_fix/model → templates/shared}/__init__.py +0 -0
  325. truss/templates/{trtllm → trtllm-briton}/README.md +0 -0
  326. truss/{test_data/server_conformance_test_truss/model → tests/test_data}/__init__.py +0 -0
  327. truss/{test_data/test_basic_truss/model → tests/test_data/annotated_types_truss}/__init__.py +0 -0
  328. truss/{test_data → tests/test_data}/annotated_types_truss/config.yaml +0 -0
  329. truss/{test_data/test_requirements_file_truss → tests/test_data/annotated_types_truss}/model/__init__.py +0 -0
  330. truss/{test_data → tests/test_data}/annotated_types_truss/model/model.py +0 -0
  331. truss/{test_data → tests/test_data}/auto-mpg.data +0 -0
  332. truss/{test_data → tests/test_data}/context_builder_image_test/Dockerfile +0 -0
  333. truss/{test_data/test_truss/model → tests/test_data/context_builder_image_test}/__init__.py +0 -0
  334. truss/{test_data/test_truss_server_caching_truss/model → tests/test_data/gcs_fix}/__init__.py +0 -0
  335. truss/{test_data → tests/test_data}/gcs_fix/config.yaml +0 -0
  336. truss/tests/{local → test_data/gcs_fix/model}/__init__.py +0 -0
  337. truss/{test_data → tests/test_data}/gcs_fix/model/model.py +0 -0
  338. truss/{test_data/test_truss/model/dummy → tests/test_data/model_load_failure_test/__init__.py} +0 -0
  339. truss/{test_data → tests/test_data}/model_load_failure_test/model/model.py +0 -0
  340. truss/{test_data → tests/test_data}/pima-indians-diabetes.csv +0 -0
  341. truss/{test_data → tests/test_data}/readme_int_example.md +0 -0
  342. truss/{test_data → tests/test_data}/readme_no_example.md +0 -0
  343. truss/{test_data → tests/test_data}/readme_str_example.md +0 -0
  344. truss/{test_data → tests/test_data}/server_conformance_test_truss/config.yaml +0 -0
  345. truss/{test_data → tests/test_data}/test_async_truss/config.yaml +0 -0
  346. truss/{test_data → tests/test_data}/test_async_truss/model/model.py +3 -3
  347. /truss/{test_data → tests/test_data}/test_basic_truss/model/model.py +0 -0
  348. /truss/{test_data → tests/test_data}/test_concurrency_truss/model/model.py +0 -0
  349. /truss/{test_data/test_requirements_file_truss → tests/test_data/test_pyantic_v1}/config.yaml +0 -0
  350. /truss/{test_data → tests/test_data}/test_requirements_file_truss/requirements.txt +0 -0
  351. /truss/{test_data → tests/test_data}/test_streaming_read_timeout/config.yaml +0 -0
  352. /truss/{test_data → tests/test_data}/test_streaming_read_timeout/model/model.py +0 -0
  353. /truss/{test_data → tests/test_data}/test_streaming_truss/model/model.py +0 -0
  354. /truss/{test_data → tests/test_data}/test_streaming_truss_with_error/config.yaml +0 -0
  355. /truss/{test_data → tests/test_data}/test_truss/examples.yaml +0 -0
  356. /truss/{test_data → tests/test_data}/test_truss/model/model.py +0 -0
  357. /truss/{test_data → tests/test_data}/test_truss/packages/test_package/test.py +0 -0
  358. /truss/{test_data → tests/test_data}/test_truss_server_caching_truss/config.yaml +0 -0
  359. /truss/{test_data → tests/test_data}/test_truss_server_caching_truss/model/model.py +0 -0
  360. /truss/{patch → truss_handle/patch}/constants.py +0 -0
  361. /truss/{notebook.py → util/notebook.py} +0 -0
  362. {truss-0.10.0rc1.dist-info → truss-0.60.0.dist-info}/LICENSE +0 -0
truss/tests/conftest.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import contextlib
2
+ import copy
2
3
  import importlib
3
4
  import os
4
5
  import shutil
@@ -6,15 +7,21 @@ import subprocess
6
7
  import sys
7
8
  import time
8
9
  from pathlib import Path
9
- from typing import Callable, Generator
10
+ from typing import Any, Dict
10
11
 
11
12
  import pytest
12
13
  import requests
13
14
  import yaml
14
- from truss.build import init
15
- from truss.truss_config import DEFAULT_BUNDLED_PACKAGES_DIR
16
- from truss.types import Example
17
- from truss.util.path import copy_tree_path
15
+
16
+ from truss.base.custom_types import Example
17
+ from truss.base.trt_llm_config import TrussSpecDecMode, TrussTRTLLMBatchSchedulerPolicy
18
+ from truss.base.truss_config import DEFAULT_BUNDLED_PACKAGES_DIR, Accelerator
19
+ from truss.contexts.image_builder.serving_image_builder import (
20
+ ServingImageBuilderContext,
21
+ )
22
+ from truss.contexts.local_loader.docker_build_emulator import DockerBuildEmulator
23
+ from truss.truss_handle.build import init_directory
24
+ from truss.truss_handle.truss_handle import TrussHandle
18
25
 
19
26
  CUSTOM_MODEL_CODE = """
20
27
  class Model:
@@ -203,10 +210,22 @@ class Model:
203
210
  return file.read()
204
211
  """
205
212
 
213
+ CUSTOM_MODEL_TRT_LLM_CODE = """
214
+ class Model:
215
+ def __init__(trt_llm, *args, **kwargs):
216
+ pass
217
+
218
+ def load(self):
219
+ pass
220
+
221
+ def predict(self, model_input):
222
+ return [1 for i in model_input]
223
+ """
224
+
206
225
 
207
226
  @pytest.fixture
208
- def temp_path(tmpdir):
209
- yield Path(tmpdir)
227
+ def test_data_path() -> Path:
228
+ return Path(__file__).parent.resolve() / "test_data"
210
229
 
211
230
 
212
231
  @pytest.fixture
@@ -215,30 +234,20 @@ def pytorch_model_init_args():
215
234
 
216
235
 
217
236
  @pytest.fixture
218
- def custom_model_truss_dir(tmp_path) -> Generator[Path, None, None]:
219
- yield _custom_model_from_code(
220
- tmp_path,
221
- "custom_truss",
222
- CUSTOM_MODEL_CODE,
223
- )
237
+ def custom_model_truss_dir(tmp_path) -> Path:
238
+ yield _custom_model_from_code(tmp_path, "custom_truss", CUSTOM_MODEL_CODE)
224
239
 
225
240
 
226
241
  @pytest.fixture
227
242
  def no_preprocess_custom_model(tmp_path):
228
243
  yield _custom_model_from_code(
229
- tmp_path,
230
- "my_no_preprocess_model",
231
- NO_PREPROCESS_CUSTOM_MODEL_CODE,
244
+ tmp_path, "my_no_preprocess_model", NO_PREPROCESS_CUSTOM_MODEL_CODE
232
245
  )
233
246
 
234
247
 
235
248
  @pytest.fixture
236
249
  def long_load_model(tmp_path):
237
- yield _custom_model_from_code(
238
- tmp_path,
239
- "long_load_model",
240
- LONG_LOAD_MODEL_CODE,
241
- )
250
+ yield _custom_model_from_code(tmp_path, "long_load_model", LONG_LOAD_MODEL_CODE)
242
251
 
243
252
 
244
253
  @pytest.fixture
@@ -258,8 +267,7 @@ def custom_model_external_data_access_tuple_fixture(tmp_path: Path):
258
267
  (tmp_path / filename).write_text(content)
259
268
  port = 9089
260
269
  proc = subprocess.Popen(
261
- ["python", "-m", "http.server", str(port), "--bind", "*"],
262
- cwd=tmp_path,
270
+ ["python", "-m", "http.server", str(port), "--bind", "*"], cwd=tmp_path
263
271
  )
264
272
  try:
265
273
  url = f"http://localhost:{port}/{filename}"
@@ -289,8 +297,7 @@ def custom_model_external_data_access_tuple_fixture_gpu(tmp_path: Path):
289
297
  (tmp_path / filename).write_text(content)
290
298
  port = 9089
291
299
  proc = subprocess.Popen(
292
- ["python", "-m", "http.server", str(port), "--bind", "*"],
293
- cwd=tmp_path,
300
+ ["python", "-m", "http.server", str(port), "--bind", "*"], cwd=tmp_path
294
301
  )
295
302
  try:
296
303
  url = f"http://localhost:{port}/{filename}"
@@ -346,27 +353,53 @@ def custom_model_with_external_package(tmp_path: Path):
346
353
  @pytest.fixture
347
354
  def no_postprocess_custom_model(tmp_path):
348
355
  yield _custom_model_from_code(
349
- tmp_path,
350
- "my_no_postprocess_model",
351
- NO_POSTPROCESS_CUSTOM_MODEL_CODE,
356
+ tmp_path, "my_no_postprocess_model", NO_POSTPROCESS_CUSTOM_MODEL_CODE
352
357
  )
353
358
 
354
359
 
355
360
  @pytest.fixture
356
361
  def no_load_custom_model(tmp_path):
357
362
  yield _custom_model_from_code(
358
- tmp_path,
359
- "my_no_load_model",
360
- NO_LOAD_CUSTOM_MODEL_CODE,
363
+ tmp_path, "my_no_load_model", NO_LOAD_CUSTOM_MODEL_CODE
361
364
  )
362
365
 
363
366
 
364
367
  @pytest.fixture
365
368
  def no_params_init_custom_model(tmp_path):
369
+ yield _custom_model_from_code(
370
+ tmp_path, "my_no_params_init_load_model", NO_PARAMS_INIT_CUSTOM_MODEL_CODE
371
+ )
372
+
373
+
374
+ @pytest.fixture
375
+ def custom_model_trt_llm(tmp_path):
376
+ def modify_handle(h: TrussHandle):
377
+ with _modify_yaml(h.spec.config_path) as content:
378
+ h.enable_gpu()
379
+ content["trt_llm"] = {
380
+ "build": {
381
+ "base_model": "llama",
382
+ "max_seq_len": 2048,
383
+ "max_batch_size": 512,
384
+ "checkpoint_repository": {
385
+ "source": "HF",
386
+ "repo": "meta/llama4-500B",
387
+ },
388
+ },
389
+ "runtime": {
390
+ "kv_cache_free_gpu_mem_fraction": 0.9,
391
+ "kv_cache_host_memory_bytes": 1000,
392
+ "enabled_chunked_context": True,
393
+ "batch_scheduler_policy": TrussTRTLLMBatchSchedulerPolicy.GUARANTEED_NO_EVICT.value,
394
+ },
395
+ }
396
+ content["resources"]["accelerator"] = "H100:1"
397
+
366
398
  yield _custom_model_from_code(
367
399
  tmp_path,
368
- "my_no_params_init_load_model",
369
- NO_PARAMS_INIT_CUSTOM_MODEL_CODE,
400
+ "my_trt_llm_model",
401
+ CUSTOM_MODEL_TRT_LLM_CODE,
402
+ handle_ops=modify_handle,
370
403
  )
371
404
 
372
405
 
@@ -390,23 +423,30 @@ def temp_dir(directory):
390
423
  os.chdir(current_dir)
391
424
 
392
425
 
426
+ @pytest.fixture
427
+ def dynamic_config_mount_dir(tmp_path, monkeypatch: pytest.MonkeyPatch):
428
+ monkeypatch.setattr(
429
+ "truss.templates.shared.dynamic_config_resolver.DYNAMIC_CONFIG_MOUNT_DIR",
430
+ str(tmp_path),
431
+ )
432
+ yield
433
+
434
+
393
435
  @pytest.fixture
394
436
  def custom_model_truss_dir_with_pre_and_post_no_example(tmp_path):
395
437
  dir_path = tmp_path / "custom_truss_with_pre_post_no_example"
396
- handle = init(str(dir_path))
397
- handle.spec.model_class_filepath.write_text(
398
- CUSTOM_MODEL_CODE_WITH_PRE_AND_POST_PROCESS
399
- )
438
+ th = TrussHandle(init_directory(dir_path))
439
+ th.spec.model_class_filepath.write_text(CUSTOM_MODEL_CODE_WITH_PRE_AND_POST_PROCESS)
400
440
  yield dir_path
401
441
 
402
442
 
403
443
  @pytest.fixture
404
444
  def custom_model_truss_dir_with_hidden_files(tmp_path):
405
445
  truss_dir_path: Path = tmp_path / "custom_model_truss_dir_with_hidden_files"
406
- _ = init(str(truss_dir_path))
446
+ init_directory(truss_dir_path)
407
447
  (truss_dir_path / "__pycache__").mkdir(parents=True, exist_ok=True)
408
448
  (truss_dir_path / ".git").mkdir(parents=True, exist_ok=True)
409
- (truss_dir_path / "__pycache__" / "test.cpython-38.pyc").touch()
449
+ (truss_dir_path / "__pycache__" / "test.cpython-311.pyc").touch()
410
450
  (truss_dir_path / ".DS_Store").touch()
411
451
  (truss_dir_path / ".git" / ".test_file").touch()
412
452
  (truss_dir_path / "data" / "test_file").write_text("123456789")
@@ -416,7 +456,7 @@ def custom_model_truss_dir_with_hidden_files(tmp_path):
416
456
  @pytest.fixture
417
457
  def custom_model_truss_dir_with_truss_ignore(tmp_path):
418
458
  truss_dir_path: Path = tmp_path / "custom_model_truss_dir_with_truss_ignore"
419
- _ = init(str(truss_dir_path))
459
+ init_directory(truss_dir_path)
420
460
  (truss_dir_path / "random_folder_1").mkdir(parents=True, exist_ok=True)
421
461
  (truss_dir_path / "random_folder_2").mkdir(parents=True, exist_ok=True)
422
462
  (truss_dir_path / "random_file_1.txt").touch()
@@ -436,19 +476,17 @@ def custom_model_truss_dir_with_truss_ignore(tmp_path):
436
476
  @pytest.fixture
437
477
  def custom_model_truss_dir_with_pre_and_post(tmp_path):
438
478
  dir_path = tmp_path / "custom_truss_with_pre_post"
439
- handle = init(str(dir_path))
440
- handle.spec.model_class_filepath.write_text(
441
- CUSTOM_MODEL_CODE_WITH_PRE_AND_POST_PROCESS
442
- )
443
- handle.update_examples([Example("example1", {"inputs": [[0]]})])
479
+ th = TrussHandle(init_directory(dir_path))
480
+ th.spec.model_class_filepath.write_text(CUSTOM_MODEL_CODE_WITH_PRE_AND_POST_PROCESS)
481
+ th.update_examples([Example("example1", {"inputs": [[0]]})])
444
482
  yield dir_path
445
483
 
446
484
 
447
485
  @pytest.fixture
448
486
  def custom_model_truss_dir_with_bundled_packages(tmp_path):
449
487
  truss_dir_path: Path = tmp_path / "custom_model_truss_dir_with_bundled_packages"
450
- handle = init(str(truss_dir_path))
451
- handle.spec.model_class_filepath.write_text(CUSTOM_MODEL_CODE_USING_BUNDLED_PACKAGE)
488
+ th = TrussHandle(init_directory(truss_dir_path))
489
+ th.spec.model_class_filepath.write_text(CUSTOM_MODEL_CODE_USING_BUNDLED_PACKAGE)
452
490
  packages_path = truss_dir_path / DEFAULT_BUNDLED_PACKAGES_DIR / "test_package"
453
491
  packages_path.mkdir(parents=True)
454
492
  with (packages_path / "test.py").open("w") as file:
@@ -459,11 +497,9 @@ def custom_model_truss_dir_with_bundled_packages(tmp_path):
459
497
  @pytest.fixture
460
498
  def custom_model_truss_dir_with_pre_and_post_str_example(tmp_path):
461
499
  dir_path = tmp_path / "custom_truss_with_pre_post_str_example"
462
- handle = init(str(dir_path))
463
- handle.spec.model_class_filepath.write_text(
464
- CUSTOM_MODEL_CODE_WITH_PRE_AND_POST_PROCESS
465
- )
466
- handle.update_examples(
500
+ th = TrussHandle(init_directory(dir_path))
501
+ th.spec.model_class_filepath.write_text(CUSTOM_MODEL_CODE_WITH_PRE_AND_POST_PROCESS)
502
+ th.update_examples(
467
503
  [
468
504
  Example(
469
505
  "example1",
@@ -471,8 +507,8 @@ def custom_model_truss_dir_with_pre_and_post_str_example(tmp_path):
471
507
  "inputs": [
472
508
  {
473
509
  "image_url": "https://github.com/pytorch/hub/raw/master/images/dog.jpg"
474
- },
475
- ],
510
+ }
511
+ ]
476
512
  },
477
513
  )
478
514
  ]
@@ -483,57 +519,57 @@ def custom_model_truss_dir_with_pre_and_post_str_example(tmp_path):
483
519
  @pytest.fixture
484
520
  def custom_model_truss_dir_with_pre_and_post_description(tmp_path):
485
521
  dir_path = tmp_path / "custom_truss_with_pre_post"
486
- handle = init(str(dir_path))
487
- handle.spec.model_class_filepath.write_text(
488
- CUSTOM_MODEL_CODE_WITH_PRE_AND_POST_PROCESS
489
- )
490
- handle.update_description("This model adds 3 to all inputs")
522
+ th = TrussHandle(init_directory(dir_path))
523
+ th.spec.model_class_filepath.write_text(CUSTOM_MODEL_CODE_WITH_PRE_AND_POST_PROCESS)
524
+ th.update_description("This model adds 3 to all inputs")
491
525
  yield dir_path
492
526
 
493
527
 
494
528
  @pytest.fixture
495
529
  def custom_model_truss_dir_for_gpu(tmp_path):
496
530
  dir_path = tmp_path / "custom_truss"
497
- handle = init(str(dir_path))
498
- handle.enable_gpu()
499
- handle.spec.model_class_filepath.write_text(CUSTOM_MODEL_CODE_FOR_GPU_TESTING)
531
+ th = TrussHandle(init_directory(dir_path))
532
+ th.enable_gpu()
533
+ th.spec.model_class_filepath.write_text(CUSTOM_MODEL_CODE_FOR_GPU_TESTING)
500
534
  yield dir_path
501
535
 
502
536
 
503
537
  @pytest.fixture
504
538
  def custom_model_truss_dir_for_secrets(tmp_path):
505
539
  dir_path = tmp_path / "custom_truss"
506
- handle = init(str(dir_path))
507
- handle.add_secret("secret_name", "default_secret_value")
508
- handle.spec.model_class_filepath.write_text(CUSTOM_MODEL_CODE_FOR_SECRETS_TESTING)
540
+ th = TrussHandle(init_directory(dir_path))
541
+ th.add_secret("secret_name", "default_secret_value")
542
+ th.spec.model_class_filepath.write_text(CUSTOM_MODEL_CODE_FOR_SECRETS_TESTING)
509
543
  yield dir_path
510
544
 
511
545
 
512
546
  @pytest.fixture
513
- def tmp_truss_dir(tmp_path, monkeypatch):
514
- ROOT = Path(__file__).parent.parent.parent.resolve()
515
- tmp_dir = _copy_truss_dir_to_tmp(
516
- ROOT / "truss" / "test_data" / "test_truss", tmp_path
517
- )
518
- monkeypatch.setenv("APP_HOME", str(tmp_dir))
519
- return tmp_dir
547
+ def truss_container_fs(tmp_path, test_data_path):
548
+ return _build_truss_fs(test_data_path / "test_truss", tmp_path)
549
+
550
+
551
+ @pytest.fixture
552
+ def trt_llm_truss_container_fs(tmp_path, test_data_path):
553
+ return _build_truss_fs(test_data_path / "test_trt_llm_truss", tmp_path)
554
+
555
+
556
+ @pytest.fixture
557
+ def open_ai_container_fs(tmp_path, test_data_path):
558
+ return _build_truss_fs(test_data_path / "test_openai", tmp_path)
520
559
 
521
560
 
522
561
  @pytest.fixture
523
- def tmp_truss_control_dir(tmp_path, monkeypatch):
524
- ROOT = Path(__file__).parent.parent.parent.resolve()
525
- test_truss_dir = ROOT / "truss" / "test_data" / "test_truss"
562
+ def truss_control_container_fs(tmp_path, test_data_path):
563
+ test_truss_dir = test_data_path / "test_truss"
526
564
  control_truss_dir = tmp_path / "control_truss"
527
565
  shutil.copytree(str(test_truss_dir), str(control_truss_dir))
528
566
  with _modify_yaml(control_truss_dir / "config.yaml") as content:
529
567
  content["live_reload"] = True
530
- tmp_dir = _copy_truss_dir_to_tmp(control_truss_dir, tmp_path)
531
- monkeypatch.setenv("APP_HOME", str(tmp_dir))
532
- return tmp_dir
568
+ return _build_truss_fs(control_truss_dir, tmp_path)
533
569
 
534
570
 
535
571
  @pytest.fixture
536
- def patch_ping_test_server():
572
+ def patch_ping_test_server(test_data_path):
537
573
  port = "5001"
538
574
  proc = subprocess.Popen(
539
575
  [
@@ -548,7 +584,7 @@ def patch_ping_test_server():
548
584
  "--host",
549
585
  "0.0.0.0",
550
586
  ],
551
- cwd=str(Path(__file__).parent.parent / "test_data" / "patch_ping_test_server"),
587
+ cwd=str(test_data_path / "patch_ping_test_server"),
552
588
  )
553
589
  base_url = f"http://127.0.0.1:{port}"
554
590
  retry_secs = 10
@@ -582,16 +618,13 @@ def _pytorch_model_from_content(
582
618
 
583
619
 
584
620
  def _custom_model_from_code(
585
- where_dir: Path,
586
- truss_name: str,
587
- model_code: str,
588
- handle_ops: Callable = None,
621
+ where_dir: Path, truss_name: str, model_code: str, handle_ops: callable = None
589
622
  ) -> Path:
590
623
  dir_path = where_dir / truss_name
591
- handle = init(str(dir_path))
624
+ th = TrussHandle(init_directory(dir_path))
592
625
  if handle_ops is not None:
593
- handle_ops(handle)
594
- handle.spec.model_class_filepath.write_text(model_code)
626
+ handle_ops(th)
627
+ th.spec.model_class_filepath.write_text(model_code)
595
628
  return dir_path
596
629
 
597
630
 
@@ -604,10 +637,7 @@ def custom_model_data_dir(tmp_path: Path):
604
637
  handle.add_data(str(data_file.resolve()))
605
638
 
606
639
  yield _custom_model_from_code(
607
- tmp_path,
608
- "data_dir_truss",
609
- CUSTOM_MODEL_CODE,
610
- handle_ops=add_data,
640
+ tmp_path, "data_dir_truss", CUSTOM_MODEL_CODE, handle_ops=add_data
611
641
  )
612
642
 
613
643
 
@@ -631,6 +661,18 @@ class Helpers:
631
661
  finally:
632
662
  sys.path.pop()
633
663
 
664
+ @staticmethod
665
+ @contextlib.contextmanager
666
+ def sys_paths(*paths: Path):
667
+ num_paths = len(paths)
668
+ try:
669
+ for path in paths:
670
+ sys.path.append(str(path))
671
+ yield
672
+ finally:
673
+ for _ in range(num_paths):
674
+ sys.path.pop()
675
+
634
676
  @staticmethod
635
677
  @contextlib.contextmanager
636
678
  def env_var(var: str, value: str):
@@ -648,9 +690,18 @@ def helpers():
648
690
  return Helpers()
649
691
 
650
692
 
651
- def _copy_truss_dir_to_tmp(truss_dir: Path, tmp_path: Path) -> Path:
652
- copy_tree_path(truss_dir, tmp_path)
653
- return tmp_path
693
+ def _build_truss_fs(truss_dir: Path, tmp_path: Path) -> Path:
694
+ truss_fs = tmp_path / "truss_fs"
695
+ truss_fs.mkdir()
696
+ truss_build_dir = tmp_path / "truss_fs_build"
697
+ truss_build_dir.mkdir()
698
+ image_builder = ServingImageBuilderContext.run(truss_dir)
699
+ image_builder.prepare_image_build_dir(truss_build_dir)
700
+ dockerfile_path = truss_build_dir / "Dockerfile"
701
+
702
+ docker_build_emulator = DockerBuildEmulator(dockerfile_path, truss_build_dir)
703
+ docker_build_emulator.run(truss_fs)
704
+ return truss_fs
654
705
 
655
706
 
656
707
  @contextlib.contextmanager
@@ -660,3 +711,160 @@ def _modify_yaml(yaml_path: Path):
660
711
  yield content
661
712
  with yaml_path.open("w") as yaml_file:
662
713
  yaml.dump(content, yaml_file)
714
+
715
+
716
+ @pytest.fixture
717
+ def default_config() -> Dict[str, Any]:
718
+ return {
719
+ "build_commands": [],
720
+ "environment_variables": {},
721
+ "external_package_dirs": [],
722
+ "model_metadata": {},
723
+ "model_name": None,
724
+ "python_version": "py39",
725
+ "requirements": [],
726
+ "resources": {
727
+ "accelerator": None,
728
+ "cpu": "1",
729
+ "memory": "2Gi",
730
+ "use_gpu": False,
731
+ },
732
+ "secrets": {},
733
+ "system_packages": [],
734
+ }
735
+
736
+
737
+ @pytest.fixture
738
+ def trtllm_config(default_config) -> Dict[str, Any]:
739
+ trtllm_config = default_config
740
+ trtllm_config["resources"] = {
741
+ "accelerator": Accelerator.L4.value,
742
+ "cpu": "1",
743
+ "memory": "24Gi",
744
+ "use_gpu": True,
745
+ "node_count": 1,
746
+ }
747
+ trtllm_config["trt_llm"] = {
748
+ "build": {
749
+ "base_model": "llama",
750
+ "max_seq_len": 2048,
751
+ "max_batch_size": 512,
752
+ "checkpoint_repository": {"source": "HF", "repo": "meta/llama4-500B"},
753
+ "gather_all_token_logits": False,
754
+ },
755
+ "runtime": {},
756
+ }
757
+ return trtllm_config
758
+
759
+
760
+ @pytest.fixture
761
+ def deprecated_trtllm_config(default_config) -> Dict[str, Any]:
762
+ trtllm_config = default_config
763
+ trtllm_config["resources"] = {
764
+ "accelerator": Accelerator.L4.value,
765
+ "cpu": "1",
766
+ "memory": "24Gi",
767
+ "use_gpu": True,
768
+ }
769
+ trtllm_config["trt_llm"] = {
770
+ "build": {
771
+ "base_model": "llama",
772
+ "max_seq_len": 2048,
773
+ "max_batch_size": 512,
774
+ # start deprecated fields
775
+ "kv_cache_free_gpu_mem_fraction": 0.1,
776
+ "enable_chunked_context": True,
777
+ "batch_scheduler_policy": TrussTRTLLMBatchSchedulerPolicy.MAX_UTILIZATION.value,
778
+ "request_default_max_tokens": 10,
779
+ "total_token_limit": 50,
780
+ # end deprecated fields
781
+ "checkpoint_repository": {"source": "HF", "repo": "meta/llama4-500B"},
782
+ "gather_all_token_logits": False,
783
+ }
784
+ }
785
+ return trtllm_config
786
+
787
+
788
+ @pytest.fixture
789
+ def deprecated_trtllm_config_with_runtime_existing(default_config) -> Dict[str, Any]:
790
+ trtllm_config = default_config
791
+ trtllm_config["resources"] = {
792
+ "accelerator": Accelerator.L4.value,
793
+ "cpu": "1",
794
+ "memory": "24Gi",
795
+ "use_gpu": True,
796
+ }
797
+ trtllm_config["trt_llm"] = {
798
+ "build": {
799
+ "base_model": "llama",
800
+ "max_seq_len": 2048,
801
+ "max_batch_size": 512,
802
+ # start deprecated fields
803
+ "kv_cache_free_gpu_mem_fraction": 0.1,
804
+ "enable_chunked_context": True,
805
+ "batch_scheduler_policy": TrussTRTLLMBatchSchedulerPolicy.MAX_UTILIZATION.value,
806
+ "request_default_max_tokens": 10,
807
+ "total_token_limit": 50,
808
+ # end deprecated fields
809
+ "checkpoint_repository": {"source": "HF", "repo": "meta/llama4-500B"},
810
+ "gather_all_token_logits": False,
811
+ },
812
+ "runtime": {"total_token_limit": 100},
813
+ }
814
+ return trtllm_config
815
+
816
+
817
+ @pytest.fixture
818
+ def trtllm_spec_dec_config_full(trtllm_config) -> Dict[str, Any]:
819
+ spec_dec_config = copy.deepcopy(trtllm_config)
820
+ spec_dec_config["trt_llm"] = {
821
+ "build": {
822
+ "base_model": "llama",
823
+ "max_seq_len": 2048,
824
+ "max_batch_size": 512,
825
+ "checkpoint_repository": {"source": "HF", "repo": "meta/llama4-500B"},
826
+ "plugin_configuration": {
827
+ "paged_kv_cache": True,
828
+ "gemm_plugin": "auto",
829
+ "use_paged_context_fmha": True,
830
+ },
831
+ "speculator": {
832
+ "speculative_decoding_mode": TrussSpecDecMode.DRAFT_EXTERNAL.value,
833
+ "num_draft_tokens": 4,
834
+ "build": {
835
+ "base_model": "llama",
836
+ "max_seq_len": 2048,
837
+ "max_batch_size": 512,
838
+ "checkpoint_repository": {
839
+ "source": "HF",
840
+ "repo": "meta/llama4-500B",
841
+ },
842
+ },
843
+ },
844
+ }
845
+ }
846
+ return spec_dec_config
847
+
848
+
849
+ @pytest.fixture
850
+ def trtllm_spec_dec_config(trtllm_config) -> Dict[str, Any]:
851
+ spec_dec_config = copy.deepcopy(trtllm_config)
852
+ spec_dec_config["trt_llm"] = {
853
+ "build": {
854
+ "base_model": "llama",
855
+ "max_seq_len": 2048,
856
+ "max_batch_size": 512,
857
+ "checkpoint_repository": {"source": "HF", "repo": "meta/llama4-500B"},
858
+ "plugin_configuration": {
859
+ "paged_kv_cache": True,
860
+ "gemm_plugin": "auto",
861
+ "use_paged_context_fmha": True,
862
+ },
863
+ "speculator": {
864
+ "speculative_decoding_mode": TrussSpecDecMode.DRAFT_EXTERNAL.value,
865
+ "num_draft_tokens": 4,
866
+ "checkpoint_repository": {"source": "HF", "repo": "meta/llama4-500B"},
867
+ },
868
+ }
869
+ }
870
+ return spec_dec_config