azureml-registry-tools 0.1.0a31__tar.gz → 0.1.0a33__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 (44) hide show
  1. {azureml_registry_tools-0.1.0a31/azureml_registry_tools.egg-info → azureml_registry_tools-0.1.0a33}/PKG-INFO +2 -2
  2. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/data/model.schema.json +86 -40
  3. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/mgmt/asset_management.py +16 -4
  4. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33/azureml_registry_tools.egg-info}/PKG-INFO +2 -2
  5. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml_registry_tools.egg-info/requires.txt +1 -1
  6. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/setup.py +2 -2
  7. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/LICENSE.txt +0 -0
  8. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/MANIFEST.in +0 -0
  9. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/__init__.py +0 -0
  10. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/__init__.py +0 -0
  11. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/_cli/__init__.py +0 -0
  12. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/_cli/registry_syndication_cli.py +0 -0
  13. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/_cli/repo2registry_cli.py +0 -0
  14. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/_rest_client/__init__.py +0 -0
  15. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/_rest_client/arm_client.py +0 -0
  16. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/_rest_client/base_rest_client.py +0 -0
  17. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/_rest_client/registry_management_client.py +0 -0
  18. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/_rest_client/registry_model_client.py +0 -0
  19. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/data/__init__.py +0 -0
  20. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/data/asset.yaml.template +0 -0
  21. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/data/description.md.template +0 -0
  22. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/data/evaluation.md.template +0 -0
  23. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/data/model-variant.schema.json +0 -0
  24. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/data/model.yaml.template +0 -0
  25. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/data/notes.md.template +0 -0
  26. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/data/validate_model_schema.py +0 -0
  27. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/data/validate_model_variant_schema.py +0 -0
  28. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/mgmt/__init__.py +0 -0
  29. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/mgmt/create_asset_template.py +0 -0
  30. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/mgmt/create_manifest.py +0 -0
  31. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/mgmt/create_model_spec.py +0 -0
  32. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/mgmt/model_management.py +0 -0
  33. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/mgmt/syndication_manifest.py +0 -0
  34. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/mgmt/util.py +0 -0
  35. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/tools/__init__.py +0 -0
  36. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/tools/config.py +0 -0
  37. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/tools/create_or_update_assets.py +0 -0
  38. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/tools/registry_utils.py +0 -0
  39. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml/registry/tools/repo2registry_config.py +0 -0
  40. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml_registry_tools.egg-info/SOURCES.txt +0 -0
  41. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml_registry_tools.egg-info/dependency_links.txt +0 -0
  42. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml_registry_tools.egg-info/entry_points.txt +0 -0
  43. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/azureml_registry_tools.egg-info/top_level.txt +0 -0
  44. {azureml_registry_tools-0.1.0a31 → azureml_registry_tools-0.1.0a33}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: azureml-registry-tools
3
- Version: 0.1.0a31
3
+ Version: 0.1.0a33
4
4
  Summary: AzureML Registry tools and CLI
5
5
  Author: Microsoft Corp
6
6
  License: https://aka.ms/azureml-sdk-license
@@ -10,7 +10,7 @@ Requires-Dist: azure-identity<2.0
10
10
  Requires-Dist: ruamel-yaml<0.19,>=0.17.21
11
11
  Requires-Dist: diskcache~=5.6
12
12
  Requires-Dist: azure-ai-ml<2.0,>=1.30.0
13
- Requires-Dist: azureml-assets<2.0
13
+ Requires-Dist: azureml-assets<2.0,>=1.16.99
14
14
  Dynamic: author
15
15
  Dynamic: license
16
16
  Dynamic: license-file
@@ -167,7 +167,7 @@
167
167
  "_aml_system_vanity_registry": {
168
168
  "description": "AML vanity registry",
169
169
  "type": "string",
170
- "enum": ["azureml-phi"]
170
+ "enum": ["azureml-phi", "azureml-oai-oss-ft", "azureml-meta-ft"]
171
171
  },
172
172
  "author": {
173
173
  "description": "Model provider/author name",
@@ -374,7 +374,7 @@
374
374
  "outputModalities": {
375
375
  "description": "Output modalities supported (e.g., text) as a comma-separated string",
376
376
  "type": "string",
377
- "pattern": "^(audio|csv|embeddings|image|json|pdf|text|video|3D-image)(?:\\s*,\\s*(audio|csv|embeddings|image|json|pdf|text|video|3D-image))*$"
377
+ "pattern": "^(audio|csv|embeddings|image|json|pdf|text|video|3D-image|robot-action-chunks)(?:\\s*,\\s*(audio|csv|embeddings|image|json|pdf|text|video|3D-image|robot-action-chunks))*$"
378
378
  },
379
379
  "playgroundRateLimitTier": {
380
380
  "description": "Rate limit tier for playground",
@@ -395,7 +395,7 @@
395
395
  "task": {
396
396
  "description": "Tasks supported by the model as a comma-separated string",
397
397
  "type": "string",
398
- "pattern": "^(audio-analysis|audio-classification|audio-generation|automatic-speech-recognition|chat-completion|completions|content-filters|content-safety|conversational-ai|custom-extraction|data-generation|document-analysis|document-ingestion|document-translation|embeddings|face-detection|fill-mask|forecasting|image-analysis|image-classification|image-feature-extraction|image-text-to-text|image-to-image|image-to-text|intelligent-content-processing|intelligent-document-processing|text-pii-extraction|conversation-pii-extraction|document-pii-extraction|detect-language|optical-character-recognition|protein-sequence-generation|protein-structure-prediction|responses|responsible-ai|retrosynthesis-prediction|summarization|text-analysis|text-analytics|text-classification|text-generation|text-to-image|text-to-speech|time-series-forecasting|translation|speech-to-text|speech-translation|video-analysis|video-generation|video-text-to-text|visual-question-answering|zero-shot-classification|zero-shot-image-classification|materials-design|atomistic-modelling|image-to-3D|text-to-3D|3D-generation|task-completion-verification|action-affordance|next-plausible-action-prediction|Structure-Prediction|Genomics|biomolecular-complex-structure-prediction|structure-prediction|protein-folding|web-agent-tasks|gui-grounding|messages)(?:\\s*,\\s*(audio-analysis|audio-classification|audio-generation|automatic-speech-recognition|chat-completion|completions|content-filters|content-safety|conversational-ai|custom-extraction|data-generation|document-analysis|document-ingestion|document-translation|embeddings|face-detection|fill-mask|forecasting|image-analysis|image-classification|image-feature-extraction|image-text-to-text|image-to-image|image-to-text|intelligent-content-processing|intelligent-document-processing|optical-character-recognition|protein-sequence-generation|protein-structure-prediction|responses|responsible-ai|summarization|text-analysis|text-analytics|text-classification|text-generation|text-pii-extraction|conversation-pii-extraction|document-pii-extraction|detect-language|text-to-image|text-to-speech|time-series-forecasting|translation|speech-to-text|speech-translation|video-analysis|video-generation|video-text-to-text|visual-question-answering|zero-shot-classification|zero-shot-image-classification|materials-design|atomistic-modelling|image-to-3D|text-to-3D|3D-generation|task-completion-verification|action-affordance|next-plausible-action-prediction|Structure-Prediction|Genomics|biomolecular-complex-structure-prediction|structure-prediction|protein-folding|web-agent-tasks|gui-grounding|messages))*$"
398
+ "pattern": "^(audio-analysis|audio-classification|audio-generation|automatic-speech-recognition|chat-completion|completions|content-filters|content-safety|conversational-ai|custom-extraction|data-generation|document-analysis|document-ingestion|document-translation|embeddings|face-detection|fill-mask|forecasting|image-analysis|image-classification|image-feature-extraction|image-text-to-text|image-to-image|image-to-text|intelligent-content-processing|intelligent-document-processing|text-pii-extraction|conversation-pii-extraction|document-pii-extraction|detect-language|optical-character-recognition|protein-sequence-generation|protein-structure-prediction|responses|responsible-ai|retrosynthesis-prediction|summarization|text-analysis|text-analytics|text-classification|text-generation|text-to-image|text-to-speech|time-series-forecasting|translation|speech-to-text|speech-translation|video-analysis|video-generation|video-text-to-text|visual-question-answering|zero-shot-classification|zero-shot-image-classification|materials-design|atomistic-modelling|image-to-3D|text-to-3D|3D-generation|task-completion-verification|action-affordance|next-plausible-action-prediction|Structure-Prediction|Genomics|biomolecular-complex-structure-prediction|structure-prediction|protein-folding|web-agent-tasks|gui-grounding|messages|robot-control)(?:\\s*,\\s*(audio-analysis|audio-classification|audio-generation|automatic-speech-recognition|chat-completion|completions|content-filters|content-safety|conversational-ai|custom-extraction|data-generation|document-analysis|document-ingestion|document-translation|embeddings|face-detection|fill-mask|forecasting|image-analysis|image-classification|image-feature-extraction|image-text-to-text|image-to-image|image-to-text|intelligent-content-processing|intelligent-document-processing|optical-character-recognition|protein-sequence-generation|protein-structure-prediction|responses|responsible-ai|summarization|text-analysis|text-analytics|text-classification|text-generation|text-pii-extraction|conversation-pii-extraction|document-pii-extraction|detect-language|text-to-image|text-to-speech|time-series-forecasting|translation|speech-to-text|speech-translation|video-analysis|video-generation|video-text-to-text|visual-question-answering|zero-shot-classification|zero-shot-image-classification|materials-design|atomistic-modelling|image-to-3D|text-to-3D|3D-generation|task-completion-verification|action-affordance|next-plausible-action-prediction|Structure-Prediction|Genomics|biomolecular-complex-structure-prediction|structure-prediction|protein-folding|web-agent-tasks|gui-grounding|messages|robot-control))*$"
399
399
  },
400
400
  "textContextWindow": {
401
401
  "description": "Context window size",
@@ -495,6 +495,7 @@
495
495
  "invisibleUntil": {
496
496
  "type": "string",
497
497
  "format": "date-time",
498
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{1,6}Z$",
498
499
  "description": "Date until which the model is invisible"
499
500
  },
500
501
  "playgroundRateLimitTier": {
@@ -605,15 +606,37 @@
605
606
  },
606
607
  "description": "Model capabilities (e.g., agents, assistants)"
607
608
  },
608
- "playground_rate_limit_tier": {
609
- "type": "string",
610
- "description": "Rate limit tier for playground",
611
- "enum": [
612
- "high",
613
- "low",
614
- "custom",
615
- "embeddings"
616
- ]
609
+ "toolsSupported": {
610
+ "type": "array",
611
+ "items": {
612
+ "type": "string",
613
+ "enum": [
614
+ "web_search",
615
+ "file_search",
616
+ "image_generation",
617
+ "code_interpreter",
618
+ "computer_use",
619
+ "mcp"
620
+ ]
621
+ },
622
+ "description": "Specific tools that the model supports (e.g., web_search, file_search, code_interpreter, computer_use)"
623
+ },
624
+ "featuresSupported": {
625
+ "type": "array",
626
+ "items": {
627
+ "type": "string",
628
+ "enum": [
629
+ "streaming",
630
+ "function_calling",
631
+ "structured_outputs",
632
+ "fine_tuning",
633
+ "distillation",
634
+ "predicted_outputs",
635
+ "inpainting",
636
+ "image_input"
637
+ ]
638
+ },
639
+ "description": "Model features and capabilities supported (e.g., streaming, function_calling, structured_outputs)"
617
640
  },
618
641
  "azureOffers": {
619
642
  "type": "array",
@@ -643,7 +666,8 @@
643
666
  },
644
667
  "sharedComputeCapacityEnabled": {
645
668
  "type": "boolean",
646
- "description": "Whether shared compute capacity is enabled"
669
+ "enum": [true],
670
+ "description": "Whether shared compute capacity is enabled. Only true values are allowed - remove this field when disabled."
647
671
  },
648
672
  "freePlayground": {
649
673
  "type": "boolean",
@@ -678,7 +702,8 @@
678
702
  },
679
703
  "isDirectFromAzure": {
680
704
  "type": "boolean",
681
- "description": "If the model is an Azure Direct model"
705
+ "enum": [true],
706
+ "description": "If the model is an Azure Direct model. Only true values are allowed - remove this field when disabled."
682
707
  },
683
708
  "inferenceEnvironmentAssetId": {
684
709
  "type": "string",
@@ -855,14 +880,17 @@
855
880
  }
856
881
  }
857
882
  },
858
- "sku": {
883
+ "SKU": {
859
884
  "type": "object",
860
885
  "description": "SKU specifications for different operations",
861
886
  "additionalProperties": false,
862
887
  "properties": {
863
- "finetuneRecommendedSku": {
864
- "description": "Skus that can be used for finetune maap",
865
- "$ref": "#/definitions/skuListDefinition"
888
+ "finetuneRecommendedSkus": {
889
+ "type": "array",
890
+ "items": {
891
+ "$ref": "#/definitions/skuEnum"
892
+ },
893
+ "description": "Skus that can be used for finetune maap"
866
894
  },
867
895
  "evaluationMinSkuSpec": {
868
896
  "type": "string",
@@ -870,9 +898,12 @@
870
898
  "pattern": "^\\d+\\|\\d+\\|\\d+\\|\\d+$",
871
899
  "format": "sku-spec"
872
900
  },
873
- "evaluationRecommendedSku": {
874
- "description": "Evaluation recommended sku",
875
- "$ref": "#/definitions/skuListDefinition"
901
+ "evaluationRecommendedSkus": {
902
+ "type": "array",
903
+ "items": {
904
+ "$ref": "#/definitions/skuEnum"
905
+ },
906
+ "description": "Evaluation recommended skus"
876
907
  },
877
908
  "finetuneMinSkuSpec": {
878
909
  "type": "string",
@@ -886,9 +917,12 @@
886
917
  "pattern": "^\\d+\\|\\d+\\|\\d+\\|\\d+$",
887
918
  "format": "sku-spec"
888
919
  },
889
- "inferenceRecommendedSku": {
890
- "description": "A list of comma separated skus that the client should use to deploy the model",
891
- "$ref": "#/definitions/skuListDefinition"
920
+ "inferenceRecommendedSkus": {
921
+ "type": "array",
922
+ "items": {
923
+ "$ref": "#/definitions/skuEnum"
924
+ },
925
+ "description": "A list of skus that the client should use to deploy the model"
892
926
  }
893
927
  }
894
928
  },
@@ -899,7 +933,8 @@
899
933
  "properties": {
900
934
  "maasFinetuningTest": {
901
935
  "type": "boolean",
902
- "description": "Used for testing maas-finetuning in INT"
936
+ "enum": [true],
937
+ "description": "Used for testing maas-finetuning in INT. Only true values are allowed - remove this field when disabled."
903
938
  },
904
939
  "maasFinetuningDeployRegions": {
905
940
  "type": "array",
@@ -918,12 +953,23 @@
918
953
  },
919
954
  "maasFinetuningOffer": {
920
955
  "type": "boolean",
921
- "description": "Whether MaaS fine-tuning offer is available"
956
+ "enum": [true],
957
+ "description": "Whether MaaS fine-tuning offer is available. Only true values are allowed - remove this field when disabled."
922
958
  },
923
- "maasFinetuningRegions": {
924
- "type": "string",
925
- "description": "Regions where fine-tuning is available as a comma-separated string",
926
- "pattern": "^(westus3|eastus2|eastus|southcentralus|northcentralus|westus)(?:\\s*,\\s*(westus3|eastus2|eastus|southcentralus|northcentralus|westus))*$"
959
+ "maasFinetuningAzureRegions": {
960
+ "type": "array",
961
+ "items": {
962
+ "type": "string",
963
+ "enum": [
964
+ "westus3",
965
+ "eastus2",
966
+ "eastus",
967
+ "southcentralus",
968
+ "northcentralus",
969
+ "westus"
970
+ ]
971
+ },
972
+ "description": "Regions where fine-tuning is available"
927
973
  }
928
974
  }
929
975
  },
@@ -934,32 +980,32 @@
934
980
  "properties": {
935
981
  "finetuneDeprecationDate": {
936
982
  "type": "string",
937
- "description": "The date that finetune will be deprecated. Date format yyyy-MM-dd. The deprecation will happen at midnight UTC",
938
- "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
983
+ "description": "The date that finetune will be deprecated. This date-time should be in midnight UTC.",
984
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{1,6}Z$",
939
985
  "format": "date-time"
940
986
  },
941
987
  "finetuneRetirementDate": {
942
988
  "type": "string",
943
- "description": "The date that finetune will be retired. Date format yyyy-MM-dd. The retirement will happen at midnight UTC",
944
- "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
989
+ "description": "The date that finetune will be retired. This date-time should be in midnight UTC.",
990
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{1,6}Z$",
945
991
  "format": "date-time"
946
992
  },
947
993
  "inferenceDeprecationDate": {
948
994
  "type": "string",
949
- "description": "The date that inference will be deprecated. Date format yyyy-MM-dd. The deprecation will happen at midnight UTC",
950
- "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
995
+ "description": "The date that inference will be deprecated. This date-time should be in midnight UTC.",
996
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{1,6}Z$",
951
997
  "format": "date-time"
952
998
  },
953
999
  "inferenceLegacyDate": {
954
1000
  "type": "string",
955
- "description": "The date that inference will become legacy. Date format yyyy-MM-dd. The change will happen at midnight UTC",
956
- "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
1001
+ "description": "The date that inference will become legacy. This date-time should be in midnight UTC.",
1002
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{1,6}Z$",
957
1003
  "format": "date-time"
958
1004
  },
959
1005
  "inferenceRetirementDate": {
960
1006
  "type": "string",
961
- "description": "The date that inference will be retired. Date format yyyy-MM-dd. The retirement will happen at midnight UTC",
962
- "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
1007
+ "description": "The date that inference will be retired. This date-time should be in midnight UTC.",
1008
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{1,6}Z$",
963
1009
  "format": "date-time"
964
1010
  }
965
1011
  }
@@ -20,13 +20,16 @@ from azureml.registry.data.validate_model_variant_schema import validate_model_v
20
20
  from azureml.registry._rest_client.registry_management_client import RegistryManagementClient
21
21
  from azureml.registry.mgmt.util import resolve_from_file_for_asset
22
22
 
23
- # Windows compatibility patch - must be applied before importing azureml.assets
23
+ # Cross-platform compatibility patch - must be applied before importing azureml.assets
24
+ import os
24
25
  from subprocess import run
25
26
 
26
27
 
27
28
  def patched_run_command(cmd: List[str]):
28
- """Run command with shell=True for Windows compatibility."""
29
- result = run(cmd, capture_output=True, encoding=sys.stdout.encoding, errors="ignore", shell=True)
29
+ """Run command with OS-appropriate shell setting for cross-platform compatibility."""
30
+ # Use shell=True on Windows, shell=False on Unix-like systems
31
+ use_shell = os.name == 'nt' # 'nt' is Windows
32
+ result = run(cmd, capture_output=True, encoding=sys.stdout.encoding, errors="ignore", shell=use_shell)
30
33
  return result
31
34
 
32
35
 
@@ -40,6 +43,9 @@ from azureml.assets.config import AssetConfig, AssetType # noqa: E402
40
43
  from azureml.assets.publish_utils import create_asset # noqa: E402
41
44
  from azureml.assets.validate_assets import validate_assets # noqa: E402
42
45
 
46
+ # Set azcopy job plan location to avoid permission issues
47
+ os.environ.setdefault("AZCOPY_JOB_PLAN_LOCATION", tempfile.gettempdir())
48
+
43
49
 
44
50
  def validate_model(asset_path: Path, allow_additional_properties: bool = False) -> bool:
45
51
  """Validate model.
@@ -236,9 +242,15 @@ def create_or_update_asset(readonly_asset: AssetConfig, registry_name: str, subs
236
242
  subscription_id=subscription_id,
237
243
  resource_group_name=resource_group,
238
244
  registry_name=registry_name,
239
- credential=DefaultAzureCredential(),
245
+ credential=DefaultAzureCredential(), # CodeQL [SM05139] DefaultAzureCredential should only be used for local development and testing purposes.
240
246
  )
241
247
 
248
+ if not shutil.which("azcopy"):
249
+ raise RuntimeError(
250
+ "azcopy is not available in PATH. "
251
+ "Please install azcopy: https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-v10"
252
+ )
253
+
242
254
  with tempfile.TemporaryDirectory() as mutable_asset_dir:
243
255
  mutable_asset, system_metadata_payload = build_mutable_asset(base_asset=readonly_asset, mutable_asset_dir=mutable_asset_dir, override_storage=override_storage)
244
256
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: azureml-registry-tools
3
- Version: 0.1.0a31
3
+ Version: 0.1.0a33
4
4
  Summary: AzureML Registry tools and CLI
5
5
  Author: Microsoft Corp
6
6
  License: https://aka.ms/azureml-sdk-license
@@ -10,7 +10,7 @@ Requires-Dist: azure-identity<2.0
10
10
  Requires-Dist: ruamel-yaml<0.19,>=0.17.21
11
11
  Requires-Dist: diskcache~=5.6
12
12
  Requires-Dist: azure-ai-ml<2.0,>=1.30.0
13
- Requires-Dist: azureml-assets<2.0
13
+ Requires-Dist: azureml-assets<2.0,>=1.16.99
14
14
  Dynamic: author
15
15
  Dynamic: license
16
16
  Dynamic: license-file
@@ -2,4 +2,4 @@ azure-identity<2.0
2
2
  ruamel-yaml<0.19,>=0.17.21
3
3
  diskcache~=5.6
4
4
  azure-ai-ml<2.0,>=1.30.0
5
- azureml-assets<2.0
5
+ azureml-assets<2.0,>=1.16.99
@@ -11,14 +11,14 @@ DEPENDENCIES = [
11
11
  "ruamel-yaml>=0.17.21,<0.19",
12
12
  "diskcache~=5.6",
13
13
  "azure-ai-ml>=1.30.0,<2.0",
14
- "azureml-assets<2.0"
14
+ "azureml-assets>=1.16.99,<2.0"
15
15
  ]
16
16
 
17
17
  exclude_list = ["*.tests"]
18
18
 
19
19
  setup(
20
20
  name='azureml-registry-tools',
21
- version="0.1.0a31",
21
+ version="0.1.0a33",
22
22
  description='AzureML Registry tools and CLI',
23
23
  author='Microsoft Corp',
24
24
  license="https://aka.ms/azureml-sdk-license",