← back to Exo
Add node backends to model cards (#2071)
bc6661e6aab1ac6b64f7e9a7965c3da7a6950882 · 2026-05-15 13:52:12 +0100 · rltakashige
Co-authored-by: Evan <evanev7@gmail.com>
Files touched
R100 .mlx_typings/.gitkeep .typings/.gitkeepR100 .mlx_typings/mflux/__init__.pyi .typings/mflux/__init__.pyiR100 .mlx_typings/mflux/callbacks/__init__.pyi .typings/mflux/callbacks/__init__.pyiR100 .mlx_typings/mflux/callbacks/callback.pyi .typings/mflux/callbacks/callback.pyiR100 .mlx_typings/mflux/callbacks/callback_registry.pyi .typings/mflux/callbacks/callback_registry.pyiR100 .mlx_typings/mflux/callbacks/generation_context.pyi .typings/mflux/callbacks/generation_context.pyiR100 .mlx_typings/mflux/cli/__init__.pyi .typings/mflux/cli/__init__.pyiR100 .mlx_typings/mflux/cli/defaults/defaults.pyi .typings/mflux/cli/defaults/defaults.pyiR100 .mlx_typings/mflux/models/__init__.pyi .typings/mflux/models/__init__.pyiR100 .mlx_typings/mflux/models/common/__init__.pyi .typings/mflux/models/common/__init__.pyiR100 .mlx_typings/mflux/models/common/cli/__init__.pyi .typings/mflux/models/common/cli/__init__.pyiR100 .mlx_typings/mflux/models/common/config/__init__.pyi .typings/mflux/models/common/config/__init__.pyiR100 .mlx_typings/mflux/models/common/config/config.pyi .typings/mflux/models/common/config/config.pyiR100 .mlx_typings/mflux/models/common/config/model_config.pyi .typings/mflux/models/common/config/model_config.pyiR100 .mlx_typings/mflux/models/common/latent_creator/__init__.pyi .typings/mflux/models/common/latent_creator/__init__.pyiR100 .mlx_typings/mflux/models/common/latent_creator/latent_creator.pyi .typings/mflux/models/common/latent_creator/latent_creator.pyiR100 .mlx_typings/mflux/models/common/lora/__init__.pyi .typings/mflux/models/common/lora/__init__.pyiR100 .mlx_typings/mflux/models/common/lora/layer/fused_linear_lora_layer.pyi .typings/mflux/models/common/lora/layer/fused_linear_lora_layer.pyiR100 .mlx_typings/mflux/models/common/lora/layer/linear_lora_layer.pyi .typings/mflux/models/common/lora/layer/linear_lora_layer.pyiR100 .mlx_typings/mflux/models/common/lora/mapping/lora_loader.pyi .typings/mflux/models/common/lora/mapping/lora_loader.pyiR100 .mlx_typings/mflux/models/common/lora/mapping/lora_mapping.pyi .typings/mflux/models/common/lora/mapping/lora_mapping.pyiR100 .mlx_typings/mflux/models/common/lora/mapping/lora_saver.pyi .typings/mflux/models/common/lora/mapping/lora_saver.pyiR100 .mlx_typings/mflux/models/common/lora/mapping/lora_transforms.pyi .typings/mflux/models/common/lora/mapping/lora_transforms.pyiR100 .mlx_typings/mflux/models/common/resolution/__init__.pyi .typings/mflux/models/common/resolution/__init__.pyiR100 .mlx_typings/mflux/models/common/resolution/actions.pyi .typings/mflux/models/common/resolution/actions.pyiR100 .mlx_typings/mflux/models/common/resolution/config_resolution.pyi .typings/mflux/models/common/resolution/config_resolution.pyiR100 .mlx_typings/mflux/models/common/resolution/lora_resolution.pyi .typings/mflux/models/common/resolution/lora_resolution.pyiR100 .mlx_typings/mflux/models/common/resolution/path_resolution.pyi .typings/mflux/models/common/resolution/path_resolution.pyiR100 .mlx_typings/mflux/models/common/resolution/quantization_resolution.pyi .typings/mflux/models/common/resolution/quantization_resolution.pyiR100 .mlx_typings/mflux/models/common/schedulers/__init__.pyi .typings/mflux/models/common/schedulers/__init__.pyiR100 .mlx_typings/mflux/models/common/schedulers/base_scheduler.pyi .typings/mflux/models/common/schedulers/base_scheduler.pyiR100 .mlx_typings/mflux/models/common/schedulers/flow_match_euler_discrete_scheduler.pyi .typings/mflux/models/common/schedulers/flow_match_euler_discrete_scheduler.pyiR100 .mlx_typings/mflux/models/common/schedulers/linear_scheduler.pyi .typings/mflux/models/common/schedulers/linear_scheduler.pyiR100 .mlx_typings/mflux/models/common/schedulers/seedvr2_euler_scheduler.pyi .typings/mflux/models/common/schedulers/seedvr2_euler_scheduler.pyiR100 .mlx_typings/mflux/models/common/tokenizer/__init__.pyi .typings/mflux/models/common/tokenizer/__init__.pyiR100 .mlx_typings/mflux/models/common/tokenizer/tokenizer.pyi .typings/mflux/models/common/tokenizer/tokenizer.pyiR100 .mlx_typings/mflux/models/common/tokenizer/tokenizer_loader.pyi .typings/mflux/models/common/tokenizer/tokenizer_loader.pyiR100 .mlx_typings/mflux/models/common/tokenizer/tokenizer_output.pyi .typings/mflux/models/common/tokenizer/tokenizer_output.pyiR100 .mlx_typings/mflux/models/common/vae/__init__.pyi .typings/mflux/models/common/vae/__init__.pyiR100 .mlx_typings/mflux/models/common/vae/tiling_config.pyi .typings/mflux/models/common/vae/tiling_config.pyiR100 .mlx_typings/mflux/models/common/vae/vae_tiler.pyi .typings/mflux/models/common/vae/vae_tiler.pyiR100 .mlx_typings/mflux/models/common/vae/vae_util.pyi .typings/mflux/models/common/vae/vae_util.pyiR100 .mlx_typings/mflux/models/common/weights/__init__.pyi .typings/mflux/models/common/weights/__init__.pyiR100 .mlx_typings/mflux/models/common/weights/loading/loaded_weights.pyi .typings/mflux/models/common/weights/loading/loaded_weights.pyiR100 .mlx_typings/mflux/models/common/weights/loading/weight_applier.pyi .typings/mflux/models/common/weights/loading/weight_applier.pyiR100 .mlx_typings/mflux/models/common/weights/loading/weight_definition.pyi .typings/mflux/models/common/weights/loading/weight_definition.pyiR100 .mlx_typings/mflux/models/common/weights/loading/weight_loader.pyi .typings/mflux/models/common/weights/loading/weight_loader.pyiR100 .mlx_typings/mflux/models/common/weights/mapping/weight_mapper.pyi .typings/mflux/models/common/weights/mapping/weight_mapper.pyiR100 .mlx_typings/mflux/models/common/weights/mapping/weight_mapping.pyi .typings/mflux/models/common/weights/mapping/weight_mapping.pyiR100 .mlx_typings/mflux/models/common/weights/mapping/weight_transforms.pyi .typings/mflux/models/common/weights/mapping/weight_transforms.pyiR100 .mlx_typings/mflux/models/common/weights/saving/model_saver.pyi .typings/mflux/models/common/weights/saving/model_saver.pyiR100 .mlx_typings/mflux/models/depth_pro/depth_pro_initializer.pyi .typings/mflux/models/depth_pro/depth_pro_initializer.pyiR100 .mlx_typings/mflux/models/depth_pro/model/decoder/feature_fusion_block_2d.pyi .typings/mflux/models/depth_pro/model/decoder/feature_fusion_block_2d.pyiR100 .mlx_typings/mflux/models/depth_pro/model/decoder/multires_conv_decoder.pyi .typings/mflux/models/depth_pro/model/decoder/multires_conv_decoder.pyiR100 .mlx_typings/mflux/models/depth_pro/model/decoder/residual_block.pyi .typings/mflux/models/depth_pro/model/decoder/residual_block.pyiR100 .mlx_typings/mflux/models/depth_pro/model/depth_pro.pyi .typings/mflux/models/depth_pro/model/depth_pro.pyiR100 .mlx_typings/mflux/models/depth_pro/model/depth_pro_model.pyi .typings/mflux/models/depth_pro/model/depth_pro_model.pyiR100 .mlx_typings/mflux/models/depth_pro/model/depth_pro_util.pyi .typings/mflux/models/depth_pro/model/depth_pro_util.pyiR100 .mlx_typings/mflux/models/depth_pro/model/dino_v2/attention.pyi .typings/mflux/models/depth_pro/model/dino_v2/attention.pyiR100 .mlx_typings/mflux/models/depth_pro/model/dino_v2/dino_vision_transformer.pyi .typings/mflux/models/depth_pro/model/dino_v2/dino_vision_transformer.pyiR100 .mlx_typings/mflux/models/depth_pro/model/dino_v2/layer_scale.pyi .typings/mflux/models/depth_pro/model/dino_v2/layer_scale.pyiR100 .mlx_typings/mflux/models/depth_pro/model/dino_v2/mlp.pyi .typings/mflux/models/depth_pro/model/dino_v2/mlp.pyiR100 .mlx_typings/mflux/models/depth_pro/model/dino_v2/patch_embed.pyi .typings/mflux/models/depth_pro/model/dino_v2/patch_embed.pyiR100 .mlx_typings/mflux/models/depth_pro/model/dino_v2/transformer_block.pyi .typings/mflux/models/depth_pro/model/dino_v2/transformer_block.pyiR100 .mlx_typings/mflux/models/depth_pro/model/encoder/depth_pro_encoder.pyi .typings/mflux/models/depth_pro/model/encoder/depth_pro_encoder.pyiR100 .mlx_typings/mflux/models/depth_pro/model/encoder/upsample_block.pyi .typings/mflux/models/depth_pro/model/encoder/upsample_block.pyiR100 .mlx_typings/mflux/models/depth_pro/model/head/fov_head.pyi .typings/mflux/models/depth_pro/model/head/fov_head.pyiR100 .mlx_typings/mflux/models/depth_pro/weights/depth_pro_weight_definition.pyi .typings/mflux/models/depth_pro/weights/depth_pro_weight_definition.pyiR100 .mlx_typings/mflux/models/depth_pro/weights/depth_pro_weight_mapping.pyi .typings/mflux/models/depth_pro/weights/depth_pro_weight_mapping.pyiR100 .mlx_typings/mflux/models/fibo/latent_creator/fibo_latent_creator.pyi .typings/mflux/models/fibo/latent_creator/fibo_latent_creator.pyiR100 .mlx_typings/mflux/models/fibo/weights/fibo_weight_definition.pyi .typings/mflux/models/fibo/weights/fibo_weight_definition.pyiR100 .mlx_typings/mflux/models/fibo/weights/fibo_weight_mapping.pyi .typings/mflux/models/fibo/weights/fibo_weight_mapping.pyiR100 .mlx_typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_image_processor.pyi .typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_image_processor.pyiR100 .mlx_typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_processor.pyi .typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_processor.pyiR100 .mlx_typings/mflux/models/fibo_vlm/weights/fibo_vlm_weight_definition.pyi .typings/mflux/models/fibo_vlm/weights/fibo_vlm_weight_definition.pyiR100 .mlx_typings/mflux/models/fibo_vlm/weights/fibo_vlm_weight_mapping.pyi .typings/mflux/models/fibo_vlm/weights/fibo_vlm_weight_mapping.pyiR100 .mlx_typings/mflux/models/flux/__init__.pyi .typings/mflux/models/flux/__init__.pyiR100 .mlx_typings/mflux/models/flux/cli/__init__.pyi .typings/mflux/models/flux/cli/__init__.pyiR100 .mlx_typings/mflux/models/flux/flux_initializer.pyi .typings/mflux/models/flux/flux_initializer.pyiR100 .mlx_typings/mflux/models/flux/latent_creator/__init__.pyi .typings/mflux/models/flux/latent_creator/__init__.pyiR100 .mlx_typings/mflux/models/flux/latent_creator/flux_latent_creator.pyi .typings/mflux/models/flux/latent_creator/flux_latent_creator.pyiR100 .mlx_typings/mflux/models/flux/model/__init__.pyi .typings/mflux/models/flux/model/__init__.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_embeddings.pyi .typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_embeddings.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_encoder.pyi .typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_encoder.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_encoder_layer.pyi .typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_encoder_layer.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_mlp.pyi .typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_mlp.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_sdpa_attention.pyi .typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_sdpa_attention.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_text_model.pyi .typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_text_model.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/encoder_clip.pyi .typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/encoder_clip.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/prompt_encoder.pyi .typings/mflux/models/flux/model/flux_text_encoder/prompt_encoder.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_attention.pyi .typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_attention.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_block.pyi .typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_block.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_dense_relu_dense.pyi .typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_dense_relu_dense.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_encoder.pyi .typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_encoder.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_feed_forward.pyi .typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_feed_forward.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_layer_norm.pyi .typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_layer_norm.pyiR100 .mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_self_attention.pyi .typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_self_attention.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_continuous.pyi .typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_continuous.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_zero.pyi .typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_zero.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_zero_single.pyi .typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_zero_single.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/common/attention_utils.pyi .typings/mflux/models/flux/model/flux_transformer/common/attention_utils.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/embed_nd.pyi .typings/mflux/models/flux/model/flux_transformer/embed_nd.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/feed_forward.pyi .typings/mflux/models/flux/model/flux_transformer/feed_forward.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/guidance_embedder.pyi .typings/mflux/models/flux/model/flux_transformer/guidance_embedder.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/joint_attention.pyi .typings/mflux/models/flux/model/flux_transformer/joint_attention.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/joint_transformer_block.pyi .typings/mflux/models/flux/model/flux_transformer/joint_transformer_block.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/single_block_attention.pyi .typings/mflux/models/flux/model/flux_transformer/single_block_attention.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/single_transformer_block.pyi .typings/mflux/models/flux/model/flux_transformer/single_transformer_block.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/text_embedder.pyi .typings/mflux/models/flux/model/flux_transformer/text_embedder.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/time_text_embed.pyi .typings/mflux/models/flux/model/flux_transformer/time_text_embed.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/timestep_embedder.pyi .typings/mflux/models/flux/model/flux_transformer/timestep_embedder.pyiR100 .mlx_typings/mflux/models/flux/model/flux_transformer/transformer.pyi .typings/mflux/models/flux/model/flux_transformer/transformer.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/common/attention.pyi .typings/mflux/models/flux/model/flux_vae/common/attention.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/common/resnet_block_2d.pyi .typings/mflux/models/flux/model/flux_vae/common/resnet_block_2d.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/common/unet_mid_block.pyi .typings/mflux/models/flux/model/flux_vae/common/unet_mid_block.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/decoder/conv_in.pyi .typings/mflux/models/flux/model/flux_vae/decoder/conv_in.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/decoder/conv_norm_out.pyi .typings/mflux/models/flux/model/flux_vae/decoder/conv_norm_out.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/decoder/conv_out.pyi .typings/mflux/models/flux/model/flux_vae/decoder/conv_out.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/decoder/decoder.pyi .typings/mflux/models/flux/model/flux_vae/decoder/decoder.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/decoder/up_block_1_or_2.pyi .typings/mflux/models/flux/model/flux_vae/decoder/up_block_1_or_2.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/decoder/up_block_3.pyi .typings/mflux/models/flux/model/flux_vae/decoder/up_block_3.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/decoder/up_block_4.pyi .typings/mflux/models/flux/model/flux_vae/decoder/up_block_4.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/decoder/up_sampler.pyi .typings/mflux/models/flux/model/flux_vae/decoder/up_sampler.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/encoder/conv_in.pyi .typings/mflux/models/flux/model/flux_vae/encoder/conv_in.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/encoder/conv_norm_out.pyi .typings/mflux/models/flux/model/flux_vae/encoder/conv_norm_out.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/encoder/conv_out.pyi .typings/mflux/models/flux/model/flux_vae/encoder/conv_out.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_block_1.pyi .typings/mflux/models/flux/model/flux_vae/encoder/down_block_1.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_block_2.pyi .typings/mflux/models/flux/model/flux_vae/encoder/down_block_2.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_block_3.pyi .typings/mflux/models/flux/model/flux_vae/encoder/down_block_3.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_block_4.pyi .typings/mflux/models/flux/model/flux_vae/encoder/down_block_4.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_sampler.pyi .typings/mflux/models/flux/model/flux_vae/encoder/down_sampler.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/encoder/encoder.pyi .typings/mflux/models/flux/model/flux_vae/encoder/encoder.pyiR100 .mlx_typings/mflux/models/flux/model/flux_vae/vae.pyi .typings/mflux/models/flux/model/flux_vae/vae.pyiR100 .mlx_typings/mflux/models/flux/model/redux_encoder/redux_encoder.pyi .typings/mflux/models/flux/model/redux_encoder/redux_encoder.pyiR100 .mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_encoder.pyi .typings/mflux/models/flux/model/siglip_vision_transformer/siglip_encoder.pyiR100 .mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_encoder_layer.pyi .typings/mflux/models/flux/model/siglip_vision_transformer/siglip_encoder_layer.pyiR100 .mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_mlp.pyi .typings/mflux/models/flux/model/siglip_vision_transformer/siglip_mlp.pyiR100 .mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_multi_head_attention_pooling_head.pyi .typings/mflux/models/flux/model/siglip_vision_transformer/siglip_multi_head_attention_pooling_head.pyiR100 .mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_sdpa_attention.pyi .typings/mflux/models/flux/model/siglip_vision_transformer/siglip_sdpa_attention.pyiR100 .mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_vision_embeddings.pyi .typings/mflux/models/flux/model/siglip_vision_transformer/siglip_vision_embeddings.pyiR100 .mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_vision_transformer.pyi .typings/mflux/models/flux/model/siglip_vision_transformer/siglip_vision_transformer.pyiR100 .mlx_typings/mflux/models/flux/variants/__init__.pyi .typings/mflux/models/flux/variants/__init__.pyiR100 .mlx_typings/mflux/models/flux/variants/concept_attention/attention_data.pyi .typings/mflux/models/flux/variants/concept_attention/attention_data.pyiR100 .mlx_typings/mflux/models/flux/variants/concept_attention/joint_attention_concept.pyi .typings/mflux/models/flux/variants/concept_attention/joint_attention_concept.pyiR100 .mlx_typings/mflux/models/flux/variants/concept_attention/joint_transformer_block_concept.pyi .typings/mflux/models/flux/variants/concept_attention/joint_transformer_block_concept.pyiR100 .mlx_typings/mflux/models/flux/variants/concept_attention/transformer_concept.pyi .typings/mflux/models/flux/variants/concept_attention/transformer_concept.pyiR100 .mlx_typings/mflux/models/flux/variants/controlnet/transformer_controlnet.pyi .typings/mflux/models/flux/variants/controlnet/transformer_controlnet.pyiR100 .mlx_typings/mflux/models/flux/variants/kontext/__init__.pyi .typings/mflux/models/flux/variants/kontext/__init__.pyiR100 .mlx_typings/mflux/models/flux/variants/kontext/flux_kontext.pyi .typings/mflux/models/flux/variants/kontext/flux_kontext.pyiR100 .mlx_typings/mflux/models/flux/variants/kontext/kontext_util.pyi .typings/mflux/models/flux/variants/kontext/kontext_util.pyiR100 .mlx_typings/mflux/models/flux/variants/txt2img/flux.pyi .typings/mflux/models/flux/variants/txt2img/flux.pyiR100 .mlx_typings/mflux/models/flux/weights/__init__.pyi .typings/mflux/models/flux/weights/__init__.pyiR100 .mlx_typings/mflux/models/flux/weights/flux_lora_mapping.pyi .typings/mflux/models/flux/weights/flux_lora_mapping.pyiR100 .mlx_typings/mflux/models/flux/weights/flux_weight_definition.pyi .typings/mflux/models/flux/weights/flux_weight_definition.pyiR100 .mlx_typings/mflux/models/flux/weights/flux_weight_mapping.pyi .typings/mflux/models/flux/weights/flux_weight_mapping.pyiR100 .mlx_typings/mflux/models/qwen/__init__.pyi .typings/mflux/models/qwen/__init__.pyiR100 .mlx_typings/mflux/models/qwen/cli/__init__.pyi .typings/mflux/models/qwen/cli/__init__.pyiR100 .mlx_typings/mflux/models/qwen/latent_creator/__init__.pyi .typings/mflux/models/qwen/latent_creator/__init__.pyiR100 .mlx_typings/mflux/models/qwen/latent_creator/qwen_latent_creator.pyi .typings/mflux/models/qwen/latent_creator/qwen_latent_creator.pyiR100 .mlx_typings/mflux/models/qwen/model/__init__.pyi .typings/mflux/models/qwen/model/__init__.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_attention.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_attention.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_encoder.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_encoder.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_encoder_layer.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_encoder_layer.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_mlp.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_mlp.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_patch_merger.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_patch_merger.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_prompt_encoder.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_prompt_encoder.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_rms_norm.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_rms_norm.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_rope.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_rope.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_text_encoder.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_text_encoder.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_attention.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_attention.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_block.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_block.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_language_encoder.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_language_encoder.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_mlp.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_mlp.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_patch_embed.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_patch_embed.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_rotary_embedding.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_rotary_embedding.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_transformer.pyi .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_transformer.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_attention.pyi .typings/mflux/models/qwen/model/qwen_transformer/qwen_attention.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_feed_forward.pyi .typings/mflux/models/qwen/model/qwen_transformer/qwen_feed_forward.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_rope.pyi .typings/mflux/models/qwen/model/qwen_transformer/qwen_rope.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_time_text_embed.pyi .typings/mflux/models/qwen/model/qwen_transformer/qwen_time_text_embed.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_timestep_embedding.pyi .typings/mflux/models/qwen/model/qwen_transformer/qwen_timestep_embedding.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_timesteps.pyi .typings/mflux/models/qwen/model/qwen_transformer/qwen_timesteps.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer.pyi .typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer_block.pyi .typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer_block.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer_rms_norm.pyi .typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer_rms_norm.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_attention_block_3d.pyi .typings/mflux/models/qwen/model/qwen_vae/qwen_image_attention_block_3d.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_causal_conv_3d.pyi .typings/mflux/models/qwen/model/qwen_vae/qwen_image_causal_conv_3d.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_decoder_3d.pyi .typings/mflux/models/qwen/model/qwen_vae/qwen_image_decoder_3d.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_down_block_3d.pyi .typings/mflux/models/qwen/model/qwen_vae/qwen_image_down_block_3d.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_encoder_3d.pyi .typings/mflux/models/qwen/model/qwen_vae/qwen_image_encoder_3d.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_mid_block_3d.pyi .typings/mflux/models/qwen/model/qwen_vae/qwen_image_mid_block_3d.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_res_block_3d.pyi .typings/mflux/models/qwen/model/qwen_vae/qwen_image_res_block_3d.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_resample_3d.pyi .typings/mflux/models/qwen/model/qwen_vae/qwen_image_resample_3d.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_rms_norm.pyi .typings/mflux/models/qwen/model/qwen_vae/qwen_image_rms_norm.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_up_block_3d.pyi .typings/mflux/models/qwen/model/qwen_vae/qwen_image_up_block_3d.pyiR100 .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_vae.pyi .typings/mflux/models/qwen/model/qwen_vae/qwen_vae.pyiR100 .mlx_typings/mflux/models/qwen/qwen_initializer.pyi .typings/mflux/models/qwen/qwen_initializer.pyiR100 .mlx_typings/mflux/models/qwen/tokenizer/__init__.pyi .typings/mflux/models/qwen/tokenizer/__init__.pyiR100 .mlx_typings/mflux/models/qwen/tokenizer/qwen_image_processor.pyi .typings/mflux/models/qwen/tokenizer/qwen_image_processor.pyiR100 .mlx_typings/mflux/models/qwen/tokenizer/qwen_vision_language_processor.pyi .typings/mflux/models/qwen/tokenizer/qwen_vision_language_processor.pyiR100 .mlx_typings/mflux/models/qwen/tokenizer/qwen_vision_language_tokenizer.pyi .typings/mflux/models/qwen/tokenizer/qwen_vision_language_tokenizer.pyiR100 .mlx_typings/mflux/models/qwen/variants/__init__.pyi .typings/mflux/models/qwen/variants/__init__.pyiR100 .mlx_typings/mflux/models/qwen/variants/edit/qwen_edit_util.pyi .typings/mflux/models/qwen/variants/edit/qwen_edit_util.pyiR100 .mlx_typings/mflux/models/qwen/variants/edit/qwen_image_edit.pyi .typings/mflux/models/qwen/variants/edit/qwen_image_edit.pyiR100 .mlx_typings/mflux/models/qwen/variants/txt2img/qwen_image.pyi .typings/mflux/models/qwen/variants/txt2img/qwen_image.pyiR100 .mlx_typings/mflux/models/qwen/weights/__init__.pyi .typings/mflux/models/qwen/weights/__init__.pyiR100 .mlx_typings/mflux/models/qwen/weights/qwen_lora_mapping.pyi .typings/mflux/models/qwen/weights/qwen_lora_mapping.pyiR100 .mlx_typings/mflux/models/qwen/weights/qwen_weight_definition.pyi .typings/mflux/models/qwen/weights/qwen_weight_definition.pyiR100 .mlx_typings/mflux/models/qwen/weights/qwen_weight_mapping.pyi .typings/mflux/models/qwen/weights/qwen_weight_mapping.pyiR100 .mlx_typings/mflux/models/seedvr2/weights/seedvr2_weight_definition.pyi .typings/mflux/models/seedvr2/weights/seedvr2_weight_definition.pyiR100 .mlx_typings/mflux/models/seedvr2/weights/seedvr2_weight_mapping.pyi .typings/mflux/models/seedvr2/weights/seedvr2_weight_mapping.pyiR100 .mlx_typings/mflux/models/z_image/latent_creator/z_image_latent_creator.pyi .typings/mflux/models/z_image/latent_creator/z_image_latent_creator.pyiR100 .mlx_typings/mflux/models/z_image/weights/z_image_weight_definition.pyi .typings/mflux/models/z_image/weights/z_image_weight_definition.pyiR100 .mlx_typings/mflux/models/z_image/weights/z_image_weight_mapping.pyi .typings/mflux/models/z_image/weights/z_image_weight_mapping.pyiR100 .mlx_typings/mflux/release/__init__.pyi .typings/mflux/release/__init__.pyiR100 .mlx_typings/mflux/utils/__init__.pyi .typings/mflux/utils/__init__.pyiR100 .mlx_typings/mflux/utils/box_values.pyi .typings/mflux/utils/box_values.pyiR100 .mlx_typings/mflux/utils/exceptions.pyi .typings/mflux/utils/exceptions.pyiR100 .mlx_typings/mflux/utils/generated_image.pyi .typings/mflux/utils/generated_image.pyiR100 .mlx_typings/mflux/utils/image_util.pyi .typings/mflux/utils/image_util.pyiR100 .mlx_typings/mflux/utils/metadata_builder.pyi .typings/mflux/utils/metadata_builder.pyiR100 .mlx_typings/mflux/utils/version_util.pyi .typings/mflux/utils/version_util.pyiR100 .mlx_typings/mlx/core/__init__.pyi .typings/mlx/core/__init__.pyiR100 .mlx_typings/mlx/core/cuda/__init__.pyi .typings/mlx/core/cuda/__init__.pyiR100 .mlx_typings/mlx/core/distributed/__init__.pyi .typings/mlx/core/distributed/__init__.pyiR100 .mlx_typings/mlx/core/metal/__init__.pyi .typings/mlx/core/metal/__init__.pyiR100 .mlx_typings/mlx/core/random/__init__.pyi .typings/mlx/core/random/__init__.pyiR100 .mlx_typings/mlx/nn/__init__.pyi .typings/mlx/nn/__init__.pyiR100 .mlx_typings/mlx/nn/init.pyi .typings/mlx/nn/init.pyiR100 .mlx_typings/mlx/nn/layers/__init__.pyi .typings/mlx/nn/layers/__init__.pyiR100 .mlx_typings/mlx/nn/layers/activations.pyi .typings/mlx/nn/layers/activations.pyiR100 .mlx_typings/mlx/nn/layers/base.pyi .typings/mlx/nn/layers/base.pyiR100 .mlx_typings/mlx/nn/layers/containers.pyi .typings/mlx/nn/layers/containers.pyiR100 .mlx_typings/mlx/nn/layers/convolution.pyi .typings/mlx/nn/layers/convolution.pyiR100 .mlx_typings/mlx/nn/layers/convolution_transpose.pyi .typings/mlx/nn/layers/convolution_transpose.pyiR100 .mlx_typings/mlx/nn/layers/distributed.pyi .typings/mlx/nn/layers/distributed.pyiR100 .mlx_typings/mlx/nn/layers/dropout.pyi .typings/mlx/nn/layers/dropout.pyiR100 .mlx_typings/mlx/nn/layers/embedding.pyi .typings/mlx/nn/layers/embedding.pyiR100 .mlx_typings/mlx/nn/layers/linear.pyi .typings/mlx/nn/layers/linear.pyiR100 .mlx_typings/mlx/nn/layers/normalization.pyi .typings/mlx/nn/layers/normalization.pyiR100 .mlx_typings/mlx/nn/layers/pooling.pyi .typings/mlx/nn/layers/pooling.pyiR100 .mlx_typings/mlx/nn/layers/positional_encoding.pyi .typings/mlx/nn/layers/positional_encoding.pyiR100 .mlx_typings/mlx/nn/layers/quantized.pyi .typings/mlx/nn/layers/quantized.pyiR100 .mlx_typings/mlx/nn/layers/recurrent.pyi .typings/mlx/nn/layers/recurrent.pyiR100 .mlx_typings/mlx/nn/layers/transformer.pyi .typings/mlx/nn/layers/transformer.pyiR100 .mlx_typings/mlx/nn/layers/upsample.pyi .typings/mlx/nn/layers/upsample.pyiR100 .mlx_typings/mlx/nn/losses.pyi .typings/mlx/nn/losses.pyiR100 .mlx_typings/mlx/nn/utils.pyi .typings/mlx/nn/utils.pyiR100 .mlx_typings/mlx/utils.pyi .typings/mlx/utils.pyiR100 .mlx_typings/mlx_lm/__init__.pyi .typings/mlx_lm/__init__.pyiR100 .mlx_typings/mlx_lm/_version.pyi .typings/mlx_lm/_version.pyiR100 .mlx_typings/mlx_lm/convert.pyi .typings/mlx_lm/convert.pyiR100 .mlx_typings/mlx_lm/generate.pyi .typings/mlx_lm/generate.pyiR100 .mlx_typings/mlx_lm/models/__init__.pyi .typings/mlx_lm/models/__init__.pyiR100 .mlx_typings/mlx_lm/models/activations.pyi .typings/mlx_lm/models/activations.pyiR100 .mlx_typings/mlx_lm/models/base.pyi .typings/mlx_lm/models/base.pyiR100 .mlx_typings/mlx_lm/models/bitlinear_layers.pyi .typings/mlx_lm/models/bitlinear_layers.pyiR100 .mlx_typings/mlx_lm/models/cache.pyi .typings/mlx_lm/models/cache.pyiR100 .mlx_typings/mlx_lm/models/deepseek_v3.pyi .typings/mlx_lm/models/deepseek_v3.pyiR100 .mlx_typings/mlx_lm/models/deepseek_v4.pyi .typings/mlx_lm/models/deepseek_v4.pyiR100 .mlx_typings/mlx_lm/models/gated_delta.pyi .typings/mlx_lm/models/gated_delta.pyiR100 .mlx_typings/mlx_lm/models/gemma4.pyi .typings/mlx_lm/models/gemma4.pyiR100 .mlx_typings/mlx_lm/models/gemma4_text.pyi .typings/mlx_lm/models/gemma4_text.pyiR100 .mlx_typings/mlx_lm/models/glm4_moe.pyi .typings/mlx_lm/models/glm4_moe.pyiR100 .mlx_typings/mlx_lm/models/glm_moe_dsa.pyi .typings/mlx_lm/models/glm_moe_dsa.pyiR100 .mlx_typings/mlx_lm/models/gpt_oss.pyi .typings/mlx_lm/models/gpt_oss.pyiR100 .mlx_typings/mlx_lm/models/minimax.pyi .typings/mlx_lm/models/minimax.pyiR100 .mlx_typings/mlx_lm/models/nemotron_h.pyi .typings/mlx_lm/models/nemotron_h.pyiR100 .mlx_typings/mlx_lm/models/qwen3_5.pyi .typings/mlx_lm/models/qwen3_5.pyiR100 .mlx_typings/mlx_lm/models/qwen3_5_moe.pyi .typings/mlx_lm/models/qwen3_5_moe.pyiR100 .mlx_typings/mlx_lm/models/qwen3_next.pyi .typings/mlx_lm/models/qwen3_next.pyiR100 .mlx_typings/mlx_lm/models/rope_utils.pyi .typings/mlx_lm/models/rope_utils.pyiR100 .mlx_typings/mlx_lm/models/step3p5.pyi .typings/mlx_lm/models/step3p5.pyiR100 .mlx_typings/mlx_lm/models/switch_layers.pyi .typings/mlx_lm/models/switch_layers.pyiR100 .mlx_typings/mlx_lm/sample_utils.pyi .typings/mlx_lm/sample_utils.pyiR100 .mlx_typings/mlx_lm/tokenizer_utils.pyi .typings/mlx_lm/tokenizer_utils.pyiR100 .mlx_typings/mlx_lm/tuner/dora.pyi .typings/mlx_lm/tuner/dora.pyiR100 .mlx_typings/mlx_lm/tuner/lora.pyi .typings/mlx_lm/tuner/lora.pyiR100 .mlx_typings/mlx_lm/tuner/utils.pyi .typings/mlx_lm/tuner/utils.pyiR100 .mlx_typings/mlx_lm/utils.pyi .typings/mlx_lm/utils.pyiR100 .mlx_typings/mlx_vlm/__init__.pyi .typings/mlx_vlm/__init__.pyiR100 .mlx_typings/mlx_vlm/prompt_utils.pyi .typings/mlx_vlm/prompt_utils.pyiR100 .mlx_typings/mlx_vlm/utils.pyi .typings/mlx_vlm/utils.pyiA .typings/pynvml/__init__.pyiR100 .mlx_typings/safetensors/__init__.pyi .typings/safetensors/__init__.pyiM pyproject.tomlM resources/image_model_cards/exolabs--FLUX.1-Kontext-dev-4bit.tomlM resources/image_model_cards/exolabs--FLUX.1-Kontext-dev-8bit.tomlM resources/image_model_cards/exolabs--FLUX.1-Kontext-dev.tomlM resources/image_model_cards/exolabs--FLUX.1-Krea-dev-4bit.tomlM resources/image_model_cards/exolabs--FLUX.1-Krea-dev-8bit.tomlM resources/image_model_cards/exolabs--FLUX.1-Krea-dev.tomlM resources/image_model_cards/exolabs--FLUX.1-dev-4bit.tomlM resources/image_model_cards/exolabs--FLUX.1-dev-8bit.tomlM resources/image_model_cards/exolabs--FLUX.1-dev.tomlM resources/image_model_cards/exolabs--FLUX.1-schnell-4bit.tomlM resources/image_model_cards/exolabs--FLUX.1-schnell-8bit.tomlM resources/image_model_cards/exolabs--FLUX.1-schnell.tomlM resources/image_model_cards/exolabs--Qwen-Image-4bit.tomlM resources/image_model_cards/exolabs--Qwen-Image-8bit.tomlM resources/image_model_cards/exolabs--Qwen-Image-Edit-2509-4bit.tomlM resources/image_model_cards/exolabs--Qwen-Image-Edit-2509-8bit.tomlM resources/image_model_cards/exolabs--Qwen-Image-Edit-2509.tomlM resources/image_model_cards/exolabs--Qwen-Image.tomlM resources/inference_model_cards/mlx-community--DeepSeek-V3.1-4bit.tomlM resources/inference_model_cards/mlx-community--DeepSeek-V3.1-8bit.tomlM resources/inference_model_cards/mlx-community--DeepSeek-V3.2-4bit.tomlM resources/inference_model_cards/mlx-community--DeepSeek-V3.2-8bit.tomlM resources/inference_model_cards/mlx-community--DeepSeek-V4-Flash.tomlM resources/inference_model_cards/mlx-community--DeepSeek-V4-Pro.tomlM resources/inference_model_cards/mlx-community--GLM-4.5-Air-8bit.tomlM resources/inference_model_cards/mlx-community--GLM-4.5-Air-bf16.tomlM resources/inference_model_cards/mlx-community--GLM-4.7-4bit.tomlM resources/inference_model_cards/mlx-community--GLM-4.7-6bit.tomlM resources/inference_model_cards/mlx-community--GLM-4.7-8bit-gs32.tomlM resources/inference_model_cards/mlx-community--GLM-4.7-Flash-4bit.tomlM resources/inference_model_cards/mlx-community--GLM-4.7-Flash-5bit.tomlM resources/inference_model_cards/mlx-community--GLM-4.7-Flash-6bit.tomlM resources/inference_model_cards/mlx-community--GLM-4.7-Flash-8bit.tomlM resources/inference_model_cards/mlx-community--GLM-5-8bit.tomlM resources/inference_model_cards/mlx-community--GLM-5-MXFP4-Q8.tomlM resources/inference_model_cards/mlx-community--GLM-5-bf16.tomlM resources/inference_model_cards/mlx-community--GLM-5.1-DQ4plus-q8.tomlM resources/inference_model_cards/mlx-community--GLM-5.1-MXFP4-Q8.tomlM resources/inference_model_cards/mlx-community--GLM-5.1.tomlM resources/inference_model_cards/mlx-community--Kimi-K2-Instruct-4bit.tomlM resources/inference_model_cards/mlx-community--Kimi-K2-Thinking.tomlM resources/inference_model_cards/mlx-community--Kimi-K2.5.tomlM resources/inference_model_cards/mlx-community--Kimi-K2.6-mlx-DQ3_K_M-q8.tomlM resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-4bit.tomlM resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-8bit.tomlM resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-bf16.tomlM resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-4bit.tomlM resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-8bit.tomlM resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-bf16.tomlM resources/inference_model_cards/mlx-community--Llama-3.2-1B-Instruct-4bit.tomlM resources/inference_model_cards/mlx-community--Llama-3.2-3B-Instruct-4bit.tomlM resources/inference_model_cards/mlx-community--Llama-3.2-3B-Instruct-8bit.tomlM resources/inference_model_cards/mlx-community--Llama-3.3-70B-Instruct-4bit.tomlM resources/inference_model_cards/mlx-community--Llama-3.3-70B-Instruct-8bit.tomlM resources/inference_model_cards/mlx-community--Meta-Llama-3.1-70B-Instruct-4bit.tomlM resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-4bit.tomlM resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-8bit.tomlM resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-bf16.tomlM resources/inference_model_cards/mlx-community--MiniMax-M2.1-3bit.tomlM resources/inference_model_cards/mlx-community--MiniMax-M2.1-8bit.tomlM resources/inference_model_cards/mlx-community--MiniMax-M2.5-4bit.tomlM resources/inference_model_cards/mlx-community--MiniMax-M2.5-6bit.tomlM resources/inference_model_cards/mlx-community--MiniMax-M2.5-8bit.tomlM resources/inference_model_cards/mlx-community--MiniMax-M2.7-4bit-mxfp4.tomlM resources/inference_model_cards/mlx-community--MiniMax-M2.7-4bit.tomlM resources/inference_model_cards/mlx-community--MiniMax-M2.7-5bit.tomlM resources/inference_model_cards/mlx-community--MiniMax-M2.7-6bit.tomlM resources/inference_model_cards/mlx-community--MiniMax-M2.7-8bit.tomlM resources/inference_model_cards/mlx-community--MiniMax-M2.7.tomlM resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-4Bit.tomlM resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-5Bit.tomlM resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-6Bit.tomlM resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-8Bit.tomlM resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-BF16.tomlM resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-MXFP4.tomlM resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-NVFP4.tomlM resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-Nano-9B-v2-4bits.tomlM resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-Nano-9B-v2-6bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-0.6B-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-0.6B-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-235B-A22B-Instruct-2507-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-235B-A22B-Instruct-2507-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-30B-A3B-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-30B-A3B-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-Coder-480B-A35B-Instruct-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-Coder-480B-A35B-Instruct-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-5bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-6bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-bf16.tomlM resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Instruct-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Instruct-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Thinking-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Thinking-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3-VL-4B-Instruct-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-6bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-bf16.tomlM resources/inference_model_cards/mlx-community--Qwen3.5-27B-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.5-27B-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.5-2B-MLX-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.5-35B-A3B-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.5-35B-A3B-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-6bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.5-9B-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.5-9B-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.6-27B-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.6-27B-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.6-27B-bf16.tomlM resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-4bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-5bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-8bit.tomlM resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-bf16.tomlM resources/inference_model_cards/mlx-community--Step-3.5-Flash-4bit.tomlM resources/inference_model_cards/mlx-community--Step-3.5-Flash-6bit.tomlM resources/inference_model_cards/mlx-community--Step-3.5-Flash-8Bit.tomlM resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-4bit.tomlM resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-6bit.tomlM resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-8bit.tomlM resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-bf16.tomlM resources/inference_model_cards/mlx-community--gemma-4-31b-it-4bit.tomlM resources/inference_model_cards/mlx-community--gemma-4-31b-it-6bit.tomlM resources/inference_model_cards/mlx-community--gemma-4-31b-it-8bit.tomlM resources/inference_model_cards/mlx-community--gemma-4-31b-it-bf16.tomlM resources/inference_model_cards/mlx-community--gemma-4-e2b-it-4bit.tomlM resources/inference_model_cards/mlx-community--gemma-4-e2b-it-6bit.tomlM resources/inference_model_cards/mlx-community--gemma-4-e2b-it-8bit.tomlM resources/inference_model_cards/mlx-community--gemma-4-e2b-it-bf16.tomlM resources/inference_model_cards/mlx-community--gemma-4-e4b-it-4bit.tomlM resources/inference_model_cards/mlx-community--gemma-4-e4b-it-6bit.tomlM resources/inference_model_cards/mlx-community--gemma-4-e4b-it-8bit.tomlM resources/inference_model_cards/mlx-community--gemma-4-e4b-it-bf16.tomlM resources/inference_model_cards/mlx-community--gpt-oss-120b-MXFP4-Q8.tomlM resources/inference_model_cards/mlx-community--gpt-oss-20b-MXFP4-Q8.tomlM resources/inference_model_cards/mlx-community--llama-3.3-70b-instruct-fp16.tomlM resources/inference_model_cards/moonshotai--Kimi-K2.6.tomlM src/exo/api/main.pyM src/exo/download/impl_shard_downloader.pyM src/exo/download/shard_downloader.pyM src/exo/download/tests/test_cancel_download.pyM src/exo/download/tests/test_download_status_not_lost.pyM src/exo/download/tests/test_re_download.pyM src/exo/master/main.pyM src/exo/master/placement.pyM src/exo/master/tests/test_master.pyM src/exo/master/tests/test_placement.pyM src/exo/master/tests/test_placement_utils.pyM src/exo/shared/apply.pyM src/exo/shared/models/model_cards.pyM src/exo/shared/tests/conftest.pyM src/exo/shared/tests/test_apply/test_apply_custom_model_cards.pyA src/exo/shared/types/backends.pyM src/exo/shared/types/state.pyM src/exo/utils/info_gatherer/info_gatherer.pyM src/exo/worker/tests/unittests/conftest.pyM src/exo/worker/tests/unittests/test_mlx/conftest.pyM src/exo/worker/tests/unittests/test_mlx/test_pipeline_prefill_callbacks.py
Diff
commit bc6661e6aab1ac6b64f7e9a7965c3da7a6950882
Author: rltakashige <rl.takashige@gmail.com>
Date: Fri May 15 13:52:12 2026 +0100
Add node backends to model cards (#2071)
Co-authored-by: Evan <evanev7@gmail.com>
---
{.mlx_typings => .typings}/.gitkeep | 0
{.mlx_typings => .typings}/mflux/__init__.pyi | 0
.../mflux/callbacks/__init__.pyi | 0
.../mflux/callbacks/callback.pyi | 0
.../mflux/callbacks/callback_registry.pyi | 0
.../mflux/callbacks/generation_context.pyi | 0
{.mlx_typings => .typings}/mflux/cli/__init__.pyi | 0
.../mflux/cli/defaults/defaults.pyi | 0
.../mflux/models/__init__.pyi | 0
.../mflux/models/common/__init__.pyi | 0
.../mflux/models/common/cli/__init__.pyi | 0
.../mflux/models/common/config/__init__.pyi | 0
.../mflux/models/common/config/config.pyi | 0
.../mflux/models/common/config/model_config.pyi | 0
.../models/common/latent_creator/__init__.pyi | 0
.../common/latent_creator/latent_creator.pyi | 0
.../mflux/models/common/lora/__init__.pyi | 0
.../common/lora/layer/fused_linear_lora_layer.pyi | 0
.../models/common/lora/layer/linear_lora_layer.pyi | 0
.../models/common/lora/mapping/lora_loader.pyi | 0
.../models/common/lora/mapping/lora_mapping.pyi | 0
.../models/common/lora/mapping/lora_saver.pyi | 0
.../models/common/lora/mapping/lora_transforms.pyi | 0
.../mflux/models/common/resolution/__init__.pyi | 0
.../mflux/models/common/resolution/actions.pyi | 0
.../models/common/resolution/config_resolution.pyi | 0
.../models/common/resolution/lora_resolution.pyi | 0
.../models/common/resolution/path_resolution.pyi | 0
.../common/resolution/quantization_resolution.pyi | 0
.../mflux/models/common/schedulers/__init__.pyi | 0
.../models/common/schedulers/base_scheduler.pyi | 0
.../flow_match_euler_discrete_scheduler.pyi | 0
.../models/common/schedulers/linear_scheduler.pyi | 0
.../common/schedulers/seedvr2_euler_scheduler.pyi | 0
.../mflux/models/common/tokenizer/__init__.pyi | 0
.../mflux/models/common/tokenizer/tokenizer.pyi | 0
.../models/common/tokenizer/tokenizer_loader.pyi | 0
.../models/common/tokenizer/tokenizer_output.pyi | 0
.../mflux/models/common/vae/__init__.pyi | 0
.../mflux/models/common/vae/tiling_config.pyi | 0
.../mflux/models/common/vae/vae_tiler.pyi | 0
.../mflux/models/common/vae/vae_util.pyi | 0
.../mflux/models/common/weights/__init__.pyi | 0
.../common/weights/loading/loaded_weights.pyi | 0
.../common/weights/loading/weight_applier.pyi | 0
.../common/weights/loading/weight_definition.pyi | 0
.../common/weights/loading/weight_loader.pyi | 0
.../common/weights/mapping/weight_mapper.pyi | 0
.../common/weights/mapping/weight_mapping.pyi | 0
.../common/weights/mapping/weight_transforms.pyi | 0
.../models/common/weights/saving/model_saver.pyi | 0
.../models/depth_pro/depth_pro_initializer.pyi | 0
.../model/decoder/feature_fusion_block_2d.pyi | 0
.../model/decoder/multires_conv_decoder.pyi | 0
.../depth_pro/model/decoder/residual_block.pyi | 0
.../mflux/models/depth_pro/model/depth_pro.pyi | 0
.../models/depth_pro/model/depth_pro_model.pyi | 0
.../models/depth_pro/model/depth_pro_util.pyi | 0
.../models/depth_pro/model/dino_v2/attention.pyi | 0
.../model/dino_v2/dino_vision_transformer.pyi | 0
.../models/depth_pro/model/dino_v2/layer_scale.pyi | 0
.../mflux/models/depth_pro/model/dino_v2/mlp.pyi | 0
.../models/depth_pro/model/dino_v2/patch_embed.pyi | 0
.../depth_pro/model/dino_v2/transformer_block.pyi | 0
.../depth_pro/model/encoder/depth_pro_encoder.pyi | 0
.../depth_pro/model/encoder/upsample_block.pyi | 0
.../mflux/models/depth_pro/model/head/fov_head.pyi | 0
.../weights/depth_pro_weight_definition.pyi | 0
.../depth_pro/weights/depth_pro_weight_mapping.pyi | 0
.../fibo/latent_creator/fibo_latent_creator.pyi | 0
.../models/fibo/weights/fibo_weight_definition.pyi | 0
.../models/fibo/weights/fibo_weight_mapping.pyi | 0
.../fibo_vlm/tokenizer/qwen2vl_image_processor.pyi | 0
.../fibo_vlm/tokenizer/qwen2vl_processor.pyi | 0
.../weights/fibo_vlm_weight_definition.pyi | 0
.../fibo_vlm/weights/fibo_vlm_weight_mapping.pyi | 0
.../mflux/models/flux/__init__.pyi | 0
.../mflux/models/flux/cli/__init__.pyi | 0
.../mflux/models/flux/flux_initializer.pyi | 0
.../mflux/models/flux/latent_creator/__init__.pyi | 0
.../flux/latent_creator/flux_latent_creator.pyi | 0
.../mflux/models/flux/model/__init__.pyi | 0
.../clip_encoder/clip_embeddings.pyi | 0
.../clip_encoder/clip_encoder.pyi | 0
.../clip_encoder/clip_encoder_layer.pyi | 0
.../flux_text_encoder/clip_encoder/clip_mlp.pyi | 0
.../clip_encoder/clip_sdpa_attention.pyi | 0
.../clip_encoder/clip_text_model.pyi | 0
.../clip_encoder/encoder_clip.pyi | 0
.../model/flux_text_encoder/prompt_encoder.pyi | 0
.../flux_text_encoder/t5_encoder/t5_attention.pyi | 0
.../flux_text_encoder/t5_encoder/t5_block.pyi | 0
.../t5_encoder/t5_dense_relu_dense.pyi | 0
.../flux_text_encoder/t5_encoder/t5_encoder.pyi | 0
.../t5_encoder/t5_feed_forward.pyi | 0
.../flux_text_encoder/t5_encoder/t5_layer_norm.pyi | 0
.../t5_encoder/t5_self_attention.pyi | 0
.../flux_transformer/ada_layer_norm_continuous.pyi | 0
.../model/flux_transformer/ada_layer_norm_zero.pyi | 0
.../ada_layer_norm_zero_single.pyi | 0
.../flux_transformer/common/attention_utils.pyi | 0
.../flux/model/flux_transformer/embed_nd.pyi | 0
.../flux/model/flux_transformer/feed_forward.pyi | 0
.../model/flux_transformer/guidance_embedder.pyi | 0
.../model/flux_transformer/joint_attention.pyi | 0
.../flux_transformer/joint_transformer_block.pyi | 0
.../flux_transformer/single_block_attention.pyi | 0
.../flux_transformer/single_transformer_block.pyi | 0
.../flux/model/flux_transformer/text_embedder.pyi | 0
.../model/flux_transformer/time_text_embed.pyi | 0
.../model/flux_transformer/timestep_embedder.pyi | 0
.../flux/model/flux_transformer/transformer.pyi | 0
.../flux/model/flux_vae/common/attention.pyi | 0
.../flux/model/flux_vae/common/resnet_block_2d.pyi | 0
.../flux/model/flux_vae/common/unet_mid_block.pyi | 0
.../models/flux/model/flux_vae/decoder/conv_in.pyi | 0
.../flux/model/flux_vae/decoder/conv_norm_out.pyi | 0
.../flux/model/flux_vae/decoder/conv_out.pyi | 0
.../models/flux/model/flux_vae/decoder/decoder.pyi | 0
.../model/flux_vae/decoder/up_block_1_or_2.pyi | 0
.../flux/model/flux_vae/decoder/up_block_3.pyi | 0
.../flux/model/flux_vae/decoder/up_block_4.pyi | 0
.../flux/model/flux_vae/decoder/up_sampler.pyi | 0
.../models/flux/model/flux_vae/encoder/conv_in.pyi | 0
.../flux/model/flux_vae/encoder/conv_norm_out.pyi | 0
.../flux/model/flux_vae/encoder/conv_out.pyi | 0
.../flux/model/flux_vae/encoder/down_block_1.pyi | 0
.../flux/model/flux_vae/encoder/down_block_2.pyi | 0
.../flux/model/flux_vae/encoder/down_block_3.pyi | 0
.../flux/model/flux_vae/encoder/down_block_4.pyi | 0
.../flux/model/flux_vae/encoder/down_sampler.pyi | 0
.../models/flux/model/flux_vae/encoder/encoder.pyi | 0
.../mflux/models/flux/model/flux_vae/vae.pyi | 0
.../flux/model/redux_encoder/redux_encoder.pyi | 0
.../siglip_vision_transformer/siglip_encoder.pyi | 0
.../siglip_encoder_layer.pyi | 0
.../model/siglip_vision_transformer/siglip_mlp.pyi | 0
.../siglip_multi_head_attention_pooling_head.pyi | 0
.../siglip_sdpa_attention.pyi | 0
.../siglip_vision_embeddings.pyi | 0
.../siglip_vision_transformer.pyi | 0
.../mflux/models/flux/variants/__init__.pyi | 0
.../variants/concept_attention/attention_data.pyi | 0
.../concept_attention/joint_attention_concept.pyi | 0
.../joint_transformer_block_concept.pyi | 0
.../concept_attention/transformer_concept.pyi | 0
.../variants/controlnet/transformer_controlnet.pyi | 0
.../models/flux/variants/kontext/__init__.pyi | 0
.../models/flux/variants/kontext/flux_kontext.pyi | 0
.../models/flux/variants/kontext/kontext_util.pyi | 0
.../mflux/models/flux/variants/txt2img/flux.pyi | 0
.../mflux/models/flux/weights/__init__.pyi | 0
.../models/flux/weights/flux_lora_mapping.pyi | 0
.../models/flux/weights/flux_weight_definition.pyi | 0
.../models/flux/weights/flux_weight_mapping.pyi | 0
.../mflux/models/qwen/__init__.pyi | 0
.../mflux/models/qwen/cli/__init__.pyi | 0
.../mflux/models/qwen/latent_creator/__init__.pyi | 0
.../qwen/latent_creator/qwen_latent_creator.pyi | 0
.../mflux/models/qwen/model/__init__.pyi | 0
.../model/qwen_text_encoder/qwen_attention.pyi | 0
.../qwen/model/qwen_text_encoder/qwen_encoder.pyi | 0
.../model/qwen_text_encoder/qwen_encoder_layer.pyi | 0
.../qwen/model/qwen_text_encoder/qwen_mlp.pyi | 0
.../model/qwen_text_encoder/qwen_patch_merger.pyi | 0
.../qwen_text_encoder/qwen_prompt_encoder.pyi | 0
.../qwen/model/qwen_text_encoder/qwen_rms_norm.pyi | 0
.../qwen/model/qwen_text_encoder/qwen_rope.pyi | 0
.../model/qwen_text_encoder/qwen_text_encoder.pyi | 0
.../qwen_text_encoder/qwen_vision_attention.pyi | 0
.../model/qwen_text_encoder/qwen_vision_block.pyi | 0
.../qwen_vision_language_encoder.pyi | 0
.../model/qwen_text_encoder/qwen_vision_mlp.pyi | 0
.../qwen_text_encoder/qwen_vision_patch_embed.pyi | 0
.../qwen_vision_rotary_embedding.pyi | 0
.../qwen_text_encoder/qwen_vision_transformer.pyi | 0
.../qwen/model/qwen_transformer/qwen_attention.pyi | 0
.../model/qwen_transformer/qwen_feed_forward.pyi | 0
.../qwen/model/qwen_transformer/qwen_rope.pyi | 0
.../qwen_transformer/qwen_time_text_embed.pyi | 0
.../qwen_transformer/qwen_timestep_embedding.pyi | 0
.../qwen/model/qwen_transformer/qwen_timesteps.pyi | 0
.../model/qwen_transformer/qwen_transformer.pyi | 0
.../qwen_transformer/qwen_transformer_block.pyi | 0
.../qwen_transformer/qwen_transformer_rms_norm.pyi | 0
.../qwen_vae/qwen_image_attention_block_3d.pyi | 0
.../model/qwen_vae/qwen_image_causal_conv_3d.pyi | 0
.../qwen/model/qwen_vae/qwen_image_decoder_3d.pyi | 0
.../model/qwen_vae/qwen_image_down_block_3d.pyi | 0
.../qwen/model/qwen_vae/qwen_image_encoder_3d.pyi | 0
.../model/qwen_vae/qwen_image_mid_block_3d.pyi | 0
.../model/qwen_vae/qwen_image_res_block_3d.pyi | 0
.../qwen/model/qwen_vae/qwen_image_resample_3d.pyi | 0
.../qwen/model/qwen_vae/qwen_image_rms_norm.pyi | 0
.../qwen/model/qwen_vae/qwen_image_up_block_3d.pyi | 0
.../mflux/models/qwen/model/qwen_vae/qwen_vae.pyi | 0
.../mflux/models/qwen/qwen_initializer.pyi | 0
.../mflux/models/qwen/tokenizer/__init__.pyi | 0
.../models/qwen/tokenizer/qwen_image_processor.pyi | 0
.../tokenizer/qwen_vision_language_processor.pyi | 0
.../tokenizer/qwen_vision_language_tokenizer.pyi | 0
.../mflux/models/qwen/variants/__init__.pyi | 0
.../models/qwen/variants/edit/qwen_edit_util.pyi | 0
.../models/qwen/variants/edit/qwen_image_edit.pyi | 0
.../models/qwen/variants/txt2img/qwen_image.pyi | 0
.../mflux/models/qwen/weights/__init__.pyi | 0
.../models/qwen/weights/qwen_lora_mapping.pyi | 0
.../models/qwen/weights/qwen_weight_definition.pyi | 0
.../models/qwen/weights/qwen_weight_mapping.pyi | 0
.../seedvr2/weights/seedvr2_weight_definition.pyi | 0
.../seedvr2/weights/seedvr2_weight_mapping.pyi | 0
.../latent_creator/z_image_latent_creator.pyi | 0
.../z_image/weights/z_image_weight_definition.pyi | 0
.../z_image/weights/z_image_weight_mapping.pyi | 0
.../mflux/release/__init__.pyi | 0
.../mflux/utils/__init__.pyi | 0
.../mflux/utils/box_values.pyi | 0
.../mflux/utils/exceptions.pyi | 0
.../mflux/utils/generated_image.pyi | 0
.../mflux/utils/image_util.pyi | 0
.../mflux/utils/metadata_builder.pyi | 0
.../mflux/utils/version_util.pyi | 0
{.mlx_typings => .typings}/mlx/core/__init__.pyi | 0
.../mlx/core/cuda/__init__.pyi | 0
.../mlx/core/distributed/__init__.pyi | 0
.../mlx/core/metal/__init__.pyi | 0
.../mlx/core/random/__init__.pyi | 0
{.mlx_typings => .typings}/mlx/nn/__init__.pyi | 0
{.mlx_typings => .typings}/mlx/nn/init.pyi | 0
.../mlx/nn/layers/__init__.pyi | 0
.../mlx/nn/layers/activations.pyi | 0
{.mlx_typings => .typings}/mlx/nn/layers/base.pyi | 0
.../mlx/nn/layers/containers.pyi | 0
.../mlx/nn/layers/convolution.pyi | 0
.../mlx/nn/layers/convolution_transpose.pyi | 0
.../mlx/nn/layers/distributed.pyi | 0
.../mlx/nn/layers/dropout.pyi | 0
.../mlx/nn/layers/embedding.pyi | 0
.../mlx/nn/layers/linear.pyi | 0
.../mlx/nn/layers/normalization.pyi | 0
.../mlx/nn/layers/pooling.pyi | 0
.../mlx/nn/layers/positional_encoding.pyi | 0
.../mlx/nn/layers/quantized.pyi | 0
.../mlx/nn/layers/recurrent.pyi | 0
.../mlx/nn/layers/transformer.pyi | 0
.../mlx/nn/layers/upsample.pyi | 0
{.mlx_typings => .typings}/mlx/nn/losses.pyi | 0
{.mlx_typings => .typings}/mlx/nn/utils.pyi | 0
{.mlx_typings => .typings}/mlx/utils.pyi | 0
{.mlx_typings => .typings}/mlx_lm/__init__.pyi | 0
{.mlx_typings => .typings}/mlx_lm/_version.pyi | 0
{.mlx_typings => .typings}/mlx_lm/convert.pyi | 0
{.mlx_typings => .typings}/mlx_lm/generate.pyi | 0
.../mlx_lm/models/__init__.pyi | 0
.../mlx_lm/models/activations.pyi | 0
{.mlx_typings => .typings}/mlx_lm/models/base.pyi | 0
.../mlx_lm/models/bitlinear_layers.pyi | 0
{.mlx_typings => .typings}/mlx_lm/models/cache.pyi | 0
.../mlx_lm/models/deepseek_v3.pyi | 0
.../mlx_lm/models/deepseek_v4.pyi | 0
.../mlx_lm/models/gated_delta.pyi | 0
.../mlx_lm/models/gemma4.pyi | 0
.../mlx_lm/models/gemma4_text.pyi | 0
.../mlx_lm/models/glm4_moe.pyi | 0
.../mlx_lm/models/glm_moe_dsa.pyi | 0
.../mlx_lm/models/gpt_oss.pyi | 0
.../mlx_lm/models/minimax.pyi | 0
.../mlx_lm/models/nemotron_h.pyi | 0
.../mlx_lm/models/qwen3_5.pyi | 0
.../mlx_lm/models/qwen3_5_moe.pyi | 0
.../mlx_lm/models/qwen3_next.pyi | 0
.../mlx_lm/models/rope_utils.pyi | 0
.../mlx_lm/models/step3p5.pyi | 0
.../mlx_lm/models/switch_layers.pyi | 0
{.mlx_typings => .typings}/mlx_lm/sample_utils.pyi | 0
.../mlx_lm/tokenizer_utils.pyi | 0
{.mlx_typings => .typings}/mlx_lm/tuner/dora.pyi | 0
{.mlx_typings => .typings}/mlx_lm/tuner/lora.pyi | 0
{.mlx_typings => .typings}/mlx_lm/tuner/utils.pyi | 0
{.mlx_typings => .typings}/mlx_lm/utils.pyi | 0
{.mlx_typings => .typings}/mlx_vlm/__init__.pyi | 0
.../mlx_vlm/prompt_utils.pyi | 0
{.mlx_typings => .typings}/mlx_vlm/utils.pyi | 0
.typings/pynvml/__init__.pyi | 3226 ++++++++++++++++++++
.../safetensors/__init__.pyi | 0
pyproject.toml | 8 +-
.../exolabs--FLUX.1-Kontext-dev-4bit.toml | 1 +
.../exolabs--FLUX.1-Kontext-dev-8bit.toml | 1 +
.../exolabs--FLUX.1-Kontext-dev.toml | 1 +
.../exolabs--FLUX.1-Krea-dev-4bit.toml | 1 +
.../exolabs--FLUX.1-Krea-dev-8bit.toml | 1 +
.../exolabs--FLUX.1-Krea-dev.toml | 1 +
.../exolabs--FLUX.1-dev-4bit.toml | 1 +
.../exolabs--FLUX.1-dev-8bit.toml | 1 +
.../image_model_cards/exolabs--FLUX.1-dev.toml | 1 +
.../exolabs--FLUX.1-schnell-4bit.toml | 1 +
.../exolabs--FLUX.1-schnell-8bit.toml | 1 +
.../image_model_cards/exolabs--FLUX.1-schnell.toml | 1 +
.../exolabs--Qwen-Image-4bit.toml | 1 +
.../exolabs--Qwen-Image-8bit.toml | 1 +
.../exolabs--Qwen-Image-Edit-2509-4bit.toml | 1 +
.../exolabs--Qwen-Image-Edit-2509-8bit.toml | 1 +
.../exolabs--Qwen-Image-Edit-2509.toml | 1 +
.../image_model_cards/exolabs--Qwen-Image.toml | 1 +
.../mlx-community--DeepSeek-V3.1-4bit.toml | 2 +-
.../mlx-community--DeepSeek-V3.1-8bit.toml | 2 +-
.../mlx-community--DeepSeek-V3.2-4bit.toml | 2 +-
.../mlx-community--DeepSeek-V3.2-8bit.toml | 2 +-
.../mlx-community--DeepSeek-V4-Flash.toml | 2 +-
.../mlx-community--DeepSeek-V4-Pro.toml | 2 +-
.../mlx-community--GLM-4.5-Air-8bit.toml | 2 +-
.../mlx-community--GLM-4.5-Air-bf16.toml | 2 +-
.../mlx-community--GLM-4.7-4bit.toml | 2 +-
.../mlx-community--GLM-4.7-6bit.toml | 2 +-
.../mlx-community--GLM-4.7-8bit-gs32.toml | 2 +-
.../mlx-community--GLM-4.7-Flash-4bit.toml | 2 +-
.../mlx-community--GLM-4.7-Flash-5bit.toml | 2 +-
.../mlx-community--GLM-4.7-Flash-6bit.toml | 2 +-
.../mlx-community--GLM-4.7-Flash-8bit.toml | 2 +-
.../mlx-community--GLM-5-8bit.toml | 2 +-
.../mlx-community--GLM-5-MXFP4-Q8.toml | 2 +-
.../mlx-community--GLM-5-bf16.toml | 2 +-
.../mlx-community--GLM-5.1-DQ4plus-q8.toml | 2 +-
.../mlx-community--GLM-5.1-MXFP4-Q8.toml | 2 +-
.../mlx-community--GLM-5.1.toml | 2 +-
.../mlx-community--Kimi-K2-Instruct-4bit.toml | 2 +-
.../mlx-community--Kimi-K2-Thinking.toml | 2 +-
.../mlx-community--Kimi-K2.5.toml | 2 +-
.../mlx-community--Kimi-K2.6-mlx-DQ3_K_M-q8.toml | 2 +-
...y--Llama-3.1-Nemotron-70B-Instruct-HF-4bit.toml | 2 +-
...y--Llama-3.1-Nemotron-70B-Instruct-HF-8bit.toml | 2 +-
...y--Llama-3.1-Nemotron-70B-Instruct-HF-bf16.toml | 2 +-
...nity--Llama-3.1-Nemotron-Nano-4B-v1.1-4bit.toml | 2 +-
...nity--Llama-3.1-Nemotron-Nano-4B-v1.1-8bit.toml | 2 +-
...nity--Llama-3.1-Nemotron-Nano-4B-v1.1-bf16.toml | 2 +-
.../mlx-community--Llama-3.2-1B-Instruct-4bit.toml | 2 +-
.../mlx-community--Llama-3.2-3B-Instruct-4bit.toml | 2 +-
.../mlx-community--Llama-3.2-3B-Instruct-8bit.toml | 2 +-
...mlx-community--Llama-3.3-70B-Instruct-4bit.toml | 2 +-
...mlx-community--Llama-3.3-70B-Instruct-8bit.toml | 2 +-
...ommunity--Meta-Llama-3.1-70B-Instruct-4bit.toml | 2 +-
...community--Meta-Llama-3.1-8B-Instruct-4bit.toml | 2 +-
...community--Meta-Llama-3.1-8B-Instruct-8bit.toml | 2 +-
...community--Meta-Llama-3.1-8B-Instruct-bf16.toml | 2 +-
.../mlx-community--MiniMax-M2.1-3bit.toml | 2 +-
.../mlx-community--MiniMax-M2.1-8bit.toml | 2 +-
.../mlx-community--MiniMax-M2.5-4bit.toml | 2 +-
.../mlx-community--MiniMax-M2.5-6bit.toml | 2 +-
.../mlx-community--MiniMax-M2.5-8bit.toml | 2 +-
.../mlx-community--MiniMax-M2.7-4bit-mxfp4.toml | 2 +-
.../mlx-community--MiniMax-M2.7-4bit.toml | 2 +-
.../mlx-community--MiniMax-M2.7-5bit.toml | 2 +-
.../mlx-community--MiniMax-M2.7-6bit.toml | 2 +-
.../mlx-community--MiniMax-M2.7-8bit.toml | 2 +-
.../mlx-community--MiniMax-M2.7.toml | 2 +-
...y--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-4Bit.toml | 2 +-
...y--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-5Bit.toml | 2 +-
...y--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-6Bit.toml | 2 +-
...y--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-8Bit.toml | 2 +-
...y--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-BF16.toml | 2 +-
...--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-MXFP4.toml | 2 +-
...nity--NVIDIA-Nemotron-3-Nano-30B-A3B-NVFP4.toml | 2 +-
...ommunity--NVIDIA-Nemotron-Nano-9B-v2-4bits.toml | 2 +-
...community--NVIDIA-Nemotron-Nano-9B-v2-6bit.toml | 2 +-
.../mlx-community--Qwen3-0.6B-4bit.toml | 2 +-
.../mlx-community--Qwen3-0.6B-8bit.toml | 2 +-
...munity--Qwen3-235B-A22B-Instruct-2507-4bit.toml | 2 +-
...munity--Qwen3-235B-A22B-Instruct-2507-8bit.toml | 2 +-
.../mlx-community--Qwen3-30B-A3B-4bit.toml | 2 +-
.../mlx-community--Qwen3-30B-A3B-8bit.toml | 2 +-
...unity--Qwen3-Coder-480B-A35B-Instruct-4bit.toml | 2 +-
...unity--Qwen3-Coder-480B-A35B-Instruct-8bit.toml | 2 +-
.../mlx-community--Qwen3-Coder-Next-4bit.toml | 2 +-
.../mlx-community--Qwen3-Coder-Next-5bit.toml | 2 +-
.../mlx-community--Qwen3-Coder-Next-6bit.toml | 2 +-
.../mlx-community--Qwen3-Coder-Next-8bit.toml | 2 +-
.../mlx-community--Qwen3-Coder-Next-bf16.toml | 2 +-
...ommunity--Qwen3-Next-80B-A3B-Instruct-4bit.toml | 2 +-
...ommunity--Qwen3-Next-80B-A3B-Instruct-8bit.toml | 2 +-
...ommunity--Qwen3-Next-80B-A3B-Thinking-4bit.toml | 2 +-
...ommunity--Qwen3-Next-80B-A3B-Thinking-8bit.toml | 2 +-
.../mlx-community--Qwen3-VL-4B-Instruct-4bit.toml | 2 +-
.../mlx-community--Qwen3.5-122B-A10B-4bit.toml | 2 +-
.../mlx-community--Qwen3.5-122B-A10B-6bit.toml | 2 +-
.../mlx-community--Qwen3.5-122B-A10B-8bit.toml | 2 +-
.../mlx-community--Qwen3.5-122B-A10B-bf16.toml | 2 +-
.../mlx-community--Qwen3.5-27B-4bit.toml | 2 +-
.../mlx-community--Qwen3.5-27B-8bit.toml | 2 +-
.../mlx-community--Qwen3.5-2B-MLX-8bit.toml | 2 +-
.../mlx-community--Qwen3.5-35B-A3B-4bit.toml | 2 +-
.../mlx-community--Qwen3.5-35B-A3B-8bit.toml | 2 +-
.../mlx-community--Qwen3.5-397B-A17B-4bit.toml | 2 +-
.../mlx-community--Qwen3.5-397B-A17B-6bit.toml | 2 +-
.../mlx-community--Qwen3.5-397B-A17B-8bit.toml | 2 +-
.../mlx-community--Qwen3.5-9B-4bit.toml | 2 +-
.../mlx-community--Qwen3.5-9B-8bit.toml | 2 +-
.../mlx-community--Qwen3.6-27B-4bit.toml | 2 +-
.../mlx-community--Qwen3.6-27B-8bit.toml | 2 +-
.../mlx-community--Qwen3.6-27B-bf16.toml | 2 +-
.../mlx-community--Qwen3.6-35B-A3B-4bit.toml | 2 +-
.../mlx-community--Qwen3.6-35B-A3B-5bit.toml | 2 +-
.../mlx-community--Qwen3.6-35B-A3B-8bit.toml | 2 +-
.../mlx-community--Qwen3.6-35B-A3B-bf16.toml | 2 +-
.../mlx-community--Step-3.5-Flash-4bit.toml | 2 +-
.../mlx-community--Step-3.5-Flash-6bit.toml | 2 +-
.../mlx-community--Step-3.5-Flash-8Bit.toml | 2 +-
.../mlx-community--gemma-4-26b-a4b-it-4bit.toml | 2 +-
.../mlx-community--gemma-4-26b-a4b-it-6bit.toml | 2 +-
.../mlx-community--gemma-4-26b-a4b-it-8bit.toml | 2 +-
.../mlx-community--gemma-4-26b-a4b-it-bf16.toml | 2 +-
.../mlx-community--gemma-4-31b-it-4bit.toml | 2 +-
.../mlx-community--gemma-4-31b-it-6bit.toml | 2 +-
.../mlx-community--gemma-4-31b-it-8bit.toml | 2 +-
.../mlx-community--gemma-4-31b-it-bf16.toml | 2 +-
.../mlx-community--gemma-4-e2b-it-4bit.toml | 2 +-
.../mlx-community--gemma-4-e2b-it-6bit.toml | 2 +-
.../mlx-community--gemma-4-e2b-it-8bit.toml | 2 +-
.../mlx-community--gemma-4-e2b-it-bf16.toml | 2 +-
.../mlx-community--gemma-4-e4b-it-4bit.toml | 2 +-
.../mlx-community--gemma-4-e4b-it-6bit.toml | 2 +-
.../mlx-community--gemma-4-e4b-it-8bit.toml | 2 +-
.../mlx-community--gemma-4-e4b-it-bf16.toml | 2 +-
.../mlx-community--gpt-oss-120b-MXFP4-Q8.toml | 2 +-
.../mlx-community--gpt-oss-20b-MXFP4-Q8.toml | 2 +-
...mlx-community--llama-3.3-70b-instruct-fp16.toml | 2 +-
.../moonshotai--Kimi-K2.6.toml | 2 +-
src/exo/api/main.py | 2 +
src/exo/download/impl_shard_downloader.py | 1 +
src/exo/download/shard_downloader.py | 2 +
src/exo/download/tests/test_cancel_download.py | 2 +
.../tests/test_download_status_not_lost.py | 2 +
src/exo/download/tests/test_re_download.py | 2 +
src/exo/master/main.py | 1 +
src/exo/master/placement.py | 30 +
src/exo/master/tests/test_master.py | 38 +-
src/exo/master/tests/test_placement.py | 156 +-
src/exo/master/tests/test_placement_utils.py | 7 +
src/exo/shared/apply.py | 6 +
src/exo/shared/models/model_cards.py | 5 +
src/exo/shared/tests/conftest.py | 2 +
.../test_apply/test_apply_custom_model_cards.py | 2 +
src/exo/shared/types/backends.py | 8 +
src/exo/shared/types/state.py | 2 +
src/exo/utils/info_gatherer/info_gatherer.py | 33 +
src/exo/worker/tests/unittests/conftest.py | 2 +
.../worker/tests/unittests/test_mlx/conftest.py | 3 +
.../test_mlx/test_pipeline_prefill_callbacks.py | 2 +
447 files changed, 3660 insertions(+), 144 deletions(-)
diff --git a/.mlx_typings/.gitkeep b/.typings/.gitkeep
similarity index 100%
rename from .mlx_typings/.gitkeep
rename to .typings/.gitkeep
diff --git a/.mlx_typings/mflux/__init__.pyi b/.typings/mflux/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/__init__.pyi
rename to .typings/mflux/__init__.pyi
diff --git a/.mlx_typings/mflux/callbacks/__init__.pyi b/.typings/mflux/callbacks/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/callbacks/__init__.pyi
rename to .typings/mflux/callbacks/__init__.pyi
diff --git a/.mlx_typings/mflux/callbacks/callback.pyi b/.typings/mflux/callbacks/callback.pyi
similarity index 100%
rename from .mlx_typings/mflux/callbacks/callback.pyi
rename to .typings/mflux/callbacks/callback.pyi
diff --git a/.mlx_typings/mflux/callbacks/callback_registry.pyi b/.typings/mflux/callbacks/callback_registry.pyi
similarity index 100%
rename from .mlx_typings/mflux/callbacks/callback_registry.pyi
rename to .typings/mflux/callbacks/callback_registry.pyi
diff --git a/.mlx_typings/mflux/callbacks/generation_context.pyi b/.typings/mflux/callbacks/generation_context.pyi
similarity index 100%
rename from .mlx_typings/mflux/callbacks/generation_context.pyi
rename to .typings/mflux/callbacks/generation_context.pyi
diff --git a/.mlx_typings/mflux/cli/__init__.pyi b/.typings/mflux/cli/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/cli/__init__.pyi
rename to .typings/mflux/cli/__init__.pyi
diff --git a/.mlx_typings/mflux/cli/defaults/defaults.pyi b/.typings/mflux/cli/defaults/defaults.pyi
similarity index 100%
rename from .mlx_typings/mflux/cli/defaults/defaults.pyi
rename to .typings/mflux/cli/defaults/defaults.pyi
diff --git a/.mlx_typings/mflux/models/__init__.pyi b/.typings/mflux/models/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/__init__.pyi
rename to .typings/mflux/models/__init__.pyi
diff --git a/.mlx_typings/mflux/models/common/__init__.pyi b/.typings/mflux/models/common/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/__init__.pyi
rename to .typings/mflux/models/common/__init__.pyi
diff --git a/.mlx_typings/mflux/models/common/cli/__init__.pyi b/.typings/mflux/models/common/cli/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/cli/__init__.pyi
rename to .typings/mflux/models/common/cli/__init__.pyi
diff --git a/.mlx_typings/mflux/models/common/config/__init__.pyi b/.typings/mflux/models/common/config/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/config/__init__.pyi
rename to .typings/mflux/models/common/config/__init__.pyi
diff --git a/.mlx_typings/mflux/models/common/config/config.pyi b/.typings/mflux/models/common/config/config.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/config/config.pyi
rename to .typings/mflux/models/common/config/config.pyi
diff --git a/.mlx_typings/mflux/models/common/config/model_config.pyi b/.typings/mflux/models/common/config/model_config.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/config/model_config.pyi
rename to .typings/mflux/models/common/config/model_config.pyi
diff --git a/.mlx_typings/mflux/models/common/latent_creator/__init__.pyi b/.typings/mflux/models/common/latent_creator/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/latent_creator/__init__.pyi
rename to .typings/mflux/models/common/latent_creator/__init__.pyi
diff --git a/.mlx_typings/mflux/models/common/latent_creator/latent_creator.pyi b/.typings/mflux/models/common/latent_creator/latent_creator.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/latent_creator/latent_creator.pyi
rename to .typings/mflux/models/common/latent_creator/latent_creator.pyi
diff --git a/.mlx_typings/mflux/models/common/lora/__init__.pyi b/.typings/mflux/models/common/lora/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/lora/__init__.pyi
rename to .typings/mflux/models/common/lora/__init__.pyi
diff --git a/.mlx_typings/mflux/models/common/lora/layer/fused_linear_lora_layer.pyi b/.typings/mflux/models/common/lora/layer/fused_linear_lora_layer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/lora/layer/fused_linear_lora_layer.pyi
rename to .typings/mflux/models/common/lora/layer/fused_linear_lora_layer.pyi
diff --git a/.mlx_typings/mflux/models/common/lora/layer/linear_lora_layer.pyi b/.typings/mflux/models/common/lora/layer/linear_lora_layer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/lora/layer/linear_lora_layer.pyi
rename to .typings/mflux/models/common/lora/layer/linear_lora_layer.pyi
diff --git a/.mlx_typings/mflux/models/common/lora/mapping/lora_loader.pyi b/.typings/mflux/models/common/lora/mapping/lora_loader.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/lora/mapping/lora_loader.pyi
rename to .typings/mflux/models/common/lora/mapping/lora_loader.pyi
diff --git a/.mlx_typings/mflux/models/common/lora/mapping/lora_mapping.pyi b/.typings/mflux/models/common/lora/mapping/lora_mapping.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/lora/mapping/lora_mapping.pyi
rename to .typings/mflux/models/common/lora/mapping/lora_mapping.pyi
diff --git a/.mlx_typings/mflux/models/common/lora/mapping/lora_saver.pyi b/.typings/mflux/models/common/lora/mapping/lora_saver.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/lora/mapping/lora_saver.pyi
rename to .typings/mflux/models/common/lora/mapping/lora_saver.pyi
diff --git a/.mlx_typings/mflux/models/common/lora/mapping/lora_transforms.pyi b/.typings/mflux/models/common/lora/mapping/lora_transforms.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/lora/mapping/lora_transforms.pyi
rename to .typings/mflux/models/common/lora/mapping/lora_transforms.pyi
diff --git a/.mlx_typings/mflux/models/common/resolution/__init__.pyi b/.typings/mflux/models/common/resolution/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/resolution/__init__.pyi
rename to .typings/mflux/models/common/resolution/__init__.pyi
diff --git a/.mlx_typings/mflux/models/common/resolution/actions.pyi b/.typings/mflux/models/common/resolution/actions.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/resolution/actions.pyi
rename to .typings/mflux/models/common/resolution/actions.pyi
diff --git a/.mlx_typings/mflux/models/common/resolution/config_resolution.pyi b/.typings/mflux/models/common/resolution/config_resolution.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/resolution/config_resolution.pyi
rename to .typings/mflux/models/common/resolution/config_resolution.pyi
diff --git a/.mlx_typings/mflux/models/common/resolution/lora_resolution.pyi b/.typings/mflux/models/common/resolution/lora_resolution.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/resolution/lora_resolution.pyi
rename to .typings/mflux/models/common/resolution/lora_resolution.pyi
diff --git a/.mlx_typings/mflux/models/common/resolution/path_resolution.pyi b/.typings/mflux/models/common/resolution/path_resolution.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/resolution/path_resolution.pyi
rename to .typings/mflux/models/common/resolution/path_resolution.pyi
diff --git a/.mlx_typings/mflux/models/common/resolution/quantization_resolution.pyi b/.typings/mflux/models/common/resolution/quantization_resolution.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/resolution/quantization_resolution.pyi
rename to .typings/mflux/models/common/resolution/quantization_resolution.pyi
diff --git a/.mlx_typings/mflux/models/common/schedulers/__init__.pyi b/.typings/mflux/models/common/schedulers/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/schedulers/__init__.pyi
rename to .typings/mflux/models/common/schedulers/__init__.pyi
diff --git a/.mlx_typings/mflux/models/common/schedulers/base_scheduler.pyi b/.typings/mflux/models/common/schedulers/base_scheduler.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/schedulers/base_scheduler.pyi
rename to .typings/mflux/models/common/schedulers/base_scheduler.pyi
diff --git a/.mlx_typings/mflux/models/common/schedulers/flow_match_euler_discrete_scheduler.pyi b/.typings/mflux/models/common/schedulers/flow_match_euler_discrete_scheduler.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/schedulers/flow_match_euler_discrete_scheduler.pyi
rename to .typings/mflux/models/common/schedulers/flow_match_euler_discrete_scheduler.pyi
diff --git a/.mlx_typings/mflux/models/common/schedulers/linear_scheduler.pyi b/.typings/mflux/models/common/schedulers/linear_scheduler.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/schedulers/linear_scheduler.pyi
rename to .typings/mflux/models/common/schedulers/linear_scheduler.pyi
diff --git a/.mlx_typings/mflux/models/common/schedulers/seedvr2_euler_scheduler.pyi b/.typings/mflux/models/common/schedulers/seedvr2_euler_scheduler.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/schedulers/seedvr2_euler_scheduler.pyi
rename to .typings/mflux/models/common/schedulers/seedvr2_euler_scheduler.pyi
diff --git a/.mlx_typings/mflux/models/common/tokenizer/__init__.pyi b/.typings/mflux/models/common/tokenizer/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/tokenizer/__init__.pyi
rename to .typings/mflux/models/common/tokenizer/__init__.pyi
diff --git a/.mlx_typings/mflux/models/common/tokenizer/tokenizer.pyi b/.typings/mflux/models/common/tokenizer/tokenizer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/tokenizer/tokenizer.pyi
rename to .typings/mflux/models/common/tokenizer/tokenizer.pyi
diff --git a/.mlx_typings/mflux/models/common/tokenizer/tokenizer_loader.pyi b/.typings/mflux/models/common/tokenizer/tokenizer_loader.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/tokenizer/tokenizer_loader.pyi
rename to .typings/mflux/models/common/tokenizer/tokenizer_loader.pyi
diff --git a/.mlx_typings/mflux/models/common/tokenizer/tokenizer_output.pyi b/.typings/mflux/models/common/tokenizer/tokenizer_output.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/tokenizer/tokenizer_output.pyi
rename to .typings/mflux/models/common/tokenizer/tokenizer_output.pyi
diff --git a/.mlx_typings/mflux/models/common/vae/__init__.pyi b/.typings/mflux/models/common/vae/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/vae/__init__.pyi
rename to .typings/mflux/models/common/vae/__init__.pyi
diff --git a/.mlx_typings/mflux/models/common/vae/tiling_config.pyi b/.typings/mflux/models/common/vae/tiling_config.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/vae/tiling_config.pyi
rename to .typings/mflux/models/common/vae/tiling_config.pyi
diff --git a/.mlx_typings/mflux/models/common/vae/vae_tiler.pyi b/.typings/mflux/models/common/vae/vae_tiler.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/vae/vae_tiler.pyi
rename to .typings/mflux/models/common/vae/vae_tiler.pyi
diff --git a/.mlx_typings/mflux/models/common/vae/vae_util.pyi b/.typings/mflux/models/common/vae/vae_util.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/vae/vae_util.pyi
rename to .typings/mflux/models/common/vae/vae_util.pyi
diff --git a/.mlx_typings/mflux/models/common/weights/__init__.pyi b/.typings/mflux/models/common/weights/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/weights/__init__.pyi
rename to .typings/mflux/models/common/weights/__init__.pyi
diff --git a/.mlx_typings/mflux/models/common/weights/loading/loaded_weights.pyi b/.typings/mflux/models/common/weights/loading/loaded_weights.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/weights/loading/loaded_weights.pyi
rename to .typings/mflux/models/common/weights/loading/loaded_weights.pyi
diff --git a/.mlx_typings/mflux/models/common/weights/loading/weight_applier.pyi b/.typings/mflux/models/common/weights/loading/weight_applier.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/weights/loading/weight_applier.pyi
rename to .typings/mflux/models/common/weights/loading/weight_applier.pyi
diff --git a/.mlx_typings/mflux/models/common/weights/loading/weight_definition.pyi b/.typings/mflux/models/common/weights/loading/weight_definition.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/weights/loading/weight_definition.pyi
rename to .typings/mflux/models/common/weights/loading/weight_definition.pyi
diff --git a/.mlx_typings/mflux/models/common/weights/loading/weight_loader.pyi b/.typings/mflux/models/common/weights/loading/weight_loader.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/weights/loading/weight_loader.pyi
rename to .typings/mflux/models/common/weights/loading/weight_loader.pyi
diff --git a/.mlx_typings/mflux/models/common/weights/mapping/weight_mapper.pyi b/.typings/mflux/models/common/weights/mapping/weight_mapper.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/weights/mapping/weight_mapper.pyi
rename to .typings/mflux/models/common/weights/mapping/weight_mapper.pyi
diff --git a/.mlx_typings/mflux/models/common/weights/mapping/weight_mapping.pyi b/.typings/mflux/models/common/weights/mapping/weight_mapping.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/weights/mapping/weight_mapping.pyi
rename to .typings/mflux/models/common/weights/mapping/weight_mapping.pyi
diff --git a/.mlx_typings/mflux/models/common/weights/mapping/weight_transforms.pyi b/.typings/mflux/models/common/weights/mapping/weight_transforms.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/weights/mapping/weight_transforms.pyi
rename to .typings/mflux/models/common/weights/mapping/weight_transforms.pyi
diff --git a/.mlx_typings/mflux/models/common/weights/saving/model_saver.pyi b/.typings/mflux/models/common/weights/saving/model_saver.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/common/weights/saving/model_saver.pyi
rename to .typings/mflux/models/common/weights/saving/model_saver.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/depth_pro_initializer.pyi b/.typings/mflux/models/depth_pro/depth_pro_initializer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/depth_pro_initializer.pyi
rename to .typings/mflux/models/depth_pro/depth_pro_initializer.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/decoder/feature_fusion_block_2d.pyi b/.typings/mflux/models/depth_pro/model/decoder/feature_fusion_block_2d.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/decoder/feature_fusion_block_2d.pyi
rename to .typings/mflux/models/depth_pro/model/decoder/feature_fusion_block_2d.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/decoder/multires_conv_decoder.pyi b/.typings/mflux/models/depth_pro/model/decoder/multires_conv_decoder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/decoder/multires_conv_decoder.pyi
rename to .typings/mflux/models/depth_pro/model/decoder/multires_conv_decoder.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/decoder/residual_block.pyi b/.typings/mflux/models/depth_pro/model/decoder/residual_block.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/decoder/residual_block.pyi
rename to .typings/mflux/models/depth_pro/model/decoder/residual_block.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/depth_pro.pyi b/.typings/mflux/models/depth_pro/model/depth_pro.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/depth_pro.pyi
rename to .typings/mflux/models/depth_pro/model/depth_pro.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/depth_pro_model.pyi b/.typings/mflux/models/depth_pro/model/depth_pro_model.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/depth_pro_model.pyi
rename to .typings/mflux/models/depth_pro/model/depth_pro_model.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/depth_pro_util.pyi b/.typings/mflux/models/depth_pro/model/depth_pro_util.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/depth_pro_util.pyi
rename to .typings/mflux/models/depth_pro/model/depth_pro_util.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/dino_v2/attention.pyi b/.typings/mflux/models/depth_pro/model/dino_v2/attention.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/dino_v2/attention.pyi
rename to .typings/mflux/models/depth_pro/model/dino_v2/attention.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/dino_v2/dino_vision_transformer.pyi b/.typings/mflux/models/depth_pro/model/dino_v2/dino_vision_transformer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/dino_v2/dino_vision_transformer.pyi
rename to .typings/mflux/models/depth_pro/model/dino_v2/dino_vision_transformer.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/dino_v2/layer_scale.pyi b/.typings/mflux/models/depth_pro/model/dino_v2/layer_scale.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/dino_v2/layer_scale.pyi
rename to .typings/mflux/models/depth_pro/model/dino_v2/layer_scale.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/dino_v2/mlp.pyi b/.typings/mflux/models/depth_pro/model/dino_v2/mlp.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/dino_v2/mlp.pyi
rename to .typings/mflux/models/depth_pro/model/dino_v2/mlp.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/dino_v2/patch_embed.pyi b/.typings/mflux/models/depth_pro/model/dino_v2/patch_embed.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/dino_v2/patch_embed.pyi
rename to .typings/mflux/models/depth_pro/model/dino_v2/patch_embed.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/dino_v2/transformer_block.pyi b/.typings/mflux/models/depth_pro/model/dino_v2/transformer_block.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/dino_v2/transformer_block.pyi
rename to .typings/mflux/models/depth_pro/model/dino_v2/transformer_block.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/encoder/depth_pro_encoder.pyi b/.typings/mflux/models/depth_pro/model/encoder/depth_pro_encoder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/encoder/depth_pro_encoder.pyi
rename to .typings/mflux/models/depth_pro/model/encoder/depth_pro_encoder.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/encoder/upsample_block.pyi b/.typings/mflux/models/depth_pro/model/encoder/upsample_block.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/encoder/upsample_block.pyi
rename to .typings/mflux/models/depth_pro/model/encoder/upsample_block.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/model/head/fov_head.pyi b/.typings/mflux/models/depth_pro/model/head/fov_head.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/model/head/fov_head.pyi
rename to .typings/mflux/models/depth_pro/model/head/fov_head.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/weights/depth_pro_weight_definition.pyi b/.typings/mflux/models/depth_pro/weights/depth_pro_weight_definition.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/weights/depth_pro_weight_definition.pyi
rename to .typings/mflux/models/depth_pro/weights/depth_pro_weight_definition.pyi
diff --git a/.mlx_typings/mflux/models/depth_pro/weights/depth_pro_weight_mapping.pyi b/.typings/mflux/models/depth_pro/weights/depth_pro_weight_mapping.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/depth_pro/weights/depth_pro_weight_mapping.pyi
rename to .typings/mflux/models/depth_pro/weights/depth_pro_weight_mapping.pyi
diff --git a/.mlx_typings/mflux/models/fibo/latent_creator/fibo_latent_creator.pyi b/.typings/mflux/models/fibo/latent_creator/fibo_latent_creator.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/fibo/latent_creator/fibo_latent_creator.pyi
rename to .typings/mflux/models/fibo/latent_creator/fibo_latent_creator.pyi
diff --git a/.mlx_typings/mflux/models/fibo/weights/fibo_weight_definition.pyi b/.typings/mflux/models/fibo/weights/fibo_weight_definition.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/fibo/weights/fibo_weight_definition.pyi
rename to .typings/mflux/models/fibo/weights/fibo_weight_definition.pyi
diff --git a/.mlx_typings/mflux/models/fibo/weights/fibo_weight_mapping.pyi b/.typings/mflux/models/fibo/weights/fibo_weight_mapping.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/fibo/weights/fibo_weight_mapping.pyi
rename to .typings/mflux/models/fibo/weights/fibo_weight_mapping.pyi
diff --git a/.mlx_typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_image_processor.pyi b/.typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_image_processor.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_image_processor.pyi
rename to .typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_image_processor.pyi
diff --git a/.mlx_typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_processor.pyi b/.typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_processor.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_processor.pyi
rename to .typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_processor.pyi
diff --git a/.mlx_typings/mflux/models/fibo_vlm/weights/fibo_vlm_weight_definition.pyi b/.typings/mflux/models/fibo_vlm/weights/fibo_vlm_weight_definition.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/fibo_vlm/weights/fibo_vlm_weight_definition.pyi
rename to .typings/mflux/models/fibo_vlm/weights/fibo_vlm_weight_definition.pyi
diff --git a/.mlx_typings/mflux/models/fibo_vlm/weights/fibo_vlm_weight_mapping.pyi b/.typings/mflux/models/fibo_vlm/weights/fibo_vlm_weight_mapping.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/fibo_vlm/weights/fibo_vlm_weight_mapping.pyi
rename to .typings/mflux/models/fibo_vlm/weights/fibo_vlm_weight_mapping.pyi
diff --git a/.mlx_typings/mflux/models/flux/__init__.pyi b/.typings/mflux/models/flux/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/__init__.pyi
rename to .typings/mflux/models/flux/__init__.pyi
diff --git a/.mlx_typings/mflux/models/flux/cli/__init__.pyi b/.typings/mflux/models/flux/cli/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/cli/__init__.pyi
rename to .typings/mflux/models/flux/cli/__init__.pyi
diff --git a/.mlx_typings/mflux/models/flux/flux_initializer.pyi b/.typings/mflux/models/flux/flux_initializer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/flux_initializer.pyi
rename to .typings/mflux/models/flux/flux_initializer.pyi
diff --git a/.mlx_typings/mflux/models/flux/latent_creator/__init__.pyi b/.typings/mflux/models/flux/latent_creator/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/latent_creator/__init__.pyi
rename to .typings/mflux/models/flux/latent_creator/__init__.pyi
diff --git a/.mlx_typings/mflux/models/flux/latent_creator/flux_latent_creator.pyi b/.typings/mflux/models/flux/latent_creator/flux_latent_creator.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/latent_creator/flux_latent_creator.pyi
rename to .typings/mflux/models/flux/latent_creator/flux_latent_creator.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/__init__.pyi b/.typings/mflux/models/flux/model/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/__init__.pyi
rename to .typings/mflux/models/flux/model/__init__.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_embeddings.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_embeddings.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_embeddings.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_embeddings.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_encoder.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_encoder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_encoder.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_encoder.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_encoder_layer.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_encoder_layer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_encoder_layer.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_encoder_layer.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_mlp.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_mlp.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_mlp.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_mlp.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_sdpa_attention.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_sdpa_attention.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_sdpa_attention.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_sdpa_attention.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_text_model.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_text_model.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_text_model.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_text_model.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/encoder_clip.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/encoder_clip.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/encoder_clip.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/clip_encoder/encoder_clip.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/prompt_encoder.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/prompt_encoder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/prompt_encoder.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/prompt_encoder.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_attention.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_attention.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_attention.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_attention.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_block.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_block.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_block.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_block.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_dense_relu_dense.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_dense_relu_dense.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_dense_relu_dense.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_dense_relu_dense.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_encoder.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_encoder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_encoder.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_encoder.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_feed_forward.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_feed_forward.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_feed_forward.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_feed_forward.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_layer_norm.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_layer_norm.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_layer_norm.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_layer_norm.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_self_attention.pyi b/.typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_self_attention.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_self_attention.pyi
rename to .typings/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_self_attention.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_continuous.pyi b/.typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_continuous.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_continuous.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_continuous.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_zero.pyi b/.typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_zero.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_zero.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_zero.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_zero_single.pyi b/.typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_zero_single.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_zero_single.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/ada_layer_norm_zero_single.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/common/attention_utils.pyi b/.typings/mflux/models/flux/model/flux_transformer/common/attention_utils.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/common/attention_utils.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/common/attention_utils.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/embed_nd.pyi b/.typings/mflux/models/flux/model/flux_transformer/embed_nd.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/embed_nd.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/embed_nd.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/feed_forward.pyi b/.typings/mflux/models/flux/model/flux_transformer/feed_forward.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/feed_forward.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/feed_forward.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/guidance_embedder.pyi b/.typings/mflux/models/flux/model/flux_transformer/guidance_embedder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/guidance_embedder.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/guidance_embedder.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/joint_attention.pyi b/.typings/mflux/models/flux/model/flux_transformer/joint_attention.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/joint_attention.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/joint_attention.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/joint_transformer_block.pyi b/.typings/mflux/models/flux/model/flux_transformer/joint_transformer_block.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/joint_transformer_block.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/joint_transformer_block.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/single_block_attention.pyi b/.typings/mflux/models/flux/model/flux_transformer/single_block_attention.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/single_block_attention.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/single_block_attention.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/single_transformer_block.pyi b/.typings/mflux/models/flux/model/flux_transformer/single_transformer_block.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/single_transformer_block.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/single_transformer_block.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/text_embedder.pyi b/.typings/mflux/models/flux/model/flux_transformer/text_embedder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/text_embedder.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/text_embedder.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/time_text_embed.pyi b/.typings/mflux/models/flux/model/flux_transformer/time_text_embed.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/time_text_embed.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/time_text_embed.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/timestep_embedder.pyi b/.typings/mflux/models/flux/model/flux_transformer/timestep_embedder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/timestep_embedder.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/timestep_embedder.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_transformer/transformer.pyi b/.typings/mflux/models/flux/model/flux_transformer/transformer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_transformer/transformer.pyi
rename to .typings/mflux/models/flux/model/flux_transformer/transformer.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/common/attention.pyi b/.typings/mflux/models/flux/model/flux_vae/common/attention.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/common/attention.pyi
rename to .typings/mflux/models/flux/model/flux_vae/common/attention.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/common/resnet_block_2d.pyi b/.typings/mflux/models/flux/model/flux_vae/common/resnet_block_2d.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/common/resnet_block_2d.pyi
rename to .typings/mflux/models/flux/model/flux_vae/common/resnet_block_2d.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/common/unet_mid_block.pyi b/.typings/mflux/models/flux/model/flux_vae/common/unet_mid_block.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/common/unet_mid_block.pyi
rename to .typings/mflux/models/flux/model/flux_vae/common/unet_mid_block.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/decoder/conv_in.pyi b/.typings/mflux/models/flux/model/flux_vae/decoder/conv_in.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/decoder/conv_in.pyi
rename to .typings/mflux/models/flux/model/flux_vae/decoder/conv_in.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/decoder/conv_norm_out.pyi b/.typings/mflux/models/flux/model/flux_vae/decoder/conv_norm_out.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/decoder/conv_norm_out.pyi
rename to .typings/mflux/models/flux/model/flux_vae/decoder/conv_norm_out.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/decoder/conv_out.pyi b/.typings/mflux/models/flux/model/flux_vae/decoder/conv_out.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/decoder/conv_out.pyi
rename to .typings/mflux/models/flux/model/flux_vae/decoder/conv_out.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/decoder/decoder.pyi b/.typings/mflux/models/flux/model/flux_vae/decoder/decoder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/decoder/decoder.pyi
rename to .typings/mflux/models/flux/model/flux_vae/decoder/decoder.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/decoder/up_block_1_or_2.pyi b/.typings/mflux/models/flux/model/flux_vae/decoder/up_block_1_or_2.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/decoder/up_block_1_or_2.pyi
rename to .typings/mflux/models/flux/model/flux_vae/decoder/up_block_1_or_2.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/decoder/up_block_3.pyi b/.typings/mflux/models/flux/model/flux_vae/decoder/up_block_3.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/decoder/up_block_3.pyi
rename to .typings/mflux/models/flux/model/flux_vae/decoder/up_block_3.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/decoder/up_block_4.pyi b/.typings/mflux/models/flux/model/flux_vae/decoder/up_block_4.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/decoder/up_block_4.pyi
rename to .typings/mflux/models/flux/model/flux_vae/decoder/up_block_4.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/decoder/up_sampler.pyi b/.typings/mflux/models/flux/model/flux_vae/decoder/up_sampler.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/decoder/up_sampler.pyi
rename to .typings/mflux/models/flux/model/flux_vae/decoder/up_sampler.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/encoder/conv_in.pyi b/.typings/mflux/models/flux/model/flux_vae/encoder/conv_in.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/encoder/conv_in.pyi
rename to .typings/mflux/models/flux/model/flux_vae/encoder/conv_in.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/encoder/conv_norm_out.pyi b/.typings/mflux/models/flux/model/flux_vae/encoder/conv_norm_out.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/encoder/conv_norm_out.pyi
rename to .typings/mflux/models/flux/model/flux_vae/encoder/conv_norm_out.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/encoder/conv_out.pyi b/.typings/mflux/models/flux/model/flux_vae/encoder/conv_out.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/encoder/conv_out.pyi
rename to .typings/mflux/models/flux/model/flux_vae/encoder/conv_out.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_block_1.pyi b/.typings/mflux/models/flux/model/flux_vae/encoder/down_block_1.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_block_1.pyi
rename to .typings/mflux/models/flux/model/flux_vae/encoder/down_block_1.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_block_2.pyi b/.typings/mflux/models/flux/model/flux_vae/encoder/down_block_2.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_block_2.pyi
rename to .typings/mflux/models/flux/model/flux_vae/encoder/down_block_2.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_block_3.pyi b/.typings/mflux/models/flux/model/flux_vae/encoder/down_block_3.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_block_3.pyi
rename to .typings/mflux/models/flux/model/flux_vae/encoder/down_block_3.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_block_4.pyi b/.typings/mflux/models/flux/model/flux_vae/encoder/down_block_4.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_block_4.pyi
rename to .typings/mflux/models/flux/model/flux_vae/encoder/down_block_4.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_sampler.pyi b/.typings/mflux/models/flux/model/flux_vae/encoder/down_sampler.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/encoder/down_sampler.pyi
rename to .typings/mflux/models/flux/model/flux_vae/encoder/down_sampler.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/encoder/encoder.pyi b/.typings/mflux/models/flux/model/flux_vae/encoder/encoder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/encoder/encoder.pyi
rename to .typings/mflux/models/flux/model/flux_vae/encoder/encoder.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/flux_vae/vae.pyi b/.typings/mflux/models/flux/model/flux_vae/vae.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/flux_vae/vae.pyi
rename to .typings/mflux/models/flux/model/flux_vae/vae.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/redux_encoder/redux_encoder.pyi b/.typings/mflux/models/flux/model/redux_encoder/redux_encoder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/redux_encoder/redux_encoder.pyi
rename to .typings/mflux/models/flux/model/redux_encoder/redux_encoder.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_encoder.pyi b/.typings/mflux/models/flux/model/siglip_vision_transformer/siglip_encoder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_encoder.pyi
rename to .typings/mflux/models/flux/model/siglip_vision_transformer/siglip_encoder.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_encoder_layer.pyi b/.typings/mflux/models/flux/model/siglip_vision_transformer/siglip_encoder_layer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_encoder_layer.pyi
rename to .typings/mflux/models/flux/model/siglip_vision_transformer/siglip_encoder_layer.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_mlp.pyi b/.typings/mflux/models/flux/model/siglip_vision_transformer/siglip_mlp.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_mlp.pyi
rename to .typings/mflux/models/flux/model/siglip_vision_transformer/siglip_mlp.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_multi_head_attention_pooling_head.pyi b/.typings/mflux/models/flux/model/siglip_vision_transformer/siglip_multi_head_attention_pooling_head.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_multi_head_attention_pooling_head.pyi
rename to .typings/mflux/models/flux/model/siglip_vision_transformer/siglip_multi_head_attention_pooling_head.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_sdpa_attention.pyi b/.typings/mflux/models/flux/model/siglip_vision_transformer/siglip_sdpa_attention.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_sdpa_attention.pyi
rename to .typings/mflux/models/flux/model/siglip_vision_transformer/siglip_sdpa_attention.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_vision_embeddings.pyi b/.typings/mflux/models/flux/model/siglip_vision_transformer/siglip_vision_embeddings.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_vision_embeddings.pyi
rename to .typings/mflux/models/flux/model/siglip_vision_transformer/siglip_vision_embeddings.pyi
diff --git a/.mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_vision_transformer.pyi b/.typings/mflux/models/flux/model/siglip_vision_transformer/siglip_vision_transformer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/model/siglip_vision_transformer/siglip_vision_transformer.pyi
rename to .typings/mflux/models/flux/model/siglip_vision_transformer/siglip_vision_transformer.pyi
diff --git a/.mlx_typings/mflux/models/flux/variants/__init__.pyi b/.typings/mflux/models/flux/variants/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/variants/__init__.pyi
rename to .typings/mflux/models/flux/variants/__init__.pyi
diff --git a/.mlx_typings/mflux/models/flux/variants/concept_attention/attention_data.pyi b/.typings/mflux/models/flux/variants/concept_attention/attention_data.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/variants/concept_attention/attention_data.pyi
rename to .typings/mflux/models/flux/variants/concept_attention/attention_data.pyi
diff --git a/.mlx_typings/mflux/models/flux/variants/concept_attention/joint_attention_concept.pyi b/.typings/mflux/models/flux/variants/concept_attention/joint_attention_concept.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/variants/concept_attention/joint_attention_concept.pyi
rename to .typings/mflux/models/flux/variants/concept_attention/joint_attention_concept.pyi
diff --git a/.mlx_typings/mflux/models/flux/variants/concept_attention/joint_transformer_block_concept.pyi b/.typings/mflux/models/flux/variants/concept_attention/joint_transformer_block_concept.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/variants/concept_attention/joint_transformer_block_concept.pyi
rename to .typings/mflux/models/flux/variants/concept_attention/joint_transformer_block_concept.pyi
diff --git a/.mlx_typings/mflux/models/flux/variants/concept_attention/transformer_concept.pyi b/.typings/mflux/models/flux/variants/concept_attention/transformer_concept.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/variants/concept_attention/transformer_concept.pyi
rename to .typings/mflux/models/flux/variants/concept_attention/transformer_concept.pyi
diff --git a/.mlx_typings/mflux/models/flux/variants/controlnet/transformer_controlnet.pyi b/.typings/mflux/models/flux/variants/controlnet/transformer_controlnet.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/variants/controlnet/transformer_controlnet.pyi
rename to .typings/mflux/models/flux/variants/controlnet/transformer_controlnet.pyi
diff --git a/.mlx_typings/mflux/models/flux/variants/kontext/__init__.pyi b/.typings/mflux/models/flux/variants/kontext/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/variants/kontext/__init__.pyi
rename to .typings/mflux/models/flux/variants/kontext/__init__.pyi
diff --git a/.mlx_typings/mflux/models/flux/variants/kontext/flux_kontext.pyi b/.typings/mflux/models/flux/variants/kontext/flux_kontext.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/variants/kontext/flux_kontext.pyi
rename to .typings/mflux/models/flux/variants/kontext/flux_kontext.pyi
diff --git a/.mlx_typings/mflux/models/flux/variants/kontext/kontext_util.pyi b/.typings/mflux/models/flux/variants/kontext/kontext_util.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/variants/kontext/kontext_util.pyi
rename to .typings/mflux/models/flux/variants/kontext/kontext_util.pyi
diff --git a/.mlx_typings/mflux/models/flux/variants/txt2img/flux.pyi b/.typings/mflux/models/flux/variants/txt2img/flux.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/variants/txt2img/flux.pyi
rename to .typings/mflux/models/flux/variants/txt2img/flux.pyi
diff --git a/.mlx_typings/mflux/models/flux/weights/__init__.pyi b/.typings/mflux/models/flux/weights/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/weights/__init__.pyi
rename to .typings/mflux/models/flux/weights/__init__.pyi
diff --git a/.mlx_typings/mflux/models/flux/weights/flux_lora_mapping.pyi b/.typings/mflux/models/flux/weights/flux_lora_mapping.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/weights/flux_lora_mapping.pyi
rename to .typings/mflux/models/flux/weights/flux_lora_mapping.pyi
diff --git a/.mlx_typings/mflux/models/flux/weights/flux_weight_definition.pyi b/.typings/mflux/models/flux/weights/flux_weight_definition.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/weights/flux_weight_definition.pyi
rename to .typings/mflux/models/flux/weights/flux_weight_definition.pyi
diff --git a/.mlx_typings/mflux/models/flux/weights/flux_weight_mapping.pyi b/.typings/mflux/models/flux/weights/flux_weight_mapping.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/flux/weights/flux_weight_mapping.pyi
rename to .typings/mflux/models/flux/weights/flux_weight_mapping.pyi
diff --git a/.mlx_typings/mflux/models/qwen/__init__.pyi b/.typings/mflux/models/qwen/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/__init__.pyi
rename to .typings/mflux/models/qwen/__init__.pyi
diff --git a/.mlx_typings/mflux/models/qwen/cli/__init__.pyi b/.typings/mflux/models/qwen/cli/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/cli/__init__.pyi
rename to .typings/mflux/models/qwen/cli/__init__.pyi
diff --git a/.mlx_typings/mflux/models/qwen/latent_creator/__init__.pyi b/.typings/mflux/models/qwen/latent_creator/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/latent_creator/__init__.pyi
rename to .typings/mflux/models/qwen/latent_creator/__init__.pyi
diff --git a/.mlx_typings/mflux/models/qwen/latent_creator/qwen_latent_creator.pyi b/.typings/mflux/models/qwen/latent_creator/qwen_latent_creator.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/latent_creator/qwen_latent_creator.pyi
rename to .typings/mflux/models/qwen/latent_creator/qwen_latent_creator.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/__init__.pyi b/.typings/mflux/models/qwen/model/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/__init__.pyi
rename to .typings/mflux/models/qwen/model/__init__.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_attention.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_attention.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_attention.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_attention.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_encoder.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_encoder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_encoder.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_encoder.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_encoder_layer.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_encoder_layer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_encoder_layer.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_encoder_layer.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_mlp.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_mlp.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_mlp.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_mlp.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_patch_merger.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_patch_merger.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_patch_merger.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_patch_merger.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_prompt_encoder.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_prompt_encoder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_prompt_encoder.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_prompt_encoder.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_rms_norm.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_rms_norm.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_rms_norm.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_rms_norm.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_rope.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_rope.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_rope.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_rope.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_text_encoder.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_text_encoder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_text_encoder.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_text_encoder.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_attention.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_attention.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_attention.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_attention.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_block.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_block.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_block.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_block.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_language_encoder.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_language_encoder.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_language_encoder.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_language_encoder.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_mlp.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_mlp.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_mlp.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_mlp.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_patch_embed.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_patch_embed.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_patch_embed.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_patch_embed.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_rotary_embedding.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_rotary_embedding.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_rotary_embedding.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_rotary_embedding.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_transformer.pyi b/.typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_transformer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_transformer.pyi
rename to .typings/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_transformer.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_attention.pyi b/.typings/mflux/models/qwen/model/qwen_transformer/qwen_attention.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_attention.pyi
rename to .typings/mflux/models/qwen/model/qwen_transformer/qwen_attention.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_feed_forward.pyi b/.typings/mflux/models/qwen/model/qwen_transformer/qwen_feed_forward.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_feed_forward.pyi
rename to .typings/mflux/models/qwen/model/qwen_transformer/qwen_feed_forward.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_rope.pyi b/.typings/mflux/models/qwen/model/qwen_transformer/qwen_rope.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_rope.pyi
rename to .typings/mflux/models/qwen/model/qwen_transformer/qwen_rope.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_time_text_embed.pyi b/.typings/mflux/models/qwen/model/qwen_transformer/qwen_time_text_embed.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_time_text_embed.pyi
rename to .typings/mflux/models/qwen/model/qwen_transformer/qwen_time_text_embed.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_timestep_embedding.pyi b/.typings/mflux/models/qwen/model/qwen_transformer/qwen_timestep_embedding.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_timestep_embedding.pyi
rename to .typings/mflux/models/qwen/model/qwen_transformer/qwen_timestep_embedding.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_timesteps.pyi b/.typings/mflux/models/qwen/model/qwen_transformer/qwen_timesteps.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_timesteps.pyi
rename to .typings/mflux/models/qwen/model/qwen_transformer/qwen_timesteps.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer.pyi b/.typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer.pyi
rename to .typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer_block.pyi b/.typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer_block.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer_block.pyi
rename to .typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer_block.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer_rms_norm.pyi b/.typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer_rms_norm.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer_rms_norm.pyi
rename to .typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer_rms_norm.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_attention_block_3d.pyi b/.typings/mflux/models/qwen/model/qwen_vae/qwen_image_attention_block_3d.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_attention_block_3d.pyi
rename to .typings/mflux/models/qwen/model/qwen_vae/qwen_image_attention_block_3d.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_causal_conv_3d.pyi b/.typings/mflux/models/qwen/model/qwen_vae/qwen_image_causal_conv_3d.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_causal_conv_3d.pyi
rename to .typings/mflux/models/qwen/model/qwen_vae/qwen_image_causal_conv_3d.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_decoder_3d.pyi b/.typings/mflux/models/qwen/model/qwen_vae/qwen_image_decoder_3d.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_decoder_3d.pyi
rename to .typings/mflux/models/qwen/model/qwen_vae/qwen_image_decoder_3d.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_down_block_3d.pyi b/.typings/mflux/models/qwen/model/qwen_vae/qwen_image_down_block_3d.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_down_block_3d.pyi
rename to .typings/mflux/models/qwen/model/qwen_vae/qwen_image_down_block_3d.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_encoder_3d.pyi b/.typings/mflux/models/qwen/model/qwen_vae/qwen_image_encoder_3d.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_encoder_3d.pyi
rename to .typings/mflux/models/qwen/model/qwen_vae/qwen_image_encoder_3d.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_mid_block_3d.pyi b/.typings/mflux/models/qwen/model/qwen_vae/qwen_image_mid_block_3d.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_mid_block_3d.pyi
rename to .typings/mflux/models/qwen/model/qwen_vae/qwen_image_mid_block_3d.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_res_block_3d.pyi b/.typings/mflux/models/qwen/model/qwen_vae/qwen_image_res_block_3d.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_res_block_3d.pyi
rename to .typings/mflux/models/qwen/model/qwen_vae/qwen_image_res_block_3d.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_resample_3d.pyi b/.typings/mflux/models/qwen/model/qwen_vae/qwen_image_resample_3d.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_resample_3d.pyi
rename to .typings/mflux/models/qwen/model/qwen_vae/qwen_image_resample_3d.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_rms_norm.pyi b/.typings/mflux/models/qwen/model/qwen_vae/qwen_image_rms_norm.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_rms_norm.pyi
rename to .typings/mflux/models/qwen/model/qwen_vae/qwen_image_rms_norm.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_up_block_3d.pyi b/.typings/mflux/models/qwen/model/qwen_vae/qwen_image_up_block_3d.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_image_up_block_3d.pyi
rename to .typings/mflux/models/qwen/model/qwen_vae/qwen_image_up_block_3d.pyi
diff --git a/.mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_vae.pyi b/.typings/mflux/models/qwen/model/qwen_vae/qwen_vae.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/model/qwen_vae/qwen_vae.pyi
rename to .typings/mflux/models/qwen/model/qwen_vae/qwen_vae.pyi
diff --git a/.mlx_typings/mflux/models/qwen/qwen_initializer.pyi b/.typings/mflux/models/qwen/qwen_initializer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/qwen_initializer.pyi
rename to .typings/mflux/models/qwen/qwen_initializer.pyi
diff --git a/.mlx_typings/mflux/models/qwen/tokenizer/__init__.pyi b/.typings/mflux/models/qwen/tokenizer/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/tokenizer/__init__.pyi
rename to .typings/mflux/models/qwen/tokenizer/__init__.pyi
diff --git a/.mlx_typings/mflux/models/qwen/tokenizer/qwen_image_processor.pyi b/.typings/mflux/models/qwen/tokenizer/qwen_image_processor.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/tokenizer/qwen_image_processor.pyi
rename to .typings/mflux/models/qwen/tokenizer/qwen_image_processor.pyi
diff --git a/.mlx_typings/mflux/models/qwen/tokenizer/qwen_vision_language_processor.pyi b/.typings/mflux/models/qwen/tokenizer/qwen_vision_language_processor.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/tokenizer/qwen_vision_language_processor.pyi
rename to .typings/mflux/models/qwen/tokenizer/qwen_vision_language_processor.pyi
diff --git a/.mlx_typings/mflux/models/qwen/tokenizer/qwen_vision_language_tokenizer.pyi b/.typings/mflux/models/qwen/tokenizer/qwen_vision_language_tokenizer.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/tokenizer/qwen_vision_language_tokenizer.pyi
rename to .typings/mflux/models/qwen/tokenizer/qwen_vision_language_tokenizer.pyi
diff --git a/.mlx_typings/mflux/models/qwen/variants/__init__.pyi b/.typings/mflux/models/qwen/variants/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/variants/__init__.pyi
rename to .typings/mflux/models/qwen/variants/__init__.pyi
diff --git a/.mlx_typings/mflux/models/qwen/variants/edit/qwen_edit_util.pyi b/.typings/mflux/models/qwen/variants/edit/qwen_edit_util.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/variants/edit/qwen_edit_util.pyi
rename to .typings/mflux/models/qwen/variants/edit/qwen_edit_util.pyi
diff --git a/.mlx_typings/mflux/models/qwen/variants/edit/qwen_image_edit.pyi b/.typings/mflux/models/qwen/variants/edit/qwen_image_edit.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/variants/edit/qwen_image_edit.pyi
rename to .typings/mflux/models/qwen/variants/edit/qwen_image_edit.pyi
diff --git a/.mlx_typings/mflux/models/qwen/variants/txt2img/qwen_image.pyi b/.typings/mflux/models/qwen/variants/txt2img/qwen_image.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/variants/txt2img/qwen_image.pyi
rename to .typings/mflux/models/qwen/variants/txt2img/qwen_image.pyi
diff --git a/.mlx_typings/mflux/models/qwen/weights/__init__.pyi b/.typings/mflux/models/qwen/weights/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/weights/__init__.pyi
rename to .typings/mflux/models/qwen/weights/__init__.pyi
diff --git a/.mlx_typings/mflux/models/qwen/weights/qwen_lora_mapping.pyi b/.typings/mflux/models/qwen/weights/qwen_lora_mapping.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/weights/qwen_lora_mapping.pyi
rename to .typings/mflux/models/qwen/weights/qwen_lora_mapping.pyi
diff --git a/.mlx_typings/mflux/models/qwen/weights/qwen_weight_definition.pyi b/.typings/mflux/models/qwen/weights/qwen_weight_definition.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/weights/qwen_weight_definition.pyi
rename to .typings/mflux/models/qwen/weights/qwen_weight_definition.pyi
diff --git a/.mlx_typings/mflux/models/qwen/weights/qwen_weight_mapping.pyi b/.typings/mflux/models/qwen/weights/qwen_weight_mapping.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/qwen/weights/qwen_weight_mapping.pyi
rename to .typings/mflux/models/qwen/weights/qwen_weight_mapping.pyi
diff --git a/.mlx_typings/mflux/models/seedvr2/weights/seedvr2_weight_definition.pyi b/.typings/mflux/models/seedvr2/weights/seedvr2_weight_definition.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/seedvr2/weights/seedvr2_weight_definition.pyi
rename to .typings/mflux/models/seedvr2/weights/seedvr2_weight_definition.pyi
diff --git a/.mlx_typings/mflux/models/seedvr2/weights/seedvr2_weight_mapping.pyi b/.typings/mflux/models/seedvr2/weights/seedvr2_weight_mapping.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/seedvr2/weights/seedvr2_weight_mapping.pyi
rename to .typings/mflux/models/seedvr2/weights/seedvr2_weight_mapping.pyi
diff --git a/.mlx_typings/mflux/models/z_image/latent_creator/z_image_latent_creator.pyi b/.typings/mflux/models/z_image/latent_creator/z_image_latent_creator.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/z_image/latent_creator/z_image_latent_creator.pyi
rename to .typings/mflux/models/z_image/latent_creator/z_image_latent_creator.pyi
diff --git a/.mlx_typings/mflux/models/z_image/weights/z_image_weight_definition.pyi b/.typings/mflux/models/z_image/weights/z_image_weight_definition.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/z_image/weights/z_image_weight_definition.pyi
rename to .typings/mflux/models/z_image/weights/z_image_weight_definition.pyi
diff --git a/.mlx_typings/mflux/models/z_image/weights/z_image_weight_mapping.pyi b/.typings/mflux/models/z_image/weights/z_image_weight_mapping.pyi
similarity index 100%
rename from .mlx_typings/mflux/models/z_image/weights/z_image_weight_mapping.pyi
rename to .typings/mflux/models/z_image/weights/z_image_weight_mapping.pyi
diff --git a/.mlx_typings/mflux/release/__init__.pyi b/.typings/mflux/release/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/release/__init__.pyi
rename to .typings/mflux/release/__init__.pyi
diff --git a/.mlx_typings/mflux/utils/__init__.pyi b/.typings/mflux/utils/__init__.pyi
similarity index 100%
rename from .mlx_typings/mflux/utils/__init__.pyi
rename to .typings/mflux/utils/__init__.pyi
diff --git a/.mlx_typings/mflux/utils/box_values.pyi b/.typings/mflux/utils/box_values.pyi
similarity index 100%
rename from .mlx_typings/mflux/utils/box_values.pyi
rename to .typings/mflux/utils/box_values.pyi
diff --git a/.mlx_typings/mflux/utils/exceptions.pyi b/.typings/mflux/utils/exceptions.pyi
similarity index 100%
rename from .mlx_typings/mflux/utils/exceptions.pyi
rename to .typings/mflux/utils/exceptions.pyi
diff --git a/.mlx_typings/mflux/utils/generated_image.pyi b/.typings/mflux/utils/generated_image.pyi
similarity index 100%
rename from .mlx_typings/mflux/utils/generated_image.pyi
rename to .typings/mflux/utils/generated_image.pyi
diff --git a/.mlx_typings/mflux/utils/image_util.pyi b/.typings/mflux/utils/image_util.pyi
similarity index 100%
rename from .mlx_typings/mflux/utils/image_util.pyi
rename to .typings/mflux/utils/image_util.pyi
diff --git a/.mlx_typings/mflux/utils/metadata_builder.pyi b/.typings/mflux/utils/metadata_builder.pyi
similarity index 100%
rename from .mlx_typings/mflux/utils/metadata_builder.pyi
rename to .typings/mflux/utils/metadata_builder.pyi
diff --git a/.mlx_typings/mflux/utils/version_util.pyi b/.typings/mflux/utils/version_util.pyi
similarity index 100%
rename from .mlx_typings/mflux/utils/version_util.pyi
rename to .typings/mflux/utils/version_util.pyi
diff --git a/.mlx_typings/mlx/core/__init__.pyi b/.typings/mlx/core/__init__.pyi
similarity index 100%
rename from .mlx_typings/mlx/core/__init__.pyi
rename to .typings/mlx/core/__init__.pyi
diff --git a/.mlx_typings/mlx/core/cuda/__init__.pyi b/.typings/mlx/core/cuda/__init__.pyi
similarity index 100%
rename from .mlx_typings/mlx/core/cuda/__init__.pyi
rename to .typings/mlx/core/cuda/__init__.pyi
diff --git a/.mlx_typings/mlx/core/distributed/__init__.pyi b/.typings/mlx/core/distributed/__init__.pyi
similarity index 100%
rename from .mlx_typings/mlx/core/distributed/__init__.pyi
rename to .typings/mlx/core/distributed/__init__.pyi
diff --git a/.mlx_typings/mlx/core/metal/__init__.pyi b/.typings/mlx/core/metal/__init__.pyi
similarity index 100%
rename from .mlx_typings/mlx/core/metal/__init__.pyi
rename to .typings/mlx/core/metal/__init__.pyi
diff --git a/.mlx_typings/mlx/core/random/__init__.pyi b/.typings/mlx/core/random/__init__.pyi
similarity index 100%
rename from .mlx_typings/mlx/core/random/__init__.pyi
rename to .typings/mlx/core/random/__init__.pyi
diff --git a/.mlx_typings/mlx/nn/__init__.pyi b/.typings/mlx/nn/__init__.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/__init__.pyi
rename to .typings/mlx/nn/__init__.pyi
diff --git a/.mlx_typings/mlx/nn/init.pyi b/.typings/mlx/nn/init.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/init.pyi
rename to .typings/mlx/nn/init.pyi
diff --git a/.mlx_typings/mlx/nn/layers/__init__.pyi b/.typings/mlx/nn/layers/__init__.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/__init__.pyi
rename to .typings/mlx/nn/layers/__init__.pyi
diff --git a/.mlx_typings/mlx/nn/layers/activations.pyi b/.typings/mlx/nn/layers/activations.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/activations.pyi
rename to .typings/mlx/nn/layers/activations.pyi
diff --git a/.mlx_typings/mlx/nn/layers/base.pyi b/.typings/mlx/nn/layers/base.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/base.pyi
rename to .typings/mlx/nn/layers/base.pyi
diff --git a/.mlx_typings/mlx/nn/layers/containers.pyi b/.typings/mlx/nn/layers/containers.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/containers.pyi
rename to .typings/mlx/nn/layers/containers.pyi
diff --git a/.mlx_typings/mlx/nn/layers/convolution.pyi b/.typings/mlx/nn/layers/convolution.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/convolution.pyi
rename to .typings/mlx/nn/layers/convolution.pyi
diff --git a/.mlx_typings/mlx/nn/layers/convolution_transpose.pyi b/.typings/mlx/nn/layers/convolution_transpose.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/convolution_transpose.pyi
rename to .typings/mlx/nn/layers/convolution_transpose.pyi
diff --git a/.mlx_typings/mlx/nn/layers/distributed.pyi b/.typings/mlx/nn/layers/distributed.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/distributed.pyi
rename to .typings/mlx/nn/layers/distributed.pyi
diff --git a/.mlx_typings/mlx/nn/layers/dropout.pyi b/.typings/mlx/nn/layers/dropout.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/dropout.pyi
rename to .typings/mlx/nn/layers/dropout.pyi
diff --git a/.mlx_typings/mlx/nn/layers/embedding.pyi b/.typings/mlx/nn/layers/embedding.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/embedding.pyi
rename to .typings/mlx/nn/layers/embedding.pyi
diff --git a/.mlx_typings/mlx/nn/layers/linear.pyi b/.typings/mlx/nn/layers/linear.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/linear.pyi
rename to .typings/mlx/nn/layers/linear.pyi
diff --git a/.mlx_typings/mlx/nn/layers/normalization.pyi b/.typings/mlx/nn/layers/normalization.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/normalization.pyi
rename to .typings/mlx/nn/layers/normalization.pyi
diff --git a/.mlx_typings/mlx/nn/layers/pooling.pyi b/.typings/mlx/nn/layers/pooling.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/pooling.pyi
rename to .typings/mlx/nn/layers/pooling.pyi
diff --git a/.mlx_typings/mlx/nn/layers/positional_encoding.pyi b/.typings/mlx/nn/layers/positional_encoding.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/positional_encoding.pyi
rename to .typings/mlx/nn/layers/positional_encoding.pyi
diff --git a/.mlx_typings/mlx/nn/layers/quantized.pyi b/.typings/mlx/nn/layers/quantized.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/quantized.pyi
rename to .typings/mlx/nn/layers/quantized.pyi
diff --git a/.mlx_typings/mlx/nn/layers/recurrent.pyi b/.typings/mlx/nn/layers/recurrent.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/recurrent.pyi
rename to .typings/mlx/nn/layers/recurrent.pyi
diff --git a/.mlx_typings/mlx/nn/layers/transformer.pyi b/.typings/mlx/nn/layers/transformer.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/transformer.pyi
rename to .typings/mlx/nn/layers/transformer.pyi
diff --git a/.mlx_typings/mlx/nn/layers/upsample.pyi b/.typings/mlx/nn/layers/upsample.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/layers/upsample.pyi
rename to .typings/mlx/nn/layers/upsample.pyi
diff --git a/.mlx_typings/mlx/nn/losses.pyi b/.typings/mlx/nn/losses.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/losses.pyi
rename to .typings/mlx/nn/losses.pyi
diff --git a/.mlx_typings/mlx/nn/utils.pyi b/.typings/mlx/nn/utils.pyi
similarity index 100%
rename from .mlx_typings/mlx/nn/utils.pyi
rename to .typings/mlx/nn/utils.pyi
diff --git a/.mlx_typings/mlx/utils.pyi b/.typings/mlx/utils.pyi
similarity index 100%
rename from .mlx_typings/mlx/utils.pyi
rename to .typings/mlx/utils.pyi
diff --git a/.mlx_typings/mlx_lm/__init__.pyi b/.typings/mlx_lm/__init__.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/__init__.pyi
rename to .typings/mlx_lm/__init__.pyi
diff --git a/.mlx_typings/mlx_lm/_version.pyi b/.typings/mlx_lm/_version.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/_version.pyi
rename to .typings/mlx_lm/_version.pyi
diff --git a/.mlx_typings/mlx_lm/convert.pyi b/.typings/mlx_lm/convert.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/convert.pyi
rename to .typings/mlx_lm/convert.pyi
diff --git a/.mlx_typings/mlx_lm/generate.pyi b/.typings/mlx_lm/generate.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/generate.pyi
rename to .typings/mlx_lm/generate.pyi
diff --git a/.mlx_typings/mlx_lm/models/__init__.pyi b/.typings/mlx_lm/models/__init__.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/__init__.pyi
rename to .typings/mlx_lm/models/__init__.pyi
diff --git a/.mlx_typings/mlx_lm/models/activations.pyi b/.typings/mlx_lm/models/activations.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/activations.pyi
rename to .typings/mlx_lm/models/activations.pyi
diff --git a/.mlx_typings/mlx_lm/models/base.pyi b/.typings/mlx_lm/models/base.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/base.pyi
rename to .typings/mlx_lm/models/base.pyi
diff --git a/.mlx_typings/mlx_lm/models/bitlinear_layers.pyi b/.typings/mlx_lm/models/bitlinear_layers.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/bitlinear_layers.pyi
rename to .typings/mlx_lm/models/bitlinear_layers.pyi
diff --git a/.mlx_typings/mlx_lm/models/cache.pyi b/.typings/mlx_lm/models/cache.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/cache.pyi
rename to .typings/mlx_lm/models/cache.pyi
diff --git a/.mlx_typings/mlx_lm/models/deepseek_v3.pyi b/.typings/mlx_lm/models/deepseek_v3.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/deepseek_v3.pyi
rename to .typings/mlx_lm/models/deepseek_v3.pyi
diff --git a/.mlx_typings/mlx_lm/models/deepseek_v4.pyi b/.typings/mlx_lm/models/deepseek_v4.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/deepseek_v4.pyi
rename to .typings/mlx_lm/models/deepseek_v4.pyi
diff --git a/.mlx_typings/mlx_lm/models/gated_delta.pyi b/.typings/mlx_lm/models/gated_delta.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/gated_delta.pyi
rename to .typings/mlx_lm/models/gated_delta.pyi
diff --git a/.mlx_typings/mlx_lm/models/gemma4.pyi b/.typings/mlx_lm/models/gemma4.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/gemma4.pyi
rename to .typings/mlx_lm/models/gemma4.pyi
diff --git a/.mlx_typings/mlx_lm/models/gemma4_text.pyi b/.typings/mlx_lm/models/gemma4_text.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/gemma4_text.pyi
rename to .typings/mlx_lm/models/gemma4_text.pyi
diff --git a/.mlx_typings/mlx_lm/models/glm4_moe.pyi b/.typings/mlx_lm/models/glm4_moe.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/glm4_moe.pyi
rename to .typings/mlx_lm/models/glm4_moe.pyi
diff --git a/.mlx_typings/mlx_lm/models/glm_moe_dsa.pyi b/.typings/mlx_lm/models/glm_moe_dsa.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/glm_moe_dsa.pyi
rename to .typings/mlx_lm/models/glm_moe_dsa.pyi
diff --git a/.mlx_typings/mlx_lm/models/gpt_oss.pyi b/.typings/mlx_lm/models/gpt_oss.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/gpt_oss.pyi
rename to .typings/mlx_lm/models/gpt_oss.pyi
diff --git a/.mlx_typings/mlx_lm/models/minimax.pyi b/.typings/mlx_lm/models/minimax.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/minimax.pyi
rename to .typings/mlx_lm/models/minimax.pyi
diff --git a/.mlx_typings/mlx_lm/models/nemotron_h.pyi b/.typings/mlx_lm/models/nemotron_h.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/nemotron_h.pyi
rename to .typings/mlx_lm/models/nemotron_h.pyi
diff --git a/.mlx_typings/mlx_lm/models/qwen3_5.pyi b/.typings/mlx_lm/models/qwen3_5.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/qwen3_5.pyi
rename to .typings/mlx_lm/models/qwen3_5.pyi
diff --git a/.mlx_typings/mlx_lm/models/qwen3_5_moe.pyi b/.typings/mlx_lm/models/qwen3_5_moe.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/qwen3_5_moe.pyi
rename to .typings/mlx_lm/models/qwen3_5_moe.pyi
diff --git a/.mlx_typings/mlx_lm/models/qwen3_next.pyi b/.typings/mlx_lm/models/qwen3_next.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/qwen3_next.pyi
rename to .typings/mlx_lm/models/qwen3_next.pyi
diff --git a/.mlx_typings/mlx_lm/models/rope_utils.pyi b/.typings/mlx_lm/models/rope_utils.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/rope_utils.pyi
rename to .typings/mlx_lm/models/rope_utils.pyi
diff --git a/.mlx_typings/mlx_lm/models/step3p5.pyi b/.typings/mlx_lm/models/step3p5.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/step3p5.pyi
rename to .typings/mlx_lm/models/step3p5.pyi
diff --git a/.mlx_typings/mlx_lm/models/switch_layers.pyi b/.typings/mlx_lm/models/switch_layers.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/models/switch_layers.pyi
rename to .typings/mlx_lm/models/switch_layers.pyi
diff --git a/.mlx_typings/mlx_lm/sample_utils.pyi b/.typings/mlx_lm/sample_utils.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/sample_utils.pyi
rename to .typings/mlx_lm/sample_utils.pyi
diff --git a/.mlx_typings/mlx_lm/tokenizer_utils.pyi b/.typings/mlx_lm/tokenizer_utils.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/tokenizer_utils.pyi
rename to .typings/mlx_lm/tokenizer_utils.pyi
diff --git a/.mlx_typings/mlx_lm/tuner/dora.pyi b/.typings/mlx_lm/tuner/dora.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/tuner/dora.pyi
rename to .typings/mlx_lm/tuner/dora.pyi
diff --git a/.mlx_typings/mlx_lm/tuner/lora.pyi b/.typings/mlx_lm/tuner/lora.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/tuner/lora.pyi
rename to .typings/mlx_lm/tuner/lora.pyi
diff --git a/.mlx_typings/mlx_lm/tuner/utils.pyi b/.typings/mlx_lm/tuner/utils.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/tuner/utils.pyi
rename to .typings/mlx_lm/tuner/utils.pyi
diff --git a/.mlx_typings/mlx_lm/utils.pyi b/.typings/mlx_lm/utils.pyi
similarity index 100%
rename from .mlx_typings/mlx_lm/utils.pyi
rename to .typings/mlx_lm/utils.pyi
diff --git a/.mlx_typings/mlx_vlm/__init__.pyi b/.typings/mlx_vlm/__init__.pyi
similarity index 100%
rename from .mlx_typings/mlx_vlm/__init__.pyi
rename to .typings/mlx_vlm/__init__.pyi
diff --git a/.mlx_typings/mlx_vlm/prompt_utils.pyi b/.typings/mlx_vlm/prompt_utils.pyi
similarity index 100%
rename from .mlx_typings/mlx_vlm/prompt_utils.pyi
rename to .typings/mlx_vlm/prompt_utils.pyi
diff --git a/.mlx_typings/mlx_vlm/utils.pyi b/.typings/mlx_vlm/utils.pyi
similarity index 100%
rename from .mlx_typings/mlx_vlm/utils.pyi
rename to .typings/mlx_vlm/utils.pyi
diff --git a/.typings/pynvml/__init__.pyi b/.typings/pynvml/__init__.pyi
new file mode 100644
index 00000000..c0ded6f1
--- /dev/null
+++ b/.typings/pynvml/__init__.pyi
@@ -0,0 +1,3226 @@
+"""
+This type stub file was generated by pyright.
+"""
+
+import sys
+import os
+import threading
+import string
+from ctypes import *
+from ctypes import _Pointer
+from ctypes.util import find_library
+from functools import wraps
+
+_nvmlEnableState_t = c_uint
+NVML_FEATURE_DISABLED = ...
+NVML_FEATURE_ENABLED = ...
+_nvmlBrandType_t = c_uint
+NVML_BRAND_UNKNOWN = ...
+NVML_BRAND_QUADRO = ...
+NVML_BRAND_TESLA = ...
+NVML_BRAND_NVS = ...
+NVML_BRAND_GRID = ...
+NVML_BRAND_GEFORCE = ...
+NVML_BRAND_TITAN = ...
+NVML_BRAND_NVIDIA_VAPPS = ...
+NVML_BRAND_NVIDIA_VPC = ...
+NVML_BRAND_NVIDIA_VCS = ...
+NVML_BRAND_NVIDIA_VWS = ...
+NVML_BRAND_NVIDIA_CLOUD_GAMING = ...
+NVML_BRAND_NVIDIA_VGAMING = ...
+NVML_BRAND_QUADRO_RTX = ...
+NVML_BRAND_NVIDIA_RTX = ...
+NVML_BRAND_NVIDIA = ...
+NVML_BRAND_GEFORCE_RTX = ...
+NVML_BRAND_TITAN_RTX = ...
+NVML_BRAND_COUNT = ...
+_nvmlTemperatureThresholds_t = c_uint
+NVML_TEMPERATURE_THRESHOLD_SHUTDOWN = ...
+NVML_TEMPERATURE_THRESHOLD_SLOWDOWN = ...
+NVML_TEMPERATURE_THRESHOLD_MEM_MAX = ...
+NVML_TEMPERATURE_THRESHOLD_GPU_MAX = ...
+NVML_TEMPERATURE_THRESHOLD_ACOUSTIC_MIN = ...
+NVML_TEMPERATURE_THRESHOLD_ACOUSTIC_CURR = ...
+NVML_TEMPERATURE_THRESHOLD_ACOUSTIC_MAX = ...
+NVML_TEMPERATURE_THRESHOLD_GPS_CURR = ...
+NVML_TEMPERATURE_THRESHOLD_COUNT = ...
+_nvmlTemperatureSensors_t = c_uint
+NVML_TEMPERATURE_GPU: int = ...
+NVML_TEMPERATURE_COUNT = ...
+_nvmlComputeMode_t = c_uint
+NVML_COMPUTEMODE_DEFAULT = ...
+NVML_COMPUTEMODE_EXCLUSIVE_THREAD = ...
+NVML_COMPUTEMODE_PROHIBITED = ...
+NVML_COMPUTEMODE_EXCLUSIVE_PROCESS = ...
+NVML_COMPUTEMODE_COUNT = ...
+_nvmlMemoryLocation_t = c_uint
+NVML_MEMORY_LOCATION_L1_CACHE = ...
+NVML_MEMORY_LOCATION_L2_CACHE = ...
+NVML_MEMORY_LOCATION_DEVICE_MEMORY = ...
+NVML_MEMORY_LOCATION_DRAM = ...
+NVML_MEMORY_LOCATION_REGISTER_FILE = ...
+NVML_MEMORY_LOCATION_TEXTURE_MEMORY = ...
+NVML_MEMORY_LOCATION_TEXTURE_SHM = ...
+NVML_MEMORY_LOCATION_CBU = ...
+NVML_MEMORY_LOCATION_SRAM = ...
+NVML_MEMORY_LOCATION_COUNT = ...
+NVML_NVLINK_MAX_LINKS = ...
+NVML_NVLINK_MAX_LANES = ...
+_nvmlNvLinkErrorCounter_t = c_uint
+NVML_NVLINK_ERROR_DL_REPLAY = ...
+NVML_NVLINK_ERROR_DL_RECOVERY = ...
+NVML_NVLINK_ERROR_DL_CRC_FLIT = ...
+NVML_NVLINK_ERROR_DL_CRC_DATA = ...
+NVML_NVLINK_ERROR_DL_ECC_DATA = ...
+NVML_NVLINK_ERROR_COUNT = ...
+_nvmlNvLinkEccLaneErrorCounter_t = c_uint
+NVML_NVLINK_ERROR_DL_ECC_LANE0 = ...
+NVML_NVLINK_ERROR_DL_ECC_LANE1 = ...
+NVML_NVLINK_ERROR_DL_ECC_LANE2 = ...
+NVML_NVLINK_ERROR_DL_ECC_LANE3 = ...
+NVML_NVLINK_ERROR_DL_ECC_COUNT = ...
+_nvmlNvLinkCapability_t = c_uint
+NVML_NVLINK_CAP_P2P_SUPPORTED = ...
+NVML_NVLINK_CAP_SYSMEM_ACCESS = ...
+NVML_NVLINK_CAP_P2P_ATOMICS = ...
+NVML_NVLINK_CAP_SYSMEM_ATOMICS = ...
+NVML_NVLINK_CAP_SLI_BRIDGE = ...
+NVML_NVLINK_CAP_VALID = ...
+NVML_NVLINK_CAP_COUNT = ...
+_nvmlNvLinkUtilizationCountPktTypes_t = c_uint
+NVML_NVLINK_COUNTER_PKTFILTER_NOP = ...
+NVML_NVLINK_COUNTER_PKTFILTER_READ = ...
+NVML_NVLINK_COUNTER_PKTFILTER_WRITE = ...
+NVML_NVLINK_COUNTER_PKTFILTER_RATOM = ...
+NVML_NVLINK_COUNTER_PKTFILTER_NRATOM = ...
+NVML_NVLINK_COUNTER_PKTFILTER_FLUSH = ...
+NVML_NVLINK_COUNTER_PKTFILTER_RESPDATA = ...
+NVML_NVLINK_COUNTER_PKTFILTER_RESPNODATA = ...
+NVML_NVLINK_COUNTER_PKTFILTER_ALL = ...
+_nvmlNvLinkUtilizationCountUnits_t = c_uint
+NVML_NVLINK_COUNTER_UNIT_CYCLES = ...
+NVML_NVLINK_COUNTER_UNIT_PACKETS = ...
+NVML_NVLINK_COUNTER_UNIT_BYTES = ...
+NVML_NVLINK_COUNTER_UNIT_RESERVED = ...
+NVML_NVLINK_COUNTER_UNIT_COUNT = ...
+_nvmlNvLinkDeviceType_t = c_uint
+NVML_NVLINK_DEVICE_TYPE_GPU = ...
+NVML_NVLINK_DEVICE_TYPE_IBMNPU = ...
+NVML_NVLINK_DEVICE_TYPE_SWITCH = ...
+NVML_NVLINK_DEVICE_TYPE_UNKNOWN = ...
+_nvmlEccBitType_t = c_uint
+NVML_SINGLE_BIT_ECC = ...
+NVML_DOUBLE_BIT_ECC = ...
+NVML_ECC_ERROR_TYPE_COUNT = ...
+_nvmlEccCounterType_t = c_uint
+NVML_VOLATILE_ECC = ...
+NVML_AGGREGATE_ECC = ...
+NVML_ECC_COUNTER_TYPE_COUNT = ...
+_nvmlMemoryErrorType_t = c_uint
+NVML_MEMORY_ERROR_TYPE_CORRECTED = ...
+NVML_MEMORY_ERROR_TYPE_UNCORRECTED = ...
+NVML_MEMORY_ERROR_TYPE_COUNT = ...
+_nvmlClockType_t = c_uint
+NVML_CLOCK_GRAPHICS = ...
+NVML_CLOCK_SM = ...
+NVML_CLOCK_MEM = ...
+NVML_CLOCK_VIDEO = ...
+NVML_CLOCK_COUNT = ...
+_nvmlClockId_t = c_uint
+NVML_CLOCK_ID_CURRENT = ...
+NVML_CLOCK_ID_APP_CLOCK_TARGET = ...
+NVML_CLOCK_ID_APP_CLOCK_DEFAULT = ...
+NVML_CLOCK_ID_CUSTOMER_BOOST_MAX = ...
+NVML_CLOCK_ID_COUNT = ...
+_nvmlDriverModel_t = c_uint
+NVML_DRIVER_WDDM = ...
+NVML_DRIVER_WDM = ...
+NVML_DRIVER_MCDM = ...
+NVML_MAX_GPU_PERF_PSTATES = ...
+_nvmlPstates_t = c_uint
+NVML_PSTATE_0 = ...
+NVML_PSTATE_1 = ...
+NVML_PSTATE_2 = ...
+NVML_PSTATE_3 = ...
+NVML_PSTATE_4 = ...
+NVML_PSTATE_5 = ...
+NVML_PSTATE_6 = ...
+NVML_PSTATE_7 = ...
+NVML_PSTATE_8 = ...
+NVML_PSTATE_9 = ...
+NVML_PSTATE_10 = ...
+NVML_PSTATE_11 = ...
+NVML_PSTATE_12 = ...
+NVML_PSTATE_13 = ...
+NVML_PSTATE_14 = ...
+NVML_PSTATE_15 = ...
+NVML_PSTATE_UNKNOWN = ...
+_nvmlInforomObject_t = c_uint
+NVML_INFOROM_OEM = ...
+NVML_INFOROM_ECC = ...
+NVML_INFOROM_POWER = ...
+NVML_INFOROM_DEN = ...
+NVML_INFOROM_COUNT = ...
+_nvmlReturn_t = c_uint
+NVML_SUCCESS = ...
+NVML_ERROR_UNINITIALIZED = ...
+NVML_ERROR_INVALID_ARGUMENT = ...
+NVML_ERROR_NOT_SUPPORTED = ...
+NVML_ERROR_NO_PERMISSION = ...
+NVML_ERROR_ALREADY_INITIALIZED = ...
+NVML_ERROR_NOT_FOUND = ...
+NVML_ERROR_INSUFFICIENT_SIZE = ...
+NVML_ERROR_INSUFFICIENT_POWER = ...
+NVML_ERROR_DRIVER_NOT_LOADED = ...
+NVML_ERROR_TIMEOUT = ...
+NVML_ERROR_IRQ_ISSUE = ...
+NVML_ERROR_LIBRARY_NOT_FOUND = ...
+NVML_ERROR_FUNCTION_NOT_FOUND = ...
+NVML_ERROR_CORRUPTED_INFOROM = ...
+NVML_ERROR_GPU_IS_LOST = ...
+NVML_ERROR_RESET_REQUIRED = ...
+NVML_ERROR_OPERATING_SYSTEM = ...
+NVML_ERROR_LIB_RM_VERSION_MISMATCH = ...
+NVML_ERROR_IN_USE = ...
+NVML_ERROR_MEMORY = ...
+NVML_ERROR_NO_DATA = ...
+NVML_ERROR_VGPU_ECC_NOT_SUPPORTED = ...
+NVML_ERROR_INSUFFICIENT_RESOURCES = ...
+NVML_ERROR_FREQ_NOT_SUPPORTED = ...
+NVML_ERROR_ARGUMENT_VERSION_MISMATCH = ...
+NVML_ERROR_DEPRECATED = ...
+NVML_ERROR_NOT_READY = ...
+NVML_ERROR_GPU_NOT_FOUND = ...
+NVML_ERROR_INVALID_STATE = ...
+NVML_ERROR_RESET_TYPE_NOT_SUPPORTED = ...
+NVML_ERROR_UNKNOWN = ...
+_nvmlFanState_t = c_uint
+NVML_FAN_NORMAL = ...
+NVML_FAN_FAILED = ...
+_nvmlFanControlPolicy_t = c_uint
+NVML_FAN_POLICY_TEMPERATURE_CONTINOUS_SW = ...
+NVML_FAN_POLICY_MANUAL = ...
+_nvmlLedColor_t = c_uint
+NVML_LED_COLOR_GREEN = ...
+NVML_LED_COLOR_AMBER = ...
+_nvmlGpuOperationMode_t = c_uint
+NVML_GOM_ALL_ON = ...
+NVML_GOM_COMPUTE = ...
+NVML_GOM_LOW_DP = ...
+_nvmlPageRetirementCause_t = c_uint
+NVML_PAGE_RETIREMENT_CAUSE_MULTIPLE_SINGLE_BIT_ECC_ERRORS = ...
+NVML_PAGE_RETIREMENT_CAUSE_DOUBLE_BIT_ECC_ERROR = ...
+NVML_PAGE_RETIREMENT_CAUSE_COUNT = ...
+_nvmlRestrictedAPI_t = c_uint
+NVML_RESTRICTED_API_SET_APPLICATION_CLOCKS = ...
+NVML_RESTRICTED_API_SET_AUTO_BOOSTED_CLOCKS = ...
+NVML_RESTRICTED_API_COUNT = ...
+_nvmlBridgeChipType_t = c_uint
+NVML_BRIDGE_CHIP_PLX = ...
+NVML_BRIDGE_CHIP_BRO4 = ...
+NVML_MAX_PHYSICAL_BRIDGE = ...
+_nvmlValueType_t = c_uint
+NVML_VALUE_TYPE_DOUBLE = ...
+NVML_VALUE_TYPE_UNSIGNED_INT = ...
+NVML_VALUE_TYPE_UNSIGNED_LONG = ...
+NVML_VALUE_TYPE_UNSIGNED_LONG_LONG = ...
+NVML_VALUE_TYPE_SIGNED_LONG_LONG = ...
+NVML_VALUE_TYPE_SIGNED_INT = ...
+NVML_VALUE_TYPE_UNSIGNED_SHORT = ...
+NVML_VALUE_TYPE_COUNT = ...
+_nvmlNvlinkVersion_t = c_uint
+NVML_NVLINK_VERSION_INVALID = ...
+NVML_NVLINK_VERSION_1_0 = ...
+NVML_NVLINK_VERSION_2_0 = ...
+NVML_NVLINK_VERSION_2_2 = ...
+NVML_NVLINK_VERSION_3_0 = ...
+NVML_NVLINK_VERSION_3_1 = ...
+NVML_NVLINK_VERSION_4_0 = ...
+NVML_NVLINK_VERSION_5_0 = ...
+_nvmlPerfPolicyType_t = c_uint
+NVML_PERF_POLICY_POWER = ...
+NVML_PERF_POLICY_THERMAL = ...
+NVML_PERF_POLICY_SYNC_BOOST = ...
+NVML_PERF_POLICY_BOARD_LIMIT = ...
+NVML_PERF_POLICY_LOW_UTILIZATION = ...
+NVML_PERF_POLICY_RELIABILITY = ...
+NVML_PERF_POLICY_TOTAL_APP_CLOCKS = ...
+NVML_PERF_POLICY_TOTAL_BASE_CLOCKS = ...
+NVML_PERF_POLICY_COUNT = ...
+_nvmlEncoderQueryType_t = c_uint
+NVML_ENCODER_QUERY_H264 = ...
+NVML_ENCODER_QUERY_HEVC = ...
+NVML_ENCODER_QUERY_AV1 = ...
+NVML_ENCODER_QUERY_UNKNOWN = ...
+_nvmlFBCSessionType_t = c_uint
+NVML_FBC_SESSION_TYPE_UNKNOWN = ...
+NVML_FBC_SESSION_TYPE_TOSYS = ...
+NVML_FBC_SESSION_TYPE_CUDA = ...
+NVML_FBC_SESSION_TYPE_VID = ...
+NVML_FBC_SESSION_TYPE_HWENC = ...
+_nvmlDetachGpuState_t = c_uint
+NVML_DETACH_GPU_KEEP = ...
+NVML_DETACH_GPU_REMOVE = ...
+_nvmlPcieLinkState_t = c_uint
+NVML_PCIE_LINK_KEEP = ...
+NVML_PCIE_LINK_SHUT_DOWN = ...
+_nvmlSamplingType_t = c_uint
+NVML_TOTAL_POWER_SAMPLES = ...
+NVML_GPU_UTILIZATION_SAMPLES = ...
+NVML_MEMORY_UTILIZATION_SAMPLES = ...
+NVML_ENC_UTILIZATION_SAMPLES = ...
+NVML_DEC_UTILIZATION_SAMPLES = ...
+NVML_PROCESSOR_CLK_SAMPLES = ...
+NVML_MEMORY_CLK_SAMPLES = ...
+NVML_MODULE_POWER_SAMPLES = ...
+NVML_JPG_UTILIZATION_SAMPLES = ...
+NVML_OFA_UTILIZATION_SAMPLES = ...
+NVML_SAMPLINGTYPE_COUNT = ...
+_nvmlPcieUtilCounter_t = c_uint
+NVML_PCIE_UTIL_TX_BYTES = ...
+NVML_PCIE_UTIL_RX_BYTES = ...
+NVML_PCIE_UTIL_COUNT = ...
+_nvmlGpuTopologyLevel_t = c_uint
+NVML_TOPOLOGY_INTERNAL = ...
+NVML_TOPOLOGY_SINGLE = ...
+NVML_TOPOLOGY_MULTIPLE = ...
+NVML_TOPOLOGY_HOSTBRIDGE = ...
+NVML_TOPOLOGY_NODE = ...
+NVML_TOPOLOGY_CPU = ...
+NVML_TOPOLOGY_SYSTEM = ...
+_nvmlGpuP2PCapsIndex_t = c_uint
+NVML_P2P_CAPS_INDEX_READ = ...
+NVML_P2P_CAPS_INDEX_WRITE = ...
+NVML_P2P_CAPS_INDEX_NVLINK = ...
+NVML_P2P_CAPS_INDEX_ATOMICS = ...
+NVML_P2P_CAPS_INDEX_PROP = ...
+NVML_P2P_CAPS_INDEX_PCI = ...
+NVML_P2P_CAPS_INDEX_UNKNOWN = ...
+_nvmlGpuP2PStatus_t = c_uint
+NVML_P2P_STATUS_OK = ...
+NVML_P2P_STATUS_CHIPSET_NOT_SUPPORED = ...
+NVML_P2P_STATUS_CHIPSET_NOT_SUPPORTED = ...
+NVML_P2P_STATUS_GPU_NOT_SUPPORTED = ...
+NVML_P2P_STATUS_IOH_TOPOLOGY_NOT_SUPPORTED = ...
+NVML_P2P_STATUS_DISABLED_BY_REGKEY = ...
+NVML_P2P_STATUS_NOT_SUPPORTED = ...
+NVML_P2P_STATUS_UNKNOWN = ...
+_nvmlDeviceArchitecture_t = c_uint
+NVML_DEVICE_ARCH_KEPLER = ...
+NVML_DEVICE_ARCH_MAXWELL = ...
+NVML_DEVICE_ARCH_PASCAL = ...
+NVML_DEVICE_ARCH_VOLTA = ...
+NVML_DEVICE_ARCH_TURING = ...
+NVML_DEVICE_ARCH_AMPERE = ...
+NVML_DEVICE_ARCH_ADA = ...
+NVML_DEVICE_ARCH_HOPPER = ...
+NVML_DEVICE_ARCH_BLACKWELL = ...
+NVML_DEVICE_ARCH_UNKNOWN = ...
+_nvmlBusType_t = c_uint
+NVML_BUS_TYPE_UNKNOWN = ...
+NVML_BUS_TYPE_PCI = ...
+NVML_BUS_TYPE_PCIE = ...
+NVML_BUS_TYPE_FPCI = ...
+NVML_BUS_TYPE_AGP = ...
+_nvmlPowerSource_t = c_uint
+NVML_POWER_SOURCE_AC = ...
+NVML_POWER_SOURCE_BATTERY = ...
+NVML_POWER_SOURCE_UNDERSIZED = ...
+_nvmlAdaptiveClockInfoStatus_t = c_uint
+NVML_ADAPTIVE_CLOCKING_INFO_STATUS_DISABLED = ...
+NVML_ADAPTIVE_CLOCKING_INFO_STATUS_ENABLED = ...
+_nvmlClockLimitId_t = c_uint
+NVML_CLOCK_LIMIT_ID_RANGE_START = ...
+NVML_CLOCK_LIMIT_ID_TDP = ...
+NVML_CLOCK_LIMIT_ID_UNLIMITED = ...
+_nvmlPcieLinkMaxSpeed_t = c_uint
+NVML_PCIE_LINK_MAX_SPEED_INVALID = ...
+NVML_PCIE_LINK_MAX_SPEED_2500MBPS = ...
+NVML_PCIE_LINK_MAX_SPEED_5000MBPS = ...
+NVML_PCIE_LINK_MAX_SPEED_8000MBPS = ...
+NVML_PCIE_LINK_MAX_SPEED_16000MBPS = ...
+NVML_PCIE_LINK_MAX_SPEED_32000MBPS = ...
+NVML_PCIE_LINK_MAX_SPEED_64000MBPS = ...
+_nvmlPcieAtomicsCapability_t = c_uint
+NVML_PCIE_ATOMICS_CAP_FETCHADD32 = ...
+NVML_PCIE_ATOMICS_CAP_FETCHADD64 = ...
+NVML_PCIE_ATOMICS_CAP_SWAP32 = ...
+NVML_PCIE_ATOMICS_CAP_SWAP64 = ...
+NVML_PCIE_ATOMICS_CAP_CAS32 = ...
+NVML_PCIE_ATOMICS_CAP_CAS64 = ...
+NVML_PCIE_ATOMICS_CAP_CAS128 = ...
+NVML_PCIE_ATOMICS_OPS_MAX = ...
+_nvmlAffinityScope_t = c_uint
+NVML_AFFINITY_SCOPE_NODE = ...
+NVML_AFFINITY_SCOPE_SOCKET = ...
+_nvmlDeviceGpuRecoveryAction_t = c_uint
+NVML_GPU_RECOVERY_ACTION_NONE = ...
+NVML_GPU_RECOVERY_ACTION_GPU_RESET = ...
+NVML_GPU_RECOVERY_ACTION_NODE_REBOOT = ...
+NVML_GPU_RECOVERY_ACTION_DRAIN_P2P = ...
+NVML_GPU_RECOVERY_ACTION_DRAIN_AND_RESET = ...
+nvmlFlagDefault = ...
+nvmlFlagForce = ...
+NVML_INIT_FLAG_NO_GPUS = ...
+NVML_INIT_FLAG_NO_ATTACH = ...
+NVML_INIT_FLAG_FORCE_INIT = ...
+NVML_MAX_GPC_COUNT = ...
+NVML_DEVICE_INFOROM_VERSION_BUFFER_SIZE = ...
+NVML_DEVICE_UUID_BUFFER_SIZE = ...
+NVML_DEVICE_UUID_V2_BUFFER_SIZE = ...
+NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE = ...
+NVML_SYSTEM_NVML_VERSION_BUFFER_SIZE = ...
+NVML_DEVICE_NAME_BUFFER_SIZE = ...
+NVML_DEVICE_NAME_V2_BUFFER_SIZE = ...
+NVML_DEVICE_SERIAL_BUFFER_SIZE = ...
+NVML_DEVICE_PART_NUMBER_BUFFER_SIZE = ...
+NVML_DEVICE_GPU_PART_NUMBER_BUFFER_SIZE = ...
+NVML_DEVICE_VBIOS_VERSION_BUFFER_SIZE = ...
+NVML_DEVICE_PCI_BUS_ID_BUFFER_SIZE = ...
+NVML_DEVICE_PCI_BUS_ID_BUFFER_V2_SIZE = ...
+NVML_GRID_LICENSE_BUFFER_SIZE = ...
+NVML_VGPU_NAME_BUFFER_SIZE = ...
+NVML_GRID_LICENSE_FEATURE_MAX_COUNT = ...
+NVML_VGPU_METADATA_OPAQUE_DATA_SIZE = ...
+NVML_VGPU_PGPU_METADATA_OPAQUE_DATA_SIZE = ...
+NVML_DEVICE_GPU_FRU_PART_NUMBER_BUFFER_SIZE = ...
+NVML_PERF_MODES_BUFFER_SIZE = ...
+NVML_DEVICE_PCI_BUS_ID_LEGACY_FMT = ...
+NVML_DEVICE_PCI_BUS_ID_FMT = ...
+NVML_VALUE_NOT_AVAILABLE_ulonglong = ...
+NVML_VALUE_NOT_AVAILABLE_uint = ...
+NVML_FI_DEV_ECC_CURRENT = ...
+NVML_FI_DEV_ECC_PENDING = ...
+NVML_FI_DEV_ECC_SBE_VOL_TOTAL = ...
+NVML_FI_DEV_ECC_DBE_VOL_TOTAL = ...
+NVML_FI_DEV_ECC_SBE_AGG_TOTAL = ...
+NVML_FI_DEV_ECC_DBE_AGG_TOTAL = ...
+NVML_FI_DEV_ECC_SBE_VOL_L1 = ...
+NVML_FI_DEV_ECC_DBE_VOL_L1 = ...
+NVML_FI_DEV_ECC_SBE_VOL_L2 = ...
+NVML_FI_DEV_ECC_DBE_VOL_L2 = ...
+NVML_FI_DEV_ECC_SBE_VOL_DEV = ...
+NVML_FI_DEV_ECC_DBE_VOL_DEV = ...
+NVML_FI_DEV_ECC_SBE_VOL_REG = ...
+NVML_FI_DEV_ECC_DBE_VOL_REG = ...
+NVML_FI_DEV_ECC_SBE_VOL_TEX = ...
+NVML_FI_DEV_ECC_DBE_VOL_TEX = ...
+NVML_FI_DEV_ECC_DBE_VOL_CBU = ...
+NVML_FI_DEV_ECC_SBE_AGG_L1 = ...
+NVML_FI_DEV_ECC_DBE_AGG_L1 = ...
+NVML_FI_DEV_ECC_SBE_AGG_L2 = ...
+NVML_FI_DEV_ECC_DBE_AGG_L2 = ...
+NVML_FI_DEV_ECC_SBE_AGG_DEV = ...
+NVML_FI_DEV_ECC_DBE_AGG_DEV = ...
+NVML_FI_DEV_ECC_SBE_AGG_REG = ...
+NVML_FI_DEV_ECC_DBE_AGG_REG = ...
+NVML_FI_DEV_ECC_SBE_AGG_TEX = ...
+NVML_FI_DEV_ECC_DBE_AGG_TEX = ...
+NVML_FI_DEV_ECC_DBE_AGG_CBU = ...
+NVML_FI_DEV_RETIRED_SBE = ...
+NVML_FI_DEV_RETIRED_DBE = ...
+NVML_FI_DEV_RETIRED_PENDING = ...
+NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L0 = ...
+NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L1 = ...
+NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L2 = ...
+NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L3 = ...
+NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L4 = ...
+NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L5 = ...
+NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_TOTAL = ...
+NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L0 = ...
+NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L1 = ...
+NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L2 = ...
+NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L3 = ...
+NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L4 = ...
+NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L5 = ...
+NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_TOTAL = ...
+NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L0 = ...
+NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L1 = ...
+NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L2 = ...
+NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L3 = ...
+NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L4 = ...
+NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L5 = ...
+NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_TOTAL = ...
+NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L0 = ...
+NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L1 = ...
+NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L2 = ...
+NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L3 = ...
+NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L4 = ...
+NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L5 = ...
+NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_TOTAL = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L0 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L1 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L2 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L3 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L4 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L5 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C0_TOTAL = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L0 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L1 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L2 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L3 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L4 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L5 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C1_TOTAL = ...
+NVML_FI_DEV_PERF_POLICY_POWER = ...
+NVML_FI_DEV_PERF_POLICY_THERMAL = ...
+NVML_FI_DEV_PERF_POLICY_SYNC_BOOST = ...
+NVML_FI_DEV_PERF_POLICY_BOARD_LIMIT = ...
+NVML_FI_DEV_PERF_POLICY_LOW_UTILIZATION = ...
+NVML_FI_DEV_PERF_POLICY_RELIABILITY = ...
+NVML_FI_DEV_PERF_POLICY_TOTAL_APP_CLOCKS = ...
+NVML_FI_DEV_PERF_POLICY_TOTAL_BASE_CLOCKS = ...
+NVML_FI_DEV_MEMORY_TEMP = ...
+NVML_FI_DEV_TOTAL_ENERGY_CONSUMPTION = ...
+NVML_FI_DEV_NVLINK_SPEED_MBPS_L0 = ...
+NVML_FI_DEV_NVLINK_SPEED_MBPS_L1 = ...
+NVML_FI_DEV_NVLINK_SPEED_MBPS_L2 = ...
+NVML_FI_DEV_NVLINK_SPEED_MBPS_L3 = ...
+NVML_FI_DEV_NVLINK_SPEED_MBPS_L4 = ...
+NVML_FI_DEV_NVLINK_SPEED_MBPS_L5 = ...
+NVML_FI_DEV_NVLINK_SPEED_MBPS_COMMON = ...
+NVML_FI_DEV_NVLINK_LINK_COUNT = ...
+NVML_FI_DEV_RETIRED_PENDING_SBE = ...
+NVML_FI_DEV_RETIRED_PENDING_DBE = ...
+NVML_FI_DEV_PCIE_REPLAY_COUNTER = ...
+NVML_FI_DEV_PCIE_REPLAY_ROLLOVER_COUNTER = ...
+NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L6 = ...
+NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L7 = ...
+NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L8 = ...
+NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L9 = ...
+NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L10 = ...
+NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L11 = ...
+NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L6 = ...
+NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L7 = ...
+NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L8 = ...
+NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L9 = ...
+NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L10 = ...
+NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L11 = ...
+NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L6 = ...
+NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L7 = ...
+NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L8 = ...
+NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L9 = ...
+NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L10 = ...
+NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L11 = ...
+NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L6 = ...
+NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L7 = ...
+NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L8 = ...
+NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L9 = ...
+NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L10 = ...
+NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L11 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L6 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L7 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L8 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L9 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L10 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L11 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L6 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L7 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L8 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L9 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L10 = ...
+NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L11 = ...
+NVML_FI_DEV_NVLINK_SPEED_MBPS_L6 = ...
+NVML_FI_DEV_NVLINK_SPEED_MBPS_L7 = ...
+NVML_FI_DEV_NVLINK_SPEED_MBPS_L8 = ...
+NVML_FI_DEV_NVLINK_SPEED_MBPS_L9 = ...
+NVML_FI_DEV_NVLINK_SPEED_MBPS_L10 = ...
+NVML_FI_DEV_NVLINK_SPEED_MBPS_L11 = ...
+NVML_FI_DEV_NVLINK_THROUGHPUT_DATA_TX = ...
+NVML_FI_DEV_NVLINK_THROUGHPUT_DATA_RX = ...
+NVML_FI_DEV_NVLINK_THROUGHPUT_RAW_TX = ...
+NVML_FI_DEV_NVLINK_THROUGHPUT_RAW_RX = ...
+NVML_FI_DEV_REMAPPED_COR = ...
+NVML_FI_DEV_REMAPPED_UNC = ...
+NVML_FI_DEV_REMAPPED_PENDING = ...
+NVML_FI_DEV_REMAPPED_FAILURE = ...
+NVML_FI_DEV_NVLINK_REMOTE_NVLINK_ID = ...
+NVML_FI_DEV_NVSWITCH_CONNECTED_LINK_COUNT = ...
+NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L0 = ...
+NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L1 = ...
+NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L2 = ...
+NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L3 = ...
+NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L4 = ...
+NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L5 = ...
+NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L6 = ...
+NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L7 = ...
+NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L8 = ...
+NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L9 = ...
+NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L10 = ...
+NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L11 = ...
+NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_TOTAL = ...
+NVML_FI_DEV_NVLINK_ERROR_DL_REPLAY = ...
+NVML_FI_DEV_NVLINK_ERROR_DL_RECOVERY = ...
+NVML_FI_DEV_NVLINK_ERROR_DL_CRC = ...
+NVML_FI_DEV_NVLINK_GET_SPEED = ...
+NVML_FI_DEV_NVLINK_GET_STATE = ...
+NVML_FI_DEV_NVLINK_GET_VERSION = ...
+NVML_FI_DEV_NVLINK_GET_POWER_STATE = ...
+NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD = ...
+NVML_FI_DEV_PCIE_L0_TO_RECOVERY_COUNTER = ...
+NVML_FI_DEV_C2C_LINK_COUNT = ...
+NVML_FI_DEV_C2C_LINK_GET_STATUS = ...
+NVML_FI_DEV_C2C_LINK_GET_MAX_BW = ...
+NVML_FI_DEV_PCIE_COUNT_CORRECTABLE_ERRORS = ...
+NVML_FI_DEV_PCIE_COUNT_NAKS_RECEIVED = ...
+NVML_FI_DEV_PCIE_COUNT_RECEIVER_ERROR = ...
+NVML_FI_DEV_PCIE_COUNT_BAD_TLP = ...
+NVML_FI_DEV_PCIE_COUNT_NAKS_SENT = ...
+NVML_FI_DEV_PCIE_COUNT_BAD_DLLP = ...
+NVML_FI_DEV_PCIE_COUNT_NON_FATAL_ERROR = ...
+NVML_FI_DEV_PCIE_COUNT_FATAL_ERROR = ...
+NVML_FI_DEV_PCIE_COUNT_UNSUPPORTED_REQ = ...
+NVML_FI_DEV_PCIE_COUNT_LCRC_ERROR = ...
+NVML_FI_DEV_PCIE_COUNT_LANE_ERROR = ...
+NVML_FI_DEV_IS_RESETLESS_MIG_SUPPORTED = ...
+NVML_FI_DEV_POWER_AVERAGE = ...
+NVML_FI_DEV_POWER_INSTANT = ...
+NVML_FI_DEV_POWER_MIN_LIMIT = ...
+NVML_FI_DEV_POWER_MAX_LIMIT = ...
+NVML_FI_DEV_POWER_DEFAULT_LIMIT = ...
+NVML_FI_DEV_POWER_CURRENT_LIMIT = ...
+NVML_FI_DEV_ENERGY = ...
+NVML_FI_DEV_POWER_REQUESTED_LIMIT = ...
+NVML_FI_DEV_TEMPERATURE_SHUTDOWN_TLIMIT = ...
+NVML_FI_DEV_TEMPERATURE_SLOWDOWN_TLIMIT = ...
+NVML_FI_DEV_TEMPERATURE_MEM_MAX_TLIMIT = ...
+NVML_FI_DEV_TEMPERATURE_GPU_MAX_TLIMIT = ...
+NVML_FI_DEV_PCIE_COUNT_TX_BYTES = ...
+NVML_FI_DEV_PCIE_COUNT_RX_BYTES = ...
+NVML_FI_DEV_IS_MIG_MODE_INDEPENDENT_MIG_QUERY_CAPABLE = ...
+NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_MAX = ...
+NVML_FI_DEV_NVLINK_COUNT_XMIT_PACKETS = ...
+NVML_FI_DEV_NVLINK_COUNT_XMIT_BYTES = ...
+NVML_FI_DEV_NVLINK_COUNT_RCV_PACKETS = ...
+NVML_FI_DEV_NVLINK_COUNT_RCV_BYTES = ...
+NVML_FI_DEV_NVLINK_COUNT_VL15_DROPPED = ...
+NVML_FI_DEV_NVLINK_COUNT_MALFORMED_PACKET_ERRORS = ...
+NVML_FI_DEV_NVLINK_COUNT_BUFFER_OVERRUN_ERRORS = ...
+NVML_FI_DEV_NVLINK_COUNT_RCV_ERRORS = ...
+NVML_FI_DEV_NVLINK_COUNT_RCV_REMOTE_ERRORS = ...
+NVML_FI_DEV_NVLINK_COUNT_RCV_GENERAL_ERRORS = ...
+NVML_FI_DEV_NVLINK_COUNT_LOCAL_LINK_INTEGRITY_ERRORS = ...
+NVML_FI_DEV_NVLINK_COUNT_XMIT_DISCARDS = ...
+NVML_FI_DEV_NVLINK_COUNT_LINK_RECOVERY_SUCCESSFUL_EVENTS = ...
+NVML_FI_DEV_NVLINK_COUNT_LINK_RECOVERY_FAILED_EVENTS = ...
+NVML_FI_DEV_NVLINK_COUNT_LINK_RECOVERY_EVENTS = ...
+NVML_FI_DEV_NVLINK_COUNT_RAW_BER_LANE0 = ...
+NVML_FI_DEV_NVLINK_COUNT_RAW_BER_LANE1 = ...
+NVML_FI_DEV_NVLINK_COUNT_RAW_BER = ...
+NVML_FI_DEV_NVLINK_COUNT_EFFECTIVE_ERRORS = ...
+NVML_FI_DEV_NVLINK_COUNT_EFFECTIVE_BER = ...
+NVML_FI_DEV_NVLINK_COUNT_SYMBOL_ERRORS = ...
+NVML_FI_DEV_NVLINK_COUNT_SYMBOL_BER = ...
+NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_MIN = ...
+NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_UNITS = ...
+NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_SUPPORTED = ...
+NVML_FI_DEV_RESET_STATUS = ...
+NVML_FI_DEV_DRAIN_AND_RESET_STATUS = ...
+NVML_FI_DEV_PCIE_OUTBOUND_ATOMICS_MASK = ...
+NVML_FI_DEV_PCIE_INBOUND_ATOMICS_MASK = ...
+NVML_FI_DEV_GET_GPU_RECOVERY_ACTION = ...
+NVML_FI_DEV_C2C_LINK_ERROR_INTR = ...
+NVML_FI_DEV_C2C_LINK_ERROR_REPLAY = ...
+NVML_FI_DEV_C2C_LINK_ERROR_REPLAY_B2B = ...
+NVML_FI_DEV_C2C_LINK_POWER_STATE = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_0 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_1 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_2 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_3 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_4 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_5 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_6 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_7 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_8 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_9 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_10 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_11 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_12 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_13 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_14 = ...
+NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_15 = ...
+NVML_FI_PWR_SMOOTHING_ENABLED = ...
+NVML_FI_PWR_SMOOTHING_PRIV_LVL = ...
+NVML_FI_PWR_SMOOTHING_IMM_RAMP_DOWN_ENABLED = ...
+NVML_FI_PWR_SMOOTHING_APPLIED_TMP_CEIL = ...
+NVML_FI_PWR_SMOOTHING_APPLIED_TMP_FLOOR = ...
+NVML_FI_PWR_SMOOTHING_MAX_PERCENT_TMP_FLOOR_SETTING = ...
+NVML_FI_PWR_SMOOTHING_MIN_PERCENT_TMP_FLOOR_SETTING = ...
+NVML_FI_PWR_SMOOTHING_HW_CIRCUITRY_PERCENT_LIFETIME_REMAINING = ...
+NVML_FI_PWR_SMOOTHING_MAX_NUM_PRESET_PROFILES = ...
+NVML_FI_PWR_SMOOTHING_PROFILE_PERCENT_TMP_FLOOR = ...
+NVML_FI_PWR_SMOOTHING_PROFILE_RAMP_UP_RATE = ...
+NVML_FI_PWR_SMOOTHING_PROFILE_RAMP_DOWN_RATE = ...
+NVML_FI_PWR_SMOOTHING_PROFILE_RAMP_DOWN_HYST_VAL = ...
+NVML_FI_PWR_SMOOTHING_ACTIVE_PRESET_PROFILE = ...
+NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_PERCENT_TMP_FLOOR = ...
+NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_UP_RATE = ...
+NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_DOWN_RATE = ...
+NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_DOWN_HYST_VAL = ...
+NVML_FI_DEV_CLOCKS_EVENT_REASON_SW_POWER_CAP = ...
+NVML_FI_DEV_CLOCKS_EVENT_REASON_SYNC_BOOST = ...
+NVML_FI_DEV_CLOCKS_EVENT_REASON_SW_THERM_SLOWDOWN = ...
+NVML_FI_DEV_CLOCKS_EVENT_REASON_HW_THERM_SLOWDOWN = ...
+NVML_FI_DEV_CLOCKS_EVENT_REASON_HW_POWER_BRAKE_SLOWDOWN = ...
+NVML_FI_DEV_POWER_SYNC_BALANCING_FREQ = ...
+NVML_FI_DEV_POWER_SYNC_BALANCING_AF = ...
+NVML_FI_DEV_EDPP_MULTIPLIER = ...
+NVML_FI_PWR_SMOOTHING_PRIMARY_POWER_FLOOR = ...
+NVML_FI_PWR_SMOOTHING_SECONDARY_POWER_FLOOR = ...
+NVML_FI_PWR_SMOOTHING_MIN_PRIMARY_FLOOR_ACT_OFFSET = ...
+NVML_FI_PWR_SMOOTHING_MIN_PRIMARY_FLOOR_ACT_POINT = ...
+NVML_FI_PWR_SMOOTHING_WINDOW_MULTIPLIER = ...
+NVML_FI_PWR_SMOOTHING_DELAYED_PWR_SMOOTHING_SUPPORTED = ...
+NVML_FI_PWR_SMOOTHING_PROFILE_SECONDARY_POWER_FLOOR = ...
+NVML_FI_PWR_SMOOTHING_PROFILE_PRIMARY_FLOOR_ACT_WIN_MULT = ...
+NVML_FI_PWR_SMOOTHING_PROFILE_PRIMARY_FLOOR_TAR_WIN_MULT = ...
+NVML_FI_PWR_SMOOTHING_PROFILE_PRIMARY_FLOOR_ACT_OFFSET = ...
+NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_SECONDARY_POWER_FLOOR = ...
+NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_PRIMARY_FLOOR_ACT_WIN_MULT = ...
+NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_PRIMARY_FLOOR_TAR_WIN_MULT = ...
+NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_PRIMARY_FLOOR_ACT_OFFSET = ...
+NVML_FI_DEV_NVLINK_COUNT_RAW_ERRORS_LANE0 = ...
+NVML_FI_DEV_NVLINK_COUNT_RAW_ERRORS_LANE1 = ...
+NVML_FI_DEV_NVLINK_COUNT_RAW_BER_LANE0_V2 = ...
+NVML_FI_DEV_NVLINK_COUNT_RAW_BER_LANE1_V2 = ...
+NVML_FI_DEV_NVLINK_COUNT_RAW_BER_V2 = ...
+NVML_FI_DEV_NVLINK_PLR_XMIT_BLOCKS = ...
+NVML_FI_DEV_NVLINK_PLR_XMIT_RETRY_BLOCKS = ...
+NVML_FI_MAX = ...
+NVML_NVLINK_STATE_INACTIVE = ...
+NVML_NVLINK_STATE_ACTIVE = ...
+NVML_NVLINK_STATE_SLEEP = ...
+NVML_NVLINK_LOW_POWER_THRESHOLD_UNIT_100US = ...
+NVML_NVLINK_LOW_POWER_THRESHOLD_UNIT_50US = ...
+NVML_C2C_POWER_STATE_FULL_POWER = ...
+NVML_C2C_POWER_STATE_LOW_POWER = ...
+NVML_GPU_VIRTUALIZATION_MODE_NONE = ...
+NVML_GPU_VIRTUALIZATION_MODE_PASSTHROUGH = ...
+NVML_GPU_VIRTUALIZATION_MODE_VGPU = ...
+NVML_GPU_VIRTUALIZATION_MODE_HOST_VGPU = ...
+NVML_GPU_VIRTUALIZATION_MODE_HOST_VSGA = ...
+nvmlLib = ...
+libLoadLock = ...
+_nvmlLib_refcount = ...
+_nvmlVgpuTypeId_t = c_uint
+_nvmlVgpuInstance_t = c_uint
+_nvmlVgpuVmIdType_t = c_uint
+NVML_VGPU_VM_ID_DOMAIN_ID = ...
+NVML_VGPU_VM_ID_UUID = ...
+_nvmlGridLicenseFeatureCode_t = c_uint
+NVML_GRID_LICENSE_FEATURE_CODE_UNKNOWN = ...
+NVML_GRID_LICENSE_FEATURE_CODE_VGPU = ...
+NVML_GRID_LICENSE_FEATURE_CODE_NVIDIA_RTX = ...
+NVML_GRID_LICENSE_FEATURE_CODE_VWORKSTATION = ...
+NVML_GRID_LICENSE_FEATURE_CODE_GAMING = ...
+NVML_GRID_LICENSE_FEATURE_CODE_COMPUTE = ...
+_nvmlGridLicenseExpiryStatus_t = c_uint8
+NVML_GRID_LICENSE_EXPIRY_NOT_AVAILABLE = ...
+NVML_GRID_LICENSE_EXPIRY_INVALID = ...
+NVML_GRID_LICENSE_EXPIRY_VALID = ...
+NVML_GRID_LICENSE_EXPIRY_NOT_APPLICABLE = ...
+NVML_GRID_LICENSE_EXPIRY_PERMANENT = ...
+_nvmlVgpuCapability_t = c_uint
+NVML_VGPU_CAP_NVLINK_P2P = ...
+NVML_VGPU_CAP_GPUDIRECT = ...
+NVML_VGPU_CAP_MULTI_VGPU_EXCLUSIVE = ...
+NVML_VGPU_CAP_EXCLUSIVE_TYPE = ...
+NVML_VGPU_CAP_EXCLUSIVE_SIZE = ...
+NVML_VGPU_CAP_COUNT = ...
+_nvmlVgpuDriverCapability_t = c_uint
+NVML_VGPU_DRIVER_CAP_HETEROGENEOUS_MULTI_VGPU = ...
+NVML_VGPU_DRIVER_CAP_WARM_UPDATE = ...
+NVML_VGPU_DRIVER_CAP_COUNT = ...
+_nvmlDeviceVgpuCapability_t = c_uint
+NVML_DEVICE_VGPU_CAP_FRACTIONAL_MULTI_VGPU = ...
+NVML_DEVICE_VGPU_CAP_HETEROGENEOUS_TIMESLICE_PROFILES = ...
+NVML_DEVICE_VGPU_CAP_HETEROGENEOUS_TIMESLICE_SIZES = ...
+NVML_DEVICE_VGPU_CAP_READ_DEVICE_BUFFER_BW = ...
+NVML_DEVICE_VGPU_CAP_WRITE_DEVICE_BUFFER_BW = ...
+NVML_DEVICE_VGPU_CAP_DEVICE_STREAMING = ...
+NVML_DEVICE_VGPU_CAP_MINI_QUARTER_GPU = ...
+NVML_DEVICE_VGPU_CAP_COMPUTE_MEDIA_ENGINE_GPU = ...
+NVML_DEVICE_VGPU_CAP_WARM_UPDATE = ...
+NVML_DEVICE_VGPU_CAP_HOMOGENEOUS_PLACEMENTS = ...
+NVML_DEVICE_VGPU_CAP_MIG_TIMESLICING_SUPPORTED = ...
+NVML_DEVICE_VGPU_CAP_MIG_TIMESLICING_ENABLED = ...
+NVML_DEVICE_VGPU_CAP_COUNT = ...
+_nvmlVgpuGuestInfoState_t = c_uint
+NVML_VGPU_INSTANCE_GUEST_INFO_STATE_UNINITIALIZED = ...
+NVML_VGPU_INSTANCE_GUEST_INFO_STATE_INITIALIZED = ...
+_nvmlVgpuVmCompatibility_t = c_uint
+NVML_VGPU_VM_COMPATIBILITY_NONE = ...
+NVML_VGPU_VM_COMPATIBILITY_COLD = ...
+NVML_VGPU_VM_COMPATIBILITY_HIBERNATE = ...
+NVML_VGPU_VM_COMPATIBILITY_SLEEP = ...
+NVML_VGPU_VM_COMPATIBILITY_LIVE = ...
+_nvmlVgpuPgpuCompatibilityLimitCode_t = c_uint
+NVML_VGPU_COMPATIBILITY_LIMIT_NONE = ...
+NVML_VGPU_COMPATIBILITY_LIMIT_HOST_DRIVER = ...
+NVML_VGPU_COMPATIBILITY_LIMIT_GUEST_DRIVER = ...
+NVML_VGPU_COMPATIBILITY_LIMIT_GPU = ...
+NVML_VGPU_COMPATIBILITY_LIMIT_OTHER = ...
+_nvmlHostVgpuMode_t = c_uint
+NVML_HOST_VGPU_MODE_NON_SRIOV = ...
+NVML_HOST_VGPU_MODE_SRIOV = ...
+_nvmlConfComputeGpusReadyState_t = c_uint
+NVML_CC_ACCEPTING_CLIENT_REQUESTS_FALSE = ...
+NVML_CC_ACCEPTING_CLIENT_REQUESTS_TRUE = ...
+_nvmlConfComputeGpuCaps_t = c_uint
+NVML_CC_SYSTEM_GPUS_CC_NOT_CAPABLE = ...
+NVML_CC_SYSTEM_GPUS_CC_CAPABLE = ...
+_nvmlConfComputeCpuCaps_t = c_uint
+NVML_CC_SYSTEM_CPU_CAPS_NONE = ...
+NVML_CC_SYSTEM_CPU_CAPS_AMD_SEV = ...
+NVML_CC_SYSTEM_CPU_CAPS_INTEL_TDX = ...
+NVML_CC_SYSTEM_CPU_CAPS_AMD_SEV_SNP = ...
+NVML_CC_SYSTEM_CPU_CAPS_AMD_SNP_VTOM = ...
+_nvmlConfComputeDevToolsMode_t = c_uint
+NVML_CC_SYSTEM_DEVTOOLS_MODE_OFF = ...
+NVML_CC_SYSTEM_DEVTOOLS_MODE_ON = ...
+NVML_CC_SYSTEM_MULTIGPU_NONE = ...
+NVML_CC_SYSTEM_MULTIGPU_PROTECTED_PCIE = ...
+NVML_CC_SYSTEM_MULTIGPU_NVLE = ...
+NVML_CC_SYSTEM_ENVIRONMENT_UNAVAILABLE = ...
+NVML_CC_SYSTEM_ENVIRONMENT_SIM = ...
+NVML_CC_SYSTEM_ENVIRONMENT_PROD = ...
+_nvmlConfComputeCcFeature_t = c_uint
+NVML_CC_SYSTEM_FEATURE_DISABLED = ...
+NVML_CC_SYSTEM_FEATURE_ENABLED = ...
+_nvmlConfComputeCcKeyRotationThreshAttackerAdv_t = c_uint
+NVML_CC_KEY_ROTATION_THRESH_ATTACKER_ADVANTAGE_MIN = ...
+NVML_CC_KEY_ROTATION_THRESH_ATTACKER_ADVANTAGE_MAX = ...
+NVML_GSP_FIRMWARE_VERSION_BUF_SIZE = ...
+
+class NVMLLibraryMismatchError(Exception): ...
+
+class NVMLError(Exception):
+ _valClassMapping = ...
+ _errcode_to_string = ...
+ def __new__(typ, value): # -> Self:
+ """
+ Maps value to a proper subclass of NVMLError.
+ See _extractNVMLErrorsAsClasses function for more details
+ """
+ ...
+
+ def __str__(self) -> str: ...
+ def __eq__(self, other) -> bool: ...
+
+def nvmlExceptionClass(nvmlErrorCode): ...
+
+_nvmlGetFunctionPointer_cache = ...
+
+class nvmlFriendlyObject:
+ def __init__(self, dictionary) -> None: ...
+ def __str__(self) -> str: ...
+
+def nvmlStructToFriendlyObject(struct): # -> nvmlFriendlyObject:
+ ...
+def nvmlFriendlyObjectToStruct(obj, model): ...
+
+class struct_c_nvmlUnit_t(Structure): ...
+
+c_nvmlUnit_t = ...
+
+class _PrintableStructure(Structure):
+ """
+ Abstract class that produces nicer __str__ output than ctypes.Structure.
+ e.g. instead of:
+ >>> print str(obj)
+ <class_name object at 0x7fdf82fef9e0>
+ this class will print
+ class_name(field_name: formatted_value, field_name: formatted_value)
+
+ _fmt_ dictionary of <str _field_ name> -> <str format>
+ e.g. class that has _field_ 'hex_value', c_uint could be formatted with
+ _fmt_ = {"hex_value" : "%08X"}
+ to produce nicer output.
+ Default fomratting string for all fields can be set with key "<default>" like:
+ _fmt_ = {"<default>" : "%d MHz"} # e.g all values are numbers in MHz.
+ If not set it's assumed to be just "%s"
+
+ Exact format of returned str from this class is subject to change in the future.
+ """
+
+ _fmt_ = ...
+ def __str__(self) -> str: ...
+ def __getattribute__(self, name): # -> <subclass of bytes and str> | str | Any:
+ ...
+ def __setattr__(self, name, value) -> None: ...
+
+class c_nvmlUnitInfo_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlC2cModeInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlC2cModeInfo_v1 = ...
+
+class c_nvmlLedState_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlPSUInfo_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlUnitFanInfo_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlUnitFanSpeeds_t(_PrintableStructure):
+ _fields_ = ...
+
+class struct_c_nvmlDevice_t(Structure): ...
+
+c_nvmlDevice_t = ...
+
+class nvmlPciInfoExt_v1_t(_PrintableStructure):
+ _fields_ = ...
+ _fmt_ = ...
+
+nvmlPciInfoExt_v1 = ...
+
+class nvmlPciInfo_v2_t(_PrintableStructure):
+ _fields_ = ...
+ _fmt_ = ...
+
+class nvmlPciInfo_t(_PrintableStructure):
+ _fields_ = ...
+ _fmt_ = ...
+
+class c_nvmlSystemDriverBranchInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+SystemDriverBranchInfo_v1 = ...
+
+class c_nvmlExcludedDeviceInfo_t(_PrintableStructure):
+ _fields_ = ...
+
+class nvmlNvLinkUtilizationControl_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlMemory_t(_PrintableStructure):
+ _fields_ = ...
+ _fmt_ = ...
+
+class c_nvmlMemory_v2_t(_PrintableStructure):
+ _fields_ = ...
+ _fmt_ = ...
+
+nvmlMemory_v2 = ...
+
+class c_nvmlBAR1Memory_t(_PrintableStructure):
+ _fields_ = ...
+ _fmt_ = ...
+
+class nvmlClkMonFaultInfo_t(Structure):
+ _fields_ = ...
+
+MAX_CLK_DOMAINS = ...
+
+class nvmlClkMonStatus_t(Structure):
+ _fields_ = ...
+
+class c_nvmlProcessInfo_v2_t(_PrintableStructure):
+ _fields_ = ...
+ _fmt_ = ...
+
+c_nvmlProcessInfo_v3_t = c_nvmlProcessInfo_v2_t
+c_nvmlProcessInfo_t = c_nvmlProcessInfo_v3_t
+_nvmlProcessMode_t = c_uint
+NVML_PROCESS_MODE_COMPUTE = ...
+NVML_PROCESS_MODE_GRAPHICS = ...
+NVML_PROCESS_MODE_MPS = ...
+
+class c_nvmlProcessDetail_v1_t(Structure):
+ _fields_ = ...
+
+class c_nvmlProcessDetailList_v1_t(_PrintableStructure):
+ _fields_ = ...
+ _fmt_ = ...
+
+c_nvmlProcessDetailList_t = c_nvmlProcessDetailList_v1_t
+nvmlProcessDetailList_v1 = ...
+
+class c_nvmlBridgeChipInfo_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlBridgeChipHierarchy_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlEccErrorCounts_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlUtilization_t(_PrintableStructure):
+ _fields_ = ...
+ _fmt_ = ...
+ gpu: c_uint
+ memory: c_uint
+
+class c_nvmlHwbcEntry_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlValue_t(Union):
+ _fields_ = ...
+
+class c_nvmlSample_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlViolationTime_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlFieldValue_t(_PrintableStructure):
+ _fields_ = ...
+
+NVML_NVLINK_TOTAL_SUPPORTED_BW_MODES = ...
+nvmlNvlinkSupportedBwModes_v1 = ...
+
+class c_nvmlNvlinkSupportedBwModes_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlNvlinkGetBwMode_v1 = ...
+
+class c_nvmlNvlinkGetBwMode_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlNvlinkSetBwMode_v1 = ...
+
+class c_nvmlNvlinkSetBwMode_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+class c_nvmlVgpuHeterogeneousMode_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+VgpuHeterogeneousMode_v1 = ...
+
+class c_nvmlVgpuPlacementId_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+VgpuPlacementId_v1 = ...
+
+class c_nvmlVgpuPlacementList_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+VgpuPlacementList_v1 = ...
+NVML_VGPU_PGPU_HETEROGENEOUS_MODE = ...
+NVML_VGPU_PGPU_HOMOGENEOUS_MODE = ...
+
+class c_nvmlVgpuPlacementList_v2_t(_PrintableStructure):
+ _fields_ = ...
+
+VgpuPlacementList_v2 = ...
+
+class c_nvmlVgpuTypeBar1Info_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+VgpuTypeBar1Info_v1 = ...
+
+class c_nvmlVgpuInstanceUtilizationSample_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuInstanceUtilizationInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuInstancesUtilizationInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+VgpuInstancesUtilizationInfo_v1 = ...
+
+class c_nvmlVgpuProcessUtilizationSample_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuProcessUtilizationInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuProcessesUtilizationInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+VgpuProcessesUtilizationInfo_v1 = ...
+
+class nvmlVgpuRuntimeState_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+VgpuRuntimeState_v1 = ...
+
+class c_nvmlVgpuLicenseExpiry_t(_PrintableStructure):
+ _fields_ = ...
+
+NVML_GRID_LICENSE_STATE_UNKNOWN = ...
+NVML_GRID_LICENSE_STATE_UNINITIALIZED = ...
+NVML_GRID_LICENSE_STATE_UNLICENSED_UNRESTRICTED = ...
+NVML_GRID_LICENSE_STATE_UNLICENSED_RESTRICTED = ...
+NVML_GRID_LICENSE_STATE_UNLICENSED = ...
+NVML_GRID_LICENSE_STATE_LICENSED = ...
+
+class c_nvmlVgpuLicenseInfo_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlEncoderSession_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlProcessUtilizationSample_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlProcessUtilizationInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlProcessesUtilizationInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+ProcessesUtilizationInfo_v1 = ...
+
+class c_nvmlGridLicenseExpiry_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlGridLicensableFeature_v4_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlGridLicensableFeatures_v4_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlGridLicensableFeature_v3_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlGridLicensableFeatures_v3_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlGridLicensableFeature_v2_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlGridLicensableFeatures_v2_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlGridLicensableFeature_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlGridLicensableFeatures_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlMarginTemperature_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlMarginTemperature_v1 = ...
+NVML_DEVICE_UUID_ASCII_LEN = ...
+NVML_DEVICE_UUID_BINARY_LEN = ...
+NVML_UUID_TYPE_NONE = ...
+NVML_UUID_TYPE_ASCII = ...
+NVML_UUID_TYPE_BINARY = ...
+
+class c_nvmlUUIDValue_t(Union):
+ _fields_ = ...
+
+nvmlUUID_v1 = ...
+
+class c_nvmlUUID_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlPdi_v1 = ...
+
+class c_nvmlPdi_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlRepairStatus_v1 = ...
+
+class c_nvmlRepairStatus_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlNvLinkInfo_v1 = ...
+
+class c_nvmlNvLinkInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+NVML_NVLINK_FIRMWARE_UCODE_TYPE_MSE = ...
+NVML_NVLINK_FIRMWARE_UCODE_TYPE_NETIR = ...
+NVML_NVLINK_FIRMWARE_UCODE_TYPE_NETIR_UPHY = ...
+NVML_NVLINK_FIRMWARE_UCODE_TYPE_NETIR_CLN = ...
+NVML_NVLINK_FIRMWARE_UCODE_TYPE_NETIR_DLN = ...
+NVML_NVLINK_FIRMWARE_VERSION_LENGTH = ...
+
+class c_nvmlNvlinkFirmwareVersion_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlNvlinkFirmwareInfo_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlNvLinkInfo_v2 = ...
+
+class c_nvmlNvLinkInfo_v2_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+NVML_PRM_DATA_MAX_SIZE = ...
+
+class c_nvmlPRMTLV_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self, size=...) -> None: ...
+
+def nvmlDeviceReadWritePRM_v1(
+ handle: _Pointer[struct_c_nvmlDevice_t], c_info
+) -> None: ...
+
+NVML_DEVICE_ADDRESSING_MODE_NONE = ...
+NVML_DEVICE_ADDRESSING_MODE_HMM = ...
+NVML_DEVICE_ADDRESSING_MODE_ATS = ...
+nvmlDeviceAddressingMode_v1 = ...
+
+class c_nvmlDeviceAddressingMode_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlUnrepairableMemory_v1 = ...
+
+class c_nvmlUnrepairableMemory_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+NVML_PRM_COUNTER_ID_NONE = ...
+NVML_PRM_COUNTER_ID_PPCNT_PHYSICAL_LAYER_CTRS_LINK_DOWN_EVENTS = ...
+NVML_PRM_COUNTER_ID_PPCNT_PHYSICAL_LAYER_CTRS_SUCCESSFUL_RECOVERY_EVENTS = ...
+NVML_PRM_COUNTER_ID_PPCNT_RECOVERY_CTRS_TOTAL_SUCCESSFUL_RECOVERY_EVENTS = ...
+NVML_PRM_COUNTER_ID_PPCNT_RECOVERY_CTRS_TIME_SINCE_LAST_RECOVERY = ...
+NVML_PRM_COUNTER_ID_PPCNT_RECOVERY_CTRS_TIME_BETWEEN_LAST_TWO_RECOVERIES = ...
+NVML_PRM_COUNTER_ID_PPCNT_PORTCOUNTERS_PORT_XMIT_WAIT = ...
+NVML_PRM_COUNTER_ID_PPCNT_PLR_RCV_CODES = ...
+NVML_PRM_COUNTER_ID_PPCNT_PLR_RCV_CODE_ERR = ...
+NVML_PRM_COUNTER_ID_PPCNT_PLR_RCV_UNCORRECTABLE_CODE = ...
+NVML_PRM_COUNTER_ID_PPCNT_PLR_XMIT_CODES = ...
+NVML_PRM_COUNTER_ID_PPCNT_PLR_XMIT_RETRY_CODES = ...
+NVML_PRM_COUNTER_ID_PPCNT_PLR_XMIT_RETRY_EVENTS = ...
+NVML_PRM_COUNTER_ID_PPCNT_PLR_SYNC_EVENTS = ...
+NVML_PRM_COUNTER_ID_PPRM_OPER_RECOVERY = ...
+
+class c_nvmlPRMCounterInput_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self, port=...) -> None: ...
+
+class c_nvmlPRMCounterValue_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+class c_nvmlPRMCounter_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self, ctrId=..., inData=...) -> None: ...
+
+class c_nvmlPRMCounterList_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self, num, ctrs=...) -> None: ...
+
+def nvmlDeviceReadPRMCounters_v1(
+ handle: _Pointer[struct_c_nvmlDevice_t], c_info
+) -> None: ...
+
+class struct_c_nvmlEventSet_t(Structure): ...
+
+c_nvmlEventSet_t = ...
+nvmlEventTypeSingleBitEccError = ...
+nvmlEventTypeDoubleBitEccError = ...
+nvmlEventTypePState = ...
+nvmlEventTypeXidCriticalError = ...
+nvmlEventTypeClock = ...
+nvmlEventTypePowerSourceChange = ...
+nvmlEventMigConfigChange = ...
+nvmlEventTypeSingleBitEccErrorStorm = ...
+nvmlEventTypeDramRetirementEvent = ...
+nvmlEventTypeDramRetirementFailure = ...
+nvmlEventTypeNonFatalPoisonError = ...
+nvmlEventTypeFatalPoisonError = ...
+nvmlEventTypeGpuUnavailableError = ...
+nvmlEventTypeGpuRecoveryAction = ...
+nvmlEventTypeNone = ...
+nvmlEventTypeAll = ...
+nvmlClocksEventReasonGpuIdle = ...
+nvmlClocksEventReasonApplicationsClocksSetting = ...
+nvmlClocksEventReasonUserDefinedClocks = ...
+nvmlClocksEventReasonSwPowerCap = ...
+nvmlClocksEventReasonHwSlowdown = ...
+nvmlClocksEventReasonSyncBoost = ...
+nvmlClocksEventReasonSwThermalSlowdown = ...
+nvmlClocksEventReasonHwThermalSlowdown = ...
+nvmlClocksEventReasonHwPowerBrakeSlowdown = ...
+nvmlClocksEventReasonDisplayClockSetting = ...
+nvmlClocksEventReasonNone = ...
+nvmlClocksEventReasonAll = ...
+nvmlClocksThrottleReasonGpuIdle = ...
+nvmlClocksThrottleReasonApplicationsClocksSetting = ...
+nvmlClocksThrottleReasonUserDefinedClocks = ...
+nvmlClocksThrottleReasonSwPowerCap = ...
+nvmlClocksThrottleReasonHwSlowdown = ...
+nvmlClocksThrottleReasonSyncBoost = ...
+nvmlClocksThrottleReasonSwThermalSlowdown = ...
+nvmlClocksThrottleReasonHwThermalSlowdown = ...
+nvmlClocksThrottleReasonHwPowerBrakeSlowdown = ...
+nvmlClocksThrottleReasonDisplayClockSetting = ...
+nvmlClocksThrottleReasonNone = ...
+nvmlClocksThrottleReasonAll = ...
+
+class c_nvmlEventData_t(_PrintableStructure):
+ _fields_ = ...
+ _fmt_ = ...
+
+class struct_c_nvmlSystemEventSet_t(Structure): ...
+
+c_nvmlSystemEventSet_t = ...
+nvmlSystemEventTypeGpuDriverUnbind = ...
+nvmlSystemEventTypeGpuDriverBind = ...
+nvmlSystemEventTypeCount = ...
+nvmlSystemEventSetCreateRequest_v1 = ...
+
+class c_nvmlSystemEventSetCreateRequest_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlSystemEventSetFreeRequest_v1 = ...
+
+class c_nvmlSystemEventSetFreeRequest_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlSystemRegisterEventRequest_v1 = ...
+
+class c_nvmlSystemRegisterEventRequest_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+class c_nvmlSystemEventData_v1_t(_PrintableStructure):
+ _fields_ = ...
+ _fmt_ = ...
+
+nvmlSystemEventSetWaitRequest_v1 = ...
+
+class c_nvmlSystemEventSetWaitRequest_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+def c_nvmlSystemEventSetCreate(req) -> None:
+ """
+ C API binding for c_nvmlSystemEventSetFree
+ :param req: reference of c_nvmlSystemEventSetCreateRequest_v1_t
+ """
+ ...
+
+def c_nvmlSystemEventSetFree(req) -> None:
+ """
+ C API binding for c_nvmlSystemEventSetFree
+ :param req: reference of c_nvmlSystemEventSetFreeRequest_v1_t
+ """
+ ...
+
+def c_nvmlSystemRegisterEvents(req) -> None:
+ """
+ C API binding for nvmlSystemRegisterEvents
+ :param req: reference of c_nvmlSystemRegisterEventRequest_v1_t
+ """
+ ...
+
+def c_nvmlSystemEventSetWait(req): # -> Literal[10] | None:
+ """
+ C API binding for nvmlSystemEventSetWait
+ :param req: reference of c_nvmlSystemEventSetWaitRequest_v1_t
+ """
+ ...
+
+def nvmlSystemEventSetCreate(version):
+ """
+ Create an NVML system event set.
+ :param version: The version of the request.
+ :return: A ctypes pointer to the created c_nvmlSystemEventSet_t structure.
+ """
+ ...
+
+def nvmlSystemEventSetFree(version, setHandle) -> None:
+ """
+ Free an NVML system event set.
+ :param version: The version of the request.
+ :param setHandle: A ctypes pointer to a c_nvmlSystemEventSet_t structure.
+ """
+ ...
+
+def nvmlSystemRegisterEvents(version, eventTypes, setHandle) -> None:
+ """
+ Register events for an NVML system event set.
+ :param version: The version of the request.
+ :param eventTypes: A bitmask of event types to register.
+ :param setHandle: A ctypes pointer to a c_nvmlSystemEventSet_t structure.
+ """
+ ...
+
+def nvmlSystemEventSetWait(
+ version, setHandle, timeoutMs, eventData, eventDataSize
+): # -> list[Any]:
+ """
+ Wait for events in an NVML system event set.
+ :param version: The version of the request.
+ :param setHandle: A ctypes pointer to a c_nvmlSystemEventSet_t structure.
+ :param timeoutMs: Timeout in milliseconds.
+ :param eventData: A ctypes array of c_nvmlSystemEventData_v1_t for event data.
+ :param eventDataSize: Number of c_nvmlSystemEventData_v1_t in evenData array..
+ :return: A list of dictionaries containing event data.
+ """
+ ...
+
+class c_nvmlAccountingStats_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuVersion_t(Structure):
+ _fields_ = ...
+
+class c_nvmlVgpuMetadata_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuPgpuMetadata_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuPgpuCompatibility_t(Structure):
+ _fields_ = ...
+
+NVML_VGPU_SCHEDULER_POLICY_UNKNOWN = ...
+NVML_VGPU_SCHEDULER_POLICY_BEST_EFFORT = ...
+NVML_VGPU_SCHEDULER_POLICY_EQUAL_SHARE = ...
+NVML_VGPU_SCHEDULER_POLICY_FIXED_SHARE = ...
+NVML_SUPPORTED_VGPU_SCHEDULER_POLICY_COUNT = ...
+NVML_SCHEDULER_SW_MAX_LOG_ENTRIES = ...
+NVML_VGPU_SCHEDULER_ARR_DEFAULT = ...
+NVML_VGPU_SCHEDULER_ARR_DISABLE = ...
+NVML_VGPU_SCHEDULER_ARR_ENABLE = ...
+NVML_VGPU_SCHEDULER_ENGINE_TYPE_GRAPHICS = ...
+NVML_VGPU_SCHEDULER_ENGINE_TYPE_NVENC1 = ...
+NVML_VGPU_SCHEDULER_ENGINE_TYPE_NVENC0 = ...
+
+class c_nvmlVgpuSchedDataWithARR_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuSchedData_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuSchedulerParams_t(Union):
+ _fields_ = ...
+
+class c_nvmlVgpuSchedulerLogEntry_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuSchedulerLog_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuSchedulerGetState_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuSchedSetDataWithARR_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuSchedSetData_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuSchedulerSetParams_t(Union):
+ _fields_ = ...
+
+class c_nvmlVgpuSchedulerSetState_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuSchedulerCapabilities_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuTypeIdInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlVgpuTypeIdInfo_v1 = ...
+
+class c_nvmlVgpuTypeMaxInstance_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlVgpuTypeMaxInstance_v1 = ...
+
+class c_nvmlActiveVgpuInstanceInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlActiveVgpuInstanceInfo_v1 = ...
+
+class c_nvmlVgpuSchedulerState_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlVgpuSchedulerState_v1 = ...
+
+class c_nvmlVgpuSchedulerStateInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlVgpuSchedulerStateInfo_v1 = ...
+
+class c_nvmlVgpuSchedulerLogInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlVgpuSchedulerLogInfo_v1 = ...
+
+class c_nvmlVgpuCreatablePlacementInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlVgpuCreatablePlacementInfo_v1 = ...
+
+class c_nvmlVgpuSchedulerStateInfo_v2_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuSchedulerLogEntry_v2_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuSchedulerLogInfo_v2_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlVgpuSchedulerState_v2_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlFBCStats_t(Structure):
+ _fields_ = ...
+
+class c_nvmlFBCSession_t(_PrintableStructure):
+ _fields_ = ...
+
+NVML_DEVICE_MIG_DISABLE = ...
+NVML_DEVICE_MIG_ENABLE = ...
+NVML_GPU_INSTANCE_PROFILE_1_SLICE = ...
+NVML_GPU_INSTANCE_PROFILE_2_SLICE = ...
+NVML_GPU_INSTANCE_PROFILE_3_SLICE = ...
+NVML_GPU_INSTANCE_PROFILE_4_SLICE = ...
+NVML_GPU_INSTANCE_PROFILE_7_SLICE = ...
+NVML_GPU_INSTANCE_PROFILE_8_SLICE = ...
+NVML_GPU_INSTANCE_PROFILE_6_SLICE = ...
+NVML_GPU_INSTANCE_PROFILE_1_SLICE_REV1 = ...
+NVML_GPU_INSTANCE_PROFILE_2_SLICE_REV1 = ...
+NVML_GPU_INSTANCE_PROFILE_1_SLICE_REV2 = ...
+NVML_GPU_INSTANCE_PROFILE_1_SLICE_GFX = ...
+NVML_GPU_INSTANCE_PROFILE_2_SLICE_GFX = ...
+NVML_GPU_INSTANCE_PROFILE_4_SLICE_GFX = ...
+NVML_GPU_INSTANCE_PROFILE_1_SLICE_NO_ME = ...
+NVML_GPU_INSTANCE_PROFILE_2_SLICE_NO_ME = ...
+NVML_GPU_INSTANCE_PROFILE_1_SLICE_ALL_ME = ...
+NVML_GPU_INSTANCE_PROFILE_2_SLICE_ALL_ME = ...
+NVML_GPU_INSTANCE_PROFILE_COUNT = ...
+
+class c_nvmlGpuInstancePlacement_t(Structure):
+ _fields_ = ...
+
+class c_nvmlGpuInstanceProfileInfo_t(Structure):
+ _fields_ = ...
+
+nvmlGpuInstanceProfileInfo_v2 = ...
+
+class c_nvmlGpuInstanceProfileInfo_v2_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+class c_nvmlGpuInstanceInfo_t(Structure):
+ _fields_ = ...
+
+class struct_c_nvmlGpuInstance_t(Structure): ...
+
+c_nvmlGpuInstance_t = ...
+NVML_COMPUTE_INSTANCE_PROFILE_1_SLICE = ...
+NVML_COMPUTE_INSTANCE_PROFILE_2_SLICE = ...
+NVML_COMPUTE_INSTANCE_PROFILE_3_SLICE = ...
+NVML_COMPUTE_INSTANCE_PROFILE_4_SLICE = ...
+NVML_COMPUTE_INSTANCE_PROFILE_7_SLICE = ...
+NVML_COMPUTE_INSTANCE_PROFILE_8_SLICE = ...
+NVML_COMPUTE_INSTANCE_PROFILE_6_SLICE = ...
+NVML_COMPUTE_INSTANCE_PROFILE_1_SLICE_REV1 = ...
+NVML_COMPUTE_INSTANCE_PROFILE_COUNT = ...
+NVML_COMPUTE_INSTANCE_ENGINE_PROFILE_SHARED = ...
+NVML_COMPUTE_INSTANCE_ENGINE_PROFILE_COUNT = ...
+
+class c_nvmlComputeInstancePlacement_t(Structure):
+ _fields_ = ...
+
+class c_nvmlComputeInstanceProfileInfo_t(Structure):
+ _fields_ = ...
+
+nvmlComputeInstanceProfileInfo_v2 = ...
+
+class c_nvmlComputeInstanceProfileInfo_v2_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+class c_nvmlComputeInstanceInfo_t(Structure):
+ _fields_ = ...
+
+NVML_MAX_GPU_UTILIZATIONS = ...
+NVML_GPU_UTILIZATION_DOMAIN_GPU = ...
+NVML_GPU_UTILIZATION_DOMAIN_FB = ...
+NVML_GPU_UTILIZATION_DOMAIN_VID = ...
+NVML_GPU_UTILIZATION_DOMAIN_BUS = ...
+
+class c_nvmlGpuDynamicPstatesUtilization_t(Structure):
+ _fields_ = ...
+
+class c_nvmlGpuDynamicPstatesInfo_t(Structure):
+ _fields_ = ...
+
+NVML_MAX_THERMAL_SENSORS_PER_GPU = ...
+NVML_THERMAL_TARGET_NONE = ...
+NVML_THERMAL_TARGET_GPU = ...
+NVML_THERMAL_TARGET_MEMORY = ...
+NVML_THERMAL_TARGET_POWER_SUPPLY = ...
+NVML_THERMAL_TARGET_BOARD = ...
+NVML_THERMAL_TARGET_VCD_BOARD = ...
+NVML_THERMAL_TARGET_VCD_INLET = ...
+NVML_THERMAL_TARGET_VCD_OUTLET = ...
+NVML_THERMAL_TARGET_ALL = ...
+NVML_THERMAL_TARGET_UNKNOWN = ...
+NVML_THERMAL_CONTROLLER_NONE = ...
+NVML_THERMAL_CONTROLLER_GPU_INTERNAL = ...
+NVML_THERMAL_CONTROLLER_ADM1032 = ...
+NVML_THERMAL_CONTROLLER_ADT7461 = ...
+NVML_THERMAL_CONTROLLER_MAX6649 = ...
+NVML_THERMAL_CONTROLLER_MAX1617 = ...
+NVML_THERMAL_CONTROLLER_LM99 = ...
+NVML_THERMAL_CONTROLLER_LM89 = ...
+NVML_THERMAL_CONTROLLER_LM64 = ...
+NVML_THERMAL_CONTROLLER_G781 = ...
+NVML_THERMAL_CONTROLLER_ADT7473 = ...
+NVML_THERMAL_CONTROLLER_SBMAX6649 = ...
+NVML_THERMAL_CONTROLLER_VBIOSEVT = ...
+NVML_THERMAL_CONTROLLER_OS = ...
+NVML_THERMAL_CONTROLLER_NVSYSCON_CANOAS = ...
+NVML_THERMAL_CONTROLLER_NVSYSCON_E551 = ...
+NVML_THERMAL_CONTROLLER_MAX6649R = ...
+NVML_THERMAL_CONTROLLER_ADT7473S = ...
+NVML_THERMAL_CONTROLLER_UNKNOWN = ...
+
+class c_nvmlGpuThermalSensor_t(Structure):
+ _fields_ = ...
+
+class c_nvmlGpuThermalSettings_t(Structure):
+ _fields_ = ...
+
+_nvmlCoolerControl_t = c_uint
+NVML_THERMAL_COOLER_SIGNAL_NONE = ...
+NVML_THERMAL_COOLER_SIGNAL_TOGGLE = ...
+NVML_THERMAL_COOLER_SIGNAL_VARIABLE = ...
+NVML_THERMAL_COOLER_SIGNAL_COUNT = ...
+_nvmlCoolerTarget_t = c_uint
+NVML_THERMAL_COOLER_TARGET_NONE = ...
+NVML_THERMAL_COOLER_TARGET_GPU = ...
+NVML_THERMAL_COOLER_TARGET_MEMORY = ...
+NVML_THERMAL_COOLER_TARGET_POWER_SUPPLY = ...
+NVML_THERMAL_COOLER_TARGET_GPU_RELATED = ...
+
+class c_nvmlCoolerInfo_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlCoolerInfo_v1 = ...
+
+def nvmlDeviceGetCoolerInfo(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[<subclass of bytes and str> | str | Any]:
+ ...
+
+class struct_c_nvmlComputeInstance_t(Structure): ...
+
+c_nvmlComputeInstance_t = ...
+
+class c_nvmlDeviceAttributes(Structure):
+ _fields_ = ...
+
+class c_nvmlRowRemapperHistogramValues(Structure):
+ _fields_ = ...
+
+NVML_GPU_CERT_CHAIN_SIZE = ...
+NVML_GPU_ATTESTATION_CERT_CHAIN_SIZE = ...
+NVML_CC_GPU_CEC_NONCE_SIZE = ...
+NVML_CC_GPU_ATTESTATION_REPORT_SIZE = ...
+NVML_CC_GPU_CEC_ATTESTATION_REPORT_SIZE = ...
+NVML_CC_CEC_ATTESTATION_REPORT_NOT_PRESENT = ...
+NVML_CC_CEC_ATTESTATION_REPORT_PRESENT = ...
+
+class c_nvmlConfComputeSystemState_t(Structure):
+ _fields_ = ...
+
+nvmlSystemConfComputeSettings_v1 = ...
+
+class c_nvmlSystemConfComputeSettings_v1_t(Structure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+class c_nvmlConfComputeSystemCaps_t(Structure):
+ _fields_ = ...
+
+class c_nvmlConfComputeMemSizeInfo_t(Structure):
+ _fields_ = ...
+
+class c_nvmlConfComputeGpuCertificate_t(Structure):
+ _fields_ = ...
+
+class c_nvmlConfComputeGpuAttestationReport_t(Structure):
+ _fields_ = ...
+
+class c_nvmlConfComputeSetKeyRotationThresholdInfo_t(Structure):
+ _fields_ = ...
+
+ConfComputeSetKeyRotationThresholdInfo_v1 = ...
+
+class c_nvmlConfComputeGetKeyRotationThresholdInfo_t(Structure):
+ _fields_ = ...
+
+ConfComputeGetKeyRotationThresholdInfo_v1 = ...
+
+def convertStrBytes(
+ func,
+): # -> _Wrapped[..., Any, ..., <subclass of bytes and str> | str | Any]:
+ """
+ In python 3, strings are unicode instead of bytes, and need to be converted for ctypes
+ Args from caller: (1, 'string', <__main__.c_nvmlDevice_t at 0xFFFFFFFF>)
+ Args passed to function: (1, b'string', <__main__.c_nvmlDevice_t at 0xFFFFFFFF)>
+ ----
+ Returned from function: b'returned string'
+ Returned to caller: 'returned string'
+ """
+ ...
+
+def throwOnVersionMismatch(func): # -> _Wrapped[..., Any, ..., Any]:
+ ...
+def nvmlInitWithFlags(flags) -> None: ...
+def nvmlInit() -> None: ...
+def nvmlShutdown() -> None: ...
+@convertStrBytes
+def nvmlErrorString(result): ...
+@convertStrBytes
+def nvmlSystemGetNVMLVersion(): # -> Any:
+ ...
+def nvmlSystemGetCudaDriverVersion() -> int: ...
+def nvmlSystemGetCudaDriverVersion_v2() -> int: ...
+@convertStrBytes
+def nvmlSystemGetProcessName(pid): # -> Any:
+ ...
+@convertStrBytes
+def nvmlSystemGetDriverVersion(): # -> Any:
+ ...
+def nvmlSystemGetHicVersion(): # -> list[Any] | Array[c_nvmlHwbcEntry_t]:
+ ...
+def nvmlSystemGetDriverBranch(): # -> c_nvmlSystemDriverBranchInfo_v1_t:
+ ...
+def nvmlUnitGetCount() -> int: ...
+def nvmlUnitGetHandleByIndex(index: int): # -> _Pointer[struct_c_nvmlUnit_t]:
+ ...
+def nvmlUnitGetUnitInfo(unit): # -> c_nvmlUnitInfo_t:
+ ...
+def nvmlUnitGetLedState(unit): # -> c_nvmlLedState_t:
+ ...
+def nvmlUnitGetPsuInfo(unit): # -> c_nvmlPSUInfo_t:
+ ...
+def nvmlUnitGetTemperature(unit, type) -> int: ...
+def nvmlUnitGetFanSpeedInfo(unit): # -> c_nvmlUnitFanSpeeds_t:
+ ...
+def nvmlUnitGetDeviceCount(unit) -> int: ...
+def nvmlUnitGetDevices(unit): # -> Array[_Pointer[struct_c_nvmlDevice_t]]:
+ ...
+def nvmlDeviceGetCount() -> int: ...
+def nvmlDeviceGetHandleByIndex(index: int) -> _Pointer[struct_c_nvmlDevice_t]: ...
+@convertStrBytes
+def nvmlDeviceGetHandleBySerial(serial): # -> _Pointer[struct_c_nvmlDevice_t]:
+ ...
+@convertStrBytes
+def nvmlDeviceGetHandleByUUID(uuid): # -> _Pointer[struct_c_nvmlDevice_t]:
+ ...
+@convertStrBytes
+def nvmlDeviceGetHandleByUUIDV(uuid, type): # -> _Pointer[struct_c_nvmlDevice_t]:
+ ...
+@convertStrBytes
+def nvmlDeviceGetHandleByPciBusId(pciBusId): # -> _Pointer[struct_c_nvmlDevice_t]:
+ ...
+@convertStrBytes
+def nvmlDeviceGetName(handle: _Pointer[struct_c_nvmlDevice_t]): # -> Any:
+ ...
+
+class c_nvmlDevicePerfModes_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlDevicePerfModes_v1 = ...
+
+@convertStrBytes
+def nvmlDeviceGetPerformanceModes(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> <subclass of bytes and str> | str | Any:
+ ...
+
+class c_nvmlDeviceCurrentClockFreqs_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlDeviceCurrentClockFreqs_v1 = ...
+
+@convertStrBytes
+def nvmlDeviceGetCurrentClockFreqs(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> <subclass of bytes and str> | str | Any:
+ ...
+def nvmlDeviceGetBoardId(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetMultiGpuBoard(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetBrand(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetC2cModeInfoV1(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> c_nvmlC2cModeInfo_v1_t:
+ ...
+def nvmlDeviceGetC2cModeInfoV(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> c_nvmlC2cModeInfo_v1_t:
+ ...
+@convertStrBytes
+def nvmlDeviceGetBoardPartNumber(handle: _Pointer[struct_c_nvmlDevice_t]): # -> Any:
+ ...
+@convertStrBytes
+def nvmlDeviceGetSerial(handle: _Pointer[struct_c_nvmlDevice_t]): # -> Any:
+ ...
+def nvmlDeviceGetModuleId(
+ handle: _Pointer[struct_c_nvmlDevice_t], moduleId=...
+) -> int: ...
+def nvmlDeviceGetMemoryAffinity(
+ handle: _Pointer[struct_c_nvmlDevice_t], nodeSetSize, scope
+): ...
+def nvmlDeviceGetCpuAffinityWithinScope(
+ handle: _Pointer[struct_c_nvmlDevice_t], cpuSetSize, scope
+): ...
+def nvmlDeviceGetCpuAffinity(handle: _Pointer[struct_c_nvmlDevice_t], cpuSetSize): ...
+def nvmlDeviceSetCpuAffinity(handle: _Pointer[struct_c_nvmlDevice_t]) -> None: ...
+def nvmlDeviceClearCpuAffinity(handle: _Pointer[struct_c_nvmlDevice_t]) -> None: ...
+def nvmlDeviceGetNumaNodeId(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetAddressingMode(device): # -> <subclass of bytes and str> | str | Any:
+ ...
+def nvmlDeviceGetMinorNumber(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+@convertStrBytes
+def nvmlDeviceGetUUID(handle: _Pointer[struct_c_nvmlDevice_t]): # -> Any:
+ ...
+@convertStrBytes
+def nvmlDeviceGetInforomVersion(
+ handle: _Pointer[struct_c_nvmlDevice_t], infoRomObject
+): # -> Any:
+ ...
+@convertStrBytes
+def nvmlDeviceGetInforomImageVersion(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> Any:
+ ...
+def nvmlDeviceGetInforomConfigurationChecksum(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceValidateInforom(handle: _Pointer[struct_c_nvmlDevice_t]) -> None: ...
+def nvmlDeviceGetLastBBXFlushTime(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[int]:
+ ...
+def nvmlDeviceGetDisplayMode(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetDisplayActive(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetPersistenceMode(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetPciInfoExt(
+ handle: _Pointer[struct_c_nvmlDevice_t], c_info
+) -> None: ...
+def nvmlDeviceGetPciInfo_v3(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> nvmlPciInfo_t:
+ ...
+def nvmlDeviceGetPciInfo(handle: _Pointer[struct_c_nvmlDevice_t]): # -> nvmlPciInfo_t:
+ ...
+def nvmlDeviceGetClockInfo(handle: _Pointer[struct_c_nvmlDevice_t], type) -> int: ...
+def nvmlDeviceGetMaxClockInfo(handle: _Pointer[struct_c_nvmlDevice_t], type) -> int: ...
+def nvmlDeviceGetApplicationsClock(
+ handle: _Pointer[struct_c_nvmlDevice_t], type
+) -> int: ...
+def nvmlDeviceGetMaxCustomerBoostClock(
+ handle: _Pointer[struct_c_nvmlDevice_t], type
+) -> int: ...
+def nvmlDeviceGetClock(handle: _Pointer[struct_c_nvmlDevice_t], type, id) -> int: ...
+def nvmlDeviceGetDefaultApplicationsClock(
+ handle: _Pointer[struct_c_nvmlDevice_t], type
+) -> int: ...
+def nvmlDeviceGetSupportedMemoryClocks(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetSupportedGraphicsClocks(
+ handle: _Pointer[struct_c_nvmlDevice_t], memoryClockMHz
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetFanSpeed(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetFanSpeed_v2(handle: _Pointer[struct_c_nvmlDevice_t], fan) -> int: ...
+
+class c_nvmlFanSpeedInfo_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlFanSpeedInfo_v1 = ...
+
+def nvmlDeviceGetFanSpeedRPM(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> <subclass of bytes and str> | str | Any:
+ ...
+def nvmlDeviceGetTargetFanSpeed(
+ handle: _Pointer[struct_c_nvmlDevice_t], fan
+) -> int: ...
+def nvmlDeviceGetNumFans(device) -> int: ...
+def nvmlDeviceSetDefaultFanSpeed_v2(
+ handle: _Pointer[struct_c_nvmlDevice_t], index: int
+): # -> Literal[0]:
+ ...
+def nvmlDeviceGetMinMaxFanSpeed(
+ handle: _Pointer[struct_c_nvmlDevice_t], minSpeed=..., maxSpeed=...
+): # -> list[int] | Literal[0]:
+ ...
+def nvmlDeviceGetFanControlPolicy_v2(
+ handle: _Pointer[struct_c_nvmlDevice_t], fan, fanControlPolicy=...
+) -> int: ...
+def nvmlDeviceSetFanControlPolicy(
+ handle: _Pointer[struct_c_nvmlDevice_t], fan, fanControlPolicy
+): # -> Literal[0]:
+ ...
+
+class c_nvmlTemperature_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlTemperature_v1 = ...
+
+def nvmlDeviceGetTemperatureV1(
+ handle: _Pointer[struct_c_nvmlDevice_t], sensor: int
+): # -> <subclass of bytes and str> | str | Any:
+ ...
+def nvmlDeviceGetTemperatureV(
+ handle: _Pointer[struct_c_nvmlDevice_t], sensor: int, version=...
+) -> c_int: ...
+def nvmlDeviceGetTemperature(
+ handle: _Pointer[struct_c_nvmlDevice_t], sensor: int
+) -> int: ...
+def nvmlDeviceGetTemperatureThreshold(
+ handle: _Pointer[struct_c_nvmlDevice_t], threshold
+) -> int: ...
+def nvmlDeviceSetTemperatureThreshold(
+ handle: _Pointer[struct_c_nvmlDevice_t], threshold, temp
+) -> None: ...
+def nvmlDeviceGetMarginTemperature(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> <subclass of bytes and str> | str | Any:
+ ...
+def nvmlDeviceGetPowerState(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetPerformanceState(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetPowerManagementMode(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceGetPowerManagementLimit(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceGetPowerManagementLimitConstraints(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[int]:
+ ...
+def nvmlDeviceGetPowerManagementDefaultLimit(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceGetEnforcedPowerLimit(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetPowerUsage(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetTotalEnergyConsumption(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceGetGpuOperationMode(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[int]:
+ ...
+def nvmlDeviceGetCurrentGpuOperationMode(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceGetPendingGpuOperationMode(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceGetMemoryInfo(
+ handle: _Pointer[struct_c_nvmlDevice_t], version=...
+): # -> c_nvmlMemory_t | c_nvmlMemory_v2_t:
+ ...
+def nvmlDeviceGetBAR1MemoryInfo(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> c_nvmlBAR1Memory_t:
+ ...
+def nvmlDeviceGetComputeMode(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetCudaComputeCapability(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> tuple[int, int]:
+ ...
+def nvmlDeviceGetEccMode(handle: _Pointer[struct_c_nvmlDevice_t]): # -> list[int]:
+ ...
+def nvmlDeviceGetCurrentEccMode(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetPendingEccMode(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetDefaultEccMode(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[int]:
+ ...
+def nvmlDeviceGetTotalEccErrors(
+ handle: _Pointer[struct_c_nvmlDevice_t], errorType, counterType
+) -> int: ...
+def nvmlDeviceGetDetailedEccErrors(
+ handle: _Pointer[struct_c_nvmlDevice_t], errorType, counterType
+): # -> c_nvmlEccErrorCounts_t:
+ ...
+def nvmlDeviceGetMemoryErrorCounter(
+ handle: _Pointer[struct_c_nvmlDevice_t], errorType, counterType, locationType
+) -> int: ...
+def nvmlDeviceGetUtilizationRates(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> c_nvmlUtilization_t: ...
+def nvmlDeviceGetEncoderUtilization(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[int]:
+ ...
+def nvmlDeviceGetDecoderUtilization(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[int]:
+ ...
+def nvmlDeviceGetJpgUtilization(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[int]:
+ ...
+def nvmlDeviceGetOfaUtilization(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[int]:
+ ...
+def nvmlDeviceGetPcieReplayCounter(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetDriverModel_v1(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[int]:
+ ...
+def nvmlDeviceGetDriverModel_v2(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[int]:
+ ...
+def nvmlDeviceGetDriverModel(handle: _Pointer[struct_c_nvmlDevice_t]): # -> list[int]:
+ ...
+def nvmlDeviceGetCurrentDriverModel(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetPendingDriverModel(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+@convertStrBytes
+def nvmlDeviceGetVbiosVersion(handle: _Pointer[struct_c_nvmlDevice_t]): # -> Any:
+ ...
+def nvmlDeviceGetComputeRunningProcesses_v2(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetComputeRunningProcesses_v3(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[Any]:
+ ...
+@throwOnVersionMismatch
+def nvmlDeviceGetComputeRunningProcesses(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetGraphicsRunningProcesses_v2(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetGraphicsRunningProcesses_v3(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[Any]:
+ ...
+@throwOnVersionMismatch
+def nvmlDeviceGetGraphicsRunningProcesses(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[Any]:
+ ...
+@throwOnVersionMismatch
+def nvmlDeviceGetMPSComputeRunningProcesses(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetMPSComputeRunningProcesses_v2(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetMPSComputeRunningProcesses_v3(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetRunningProcessDetailList(
+ handle: _Pointer[struct_c_nvmlDevice_t], version, mode
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetAutoBoostedClocksEnabled(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[int]:
+ ...
+def nvmlUnitSetLedState(unit, color) -> None: ...
+def nvmlDeviceSetPersistenceMode(
+ handle: _Pointer[struct_c_nvmlDevice_t], mode
+) -> None: ...
+def nvmlDeviceSetComputeMode(handle: _Pointer[struct_c_nvmlDevice_t], mode) -> None: ...
+def nvmlDeviceSetEccMode(handle: _Pointer[struct_c_nvmlDevice_t], mode) -> None: ...
+def nvmlDeviceClearEccErrorCounts(
+ handle: _Pointer[struct_c_nvmlDevice_t], counterType
+) -> None: ...
+def nvmlDeviceSetDriverModel(
+ handle: _Pointer[struct_c_nvmlDevice_t], model
+) -> None: ...
+def nvmlDeviceSetAutoBoostedClocksEnabled(
+ handle: _Pointer[struct_c_nvmlDevice_t], enabled
+) -> None: ...
+def nvmlDeviceSetDefaultAutoBoostedClocksEnabled(
+ handle: _Pointer[struct_c_nvmlDevice_t], enabled, flags
+) -> None: ...
+def nvmlDeviceSetGpuLockedClocks(
+ handle: _Pointer[struct_c_nvmlDevice_t], minGpuClockMHz, maxGpuClockMHz
+) -> None: ...
+def nvmlDeviceResetGpuLockedClocks(handle: _Pointer[struct_c_nvmlDevice_t]) -> None: ...
+def nvmlDeviceSetMemoryLockedClocks(
+ handle: _Pointer[struct_c_nvmlDevice_t], minMemClockMHz, maxMemClockMHz
+) -> None: ...
+def nvmlDeviceResetMemoryLockedClocks(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> None: ...
+def nvmlDeviceGetClkMonStatus(
+ handle: _Pointer[struct_c_nvmlDevice_t], c_clkMonInfo=...
+): # -> nvmlClkMonStatus_t | Literal[0]:
+ ...
+def nvmlDeviceSetApplicationsClocks(
+ handle: _Pointer[struct_c_nvmlDevice_t], maxMemClockMHz, maxGraphicsClockMHz
+) -> None: ...
+def nvmlDeviceResetApplicationsClocks(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> None: ...
+def nvmlDeviceSetPowerManagementLimit(
+ handle: _Pointer[struct_c_nvmlDevice_t], limit
+) -> None: ...
+def nvmlDeviceSetGpuOperationMode(
+ handle: _Pointer[struct_c_nvmlDevice_t], mode
+) -> None: ...
+def nvmlEventSetCreate(): # -> _Pointer[struct_c_nvmlEventSet_t]:
+ ...
+def nvmlDeviceRegisterEvents(
+ handle: _Pointer[struct_c_nvmlDevice_t], eventTypes, eventSet
+) -> None: ...
+def nvmlDeviceGetSupportedEventTypes(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlEventSetWait_v2(eventSet, timeoutms): # -> c_nvmlEventData_t:
+ ...
+def nvmlEventSetWait(eventSet, timeoutms): # -> c_nvmlEventData_t:
+ ...
+def nvmlEventSetFree(eventSet) -> None: ...
+def nvmlDeviceOnSameBoard(
+ handle1: _Pointer[struct_c_nvmlDevice_t], handle2: _Pointer[struct_c_nvmlDevice_t]
+): # -> bool:
+ ...
+def nvmlDeviceGetCurrPcieLinkGeneration(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceGetMaxPcieLinkGeneration(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceGetCurrPcieLinkWidth(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetMaxPcieLinkWidth(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetGpuMaxPcieLinkGeneration(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceGetSupportedClocksThrottleReasons(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceGetSupportedClocksEventReasons(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceGetCurrentClocksThrottleReasons(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceGetCurrentClocksEventReasons(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceGetIndex(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceGetAccountingMode(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceSetAccountingMode(
+ handle: _Pointer[struct_c_nvmlDevice_t], mode
+) -> None: ...
+def nvmlDeviceClearAccountingPids(handle: _Pointer[struct_c_nvmlDevice_t]) -> None: ...
+def nvmlDeviceGetAccountingStats(
+ handle: _Pointer[struct_c_nvmlDevice_t], pid
+): # -> c_nvmlAccountingStats_t:
+ ...
+def nvmlDeviceGetAccountingPids(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[int]:
+ ...
+def nvmlDeviceGetAccountingBufferSize(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+) -> int: ...
+def nvmlDeviceGetRetiredPages(device, sourceFilter): # -> list[int]:
+ ...
+def nvmlDeviceGetRetiredPages_v2(device, sourceFilter): # -> list[dict[str, int]]:
+ ...
+def nvmlDeviceGetRetiredPagesPendingStatus(device) -> int: ...
+def nvmlDeviceGetAPIRestriction(device, apiType) -> int: ...
+def nvmlDeviceSetAPIRestriction(
+ handle: _Pointer[struct_c_nvmlDevice_t], apiType, isRestricted
+) -> None: ...
+def nvmlDeviceGetBridgeChipInfo(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> c_nvmlBridgeChipHierarchy_t:
+ ...
+def nvmlDeviceGetSamples(device, sampling_type, timeStamp): # -> tuple[int, list[Any]]:
+ ...
+def nvmlDeviceGetViolationStatus(device, perfPolicyType): # -> c_nvmlViolationTime_t:
+ ...
+def nvmlDeviceGetPcieThroughput(device, counter) -> int: ...
+def nvmlSystemGetTopologyGpuSet(cpuNumber): # -> list[Any]:
+ ...
+def nvmlDeviceGetTopologyNearestGpus(device, level): # -> list[Any]:
+ ...
+def nvmlDeviceGetTopologyCommonAncestor(device1, device2) -> int: ...
+def nvmlDeviceGetNvLinkUtilizationCounter(device, link, counter): # -> tuple[int, int]:
+ ...
+def nvmlDeviceFreezeNvLinkUtilizationCounter(device, link, counter, freeze) -> None: ...
+def nvmlDeviceResetNvLinkUtilizationCounter(device, link, counter) -> None: ...
+def nvmlDeviceSetNvLinkUtilizationControl(
+ device, link, counter, control, reset
+) -> None: ...
+def nvmlDeviceGetNvLinkUtilizationControl(
+ device, link, counter
+): # -> nvmlNvLinkUtilizationControl_t:
+ ...
+def nvmlDeviceGetNvLinkCapability(device, link, capability) -> int: ...
+def nvmlDeviceGetNvLinkErrorCounter(device, link, counter) -> int: ...
+def nvmlDeviceResetNvLinkErrorCounters(device, link) -> None: ...
+def nvmlDeviceGetNvLinkRemotePciInfo(device, link): # -> nvmlPciInfo_t:
+ ...
+def nvmlDeviceGetNvLinkRemoteDeviceType(
+ handle: _Pointer[struct_c_nvmlDevice_t], link
+) -> int: ...
+def nvmlDeviceGetNvLinkState(device, link) -> int: ...
+def nvmlDeviceGetNvLinkVersion(device, link) -> int: ...
+def nvmlDeviceModifyDrainState(pciInfo, newState) -> None: ...
+def nvmlDeviceQueryDrainState(pciInfo) -> int: ...
+def nvmlDeviceRemoveGpu(pciInfo) -> None: ...
+def nvmlDeviceDiscoverGpus(pciInfo) -> None: ...
+def nvmlDeviceGetFieldValues(
+ handle: _Pointer[struct_c_nvmlDevice_t], fieldIds
+): # -> Array[c_nvmlFieldValue_t]:
+ ...
+def nvmlDeviceClearFieldValues(
+ handle: _Pointer[struct_c_nvmlDevice_t], fieldIds
+): # -> Array[c_nvmlFieldValue_t]:
+ ...
+def nvmlDeviceGetVirtualizationMode(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceSetVirtualizationMode(
+ handle: _Pointer[struct_c_nvmlDevice_t], virtualization_mode
+): ...
+def nvmlDeviceGetVgpuHeterogeneousMode(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> <subclass of bytes and str> | str | Any:
+ ...
+def nvmlDeviceSetVgpuHeterogeneousMode(
+ handle: _Pointer[struct_c_nvmlDevice_t], heterogeneous_mode
+): # -> Literal[0]:
+ ...
+def nvmlVgpuInstanceGetPlacementId(
+ vgpuInstance,
+): # -> <subclass of bytes and str> | str | Any:
+ ...
+def nvmlDeviceGetVgpuTypeSupportedPlacements(
+ handle: _Pointer[struct_c_nvmlDevice_t], vgpuTypeId, mode=..., version=...
+): # -> c_nvmlVgpuPlacementList_v2_t | c_nvmlVgpuPlacementList_v1_t:
+ ...
+def nvmlDeviceGetVgpuTypeCreatablePlacements(
+ handle: _Pointer[struct_c_nvmlDevice_t], vgpuTypeId, version=...
+): # -> c_nvmlVgpuPlacementList_v2_t | c_nvmlVgpuPlacementList_v1_t:
+ ...
+def nvmlGetVgpuDriverCapabilities(capability) -> int: ...
+def nvmlDeviceGetVgpuCapabilities(
+ handle: _Pointer[struct_c_nvmlDevice_t], capability
+) -> int: ...
+def nvmlDeviceSetVgpuCapabilities(
+ handle: _Pointer[struct_c_nvmlDevice_t], capability, state
+): # -> Literal[0]:
+ ...
+def nvmlDeviceVgpuForceGspUnload(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> Literal[0]:
+ ...
+def nvmlDeviceGetSupportedVgpus(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetCreatableVgpus(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[Any]:
+ ...
+def nvmlVgpuTypeGetGpuInstanceProfileId(vgpuTypeId) -> int: ...
+@convertStrBytes
+def nvmlVgpuTypeGetClass(vgpuTypeId): # -> Any:
+ ...
+@convertStrBytes
+def nvmlVgpuTypeGetName(vgpuTypeId): # -> Any:
+ ...
+def nvmlVgpuTypeGetDeviceID(vgpuTypeId): # -> tuple[int, int]:
+ ...
+def nvmlVgpuTypeGetFramebufferSize(vgpuTypeId) -> int: ...
+def nvmlVgpuTypeGetNumDisplayHeads(vgpuTypeId) -> int: ...
+def nvmlVgpuTypeGetResolution(vgpuTypeId): # -> tuple[int, int]:
+ ...
+@convertStrBytes
+def nvmlVgpuTypeGetLicense(vgpuTypeId): # -> Any:
+ ...
+def nvmlVgpuTypeGetFrameRateLimit(vgpuTypeId) -> int: ...
+def nvmlVgpuTypeGetGspHeapSize(vgpuTypeId) -> int: ...
+def nvmlVgpuTypeGetFbReservation(vgpuTypeId) -> int: ...
+def nvmlVgpuInstanceGetRuntimeStateSize(vgpuInstance): # -> nvmlVgpuRuntimeState_v1_t:
+ ...
+def nvmlVgpuTypeGetMaxInstances(
+ handle: _Pointer[struct_c_nvmlDevice_t], vgpuTypeId
+) -> int: ...
+def nvmlVgpuTypeGetMaxInstancesPerVm(vgpuTypeId) -> int: ...
+def nvmlVgpuTypeGetBAR1Info(vgpuTypeId): # -> c_nvmlVgpuTypeBar1Info_v1_t:
+ ...
+def nvmlDeviceGetActiveVgpus(handle: _Pointer[struct_c_nvmlDevice_t]): # -> list[Any]:
+ ...
+@convertStrBytes
+def nvmlVgpuInstanceGetVmID(vgpuInstance): # -> tuple[Any, int]:
+ ...
+@convertStrBytes
+def nvmlVgpuInstanceGetUUID(vgpuInstance): # -> Any:
+ ...
+@convertStrBytes
+def nvmlVgpuInstanceGetMdevUUID(vgpuInstance): # -> Any:
+ ...
+@convertStrBytes
+def nvmlVgpuInstanceGetVmDriverVersion(vgpuInstance): # -> Any:
+ ...
+def nvmlVgpuInstanceGetLicenseStatus(vgpuInstance) -> int: ...
+def nvmlVgpuInstanceGetLicenseInfo_v2(vgpuInstance): # -> c_nvmlVgpuLicenseInfo_t:
+ ...
+def nvmlVgpuInstanceGetLicenseInfo(vgpuInstance): # -> c_nvmlVgpuLicenseInfo_t:
+ ...
+def nvmlVgpuInstanceGetFrameRateLimit(vgpuInstance) -> int: ...
+def nvmlVgpuInstanceGetEccMode(vgpuInstance) -> int: ...
+def nvmlVgpuInstanceGetType(vgpuInstance) -> int: ...
+def nvmlVgpuInstanceGetEncoderCapacity(vgpuInstance) -> int: ...
+def nvmlVgpuInstanceSetEncoderCapacity(vgpuInstance, encoder_capacity): ...
+def nvmlVgpuInstanceGetFbUsage(vgpuInstance) -> int: ...
+def nvmlVgpuTypeGetCapabilities(vgpuTypeId, capability) -> int: ...
+def nvmlVgpuInstanceGetGpuInstanceId(vgpuInstance) -> int: ...
+@convertStrBytes
+def nvmlVgpuInstanceGetGpuPciId(vgpuInstance): # -> Any:
+ ...
+def nvmlDeviceGetVgpuUtilization(
+ handle: _Pointer[struct_c_nvmlDevice_t], timeStamp
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetVgpuInstancesUtilizationInfo(
+ handle: _Pointer[struct_c_nvmlDevice_t], timeStamp
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetP2PStatus(device1, device2, p2pIndex) -> int: ...
+def nvmlDeviceGetGridLicensableFeatures_v4(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> c_nvmlGridLicensableFeatures_v4_t:
+ ...
+def nvmlDeviceGetGridLicensableFeatures(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> c_nvmlGridLicensableFeatures_v4_t:
+ ...
+def nvmlDeviceGetGspFirmwareVersion(
+ handle: _Pointer[struct_c_nvmlDevice_t], version=...
+): # -> Any | Literal[0]:
+ ...
+def nvmlDeviceGetGspFirmwareMode(
+ handle: _Pointer[struct_c_nvmlDevice_t], isEnabled=..., defaultMode=...
+): # -> list[int] | Literal[0]:
+ ...
+def nvmlDeviceGetEncoderCapacity(
+ handle: _Pointer[struct_c_nvmlDevice_t], encoderQueryType
+) -> int: ...
+def nvmlDeviceGetVgpuProcessUtilization(
+ handle: _Pointer[struct_c_nvmlDevice_t], timeStamp
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetVgpuProcessesUtilizationInfo(
+ handle: _Pointer[struct_c_nvmlDevice_t], timeStamp
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetEncoderStats(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> tuple[int, int, int]:
+ ...
+def nvmlDeviceGetEncoderSessions(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetFBCStats(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> c_nvmlFBCStats_t:
+ ...
+def nvmlDeviceGetFBCSessions(handle: _Pointer[struct_c_nvmlDevice_t]): # -> list[Any]:
+ ...
+def nvmlVgpuInstanceGetEncoderStats(vgpuInstance): # -> tuple[int, int, int]:
+ ...
+def nvmlVgpuInstanceGetEncoderSessions(vgpuInstance): # -> list[Any]:
+ ...
+def nvmlVgpuInstanceGetFBCStats(vgpuInstance): # -> c_nvmlFBCStats_t:
+ ...
+def nvmlVgpuInstanceGetFBCSessions(vgpuInstance): # -> list[Any]:
+ ...
+def nvmlDeviceGetProcessUtilization(
+ handle: _Pointer[struct_c_nvmlDevice_t], timeStamp
+): # -> list[Any]:
+ ...
+def nvmlDeviceGetProcessesUtilizationInfo(
+ handle: _Pointer[struct_c_nvmlDevice_t], timeStamp
+): ...
+def nvmlVgpuInstanceGetMetadata(vgpuInstance): # -> c_nvmlVgpuMetadata_t:
+ ...
+def nvmlDeviceGetVgpuMetadata(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> c_nvmlVgpuPgpuMetadata_t:
+ ...
+def nvmlGetVgpuCompatibility(
+ vgpuMetadata, pgpuMetadata
+): # -> c_nvmlVgpuPgpuCompatibility_t:
+ ...
+@convertStrBytes
+def nvmlDeviceGetPgpuMetadataString(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> tuple[Any, int]:
+ ...
+def nvmlDeviceGetVgpuSchedulerLog(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> c_nvmlVgpuSchedulerLog_t:
+ ...
+def nvmlDeviceGetVgpuSchedulerState(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> c_nvmlVgpuSchedulerGetState_t:
+ ...
+def nvmlDeviceGetVgpuSchedulerCapabilities(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> c_nvmlVgpuSchedulerCapabilities_t:
+ ...
+def nvmlDeviceSetVgpuSchedulerState(
+ handle: _Pointer[struct_c_nvmlDevice_t], sched_state
+): # -> Literal[0]:
+ ...
+def nvmlSetVgpuVersion(vgpuVersion): # -> Literal[0]:
+ ...
+def nvmlGetVgpuVersion(
+ supported=..., current=...
+): # -> list[tuple[Any, Any]] | Literal[0]:
+ ...
+def nvmlVgpuInstanceGetAccountingMode(vgpuInstance) -> int: ...
+def nvmlVgpuInstanceGetAccountingPids(vgpuInstance): # -> tuple[c_uint, Array[c_uint]]:
+ ...
+def nvmlVgpuInstanceGetAccountingStats(
+ vgpuInstance, pid
+): # -> c_nvmlAccountingStats_t:
+ ...
+def nvmlVgpuInstanceClearAccountingPids(vgpuInstance): # -> Literal[0]:
+ ...
+def nvmlGpuInstanceGetCreatableVgpus(gpuInstance, c_vgpus): ...
+def nvmlVgpuTypeGetMaxInstancesPerGpuInstance(
+ vgpuTypeId,
+): # -> <subclass of bytes and str> | str | Any:
+ ...
+def nvmlGpuInstanceGetActiveVgpus(gpuInstance, c_vgpu_instance_info): ...
+def nvmlGpuInstanceSetVgpuSchedulerState(gpuInstance, sched_state): ...
+def nvmlGpuInstanceGetVgpuSchedulerState(gpuInstance, c_vgpu_sched_state_info): ...
+def nvmlGpuInstanceGetVgpuSchedulerLog(gpuInstance, c_vgpu_sched_log_info): ...
+def nvmlGpuInstanceGetVgpuTypeCreatablePlacements(gpuInstance, c_vgpu_placements): ...
+def nvmlGpuInstanceGetVgpuHeterogeneousMode(
+ gpuInstance,
+): # -> <subclass of bytes and str> | str | Any:
+ ...
+def nvmlGpuInstanceSetVgpuHeterogeneousMode(
+ gpuInstance, heterogeneous_mode
+): # -> Literal[0]:
+ ...
+def nvmlDeviceGetVgpuSchedulerState_v2(
+ handle: _Pointer[struct_c_nvmlDevice_t], c_vgpu_sched_state_info_v2
+): ...
+def nvmlGpuInstanceGetVgpuSchedulerState_v2(
+ gpuInstance, c_vgpu_sched_state_info_v2
+): ...
+def nvmlDeviceGetVgpuSchedulerLog_v2(
+ handle: _Pointer[struct_c_nvmlDevice_t], c_vgpu_sched_log_info_v2
+): ...
+def nvmlGpuInstanceGetVgpuSchedulerLog_v2(gpuInstance, c_vgpu_sched_log_info_v2): ...
+def nvmlDeviceSetVgpuSchedulerState_v2(
+ handle: _Pointer[struct_c_nvmlDevice_t], sched_state_v2
+): # -> Literal[0]:
+ ...
+def nvmlGpuInstanceSetVgpuSchedulerState_v2(
+ gpuInstance, sched_state_v2
+): # -> Literal[0]:
+ ...
+def nvmlGetExcludedDeviceCount() -> int: ...
+def nvmlGetExcludedDeviceInfoByIndex(index: int): # -> c_nvmlExcludedDeviceInfo_t:
+ ...
+def nvmlDeviceGetHostVgpuMode(handle: _Pointer[struct_c_nvmlDevice_t]) -> int: ...
+def nvmlDeviceSetMigMode(device, mode) -> int: ...
+def nvmlDeviceGetMigMode(device): # -> list[int]:
+ ...
+def nvmlDeviceGetGpuInstanceProfileInfo(
+ device, profile, version=...
+): # -> c_nvmlGpuInstanceProfileInfo_v2_t | c_nvmlGpuInstanceProfileInfo_t:
+ ...
+def nvmlDeviceGetGpuInstanceProfileInfoById(
+ device, profileId
+): # -> c_nvmlGpuInstanceProfileInfo_v2_t:
+ ...
+
+nvmlDeviceGetGpuInstanceProfileInfoV = ...
+nvmlDeviceGetGpuInstanceProfileInfoByIdV = ...
+
+def nvmlDeviceGetGpuInstanceRemainingCapacity(device, profileId) -> int: ...
+def nvmlDeviceGetGpuInstancePossiblePlacements(
+ device, profileId, placementsRef, countRef
+): # -> Literal[0]:
+ ...
+def nvmlDeviceCreateGpuInstance(
+ device, profileId
+): # -> _Pointer[struct_c_nvmlGpuInstance_t]:
+ ...
+def nvmlDeviceCreateGpuInstanceWithPlacement(
+ device, profileId, placement
+): # -> _Pointer[struct_c_nvmlGpuInstance_t]:
+ ...
+def nvmlGpuInstanceDestroy(gpuInstance): # -> Literal[0]:
+ ...
+def nvmlDeviceGetGpuInstances(
+ device, profileId, gpuInstancesRef, countRef
+): # -> Literal[0]:
+ ...
+def nvmlDeviceGetGpuInstanceById(
+ device, gpuInstanceId
+): # -> _Pointer[struct_c_nvmlGpuInstance_t]:
+ ...
+def nvmlGpuInstanceGetInfo(gpuInstance): # -> c_nvmlGpuInstanceInfo_t:
+ ...
+def nvmlGpuInstanceGetComputeInstanceProfileInfo(
+ device, profile, engProfile, version=...
+): # -> c_nvmlComputeInstanceProfileInfo_v2_t | c_nvmlComputeInstanceProfileInfo_t:
+ ...
+
+nvmlGpuInstanceGetComputeInstanceProfileInfoV = ...
+
+def nvmlGpuInstanceGetComputeInstanceRemainingCapacity(
+ gpuInstance, profileId
+) -> int: ...
+def nvmlGpuInstanceGetComputeInstancePossiblePlacements(
+ gpuInstance, profileId, placementsRef, countRef
+): # -> Literal[0]:
+ ...
+def nvmlGpuInstanceCreateComputeInstance(
+ gpuInstance, profileId
+): # -> _Pointer[struct_c_nvmlComputeInstance_t]:
+ ...
+def nvmlGpuInstanceCreateComputeInstanceWithPlacement(
+ gpuInstance, profileId, placement
+): # -> _Pointer[struct_c_nvmlComputeInstance_t]:
+ ...
+def nvmlComputeInstanceDestroy(computeInstance): # -> Literal[0]:
+ ...
+def nvmlGpuInstanceGetComputeInstances(
+ gpuInstance, profileId, computeInstancesRef, countRef
+): # -> Literal[0]:
+ ...
+def nvmlGpuInstanceGetComputeInstanceById(
+ gpuInstance, computeInstanceId
+): # -> _Pointer[struct_c_nvmlComputeInstance_t]:
+ ...
+def nvmlComputeInstanceGetInfo_v2(computeInstance): # -> c_nvmlComputeInstanceInfo_t:
+ ...
+def nvmlComputeInstanceGetInfo(computeInstance): # -> c_nvmlComputeInstanceInfo_t:
+ ...
+def nvmlDeviceIsMigDeviceHandle(device): # -> c_uint:
+ ...
+def nvmlDeviceGetGpuInstanceId(device) -> int: ...
+def nvmlDeviceGetComputeInstanceId(device) -> int: ...
+def nvmlDeviceGetMaxMigDeviceCount(device) -> int: ...
+def nvmlDeviceGetMigDeviceHandleByIndex(
+ device, index: int
+): # -> _Pointer[struct_c_nvmlDevice_t]:
+ ...
+def nvmlDeviceGetDeviceHandleFromMigDeviceHandle(
+ migDevice,
+): # -> _Pointer[struct_c_nvmlDevice_t]:
+ ...
+def nvmlDeviceGetAttributes_v2(device): # -> c_nvmlDeviceAttributes:
+ ...
+def nvmlDeviceGetAttributes(device): # -> c_nvmlDeviceAttributes:
+ ...
+def nvmlDeviceGetRemappedRows(device): # -> tuple[int, int, int, int]:
+ ...
+def nvmlDeviceGetRowRemapperHistogram(device): # -> c_nvmlRowRemapperHistogramValues:
+ ...
+def nvmlDeviceGetArchitecture(device) -> int: ...
+def nvmlDeviceGetBusType(device) -> int: ...
+def nvmlDeviceGetIrqNum(device) -> int: ...
+def nvmlDeviceGetNumGpuCores(device) -> int: ...
+def nvmlDeviceGetPowerSource(device) -> int: ...
+def nvmlDeviceGetMemoryBusWidth(device) -> int: ...
+def nvmlDeviceGetPcieLinkMaxSpeed(device) -> int: ...
+def nvmlDeviceGetAdaptiveClockInfoStatus(device) -> int: ...
+def nvmlDeviceGetPcieSpeed(device) -> int: ...
+def nvmlDeviceGetDynamicPstatesInfo(
+ device, c_dynamicpstatesinfo=...
+): # -> c_nvmlGpuDynamicPstatesInfo_t | Literal[0]:
+ ...
+def nvmlDeviceSetFanSpeed_v2(
+ handle: _Pointer[struct_c_nvmlDevice_t], index: int, speed
+): # -> Literal[0]:
+ ...
+def nvmlDeviceGetThermalSettings(
+ device, sensorindex: int, c_thermalsettings=...
+): # -> Any | Literal[0]:
+ ...
+def nvmlDeviceGetMinMaxClockOfPState(
+ device, clockType, pstate, minClockMHz=..., maxClockMHz=...
+): # -> tuple[int, int] | Literal[0]:
+ ...
+
+_nvmlPowerMizerMode_t = c_uint
+NVML_POWER_MIZER_MODE_ADAPTIVE = ...
+NVML_POWER_MIZER_MODE_PREFER_MAXIMUM_PERFORMANCE = ...
+NVML_POWER_MIZER_MODE_AUTO = ...
+NVML_POWER_MIZER_MODE_PREFER_CONSISTENT_PERFORMANCE = ...
+
+class c_nvmlDevicePowerMizerModes_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+def nvmlDeviceGetPowerMizerMode_v1(device, info): ...
+def nvmlDeviceSetPowerMizerMode_v1(device, info): ...
+
+class c_nvmlClockOffset_t(_PrintableStructure):
+ _fields_ = ...
+
+nvmlClockOffset_v1 = ...
+
+def nvmlDeviceGetClockOffsets(device, info): # -> Literal[0]:
+ ...
+def nvmlDeviceSetClockOffsets(device, info): # -> Literal[0]:
+ ...
+def nvmlDeviceGetSupportedPerformanceStates(device): # -> list[Any]:
+ ...
+def nvmlDeviceGetGpcClkVfOffset(device) -> int: ...
+def nvmlDeviceSetGpcClkVfOffset(device, offset): # -> Literal[0]:
+ ...
+def nvmlDeviceGetGpcClkMinMaxVfOffset(
+ device, minOffset=..., maxOffset=...
+): # -> tuple[int, int] | Literal[0]:
+ ...
+def nvmlDeviceGetMemClkVfOffset(device) -> int: ...
+def nvmlDeviceSetMemClkVfOffset(device, offset): # -> Literal[0]:
+ ...
+def nvmlDeviceGetMemClkMinMaxVfOffset(
+ device, minOffset=..., maxOffset=...
+): # -> tuple[int, int] | Literal[0]:
+ ...
+def nvmlSystemSetConfComputeGpusReadyState(state): # -> Literal[0]:
+ ...
+def nvmlSystemGetConfComputeGpusReadyState() -> int: ...
+def nvmlSystemGetConfComputeCapabilities(): # -> c_nvmlConfComputeSystemCaps_t:
+ ...
+def nvmlSystemGetConfComputeState(): # -> c_nvmlConfComputeSystemState_t:
+ ...
+def nvmlSystemGetConfComputeSettings(settings): ...
+def nvmlDeviceSetConfComputeUnprotectedMemSize(device, c_ccMemSize): # -> Literal[0]:
+ ...
+def nvmlDeviceGetConfComputeMemSizeInfo(device): # -> c_nvmlConfComputeMemSizeInfo_t:
+ ...
+def nvmlDeviceGetConfComputeProtectedMemoryUsage(device): # -> c_nvmlMemory_t:
+ ...
+def nvmlDeviceGetConfComputeGpuCertificate(
+ device,
+): # -> c_nvmlConfComputeGpuCertificate_t:
+ ...
+def nvmlDeviceGetConfComputeGpuAttestationReport(
+ device, c_nonce
+): # -> c_nvmlConfComputeGpuAttestationReport_t:
+ ...
+def nvmlSystemSetConfComputeKeyRotationThresholdInfo(max_atk_adv): # -> Literal[0]:
+ ...
+def nvmlSystemGetConfComputeKeyRotationThresholdInfo(): # -> c_nvmlConfComputeGetKeyRotationThresholdInfo_t:
+ ...
+
+NVML_GPM_METRIC_GRAPHICS_UTIL = ...
+NVML_GPM_METRIC_SM_UTIL = ...
+NVML_GPM_METRIC_SM_OCCUPANCY = ...
+NVML_GPM_METRIC_INTEGER_UTIL = ...
+NVML_GPM_METRIC_ANY_TENSOR_UTIL = ...
+NVML_GPM_METRIC_DFMA_TENSOR_UTIL = ...
+NVML_GPM_METRIC_HMMA_TENSOR_UTIL = ...
+NVML_GPM_METRIC_DMMA_TENSOR_UTIL = ...
+NVML_GPM_METRIC_IMMA_TENSOR_UTIL = ...
+NVML_GPM_METRIC_DRAM_BW_UTIL = ...
+NVML_GPM_METRIC_FP64_UTIL = ...
+NVML_GPM_METRIC_FP32_UTIL = ...
+NVML_GPM_METRIC_FP16_UTIL = ...
+NVML_GPM_METRIC_PCIE_TX_PER_SEC = ...
+NVML_GPM_METRIC_PCIE_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVDEC_0_UTIL = ...
+NVML_GPM_METRIC_NVDEC_1_UTIL = ...
+NVML_GPM_METRIC_NVDEC_2_UTIL = ...
+NVML_GPM_METRIC_NVDEC_3_UTIL = ...
+NVML_GPM_METRIC_NVDEC_4_UTIL = ...
+NVML_GPM_METRIC_NVDEC_5_UTIL = ...
+NVML_GPM_METRIC_NVDEC_6_UTIL = ...
+NVML_GPM_METRIC_NVDEC_7_UTIL = ...
+NVML_GPM_METRIC_NVJPG_0_UTIL = ...
+NVML_GPM_METRIC_NVJPG_1_UTIL = ...
+NVML_GPM_METRIC_NVJPG_2_UTIL = ...
+NVML_GPM_METRIC_NVJPG_3_UTIL = ...
+NVML_GPM_METRIC_NVJPG_4_UTIL = ...
+NVML_GPM_METRIC_NVJPG_5_UTIL = ...
+NVML_GPM_METRIC_NVJPG_6_UTIL = ...
+NVML_GPM_METRIC_NVJPG_7_UTIL = ...
+NVML_GPM_METRIC_NVOFA_0_UTIL = ...
+NVML_GPM_METRIC_NVOFA_1_UTIL = ...
+NVML_GPM_METRIC_NVLINK_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L0_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L0_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L1_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L1_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L2_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L2_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L3_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L3_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L4_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L4_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L5_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L5_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L6_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L6_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L7_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L7_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L8_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L8_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L9_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L9_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L10_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L10_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L11_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L11_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L12_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L12_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L13_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L13_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L14_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L14_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L15_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L15_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L16_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L16_TX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L17_RX_PER_SEC = ...
+NVML_GPM_METRIC_NVLINK_L17_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK0_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK0_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK0_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK0_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK1_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK1_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK1_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK1_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK2_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK2_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK2_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK2_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK3_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK3_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK3_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK3_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK4_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK4_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK4_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK4_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK5_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK5_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK5_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK5_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK6_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK6_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK6_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK6_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK7_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK7_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK7_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK7_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK8_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK8_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK8_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK8_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK9_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK9_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK9_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK9_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK10_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK10_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK10_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK10_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK11_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK11_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK11_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK11_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK12_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK12_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK12_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK12_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK13_TOTAL_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK13_TOTAL_RX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK13_DATA_TX_PER_SEC = ...
+NVML_GPM_METRIC_C2C_LINK13_DATA_RX_PER_SEC = ...
+NVML_GPM_METRIC_HOSTMEM_CACHE_HIT = ...
+NVML_GPM_METRIC_HOSTMEM_CACHE_MISS = ...
+NVML_GPM_METRIC_PEERMEM_CACHE_HIT = ...
+NVML_GPM_METRIC_PEERMEM_CACHE_MISS = ...
+NVML_GPM_METRIC_DRAM_CACHE_HIT = ...
+NVML_GPM_METRIC_DRAM_CACHE_MISS = ...
+NVML_GPM_METRIC_NVENC_0_UTIL = ...
+NVML_GPM_METRIC_NVENC_1_UTIL = ...
+NVML_GPM_METRIC_NVENC_2_UTIL = ...
+NVML_GPM_METRIC_NVENC_3_UTIL = ...
+NVML_GPM_METRIC_GR0_CTXSW_CYCLES_ELAPSED = ...
+NVML_GPM_METRIC_GR0_CTXSW_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_GR0_CTXSW_REQUESTS = ...
+NVML_GPM_METRIC_GR0_CTXSW_CYCLES_PER_REQ = ...
+NVML_GPM_METRIC_GR0_CTXSW_ACTIVE_PCT = ...
+NVML_GPM_METRIC_GR1_CTXSW_CYCLES_ELAPSED = ...
+NVML_GPM_METRIC_GR1_CTXSW_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_GR1_CTXSW_REQUESTS = ...
+NVML_GPM_METRIC_GR1_CTXSW_CYCLES_PER_REQ = ...
+NVML_GPM_METRIC_GR1_CTXSW_ACTIVE_PCT = ...
+NVML_GPM_METRIC_GR2_CTXSW_CYCLES_ELAPSED = ...
+NVML_GPM_METRIC_GR2_CTXSW_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_GR2_CTXSW_REQUESTS = ...
+NVML_GPM_METRIC_GR2_CTXSW_CYCLES_PER_REQ = ...
+NVML_GPM_METRIC_GR2_CTXSW_ACTIVE_PCT = ...
+NVML_GPM_METRIC_GR3_CTXSW_CYCLES_ELAPSED = ...
+NVML_GPM_METRIC_GR3_CTXSW_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_GR3_CTXSW_REQUESTS = ...
+NVML_GPM_METRIC_GR3_CTXSW_CYCLES_PER_REQ = ...
+NVML_GPM_METRIC_GR3_CTXSW_ACTIVE_PCT = ...
+NVML_GPM_METRIC_GR4_CTXSW_CYCLES_ELAPSED = ...
+NVML_GPM_METRIC_GR4_CTXSW_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_GR4_CTXSW_REQUESTS = ...
+NVML_GPM_METRIC_GR4_CTXSW_CYCLES_PER_REQ = ...
+NVML_GPM_METRIC_GR4_CTXSW_ACTIVE_PCT = ...
+NVML_GPM_METRIC_GR5_CTXSW_CYCLES_ELAPSED = ...
+NVML_GPM_METRIC_GR5_CTXSW_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_GR5_CTXSW_REQUESTS = ...
+NVML_GPM_METRIC_GR5_CTXSW_CYCLES_PER_REQ = ...
+NVML_GPM_METRIC_GR5_CTXSW_ACTIVE_PCT = ...
+NVML_GPM_METRIC_GR6_CTXSW_CYCLES_ELAPSED = ...
+NVML_GPM_METRIC_GR6_CTXSW_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_GR6_CTXSW_REQUESTS = ...
+NVML_GPM_METRIC_GR6_CTXSW_CYCLES_PER_REQ = ...
+NVML_GPM_METRIC_GR6_CTXSW_ACTIVE_PCT = ...
+NVML_GPM_METRIC_GR7_CTXSW_CYCLES_ELAPSED = ...
+NVML_GPM_METRIC_GR7_CTXSW_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_GR7_CTXSW_REQUESTS = ...
+NVML_GPM_METRIC_GR7_CTXSW_CYCLES_PER_REQ = ...
+NVML_GPM_METRIC_GR7_CTXSW_ACTIVE_PCT = ...
+NVML_GPM_METRIC_SM_CYCLES_ELAPSED = ...
+NVML_GPM_METRIC_SM_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_MMA_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_DMMA_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_HMMA_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_IMMA_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_DFMA_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_PCIE_TX = ...
+NVML_GPM_METRIC_PCIE_RX = ...
+NVML_GPM_METRIC_INTEGER_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_FP64_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_FP32_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_FP16_CYCLES_ACTIVE = ...
+NVML_GPM_METRIC_NVLINK_L0_RX = ...
+NVML_GPM_METRIC_NVLINK_L0_TX = ...
+NVML_GPM_METRIC_NVLINK_L1_RX = ...
+NVML_GPM_METRIC_NVLINK_L1_TX = ...
+NVML_GPM_METRIC_NVLINK_L2_RX = ...
+NVML_GPM_METRIC_NVLINK_L2_TX = ...
+NVML_GPM_METRIC_NVLINK_L3_RX = ...
+NVML_GPM_METRIC_NVLINK_L3_TX = ...
+NVML_GPM_METRIC_NVLINK_L4_RX = ...
+NVML_GPM_METRIC_NVLINK_L4_TX = ...
+NVML_GPM_METRIC_NVLINK_L5_RX = ...
+NVML_GPM_METRIC_NVLINK_L5_TX = ...
+NVML_GPM_METRIC_NVLINK_L6_RX = ...
+NVML_GPM_METRIC_NVLINK_L6_TX = ...
+NVML_GPM_METRIC_NVLINK_L7_RX = ...
+NVML_GPM_METRIC_NVLINK_L7_TX = ...
+NVML_GPM_METRIC_NVLINK_L8_RX = ...
+NVML_GPM_METRIC_NVLINK_L8_TX = ...
+NVML_GPM_METRIC_NVLINK_L9_RX = ...
+NVML_GPM_METRIC_NVLINK_L9_TX = ...
+NVML_GPM_METRIC_NVLINK_L10_RX = ...
+NVML_GPM_METRIC_NVLINK_L10_TX = ...
+NVML_GPM_METRIC_NVLINK_L11_RX = ...
+NVML_GPM_METRIC_NVLINK_L11_TX = ...
+NVML_GPM_METRIC_NVLINK_L12_RX = ...
+NVML_GPM_METRIC_NVLINK_L12_TX = ...
+NVML_GPM_METRIC_NVLINK_L13_RX = ...
+NVML_GPM_METRIC_NVLINK_L13_TX = ...
+NVML_GPM_METRIC_NVLINK_L14_RX = ...
+NVML_GPM_METRIC_NVLINK_L14_TX = ...
+NVML_GPM_METRIC_NVLINK_L15_RX = ...
+NVML_GPM_METRIC_NVLINK_L15_TX = ...
+NVML_GPM_METRIC_NVLINK_L16_RX = ...
+NVML_GPM_METRIC_NVLINK_L16_TX = ...
+NVML_GPM_METRIC_NVLINK_L17_RX = ...
+NVML_GPM_METRIC_NVLINK_L17_TX = ...
+NVML_GPM_METRIC_MAX = ...
+
+class c_nvmlUnitInfo_t(_PrintableStructure):
+ _fields_ = ...
+
+class struct_c_nvmlGpmSample_t(Structure): ...
+
+c_nvmlGpmSample_t = ...
+
+class c_metricInfo_t(Structure):
+ _fields_ = ...
+
+class c_nvmlGpmMetric_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlGpmMetricsGet_t(_PrintableStructure):
+ _fields_ = ...
+
+NVML_GPM_METRICS_GET_VERSION = ...
+
+class c_nvmlGpmSupport_t(_PrintableStructure):
+ _fields_ = ...
+
+NVML_GPM_SUPPORT_VERSION = ...
+
+def nvmlGpmMetricsGet(metricsGet): ...
+def nvmlGpmSampleFree(gpmSample) -> None: ...
+def nvmlGpmSampleAlloc(): # -> _Pointer[struct_c_nvmlGpmSample_t]:
+ ...
+def nvmlGpmSampleGet(device, gpmSample): ...
+def nvmlGpmMigSampleGet(device, gpuInstanceId, gpmSample): ...
+def nvmlGpmQueryDeviceSupport(device): # -> c_nvmlGpmSupport_t:
+ ...
+def nvmlGpmSetStreamingEnabled(device, state): # -> Literal[0]:
+ ...
+def nvmlGpmQueryIfStreamingEnabled(device) -> int: ...
+
+NVML_NVLINK_POWER_STATE_HIGH_SPEED = ...
+NVML_NVLINK_POWER_STATE_LOW = ...
+NVML_NVLINK_LOW_POWER_THRESHOLD_MIN = ...
+NVML_NVLINK_LOW_POWER_THRESHOLD_MAX = ...
+NVML_NVLINK_LOW_POWER_THRESHOLD_RESET = ...
+NVML_NVLINK_LOW_POWER_THRESHOLD_DEFAULT = ...
+
+class c_nvmlNvLinkPowerThres_t(Structure):
+ _fields_ = ...
+
+def nvmlDeviceSetNvLinkDeviceLowPowerThreshold(device, l1threshold): # -> Literal[0]:
+ ...
+
+NVML_GPU_FABRIC_UUID_LEN = ...
+_nvmlGpuFabricState_t = c_uint
+NVML_GPU_FABRIC_STATE_NOT_SUPPORTED = ...
+NVML_GPU_FABRIC_STATE_NOT_STARTED = ...
+NVML_GPU_FABRIC_STATE_IN_PROGRESS = ...
+NVML_GPU_FABRIC_STATE_COMPLETED = ...
+
+class c_nvmlGpuFabricInfo_t(_PrintableStructure):
+ _fields_ = ...
+
+NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_NOT_SUPPORTED = ...
+NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_TRUE = ...
+NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_FALSE = ...
+NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_DEGRADED_BW = ...
+NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_DEGRADED_BW = ...
+NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_NOT_SUPPORTED = ...
+NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_TRUE = ...
+NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_FALSE = ...
+NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ROUTE_RECOVERY = ...
+NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_ROUTE_RECOVERY = ...
+NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_NOT_SUPPORTED = ...
+NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_TRUE = ...
+NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_FALSE = ...
+NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ROUTE_UNHEALTHY = ...
+NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_ROUTE_UNHEALTHY = ...
+NVML_GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_NOT_SUPPORTED = ...
+NVML_GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_TRUE = ...
+NVML_GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_FALSE = ...
+NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ACCESS_TIMEOUT_RECOVERY = ...
+NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_ACCESS_TIMEOUT_RECOVERY = ...
+NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NOT_SUPPORTED = ...
+NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NONE = ...
+NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INCORRECT_SYSGUID = ...
+NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INCORRECT_CHASSIS_SN = ...
+NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NO_PARTITION = ...
+NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INSUFFICIENT_NVLINKS = ...
+NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INCOMPATIBLE_GPU_FW = ...
+NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIURATION_INVALID_LOCATION = ...
+NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INVALID_LOCATION = ...
+NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_GPU_STATE_INVALID = ...
+NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_INCORRECT_CONFIGURATION = ...
+NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_INCORRECT_CONFIGURATION = ...
+NVML_GPU_FABRIC_HEALTH_MASK_PARTITION_ASSIGNED_NOT_SUPPORTED = ...
+NVML_GPU_FABRIC_HEALTH_MASK_PARTITION_ASSIGNED_TRUE = ...
+NVML_GPU_FABRIC_HEALTH_MASK_PARTITION_ASSIGNED_FALSE = ...
+NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_PARTITION_ASSIGNED = ...
+NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_PARTITION_ASSIGNED = ...
+NVML_GPU_FABRIC_HEALTH_SUMMARY_NOT_SUPPORTED = ...
+NVML_GPU_FABRIC_HEALTH_SUMMARY_HEALTHY = ...
+NVML_GPU_FABRIC_HEALTH_SUMMARY_UNHEALTHY = ...
+NVML_GPU_FABRIC_HEALTH_SUMMARY_LIMITED_CAPACITY = ...
+nvmlGpuFabricInfo_v2 = ...
+
+class c_nvmlGpuFabricInfo_v2_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+c_nvmlGpuFabricInfoV_t = c_nvmlGpuFabricInfo_v2_t
+
+class c_nvmlGpuFabricInfo_v3_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlGpuFabricInfo_v3 = ...
+
+def nvmlDeviceGetGpuFabricInfo(device, gpuFabricInfo): # -> Literal[0]:
+ ...
+def nvmlDeviceGetGpuFabricInfoV(device, gpuFabricInfo): # -> Literal[0]:
+ ...
+
+NVML_GPU_NVLINK_BW_MODE_FULL = ...
+NVML_GPU_NVLINK_BW_MODE_OFF = ...
+NVML_GPU_NVLINK_BW_MODE_MIN = ...
+NVML_GPU_NVLINK_BW_MODE_HALF = ...
+NVML_GPU_NVLINK_BW_MODE_3QUARTER = ...
+NVML_GPU_NVLINK_BW_MODE_COUNT = ...
+
+def nvmlSystemSetNvlinkBwMode(mode): # -> Literal[0]:
+ ...
+def nvmlSystemGetNvlinkBwMode() -> int: ...
+
+_nvmlPowerScopeType_t = c_uint
+NVML_POWER_SCOPE_GPU = ...
+NVML_POWER_SCOPE_MODULE = ...
+NVML_POWER_SCOPE_MEMORY = ...
+
+class c_nvmlPowerValue_v2_t(_PrintableStructure):
+ _fields_ = ...
+ _fmt_ = ...
+
+nvmlPowerValue_v2 = ...
+
+def nvmlDeviceSetPowerManagementLimit_v2(
+ device, powerScope, powerLimit, version=...
+): # -> Literal[0]:
+ ...
+
+class c_nvmlEccSramErrorStatus_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlEccSramErrorStatus_v1 = ...
+
+def nvmlDeviceGetSramEccErrorStatus(device, status): # -> Literal[0]:
+ ...
+
+NVML_DEV_CAP_EGM = ...
+nvmlDeviceCapabilities_v1 = ...
+
+class c_nvmlDeviceCapabilities_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+def nvmlDeviceGetCapabilities(device, caps): ...
+
+class c_nvmlPlatformInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+class c_nvmlPlatformInfo_v2_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlPlatformInfo_v1 = ...
+nvmlPlatformInfo_v2 = ...
+
+def nvmlDeviceGetPlatformInfo(device, platformInfo): # -> Literal[0]:
+ ...
+
+NVML_DEVICE_HOSTNAME_BUFFER_SIZE = ...
+
+class c_nvmlHostname_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlMask255_t(_PrintableStructure):
+ _fields_ = ...
+
+NVML_WORKLOAD_POWER_MAX_PROFILES = ...
+NVML_POWER_PROFILE_MAX_P = ...
+NVML_POWER_PROFILE_MAX_Q = ...
+NVML_POWER_PROFILE_COMPUTE = ...
+NVML_POWER_PROFILE_MEMORY_BOUND = ...
+NVML_POWER_PROFILE_NETWORK = ...
+NVML_POWER_PROFILE_BALANCED = ...
+NVML_POWER_PROFILE_LLM_INFERENCE = ...
+NVML_POWER_PROFILE_LLM_TRAINING = ...
+NVML_POWER_PROFILE_RBM = ...
+NVML_POWER_PROFILE_DCPCIE = ...
+NVML_POWER_PROFILE_HMMA_SPARSE = ...
+NVML_POWER_PROFILE_HMMA_DENSE = ...
+NVML_POWER_PROFILE_SYNC_BALANCED = ...
+NVML_POWER_PROFILE_HPC = ...
+NVML_POWER_PROFILE_MIG = ...
+NVML_POWER_PROFILE_MAX = ...
+nvmlWorkloadPowerProfileInfo_v1 = ...
+
+class c_nvmlWorkloadPowerProfileInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlWorkloadPowerProfileProfilesInfo_v1 = ...
+
+class c_nvmlWorkloadPowerProfileProfilesInfo_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlWorkloadPowerProfileCurrentProfiles_v1 = ...
+
+class c_nvmlWorkloadPowerProfileCurrentProfiles_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlWorkloadPowerProfileRequestedProfiles_v1 = ...
+
+class c_nvmlWorkloadPowerProfileRequestedProfiles_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+NVML_POWER_PROFILE_OPERATION_CLEAR = ...
+NVML_POWER_PROFILE_OPERATION_SET = ...
+NVML_POWER_PROFILE_OPERATION_SET_AND_OVERWRITE = ...
+NVML_POWER_PROFILE_OPERATION_MAX = ...
+nvmlWorkloadPowerProfileUpdateProfiles_v1 = ...
+
+class c_nvmlWorkloadPowerProfileUpdateProfiles_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+def nvmlDeviceWorkloadPowerProfileGetProfilesInfo(
+ device, profilesInfo
+): # -> Literal[0]:
+ ...
+def nvmlDeviceWorkloadPowerProfileGetCurrentProfiles(
+ device, currentProfiles
+): # -> Literal[0]:
+ ...
+def nvmlDeviceWorkloadPowerProfileSetRequestedProfiles(
+ device, requestedProfiles
+): # -> Literal[0]:
+ ...
+def nvmlDeviceWorkloadPowerProfileClearRequestedProfiles(
+ device, requestedProfiles
+): # -> Literal[0]:
+ ...
+def nvmlDeviceWorkloadPowerProfileUpdateProfiles_v1(
+ device, updateProfiles
+): # -> Literal[0]:
+ ...
+def nvmlDeviceGetNvlinkSupportedBwModes(device, supportedBwModes): # -> Literal[0]:
+ ...
+def nvmlDeviceGetNvlinkBwMode(device, getBwMode): # -> Literal[0]:
+ ...
+def nvmlDeviceSetNvlinkBwMode(device, setBwMode): # -> Literal[0]:
+ ...
+
+nvmlDramEncryptionInfo_v1 = ...
+
+class c_nvmlDramEncryptionInfo_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+def nvmlDeviceGetDramEncryptionMode(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> list[<subclass of bytes and str> | str | Any]:
+ ...
+def nvmlDeviceGetCurrentDramEncryptionMode(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> <subclass of bytes and str> | str | Any:
+ ...
+def nvmlDeviceGetPendingDramEncryptionMode(
+ handle: _Pointer[struct_c_nvmlDevice_t],
+): # -> <subclass of bytes and str> | str | Any:
+ ...
+def nvmlDeviceSetDramEncryptionMode(
+ handle: _Pointer[struct_c_nvmlDevice_t], mode
+) -> None: ...
+
+NVML_POWER_SMOOTHING_NUM_PROFILE_PARAMS = ...
+NVML_POWER_SMOOTHING_MAX_NUM_PROFILES = ...
+NVML_POWER_SMOOTHING_ADMIN_OVERRIDE_NOT_SET = ...
+NVML_POWER_SMOOTHING_PROFILE_PARAM_PERCENT_TMP_FLOOR = ...
+NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_UP_RATE = ...
+NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_DOWN_RATE = ...
+NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_DOWN_HYSTERESIS = ...
+NVML_POWER_SMOOTHING_PROFILE_PARAM_SECONDARY_POWER_FLOOR = ...
+NVML_POWER_SMOOTHING_PROFILE_PARAM_PRIMARY_FLOOR_ACT_WIN_MULT = ...
+NVML_POWER_SMOOTHING_PROFILE_PARAM_PRIMARY_FLOOR_TAR_WIN_MULT = ...
+NVML_POWER_SMOOTHING_PROFILE_PARAM_PRIMARY_FLOOR_ACT_OFFSET = ...
+nvmlPowerSmoothingState_v1 = ...
+
+class c_nvmlPowerSmoothingState_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlPowerSmoothingProfile_v1 = ...
+
+class c_nvmlPowerSmoothingProfile_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+def nvmlDevicePowerSmoothingActivatePresetProfile(device, profile) -> None: ...
+def nvmlDevicePowerSmoothingUpdatePresetProfileParam(device, profile) -> None: ...
+def nvmlDevicePowerSmoothingSetState(device, state) -> None: ...
+
+class c_nvmlEccSramUniqueUncorrectedErrorEntry_v1_t(_PrintableStructure):
+ _fields_ = ...
+
+class c_nvmlEccSramUniqueUncorrectedErrorCounts_v1_t(_PrintableStructure):
+ _fields_ = ...
+ def __init__(self) -> None: ...
+
+nvmlEccSramUniqueUncorrectedErrorCounts_v1 = ...
+
+def nvmlDeviceGetSramUniqueUncorrectedEccErrorCounts(device, counts): # -> Literal[0]:
+ ...
+def nvmlDeviceGetPdi(device): # -> <subclass of bytes and str> | str | Any:
+ ...
+def nvmlDeviceGetNvLinkInfo(device, info): # -> Literal[0]:
+ ...
+def nvmlDeviceGetRepairStatus(
+ device,
+): # -> list[<subclass of bytes and str> | str | Any]:
+ ...
+@convertStrBytes
+def nvmlDeviceSetHostname_v1(device, hostname) -> None: ...
+def nvmlDeviceGetHostname_v1(device): # -> <subclass of bytes and str> | str | Any:
+ ...
+def nvmlDeviceGetUnrepairableMemoryFlag_v1(
+ device,
+): # -> <subclass of bytes and str> | str | Any:
+ ...
+
+NVML_RUSD_POLL_NONE = ...
+NVML_RUSD_POLL_CLOCK = ...
+NVML_RUSD_POLL_PERF = ...
+NVML_RUSD_POLL_MEMORY = ...
+NVML_RUSD_POLL_POWER = ...
+NVML_RUSD_POLL_THERMAL = ...
+NVML_RUSD_POLL_PCI = ...
+NVML_RUSD_POLL_FAN = ...
+NVML_RUSD_POLL_PROC_UTIL = ...
+NVML_RUSD_POLL_ALL = ...
+nvmlRusdSettings_v1 = ...
+
+class c_nvmlRusdSettings_v1_t(_PrintableStructure):
+ _fields_ = ...
+ _fmt_ = ...
+ def __init__(self) -> None: ...
+
+def nvmlDeviceSetRusdSettings_v1(device, settings) -> None: ...
diff --git a/.mlx_typings/safetensors/__init__.pyi b/.typings/safetensors/__init__.pyi
similarity index 100%
rename from .mlx_typings/safetensors/__init__.pyi
rename to .typings/safetensors/__init__.pyi
diff --git a/pyproject.toml b/pyproject.toml
index 570aba3b..9309a81f 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -160,7 +160,7 @@ exclude = [
"**/rust",
"**/.github",
]
-stubPath = ".mlx_typings"
+stubPath = ".typings"
[[tool.basedpyright.executionEnvironments]]
root = "src/exo/worker/engines/image"
@@ -240,11 +240,7 @@ torchaudio = ["torch"]
###
[tool.ruff]
-extend-exclude = [
- "*mlx_typings/**",
- "rust/exo_pyo3_bindings/**",
- "bench/vendor/**",
-]
+extend-exclude = [".typings/**", "rust/exo_pyo3_bindings/**", "bench/vendor/**"]
[tool.ruff.lint]
extend-select = ["I", "N", "B", "A", "PIE", "SIM"]
diff --git a/resources/image_model_cards/exolabs--FLUX.1-Kontext-dev-4bit.toml b/resources/image_model_cards/exolabs--FLUX.1-Kontext-dev-4bit.toml
index 1e0c0e10..0848f027 100644
--- a/resources/image_model_cards/exolabs--FLUX.1-Kontext-dev-4bit.toml
+++ b/resources/image_model_cards/exolabs--FLUX.1-Kontext-dev-4bit.toml
@@ -7,6 +7,7 @@ family = "flux"
quantization = "4bit"
base_model = "FLUX.1 Kontext"
capabilities = ["image_edit"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 15475325472
diff --git a/resources/image_model_cards/exolabs--FLUX.1-Kontext-dev-8bit.toml b/resources/image_model_cards/exolabs--FLUX.1-Kontext-dev-8bit.toml
index e2020718..0c142241 100644
--- a/resources/image_model_cards/exolabs--FLUX.1-Kontext-dev-8bit.toml
+++ b/resources/image_model_cards/exolabs--FLUX.1-Kontext-dev-8bit.toml
@@ -7,6 +7,7 @@ family = "flux"
quantization = "8bit"
base_model = "FLUX.1 Kontext"
capabilities = ["image_edit"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 21426029632
diff --git a/resources/image_model_cards/exolabs--FLUX.1-Kontext-dev.toml b/resources/image_model_cards/exolabs--FLUX.1-Kontext-dev.toml
index 14cdf270..1087a2cf 100644
--- a/resources/image_model_cards/exolabs--FLUX.1-Kontext-dev.toml
+++ b/resources/image_model_cards/exolabs--FLUX.1-Kontext-dev.toml
@@ -7,6 +7,7 @@ family = "flux"
quantization = ""
base_model = "FLUX.1 Kontext"
capabilities = ["image_edit"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 33327437952
diff --git a/resources/image_model_cards/exolabs--FLUX.1-Krea-dev-4bit.toml b/resources/image_model_cards/exolabs--FLUX.1-Krea-dev-4bit.toml
index fd9d8608..5ccd4a41 100644
--- a/resources/image_model_cards/exolabs--FLUX.1-Krea-dev-4bit.toml
+++ b/resources/image_model_cards/exolabs--FLUX.1-Krea-dev-4bit.toml
@@ -7,6 +7,7 @@ family = "flux"
quantization = "4bit"
base_model = "FLUX.1 Krea"
capabilities = ["image_gen"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 15475325472
diff --git a/resources/image_model_cards/exolabs--FLUX.1-Krea-dev-8bit.toml b/resources/image_model_cards/exolabs--FLUX.1-Krea-dev-8bit.toml
index 1d9221a7..288b3949 100644
--- a/resources/image_model_cards/exolabs--FLUX.1-Krea-dev-8bit.toml
+++ b/resources/image_model_cards/exolabs--FLUX.1-Krea-dev-8bit.toml
@@ -7,6 +7,7 @@ family = "flux"
quantization = "8bit"
base_model = "FLUX.1 Krea"
capabilities = ["image_gen"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 21426029632
diff --git a/resources/image_model_cards/exolabs--FLUX.1-Krea-dev.toml b/resources/image_model_cards/exolabs--FLUX.1-Krea-dev.toml
index 516fdb88..4b3e898d 100644
--- a/resources/image_model_cards/exolabs--FLUX.1-Krea-dev.toml
+++ b/resources/image_model_cards/exolabs--FLUX.1-Krea-dev.toml
@@ -7,6 +7,7 @@ family = "flux"
quantization = ""
base_model = "FLUX.1 Krea"
capabilities = ["image_gen"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 33327437952
diff --git a/resources/image_model_cards/exolabs--FLUX.1-dev-4bit.toml b/resources/image_model_cards/exolabs--FLUX.1-dev-4bit.toml
index 82b03bad..7bfc489c 100644
--- a/resources/image_model_cards/exolabs--FLUX.1-dev-4bit.toml
+++ b/resources/image_model_cards/exolabs--FLUX.1-dev-4bit.toml
@@ -7,6 +7,7 @@ family = "flux"
quantization = "4bit"
base_model = "FLUX.1 Dev"
capabilities = ["image_gen"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 15475325472
diff --git a/resources/image_model_cards/exolabs--FLUX.1-dev-8bit.toml b/resources/image_model_cards/exolabs--FLUX.1-dev-8bit.toml
index e35629d8..52f6dba5 100644
--- a/resources/image_model_cards/exolabs--FLUX.1-dev-8bit.toml
+++ b/resources/image_model_cards/exolabs--FLUX.1-dev-8bit.toml
@@ -7,6 +7,7 @@ family = "flux"
quantization = "8bit"
base_model = "FLUX.1 Dev"
capabilities = ["image_gen"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 21426029632
diff --git a/resources/image_model_cards/exolabs--FLUX.1-dev.toml b/resources/image_model_cards/exolabs--FLUX.1-dev.toml
index 44e5533d..39953de0 100644
--- a/resources/image_model_cards/exolabs--FLUX.1-dev.toml
+++ b/resources/image_model_cards/exolabs--FLUX.1-dev.toml
@@ -7,6 +7,7 @@ family = "flux"
quantization = ""
base_model = "FLUX.1 Dev"
capabilities = ["image_gen"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 33327437952
diff --git a/resources/image_model_cards/exolabs--FLUX.1-schnell-4bit.toml b/resources/image_model_cards/exolabs--FLUX.1-schnell-4bit.toml
index 4d6f97b8..c51bb2d7 100644
--- a/resources/image_model_cards/exolabs--FLUX.1-schnell-4bit.toml
+++ b/resources/image_model_cards/exolabs--FLUX.1-schnell-4bit.toml
@@ -7,6 +7,7 @@ family = "flux"
quantization = "4bit"
base_model = "FLUX.1 Schnell"
capabilities = ["image_gen"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 15470210592
diff --git a/resources/image_model_cards/exolabs--FLUX.1-schnell-8bit.toml b/resources/image_model_cards/exolabs--FLUX.1-schnell-8bit.toml
index 56b2faeb..634a9403 100644
--- a/resources/image_model_cards/exolabs--FLUX.1-schnell-8bit.toml
+++ b/resources/image_model_cards/exolabs--FLUX.1-schnell-8bit.toml
@@ -7,6 +7,7 @@ family = "flux"
quantization = "8bit"
base_model = "FLUX.1 Schnell"
capabilities = ["image_gen"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 21415799872
diff --git a/resources/image_model_cards/exolabs--FLUX.1-schnell.toml b/resources/image_model_cards/exolabs--FLUX.1-schnell.toml
index efb08522..4cd6a525 100644
--- a/resources/image_model_cards/exolabs--FLUX.1-schnell.toml
+++ b/resources/image_model_cards/exolabs--FLUX.1-schnell.toml
@@ -7,6 +7,7 @@ family = "flux"
quantization = ""
base_model = "FLUX.1 Schnell"
capabilities = ["image_gen"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 33306978432
diff --git a/resources/image_model_cards/exolabs--Qwen-Image-4bit.toml b/resources/image_model_cards/exolabs--Qwen-Image-4bit.toml
index b11765a1..16175cc1 100644
--- a/resources/image_model_cards/exolabs--Qwen-Image-4bit.toml
+++ b/resources/image_model_cards/exolabs--Qwen-Image-4bit.toml
@@ -8,6 +8,7 @@ family = "qwen-image"
quantization = "4bit"
base_model = "Qwen Image"
capabilities = ["image_gen"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 26799533856
diff --git a/resources/image_model_cards/exolabs--Qwen-Image-8bit.toml b/resources/image_model_cards/exolabs--Qwen-Image-8bit.toml
index 64f2b55a..76d10765 100644
--- a/resources/image_model_cards/exolabs--Qwen-Image-8bit.toml
+++ b/resources/image_model_cards/exolabs--Qwen-Image-8bit.toml
@@ -8,6 +8,7 @@ family = "qwen-image"
quantization = "8bit"
base_model = "Qwen Image"
capabilities = ["image_gen"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 37014734400
diff --git a/resources/image_model_cards/exolabs--Qwen-Image-Edit-2509-4bit.toml b/resources/image_model_cards/exolabs--Qwen-Image-Edit-2509-4bit.toml
index 13992cbe..80e9d8e5 100644
--- a/resources/image_model_cards/exolabs--Qwen-Image-Edit-2509-4bit.toml
+++ b/resources/image_model_cards/exolabs--Qwen-Image-Edit-2509-4bit.toml
@@ -8,6 +8,7 @@ family = "qwen-image"
quantization = "4bit"
base_model = "Qwen Image Edit"
capabilities = ["image_edit"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 26799533856
diff --git a/resources/image_model_cards/exolabs--Qwen-Image-Edit-2509-8bit.toml b/resources/image_model_cards/exolabs--Qwen-Image-Edit-2509-8bit.toml
index 60b7e3dd..ce7d6e20 100644
--- a/resources/image_model_cards/exolabs--Qwen-Image-Edit-2509-8bit.toml
+++ b/resources/image_model_cards/exolabs--Qwen-Image-Edit-2509-8bit.toml
@@ -8,6 +8,7 @@ family = "qwen-image"
quantization = "8bit"
base_model = "Qwen Image Edit"
capabilities = ["image_edit"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 37014734400
diff --git a/resources/image_model_cards/exolabs--Qwen-Image-Edit-2509.toml b/resources/image_model_cards/exolabs--Qwen-Image-Edit-2509.toml
index 9c68b221..81fcb3ae 100644
--- a/resources/image_model_cards/exolabs--Qwen-Image-Edit-2509.toml
+++ b/resources/image_model_cards/exolabs--Qwen-Image-Edit-2509.toml
@@ -8,6 +8,7 @@ family = "qwen-image"
quantization = ""
base_model = "Qwen Image Edit"
capabilities = ["image_edit"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 57445135488
diff --git a/resources/image_model_cards/exolabs--Qwen-Image.toml b/resources/image_model_cards/exolabs--Qwen-Image.toml
index 5a86ccfe..734a8d0b 100644
--- a/resources/image_model_cards/exolabs--Qwen-Image.toml
+++ b/resources/image_model_cards/exolabs--Qwen-Image.toml
@@ -8,6 +8,7 @@ family = "qwen-image"
quantization = ""
base_model = "Qwen Image"
capabilities = ["image_gen"]
+backends = ["MlxMetal"]
[storage_size]
in_bytes = 57445135488
diff --git a/resources/inference_model_cards/mlx-community--DeepSeek-V3.1-4bit.toml b/resources/inference_model_cards/mlx-community--DeepSeek-V3.1-4bit.toml
index a8d578f6..39dba047 100644
--- a/resources/inference_model_cards/mlx-community--DeepSeek-V3.1-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--DeepSeek-V3.1-4bit.toml
@@ -11,7 +11,7 @@ capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 405874409472
diff --git a/resources/inference_model_cards/mlx-community--DeepSeek-V3.1-8bit.toml b/resources/inference_model_cards/mlx-community--DeepSeek-V3.1-8bit.toml
index 4989cb3a..372aabaf 100644
--- a/resources/inference_model_cards/mlx-community--DeepSeek-V3.1-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--DeepSeek-V3.1-8bit.toml
@@ -11,7 +11,7 @@ capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 765577920512
diff --git a/resources/inference_model_cards/mlx-community--DeepSeek-V3.2-4bit.toml b/resources/inference_model_cards/mlx-community--DeepSeek-V3.2-4bit.toml
index d5d24d22..071d8e61 100644
--- a/resources/inference_model_cards/mlx-community--DeepSeek-V3.2-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--DeepSeek-V3.2-4bit.toml
@@ -11,7 +11,7 @@ capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "tool_conditional"
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 378086226621
diff --git a/resources/inference_model_cards/mlx-community--DeepSeek-V3.2-8bit.toml b/resources/inference_model_cards/mlx-community--DeepSeek-V3.2-8bit.toml
index 600639cd..6f733723 100644
--- a/resources/inference_model_cards/mlx-community--DeepSeek-V3.2-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--DeepSeek-V3.2-8bit.toml
@@ -11,7 +11,7 @@ capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "tool_conditional"
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 755957120916
diff --git a/resources/inference_model_cards/mlx-community--DeepSeek-V4-Flash.toml b/resources/inference_model_cards/mlx-community--DeepSeek-V4-Flash.toml
index e1b43f39..c4f64474 100644
--- a/resources/inference_model_cards/mlx-community--DeepSeek-V4-Flash.toml
+++ b/resources/inference_model_cards/mlx-community--DeepSeek-V4-Flash.toml
@@ -11,7 +11,7 @@ capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "tool_conditional"
context_length = 1048576
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 155095760030
diff --git a/resources/inference_model_cards/mlx-community--DeepSeek-V4-Pro.toml b/resources/inference_model_cards/mlx-community--DeepSeek-V4-Pro.toml
index 80dbf55c..00dd3e66 100644
--- a/resources/inference_model_cards/mlx-community--DeepSeek-V4-Pro.toml
+++ b/resources/inference_model_cards/mlx-community--DeepSeek-V4-Pro.toml
@@ -11,7 +11,7 @@ capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "tool_conditional"
context_length = 1048576
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 849681803879
diff --git a/resources/inference_model_cards/mlx-community--GLM-4.5-Air-8bit.toml b/resources/inference_model_cards/mlx-community--GLM-4.5-Air-8bit.toml
index 0c9f5e08..63b9ee4e 100644
--- a/resources/inference_model_cards/mlx-community--GLM-4.5-Air-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-4.5-Air-8bit.toml
@@ -10,7 +10,7 @@ base_model = "GLM 4.5 Air"
capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 122406567936
diff --git a/resources/inference_model_cards/mlx-community--GLM-4.5-Air-bf16.toml b/resources/inference_model_cards/mlx-community--GLM-4.5-Air-bf16.toml
index d92a102a..489d0100 100644
--- a/resources/inference_model_cards/mlx-community--GLM-4.5-Air-bf16.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-4.5-Air-bf16.toml
@@ -10,7 +10,7 @@ base_model = "GLM 4.5 Air"
capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 229780750336
diff --git a/resources/inference_model_cards/mlx-community--GLM-4.7-4bit.toml b/resources/inference_model_cards/mlx-community--GLM-4.7-4bit.toml
index ce75f1c2..4a10e257 100644
--- a/resources/inference_model_cards/mlx-community--GLM-4.7-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-4.7-4bit.toml
@@ -10,7 +10,7 @@ base_model = "GLM 4.7"
capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 202752
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 198556925568
diff --git a/resources/inference_model_cards/mlx-community--GLM-4.7-6bit.toml b/resources/inference_model_cards/mlx-community--GLM-4.7-6bit.toml
index 247dcb0b..108cab88 100644
--- a/resources/inference_model_cards/mlx-community--GLM-4.7-6bit.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-4.7-6bit.toml
@@ -10,7 +10,7 @@ base_model = "GLM 4.7"
capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 202752
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 286737579648
diff --git a/resources/inference_model_cards/mlx-community--GLM-4.7-8bit-gs32.toml b/resources/inference_model_cards/mlx-community--GLM-4.7-8bit-gs32.toml
index 314a0888..6fead9cf 100644
--- a/resources/inference_model_cards/mlx-community--GLM-4.7-8bit-gs32.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-4.7-8bit-gs32.toml
@@ -10,7 +10,7 @@ base_model = "GLM 4.7"
capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 202752
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 396963397248
diff --git a/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-4bit.toml b/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-4bit.toml
index be6ccf92..47e56efd 100644
--- a/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-4bit.toml
@@ -10,7 +10,7 @@ base_model = "GLM 4.7 Flash"
capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 202752
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 19327352832
diff --git a/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-5bit.toml b/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-5bit.toml
index 5f1c8dea..fc685138 100644
--- a/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-5bit.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-5bit.toml
@@ -10,7 +10,7 @@ base_model = "GLM 4.7 Flash"
capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 202752
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 22548578304
diff --git a/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-6bit.toml b/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-6bit.toml
index 36e96616..75f2aca0 100644
--- a/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-6bit.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-6bit.toml
@@ -10,7 +10,7 @@ base_model = "GLM 4.7 Flash"
capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 202752
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 26843545600
diff --git a/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-8bit.toml b/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-8bit.toml
index 233d54c2..83aef821 100644
--- a/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-4.7-Flash-8bit.toml
@@ -10,7 +10,7 @@ base_model = "GLM 4.7 Flash"
capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 202752
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 34359738368
diff --git a/resources/inference_model_cards/mlx-community--GLM-5-8bit.toml b/resources/inference_model_cards/mlx-community--GLM-5-8bit.toml
index 6a5bda1c..0798598b 100644
--- a/resources/inference_model_cards/mlx-community--GLM-5-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-5-8bit.toml
@@ -10,7 +10,7 @@ base_model = "GLM-5"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 202752
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 790517400864
diff --git a/resources/inference_model_cards/mlx-community--GLM-5-MXFP4-Q8.toml b/resources/inference_model_cards/mlx-community--GLM-5-MXFP4-Q8.toml
index 1e1ac0a0..69272d25 100644
--- a/resources/inference_model_cards/mlx-community--GLM-5-MXFP4-Q8.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-5-MXFP4-Q8.toml
@@ -10,7 +10,7 @@ base_model = "GLM-5"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 202752
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 405478939008
diff --git a/resources/inference_model_cards/mlx-community--GLM-5-bf16.toml b/resources/inference_model_cards/mlx-community--GLM-5-bf16.toml
index 035388c6..05c0e457 100644
--- a/resources/inference_model_cards/mlx-community--GLM-5-bf16.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-5-bf16.toml
@@ -10,7 +10,7 @@ base_model = "GLM-5"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 202752
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 1487822475264
diff --git a/resources/inference_model_cards/mlx-community--GLM-5.1-DQ4plus-q8.toml b/resources/inference_model_cards/mlx-community--GLM-5.1-DQ4plus-q8.toml
index 09749554..c92ffd25 100644
--- a/resources/inference_model_cards/mlx-community--GLM-5.1-DQ4plus-q8.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-5.1-DQ4plus-q8.toml
@@ -10,7 +10,7 @@ base_model = "GLM-5.1"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 202752
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 465173655552
diff --git a/resources/inference_model_cards/mlx-community--GLM-5.1-MXFP4-Q8.toml b/resources/inference_model_cards/mlx-community--GLM-5.1-MXFP4-Q8.toml
index 81392a6a..8230d2fd 100644
--- a/resources/inference_model_cards/mlx-community--GLM-5.1-MXFP4-Q8.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-5.1-MXFP4-Q8.toml
@@ -10,7 +10,7 @@ base_model = "GLM-5.1"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 202752
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 405480321024
diff --git a/resources/inference_model_cards/mlx-community--GLM-5.1.toml b/resources/inference_model_cards/mlx-community--GLM-5.1.toml
index 1239794e..a59dddfb 100644
--- a/resources/inference_model_cards/mlx-community--GLM-5.1.toml
+++ b/resources/inference_model_cards/mlx-community--GLM-5.1.toml
@@ -10,7 +10,7 @@ base_model = "GLM-5.1"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 202752
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 1487822475264
diff --git a/resources/inference_model_cards/mlx-community--Kimi-K2-Instruct-4bit.toml b/resources/inference_model_cards/mlx-community--Kimi-K2-Instruct-4bit.toml
index 23b2a572..f8ad022c 100644
--- a/resources/inference_model_cards/mlx-community--Kimi-K2-Instruct-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Kimi-K2-Instruct-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Kimi K2"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 620622774272
diff --git a/resources/inference_model_cards/mlx-community--Kimi-K2-Thinking.toml b/resources/inference_model_cards/mlx-community--Kimi-K2-Thinking.toml
index 15206c88..cccffb5d 100644
--- a/resources/inference_model_cards/mlx-community--Kimi-K2-Thinking.toml
+++ b/resources/inference_model_cards/mlx-community--Kimi-K2-Thinking.toml
@@ -10,7 +10,7 @@ base_model = "Kimi K2"
capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "suffix"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 706522120192
diff --git a/resources/inference_model_cards/mlx-community--Kimi-K2.5.toml b/resources/inference_model_cards/mlx-community--Kimi-K2.5.toml
index 7460d91e..69e17d4e 100644
--- a/resources/inference_model_cards/mlx-community--Kimi-K2.5.toml
+++ b/resources/inference_model_cards/mlx-community--Kimi-K2.5.toml
@@ -10,7 +10,7 @@ base_model = "Kimi K2.5"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "suffix"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 662498705408
diff --git a/resources/inference_model_cards/mlx-community--Kimi-K2.6-mlx-DQ3_K_M-q8.toml b/resources/inference_model_cards/mlx-community--Kimi-K2.6-mlx-DQ3_K_M-q8.toml
index 2571a660..b2444d7d 100644
--- a/resources/inference_model_cards/mlx-community--Kimi-K2.6-mlx-DQ3_K_M-q8.toml
+++ b/resources/inference_model_cards/mlx-community--Kimi-K2.6-mlx-DQ3_K_M-q8.toml
@@ -10,7 +10,7 @@ base_model = "Kimi K2.6"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "suffix"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 470628683776
diff --git a/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-4bit.toml b/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-4bit.toml
index f8663f1b..96ea196b 100644
--- a/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-4bit.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Llama-3.1-Nemotron-70B-Instruct"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 39688355840
diff --git a/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-8bit.toml b/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-8bit.toml
index 71a75024..67056553 100644
--- a/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-8bit.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Llama-3.1-Nemotron-70B-Instruct"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 74964549632
diff --git a/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-bf16.toml b/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-bf16.toml
index 03185ccc..531ab7a7 100644
--- a/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-bf16.toml
+++ b/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-70B-Instruct-HF-bf16.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Llama-3.1-Nemotron-70B-Instruct"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 141107412992
diff --git a/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-4bit.toml b/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-4bit.toml
index 8c409ed5..6d355ea9 100644
--- a/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-4bit.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Llama-3.1-Nemotron-Nano-4B-v1.1"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 2538706944
diff --git a/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-8bit.toml b/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-8bit.toml
index aa0aaffc..98aa0604 100644
--- a/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-8bit.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Llama-3.1-Nemotron-Nano-4B-v1.1"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 4794980352
diff --git a/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-bf16.toml b/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-bf16.toml
index 2266392e..c479bafa 100644
--- a/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-bf16.toml
+++ b/resources/inference_model_cards/mlx-community--Llama-3.1-Nemotron-Nano-4B-v1.1-bf16.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Llama-3.1-Nemotron-Nano-4B-v1.1"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 9025492992
diff --git a/resources/inference_model_cards/mlx-community--Llama-3.2-1B-Instruct-4bit.toml b/resources/inference_model_cards/mlx-community--Llama-3.2-1B-Instruct-4bit.toml
index c10c53f1..4a70c63a 100644
--- a/resources/inference_model_cards/mlx-community--Llama-3.2-1B-Instruct-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Llama-3.2-1B-Instruct-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Llama 3.2 1B"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 729808896
diff --git a/resources/inference_model_cards/mlx-community--Llama-3.2-3B-Instruct-4bit.toml b/resources/inference_model_cards/mlx-community--Llama-3.2-3B-Instruct-4bit.toml
index 3ceeee79..9e21b131 100644
--- a/resources/inference_model_cards/mlx-community--Llama-3.2-3B-Instruct-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Llama-3.2-3B-Instruct-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Llama 3.2 3B"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 1863319552
diff --git a/resources/inference_model_cards/mlx-community--Llama-3.2-3B-Instruct-8bit.toml b/resources/inference_model_cards/mlx-community--Llama-3.2-3B-Instruct-8bit.toml
index 66c88e2a..b3deee1b 100644
--- a/resources/inference_model_cards/mlx-community--Llama-3.2-3B-Instruct-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Llama-3.2-3B-Instruct-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Llama 3.2 3B"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 3501195264
diff --git a/resources/inference_model_cards/mlx-community--Llama-3.3-70B-Instruct-4bit.toml b/resources/inference_model_cards/mlx-community--Llama-3.3-70B-Instruct-4bit.toml
index 73b4e32a..cd2d9600 100644
--- a/resources/inference_model_cards/mlx-community--Llama-3.3-70B-Instruct-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Llama-3.3-70B-Instruct-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Llama 3.3 70B"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 40652242944
diff --git a/resources/inference_model_cards/mlx-community--Llama-3.3-70B-Instruct-8bit.toml b/resources/inference_model_cards/mlx-community--Llama-3.3-70B-Instruct-8bit.toml
index 285156d7..0ffae4af 100644
--- a/resources/inference_model_cards/mlx-community--Llama-3.3-70B-Instruct-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Llama-3.3-70B-Instruct-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Llama 3.3 70B"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 76799803392
diff --git a/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-70B-Instruct-4bit.toml b/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-70B-Instruct-4bit.toml
index 214a5fa9..5a2d14db 100644
--- a/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-70B-Instruct-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-70B-Instruct-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Llama 3.1 70B"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 40652242944
diff --git a/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-4bit.toml b/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-4bit.toml
index 551c7052..cfa7e57b 100644
--- a/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Llama 3.1 8B"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 4637851648
diff --git a/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-8bit.toml b/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-8bit.toml
index 7ac95f17..eb2163a9 100644
--- a/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Llama 3.1 8B"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 8954839040
diff --git a/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-bf16.toml b/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-bf16.toml
index cea334f8..4caefc14 100644
--- a/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-bf16.toml
+++ b/resources/inference_model_cards/mlx-community--Meta-Llama-3.1-8B-Instruct-bf16.toml
@@ -10,7 +10,7 @@ base_model = "Llama 3.1 8B"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 16882073600
diff --git a/resources/inference_model_cards/mlx-community--MiniMax-M2.1-3bit.toml b/resources/inference_model_cards/mlx-community--MiniMax-M2.1-3bit.toml
index d0351b24..0865a464 100644
--- a/resources/inference_model_cards/mlx-community--MiniMax-M2.1-3bit.toml
+++ b/resources/inference_model_cards/mlx-community--MiniMax-M2.1-3bit.toml
@@ -10,7 +10,7 @@ base_model = "MiniMax M2.1"
capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 196608
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 100086644736
diff --git a/resources/inference_model_cards/mlx-community--MiniMax-M2.1-8bit.toml b/resources/inference_model_cards/mlx-community--MiniMax-M2.1-8bit.toml
index 86d6de2d..997a89bf 100644
--- a/resources/inference_model_cards/mlx-community--MiniMax-M2.1-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--MiniMax-M2.1-8bit.toml
@@ -10,7 +10,7 @@ base_model = "MiniMax M2.1"
capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 196608
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 242986745856
diff --git a/resources/inference_model_cards/mlx-community--MiniMax-M2.5-4bit.toml b/resources/inference_model_cards/mlx-community--MiniMax-M2.5-4bit.toml
index f57b4d74..75e741d0 100644
--- a/resources/inference_model_cards/mlx-community--MiniMax-M2.5-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--MiniMax-M2.5-4bit.toml
@@ -10,7 +10,7 @@ base_model = "MiniMax M2.5"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 196608
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 128666664960
diff --git a/resources/inference_model_cards/mlx-community--MiniMax-M2.5-6bit.toml b/resources/inference_model_cards/mlx-community--MiniMax-M2.5-6bit.toml
index 824801b9..6bf42d8b 100644
--- a/resources/inference_model_cards/mlx-community--MiniMax-M2.5-6bit.toml
+++ b/resources/inference_model_cards/mlx-community--MiniMax-M2.5-6bit.toml
@@ -10,7 +10,7 @@ base_model = "MiniMax M2.5"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 196608
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 185826705408
diff --git a/resources/inference_model_cards/mlx-community--MiniMax-M2.5-8bit.toml b/resources/inference_model_cards/mlx-community--MiniMax-M2.5-8bit.toml
index 9588abc9..aa645794 100644
--- a/resources/inference_model_cards/mlx-community--MiniMax-M2.5-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--MiniMax-M2.5-8bit.toml
@@ -10,7 +10,7 @@ base_model = "MiniMax M2.5"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 196608
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 242986745856
diff --git a/resources/inference_model_cards/mlx-community--MiniMax-M2.7-4bit-mxfp4.toml b/resources/inference_model_cards/mlx-community--MiniMax-M2.7-4bit-mxfp4.toml
index 7dd6e942..2759c97f 100644
--- a/resources/inference_model_cards/mlx-community--MiniMax-M2.7-4bit-mxfp4.toml
+++ b/resources/inference_model_cards/mlx-community--MiniMax-M2.7-4bit-mxfp4.toml
@@ -10,7 +10,7 @@ base_model = "MiniMax M2.7"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 196608
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 121537496794
diff --git a/resources/inference_model_cards/mlx-community--MiniMax-M2.7-4bit.toml b/resources/inference_model_cards/mlx-community--MiniMax-M2.7-4bit.toml
index d06cfa7b..8d1a5ad2 100644
--- a/resources/inference_model_cards/mlx-community--MiniMax-M2.7-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--MiniMax-M2.7-4bit.toml
@@ -10,7 +10,7 @@ base_model = "MiniMax M2.7"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 196608
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 128682598717
diff --git a/resources/inference_model_cards/mlx-community--MiniMax-M2.7-5bit.toml b/resources/inference_model_cards/mlx-community--MiniMax-M2.7-5bit.toml
index e0f09cf6..3897cc9f 100644
--- a/resources/inference_model_cards/mlx-community--MiniMax-M2.7-5bit.toml
+++ b/resources/inference_model_cards/mlx-community--MiniMax-M2.7-5bit.toml
@@ -10,7 +10,7 @@ base_model = "MiniMax M2.7"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 196608
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 157262619651
diff --git a/resources/inference_model_cards/mlx-community--MiniMax-M2.7-6bit.toml b/resources/inference_model_cards/mlx-community--MiniMax-M2.7-6bit.toml
index 49c4685d..bac8ae30 100644
--- a/resources/inference_model_cards/mlx-community--MiniMax-M2.7-6bit.toml
+++ b/resources/inference_model_cards/mlx-community--MiniMax-M2.7-6bit.toml
@@ -10,7 +10,7 @@ base_model = "MiniMax M2.7"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 196608
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 185842639299
diff --git a/resources/inference_model_cards/mlx-community--MiniMax-M2.7-8bit.toml b/resources/inference_model_cards/mlx-community--MiniMax-M2.7-8bit.toml
index 6d62934a..97ce9a75 100644
--- a/resources/inference_model_cards/mlx-community--MiniMax-M2.7-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--MiniMax-M2.7-8bit.toml
@@ -10,7 +10,7 @@ base_model = "MiniMax M2.7"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 196608
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 243002680786
diff --git a/resources/inference_model_cards/mlx-community--MiniMax-M2.7.toml b/resources/inference_model_cards/mlx-community--MiniMax-M2.7.toml
index 478df79b..e5acfbda 100644
--- a/resources/inference_model_cards/mlx-community--MiniMax-M2.7.toml
+++ b/resources/inference_model_cards/mlx-community--MiniMax-M2.7.toml
@@ -10,7 +10,7 @@ base_model = "MiniMax M2.7"
capabilities = ["text", "thinking"]
reasoning_dialect = "post_last_user"
context_length = 196608
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 457492783366
diff --git a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-4Bit.toml b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-4Bit.toml
index fb032101..840905fa 100644
--- a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-4Bit.toml
+++ b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-4Bit.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Nemotron-3-Nano-30B-A3B"
capabilities = ["text"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 17775342336
diff --git a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-5Bit.toml b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-5Bit.toml
index 3b2b15c0..99baffb1 100644
--- a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-5Bit.toml
+++ b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-5Bit.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Nemotron-3-Nano-30B-A3B"
capabilities = ["text"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 21721476864
diff --git a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-6Bit.toml b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-6Bit.toml
index c2a193d9..47449c7e 100644
--- a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-6Bit.toml
+++ b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-6Bit.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Nemotron-3-Nano-30B-A3B"
capabilities = ["text"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 25667611392
diff --git a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-8Bit.toml b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-8Bit.toml
index 7ba87193..785c62f3 100644
--- a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-8Bit.toml
+++ b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-8Bit.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Nemotron-3-Nano-30B-A3B"
capabilities = ["text"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 33559880448
diff --git a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-BF16.toml b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-BF16.toml
index d7223a6b..688bf8c6 100644
--- a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-BF16.toml
+++ b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-BF16.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Nemotron-3-Nano-30B-A3B"
capabilities = ["text"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 63155889408
diff --git a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-MXFP4.toml b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-MXFP4.toml
index 033cb9fc..9fa62538 100644
--- a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-MXFP4.toml
+++ b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-MLX-MXFP4.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Nemotron-3-Nano-30B-A3B"
capabilities = ["text"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 16788808704
diff --git a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-NVFP4.toml b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-NVFP4.toml
index 2858cd1f..d590c794 100644
--- a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-NVFP4.toml
+++ b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-3-Nano-30B-A3B-NVFP4.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Nemotron-3-Nano-30B-A3B"
capabilities = ["text"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 19323906944
diff --git a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-Nano-9B-v2-4bits.toml b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-Nano-9B-v2-4bits.toml
index a834e1aa..3e3eaa08 100644
--- a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-Nano-9B-v2-4bits.toml
+++ b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-Nano-9B-v2-4bits.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Nemotron-Nano-9B-v2"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 5002791936
diff --git a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-Nano-9B-v2-6bit.toml b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-Nano-9B-v2-6bit.toml
index ec59e5a0..d06f09d0 100644
--- a/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-Nano-9B-v2-6bit.toml
+++ b/resources/inference_model_cards/mlx-community--NVIDIA-Nemotron-Nano-9B-v2-6bit.toml
@@ -9,7 +9,7 @@ base_model = "NVIDIA Nemotron-Nano-9B-v2"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 7224298496
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-0.6B-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-0.6B-4bit.toml
index cf44e9c1..efb96e5d 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-0.6B-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-0.6B-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 0.6B"
capabilities = ["text", "thinking", "thinking_toggle"]
context_length = 32768
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 342884352
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-0.6B-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-0.6B-8bit.toml
index 6061fc49..4c959ebc 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-0.6B-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-0.6B-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 0.6B"
capabilities = ["text", "thinking", "thinking_toggle"]
context_length = 32768
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 698351616
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-235B-A22B-Instruct-2507-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-235B-A22B-Instruct-2507-4bit.toml
index 430b985c..ed5506c6 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-235B-A22B-Instruct-2507-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-235B-A22B-Instruct-2507-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 235B"
capabilities = ["text", "thinking", "thinking_toggle"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 141733920768
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-235B-A22B-Instruct-2507-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-235B-A22B-Instruct-2507-8bit.toml
index 8b3df97e..2e52ee9d 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-235B-A22B-Instruct-2507-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-235B-A22B-Instruct-2507-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 235B"
capabilities = ["text", "thinking", "thinking_toggle"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 268435456000
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-30B-A3B-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-30B-A3B-4bit.toml
index 13951adc..42678d4a 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-30B-A3B-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-30B-A3B-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 30B"
capabilities = ["text", "thinking", "thinking_toggle"]
context_length = 32768
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 17612931072
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-30B-A3B-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-30B-A3B-8bit.toml
index 4a4db8e2..026de660 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-30B-A3B-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-30B-A3B-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 30B"
capabilities = ["text", "thinking", "thinking_toggle"]
context_length = 32768
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 33279705088
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-Coder-480B-A35B-Instruct-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-Coder-480B-A35B-Instruct-4bit.toml
index 26236ff8..62b25b48 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-Coder-480B-A35B-Instruct-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-Coder-480B-A35B-Instruct-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 Coder 480B"
capabilities = ["text", "code"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 289910292480
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-Coder-480B-A35B-Instruct-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-Coder-480B-A35B-Instruct-8bit.toml
index 4f145936..5efe672b 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-Coder-480B-A35B-Instruct-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-Coder-480B-A35B-Instruct-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 Coder 480B"
capabilities = ["text", "code"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 579820584960
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-4bit.toml
index 5130447d..d692f7dc 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 Coder Next"
capabilities = ["text", "code"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 45644286500
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-5bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-5bit.toml
index b33d2427..4127b434 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-5bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-5bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 Coder Next"
capabilities = ["text", "code"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 57657697020
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-6bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-6bit.toml
index fc46f271..e89d91db 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-6bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-6bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 Coder Next"
capabilities = ["text", "code"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 68899327465
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-8bit.toml
index 967bfea6..8ecf357f 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 Coder Next"
capabilities = ["text", "code"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 89357758772
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-bf16.toml b/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-bf16.toml
index e1c5acac..73c32b0e 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-bf16.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-Coder-Next-bf16.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 Coder Next"
capabilities = ["text", "code"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 157548627945
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Instruct-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Instruct-4bit.toml
index 7850c667..2145cbea 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Instruct-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Instruct-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 Next 80B"
capabilities = ["text"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 46976204800
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Instruct-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Instruct-8bit.toml
index 1120f824..e1328021 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Instruct-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Instruct-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 Next 80B"
capabilities = ["text"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 88814387200
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Thinking-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Thinking-4bit.toml
index c15735b5..708b309c 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Thinking-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Thinking-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 Next 80B"
capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 47080074240
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Thinking-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Thinking-8bit.toml
index 3e57c5b4..90097255 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Thinking-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-Next-80B-A3B-Thinking-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3 Next 80B"
capabilities = ["text", "thinking", "thinking_toggle"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 88814387200
diff --git a/resources/inference_model_cards/mlx-community--Qwen3-VL-4B-Instruct-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3-VL-4B-Instruct-4bit.toml
index 9f28315c..d8e45002 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3-VL-4B-Instruct-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3-VL-4B-Instruct-4bit.toml
@@ -9,7 +9,7 @@ base_model = "Qwen3-VL 4B"
capabilities = ["text", "thinking", "vision"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 3340000000
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-4bit.toml
index 6f937b4a..5e50aca6 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.5 122B A10B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 69593314272
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-6bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-6bit.toml
index 6973380c..ae589b0c 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-6bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-6bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.5 122B A10B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 100120675296
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-8bit.toml
index 2558dd70..ede2e81c 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.5 122B A10B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 130648036320
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-bf16.toml b/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-bf16.toml
index e504ad65..e1cdb9f5 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-bf16.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.5-122B-A10B-bf16.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.5 122B A10B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 245125640160
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.5-27B-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.5-27B-4bit.toml
index 45bb673e..c0ae0cbf 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.5-27B-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.5-27B-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.5 27B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 16054266848
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.5-27B-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.5-27B-8bit.toml
index 0e6f8f02..aef1aa39 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.5-27B-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.5-27B-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.5 27B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 29500943328
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.5-2B-MLX-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.5-2B-MLX-8bit.toml
index 5e484a99..78ff8747 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.5-2B-MLX-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.5-2B-MLX-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.5 2B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 2662787264
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.5-35B-A3B-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.5-35B-A3B-4bit.toml
index 393a0776..d8abb8de 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.5-35B-A3B-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.5-35B-A3B-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.5 35B A3B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 20391405152
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.5-35B-A3B-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.5-35B-A3B-8bit.toml
index bb6742ec..e995d131 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.5-35B-A3B-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.5-35B-A3B-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.5 35B A3B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 37721130592
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-4bit.toml
index 8404cb7a..202b8286 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.5 397B A17B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 223860768352
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-6bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-6bit.toml
index c0d3093c..8774868c 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-6bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-6bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.5 397B A17B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 322946674272
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-8bit.toml
index 988839d8..a0cef3ff 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.5-397B-A17B-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.5 397B A17B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 422032580192
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.5-9B-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.5-9B-4bit.toml
index e864300b..2248f193 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.5-9B-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.5-9B-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.5 9B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 5950062560
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.5-9B-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.5-9B-8bit.toml
index fc3b412d..44cbc456 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.5-9B-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.5-9B-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.5 9B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 10426433504
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.6-27B-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.6-27B-4bit.toml
index 25bd0d81..88decd00 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.6-27B-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.6-27B-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.6 27B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 16054262240
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.6-27B-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.6-27B-8bit.toml
index ee62ba29..8cef7490 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.6-27B-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.6-27B-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.6 27B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 29500938720
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.6-27B-bf16.toml b/resources/inference_model_cards/mlx-community--Qwen3.6-27B-bf16.toml
index f820559d..d04042da 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.6-27B-bf16.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.6-27B-bf16.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.6 27B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 54713457120
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-4bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-4bit.toml
index b857d8d8..d2ca90e8 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.6 35B A3B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 20401929952
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-5bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-5bit.toml
index db445870..8229424f 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-5bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-5bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.6 35B A3B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 24731729632
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-8bit.toml b/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-8bit.toml
index 3d142553..c03748fa 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.6 35B A3B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 37721128672
diff --git a/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-bf16.toml b/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-bf16.toml
index ef459ca3..9bd5cf1e 100644
--- a/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-bf16.toml
+++ b/resources/inference_model_cards/mlx-community--Qwen3.6-35B-A3B-bf16.toml
@@ -10,7 +10,7 @@ base_model = "Qwen3.6 35B A3B"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
reasoning_dialect = "post_last_user"
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 70214363872
diff --git a/resources/inference_model_cards/mlx-community--Step-3.5-Flash-4bit.toml b/resources/inference_model_cards/mlx-community--Step-3.5-Flash-4bit.toml
index b5977723..734febb0 100644
--- a/resources/inference_model_cards/mlx-community--Step-3.5-Flash-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--Step-3.5-Flash-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Step 3.5 Flash"
capabilities = ["text", "thinking", "thinking_toggle"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 114572190076
diff --git a/resources/inference_model_cards/mlx-community--Step-3.5-Flash-6bit.toml b/resources/inference_model_cards/mlx-community--Step-3.5-Flash-6bit.toml
index fe45fa37..57a5f4cf 100644
--- a/resources/inference_model_cards/mlx-community--Step-3.5-Flash-6bit.toml
+++ b/resources/inference_model_cards/mlx-community--Step-3.5-Flash-6bit.toml
@@ -10,7 +10,7 @@ base_model = "Step 3.5 Flash"
capabilities = ["text", "thinking", "thinking_toggle"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 159039627774
diff --git a/resources/inference_model_cards/mlx-community--Step-3.5-Flash-8Bit.toml b/resources/inference_model_cards/mlx-community--Step-3.5-Flash-8Bit.toml
index 64ec31bb..977903fd 100644
--- a/resources/inference_model_cards/mlx-community--Step-3.5-Flash-8Bit.toml
+++ b/resources/inference_model_cards/mlx-community--Step-3.5-Flash-8Bit.toml
@@ -10,7 +10,7 @@ base_model = "Step 3.5 Flash"
capabilities = ["text", "thinking", "thinking_toggle"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 209082699847
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-4bit.toml b/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-4bit.toml
index 51be323e..729b4c5e 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 26B A4B"
capabilities = ["text", "vision"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 15608614044
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-6bit.toml b/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-6bit.toml
index c984d44b..e98f520f 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-6bit.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-6bit.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 26B A4B"
capabilities = ["text", "vision"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 21781015708
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-8bit.toml b/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-8bit.toml
index fe258366..36ac44dd 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 26B A4B"
capabilities = ["text", "vision"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 27953417372
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-bf16.toml b/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-bf16.toml
index ea4dbbfc..e1197254 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-bf16.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-26b-a4b-it-bf16.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 26B A4B"
capabilities = ["text", "vision"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 51611872412
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-31b-it-4bit.toml b/resources/inference_model_cards/mlx-community--gemma-4-31b-it-4bit.toml
index cb8e6358..409db197 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-31b-it-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-31b-it-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 31B"
capabilities = ["text", "vision"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 18411755224
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-31b-it-6bit.toml b/resources/inference_model_cards/mlx-community--gemma-4-31b-it-6bit.toml
index 84562062..21c0461d 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-31b-it-6bit.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-31b-it-6bit.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 31B"
capabilities = ["text", "vision"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 26087306968
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-31b-it-8bit.toml b/resources/inference_model_cards/mlx-community--gemma-4-31b-it-8bit.toml
index 332a9b00..378447a4 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-31b-it-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-31b-it-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 31B"
capabilities = ["text", "vision"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 33762858712
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-31b-it-bf16.toml b/resources/inference_model_cards/mlx-community--gemma-4-31b-it-bf16.toml
index 6fc0a2dc..ea3c87d8 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-31b-it-bf16.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-31b-it-bf16.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 31B"
capabilities = ["text", "vision"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 62546177752
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-4bit.toml b/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-4bit.toml
index db641a2b..5234fab0 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 E2B"
capabilities = ["text", "vision"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 3580765126
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-6bit.toml b/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-6bit.toml
index 4fdf9dda..d4d1f674 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-6bit.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-6bit.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 E2B"
capabilities = ["text", "vision"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 4739998662
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-8bit.toml b/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-8bit.toml
index 8834e16f..9eb59b37 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 E2B"
capabilities = ["text", "vision"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 5899232198
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-bf16.toml b/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-bf16.toml
index 1bad3dd8..b45e690d 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-bf16.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-e2b-it-bf16.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 E2B"
capabilities = ["text", "vision"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 10246357958
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-4bit.toml b/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-4bit.toml
index 0f4cc821..e88c4639 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-4bit.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-4bit.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 E4B"
capabilities = ["text", "vision"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 5216992212
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-6bit.toml b/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-6bit.toml
index 2cdd2b33..0402a801 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-6bit.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-6bit.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 E4B"
capabilities = ["text", "vision"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 7090961364
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-8bit.toml b/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-8bit.toml
index 1be07028..158d3fc6 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-8bit.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-8bit.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 E4B"
capabilities = ["text", "vision"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 8964930516
diff --git a/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-bf16.toml b/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-bf16.toml
index f18df6f3..8d1f84f8 100644
--- a/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-bf16.toml
+++ b/resources/inference_model_cards/mlx-community--gemma-4-e4b-it-bf16.toml
@@ -10,7 +10,7 @@ base_model = "Gemma 4 E4B"
capabilities = ["text", "vision"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 15992314836
diff --git a/resources/inference_model_cards/mlx-community--gpt-oss-120b-MXFP4-Q8.toml b/resources/inference_model_cards/mlx-community--gpt-oss-120b-MXFP4-Q8.toml
index 1a8a028f..091b079b 100644
--- a/resources/inference_model_cards/mlx-community--gpt-oss-120b-MXFP4-Q8.toml
+++ b/resources/inference_model_cards/mlx-community--gpt-oss-120b-MXFP4-Q8.toml
@@ -10,7 +10,7 @@ base_model = "GPT-OSS 120B"
capabilities = ["text", "thinking"]
reasoning_dialect = "channel"
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 70652212224
diff --git a/resources/inference_model_cards/mlx-community--gpt-oss-20b-MXFP4-Q8.toml b/resources/inference_model_cards/mlx-community--gpt-oss-20b-MXFP4-Q8.toml
index b8bb29ec..9e1a56ba 100644
--- a/resources/inference_model_cards/mlx-community--gpt-oss-20b-MXFP4-Q8.toml
+++ b/resources/inference_model_cards/mlx-community--gpt-oss-20b-MXFP4-Q8.toml
@@ -10,7 +10,7 @@ base_model = "GPT-OSS 20B"
capabilities = ["text", "thinking"]
reasoning_dialect = "channel"
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 12025908224
diff --git a/resources/inference_model_cards/mlx-community--llama-3.3-70b-instruct-fp16.toml b/resources/inference_model_cards/mlx-community--llama-3.3-70b-instruct-fp16.toml
index 06cf3131..f37400aa 100644
--- a/resources/inference_model_cards/mlx-community--llama-3.3-70b-instruct-fp16.toml
+++ b/resources/inference_model_cards/mlx-community--llama-3.3-70b-instruct-fp16.toml
@@ -10,7 +10,7 @@ base_model = "Llama 3.3 70B"
capabilities = ["text"]
context_length = 131072
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 144383672320
diff --git a/resources/inference_model_cards/moonshotai--Kimi-K2.6.toml b/resources/inference_model_cards/moonshotai--Kimi-K2.6.toml
index 8d9d19b7..b169e51a 100644
--- a/resources/inference_model_cards/moonshotai--Kimi-K2.6.toml
+++ b/resources/inference_model_cards/moonshotai--Kimi-K2.6.toml
@@ -10,7 +10,7 @@ base_model = "Kimi K2.6"
capabilities = ["text", "thinking", "thinking_toggle", "vision"]
context_length = 262144
-
+backends = ["MlxMetal", "MlxCuda", "MlxCpu"]
[storage_size]
in_bytes = 595148192736
diff --git a/src/exo/api/main.py b/src/exo/api/main.py
index d3b03e46..90a93a4c 100644
--- a/src/exo/api/main.py
+++ b/src/exo/api/main.py
@@ -482,6 +482,7 @@ class API:
),
node_memory=self.state.node_memory,
node_network=self.state.node_network,
+ node_backends=self.state.node_backends,
topology=self.state.topology,
current_instances=self.state.instances,
download_status=self.state.downloads,
@@ -545,6 +546,7 @@ class API:
),
node_memory=self.state.node_memory,
node_network=self.state.node_network,
+ node_backends=self.state.node_backends,
topology=self.state.topology,
current_instances=self.state.instances,
required_nodes=required_nodes,
diff --git a/src/exo/download/impl_shard_downloader.py b/src/exo/download/impl_shard_downloader.py
index ee85945b..a76d2cd4 100644
--- a/src/exo/download/impl_shard_downloader.py
+++ b/src/exo/download/impl_shard_downloader.py
@@ -199,6 +199,7 @@ class ResumableShardDownloader(ShardDownloader):
hidden_size=1,
supports_tensor=False,
tasks=[ModelTask.TextGeneration],
+ backends=shard.model_card.backends,
)
return PipelineShardMetadata(
model_card=vision_card,
diff --git a/src/exo/download/shard_downloader.py b/src/exo/download/shard_downloader.py
index 2addda80..fa3c9a4b 100644
--- a/src/exo/download/shard_downloader.py
+++ b/src/exo/download/shard_downloader.py
@@ -7,6 +7,7 @@ from typing import AsyncIterator, Callable
from exo.download.download_utils import RepoDownloadProgress
from exo.shared.models.model_cards import ModelCard, ModelId, ModelTask
+from exo.shared.types.backends import Backend
from exo.shared.types.memory import Memory
from exo.shared.types.worker.shards import (
PipelineShardMetadata,
@@ -93,6 +94,7 @@ NOOP_DOWNLOAD_PROGRESS = RepoDownloadProgress(
hidden_size=1,
supports_tensor=False,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
),
device_rank=0,
world_size=1,
diff --git a/src/exo/download/tests/test_cancel_download.py b/src/exo/download/tests/test_cancel_download.py
index 3d02d65f..6546bb36 100644
--- a/src/exo/download/tests/test_cancel_download.py
+++ b/src/exo/download/tests/test_cancel_download.py
@@ -12,6 +12,7 @@ from exo.download.download_utils import RepoDownloadProgress
from exo.download.impl_shard_downloader import SingletonShardDownloader
from exo.download.shard_downloader import ShardDownloader
from exo.shared.models.model_cards import ModelCard, ModelId, ModelTask
+from exo.shared.types.backends import Backend
from exo.shared.types.commands import (
CancelDownload,
ForwarderDownloadCommand,
@@ -37,6 +38,7 @@ def _make_shard(model_id: ModelId = MODEL_ID) -> ShardMetadata:
hidden_size=1024,
supports_tensor=False,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
),
device_rank=0,
world_size=1,
diff --git a/src/exo/download/tests/test_download_status_not_lost.py b/src/exo/download/tests/test_download_status_not_lost.py
index 2f1c3ae8..c9e9cc60 100644
--- a/src/exo/download/tests/test_download_status_not_lost.py
+++ b/src/exo/download/tests/test_download_status_not_lost.py
@@ -19,6 +19,7 @@ from exo.download.download_utils import RepoDownloadProgress
from exo.download.impl_shard_downloader import SingletonShardDownloader
from exo.download.shard_downloader import ShardDownloader
from exo.shared.models.model_cards import ModelCard, ModelId, ModelTask
+from exo.shared.types.backends import Backend
from exo.shared.types.commands import ForwarderDownloadCommand
from exo.shared.types.common import NodeId
from exo.shared.types.events import Event, NodeDownloadProgress
@@ -44,6 +45,7 @@ def _make_shard(model_id: ModelId = MODEL_ID) -> ShardMetadata:
hidden_size=1024,
supports_tensor=False,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
),
device_rank=0,
world_size=1,
diff --git a/src/exo/download/tests/test_re_download.py b/src/exo/download/tests/test_re_download.py
index 75617997..7b456540 100644
--- a/src/exo/download/tests/test_re_download.py
+++ b/src/exo/download/tests/test_re_download.py
@@ -13,6 +13,7 @@ from exo.download.download_utils import RepoDownloadProgress
from exo.download.impl_shard_downloader import SingletonShardDownloader
from exo.download.shard_downloader import ShardDownloader
from exo.shared.models.model_cards import ModelCard, ModelId, ModelTask
+from exo.shared.types.backends import Backend
from exo.shared.types.commands import (
DeleteDownload,
ForwarderDownloadCommand,
@@ -38,6 +39,7 @@ def _make_shard(model_id: ModelId = MODEL_ID) -> ShardMetadata:
hidden_size=1024,
supports_tensor=False,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
),
device_rank=0,
world_size=1,
diff --git a/src/exo/master/main.py b/src/exo/master/main.py
index 85abbe39..655e6556 100644
--- a/src/exo/master/main.py
+++ b/src/exo/master/main.py
@@ -364,6 +364,7 @@ class Master:
self.state.instances,
self.state.node_memory,
self.state.node_network,
+ self.state.node_backends,
download_status=self.state.downloads,
node_rdma_ctl=self.state.node_rdma_ctl,
)
diff --git a/src/exo/master/placement.py b/src/exo/master/placement.py
index b55571c7..0ed634e2 100644
--- a/src/exo/master/placement.py
+++ b/src/exo/master/placement.py
@@ -13,6 +13,7 @@ from exo.master.placement_utils import (
)
from exo.shared.models.model_cards import ModelId
from exo.shared.topology import Topology
+from exo.shared.types.backends import Backend
from exo.shared.types.commands import (
CancelDownload,
CreateInstance,
@@ -47,6 +48,11 @@ from exo.shared.types.worker.instances import (
from exo.shared.types.worker.shards import Sharding
from exo.utils.ports import random_ephemeral_port
+INSTANCE_META_BACKENDS: dict[InstanceMeta, list[Backend]] = {
+ InstanceMeta.MlxRing: [Backend.MlxMetal, Backend.MlxCuda, Backend.MlxCpu],
+ InstanceMeta.MlxJaccl: [Backend.MlxMetal],
+}
+
def add_instance_to_placements(
command: CreateInstance,
@@ -103,6 +109,7 @@ def place_instance(
current_instances: Mapping[InstanceId, Instance],
node_memory: Mapping[NodeId, MemoryUsage],
node_network: Mapping[NodeId, NodeNetworkInfo],
+ node_backends: Mapping[NodeId, list[Backend]],
required_nodes: set[NodeId] | None = None,
download_status: Mapping[NodeId, Sequence[DownloadProgress]] | None = None,
node_rdma_ctl: Mapping[NodeId, NodeRdmaCtlStatus] | None = None,
@@ -167,6 +174,29 @@ def place_instance(
smallest_cycles = get_smallest_cycles(cycles_with_sufficient_memory)
+ required_backends = set(INSTANCE_META_BACKENDS[command.instance_meta]) & set(
+ command.model_card.backends
+ )
+ if not required_backends:
+ raise ValueError(
+ f"Model {command.model_card.model_id} backends "
+ f"{sorted(b.value for b in command.model_card.backends)} cannot satisfy engine "
+ f"{command.instance_meta.value} which requires "
+ f"{sorted(b.value for b in INSTANCE_META_BACKENDS[command.instance_meta])}"
+ )
+ smallest_cycles = [
+ cycle
+ for cycle in smallest_cycles
+ if all(
+ set(node_backends.get(node_id, [])) & required_backends for node_id in cycle
+ )
+ ]
+ if not smallest_cycles:
+ raise ValueError(
+ f"No cycle where every node supports a backend in "
+ f"{sorted(b.value for b in required_backends)} for {command.model_card.model_id}"
+ )
+
rdma_ctl_status = node_rdma_ctl or {}
def _all_rdma_ctl_enabled(cycle: Cycle) -> bool:
diff --git a/src/exo/master/tests/test_master.py b/src/exo/master/tests/test_master.py
index c4a1cff0..d370a1e7 100644
--- a/src/exo/master/tests/test_master.py
+++ b/src/exo/master/tests/test_master.py
@@ -8,6 +8,7 @@ from loguru import logger
from exo.master.main import Master
from exo.routing.router import get_node_id_keypair
from exo.shared.models.model_cards import ModelCard, ModelTask
+from exo.shared.types.backends import Backend
from exo.shared.types.commands import (
CommandId,
ForwarderCommand,
@@ -43,6 +44,7 @@ from exo.shared.types.worker.instances import (
)
from exo.shared.types.worker.shards import PipelineShardMetadata, Sharding
from exo.utils.channels import channel
+from exo.utils.info_gatherer.info_gatherer import NodeBackends
@pytest.mark.asyncio
@@ -120,6 +122,20 @@ async def test_master():
),
)
)
+ await local_event_sender.send(
+ LocalForwarderEvent(
+ origin_idx=1,
+ origin=SystemId("Worker"),
+ session=session_id,
+ event=(
+ NodeGatheredInfo(
+ when=str(datetime.now(tz=timezone.utc)),
+ node_id=node_id,
+ info=NodeBackends(backends=[Backend.MlxMetal]),
+ )
+ ),
+ )
+ )
# wait for initial topology event
logger.info("wait for initial topology event")
@@ -127,6 +143,8 @@ async def test_master():
await anyio.sleep(0.001)
while len(master.state.node_memory) == 0:
await anyio.sleep(0.001)
+ while len(master.state.node_backends) == 0:
+ await anyio.sleep(0.001)
logger.info("inject a CreateInstance Command")
await command_sender.send(
@@ -142,6 +160,7 @@ async def test_master():
hidden_size=7168,
supports_tensor=True,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
),
sharding=Sharding.Pipeline,
instance_meta=InstanceMeta.MlxRing,
@@ -173,17 +192,19 @@ async def test_master():
),
)
)
- while len(_get_events()) < 3:
+ while len(_get_events()) < 4:
await anyio.sleep(0.01)
events = _get_events()
- assert len(events) == 3
+ assert len(events) == 4
assert events[0].idx == 0
assert events[1].idx == 1
assert events[2].idx == 2
+ assert events[3].idx == 3
assert isinstance(events[0].event, NodeGatheredInfo)
- assert isinstance(events[1].event, InstanceCreated)
- created_instance = events[1].event.instance
+ assert isinstance(events[1].event, NodeGatheredInfo)
+ assert isinstance(events[2].event, InstanceCreated)
+ created_instance = events[2].event.instance
assert isinstance(created_instance, MlxRingInstance)
runner_id = list(created_instance.shard_assignments.runner_to_shard.keys())[0]
# Validate the shard assignments
@@ -201,6 +222,7 @@ async def test_master():
hidden_size=7168,
supports_tensor=True,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
),
device_rank=0,
world_size=1,
@@ -215,10 +237,10 @@ async def test_master():
assert len(created_instance.hosts_by_node[node_id]) == 1
assert created_instance.hosts_by_node[node_id][0].ip == "0.0.0.0"
assert created_instance.ephemeral_port > 0
- assert isinstance(events[2].event, TaskCreated)
- assert events[2].event.task.task_status == TaskStatus.Pending
- assert isinstance(events[2].event.task, TextGenerationTask)
- assert events[2].event.task.task_params == TextGenerationTaskParams(
+ assert isinstance(events[3].event, TaskCreated)
+ assert events[3].event.task.task_status == TaskStatus.Pending
+ assert isinstance(events[3].event.task, TextGenerationTask)
+ assert events[3].event.task.task_params == TextGenerationTaskParams(
model=ModelId("llama-3.2-1b"),
input=[
InputMessage(
diff --git a/src/exo/master/tests/test_placement.py b/src/exo/master/tests/test_placement.py
index d3acd24f..b8911872 100644
--- a/src/exo/master/tests/test_placement.py
+++ b/src/exo/master/tests/test_placement.py
@@ -1,3 +1,5 @@
+from collections.abc import Mapping
+
import pytest
from exo.master.placement import (
@@ -12,6 +14,7 @@ from exo.master.tests.conftest import (
)
from exo.shared.models.model_cards import ModelCard, ModelId, ModelTask
from exo.shared.topology import Topology
+from exo.shared.types.backends import Backend
from exo.shared.types.commands import PlaceInstance
from exo.shared.types.common import CommandId, NodeId
from exo.shared.types.events import (
@@ -71,9 +74,16 @@ def model_card() -> ModelCard:
hidden_size=30,
supports_tensor=True,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
)
+def _metal_only(
+ node_memory: Mapping[NodeId, object],
+) -> dict[NodeId, list[Backend]]:
+ return {node_id: [Backend.MlxMetal] for node_id in node_memory}
+
+
def place_instance_command(model_card: ModelCard) -> PlaceInstance:
return PlaceInstance(
command_id=CommandId(),
@@ -155,7 +165,9 @@ def test_get_instance_placements_create_instance(
topology.add_connection(conn_b_a)
# act
- placements = place_instance(cic, topology, {}, node_memory, node_network)
+ placements = place_instance(
+ cic, topology, {}, node_memory, node_network, _metal_only(node_memory)
+ )
# assert
assert len(placements) == 1
@@ -195,9 +207,12 @@ def test_get_instance_placements_one_node_exact_fit() -> None:
hidden_size=1000,
supports_tensor=True,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
),
)
- placements = place_instance(cic, topology, {}, node_memory, node_network)
+ placements = place_instance(
+ cic, topology, {}, node_memory, node_network, _metal_only(node_memory)
+ )
assert len(placements) == 1
instance_id = list(placements.keys())[0]
@@ -222,9 +237,12 @@ def test_get_instance_placements_one_node_fits_with_extra_memory() -> None:
hidden_size=1000,
supports_tensor=True,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
),
)
- placements = place_instance(cic, topology, {}, node_memory, node_network)
+ placements = place_instance(
+ cic, topology, {}, node_memory, node_network, _metal_only(node_memory)
+ )
assert len(placements) == 1
instance_id = list(placements.keys())[0]
@@ -249,11 +267,14 @@ def test_get_instance_placements_one_node_not_fit() -> None:
hidden_size=1000,
supports_tensor=True,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
),
)
with pytest.raises(ValueError, match="No cycles found with sufficient memory"):
- place_instance(cic, topology, {}, node_memory, node_network)
+ place_instance(
+ cic, topology, {}, node_memory, node_network, _metal_only(node_memory)
+ )
def test_get_transition_events_no_change(instance: Instance):
@@ -352,7 +373,9 @@ def test_placement_selects_leaf_nodes(
cic = place_instance_command(model_card=model_card)
# act
- placements = place_instance(cic, topology, {}, node_memory, node_network)
+ placements = place_instance(
+ cic, topology, {}, node_memory, node_network, _metal_only(node_memory)
+ )
# assert
assert len(placements) == 1
@@ -456,6 +479,7 @@ def test_tensor_rdma_backend_connectivity_matrix(
{},
node_memory,
node_network,
+ _metal_only(node_memory),
node_rdma_ctl=node_rdma_ctl,
)
@@ -583,6 +607,7 @@ def test_place_mlx_jaccl_rejects_when_a_node_has_rdma_ctl_disabled(
{},
node_memory,
node_network,
+ _metal_only(node_memory),
node_rdma_ctl=node_rdma_ctl,
)
@@ -620,6 +645,7 @@ def test_place_mlx_jaccl_rejects_when_node_rdma_ctl_missing(model_card: ModelCar
{},
node_memory,
node_network,
+ _metal_only(node_memory),
node_rdma_ctl=node_rdma_ctl,
)
@@ -788,7 +814,13 @@ def test_placement_prefers_cycle_with_downloaded_model(
cic = place_instance_command(model_card)
placements = place_instance(
- cic, topology, {}, node_memory, node_network, download_status=download_status
+ cic,
+ topology,
+ {},
+ node_memory,
+ node_network,
+ _metal_only(node_memory),
+ download_status=download_status,
)
assert len(placements) == 1
@@ -860,7 +892,13 @@ def test_placement_prefers_cycle_with_higher_download_progress(
cic = place_instance_command(model_card)
placements = place_instance(
- cic, topology, {}, node_memory, node_network, download_status=download_status
+ cic,
+ topology,
+ {},
+ node_memory,
+ node_network,
+ _metal_only(node_memory),
+ download_status=download_status,
)
assert len(placements) == 1
@@ -908,7 +946,13 @@ def test_placement_does_not_prefer_cycle_with_failed_download(
cic = place_instance_command(model_card)
placements = place_instance(
- cic, topology, {}, node_memory, node_network, download_status=download_status
+ cic,
+ topology,
+ {},
+ node_memory,
+ node_network,
+ _metal_only(node_memory),
+ download_status=download_status,
)
assert len(placements) == 1
@@ -916,3 +960,99 @@ def test_placement_does_not_prefer_cycle_with_failed_download(
assigned_nodes = set(instance.shard_assignments.node_to_runner.keys())
# node_a should win on RAM tiebreaker since failed download scores 0.0
assert assigned_nodes == {node_a}
+
+
+def test_placement_rejects_when_model_backends_disjoint_from_engine(
+ model_card: ModelCard,
+):
+ topology = Topology()
+ node_id = NodeId()
+ topology.add_node(node_id)
+ node_memory = {node_id: create_node_memory(1000 * 1024)}
+ node_network = {node_id: create_node_network()}
+
+ cic = place_instance_command(
+ model_card.model_copy(update={"backends": [Backend.Vllm]})
+ )
+
+ with pytest.raises(ValueError, match="cannot satisfy engine MlxRing"):
+ place_instance(
+ cic, topology, {}, node_memory, node_network, _metal_only(node_memory)
+ )
+
+
+def test_placement_rejects_when_only_some_nodes_support_backend(
+ model_card: ModelCard,
+):
+ topology = Topology()
+ node_a = NodeId()
+ node_b = NodeId()
+ node_c = NodeId()
+ for n in (node_a, node_b, node_c):
+ topology.add_node(n)
+
+ eth = create_socket_connection(1)
+ for src, dst in [
+ (node_a, node_b),
+ (node_b, node_c),
+ (node_c, node_a),
+ (node_a, node_c),
+ (node_c, node_b),
+ (node_b, node_a),
+ ]:
+ topology.add_connection(Connection(source=src, sink=dst, edge=eth))
+
+ node_memory = {n: create_node_memory(500 * 1024) for n in (node_a, node_b, node_c)}
+ node_network = {n: create_node_network() for n in (node_a, node_b, node_c)}
+ node_backends = {
+ node_a: [Backend.MlxMetal],
+ node_b: [Backend.MlxMetal],
+ node_c: [Backend.MlxCuda], # the lone CUDA-only node breaks the cycle
+ }
+
+ cic = place_instance_command(
+ model_card.model_copy(
+ update={
+ "backends": [Backend.MlxMetal],
+ "n_layers": 12,
+ "storage_size": Memory.from_kb(1500),
+ }
+ )
+ )
+
+ with pytest.raises(ValueError, match="No cycle where every node supports"):
+ place_instance(cic, topology, {}, node_memory, node_network, node_backends)
+
+
+def test_mlx_jaccl_rejects_cuda_only_cycle(model_card: ModelCard):
+ topology, node_a, node_b, node_c, node_network = _build_three_node_rdma_topology()
+ node_memory = {n: create_node_memory(500) for n in (node_a, node_b, node_c)}
+ node_rdma_ctl = {
+ n: NodeRdmaCtlStatus(enabled=True) for n in (node_a, node_b, node_c)
+ }
+ node_backends = {n: [Backend.MlxCuda] for n in (node_a, node_b, node_c)}
+
+ cic = PlaceInstance(
+ sharding=Sharding.Tensor,
+ instance_meta=InstanceMeta.MlxJaccl,
+ command_id=CommandId(),
+ model_card=model_card.model_copy(
+ update={
+ "backends": [Backend.MlxMetal, Backend.MlxCuda],
+ "n_layers": 12,
+ "storage_size": Memory.from_bytes(1500),
+ }
+ ),
+ min_nodes=3,
+ )
+
+ with pytest.raises(ValueError, match="No cycle where every node supports"):
+ place_instance(
+ cic,
+ topology,
+ {},
+ node_memory,
+ node_network,
+ node_backends,
+ node_rdma_ctl=node_rdma_ctl,
+ )
diff --git a/src/exo/master/tests/test_placement_utils.py b/src/exo/master/tests/test_placement_utils.py
index 245c4fd7..b2f64729 100644
--- a/src/exo/master/tests/test_placement_utils.py
+++ b/src/exo/master/tests/test_placement_utils.py
@@ -14,6 +14,7 @@ from exo.master.tests.conftest import (
)
from exo.shared.models.model_cards import ModelCard, ModelId, ModelTask
from exo.shared.topology import Topology
+from exo.shared.types.backends import Backend
from exo.shared.types.common import NodeId
from exo.shared.types.memory import Memory
from exo.shared.types.profiling import (
@@ -243,6 +244,7 @@ def test_get_shard_assignments(
hidden_size=1000,
supports_tensor=True,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
)
cycles = topology.get_cycles()
@@ -484,6 +486,7 @@ def test_get_shard_assignments_insufficient_memory_raises():
hidden_size=1000,
supports_tensor=True,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
)
cycles = topology.get_cycles()
selected_cycle = cycles[0]
@@ -533,6 +536,7 @@ class TestCfgParallelPlacement:
supports_tensor=False,
uses_cfg=True,
tasks=[ModelTask.TextToImage],
+ backends=[Backend.MlxMetal],
)
assignments = get_shard_assignments_for_pipeline_parallel(
@@ -576,6 +580,7 @@ class TestCfgParallelPlacement:
supports_tensor=False,
uses_cfg=True,
tasks=[ModelTask.TextToImage],
+ backends=[Backend.MlxMetal],
)
assignments = get_shard_assignments_for_pipeline_parallel(
@@ -625,6 +630,7 @@ class TestCfgParallelPlacement:
supports_tensor=False,
uses_cfg=True,
tasks=[ModelTask.TextToImage],
+ backends=[Backend.MlxMetal],
)
assignments = get_shard_assignments_for_pipeline_parallel(
@@ -660,6 +666,7 @@ class TestCfgParallelPlacement:
supports_tensor=False,
uses_cfg=False, # Non-CFG model
tasks=[ModelTask.TextToImage],
+ backends=[Backend.MlxMetal],
)
assignments = get_shard_assignments_for_pipeline_parallel(
diff --git a/src/exo/shared/apply.py b/src/exo/shared/apply.py
index d5a9d383..5f72247b 100644
--- a/src/exo/shared/apply.py
+++ b/src/exo/shared/apply.py
@@ -57,6 +57,7 @@ from exo.utils.info_gatherer.info_gatherer import (
MacThunderboltIdentifiers,
MemoryUsage,
MiscData,
+ NodeBackends,
NodeConfig,
NodeDiskUsage,
NodeNetworkInterfaces,
@@ -460,6 +461,11 @@ def apply_node_gathered_info(event: NodeGatheredInfo, state: State) -> State:
# MacThunderboltConnections poll once both endpoints are enabled again.)
if not info.enabled:
topology.remove_all_rdma_connections_touching(event.node_id)
+ case NodeBackends():
+ update["node_backends"] = {
+ **state.node_backends,
+ event.node_id: info.backends,
+ }
return state.model_copy(update=update)
diff --git a/src/exo/shared/models/model_cards.py b/src/exo/shared/models/model_cards.py
index 0d1648a7..f64a509e 100644
--- a/src/exo/shared/models/model_cards.py
+++ b/src/exo/shared/models/model_cards.py
@@ -26,6 +26,7 @@ from exo.shared.constants import (
EXO_MODELS_DIRS,
RESOURCES_DIR,
)
+from exo.shared.types.backends import Backend
from exo.shared.types.common import ModelId
from exo.shared.types.memory import Memory
from exo.shared.types.text_generation import ReasoningDialect
@@ -164,6 +165,7 @@ class ModelCard(FrozenModel):
quantization: str = ""
base_model: str = ""
capabilities: list[str] = []
+ backends: list[Backend]
reasoning_dialect: ReasoningDialect = "none"
context_length: int = 0
uses_cfg: bool = False
@@ -247,6 +249,9 @@ class ModelCard(FrozenModel):
trust_remote_code=False,
is_custom=True,
vision=config_data.vision,
+ backends=list(
+ Backend
+ ), # all backends — we don't know what an arbitrary HF model supports; let placement gate decide
)
diff --git a/src/exo/shared/tests/conftest.py b/src/exo/shared/tests/conftest.py
index 0622cb0b..b0ffb08d 100644
--- a/src/exo/shared/tests/conftest.py
+++ b/src/exo/shared/tests/conftest.py
@@ -8,6 +8,7 @@ from _pytest.logging import LogCaptureFixture
from loguru import logger
from exo.shared.models.model_cards import ModelCard, ModelId, ModelTask
+from exo.shared.types.backends import Backend
from exo.shared.types.memory import Memory
from exo.shared.types.worker.shards import PipelineShardMetadata, ShardMetadata
@@ -38,6 +39,7 @@ def get_pipeline_shard_metadata(
hidden_size=1000,
supports_tensor=True,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
),
device_rank=device_rank,
world_size=world_size,
diff --git a/src/exo/shared/tests/test_apply/test_apply_custom_model_cards.py b/src/exo/shared/tests/test_apply/test_apply_custom_model_cards.py
index b5b3066c..9d60c28f 100644
--- a/src/exo/shared/tests/test_apply/test_apply_custom_model_cards.py
+++ b/src/exo/shared/tests/test_apply/test_apply_custom_model_cards.py
@@ -1,5 +1,6 @@
from exo.shared.apply import apply
from exo.shared.models.model_cards import ModelCard, ModelTask
+from exo.shared.types.backends import Backend
from exo.shared.types.common import ModelId
from exo.shared.types.events import (
CustomModelCardAdded,
@@ -18,6 +19,7 @@ def _model_card(model_id: ModelId) -> ModelCard:
hidden_size=1,
supports_tensor=True,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
)
diff --git a/src/exo/shared/types/backends.py b/src/exo/shared/types/backends.py
new file mode 100644
index 00000000..d1b9bc6c
--- /dev/null
+++ b/src/exo/shared/types/backends.py
@@ -0,0 +1,8 @@
+from enum import Enum
+
+
+class Backend(str, Enum):
+ MlxMetal = "MlxMetal"
+ MlxCpu = "MlxCpu"
+ MlxCuda = "MlxCuda"
+ Vllm = "Vllm"
diff --git a/src/exo/shared/types/state.py b/src/exo/shared/types/state.py
index 6a60aa08..baef1d72 100644
--- a/src/exo/shared/types/state.py
+++ b/src/exo/shared/types/state.py
@@ -7,6 +7,7 @@ from pydantic.alias_generators import to_camel
from exo.shared.models.model_cards import ModelCard
from exo.shared.topology import Topology, TopologySnapshot
+from exo.shared.types.backends import Backend
from exo.shared.types.common import ModelId, NodeId
from exo.shared.types.instance_link import InstanceLink, InstanceLinkId
from exo.shared.types.profiling import (
@@ -59,6 +60,7 @@ class State(FrozenModel):
node_thunderbolt: Mapping[NodeId, NodeThunderboltInfo] = {}
node_thunderbolt_bridge: Mapping[NodeId, ThunderboltBridgeStatus] = {}
node_rdma_ctl: Mapping[NodeId, NodeRdmaCtlStatus] = {}
+ node_backends: Mapping[NodeId, list[Backend]] = {}
# Detected cycles where all nodes have Thunderbolt bridge enabled (>2 nodes)
thunderbolt_bridge_cycles: Sequence[Sequence[NodeId]] = []
diff --git a/src/exo/utils/info_gatherer/info_gatherer.py b/src/exo/utils/info_gatherer/info_gatherer.py
index 9e75e143..81194c92 100644
--- a/src/exo/utils/info_gatherer/info_gatherer.py
+++ b/src/exo/utils/info_gatherer/info_gatherer.py
@@ -14,6 +14,7 @@ from loguru import logger
from pydantic import ValidationError
from exo.shared.constants import EXO_CONFIG_FILE, EXO_DEFAULT_MODELS_DIR
+from exo.shared.types.backends import Backend
from exo.shared.types.memory import Memory
from exo.shared.types.profiling import (
DiskUsage,
@@ -353,6 +354,35 @@ async def _gather_iface_map() -> dict[str, str] | None:
return ports
+def _has_nvml_cuda() -> bool:
+ try:
+ import pynvml as nvml # pyright: ignore[reportMissingModuleSource]
+ except ImportError:
+ return False
+ try:
+ nvml.nvmlInit()
+ try:
+ return nvml.nvmlDeviceGetCount() > 0
+ finally:
+ nvml.nvmlShutdown()
+ except Exception:
+ return False
+
+
+class NodeBackends(TaggedModel):
+ backends: list[Backend]
+
+ @classmethod
+ async def gather(cls) -> Self:
+ backends: list[Backend] = [Backend.MlxCpu]
+ if IS_DARWIN:
+ backends.append(Backend.MlxMetal)
+ if await to_thread.run_sync(_has_nvml_cuda):
+ backends.append(Backend.MlxCuda)
+ backends.append(Backend.Vllm)
+ return cls(backends=backends)
+
+
GatheredInfo = (
MacmonMetrics
| MemoryUsage
@@ -365,6 +395,7 @@ GatheredInfo = (
| MiscData
| StaticNodeInformation
| NodeDiskUsage
+ | NodeBackends
)
@@ -428,6 +459,8 @@ class InfoGatherer:
if nc is not None:
await self.info_sender.send(nc)
+ await self.info_sender.send(await NodeBackends.gather())
+
def shutdown(self):
self._tg.cancel_tasks()
diff --git a/src/exo/worker/tests/unittests/conftest.py b/src/exo/worker/tests/unittests/conftest.py
index f88148ef..01388c5b 100644
--- a/src/exo/worker/tests/unittests/conftest.py
+++ b/src/exo/worker/tests/unittests/conftest.py
@@ -1,6 +1,7 @@
from dataclasses import dataclass, field
from exo.shared.models.model_cards import ModelCard, ModelId, ModelTask
+from exo.shared.types.backends import Backend
from exo.shared.types.common import NodeId
from exo.shared.types.memory import Memory
from exo.shared.types.tasks import BaseTask, TaskId
@@ -41,6 +42,7 @@ def get_pipeline_shard_metadata(
hidden_size=2048,
supports_tensor=False,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
),
device_rank=device_rank,
world_size=world_size,
diff --git a/src/exo/worker/tests/unittests/test_mlx/conftest.py b/src/exo/worker/tests/unittests/test_mlx/conftest.py
index bba9f15a..d948feb9 100644
--- a/src/exo/worker/tests/unittests/test_mlx/conftest.py
+++ b/src/exo/worker/tests/unittests/test_mlx/conftest.py
@@ -12,6 +12,7 @@ import mlx.nn as nn
from exo.shared.constants import EXO_DEFAULT_MODELS_DIR
from exo.shared.models.model_cards import ModelCard, ModelTask
+from exo.shared.types.backends import Backend
from exo.shared.types.common import ModelId
from exo.shared.types.memory import Memory
from exo.shared.types.text_generation import InputMessage, TextGenerationTaskParams
@@ -88,6 +89,7 @@ def run_gpt_oss_pipeline_device(
hidden_size=2880,
supports_tensor=False,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
),
device_rank=rank,
world_size=world_size,
@@ -169,6 +171,7 @@ def run_gpt_oss_tensor_parallel_device(
hidden_size=2880,
supports_tensor=True,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
),
device_rank=rank,
world_size=world_size,
diff --git a/src/exo/worker/tests/unittests/test_mlx/test_pipeline_prefill_callbacks.py b/src/exo/worker/tests/unittests/test_mlx/test_pipeline_prefill_callbacks.py
index 1972abee..ad8ee030 100644
--- a/src/exo/worker/tests/unittests/test_mlx/test_pipeline_prefill_callbacks.py
+++ b/src/exo/worker/tests/unittests/test_mlx/test_pipeline_prefill_callbacks.py
@@ -17,6 +17,7 @@ import pytest
from exo.shared.constants import EXO_DEFAULT_MODELS_DIR
from exo.shared.models.model_cards import ModelCard, ModelTask
+from exo.shared.types.backends import Backend
from exo.shared.types.common import ModelId
from exo.shared.types.memory import Memory
from exo.shared.types.text_generation import InputMessage, TextGenerationTaskParams
@@ -37,6 +38,7 @@ def _model_card() -> ModelCard:
hidden_size=2880,
supports_tensor=False,
tasks=[ModelTask.TextGeneration],
+ backends=[Backend.MlxMetal],
)
← 14aab356 Runner error handling (#2093)
·
back to Exo
·
Tweaked workspace settings (#2095) 5097b266 →