sagemaker-core 2.24.0__tar.gz → 2.26.0__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.
Files changed (385) hide show
  1. {sagemaker_core-2.24.0/src/sagemaker_core.egg-info → sagemaker_core-2.26.0}/PKG-INFO +1 -1
  2. sagemaker_core-2.26.0/VERSION +1 -0
  3. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/config_schema.py +25 -1
  4. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/helper/iam_role_resolver.py +123 -19
  5. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/djl-neuronx.json +8 -0
  6. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uris.py +1 -1
  7. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/models.py +44 -3
  8. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/region_config.json +8 -0
  9. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/local/data.py +6 -2
  10. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/local/entities.py +19 -5
  11. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/local/image.py +8 -12
  12. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/local/local_session.py +41 -1
  13. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_monitor/clarify_model_monitoring.py +4 -5
  14. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_monitor/model_monitoring.py +20 -4
  15. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_registry.py +25 -4
  16. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/processing.py +67 -19
  17. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/resources.py +477 -13
  18. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/shapes/shapes.py +623 -81
  19. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/spark/processing.py +27 -9
  20. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/tools/resources_codegen.py +8 -0
  21. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utils/code_injection/shape_dag.py +504 -16
  22. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/workflow/job_config_document.py +2 -3
  23. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/workflow/pipeline_capture.py +6 -3
  24. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0/src/sagemaker_core.egg-info}/PKG-INFO +1 -1
  25. sagemaker_core-2.24.0/VERSION +0 -1
  26. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/LICENSE +0 -0
  27. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/MANIFEST.in +0 -0
  28. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/README.rst +0 -0
  29. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/pyproject.toml +0 -0
  30. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/setup.cfg +0 -0
  31. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/__init__.py +0 -0
  32. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/__init__.py +0 -0
  33. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/_studio.py +0 -0
  34. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/_version.py +0 -0
  35. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/accept_types.py +0 -0
  36. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/analytics.py +0 -0
  37. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/apiutils/__init__.py +0 -0
  38. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/apiutils/_base_types.py +0 -0
  39. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/apiutils/_boto_functions.py +0 -0
  40. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/apiutils/_utils.py +0 -0
  41. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/base_deserializers.py +0 -0
  42. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/base_serializers.py +0 -0
  43. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/clarify/__init__.py +0 -0
  44. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/collection.py +0 -0
  45. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/common_utils.py +0 -0
  46. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/compute_resource_requirements/__init__.py +0 -0
  47. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/compute_resource_requirements/resource_requirements.py +0 -0
  48. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/config/__init__.py +0 -0
  49. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/config/config.py +0 -0
  50. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/config/config_manager.py +0 -0
  51. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/config/config_schema.py +0 -0
  52. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/config/config_utils.py +0 -0
  53. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/constants.py +0 -0
  54. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/content_types.py +0 -0
  55. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/debugger/__init__.py +0 -0
  56. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/debugger/debugger.py +0 -0
  57. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/debugger/framework_profile.py +0 -0
  58. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/debugger/metrics_config.py +0 -0
  59. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/debugger/profiler.py +0 -0
  60. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/debugger/profiler_config.py +0 -0
  61. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/debugger/profiler_constants.py +0 -0
  62. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/debugger/utils.py +0 -0
  63. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/deprecations.py +0 -0
  64. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/deserializers/__init__.py +0 -0
  65. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/deserializers/base.py +0 -0
  66. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/deserializers/implementations.py +0 -0
  67. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/drift_check_baselines.py +0 -0
  68. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/enums.py +0 -0
  69. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/environment_variables.py +0 -0
  70. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/exceptions.py +0 -0
  71. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/experiments/__init__.py +0 -0
  72. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/experiments/_api_types.py +0 -0
  73. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/experiments/_environment.py +0 -0
  74. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/experiments/_helper.py +0 -0
  75. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/experiments/_metrics.py +0 -0
  76. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/experiments/_run_context.py +0 -0
  77. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/experiments/_utils.py +0 -0
  78. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/experiments/experiment.py +0 -0
  79. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/experiments/run.py +0 -0
  80. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/experiments/trial.py +0 -0
  81. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/experiments/trial_component.py +0 -0
  82. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/explainer/__init__.py +0 -0
  83. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/explainer/clarify_explainer_config.py +0 -0
  84. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/explainer/explainer_config.py +0 -0
  85. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/fw_utils.py +0 -0
  86. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/git_utils.py +0 -0
  87. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/helper/__init__.py +0 -0
  88. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/helper/iam_policies.py +0 -0
  89. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/helper/pipeline_variable.py +0 -0
  90. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/helper/session_helper.py +0 -0
  91. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/hyperparameters.py +0 -0
  92. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_retriever/__init__.py +0 -0
  93. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_retriever/image_retriever.py +0 -0
  94. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_retriever/image_retriever_utils.py +0 -0
  95. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/autogluon.json +0 -0
  96. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/blazingtext.json +0 -0
  97. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/chainer.json +0 -0
  98. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/clarify.json +0 -0
  99. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/coach-mxnet.json +0 -0
  100. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/coach-tensorflow.json +0 -0
  101. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/data-wrangler.json +0 -0
  102. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/debugger.json +0 -0
  103. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/detailed-profiler.json +0 -0
  104. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/djl-deepspeed.json +0 -0
  105. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/djl-fastertransformer.json +0 -0
  106. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/djl-lmi.json +0 -0
  107. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/djl-tensorrtllm.json +0 -0
  108. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/factorization-machines.json +0 -0
  109. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/forecasting-deepar.json +0 -0
  110. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/huggingface-llamacpp.json +0 -0
  111. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/huggingface-llm-neuronx.json +0 -0
  112. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/huggingface-llm.json +0 -0
  113. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/huggingface-neuron.json +0 -0
  114. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/huggingface-neuronx.json +0 -0
  115. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/huggingface-sglang.json +0 -0
  116. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/huggingface-tei-cpu.json +0 -0
  117. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/huggingface-tei.json +0 -0
  118. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/huggingface-training-compiler.json +0 -0
  119. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/huggingface-vllm-neuronx.json +0 -0
  120. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/huggingface-vllm-omni.json +0 -0
  121. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/huggingface-vllm.json +0 -0
  122. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/huggingface.json +0 -0
  123. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/hyperpod-recipes-neuron.json +0 -0
  124. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/image-classification-neo.json +0 -0
  125. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/image-classification.json +0 -0
  126. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/inferentia-mxnet.json +0 -0
  127. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/inferentia-pytorch.json +0 -0
  128. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/inferentia-tensorflow.json +0 -0
  129. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/instance_gpu_info.json +0 -0
  130. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/ipinsights.json +0 -0
  131. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/kmeans.json +0 -0
  132. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/knn.json +0 -0
  133. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/lda.json +0 -0
  134. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/linear-learner.json +0 -0
  135. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/llama-cpp-arm64.json +0 -0
  136. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/llama-cpp.json +0 -0
  137. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/model-monitor.json +0 -0
  138. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/mxnet.json +0 -0
  139. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/neo-mxnet.json +0 -0
  140. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/neo-pytorch.json +0 -0
  141. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/neo-tensorflow.json +0 -0
  142. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/ntm.json +0 -0
  143. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/object-detection.json +0 -0
  144. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/object2vec.json +0 -0
  145. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/pca.json +0 -0
  146. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/pytorch-amzn2023.json +0 -0
  147. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/pytorch-neuron.json +0 -0
  148. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/pytorch-smp.json +0 -0
  149. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/pytorch-training-compiler.json +0 -0
  150. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/pytorch.json +0 -0
  151. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/randomcutforest.json +0 -0
  152. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/ray-pytorch.json +0 -0
  153. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/ray-serve.json +0 -0
  154. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/ray-tensorflow.json +0 -0
  155. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/sagemaker-base-python.json +0 -0
  156. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/sagemaker-distribution.json +0 -0
  157. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/sagemaker-geospatial.json +0 -0
  158. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/sagemaker-inspect-ai.json +0 -0
  159. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/sagemaker-tritonserver.json +0 -0
  160. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/semantic-segmentation.json +0 -0
  161. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/seq2seq.json +0 -0
  162. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/sglang-server.json +0 -0
  163. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/sglang.json +0 -0
  164. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/sklearn.json +0 -0
  165. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/spark.json +0 -0
  166. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/sparkml-serving.json +0 -0
  167. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/stabilityai.json +0 -0
  168. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/tensorflow.json +0 -0
  169. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/vllm-omni.json +0 -0
  170. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/vllm-server.json +0 -0
  171. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/vllm.json +0 -0
  172. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/vw.json +0 -0
  173. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/whisperx.json +0 -0
  174. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/xgboost-neo.json +0 -0
  175. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/image_uri_config/xgboost.json +0 -0
  176. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/inference_config.py +0 -0
  177. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/inference_recommender/__init__.py +0 -0
  178. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/inference_recommender/inference_recommender_mixin.py +0 -0
  179. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/inputs.py +0 -0
  180. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/instance_group.py +0 -0
  181. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/instance_types.py +0 -0
  182. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/instance_types_gpu_info.py +0 -0
  183. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/interactive_apps/__init__.py +0 -0
  184. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/interactive_apps/base_interactive_app.py +0 -0
  185. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/interactive_apps/detail_profiler_app.py +0 -0
  186. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/interactive_apps/tensorboard.py +0 -0
  187. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/iterators.py +0 -0
  188. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/job.py +0 -0
  189. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/__init__.py +0 -0
  190. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/accessors.py +0 -0
  191. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/__init__.py +0 -0
  192. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/environment_variables.py +0 -0
  193. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/hyperparameters.py +0 -0
  194. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/image_uris.py +0 -0
  195. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/incremental_training.py +0 -0
  196. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/instance_types.py +0 -0
  197. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/kwargs.py +0 -0
  198. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/metric_definitions.py +0 -0
  199. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/model_packages.py +0 -0
  200. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/model_uris.py +0 -0
  201. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/payloads.py +0 -0
  202. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/predictors.py +0 -0
  203. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/resource_names.py +0 -0
  204. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/resource_requirements.py +0 -0
  205. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/artifacts/script_uris.py +0 -0
  206. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/cache.py +0 -0
  207. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/configs.py +0 -0
  208. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/constants.py +0 -0
  209. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/deserializers.py +0 -0
  210. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/document.py +0 -0
  211. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/enums.py +0 -0
  212. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/exceptions.py +0 -0
  213. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/factory/__init__.py +0 -0
  214. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/factory/utils.py +0 -0
  215. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/filters.py +0 -0
  216. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/hub/__init__.py +0 -0
  217. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/hub/constants.py +0 -0
  218. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/hub/hub.py +0 -0
  219. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/hub/interfaces.py +0 -0
  220. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/hub/parser_utils.py +0 -0
  221. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/hub/parsers.py +0 -0
  222. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/hub/types.py +0 -0
  223. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/hub/utils.py +0 -0
  224. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/notebook_utils.py +0 -0
  225. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/parameters.py +0 -0
  226. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/payload_utils.py +0 -0
  227. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/search.py +0 -0
  228. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/serializers.py +0 -0
  229. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/session_utils.py +0 -0
  230. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/types.py +0 -0
  231. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/utils.py +0 -0
  232. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/jumpstart/validators.py +0 -0
  233. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/lambda_helper.py +0 -0
  234. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/lineage/__init__.py +0 -0
  235. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/lineage/_api_types.py +0 -0
  236. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/lineage/_utils.py +0 -0
  237. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/lineage/action.py +0 -0
  238. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/lineage/artifact.py +0 -0
  239. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/lineage/association.py +0 -0
  240. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/lineage/context.py +0 -0
  241. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/lineage/lineage_trial_component.py +0 -0
  242. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/lineage/query.py +0 -0
  243. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/lineage/visualizer.py +0 -0
  244. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/local/__init__.py +0 -0
  245. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/local/exceptions.py +0 -0
  246. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/local/utils.py +0 -0
  247. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/logs.py +0 -0
  248. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/metadata_properties.py +0 -0
  249. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/metric_definitions.py +0 -0
  250. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/mlflow/__init__.py +0 -0
  251. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/mlflow/forward_sagemaker_metrics.py +0 -0
  252. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_card/__init__.py +0 -0
  253. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_life_cycle.py +0 -0
  254. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_metrics.py +0 -0
  255. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_monitor/__init__.py +0 -0
  256. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_monitor/cron_expression_generator.py +0 -0
  257. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_monitor/data_capture_config.py +0 -0
  258. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_monitor/data_quality_monitoring_config.py +0 -0
  259. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_monitor/dataset_format.py +0 -0
  260. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_monitor/monitoring_alert.py +0 -0
  261. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_monitor/monitoring_files.py +0 -0
  262. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_monitor/utils.py +0 -0
  263. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/model_uris.py +0 -0
  264. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/__init__.py +0 -0
  265. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/configs.py +0 -0
  266. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/constants.py +0 -0
  267. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/distributed.py +0 -0
  268. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/local_core/__init__.py +0 -0
  269. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/local_core/local_container.py +0 -0
  270. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/templates.py +0 -0
  271. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/train/__init__.py +0 -0
  272. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/train/container_drivers/__init__.py +0 -0
  273. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/train/container_drivers/common/__init__.py +0 -0
  274. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/train/container_drivers/common/utils.py +0 -0
  275. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/train/container_drivers/distributed_drivers/__init__.py +0 -0
  276. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/train/container_drivers/distributed_drivers/basic_script_driver.py +0 -0
  277. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/train/container_drivers/distributed_drivers/mpi_driver.py +0 -0
  278. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/train/container_drivers/distributed_drivers/mpi_utils.py +0 -0
  279. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/train/container_drivers/distributed_drivers/torchrun_driver.py +0 -0
  280. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/train/container_drivers/scripts/__init__.py +0 -0
  281. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/train/container_drivers/scripts/environment.py +0 -0
  282. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/train/sm_recipes/__init__.py +0 -0
  283. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/train/sm_recipes/utils.py +0 -0
  284. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/types.py +0 -0
  285. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/modules/utils.py +0 -0
  286. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/network.py +0 -0
  287. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/parameter.py +0 -0
  288. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/partner_app/__init__.py +0 -0
  289. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/partner_app/auth_provider.py +0 -0
  290. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/partner_app/auth_utils.py +0 -0
  291. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/payloads.py +0 -0
  292. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/__init__.py +0 -0
  293. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/checkpoint_location.py +0 -0
  294. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/client.py +0 -0
  295. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/core/__init__.py +0 -0
  296. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/core/_custom_dispatch_table.py +0 -0
  297. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/core/pipeline_variables.py +0 -0
  298. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/core/serialization.py +0 -0
  299. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/core/stored_function.py +0 -0
  300. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/custom_file_filter.py +0 -0
  301. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/errors.py +0 -0
  302. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/invoke_function.py +0 -0
  303. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/job.py +0 -0
  304. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/logging_config.py +0 -0
  305. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/runtime_environment/__init__.py +0 -0
  306. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/runtime_environment/bootstrap_runtime_environment.py +0 -0
  307. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/runtime_environment/mpi_utils_remote.py +0 -0
  308. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/runtime_environment/runtime_environment_manager.py +0 -0
  309. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/runtime_environment/spark_app.py +0 -0
  310. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/remote_function/spark_config.py +0 -0
  311. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/resource_requirements.py +0 -0
  312. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/s3/__init__.py +0 -0
  313. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/s3/client.py +0 -0
  314. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/s3/utils.py +0 -0
  315. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/script_uris.py +0 -0
  316. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/serializers/__init__.py +0 -0
  317. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/serializers/base.py +0 -0
  318. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/serializers/implementations.py +0 -0
  319. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/serializers/utils.py +0 -0
  320. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/serverless_inference_config.py +0 -0
  321. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/session_settings.py +0 -0
  322. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/shapes/__init__.py +0 -0
  323. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/shapes/model_card_shapes.py +0 -0
  324. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/spark/__init__.py +0 -0
  325. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/spark/defaults.py +0 -0
  326. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/telemetry/__init__.py +0 -0
  327. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/telemetry/attribution.py +0 -0
  328. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/telemetry/constants.py +0 -0
  329. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/telemetry/resource_creation.py +0 -0
  330. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/telemetry/telemetry_logging.py +0 -0
  331. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/token_generator/__init__.py +0 -0
  332. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/token_generator/token_generator.py +0 -0
  333. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/tools/__init__.py +0 -0
  334. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/tools/codegen.py +0 -0
  335. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/tools/constants.py +0 -0
  336. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/tools/data_extractor.py +0 -0
  337. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/tools/method.py +0 -0
  338. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/tools/model_card/generate_model_card_from_schema.py +0 -0
  339. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/tools/resources_extractor.py +0 -0
  340. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/tools/shapes_codegen.py +0 -0
  341. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/tools/shapes_extractor.py +0 -0
  342. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/tools/templates.py +0 -0
  343. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/training/__init__.py +0 -0
  344. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/training/configs.py +0 -0
  345. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/training/constants.py +0 -0
  346. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/training/utils.py +0 -0
  347. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/training_compiler/__init__.py +0 -0
  348. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/training_compiler/config.py +0 -0
  349. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/training_compiler_config.py +0 -0
  350. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/transformer.py +0 -0
  351. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/user_agent.py +0 -0
  352. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utilities/__init__.py +0 -0
  353. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utilities/cache.py +0 -0
  354. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utilities/search_expression.py +0 -0
  355. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utils/__init__.py +0 -0
  356. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utils/code_injection/__init__.py +0 -0
  357. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utils/code_injection/base.py +0 -0
  358. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utils/code_injection/codec.py +0 -0
  359. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utils/code_injection/constants.py +0 -0
  360. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utils/exceptions.py +0 -0
  361. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utils/install_requirements.py +0 -0
  362. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utils/intelligent_defaults_helper.py +0 -0
  363. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utils/logs.py +0 -0
  364. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utils/user_agent.py +0 -0
  365. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/utils/utils.py +0 -0
  366. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/workflow/__init__.py +0 -0
  367. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/workflow/conditions.py +0 -0
  368. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/workflow/entities.py +0 -0
  369. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/workflow/execution_variables.py +0 -0
  370. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/workflow/functions.py +0 -0
  371. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/workflow/parameters.py +0 -0
  372. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/workflow/pipeline_context.py +0 -0
  373. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/workflow/pipeline_definition_config.py +0 -0
  374. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/workflow/properties.py +0 -0
  375. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/workflow/step_outputs.py +0 -0
  376. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/core/workflow/utilities.py +0 -0
  377. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/lineage/__init__.py +0 -0
  378. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/lineage/action.py +0 -0
  379. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/lineage/artifact.py +0 -0
  380. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/lineage/context.py +0 -0
  381. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker/lineage/lineage_trial_component.py +0 -0
  382. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker_core.egg-info/SOURCES.txt +0 -0
  383. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker_core.egg-info/dependency_links.txt +0 -0
  384. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker_core.egg-info/requires.txt +0 -0
  385. {sagemaker_core-2.24.0 → sagemaker_core-2.26.0}/src/sagemaker_core.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sagemaker-core
3
- Version: 2.24.0
3
+ Version: 2.26.0
4
4
  Summary: An python package for sagemaker core functionalities
5
5
  Author-email: AWS <sagemaker-interests@amazon.com>
6
6
  Project-URL: Homepage, https://github.com/aws/sagemaker-python-sdk
@@ -0,0 +1 @@
1
+ 2.26.0
@@ -501,7 +501,10 @@ SAGEMAKER_PYTHON_SDK_CONFIG_SCHEMA = {
501
501
  },
502
502
  "MlflowApp": {
503
503
  "type": "object",
504
- "properties": {"role_arn": {"type": "string"}},
504
+ "properties": {
505
+ "role_arn": {"type": "string"},
506
+ "kms_key_id": {"type": "string"},
507
+ },
505
508
  },
506
509
  "MlflowTrackingServer": {
507
510
  "type": "object",
@@ -873,6 +876,27 @@ SAGEMAKER_PYTHON_SDK_CONFIG_SCHEMA = {
873
876
  "profiler_config": {"s3_output_path": {"type": "string"}},
874
877
  },
875
878
  },
879
+ "TrainingSession": {
880
+ "type": "object",
881
+ "properties": {
882
+ "training_session_detail": {
883
+ "vpc_config": {
884
+ "security_group_ids": {
885
+ "type": "array",
886
+ "items": {"type": "string"},
887
+ },
888
+ "subnets": {
889
+ "type": "array",
890
+ "items": {"type": "string"},
891
+ },
892
+ },
893
+ "role_arn": {"type": "string"},
894
+ "output_config": {
895
+ "s3_location": {"kms_key_arn": {"type": "string"}}
896
+ },
897
+ }
898
+ },
899
+ },
876
900
  "TransformJob": {
877
901
  "type": "object",
878
902
  "properties": {
@@ -16,6 +16,7 @@ from __future__ import absolute_import
16
16
 
17
17
  import json
18
18
  import logging
19
+ import os
19
20
  import time
20
21
  from typing import List, Optional, Set, Tuple, Union
21
22
  from urllib.parse import unquote
@@ -369,13 +370,47 @@ def _resolve_config_default_role(role_type: str, sagemaker_session=None) -> Opti
369
370
  # ---------------------------------------------------------------------------
370
371
  # Read-only permission / trust validation
371
372
  # ---------------------------------------------------------------------------
372
- def _simulate_denied_actions(iam_client, role_arn: str, actions: List[str]) -> List[str]:
373
- """Return the subset of ``actions`` that ``role_arn`` is NOT allowed to perform.
373
+ def _is_unverifiable_denial(result: dict) -> bool:
374
+ """Return True if an evaluation result's non-allowed decision is unverifiable.
375
+
376
+ Because iam:SimulatePrincipalPolicy does not evaluate condition-based SCPs or
377
+ condition-based permissions boundaries, an `implicitDeny` caused by (or
378
+ masked by) `AllowedByOrganizations == false` or
379
+ `AllowedByPermissionsBoundary == false` cannot be definitively verified by
380
+ the client-side policy simulator.
381
+ """
382
+ if result.get("EvalDecision") == "explicitDeny":
383
+ return False
384
+ org_detail = result.get("OrganizationsDecisionDetail", {})
385
+ org_allowed = org_detail.get("AllowedByOrganizations") if isinstance(org_detail, dict) else None
386
+ pb_detail = result.get("PermissionsBoundaryDecisionDetail", {})
387
+ pb_allowed = (
388
+ pb_detail.get("AllowedByPermissionsBoundary") if isinstance(pb_detail, dict) else None
389
+ )
390
+
391
+ # Handle boolean False, string "false", "False", etc.
392
+ if org_allowed in (False, "false", "False") or pb_allowed in (False, "false", "False"):
393
+ return True
394
+ return False
395
+
396
+
397
+ def _simulate_denied_actions(
398
+ iam_client, role_arn: str, actions: List[str]
399
+ ) -> Tuple[List[str], List[str]]:
400
+ """Return lists of (denied_actions, unverifiable_actions) for ``role_arn``.
374
401
 
375
402
  Wraps the paginated ``iam:SimulatePrincipalPolicy`` call so both the role-
376
403
  validation path and the HyperPod caller-side check share one implementation.
377
- An empty list means every action is allowed. The pagination matters: a
378
- truncated first page must not produce a false "all allowed" verdict.
404
+ The pagination matters: a truncated first page must not produce a false
405
+ "all allowed" verdict.
406
+
407
+ Returns:
408
+ (denied_actions, unverifiable_actions):
409
+ denied_actions: actions definitively denied (explicitDeny, or
410
+ implicitDeny without org/permissions-boundary conditions).
411
+ unverifiable_actions: actions returning implicitDeny with
412
+ AllowedByOrganizations=False or AllowedByPermissionsBoundary=False,
413
+ which the simulator cannot evaluate due to conditions.
379
414
 
380
415
  Raises ClientError on failures the caller must interpret (e.g. AccessDenied
381
416
  when the principal can't self-simulate, NoSuchEntity when the role is gone).
@@ -385,11 +420,16 @@ def _simulate_denied_actions(iam_client, role_arn: str, actions: List[str]) -> L
385
420
  for page in paginator.paginate(PolicySourceArn=role_arn, ActionNames=actions):
386
421
  evaluation_results.extend(page.get("EvaluationResults", []))
387
422
 
388
- return [
389
- result["EvalActionName"]
390
- for result in evaluation_results
391
- if result["EvalDecision"] != "allowed"
392
- ]
423
+ denied = []
424
+ unverifiable = []
425
+ for result in evaluation_results:
426
+ if result.get("EvalDecision") != "allowed":
427
+ action_name = result["EvalActionName"]
428
+ if _is_unverifiable_denial(result):
429
+ unverifiable.append(action_name)
430
+ else:
431
+ denied.append(action_name)
432
+ return denied, unverifiable
393
433
 
394
434
 
395
435
  def _evaluate_permissions(
@@ -405,14 +445,15 @@ def _evaluate_permissions(
405
445
  verdict True — all gated actions are allowed (denied_actions empty).
406
446
  verdict False — at least one gated action is denied (denied_actions lists them).
407
447
  verdict None — could not be determined, e.g. the caller lacks
408
- iam:SimulatePrincipalPolicy (denied_actions empty).
448
+ iam:SimulatePrincipalPolicy or conditional SCPs prevent
449
+ evaluation (denied_actions empty).
409
450
  """
410
451
  required_actions = _get_smoke_test_actions(role_type)
411
452
  if not required_actions:
412
453
  return True, []
413
454
 
414
455
  try:
415
- denied = _simulate_denied_actions(iam_client, role_arn, required_actions)
456
+ denied, unverifiable = _simulate_denied_actions(iam_client, role_arn, required_actions)
416
457
  if denied:
417
458
  logger.info(
418
459
  "Role '%s' is missing permissions for: %s",
@@ -420,6 +461,16 @@ def _evaluate_permissions(
420
461
  ", ".join(denied[:5]) + ("..." if len(denied) > 5 else ""),
421
462
  )
422
463
  return False, denied
464
+ if unverifiable:
465
+ logger.info(
466
+ "Cannot definitively verify permissions for role '%s' due to "
467
+ "Organizations SCPs or permissions boundaries (%s returned implicitDeny "
468
+ "with AllowedByOrganizations/AllowedByPermissionsBoundary=false); "
469
+ "permission verdict unknown.",
470
+ role_arn,
471
+ ", ".join(unverifiable[:5]) + ("..." if len(unverifiable) > 5 else ""),
472
+ )
473
+ return None, []
423
474
  return True, []
424
475
 
425
476
  except ClientError as e:
@@ -580,9 +631,12 @@ def _build_validation_error_message(
580
631
 
581
632
 
582
633
  def resolve_and_validate_role(
583
- provided_role: Optional[str],
584
- role_type: str,
634
+ provided_role: Optional[str] = None,
635
+ role_type: str = "training",
585
636
  sagemaker_session=None,
637
+ validate_role: bool = True,
638
+ *,
639
+ role_arn: Optional[str] = None,
586
640
  ) -> str:
587
641
  """Resolve the role to use and validate it (read-only; does not mutate IAM).
588
642
 
@@ -593,17 +647,21 @@ def resolve_and_validate_role(
593
647
  3. Otherwise → resolve the caller's own identity role.
594
648
 
595
649
  The resolved role is then VALIDATED (read-only, via iam:SimulatePrincipalPolicy
596
- + trust inspection):
650
+ + trust inspection) unless ``validate_role=False`` or environment variable
651
+ ``SAGEMAKER_VALIDATE_ROLE=false`` is set:
597
652
  * permissions allowed AND trusted → return the ARN.
598
653
  * a required permission is definitively denied → raise RoleValidationError.
599
654
  * the trust policy definitively excludes the service → raise RoleValidationError.
600
655
  * permissions cannot be verified (caller lacks iam:SimulatePrincipalPolicy,
601
- the common Studio/notebook case) → return the ARN with a WARNING.
656
+ or conditional SCPs/permissions boundaries prevent evaluation) → return
657
+ the ARN with a WARNING.
602
658
 
603
659
  Args:
604
660
  provided_role: User-supplied role name or ARN. If set, used directly.
605
661
  role_type: One of ROLE_TYPES.
606
662
  sagemaker_session: SageMaker session (used to get the boto session).
663
+ validate_role: If False, skips client-side permission/trust validation.
664
+ role_arn: Keyword alias for ``provided_role``.
607
665
 
608
666
  Returns:
609
667
  IAM role ARN.
@@ -616,6 +674,7 @@ def resolve_and_validate_role(
616
674
  if role_type not in ROLE_TYPES:
617
675
  raise ValueError(f"Invalid role_type '{role_type}'. Must be one of: {ROLE_TYPES}")
618
676
 
677
+ provided_role = provided_role or role_arn
619
678
  boto_session = _get_boto_session(sagemaker_session)
620
679
  iam_client = boto_session.client("iam")
621
680
 
@@ -640,6 +699,14 @@ def resolve_and_validate_role(
640
699
  if not role_arn:
641
700
  raise RoleValidationError(_build_validation_error_message(None, role_type))
642
701
 
702
+ if not validate_role or os.getenv("SAGEMAKER_VALIDATE_ROLE", "true").lower() in (
703
+ "false",
704
+ "0",
705
+ "no",
706
+ ):
707
+ logger.info("Skipping IAM role validation for '%s' (%s).", role_arn, role_type)
708
+ return role_arn
709
+
643
710
  # Permission check (definitive denial blocks; unverifiable warns).
644
711
  verdict, denied = _evaluate_permissions(iam_client, role_arn, role_type)
645
712
  if verdict is False:
@@ -657,7 +724,8 @@ def resolve_and_validate_role(
657
724
  if verdict is None:
658
725
  logger.warning(
659
726
  "Could not verify permissions for role '%s' (caller lacks "
660
- "iam:SimulatePrincipalPolicy). Proceeding with it. If the operation "
727
+ "iam:SimulatePrincipalPolicy or conditional SCPs/permissions boundaries "
728
+ "prevent evaluation). Proceeding with it. If the operation "
661
729
  "later fails with an access-denied error, ensure the role has the "
662
730
  "required permissions for '%s' (see "
663
731
  "IamRoleResolver().get_required_actions('%s')) or create a dedicated "
@@ -716,7 +784,7 @@ def verify_hyperpod_connect_permissions(
716
784
  return None
717
785
 
718
786
  try:
719
- denied = _simulate_denied_actions(
787
+ denied, unverifiable = _simulate_denied_actions(
720
788
  iam_client, caller_role_arn, list(HYPERPOD_CLI_CONNECT_ACTIONS)
721
789
  )
722
790
  except ClientError as e:
@@ -744,6 +812,15 @@ def verify_hyperpod_connect_permissions(
744
812
  )
745
813
  return False
746
814
 
815
+ if unverifiable:
816
+ logger.info(
817
+ "Cannot definitively verify HyperPod connect permissions for '%s' due to "
818
+ "Organizations SCPs or permissions boundaries; the HyperPod CLI will "
819
+ "validate access at submit time.",
820
+ caller_role_arn,
821
+ )
822
+ return None
823
+
747
824
  logger.info("Caller '%s' has the HyperPod CLI connect permissions.", caller_role_arn)
748
825
  return True
749
826
 
@@ -765,7 +842,9 @@ def verify_evaluation_caller_permissions(
765
842
 
766
843
  Returns:
767
844
  True — all evaluation caller actions are allowed.
768
- None — could not be determined (caller is not a role, or cannot simulate).
845
+ None — could not be determined (caller is not a role, cannot simulate, or
846
+ the decision is unverifiable because of condition-based SCPs or
847
+ permissions boundaries).
769
848
 
770
849
  Raises:
771
850
  RoleValidationError: If permissions are definitively denied.
@@ -788,7 +867,7 @@ def verify_evaluation_caller_permissions(
788
867
  return None
789
868
 
790
869
  try:
791
- denied = _simulate_denied_actions(
870
+ denied, unverifiable = _simulate_denied_actions(
792
871
  iam_client, caller_role_arn, list(EVALUATION_CALLER_ACTIONS)
793
872
  )
794
873
  except ClientError as e:
@@ -816,6 +895,15 @@ def verify_evaluation_caller_permissions(
816
895
  )
817
896
  raise RoleValidationError(message)
818
897
 
898
+ if unverifiable:
899
+ logger.info(
900
+ "Cannot definitively verify evaluation pipeline permissions for '%s' due to "
901
+ "Organizations SCPs or permissions boundaries; errors will surface at "
902
+ "pipeline creation time.",
903
+ caller_role_arn,
904
+ )
905
+ return None
906
+
819
907
  logger.info(
820
908
  "Caller '%s' has the evaluation pipeline orchestration permissions.",
821
909
  caller_role_arn,
@@ -878,6 +966,22 @@ class IamRoleResolver:
878
966
  self._sts_client = self._boto_session.client("sts")
879
967
 
880
968
  # -- public API ---------------------------------------------------------
969
+ def resolve_and_validate_role(
970
+ self,
971
+ provided_role: Optional[str] = None,
972
+ role_type: str = "training",
973
+ *,
974
+ role_arn: Optional[str] = None,
975
+ validate_role: bool = True,
976
+ ) -> str:
977
+ """Resolve and validate an IAM role (read-only; does not mutate IAM)."""
978
+ return resolve_and_validate_role(
979
+ provided_role=provided_role or role_arn,
980
+ role_type=role_type,
981
+ sagemaker_session=self._sagemaker_session,
982
+ validate_role=validate_role,
983
+ )
984
+
881
985
  def get_required_actions(self, role_type: str) -> List[str]:
882
986
  """Return the IAM actions a role of ``role_type`` needs (read-only preview)."""
883
987
  self._validate_role_type(role_type)
@@ -23,6 +23,7 @@
23
23
  "eu-west-3": "763104351884",
24
24
  "mx-central-1": "637423239942",
25
25
  "sa-east-1": "763104351884",
26
+ "sa-west-1": "434457397001",
26
27
  "us-east-1": "763104351884",
27
28
  "us-east-2": "763104351884",
28
29
  "us-gov-east-1": "446045086412",
@@ -59,6 +60,7 @@
59
60
  "eu-west-3": "763104351884",
60
61
  "mx-central-1": "637423239942",
61
62
  "sa-east-1": "763104351884",
63
+ "sa-west-1": "434457397001",
62
64
  "us-east-1": "763104351884",
63
65
  "us-east-2": "763104351884",
64
66
  "us-gov-east-1": "446045086412",
@@ -91,6 +93,7 @@
91
93
  "eu-west-3": "763104351884",
92
94
  "mx-central-1": "637423239942",
93
95
  "sa-east-1": "763104351884",
96
+ "sa-west-1": "434457397001",
94
97
  "us-east-1": "763104351884",
95
98
  "us-east-2": "763104351884",
96
99
  "us-gov-east-1": "446045086412",
@@ -123,6 +126,7 @@
123
126
  "eu-west-3": "763104351884",
124
127
  "mx-central-1": "637423239942",
125
128
  "sa-east-1": "763104351884",
129
+ "sa-west-1": "434457397001",
126
130
  "us-east-1": "763104351884",
127
131
  "us-east-2": "763104351884",
128
132
  "us-gov-east-1": "446045086412",
@@ -155,6 +159,7 @@
155
159
  "eu-west-3": "763104351884",
156
160
  "mx-central-1": "637423239942",
157
161
  "sa-east-1": "763104351884",
162
+ "sa-west-1": "434457397001",
158
163
  "us-east-1": "763104351884",
159
164
  "us-east-2": "763104351884",
160
165
  "us-gov-east-1": "446045086412",
@@ -185,6 +190,7 @@
185
190
  "eu-west-3": "763104351884",
186
191
  "mx-central-1": "637423239942",
187
192
  "sa-east-1": "763104351884",
193
+ "sa-west-1": "434457397001",
188
194
  "us-east-1": "763104351884",
189
195
  "us-east-2": "763104351884",
190
196
  "us-gov-east-1": "446045086412",
@@ -215,6 +221,7 @@
215
221
  "eu-west-3": "763104351884",
216
222
  "mx-central-1": "637423239942",
217
223
  "sa-east-1": "763104351884",
224
+ "sa-west-1": "434457397001",
218
225
  "us-east-1": "763104351884",
219
226
  "us-east-2": "763104351884",
220
227
  "us-gov-east-1": "446045086412",
@@ -245,6 +252,7 @@
245
252
  "eu-west-3": "763104351884",
246
253
  "mx-central-1": "637423239942",
247
254
  "sa-east-1": "763104351884",
255
+ "sa-west-1": "434457397001",
248
256
  "us-east-1": "763104351884",
249
257
  "us-east-2": "763104351884",
250
258
  "us-gov-east-1": "446045086412",
@@ -258,7 +258,7 @@ def retrieve(
258
258
  pt_or_tf_version = (
259
259
  re.compile("^(pytorch|tensorflow)(.*)$").match(base_framework_version).group(2)
260
260
  )
261
- _version = original_version
261
+ _version = _version_for_config(version, config)
262
262
 
263
263
  if repo in [
264
264
  "huggingface-pytorch-trcomp-training",
@@ -14,12 +14,15 @@
14
14
 
15
15
  from __future__ import absolute_import, annotations
16
16
 
17
+ import logging
17
18
  from enum import Enum
18
19
  from typing import Any, Dict, List, Optional, Union
19
- from pydantic import Field, ConfigDict
20
+ from pydantic import Field, ConfigDict, field_validator
20
21
 
21
22
  from sagemaker.core.jumpstart.configs import BaseConfig
22
23
 
24
+ logger = logging.getLogger(__name__)
25
+
23
26
 
24
27
  class StrEnum(str, Enum):
25
28
  """A string-valued enumeration."""
@@ -406,6 +409,31 @@ class CapabilityEnum(StrEnum):
406
409
  FINE_TUNING = "FINE_TUNING"
407
410
  VALIDATION = "VALIDATION"
408
411
  INCREMENTAL_TRAINING = "INCREMENTAL_TRAINING"
412
+ CUSTOMIZATION = "CUSTOMIZATION"
413
+
414
+
415
+ def _coerce_capabilities(value: Any) -> Any:
416
+ """Coerce ``Capabilities`` values, tolerating unknown entries.
417
+
418
+ Known values are converted to ``CapabilityEnum`` members. Unknown values
419
+ are kept as plain strings with a warning, so a new service-side capability
420
+ cannot fail validation of the entire ``HubContentDocument`` for a pinned
421
+ SDK version.
422
+ """
423
+ if not isinstance(value, list):
424
+ return value
425
+ coerced = []
426
+ for item in value:
427
+ try:
428
+ coerced.append(CapabilityEnum(item))
429
+ except ValueError:
430
+ logger.warning(
431
+ "Unknown capability %r is not a member of CapabilityEnum; "
432
+ "keeping it as a string.",
433
+ item,
434
+ )
435
+ coerced.append(item)
436
+ return coerced
409
437
 
410
438
 
411
439
  class DemoNotebookModel(BaseConfig):
@@ -444,7 +472,14 @@ class HostingComponentsModel(BaseConfig):
444
472
  DynamicContainerDeploymentSupported: Optional[bool] = None
445
473
  HostingAdditionalDataSources: Optional[Dict[str, List[HostingAdditionalDataSourceModel]]] = None
446
474
  BedrockIOMappingId: Optional[str] = None
447
- Capabilities: Optional[List[CapabilityEnum]] = None
475
+ Capabilities: Optional[List[Union[CapabilityEnum, str]]] = None
476
+
477
+ @field_validator("Capabilities", mode="before")
478
+ @classmethod
479
+ def _validate_capabilities(cls, value: Any) -> Any:
480
+ """Keep unknown capability values as strings instead of failing."""
481
+ return _coerce_capabilities(value)
482
+
448
483
  HostingEcrUri: Optional[str] = None
449
484
  HostingArtifactS3DataType: Optional[HostingArtifactS3DataTypeEnum] = None
450
485
  HostingArtifactCompressionType: Optional[HostingArtifactCompressionTypeEnum] = None
@@ -506,4 +541,10 @@ class HubContentDocument(HostingComponentsModel, TrainingComponentsModel):
506
541
  TrainingConfigRankings: Optional[Dict[str, RankingSchemaModel]] = None
507
542
  Resources: Optional[List[ResourceModel]] = None
508
543
  Highlights: Optional[List[str]] = None
509
- Capabilities: List[CapabilityEnum] = None
544
+ Capabilities: List[Union[CapabilityEnum, str]] = None
545
+
546
+ @field_validator("Capabilities", mode="before")
547
+ @classmethod
548
+ def _validate_capabilities(cls, value: Any) -> Any:
549
+ """Keep unknown capability values as strings instead of failing."""
550
+ return _coerce_capabilities(value)
@@ -139,6 +139,10 @@
139
139
  "content_bucket": "jumpstart-cache-prod-me-south-1",
140
140
  "gated_content_bucket": "jumpstart-private-cache-prod-me-south-1"
141
141
  },
142
+ "me-west-1": {
143
+ "content_bucket": "jumpstart-cache-prod-me-west-1",
144
+ "gated_content_bucket": "jumpstart-private-cache-prod-me-west-1"
145
+ },
142
146
  "mx-central-1": {
143
147
  "content_bucket": "jumpstart-cache-prod-mx-central-1",
144
148
  "gated_content_bucket": "jumpstart-private-cache-prod-mx-central-1"
@@ -148,6 +152,10 @@
148
152
  "gated_content_bucket": "jumpstart-private-cache-prod-sa-east-1",
149
153
  "neo_content_bucket": "sagemaker-sd-models-prod-sa-east-1"
150
154
  },
155
+ "sa-west-1": {
156
+ "content_bucket": "jumpstart-cache-prod-sa-west-1",
157
+ "gated_content_bucket": "jumpstart-private-cache-prod-sa-west-1"
158
+ },
151
159
  "us-east-1": {
152
160
  "content_bucket": "jumpstart-cache-prod-us-east-1",
153
161
  "gated_content_bucket": "jumpstart-private-cache-prod-us-east-1",
@@ -357,15 +357,19 @@ class MultiRecordStrategy(BatchStrategy):
357
357
  Returns:
358
358
  generator of records
359
359
  """
360
- buffer = ""
360
+ buffer = None
361
361
  for element in self.splitter.split(file):
362
+ if buffer is None:
363
+ # Match the buffer type to the record type so binary inputs
364
+ # concatenate correctly instead of raising a TypeError.
365
+ buffer = b"" if isinstance(element, bytes) else ""
362
366
  if _payload_size_within_limit(buffer + element, size):
363
367
  buffer += element
364
368
  else:
365
369
  tmp = buffer
366
370
  buffer = element
367
371
  yield tmp
368
- if _validate_payload_size(buffer, size):
372
+ if buffer is not None and _validate_payload_size(buffer, size):
369
373
  yield buffer
370
374
 
371
375
 
@@ -338,7 +338,11 @@ class _LocalTransformJob(object):
338
338
  self.container.serve(self.primary_container["ModelDataUrl"], environment)
339
339
 
340
340
  serving_port = get_config_value("local.serving_port", self.local_session.config) or 8080
341
- _wait_for_serving_container(serving_port)
341
+ health_check_timeout = (
342
+ get_config_value("local.health_check_timeout", self.local_session.config)
343
+ or HEALTH_CHECK_TIMEOUT_LIMIT
344
+ )
345
+ _wait_for_serving_container(serving_port, timeout=health_check_timeout)
342
346
 
343
347
  # Get capabilities from Container if needed
344
348
  endpoint_url = "http://%s:%d/execution-parameters" % (get_docker_host(), serving_port)
@@ -632,7 +636,11 @@ class _LocalEndpoint(object):
632
636
  )
633
637
 
634
638
  serving_port = get_config_value("local.serving_port", self.local_session.config) or 8080
635
- _wait_for_serving_container(serving_port)
639
+ health_check_timeout = (
640
+ get_config_value("local.health_check_timeout", self.local_session.config)
641
+ or HEALTH_CHECK_TIMEOUT_LIMIT
642
+ )
643
+ _wait_for_serving_container(serving_port, timeout=health_check_timeout)
636
644
  # the container is running and it passed the healthcheck status is now InService
637
645
  self.state = _LocalEndpoint._IN_SERVICE
638
646
 
@@ -655,15 +663,21 @@ class _LocalEndpoint(object):
655
663
  return response
656
664
 
657
665
 
658
- def _wait_for_serving_container(serving_port):
659
- """Placeholder docstring."""
666
+ def _wait_for_serving_container(serving_port, timeout=HEALTH_CHECK_TIMEOUT_LIMIT):
667
+ """Wait for the serving container to become healthy.
668
+
669
+ Args:
670
+ serving_port (int): The port the serving container is listening on.
671
+ timeout (int): Maximum number of seconds to wait for the container to become healthy.
672
+ Defaults to ``HEALTH_CHECK_TIMEOUT_LIMIT``.
673
+ """
660
674
  i = 0
661
675
  http = urllib3.PoolManager()
662
676
 
663
677
  endpoint_url = "http://%s:%d/ping" % (get_docker_host(), serving_port)
664
678
  while True:
665
679
  i += 5
666
- if i >= HEALTH_CHECK_TIMEOUT_LIMIT:
680
+ if i >= timeout:
667
681
  raise RuntimeError("Giving up, endpoint didn't launch correctly")
668
682
 
669
683
  logger.info("Checking if serving container is up, attempt: %s", i)
@@ -39,6 +39,7 @@ import sagemaker
39
39
  from sagemaker.core.config.config_schema import CONTAINER_CONFIG, LOCAL
40
40
  import sagemaker.core
41
41
  from sagemaker.core.common_utils import custom_extractall_tarfile
42
+ from sagemaker.core.constants import DIR_PARAM_NAME, SAGEMAKER_OUTPUT_LOCATION
42
43
 
43
44
  CONTAINER_PREFIX = "algo"
44
45
  STUDIO_HOST_NAME = "sagemaker-local"
@@ -277,9 +278,7 @@ class _SageMakerContainer(object):
277
278
  data_dir, input_data_config, output_data_config, hyperparameters
278
279
  )
279
280
  # If local, source directory needs to be updated to mounted /opt/ml/code path
280
- hyperparameters = self._update_local_src_path(
281
- hyperparameters, key=sagemaker.serve.model_builder.DIR_PARAM_NAME
282
- )
281
+ hyperparameters = self._update_local_src_path(hyperparameters, key=DIR_PARAM_NAME)
283
282
 
284
283
  # Create the configuration files for each container that we will create
285
284
  # Each container will map the additional local volumes (if any).
@@ -344,15 +343,15 @@ class _SageMakerContainer(object):
344
343
  volumes = self._prepare_serving_volumes(model_dir)
345
344
 
346
345
  # If the user script was passed as a file:// mount it to the container.
347
- if sagemaker.serve.model_builder.DIR_PARAM_NAME.upper() in environment:
348
- script_dir = environment[sagemaker.serve.model_builder.DIR_PARAM_NAME.upper()]
346
+ if DIR_PARAM_NAME.upper() in environment:
347
+ script_dir = environment[DIR_PARAM_NAME.upper()]
349
348
  parsed_uri = urlparse(script_dir)
350
349
  if parsed_uri.scheme == "file":
351
350
  host_dir = os.path.abspath(parsed_uri.netloc + parsed_uri.path)
352
351
  volumes.append(_Volume(host_dir, "/opt/ml/code"))
353
352
  # Update path to mount location
354
353
  environment = environment.copy()
355
- environment[sagemaker.serve.model_builder.DIR_PARAM_NAME.upper()] = "/opt/ml/code"
354
+ environment[DIR_PARAM_NAME.upper()] = "/opt/ml/code"
356
355
 
357
356
  if _ecr_login_if_needed(self.sagemaker_session.boto_session, self.image):
358
357
  _pull_image(self.image)
@@ -583,8 +582,8 @@ class _SageMakerContainer(object):
583
582
 
584
583
  # If there is a training script directory and it is a local directory,
585
584
  # mount it to the container.
586
- if sagemaker.serve.model_builder.DIR_PARAM_NAME in hyperparameters:
587
- training_dir = json.loads(hyperparameters[sagemaker.serve.model_builder.DIR_PARAM_NAME])
585
+ if DIR_PARAM_NAME in hyperparameters:
586
+ training_dir = json.loads(hyperparameters[DIR_PARAM_NAME])
588
587
  parsed_uri = urlparse(training_dir)
589
588
  if parsed_uri.scheme == "file":
590
589
  host_dir = os.path.abspath(parsed_uri.netloc + parsed_uri.path)
@@ -593,10 +592,7 @@ class _SageMakerContainer(object):
593
592
  volumes.append(_Volume(shared_dir, "/opt/ml/shared"))
594
593
 
595
594
  parsed_uri = urlparse(output_data_config["S3OutputPath"])
596
- if (
597
- parsed_uri.scheme == "file"
598
- and sagemaker.serve.model_builder.SAGEMAKER_OUTPUT_LOCATION in hyperparameters
599
- ):
595
+ if parsed_uri.scheme == "file" and SAGEMAKER_OUTPUT_LOCATION in hyperparameters:
600
596
  dir_path = os.path.abspath(parsed_uri.netloc + parsed_uri.path)
601
597
  intermediate_dir = os.path.join(dir_path, "output", "intermediate")
602
598
  if not os.path.exists(intermediate_dir):