From 6355f3d8fb843f6789f99e56310a57defc32c225 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 23 Mar 2026 16:00:57 +0000 Subject: [PATCH] man i gotta commit --- .mlx_typings/mlx/nn/layers/__init__.pyi | 20 - {.mlx_typings => .typings}/.gitkeep | 0 {.mlx_typings => .typings}/mflux/__init__.pyi | 0 .../mflux/callbacks/__init__.pyi | 0 .../mflux/callbacks/callback.pyi | 3 +- .../mflux/callbacks/callback_registry.pyi | 1 + .../mflux/callbacks/generation_context.pyi | 3 +- .../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 | 5 +- .../models/common/config/model_config.pyi | 3 +- .../models/common/latent_creator/__init__.pyi | 0 .../common/latent_creator/latent_creator.pyi | 5 +- .../mflux/models/common/lora/__init__.pyi | 0 .../lora/layer/fused_linear_lora_layer.pyi | 2 +- .../common/lora/layer/linear_lora_layer.pyi | 0 .../common/lora/mapping/lora_loader.pyi | 5 +- .../common/lora/mapping/lora_mapping.pyi | 3 +- .../models/common/lora/mapping/lora_saver.pyi | 0 .../common/lora/mapping/lora_transforms.pyi | 0 .../models/common/resolution/__init__.pyi | 0 .../models/common/resolution/actions.pyi | 1 - .../common/resolution/config_resolution.pyi | 1 + .../common/resolution/lora_resolution.pyi | 0 .../common/resolution/path_resolution.pyi | 0 .../resolution/quantization_resolution.pyi | 0 .../models/common/schedulers/__init__.pyi | 0 .../common/schedulers/base_scheduler.pyi | 3 +- .../flow_match_euler_discrete_scheduler.pyi | 3 +- .../common/schedulers/linear_scheduler.pyi | 3 +- .../schedulers/seedvr2_euler_scheduler.pyi | 3 +- .../models/common/tokenizer/__init__.pyi | 0 .../models/common/tokenizer/tokenizer.pyi | 3 +- .../common/tokenizer/tokenizer_loader.pyi | 1 + .../common/tokenizer/tokenizer_output.pyi | 3 +- .../mflux/models/common/vae/__init__.pyi | 0 .../mflux/models/common/vae/tiling_config.pyi | 0 .../mflux/models/common/vae/vae_tiler.pyi | 3 +- .../mflux/models/common/vae/vae_util.pyi | 2 +- .../mflux/models/common/weights/__init__.pyi | 0 .../common/weights/loading/loaded_weights.pyi | 0 .../common/weights/loading/weight_applier.pyi | 3 +- .../weights/loading/weight_definition.pyi | 7 +- .../common/weights/loading/weight_loader.pyi | 1 + .../common/weights/mapping/weight_mapper.pyi | 3 +- .../common/weights/mapping/weight_mapping.pyi | 3 +- .../weights/mapping/weight_transforms.pyi | 0 .../common/weights/saving/model_saver.pyi | 3 +- .../depth_pro/depth_pro_initializer.pyi | 0 .../model/decoder/feature_fusion_block_2d.pyi | 0 .../model/decoder/multires_conv_decoder.pyi | 0 .../model/decoder/residual_block.pyi | 0 .../models/depth_pro/model/depth_pro.pyi | 4 +- .../depth_pro/model/depth_pro_model.pyi | 0 .../models/depth_pro/model/depth_pro_util.pyi | 0 .../depth_pro/model/dino_v2/attention.pyi | 0 .../model/dino_v2/dino_vision_transformer.pyi | 0 .../depth_pro/model/dino_v2/layer_scale.pyi | 0 .../models/depth_pro/model/dino_v2/mlp.pyi | 0 .../depth_pro/model/dino_v2/patch_embed.pyi | 0 .../model/dino_v2/transformer_block.pyi | 0 .../model/encoder/depth_pro_encoder.pyi | 0 .../model/encoder/upsample_block.pyi | 0 .../models/depth_pro/model/head/fov_head.pyi | 0 .../weights/depth_pro_weight_definition.pyi | 1 + .../weights/depth_pro_weight_mapping.pyi | 1 + .../latent_creator/fibo_latent_creator.pyi | 0 .../fibo/weights/fibo_weight_definition.pyi | 1 + .../fibo/weights/fibo_weight_mapping.pyi | 1 + .../tokenizer/qwen2vl_image_processor.pyi | 0 .../fibo_vlm/tokenizer/qwen2vl_processor.pyi | 1 + .../weights/fibo_vlm_weight_definition.pyi | 1 + .../weights/fibo_vlm_weight_mapping.pyi | 1 + .../mflux/models/flux/__init__.pyi | 0 .../mflux/models/flux/cli/__init__.pyi | 0 .../mflux/models/flux/flux_initializer.pyi | 0 .../models/flux/latent_creator/__init__.pyi | 0 .../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 .../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 .../flux_text_encoder/prompt_encoder.pyi | 0 .../t5_encoder/t5_attention.pyi | 0 .../flux_text_encoder/t5_encoder/t5_block.pyi | 0 .../t5_encoder/t5_dense_relu_dense.pyi | 0 .../t5_encoder/t5_encoder.pyi | 0 .../t5_encoder/t5_feed_forward.pyi | 0 .../t5_encoder/t5_layer_norm.pyi | 0 .../t5_encoder/t5_self_attention.pyi | 0 .../ada_layer_norm_continuous.pyi | 0 .../flux_transformer/ada_layer_norm_zero.pyi | 0 .../ada_layer_norm_zero_single.pyi | 0 .../common/attention_utils.pyi | 0 .../flux/model/flux_transformer/embed_nd.pyi | 0 .../model/flux_transformer/feed_forward.pyi | 0 .../flux_transformer/guidance_embedder.pyi | 0 .../flux_transformer/joint_attention.pyi | 3 +- .../joint_transformer_block.pyi | 7 +- .../single_block_attention.pyi | 0 .../single_transformer_block.pyi | 11 +- .../model/flux_transformer/text_embedder.pyi | 0 .../flux_transformer/time_text_embed.pyi | 2 +- .../flux_transformer/timestep_embedder.pyi | 0 .../model/flux_transformer/transformer.pyi | 4 +- .../flux/model/flux_vae/common/attention.pyi | 0 .../model/flux_vae/common/resnet_block_2d.pyi | 0 .../model/flux_vae/common/unet_mid_block.pyi | 0 .../flux/model/flux_vae/decoder/conv_in.pyi | 0 .../model/flux_vae/decoder/conv_norm_out.pyi | 0 .../flux/model/flux_vae/decoder/conv_out.pyi | 0 .../flux/model/flux_vae/decoder/decoder.pyi | 0 .../flux_vae/decoder/up_block_1_or_2.pyi | 0 .../model/flux_vae/decoder/up_block_3.pyi | 0 .../model/flux_vae/decoder/up_block_4.pyi | 0 .../model/flux_vae/decoder/up_sampler.pyi | 0 .../flux/model/flux_vae/encoder/conv_in.pyi | 0 .../model/flux_vae/encoder/conv_norm_out.pyi | 0 .../flux/model/flux_vae/encoder/conv_out.pyi | 0 .../model/flux_vae/encoder/down_block_1.pyi | 0 .../model/flux_vae/encoder/down_block_2.pyi | 0 .../model/flux_vae/encoder/down_block_3.pyi | 0 .../model/flux_vae/encoder/down_block_4.pyi | 0 .../model/flux_vae/encoder/down_sampler.pyi | 0 .../flux/model/flux_vae/encoder/encoder.pyi | 0 .../mflux/models/flux/model/flux_vae/vae.pyi | 0 .../model/redux_encoder/redux_encoder.pyi | 0 .../siglip_encoder.pyi | 0 .../siglip_encoder_layer.pyi | 0 .../siglip_vision_transformer/siglip_mlp.pyi | 0 ...glip_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 .../concept_attention/attention_data.pyi | 5 +- .../joint_attention_concept.pyi | 0 .../joint_transformer_block_concept.pyi | 4 +- .../concept_attention/transformer_concept.pyi | 2 +- .../controlnet/transformer_controlnet.pyi | 2 +- .../models/flux/variants/kontext/__init__.pyi | 0 .../flux/variants/kontext/flux_kontext.pyi | 3 +- .../flux/variants/kontext/kontext_util.pyi | 1 - .../models/flux/variants/txt2img/flux.pyi | 3 +- .../mflux/models/flux/weights/__init__.pyi | 0 .../models/flux/weights/flux_lora_mapping.pyi | 0 .../flux/weights/flux_weight_definition.pyi | 1 + .../flux/weights/flux_weight_mapping.pyi | 1 + .../mflux/models/qwen/__init__.pyi | 0 .../mflux/models/qwen/cli/__init__.pyi | 0 .../models/qwen/latent_creator/__init__.pyi | 0 .../latent_creator/qwen_latent_creator.pyi | 0 .../mflux/models/qwen/model/__init__.pyi | 0 .../qwen_text_encoder/qwen_attention.pyi | 0 .../model/qwen_text_encoder/qwen_encoder.pyi | 0 .../qwen_text_encoder/qwen_encoder_layer.pyi | 0 .../qwen/model/qwen_text_encoder/qwen_mlp.pyi | 0 .../qwen_text_encoder/qwen_patch_merger.pyi | 0 .../qwen_text_encoder/qwen_prompt_encoder.pyi | 0 .../model/qwen_text_encoder/qwen_rms_norm.pyi | 0 .../model/qwen_text_encoder/qwen_rope.pyi | 0 .../qwen_text_encoder/qwen_text_encoder.pyi | 0 .../qwen_vision_attention.pyi | 0 .../qwen_text_encoder/qwen_vision_block.pyi | 0 .../qwen_vision_language_encoder.pyi | 0 .../qwen_text_encoder/qwen_vision_mlp.pyi | 0 .../qwen_vision_patch_embed.pyi | 0 .../qwen_vision_rotary_embedding.pyi | 0 .../qwen_vision_transformer.pyi | 0 .../model/qwen_transformer/qwen_attention.pyi | 3 +- .../qwen_transformer/qwen_feed_forward.pyi | 0 .../qwen/model/qwen_transformer/qwen_rope.pyi | 0 .../qwen_transformer/qwen_time_text_embed.pyi | 0 .../qwen_timestep_embedding.pyi | 0 .../model/qwen_transformer/qwen_timesteps.pyi | 0 .../qwen_transformer/qwen_transformer.pyi | 5 +- .../qwen_transformer_block.pyi | 5 +- .../qwen_transformer_rms_norm.pyi | 0 .../qwen_image_attention_block_3d.pyi | 0 .../qwen_vae/qwen_image_causal_conv_3d.pyi | 0 .../model/qwen_vae/qwen_image_decoder_3d.pyi | 0 .../qwen_vae/qwen_image_down_block_3d.pyi | 0 .../model/qwen_vae/qwen_image_encoder_3d.pyi | 0 .../qwen_vae/qwen_image_mid_block_3d.pyi | 0 .../qwen_vae/qwen_image_res_block_3d.pyi | 0 .../model/qwen_vae/qwen_image_resample_3d.pyi | 0 .../model/qwen_vae/qwen_image_rms_norm.pyi | 0 .../model/qwen_vae/qwen_image_up_block_3d.pyi | 0 .../models/qwen/model/qwen_vae/qwen_vae.pyi | 0 .../mflux/models/qwen/qwen_initializer.pyi | 0 .../mflux/models/qwen/tokenizer/__init__.pyi | 0 .../qwen/tokenizer/qwen_image_processor.pyi | 3 +- .../qwen_vision_language_processor.pyi | 3 +- .../qwen_vision_language_tokenizer.pyi | 5 +- .../mflux/models/qwen/variants/__init__.pyi | 0 .../qwen/variants/edit/qwen_edit_util.pyi | 0 .../qwen/variants/edit/qwen_image_edit.pyi | 5 +- .../qwen/variants/txt2img/qwen_image.pyi | 5 +- .../mflux/models/qwen/weights/__init__.pyi | 0 .../models/qwen/weights/qwen_lora_mapping.pyi | 1 + .../qwen/weights/qwen_weight_definition.pyi | 1 + .../qwen/weights/qwen_weight_mapping.pyi | 1 + .../weights/seedvr2_weight_definition.pyi | 1 + .../weights/seedvr2_weight_mapping.pyi | 1 + .../latent_creator/z_image_latent_creator.pyi | 0 .../weights/z_image_weight_definition.pyi | 1 + .../weights/z_image_weight_mapping.pyi | 0 .../mflux/release/__init__.pyi | 0 .../mflux/utils/__init__.pyi | 0 .../mflux/utils/box_values.pyi | 1 - .../mflux/utils/exceptions.pyi | 0 .../mflux/utils/generated_image.pyi | 3 +- .../mflux/utils/image_util.pyi | 7 +- .../mflux/utils/metadata_builder.pyi | 0 .../mflux/utils/version_util.pyi | 0 .../__init__.py => .typings/mlx/__init__.pyi | 0 .../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/nn/__init__.pyi | 5 +- {.mlx_typings => .typings}/mlx/nn/init.pyi | 0 .typings/mlx/nn/layers/__init__.pyi | 20 + .../mlx/nn/layers/activations.pyi | 0 .../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 | 2 +- .../mlx_lm/__init__.pyi | 0 {.mlx_typings => .typings}/mlx_lm/convert.pyi | 0 .../mlx_lm/generate.pyi | 0 .../mlx_lm/models/__init__.pyi | 0 .../mlx_lm/models/base.pyi | 0 .../mlx_lm/models/bitlinear_layers.pyi | 0 .../mlx_lm/models/cache.pyi | 4 +- .../mlx_lm/models/deepseek_v3.pyi | 0 .../mlx_lm/models/glm4_moe.pyi | 0 .../mlx_lm/models/glm_moe_dsa.pyi | 0 .../mlx_lm/models/nemotron_h.pyi | 0 .../mlx_lm/models/qwen3_5.pyi | 7 +- .../mlx_lm/models/qwen3_5_moe.pyi | 8 +- .../mlx_lm/models/qwen3_next.pyi | 0 .../mlx_lm/models/step3p5.pyi | 0 .../mlx_lm/models/switch_layers.pyi | 0 .../mlx_lm/sample_utils.pyi | 0 .../mlx_lm/tokenizer_utils.pyi | 1 - {.mlx_typings => .typings}/mlx_lm/utils.pyi | 0 flake.nix | 12 +- pyproject.toml | 68 +- python/exo_core/src/exo_core/engine.py | 4 +- python/exo_core/src/exo_core/types/chunks.py | 6 +- .../src/exo_core/types/image_generation.py | 108 + .../src/exo_core/types/runner_response.py | 75 +- python/exo_core/src/exo_core/types/tasks.py | 15 +- .../exo_core/src/exo_core}/utils/channels.py | 0 .../src/exo_core/utils}/tool_parsers.py | 18 +- python/mlx_engine/pyproject.toml | 20 +- .../src/mlx_engine}/auto_parallel.py | 3 +- python/mlx_engine/src/mlx_engine/builder.py | 132 + .../mlx_engine/src/mlx_engine}/cache.py | 8 +- .../mlx_engine/src/mlx_engine}/constants.py | 0 .../src/mlx_engine}/dsml_encoding.py | 2 +- .../src/mlx_engine}/generator/__init__.py | 0 .../mlx_engine}/generator/batch_generate.py | 12 +- .../src/mlx_engine}/generator/generate.py | 12 +- python/mlx_engine/src/mlx_engine/py.typed | 0 .../mlx_engine}/tests/test_batch_generate.py | 12 +- .../mlx_engine/src/mlx_engine/types.py | 3 +- .../mlx_engine/src/mlx_engine}/utils_mlx.py | 13 +- python/mlx_engine/uv.lock | 123 - python/parts.nix | 50 +- python/vllm_engine/.python-version | 1 - python/vllm_engine/pyproject.toml | 5 +- python/vllm_engine/src/vllm_engine/builder.py | 84 + .../src/vllm_engine/growable_cache.py | 4 +- .../src/vllm_engine/prompt_format.py | 9 +- python/vllm_engine/src/vllm_engine/py.typed | 0 .../src/vllm_engine/vllm_generator.py | 50 +- python/vllm_engine/uv.lock | 2348 ----------------- src/exo/api/main.py | 17 +- src/exo/api/types/__init__.py | 8 - src/exo/api/types/api.py | 187 +- src/exo/api/types/ollama_api.py | 2 +- src/exo/download/coordinator.py | 8 +- src/exo/download/impl_shard_downloader.py | 6 +- src/exo/download/shard_downloader.py | 5 +- src/exo/download/tests/test_re_download.py | 6 +- src/exo/master/placement.py | 3 +- src/exo/master/tests/test_master.py | 2 +- src/exo/master/tests/test_placement.py | 4 +- src/exo/master/tests/test_placement_utils.py | 4 +- src/exo/shared/tests/conftest.py | 3 +- src/exo/shared/tracing.py | 2 +- src/exo/shared/types/commands.py | 2 +- src/exo/shared/types/profiling.py | 4 +- .../worker/engines/image/distributed_model.py | 6 +- src/exo/worker/engines/image/generate.py | 4 +- src/exo/worker/main.py | 5 +- src/exo/worker/runner/bootstrap.py | 29 +- src/exo/worker/runner/image_models/runner.py | 6 +- .../runner/llm_inference/batch_generator.py | 59 +- .../llm_inference/model_output_parsers.py | 10 +- src/exo/worker/runner/llm_inference/runner.py | 279 +- .../unittests/test_runner/test_dsml_e2e.py | 2 +- uv.lock | 174 +- 328 files changed, 941 insertions(+), 3347 deletions(-) delete mode 100644 .mlx_typings/mlx/nn/layers/__init__.pyi rename {.mlx_typings => .typings}/.gitkeep (100%) rename {.mlx_typings => .typings}/mflux/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/callbacks/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/callbacks/callback.pyi (99%) rename {.mlx_typings => .typings}/mflux/callbacks/callback_registry.pyi (99%) rename {.mlx_typings => .typings}/mflux/callbacks/generation_context.pyi (99%) rename {.mlx_typings => .typings}/mflux/cli/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/cli/defaults/defaults.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/cli/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/config/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/config/config.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/config/model_config.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/latent_creator/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/latent_creator/latent_creator.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/lora/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/lora/layer/fused_linear_lora_layer.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/lora/layer/linear_lora_layer.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/lora/mapping/lora_loader.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/lora/mapping/lora_mapping.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/lora/mapping/lora_saver.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/lora/mapping/lora_transforms.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/resolution/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/resolution/actions.pyi (98%) rename {.mlx_typings => .typings}/mflux/models/common/resolution/config_resolution.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/resolution/lora_resolution.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/resolution/path_resolution.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/resolution/quantization_resolution.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/schedulers/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/schedulers/base_scheduler.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/schedulers/flow_match_euler_discrete_scheduler.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/schedulers/linear_scheduler.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/schedulers/seedvr2_euler_scheduler.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/tokenizer/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/tokenizer/tokenizer.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/tokenizer/tokenizer_loader.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/tokenizer/tokenizer_output.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/vae/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/vae/tiling_config.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/vae/vae_tiler.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/vae/vae_util.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/weights/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/weights/loading/loaded_weights.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/weights/loading/weight_applier.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/weights/loading/weight_definition.pyi (97%) rename {.mlx_typings => .typings}/mflux/models/common/weights/loading/weight_loader.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/weights/mapping/weight_mapper.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/weights/mapping/weight_mapping.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/common/weights/mapping/weight_transforms.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/common/weights/saving/model_saver.pyi (89%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/depth_pro_initializer.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/decoder/feature_fusion_block_2d.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/decoder/multires_conv_decoder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/decoder/residual_block.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/depth_pro.pyi (98%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/depth_pro_model.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/depth_pro_util.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/dino_v2/attention.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/dino_v2/dino_vision_transformer.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/dino_v2/layer_scale.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/dino_v2/mlp.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/dino_v2/patch_embed.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/dino_v2/transformer_block.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/encoder/depth_pro_encoder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/encoder/upsample_block.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/model/head/fov_head.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/weights/depth_pro_weight_definition.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/depth_pro/weights/depth_pro_weight_mapping.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/fibo/latent_creator/fibo_latent_creator.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/fibo/weights/fibo_weight_definition.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/fibo/weights/fibo_weight_mapping.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/fibo_vlm/tokenizer/qwen2vl_image_processor.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/fibo_vlm/tokenizer/qwen2vl_processor.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/fibo_vlm/weights/fibo_vlm_weight_definition.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/fibo_vlm/weights/fibo_vlm_weight_mapping.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/flux/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/cli/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/flux_initializer.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/latent_creator/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/latent_creator/flux_latent_creator.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_embeddings.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_encoder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_encoder_layer.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_mlp.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_sdpa_attention.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/clip_encoder/clip_text_model.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/clip_encoder/encoder_clip.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/prompt_encoder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_attention.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_block.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_dense_relu_dense.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_encoder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_feed_forward.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_layer_norm.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_text_encoder/t5_encoder/t5_self_attention.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/ada_layer_norm_continuous.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/ada_layer_norm_zero.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/ada_layer_norm_zero_single.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/common/attention_utils.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/embed_nd.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/feed_forward.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/guidance_embedder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/joint_attention.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/joint_transformer_block.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/single_block_attention.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/single_transformer_block.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/text_embedder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/time_text_embed.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/timestep_embedder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_transformer/transformer.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/common/attention.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/common/resnet_block_2d.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/common/unet_mid_block.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/decoder/conv_in.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/decoder/conv_norm_out.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/decoder/conv_out.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/decoder/decoder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/decoder/up_block_1_or_2.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/decoder/up_block_3.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/decoder/up_block_4.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/decoder/up_sampler.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/encoder/conv_in.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/encoder/conv_norm_out.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/encoder/conv_out.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/encoder/down_block_1.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/encoder/down_block_2.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/encoder/down_block_3.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/encoder/down_block_4.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/encoder/down_sampler.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/encoder/encoder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/flux_vae/vae.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/redux_encoder/redux_encoder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/siglip_vision_transformer/siglip_encoder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/siglip_vision_transformer/siglip_encoder_layer.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/siglip_vision_transformer/siglip_mlp.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/siglip_vision_transformer/siglip_multi_head_attention_pooling_head.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/siglip_vision_transformer/siglip_sdpa_attention.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/siglip_vision_transformer/siglip_vision_embeddings.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/model/siglip_vision_transformer/siglip_vision_transformer.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/variants/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/variants/concept_attention/attention_data.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/flux/variants/concept_attention/joint_attention_concept.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/variants/concept_attention/joint_transformer_block_concept.pyi (98%) rename {.mlx_typings => .typings}/mflux/models/flux/variants/concept_attention/transformer_concept.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/variants/controlnet/transformer_controlnet.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/variants/kontext/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/variants/kontext/flux_kontext.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/flux/variants/kontext/kontext_util.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/flux/variants/txt2img/flux.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/flux/weights/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/weights/flux_lora_mapping.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/flux/weights/flux_weight_definition.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/flux/weights/flux_weight_mapping.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/qwen/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/cli/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/latent_creator/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/latent_creator/qwen_latent_creator.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_attention.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_encoder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_encoder_layer.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_mlp.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_patch_merger.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_prompt_encoder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_rms_norm.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_rope.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_text_encoder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_attention.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_block.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_language_encoder.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_mlp.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_patch_embed.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_rotary_embedding.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_text_encoder/qwen_vision_transformer.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_transformer/qwen_attention.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_transformer/qwen_feed_forward.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_transformer/qwen_rope.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_transformer/qwen_time_text_embed.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_transformer/qwen_timestep_embedding.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_transformer/qwen_timesteps.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_transformer/qwen_transformer.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_transformer/qwen_transformer_block.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_transformer/qwen_transformer_rms_norm.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_vae/qwen_image_attention_block_3d.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_vae/qwen_image_causal_conv_3d.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_vae/qwen_image_decoder_3d.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_vae/qwen_image_down_block_3d.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_vae/qwen_image_encoder_3d.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_vae/qwen_image_mid_block_3d.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_vae/qwen_image_res_block_3d.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_vae/qwen_image_resample_3d.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_vae/qwen_image_rms_norm.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_vae/qwen_image_up_block_3d.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/model/qwen_vae/qwen_vae.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/qwen_initializer.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/tokenizer/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/tokenizer/qwen_image_processor.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/qwen/tokenizer/qwen_vision_language_processor.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/qwen/tokenizer/qwen_vision_language_tokenizer.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/qwen/variants/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/variants/edit/qwen_edit_util.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/variants/edit/qwen_image_edit.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/qwen/variants/txt2img/qwen_image.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/qwen/weights/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/qwen/weights/qwen_lora_mapping.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/qwen/weights/qwen_weight_definition.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/qwen/weights/qwen_weight_mapping.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/seedvr2/weights/seedvr2_weight_definition.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/seedvr2/weights/seedvr2_weight_mapping.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/z_image/latent_creator/z_image_latent_creator.pyi (100%) rename {.mlx_typings => .typings}/mflux/models/z_image/weights/z_image_weight_definition.pyi (99%) rename {.mlx_typings => .typings}/mflux/models/z_image/weights/z_image_weight_mapping.pyi (100%) rename {.mlx_typings => .typings}/mflux/release/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/utils/__init__.pyi (100%) rename {.mlx_typings => .typings}/mflux/utils/box_values.pyi (98%) rename {.mlx_typings => .typings}/mflux/utils/exceptions.pyi (100%) rename {.mlx_typings => .typings}/mflux/utils/generated_image.pyi (99%) rename {.mlx_typings => .typings}/mflux/utils/image_util.pyi (99%) rename {.mlx_typings => .typings}/mflux/utils/metadata_builder.pyi (100%) rename {.mlx_typings => .typings}/mflux/utils/version_util.pyi (100%) rename src/exo/worker/engines/mlx/__init__.py => .typings/mlx/__init__.pyi (100%) rename {.mlx_typings => .typings}/mlx/core/__init__.pyi (100%) rename {.mlx_typings => .typings}/mlx/core/cuda/__init__.pyi (100%) rename {.mlx_typings => .typings}/mlx/core/distributed/__init__.pyi (100%) rename {.mlx_typings => .typings}/mlx/core/metal/__init__.pyi (100%) rename {.mlx_typings => .typings}/mlx/core/random/__init__.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/__init__.pyi (72%) rename {.mlx_typings => .typings}/mlx/nn/init.pyi (100%) create mode 100644 .typings/mlx/nn/layers/__init__.pyi rename {.mlx_typings => .typings}/mlx/nn/layers/activations.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/base.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/containers.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/convolution.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/convolution_transpose.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/distributed.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/dropout.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/embedding.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/linear.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/normalization.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/pooling.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/positional_encoding.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/quantized.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/recurrent.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/transformer.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/layers/upsample.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/losses.pyi (100%) rename {.mlx_typings => .typings}/mlx/nn/utils.pyi (100%) rename {.mlx_typings => .typings}/mlx/utils.pyi (98%) rename {.mlx_typings => .typings}/mlx_lm/__init__.pyi (100%) rename {.mlx_typings => .typings}/mlx_lm/convert.pyi (100%) rename {.mlx_typings => .typings}/mlx_lm/generate.pyi (100%) rename {.mlx_typings => .typings}/mlx_lm/models/__init__.pyi (100%) rename {.mlx_typings => .typings}/mlx_lm/models/base.pyi (100%) rename {.mlx_typings => .typings}/mlx_lm/models/bitlinear_layers.pyi (100%) rename {.mlx_typings => .typings}/mlx_lm/models/cache.pyi (99%) rename {.mlx_typings => .typings}/mlx_lm/models/deepseek_v3.pyi (100%) rename {.mlx_typings => .typings}/mlx_lm/models/glm4_moe.pyi (100%) rename {.mlx_typings => .typings}/mlx_lm/models/glm_moe_dsa.pyi (100%) rename {.mlx_typings => .typings}/mlx_lm/models/nemotron_h.pyi (100%) rename {.mlx_typings => .typings}/mlx_lm/models/qwen3_5.pyi (97%) rename {.mlx_typings => .typings}/mlx_lm/models/qwen3_5_moe.pyi (61%) rename {.mlx_typings => .typings}/mlx_lm/models/qwen3_next.pyi (100%) rename {.mlx_typings => .typings}/mlx_lm/models/step3p5.pyi (100%) rename {.mlx_typings => .typings}/mlx_lm/models/switch_layers.pyi (100%) rename {.mlx_typings => .typings}/mlx_lm/sample_utils.pyi (100%) rename {.mlx_typings => .typings}/mlx_lm/tokenizer_utils.pyi (99%) rename {.mlx_typings => .typings}/mlx_lm/utils.pyi (100%) create mode 100644 python/exo_core/src/exo_core/types/image_generation.py rename {src/exo => python/exo_core/src/exo_core}/utils/channels.py (100%) rename {src/exo/worker/runner/llm_inference => python/exo_core/src/exo_core/utils}/tool_parsers.py (96%) rename {src/exo/worker/engines/mlx => python/mlx_engine/src/mlx_engine}/auto_parallel.py (99%) create mode 100644 python/mlx_engine/src/mlx_engine/builder.py rename {src/exo/worker/engines/mlx => python/mlx_engine/src/mlx_engine}/cache.py (98%) rename {src/exo/worker/engines/mlx => python/mlx_engine/src/mlx_engine}/constants.py (100%) rename {src/exo/worker/engines/mlx => python/mlx_engine/src/mlx_engine}/dsml_encoding.py (97%) rename {src/exo/worker/engines/mlx => python/mlx_engine/src/mlx_engine}/generator/__init__.py (100%) rename {src/exo/worker/engines/mlx => python/mlx_engine/src/mlx_engine}/generator/batch_generate.py (97%) rename {src/exo/worker/engines/mlx => python/mlx_engine/src/mlx_engine}/generator/generate.py (98%) create mode 100644 python/mlx_engine/src/mlx_engine/py.typed rename {src/exo/worker/engines/mlx => python/mlx_engine/src/mlx_engine}/tests/test_batch_generate.py (97%) rename src/exo/shared/types/mlx.py => python/mlx_engine/src/mlx_engine/types.py (93%) rename {src/exo/worker/engines/mlx => python/mlx_engine/src/mlx_engine}/utils_mlx.py (98%) delete mode 100644 python/mlx_engine/uv.lock delete mode 100644 python/vllm_engine/.python-version create mode 100644 python/vllm_engine/src/vllm_engine/builder.py create mode 100644 python/vllm_engine/src/vllm_engine/py.typed delete mode 100644 python/vllm_engine/uv.lock diff --git a/.mlx_typings/mlx/nn/layers/__init__.pyi b/.mlx_typings/mlx/nn/layers/__init__.pyi deleted file mode 100644 index f22856cd..00000000 --- a/.mlx_typings/mlx/nn/layers/__init__.pyi +++ /dev/null @@ -1,20 +0,0 @@ -""" -This type stub file was generated by pyright. -""" - -from activations import * -from base import * -from containers import * -from convolution import * -from convolution_transpose import * -from distributed import * -from dropout import * -from embedding import * -from linear import * -from normalization import * -from pooling import * -from positional_encoding import * -from quantized import * -from recurrent import * -from transformer import * -from upsample import * 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 99% rename from .mlx_typings/mflux/callbacks/callback.pyi rename to .typings/mflux/callbacks/callback.pyi index fbe5d3e9..9362ba50 100644 --- a/.mlx_typings/mflux/callbacks/callback.pyi +++ b/.typings/mflux/callbacks/callback.pyi @@ -2,10 +2,11 @@ This type stub file was generated by pyright. """ +from typing import Protocol + import mlx.core as mx import PIL.Image import tqdm -from typing import Protocol from mflux.models.common.config.config import Config class BeforeLoopCallback(Protocol): diff --git a/.mlx_typings/mflux/callbacks/callback_registry.pyi b/.typings/mflux/callbacks/callback_registry.pyi similarity index 99% rename from .mlx_typings/mflux/callbacks/callback_registry.pyi rename to .typings/mflux/callbacks/callback_registry.pyi index 03761b4e..04e30f77 100644 --- a/.mlx_typings/mflux/callbacks/callback_registry.pyi +++ b/.typings/mflux/callbacks/callback_registry.pyi @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import TYPE_CHECKING + from mflux.callbacks.callback import ( AfterLoopCallback, BeforeLoopCallback, diff --git a/.mlx_typings/mflux/callbacks/generation_context.pyi b/.typings/mflux/callbacks/generation_context.pyi similarity index 99% rename from .mlx_typings/mflux/callbacks/generation_context.pyi rename to .typings/mflux/callbacks/generation_context.pyi index 9c24a7df..a2e55be9 100644 --- a/.mlx_typings/mflux/callbacks/generation_context.pyi +++ b/.typings/mflux/callbacks/generation_context.pyi @@ -2,10 +2,11 @@ This type stub file was generated by pyright. """ +from typing import TYPE_CHECKING + import mlx.core as mx import PIL.Image import tqdm -from typing import TYPE_CHECKING from mflux.callbacks.callback_registry import CallbackRegistry from mflux.models.common.config.config import Config 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 99% rename from .mlx_typings/mflux/models/common/config/config.pyi rename to .typings/mflux/models/common/config/config.pyi index 1d4ca8f7..23db4762 100644 --- a/.mlx_typings/mflux/models/common/config/config.pyi +++ b/.typings/mflux/models/common/config/config.pyi @@ -2,11 +2,12 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from pathlib import Path from typing import Any -from tqdm import tqdm + +import mlx.core as mx from mflux.models.common.config.model_config import ModelConfig +from tqdm import tqdm logger = ... diff --git a/.mlx_typings/mflux/models/common/config/model_config.pyi b/.typings/mflux/models/common/config/model_config.pyi similarity index 99% rename from .mlx_typings/mflux/models/common/config/model_config.pyi rename to .typings/mflux/models/common/config/model_config.pyi index a8b6257d..4d2aab54 100644 --- a/.mlx_typings/mflux/models/common/config/model_config.pyi +++ b/.typings/mflux/models/common/config/model_config.pyi @@ -2,10 +2,11 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from functools import lru_cache from typing import Literal +import mlx.core as mx + class ModelConfig: precision: mx.Dtype = ... def __init__( 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 99% rename from .mlx_typings/mflux/models/common/latent_creator/latent_creator.pyi rename to .typings/mflux/models/common/latent_creator/latent_creator.pyi index 46df9a5b..b0d3ef52 100644 --- a/.mlx_typings/mflux/models/common/latent_creator/latent_creator.pyi +++ b/.typings/mflux/models/common/latent_creator/latent_creator.pyi @@ -2,10 +2,10 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from pathlib import Path from typing import TYPE_CHECKING, TypeAlias -from mlx import nn + +import mlx.core as mx from mflux.models.common.vae.tiling_config import TilingConfig from mflux.models.fibo.latent_creator.fibo_latent_creator import FiboLatentCreator from mflux.models.flux.latent_creator.flux_latent_creator import FluxLatentCreator @@ -13,6 +13,7 @@ from mflux.models.qwen.latent_creator.qwen_latent_creator import QwenLatentCreat from mflux.models.z_image.latent_creator.z_image_latent_creator import ( ZImageLatentCreator, ) +from mlx import nn if TYPE_CHECKING: LatentCreatorType: TypeAlias = type[ 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 index ff0c6e36..3eae27e7 100644 --- 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 @@ -2,8 +2,8 @@ This type stub file was generated by pyright. """ -from mlx import nn from mflux.models.common.lora.layer.linear_lora_layer import LoRALinear +from mlx import nn class FusedLoRALinear(nn.Module): def __init__( 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 99% rename from .mlx_typings/mflux/models/common/lora/mapping/lora_loader.pyi rename to .typings/mflux/models/common/lora/mapping/lora_loader.pyi index 5f4c94eb..51b6aa59 100644 --- a/.mlx_typings/mflux/models/common/lora/mapping/lora_loader.pyi +++ b/.typings/mflux/models/common/lora/mapping/lora_loader.pyi @@ -2,10 +2,11 @@ This type stub file was generated by pyright. """ -import mlx.core as mx -import mlx.nn as nn from collections.abc import Callable from dataclasses import dataclass + +import mlx.core as mx +import mlx.nn as nn from mflux.models.common.lora.mapping.lora_mapping import LoRATarget @dataclass 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 99% rename from .mlx_typings/mflux/models/common/lora/mapping/lora_mapping.pyi rename to .typings/mflux/models/common/lora/mapping/lora_mapping.pyi index 3c60e8cb..8708cfb8 100644 --- a/.mlx_typings/mflux/models/common/lora/mapping/lora_mapping.pyi +++ b/.typings/mflux/models/common/lora/mapping/lora_mapping.pyi @@ -2,11 +2,12 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from collections.abc import Callable from dataclasses import dataclass from typing import List, Protocol +import mlx.core as mx + @dataclass class LoRATarget: model_path: str 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 98% rename from .mlx_typings/mflux/models/common/resolution/actions.pyi rename to .typings/mflux/models/common/resolution/actions.pyi index 8966c93e..6eecb500 100644 --- a/.mlx_typings/mflux/models/common/resolution/actions.pyi +++ b/.typings/mflux/models/common/resolution/actions.pyi @@ -36,4 +36,3 @@ class Rule(NamedTuple): name: str check: str action: QuantizationAction | PathAction | LoraAction | ConfigAction - ... diff --git a/.mlx_typings/mflux/models/common/resolution/config_resolution.pyi b/.typings/mflux/models/common/resolution/config_resolution.pyi similarity index 99% rename from .mlx_typings/mflux/models/common/resolution/config_resolution.pyi rename to .typings/mflux/models/common/resolution/config_resolution.pyi index 8451963b..fcb04bff 100644 --- a/.mlx_typings/mflux/models/common/resolution/config_resolution.pyi +++ b/.typings/mflux/models/common/resolution/config_resolution.pyi @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import TYPE_CHECKING + from mflux.models.common.config.model_config import ModelConfig if TYPE_CHECKING: ... 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 99% rename from .mlx_typings/mflux/models/common/schedulers/base_scheduler.pyi rename to .typings/mflux/models/common/schedulers/base_scheduler.pyi index 2c310432..c3318f15 100644 --- a/.mlx_typings/mflux/models/common/schedulers/base_scheduler.pyi +++ b/.typings/mflux/models/common/schedulers/base_scheduler.pyi @@ -2,9 +2,10 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from abc import ABC, abstractmethod +import mlx.core as mx + class BaseScheduler(ABC): @property @abstractmethod 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 99% 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 index fd9109ea..d791a9ee 100644 --- 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 @@ -2,8 +2,9 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from typing import TYPE_CHECKING + +import mlx.core as mx from mflux.models.common.config.config import Config from mflux.models.common.schedulers.base_scheduler import BaseScheduler diff --git a/.mlx_typings/mflux/models/common/schedulers/linear_scheduler.pyi b/.typings/mflux/models/common/schedulers/linear_scheduler.pyi similarity index 99% rename from .mlx_typings/mflux/models/common/schedulers/linear_scheduler.pyi rename to .typings/mflux/models/common/schedulers/linear_scheduler.pyi index ca6ef432..7b4486fe 100644 --- a/.mlx_typings/mflux/models/common/schedulers/linear_scheduler.pyi +++ b/.typings/mflux/models/common/schedulers/linear_scheduler.pyi @@ -2,8 +2,9 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from typing import TYPE_CHECKING + +import mlx.core as mx from mflux.models.common.config.config import Config from mflux.models.common.schedulers.base_scheduler import BaseScheduler 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 99% rename from .mlx_typings/mflux/models/common/schedulers/seedvr2_euler_scheduler.pyi rename to .typings/mflux/models/common/schedulers/seedvr2_euler_scheduler.pyi index fc3786e3..d066e339 100644 --- a/.mlx_typings/mflux/models/common/schedulers/seedvr2_euler_scheduler.pyi +++ b/.typings/mflux/models/common/schedulers/seedvr2_euler_scheduler.pyi @@ -2,8 +2,9 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from typing import TYPE_CHECKING + +import mlx.core as mx from mflux.models.common.config.config import Config from mflux.models.common.schedulers.base_scheduler import BaseScheduler 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 99% rename from .mlx_typings/mflux/models/common/tokenizer/tokenizer.pyi rename to .typings/mflux/models/common/tokenizer/tokenizer.pyi index 34fb9648..21ea6180 100644 --- a/.mlx_typings/mflux/models/common/tokenizer/tokenizer.pyi +++ b/.typings/mflux/models/common/tokenizer/tokenizer.pyi @@ -4,9 +4,10 @@ This type stub file was generated by pyright. from abc import ABC, abstractmethod from typing import Protocol, runtime_checkable + +from mflux.models.common.tokenizer.tokenizer_output import TokenizerOutput from PIL import Image from transformers import PreTrainedTokenizer -from mflux.models.common.tokenizer.tokenizer_output import TokenizerOutput """ This type stub file was generated by pyright. diff --git a/.mlx_typings/mflux/models/common/tokenizer/tokenizer_loader.pyi b/.typings/mflux/models/common/tokenizer/tokenizer_loader.pyi similarity index 99% rename from .mlx_typings/mflux/models/common/tokenizer/tokenizer_loader.pyi rename to .typings/mflux/models/common/tokenizer/tokenizer_loader.pyi index f73166e5..2459e8f5 100644 --- a/.mlx_typings/mflux/models/common/tokenizer/tokenizer_loader.pyi +++ b/.typings/mflux/models/common/tokenizer/tokenizer_loader.pyi @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import TYPE_CHECKING + from mflux.models.common.tokenizer.tokenizer import BaseTokenizer from mflux.models.common.weights.loading.weight_definition import TokenizerDefinition diff --git a/.mlx_typings/mflux/models/common/tokenizer/tokenizer_output.pyi b/.typings/mflux/models/common/tokenizer/tokenizer_output.pyi similarity index 99% rename from .mlx_typings/mflux/models/common/tokenizer/tokenizer_output.pyi rename to .typings/mflux/models/common/tokenizer/tokenizer_output.pyi index 50f7d446..928c862b 100644 --- a/.mlx_typings/mflux/models/common/tokenizer/tokenizer_output.pyi +++ b/.typings/mflux/models/common/tokenizer/tokenizer_output.pyi @@ -2,9 +2,10 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from dataclasses import dataclass +import mlx.core as mx + """ This type stub file was generated by pyright. """ 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 99% rename from .mlx_typings/mflux/models/common/vae/vae_tiler.pyi rename to .typings/mflux/models/common/vae/vae_tiler.pyi index 712a0462..a5fd350c 100644 --- a/.mlx_typings/mflux/models/common/vae/vae_tiler.pyi +++ b/.typings/mflux/models/common/vae/vae_tiler.pyi @@ -2,9 +2,10 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from typing import Callable +import mlx.core as mx + class VAETiler: @staticmethod def encode_image_tiled( 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 index 3e1645d5..f459a0da 100644 --- a/.mlx_typings/mflux/models/common/vae/vae_util.pyi +++ b/.typings/mflux/models/common/vae/vae_util.pyi @@ -3,8 +3,8 @@ This type stub file was generated by pyright. """ import mlx.core as mx -from mlx import nn from mflux.models.common.vae.tiling_config import TilingConfig +from mlx import nn class VAEUtil: @staticmethod 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 99% rename from .mlx_typings/mflux/models/common/weights/loading/weight_applier.pyi rename to .typings/mflux/models/common/weights/loading/weight_applier.pyi index 15f48b1e..89b3dedf 100644 --- a/.mlx_typings/mflux/models/common/weights/loading/weight_applier.pyi +++ b/.typings/mflux/models/common/weights/loading/weight_applier.pyi @@ -2,8 +2,9 @@ This type stub file was generated by pyright. """ -import mlx.nn as nn from typing import TYPE_CHECKING + +import mlx.nn as nn from mflux.models.common.weights.loading.loaded_weights import LoadedWeights from mflux.models.common.weights.loading.weight_definition import ( ComponentDefinition, 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 97% rename from .mlx_typings/mflux/models/common/weights/loading/weight_definition.pyi rename to .typings/mflux/models/common/weights/loading/weight_definition.pyi index cb61c8c3..136a1e1e 100644 --- a/.mlx_typings/mflux/models/common/weights/loading/weight_definition.pyi +++ b/.typings/mflux/models/common/weights/loading/weight_definition.pyi @@ -2,11 +2,12 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from dataclasses import dataclass -from typing import Callable, List, TYPE_CHECKING, TypeAlias -from mflux.models.common.weights.mapping.weight_mapping import WeightTarget +from typing import TYPE_CHECKING, Callable, List, TypeAlias + +import mlx.core as mx from mflux.models.common.tokenizer.tokenizer import BaseTokenizer +from mflux.models.common.weights.mapping.weight_mapping import WeightTarget from mflux.models.depth_pro.weights.depth_pro_weight_definition import ( DepthProWeightDefinition, ) 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 99% rename from .mlx_typings/mflux/models/common/weights/loading/weight_loader.pyi rename to .typings/mflux/models/common/weights/loading/weight_loader.pyi index 6e1f1f03..741740c7 100644 --- a/.mlx_typings/mflux/models/common/weights/loading/weight_loader.pyi +++ b/.typings/mflux/models/common/weights/loading/weight_loader.pyi @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import TYPE_CHECKING + from mflux.models.common.weights.loading.loaded_weights import LoadedWeights from mflux.models.common.weights.loading.weight_definition import ( ComponentDefinition, 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 99% rename from .mlx_typings/mflux/models/common/weights/mapping/weight_mapper.pyi rename to .typings/mflux/models/common/weights/mapping/weight_mapper.pyi index 445377ec..01b97c5f 100644 --- a/.mlx_typings/mflux/models/common/weights/mapping/weight_mapper.pyi +++ b/.typings/mflux/models/common/weights/mapping/weight_mapper.pyi @@ -2,8 +2,9 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from typing import Dict, List, Optional + +import mlx.core as mx from mflux.models.common.weights.mapping.weight_mapping import WeightTarget class WeightMapper: 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 99% rename from .mlx_typings/mflux/models/common/weights/mapping/weight_mapping.pyi rename to .typings/mflux/models/common/weights/mapping/weight_mapping.pyi index b0b64dcf..c7c59946 100644 --- a/.mlx_typings/mflux/models/common/weights/mapping/weight_mapping.pyi +++ b/.typings/mflux/models/common/weights/mapping/weight_mapping.pyi @@ -2,10 +2,11 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from dataclasses import dataclass from typing import Callable, List, Optional, Protocol +import mlx.core as mx + """ This type stub file was generated by pyright. """ 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 89% rename from .mlx_typings/mflux/models/common/weights/saving/model_saver.pyi rename to .typings/mflux/models/common/weights/saving/model_saver.pyi index e8563a48..9cafe421 100644 --- a/.mlx_typings/mflux/models/common/weights/saving/model_saver.pyi +++ b/.typings/mflux/models/common/weights/saving/model_saver.pyi @@ -2,7 +2,8 @@ This type stub file was generated by pyright. """ -from typing import Any, TYPE_CHECKING +from typing import TYPE_CHECKING, Any + from mflux.models.common.weights.loading.weight_definition import WeightDefinitionType if TYPE_CHECKING: ... 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 98% rename from .mlx_typings/mflux/models/depth_pro/model/depth_pro.pyi rename to .typings/mflux/models/depth_pro/model/depth_pro.pyi index 7dc0a744..80d954ba 100644 --- a/.mlx_typings/mflux/models/depth_pro/model/depth_pro.pyi +++ b/.typings/mflux/models/depth_pro/model/depth_pro.pyi @@ -2,9 +2,10 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from dataclasses import dataclass from pathlib import Path + +import mlx.core as mx from PIL import Image @dataclass @@ -13,7 +14,6 @@ class DepthResult: depth_array: mx.array min_depth: float max_depth: float - ... class DepthPro: def __init__(self, quantize: int | None = ...) -> None: ... 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 99% 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 index 19817a85..6584623b 100644 --- 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 @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import List + from mflux.models.common.weights.loading.weight_definition import ( ComponentDefinition, TokenizerDefinition, 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 99% 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 index 55308a7a..dca9e044 100644 --- 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 @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import List + from mflux.models.common.weights.mapping.weight_mapping import ( WeightMapping, WeightTarget, 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 99% rename from .mlx_typings/mflux/models/fibo/weights/fibo_weight_definition.pyi rename to .typings/mflux/models/fibo/weights/fibo_weight_definition.pyi index 488dbc20..ac1d6177 100644 --- a/.mlx_typings/mflux/models/fibo/weights/fibo_weight_definition.pyi +++ b/.typings/mflux/models/fibo/weights/fibo_weight_definition.pyi @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import List + from mflux.models.common.weights.loading.weight_definition import ( ComponentDefinition, TokenizerDefinition, 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 99% rename from .mlx_typings/mflux/models/fibo/weights/fibo_weight_mapping.pyi rename to .typings/mflux/models/fibo/weights/fibo_weight_mapping.pyi index 97c29288..3efc2cb7 100644 --- a/.mlx_typings/mflux/models/fibo/weights/fibo_weight_mapping.pyi +++ b/.typings/mflux/models/fibo/weights/fibo_weight_mapping.pyi @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import List + from mflux.models.common.weights.mapping.weight_mapping import ( WeightMapping, WeightTarget, 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 99% rename from .mlx_typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_processor.pyi rename to .typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_processor.pyi index 55527a7e..771b593c 100644 --- a/.mlx_typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_processor.pyi +++ b/.typings/mflux/models/fibo_vlm/tokenizer/qwen2vl_processor.pyi @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import Optional, Union + from PIL import Image class Qwen2VLProcessor: 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 99% 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 index f341c36c..387f422f 100644 --- 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 @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import List + from mflux.models.common.weights.loading.weight_definition import ( ComponentDefinition, TokenizerDefinition, 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 99% 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 index 42c6d770..12c95922 100644 --- 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 @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import List + from mflux.models.common.weights.mapping.weight_mapping import ( WeightMapping, WeightTarget, 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 99% 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 index 5b3747e9..a0771012 100644 --- a/.mlx_typings/mflux/models/flux/model/flux_transformer/joint_attention.pyi +++ b/.typings/mflux/models/flux/model/flux_transformer/joint_attention.pyi @@ -2,9 +2,10 @@ This type stub file was generated by pyright. """ +from typing import Any + import mlx.core as mx from mlx import nn -from typing import Any class JointAttention(nn.Module): num_heads: int 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 99% 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 index 7e2c5129..2d5f20b8 100644 --- 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 @@ -2,13 +2,14 @@ This type stub file was generated by pyright. """ -import mlx.core as mx -from mlx import nn from typing import Any -from mflux.models.flux.model.flux_transformer.joint_attention import JointAttention + +import mlx.core as mx from mflux.models.flux.model.flux_transformer.ada_layer_norm_zero import ( AdaLayerNormZero, ) +from mflux.models.flux.model.flux_transformer.joint_attention import JointAttention +from mlx import nn class JointTransformerBlock(nn.Module): attn: JointAttention 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 99% 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 index 88fe839a..2f541363 100644 --- 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 @@ -2,15 +2,16 @@ This type stub file was generated by pyright. """ -import mlx.core as mx -from mlx import nn from typing import Any -from mflux.models.flux.model.flux_transformer.single_block_attention import ( - SingleBlockAttention, -) + +import mlx.core as mx from mflux.models.flux.model.flux_transformer.ada_layer_norm_zero_single import ( AdaLayerNormZeroSingle, ) +from mflux.models.flux.model.flux_transformer.single_block_attention import ( + SingleBlockAttention, +) +from mlx import nn class SingleTransformerBlock(nn.Module): attn: SingleBlockAttention 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 index 22b4da8b..a257dbd2 100644 --- 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 @@ -3,8 +3,8 @@ This type stub file was generated by pyright. """ import mlx.core as mx -from mlx import nn from mflux.models.common.config import ModelConfig +from mlx import nn class TimeTextEmbed(nn.Module): def __init__(self, model_config: ModelConfig) -> None: ... 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 index 9ae94d1e..4ad077e8 100644 --- a/.mlx_typings/mflux/models/flux/model/flux_transformer/transformer.pyi +++ b/.typings/mflux/models/flux/model/flux_transformer/transformer.pyi @@ -3,17 +3,17 @@ This type stub file was generated by pyright. """ import mlx.core as mx -from mlx import nn from mflux.models.common.config.config import Config from mflux.models.common.config.model_config import ModelConfig from mflux.models.flux.model.flux_transformer.embed_nd import EmbedND -from mflux.models.flux.model.flux_transformer.time_text_embed import TimeTextEmbed from mflux.models.flux.model.flux_transformer.joint_transformer_block import ( JointTransformerBlock, ) from mflux.models.flux.model.flux_transformer.single_transformer_block import ( SingleTransformerBlock, ) +from mflux.models.flux.model.flux_transformer.time_text_embed import TimeTextEmbed +from mlx import nn class Transformer(nn.Module): transformer_blocks: list[JointTransformerBlock] 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 99% 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 index 1b1a2a99..bceb9bde 100644 --- a/.mlx_typings/mflux/models/flux/variants/concept_attention/attention_data.pyi +++ b/.typings/mflux/models/flux/variants/concept_attention/attention_data.pyi @@ -2,11 +2,12 @@ This type stub file was generated by pyright. """ -import mlx.core as mx -import PIL.Image from dataclasses import dataclass from pathlib import Path from typing import List + +import mlx.core as mx +import PIL.Image from mflux.models.flux.variants.concept_attention.joint_transformer_block_concept import ( LayerAttentionData, ) 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 98% 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 index b2283020..b9c54ae9 100644 --- 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 @@ -2,8 +2,9 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from dataclasses import dataclass + +import mlx.core as mx from mlx import nn @dataclass @@ -11,7 +12,6 @@ class LayerAttentionData: layer: int img_attention: mx.array concept_attention: mx.array - ... class JointTransformerBlockConcept(nn.Module): def __init__(self, layer) -> None: ... 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 index 16a424c3..4a64ffee 100644 --- a/.mlx_typings/mflux/models/flux/variants/concept_attention/transformer_concept.pyi +++ b/.typings/mflux/models/flux/variants/concept_attention/transformer_concept.pyi @@ -3,12 +3,12 @@ This type stub file was generated by pyright. """ import mlx.core as mx -from mlx import nn from mflux.models.common.config.config import Config from mflux.models.common.config.model_config import ModelConfig from mflux.models.flux.variants.concept_attention.attention_data import ( TimestepAttentionData, ) +from mlx import nn class TransformerConcept(nn.Module): def __init__( 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 index 76e53bd2..55b63ccc 100644 --- a/.mlx_typings/mflux/models/flux/variants/controlnet/transformer_controlnet.pyi +++ b/.typings/mflux/models/flux/variants/controlnet/transformer_controlnet.pyi @@ -3,9 +3,9 @@ This type stub file was generated by pyright. """ import mlx.core as mx -from mlx import nn from mflux.models.common.config.config import Config from mflux.models.common.config.model_config import ModelConfig +from mlx import nn class TransformerControlnet(nn.Module): def __init__( 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 99% rename from .mlx_typings/mflux/models/flux/variants/kontext/flux_kontext.pyi rename to .typings/mflux/models/flux/variants/kontext/flux_kontext.pyi index 8050e68b..167bc673 100644 --- a/.mlx_typings/mflux/models/flux/variants/kontext/flux_kontext.pyi +++ b/.typings/mflux/models/flux/variants/kontext/flux_kontext.pyi @@ -5,8 +5,6 @@ This type stub file was generated by pyright. from pathlib import Path from typing import Any -from mlx import nn - from mflux.models.common.config.model_config import ModelConfig from mflux.models.flux.model.flux_text_encoder.clip_encoder.clip_encoder import ( CLIPEncoder, @@ -15,6 +13,7 @@ from mflux.models.flux.model.flux_text_encoder.t5_encoder.t5_encoder import T5En from mflux.models.flux.model.flux_transformer.transformer import Transformer from mflux.models.flux.model.flux_vae.vae import VAE from mflux.utils.generated_image import GeneratedImage +from mlx import nn class Flux1Kontext(nn.Module): vae: VAE 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 99% rename from .mlx_typings/mflux/models/flux/variants/kontext/kontext_util.pyi rename to .typings/mflux/models/flux/variants/kontext/kontext_util.pyi index c7588ec6..3b3f1c62 100644 --- a/.mlx_typings/mflux/models/flux/variants/kontext/kontext_util.pyi +++ b/.typings/mflux/models/flux/variants/kontext/kontext_util.pyi @@ -3,7 +3,6 @@ This type stub file was generated by pyright. """ import mlx.core as mx - from mflux.models.flux.model.flux_vae.vae import VAE class KontextUtil: diff --git a/.mlx_typings/mflux/models/flux/variants/txt2img/flux.pyi b/.typings/mflux/models/flux/variants/txt2img/flux.pyi similarity index 99% rename from .mlx_typings/mflux/models/flux/variants/txt2img/flux.pyi rename to .typings/mflux/models/flux/variants/txt2img/flux.pyi index b06232f7..61afa78f 100644 --- a/.mlx_typings/mflux/models/flux/variants/txt2img/flux.pyi +++ b/.typings/mflux/models/flux/variants/txt2img/flux.pyi @@ -3,8 +3,8 @@ This type stub file was generated by pyright. """ from pathlib import Path -from mlx import nn from typing import Any + from mflux.models.common.config.model_config import ModelConfig from mflux.models.flux.model.flux_text_encoder.clip_encoder.clip_encoder import ( CLIPEncoder, @@ -13,6 +13,7 @@ from mflux.models.flux.model.flux_text_encoder.t5_encoder.t5_encoder import T5En from mflux.models.flux.model.flux_transformer.transformer import Transformer from mflux.models.flux.model.flux_vae.vae import VAE from mflux.utils.generated_image import GeneratedImage +from mlx import nn class Flux1(nn.Module): vae: VAE 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 99% rename from .mlx_typings/mflux/models/flux/weights/flux_weight_definition.pyi rename to .typings/mflux/models/flux/weights/flux_weight_definition.pyi index 6d2b8281..98ca2922 100644 --- a/.mlx_typings/mflux/models/flux/weights/flux_weight_definition.pyi +++ b/.typings/mflux/models/flux/weights/flux_weight_definition.pyi @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import List + from mflux.models.common.weights.loading.weight_definition import ( ComponentDefinition, TokenizerDefinition, 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 99% rename from .mlx_typings/mflux/models/flux/weights/flux_weight_mapping.pyi rename to .typings/mflux/models/flux/weights/flux_weight_mapping.pyi index 9de3d8e9..d97356aa 100644 --- a/.mlx_typings/mflux/models/flux/weights/flux_weight_mapping.pyi +++ b/.typings/mflux/models/flux/weights/flux_weight_mapping.pyi @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import List + from mflux.models.common.weights.mapping.weight_mapping import ( WeightMapping, WeightTarget, 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 99% 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 index bd0d51b6..4914ff19 100644 --- a/.mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_attention.pyi +++ b/.typings/mflux/models/qwen/model/qwen_transformer/qwen_attention.pyi @@ -2,9 +2,10 @@ This type stub file was generated by pyright. """ +from typing import Any + import mlx.core as mx from mlx import nn -from typing import Any class QwenAttention(nn.Module): _num_heads: int 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 99% 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 index 80a393ea..8db8699c 100644 --- a/.mlx_typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer.pyi +++ b/.typings/mflux/models/qwen/model/qwen_transformer/qwen_transformer.pyi @@ -2,13 +2,14 @@ This type stub file was generated by pyright. """ -import mlx.core as mx -from mlx import nn from typing import Any + +import mlx.core as mx from mflux.models.common.config.config import Config from mflux.models.qwen.model.qwen_transformer.qwen_transformer_block import ( QwenTransformerBlock, ) +from mlx import nn class QwenTransformer(nn.Module): transformer_blocks: list[QwenTransformerBlock] 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 99% 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 index 539f2f45..a5f8c2f3 100644 --- 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 @@ -2,10 +2,11 @@ This type stub file was generated by pyright. """ -import mlx.core as mx -from mlx import nn from typing import Any + +import mlx.core as mx from mflux.models.qwen.model.qwen_transformer.qwen_attention import QwenAttention +from mlx import nn class QwenTransformerBlock(nn.Module): attn: QwenAttention 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 99% rename from .mlx_typings/mflux/models/qwen/tokenizer/qwen_image_processor.pyi rename to .typings/mflux/models/qwen/tokenizer/qwen_image_processor.pyi index 43380274..b87b6727 100644 --- a/.mlx_typings/mflux/models/qwen/tokenizer/qwen_image_processor.pyi +++ b/.typings/mflux/models/qwen/tokenizer/qwen_image_processor.pyi @@ -2,8 +2,9 @@ This type stub file was generated by pyright. """ -import numpy as np from typing import Optional, Union + +import numpy as np from PIL import Image OPENAI_CLIP_MEAN = ... 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 99% 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 index 05d6d4e3..18a39310 100644 --- a/.mlx_typings/mflux/models/qwen/tokenizer/qwen_vision_language_processor.pyi +++ b/.typings/mflux/models/qwen/tokenizer/qwen_vision_language_processor.pyi @@ -3,8 +3,9 @@ This type stub file was generated by pyright. """ from typing import Optional, Union -from PIL import Image + from mflux.models.qwen.tokenizer.qwen_image_processor import QwenImageProcessor +from PIL import Image class QwenVisionLanguageProcessor: def __init__( 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 99% 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 index 565c574c..3282cd70 100644 --- a/.mlx_typings/mflux/models/qwen/tokenizer/qwen_vision_language_tokenizer.pyi +++ b/.typings/mflux/models/qwen/tokenizer/qwen_vision_language_tokenizer.pyi @@ -2,13 +2,14 @@ This type stub file was generated by pyright. """ +from typing import Union + import mlx.core as mx import numpy as np -from typing import Union -from PIL import Image from mflux.models.qwen.tokenizer.qwen_vision_language_processor import ( QwenVisionLanguageProcessor, ) +from PIL import Image class QwenVisionLanguageTokenizer: def __init__( 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 99% 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 index 068c6a87..15a5a38e 100644 --- a/.mlx_typings/mflux/models/qwen/variants/edit/qwen_image_edit.pyi +++ b/.typings/mflux/models/qwen/variants/edit/qwen_image_edit.pyi @@ -2,16 +2,17 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from pathlib import Path -from mlx import nn from typing import Any + +import mlx.core as mx from mflux.models.common.config import Config from mflux.models.common.config.model_config import ModelConfig from mflux.models.qwen.model.qwen_text_encoder.qwen_text_encoder import QwenTextEncoder from mflux.models.qwen.model.qwen_transformer.qwen_transformer import QwenTransformer from mflux.models.qwen.model.qwen_vae.qwen_vae import QwenVAE from mflux.utils.generated_image import GeneratedImage +from mlx import nn class QwenImageEdit(nn.Module): vae: QwenVAE 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 99% rename from .mlx_typings/mflux/models/qwen/variants/txt2img/qwen_image.pyi rename to .typings/mflux/models/qwen/variants/txt2img/qwen_image.pyi index f0db2eb6..62d567b4 100644 --- a/.mlx_typings/mflux/models/qwen/variants/txt2img/qwen_image.pyi +++ b/.typings/mflux/models/qwen/variants/txt2img/qwen_image.pyi @@ -2,15 +2,16 @@ This type stub file was generated by pyright. """ -import mlx.core as mx from pathlib import Path -from mlx import nn from typing import Any + +import mlx.core as mx from mflux.models.common.config import ModelConfig from mflux.models.qwen.model.qwen_text_encoder.qwen_text_encoder import QwenTextEncoder from mflux.models.qwen.model.qwen_transformer.qwen_transformer import QwenTransformer from mflux.models.qwen.model.qwen_vae.qwen_vae import QwenVAE from mflux.utils.generated_image import GeneratedImage +from mlx import nn class QwenImage(nn.Module): vae: QwenVAE 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 99% rename from .mlx_typings/mflux/models/qwen/weights/qwen_lora_mapping.pyi rename to .typings/mflux/models/qwen/weights/qwen_lora_mapping.pyi index 78d020a8..a96ab744 100644 --- a/.mlx_typings/mflux/models/qwen/weights/qwen_lora_mapping.pyi +++ b/.typings/mflux/models/qwen/weights/qwen_lora_mapping.pyi @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import List + from mflux.models.common.lora.mapping.lora_mapping import LoRAMapping, LoRATarget class QwenLoRAMapping(LoRAMapping): 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 99% rename from .mlx_typings/mflux/models/qwen/weights/qwen_weight_definition.pyi rename to .typings/mflux/models/qwen/weights/qwen_weight_definition.pyi index db749554..5fa02db0 100644 --- a/.mlx_typings/mflux/models/qwen/weights/qwen_weight_definition.pyi +++ b/.typings/mflux/models/qwen/weights/qwen_weight_definition.pyi @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import List + from mflux.models.common.weights.loading.weight_definition import ( ComponentDefinition, TokenizerDefinition, 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 99% rename from .mlx_typings/mflux/models/qwen/weights/qwen_weight_mapping.pyi rename to .typings/mflux/models/qwen/weights/qwen_weight_mapping.pyi index 7a4da7f8..b091c48b 100644 --- a/.mlx_typings/mflux/models/qwen/weights/qwen_weight_mapping.pyi +++ b/.typings/mflux/models/qwen/weights/qwen_weight_mapping.pyi @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import List + from mflux.models.common.weights.mapping.weight_mapping import ( WeightMapping, WeightTarget, 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 99% rename from .mlx_typings/mflux/models/seedvr2/weights/seedvr2_weight_definition.pyi rename to .typings/mflux/models/seedvr2/weights/seedvr2_weight_definition.pyi index 34655cb4..48707570 100644 --- a/.mlx_typings/mflux/models/seedvr2/weights/seedvr2_weight_definition.pyi +++ b/.typings/mflux/models/seedvr2/weights/seedvr2_weight_definition.pyi @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import List + from mflux.models.common.weights.loading.weight_definition import ( ComponentDefinition, TokenizerDefinition, 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 99% rename from .mlx_typings/mflux/models/seedvr2/weights/seedvr2_weight_mapping.pyi rename to .typings/mflux/models/seedvr2/weights/seedvr2_weight_mapping.pyi index 53ad84e5..573b8706 100644 --- a/.mlx_typings/mflux/models/seedvr2/weights/seedvr2_weight_mapping.pyi +++ b/.typings/mflux/models/seedvr2/weights/seedvr2_weight_mapping.pyi @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import List + from mflux.models.common.weights.mapping.weight_mapping import ( WeightMapping, WeightTarget, 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 99% 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 index 9acdaf15..3079384c 100644 --- 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 @@ -3,6 +3,7 @@ This type stub file was generated by pyright. """ from typing import List + from mflux.models.common.weights.loading.weight_definition import ( ComponentDefinition, TokenizerDefinition, 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 98% rename from .mlx_typings/mflux/utils/box_values.pyi rename to .typings/mflux/utils/box_values.pyi index 4db5562f..471516cf 100644 --- a/.mlx_typings/mflux/utils/box_values.pyi +++ b/.typings/mflux/utils/box_values.pyi @@ -10,7 +10,6 @@ class AbsoluteBoxValues: right: int bottom: int left: int - ... class BoxValueError(ValueError): ... 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 99% rename from .mlx_typings/mflux/utils/generated_image.pyi rename to .typings/mflux/utils/generated_image.pyi index d105a0b8..196d4ef9 100644 --- a/.mlx_typings/mflux/utils/generated_image.pyi +++ b/.typings/mflux/utils/generated_image.pyi @@ -2,9 +2,10 @@ This type stub file was generated by pyright. """ +from pathlib import Path + import mlx.core as mx import PIL.Image -from pathlib import Path from mflux.models.common.config import ModelConfig from mflux.models.flux.variants.concept_attention.attention_data import ConceptHeatmap diff --git a/.mlx_typings/mflux/utils/image_util.pyi b/.typings/mflux/utils/image_util.pyi similarity index 99% rename from .mlx_typings/mflux/utils/image_util.pyi rename to .typings/mflux/utils/image_util.pyi index e0da7a08..5c0d454f 100644 --- a/.mlx_typings/mflux/utils/image_util.pyi +++ b/.typings/mflux/utils/image_util.pyi @@ -2,15 +2,16 @@ This type stub file was generated by pyright. """ -import mlx.core as mx -import PIL.Image from pathlib import Path from typing import Any -from PIL._typing import StrOrBytesPath + +import mlx.core as mx +import PIL.Image from mflux.models.common.config.config import Config from mflux.models.flux.variants.concept_attention.attention_data import ConceptHeatmap from mflux.utils.box_values import AbsoluteBoxValues from mflux.utils.generated_image import GeneratedImage +from PIL._typing import StrOrBytesPath log = ... 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/src/exo/worker/engines/mlx/__init__.py b/.typings/mlx/__init__.pyi similarity index 100% rename from src/exo/worker/engines/mlx/__init__.py rename to .typings/mlx/__init__.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 72% rename from .mlx_typings/mlx/nn/__init__.pyi rename to .typings/mlx/nn/__init__.pyi index 4c999379..6cac2639 100644 --- a/.mlx_typings/mlx/nn/__init__.pyi +++ b/.typings/mlx/nn/__init__.pyi @@ -2,8 +2,7 @@ This type stub file was generated by pyright. """ -from layers import * -from utils import * - from . import init as init from . import losses as losses +from .layers import * +from .utils import * 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/.typings/mlx/nn/layers/__init__.pyi b/.typings/mlx/nn/layers/__init__.pyi new file mode 100644 index 00000000..66ff24bd --- /dev/null +++ b/.typings/mlx/nn/layers/__init__.pyi @@ -0,0 +1,20 @@ +""" +This type stub file was generated by pyright. +""" + +from .activations import * +from .base import * +from .containers import * +from .convolution import * +from .convolution_transpose import * +from .distributed import * +from .dropout import * +from .embedding import * +from .linear import * +from .normalization import * +from .pooling import * +from .positional_encoding import * +from .quantized import * +from .recurrent import * +from .transformer import * +from .upsample import * 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 98% rename from .mlx_typings/mlx/utils.pyi rename to .typings/mlx/utils.pyi index ca07eb76..d1abf776 100644 --- a/.mlx_typings/mlx/utils.pyi +++ b/.typings/mlx/utils.pyi @@ -2,7 +2,7 @@ This type stub file was generated by pyright. """ -from typing import Any, Callable, Dict, List, Optional, Tuple, Union +from typing import Any, Callable from mlx.core import MX_ARRAY_TREE 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/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/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 99% rename from .mlx_typings/mlx_lm/models/cache.pyi rename to .typings/mlx_lm/models/cache.pyi index 1a934f40..49a0c4a4 100644 --- a/.mlx_typings/mlx_lm/models/cache.pyi +++ b/.typings/mlx_lm/models/cache.pyi @@ -2,11 +2,11 @@ This type stub file was generated by pyright. """ -from typing import Any, Dict, List, Optional, Protocol, Literal, Self +from typing import Any, Dict, List, Literal, Optional, Protocol, Self +import mlx.core as mx import mlx.nn as nn from mlx.core import array -import mlx.core as mx class Cache(Protocol): keys: mx.array 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/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/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 97% rename from .mlx_typings/mlx_lm/models/qwen3_5.pyi rename to .typings/mlx_lm/models/qwen3_5.pyi index 890450c7..c5c30643 100644 --- a/.mlx_typings/mlx_lm/models/qwen3_5.pyi +++ b/.typings/mlx_lm/models/qwen3_5.pyi @@ -7,13 +7,18 @@ import mlx.nn as nn from .cache import ArraysCache, KVCache from .qwen3_next import ( Qwen3NextAttention as Attention, +) +from .qwen3_next import ( Qwen3NextMLP as MLP, +) +from .qwen3_next import ( Qwen3NextRMSNormGated as RMSNormGated, +) +from .qwen3_next import ( Qwen3NextSparseMoeBlock, ) SparseMoeBlock = Qwen3NextSparseMoeBlock -from .switch_layers import SwitchGLU @dataclass class TextModelArgs: diff --git a/.mlx_typings/mlx_lm/models/qwen3_5_moe.pyi b/.typings/mlx_lm/models/qwen3_5_moe.pyi similarity index 61% rename from .mlx_typings/mlx_lm/models/qwen3_5_moe.pyi rename to .typings/mlx_lm/models/qwen3_5_moe.pyi index 51aae5c9..5519e078 100644 --- a/.mlx_typings/mlx_lm/models/qwen3_5_moe.pyi +++ b/.typings/mlx_lm/models/qwen3_5_moe.pyi @@ -1,11 +1,7 @@ from dataclasses import dataclass -from typing import Any, Optional +from typing import Any -import mlx.core as mx -import mlx.nn as nn - -from .cache import ArraysCache, KVCache -from .qwen3_5 import DecoderLayer, Model as Qwen3_5Model, TextModel +from .qwen3_5 import Model as Qwen3_5Model @dataclass class ModelArgs: 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/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 99% rename from .mlx_typings/mlx_lm/tokenizer_utils.pyi rename to .typings/mlx_lm/tokenizer_utils.pyi index 1326f059..b0356e58 100644 --- a/.mlx_typings/mlx_lm/tokenizer_utils.pyi +++ b/.typings/mlx_lm/tokenizer_utils.pyi @@ -2,7 +2,6 @@ This type stub file was generated by pyright. """ -from functools import partial from pathlib import Path from typing import Any 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/flake.nix b/flake.nix index 5f05d1d1..e74c4787 100644 --- a/flake.nix +++ b/flake.nix @@ -133,9 +133,10 @@ inherit (self'.packages) metal-toolchain; inherit uvLockMlxVersion uvLockMlxRev; }; - default = self'.packages.exo; } - ); + ) // { + default = self'.packages.exo; + }; devShells = { default = with pkgs; mkShell { @@ -148,10 +149,7 @@ # PYTHON self'.packages.editable-venv - self'.packages.python uv - ruff - basedpyright # RUST config.rust.toolchain @@ -176,8 +174,10 @@ env = { UV_NO_SYNC = "1"; - UV_PYTHON = self'.packages.python.interpreter; + UV_PYTHON = "${self'.packages.editable-venv}/bin/python"; UV_PYTHON_DOWNLOADS = "never"; + UV_PROJECT_ENVIRONMENT = self'.packages.editable-venv; + VIRTUAL_ENV = self'.packages.editable-venv; OPENSSL_NO_VENDOR = "1"; }; diff --git a/pyproject.toml b/pyproject.toml index d27ca5a1..11ca9477 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,18 +15,19 @@ dependencies = [ "huggingface-hub>=0.33.4", "psutil>=7.0.0", "loguru>=0.7.3", - "exo_pyo3_bindings", # rust bindings + "exo_pyo3_bindings", # rust bindings "exo_core", "anyio==4.11.0", "mlx; sys_platform == 'darwin'", - "mlx==0.30.6; sys_platform == 'linux'", + "mlx[cpu]; sys_platform == 'linux'", + "mflux==0.16.9", + "pillow>=12.1.1", "mlx-lm", - "tiktoken>=0.12.0", # required for kimi k2 tokenizer + "tiktoken>=0.12.0", # required for kimi k2 tokenizer "hypercorn>=0.18.0", "openai-harmony>=0.0.8", "httpx>=0.28.1", "tomlkit>=0.14.0", - "mflux==0.16.9; sys_platform == 'darwin'", "python-multipart>=0.0.21", "msgspec>=0.19.0", "zstandard>=0.23.0", @@ -45,6 +46,8 @@ dev = [ "pytest-asyncio>=1.0.0", "pytest-env", "ruff>=0.11.13", + "mlx_engine", + "vllm_engine; sys_platform == 'linux'", ] build = ["nanobind"] @@ -67,9 +70,9 @@ members = [ [tool.uv.sources] exo_pyo3_bindings = { workspace = true } -exo_core = { workspace = true } -mlx_engine = { workspace = true } -vllm_engine = { workspace = true } +exo_core = { workspace = true, editable = true } +mlx_engine = { workspace = true, editable = true } +vllm_engine = { workspace = true, editable = true } mlx = { git = "https://github.com/rltakashige/mlx-jaccl-fix-small-recv.git", branch = "address-rdma-gpu-locks", marker = "sys_platform == 'darwin'" } mlx-lm = { git = "https://github.com/rltakashige/mlx-lm", branch = "leo/eval-left-padding-in-batched-rotation" } # Uncomment to use local mlx/mlx-lm development versions: @@ -85,7 +88,13 @@ build-backend = "uv_build" ### [tool.basedpyright] -include = [".venv/lib/mlx", ".venv/lib/mlx_lm", "src", "bench"] +include = [ + "src", + "bench", + "python/vllm_engine/src", + "python/mlx_engine/src", + "python/exo_core/src", +] typeCheckingMode = "strict" failOnWarnings = true @@ -99,29 +108,21 @@ reportUnnecessaryCast = "error" reportUnnecessaryTypeIgnoreComment = "error" pythonVersion = "3.13" -pythonPlatform = "Darwin" +pythonPlatform = "All" -exclude = [ - "**/.venv", - "**/venv", - "**/__pycache__", - "**/exo_scripts", - "**/.direnv", - "**/rust", - "**/.github", - "**/vllm_patches", - "**/engines/vllm", +exclude = ["**/__pycache__"] +stubPath = ".typings" +extraPaths = [ + ".cuda_typings", + "python/exo_core/src", + "python/vllm_engine/src", + "python/mlx_engine/src", +] +executionEnvironments = [ + { root = "src" }, + { root = "python" }, + { root = "bench" }, ] -stubPath = ".mlx_typings" -extraPaths = [".cuda_typings"] - -[[tool.basedpyright.executionEnvironments]] -root = "src/exo/worker/runner/vllm_inference" -extraPaths = ["src", ".cuda_typings"] -reportMissingModuleSource = false - -[[tool.basedpyright.executionEnvironments]] -root = "src" ### # uv configuration @@ -134,8 +135,15 @@ prerelease = "allow" environments = ["sys_platform == 'darwin'", "sys_platform == 'linux'"] conflicts = [[{ package = "exo", extra = "cuda" }, { package = "exo-bench" }]] + [tool.uv.extra-build-dependencies] +mlx-lm = ["setuptools"] xgrammar = ["nanobind"] +rouge-score = ["setuptools"] +sacrebleu = ["setuptools"] +sqlitedict = ["setuptools"] +word2number = ["setuptools"] +vllm = ["setuptools", "setuptools-scm"] ### @@ -144,7 +152,7 @@ xgrammar = ["nanobind"] [tool.ruff] extend-exclude = [ - "*mlx_typings/**", + ".typings/**", "*cuda_typings/**", "rust/exo_pyo3_bindings/**", "bench/vendor/**", diff --git a/python/exo_core/src/exo_core/engine.py b/python/exo_core/src/exo_core/engine.py index cca79965..01c018f1 100644 --- a/python/exo_core/src/exo_core/engine.py +++ b/python/exo_core/src/exo_core/engine.py @@ -5,10 +5,10 @@ from typing import Self from exo_core.types.tasks import TaskId -class Cancelled: ... +class Cancelled: pass -class Finished: ... +class Finished: pass CANCEL_ALL_TASKS = TaskId("CANCEL_TALL_TASKS") diff --git a/python/exo_core/src/exo_core/types/chunks.py b/python/exo_core/src/exo_core/types/chunks.py index dae484ef..3694057a 100644 --- a/python/exo_core/src/exo_core/types/chunks.py +++ b/python/exo_core/src/exo_core/types/chunks.py @@ -1,7 +1,9 @@ from collections.abc import Generator from typing import Any, Literal -from exo.api.types import ( +from exo_core.model_cards import ModelId +from exo_core.models import TaggedModel +from exo_core.types.runner_response import ( FinishReason, GenerationStats, ImageGenerationStats, @@ -9,8 +11,6 @@ from exo.api.types import ( TopLogprobItem, Usage, ) -from exo_core.model_cards import ModelId -from exo_core.models import TaggedModel from .common import CommandId diff --git a/python/exo_core/src/exo_core/types/image_generation.py b/python/exo_core/src/exo_core/types/image_generation.py new file mode 100644 index 00000000..7b8c87ef --- /dev/null +++ b/python/exo_core/src/exo_core/types/image_generation.py @@ -0,0 +1,108 @@ +from collections.abc import Generator +from typing import Annotated, Any, Literal, get_args, override + +from pydantic import BaseModel, Field, field_validator + +ImageSize = Literal[ + "auto", + "512x512", + "768x768", + "1024x768", + "768x1024", + "1024x1024", + "1024x1536", + "1536x1024", +] + + +def normalize_image_size(v: object) -> ImageSize: + """Shared validator for ImageSize fields: maps None → "auto" and rejects invalid values.""" + if v is None: + return "auto" + if v not in get_args(ImageSize): + raise ValueError(f"Invalid size: {v!r}. Must be one of {get_args(ImageSize)}") + return v # pyright: ignore[reportReturnType] + + +# can we tighten these to CamelCaseModels? +class AdvancedImageParams(BaseModel): + seed: Annotated[int, Field(ge=0)] | None = None + num_inference_steps: Annotated[int, Field(ge=1, le=100)] | None = None + guidance: Annotated[float, Field(ge=1.0, le=20.0)] | None = None + negative_prompt: str | None = None + num_sync_steps: Annotated[int, Field(ge=1, le=100)] | None = None + + +class ImageGenerationTaskParams(BaseModel): + prompt: str + background: str | None = None + model: str + moderation: str | None = None + n: int | None = 1 + output_compression: int | None = None + output_format: Literal["png", "jpeg", "webp"] = "png" + partial_images: int | None = 0 + quality: Literal["high", "medium", "low"] | None = "medium" + response_format: Literal["url", "b64_json"] | None = "b64_json" + size: ImageSize = "auto" + stream: bool | None = False + style: str | None = "vivid" + user: str | None = None + advanced_params: AdvancedImageParams | None = None + # Internal flag for benchmark mode - set by API, preserved through serialization + bench: bool = False + + @field_validator("size", mode="before") + @classmethod + def normalize_size(cls, v: object) -> ImageSize: + return normalize_image_size(v) + + +class BenchImageGenerationTaskParams(ImageGenerationTaskParams): + bench: bool = True + + +class ImageEditsTaskParams(BaseModel): + """Internal task params for image-editing requests.""" + + image_data: str = "" # Base64-encoded image (empty when using chunked transfer) + total_input_chunks: int = 0 + prompt: str + model: str + n: int | None = 1 + quality: Literal["high", "medium", "low"] | None = "medium" + output_format: Literal["png", "jpeg", "webp"] = "png" + response_format: Literal["url", "b64_json"] | None = "b64_json" + size: ImageSize = "auto" + image_strength: float | None = 0.7 + stream: bool = False + partial_images: int | None = 0 + advanced_params: AdvancedImageParams | None = None + bench: bool = False + + @field_validator("size", mode="before") + @classmethod + def normalize_size(cls, v: object) -> ImageSize: + return normalize_image_size(v) + + @override + def __repr_args__(self) -> Generator[tuple[str, Any], None, None]: + for name, value in super().__repr_args__(): # pyright: ignore[reportAny] + if name == "image_data": + yield name, f"<{len(self.image_data)} chars>" + elif name is not None: + yield name, value + + +class ImageData(BaseModel): + b64_json: str | None = None + url: str | None = None + revised_prompt: str | None = None + + @override + def __repr_args__(self) -> Generator[tuple[str, Any], None, None]: + for name, value in super().__repr_args__(): # pyright: ignore[reportAny] + if name == "b64_json" and self.b64_json is not None: + yield name, f"<{len(self.b64_json)} chars>" + elif name is not None: + yield name, value diff --git a/python/exo_core/src/exo_core/types/runner_response.py b/python/exo_core/src/exo_core/types/runner_response.py index 4e1f213d..352f1b24 100644 --- a/python/exo_core/src/exo_core/types/runner_response.py +++ b/python/exo_core/src/exo_core/types/runner_response.py @@ -1,15 +1,68 @@ from collections.abc import Generator -from typing import Any, Literal +from typing import Any, Literal, override +from uuid import uuid4 -from exo.api.types import ( - FinishReason, - GenerationStats, - ImageGenerationStats, - ToolCallItem, - TopLogprobItem, - Usage, -) -from exo_core.models import TaggedModel +from pydantic import Field + +from exo_core.models import CamelCaseModel, TaggedModel +from exo_core.utils.memory import Memory + +FinishReason = Literal[ + "stop", "length", "tool_calls", "content_filter", "function_call", "error" +] + + +class ToolCallItem(CamelCaseModel): + id: str = Field(default_factory=lambda: str(uuid4())) + name: str + arguments: str + + +class TopLogprobItem(CamelCaseModel): + token: str + logprob: float + bytes: list[int] | None = None + + +class GenerationStats(CamelCaseModel): + prompt_tps: float + generation_tps: float + prompt_tokens: int + generation_tokens: int + peak_memory_usage: Memory + + +class ImageGenerationStats(CamelCaseModel): + seconds_per_step: float + total_generation_time: float + + num_inference_steps: int + num_images: int + + image_width: int + image_height: int + + peak_memory_usage: Memory + + +class PromptTokensDetails(CamelCaseModel): + cached_tokens: int = 0 + audio_tokens: int = 0 + + +class CompletionTokensDetails(CamelCaseModel): + reasoning_tokens: int = 0 + audio_tokens: int = 0 + accepted_prediction_tokens: int = 0 + rejected_prediction_tokens: int = 0 + + +class Usage(CamelCaseModel): + prompt_tokens: int + completion_tokens: int + total_tokens: int + prompt_tokens_details: PromptTokensDetails + completion_tokens_details: CompletionTokensDetails class BaseRunnerResponse(TaggedModel): @@ -37,6 +90,7 @@ class ImageGenerationResponse(BaseRunnerResponse): stats: ImageGenerationStats | None = None image_index: int = 0 + @override def __repr_args__(self) -> Generator[tuple[str, Any], None, None]: for name, value in super().__repr_args__(): # pyright: ignore[reportAny] if name == "image_data": @@ -52,6 +106,7 @@ class PartialImageResponse(BaseRunnerResponse): total_partials: int image_index: int = 0 + @override def __repr_args__(self) -> Generator[tuple[str, Any], None, None]: for name, value in super().__repr_args__(): # pyright: ignore[reportAny] if name == "image_data": diff --git a/python/exo_core/src/exo_core/types/tasks.py b/python/exo_core/src/exo_core/types/tasks.py index fb5a6e0f..96282027 100644 --- a/python/exo_core/src/exo_core/types/tasks.py +++ b/python/exo_core/src/exo_core/types/tasks.py @@ -2,16 +2,17 @@ from enum import Enum from pydantic import Field -from exo.api.types import ( +from exo_core.models import TaggedModel + +from .common import CommandId, Id +from .image_generation import ( ImageEditsTaskParams, ImageGenerationTaskParams, ) -from exo_core.models import TaggedModel -from exo_core.types.common import CommandId, Id -from exo_core.types.instances import BoundInstance, InstanceId -from exo_core.types.runners import RunnerId -from exo_core.types.shards import ShardMetadata -from exo_core.types.text_generation import TextGenerationTaskParams +from .instances import BoundInstance, InstanceId +from .runners import RunnerId +from .shards import ShardMetadata +from .text_generation import TextGenerationTaskParams class TaskId(Id): diff --git a/src/exo/utils/channels.py b/python/exo_core/src/exo_core/utils/channels.py similarity index 100% rename from src/exo/utils/channels.py rename to python/exo_core/src/exo_core/utils/channels.py diff --git a/src/exo/worker/runner/llm_inference/tool_parsers.py b/python/exo_core/src/exo_core/utils/tool_parsers.py similarity index 96% rename from src/exo/worker/runner/llm_inference/tool_parsers.py rename to python/exo_core/src/exo_core/utils/tool_parsers.py index 26140d9c..aa134cb4 100644 --- a/src/exo/worker/runner/llm_inference/tool_parsers.py +++ b/python/exo_core/src/exo_core/utils/tool_parsers.py @@ -1,9 +1,9 @@ import json import math from dataclasses import dataclass -from typing import Any, Callable +from typing import Any, Callable, Final -from exo.api.types import ToolCallItem +from exo_core.types.runner_response import ToolCallItem @dataclass @@ -208,7 +208,6 @@ def make_mlx_parser( ) -# TODO / example code: def _parse_json_calls(text: str) -> list[ToolCallItem] | None: try: text = text.removeprefix("") @@ -229,16 +228,15 @@ def _flatten(p: dict[str, Any]) -> dict[str, str]: } -def make_json_parser() -> ToolParser: - return ToolParser( - start_parsing="", - end_parsing="", - _inner_parser=_parse_json_calls, - ) +json_parser: Final[ToolParser] = ToolParser( + start_parsing="", + end_parsing="", + _inner_parser=_parse_json_calls, +) def infer_tool_parser(chat_template: str) -> ToolParser | None: """Attempt to auto-infer a tool parser from the chat template.""" if "" in chat_template and "tool_call.name" in chat_template: - return make_json_parser() + return json_parser return None diff --git a/python/mlx_engine/pyproject.toml b/python/mlx_engine/pyproject.toml index 9604c277..51d4aa94 100644 --- a/python/mlx_engine/pyproject.toml +++ b/python/mlx_engine/pyproject.toml @@ -4,11 +4,27 @@ version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.13" -dependencies = ["exo_core"] +dependencies = ["exo_core", "psutil >= 7.0.0", "loguru >= 0.7.3"] [build-system] requires = ["uv_build>=0.8.9,<0.9.0"] build-backend = "uv_build" [tool.uv.sources] -exo_core = { workspace = true } +exo_core = { workspace = true, editable = true } + +[tool.basedpyright] +typeCheckingMode = "strict" +failOnWarnings = true + +reportAny = "error" +reportUnknownVariableType = "error" +reportUnknownParameterType = "error" +reportMissingParameterType = "error" +reportMissingTypeStubs = "error" +reportInvalidCast = "error" +reportUnnecessaryCast = "error" +reportUnnecessaryTypeIgnoreComment = "error" + +pythonVersion = "3.13" +stubPath = "../../.typings" diff --git a/src/exo/worker/engines/mlx/auto_parallel.py b/python/mlx_engine/src/mlx_engine/auto_parallel.py similarity index 99% rename from src/exo/worker/engines/mlx/auto_parallel.py rename to python/mlx_engine/src/mlx_engine/auto_parallel.py index 24c47016..6278afa6 100644 --- a/src/exo/worker/engines/mlx/auto_parallel.py +++ b/python/mlx_engine/src/mlx_engine/auto_parallel.py @@ -9,6 +9,7 @@ from typing import TYPE_CHECKING, Any, Literal, Protocol, cast import mlx.core as mx import mlx.nn as nn from exo_core.types.shards import PipelineShardMetadata +from loguru import logger from mlx.nn.layers.distributed import ( shard_inplace, shard_linear, @@ -58,8 +59,6 @@ from mlx_lm.models.step3p5 import Model as Step35Model from mlx_lm.models.step3p5 import Step3p5MLP as Step35MLP from mlx_lm.models.step3p5 import Step3p5Model as Step35InnerModel -from exo.shared.logging import logger - if TYPE_CHECKING: from mlx_lm.models.cache import Cache diff --git a/python/mlx_engine/src/mlx_engine/builder.py b/python/mlx_engine/src/mlx_engine/builder.py new file mode 100644 index 00000000..47b4063a --- /dev/null +++ b/python/mlx_engine/src/mlx_engine/builder.py @@ -0,0 +1,132 @@ +from dataclasses import dataclass +from typing import Self, Callable +from exo_core.engine import EngineBuilder, Engine +from exo_core.types.common import ModelId +from exo_core.types.instances import BoundInstance +from exo_core.types.tasks import TextGeneration +from exo_core.types.runner_response import GenerationResponse +from mlx_engine.utils_mlx import initialize_mlx, load_mlx_items +from mlx_engine.types import Model +from mlx_engine.generator.generate import ( + mlx_generate, + warmup_inference, +) +from exo_core.utils.tool_parsers import make_mlx_parser + + +@dataclass +class MlxBuilder(EngineBuilder[BoundInstance, TextGeneration, GenerationResponse]): + import mlx.core as mx + from mlx_lm.tokenizer_utils import TokenizerWrapper + + model_id: ModelId + bound_instance: BoundInstance + event_sender: MpSender[Event] + cancel_receiver: MpReceiver[TaskId] + inference_model: Model | None = None + tokenizer: TokenizerWrapper | None = None + group: mx.distributed.Group | None = None + + @classmethod + def create( + cls, + bound_instance: BoundInstance, + event_sender: MpSender[Event], + cancel_receiver: MpReceiver[TaskId], + ) -> Self: + return cls( + bound_instance.instance.shard_assignments.model_id, + bound_instance, + event_sender, + cancel_receiver, + ) + + def connect(self) -> None: + self.group = initialize_mlx(self.bound_instance) + + def load( + self, + on_timeout: Callable[[], None], + on_layer_loaded: Callable[[int, int], None], + ) -> None: + self.inference_model, self.tokenizer = load_mlx_items( + self.bound_instance, + self.group, + on_timeout=on_timeout, + on_layer_loaded=on_layer_loaded, + ) + + def build(self) -> SequentialGenerator | BatchGenerator: + assert self.inference_model + assert self.tokenizer + + tool_parser = None + logger.info( + f"model has_tool_calling={self.tokenizer.has_tool_calling} using tokens {self.tokenizer.tool_call_start}, {self.tokenizer.tool_call_end}" + ) + if ( + self.tokenizer.tool_call_start + and self.tokenizer.tool_call_end + and self.tokenizer.tool_parser # type: ignore + ): + tool_parser = make_mlx_parser( + self.tokenizer.tool_call_start, + self.tokenizer.tool_call_end, + self.tokenizer.tool_parser, # type: ignore + ) + + kv_prefix_cache = KVPrefixCache(self.group) + + from functools import partial + + device_rank = 0 if self.group is None else self.group.rank() + generate_fn = partial( + mlx_generate, model=self.inference_model, tokenizer=self.tokenizer + ) + warmup_fn = partial( + warmup_inference, + model=self.inference_model, + tokenizer=self.tokenizer, + group=self.group, + model_id=self.model_id, + ) + + if os.environ.get("EXO_NO_BATCH"): + logger.info("using SequentialGenerator (batching disabled)") + return SequentialGenerator( + tokenizer=self.tokenizer, + group=self.group, + tool_parser=tool_parser, + kv_prefix_cache=kv_prefix_cache, + model_id=self.model_id, + device_rank=device_rank, + cancel_receiver=self.cancel_receiver, + event_sender=self.event_sender, + _generate_fn=generate_fn, + _warmup_fn=warmup_fn, + ) + from exo.worker.runner.llm_inference.batch_generator import ExoBatchGenerator + + logger.info("using BatchGenerator") + gen = ExoBatchGenerator( + model=self.inference_model, + tokenizer=self.tokenizer, + group=self.group, + kv_prefix_cache=kv_prefix_cache, + model_id=self.model_id, + ) + return BatchGenerator( + tokenizer=self.tokenizer, + group=self.group, + tool_parser=tool_parser, + kv_prefix_cache=kv_prefix_cache, + model_id=self.model_id, + device_rank=device_rank, + cancel_receiver=self.cancel_receiver, + event_sender=self.event_sender, + _gen=gen, + ) + + def close(self): + with contextlib.suppress(NameError, AttributeError): + del self.inference_model, self.tokenizer diff --git a/src/exo/worker/engines/mlx/cache.py b/python/mlx_engine/src/mlx_engine/cache.py similarity index 98% rename from src/exo/worker/engines/mlx/cache.py rename to python/mlx_engine/src/mlx_engine/cache.py index beefcd42..7b67b26c 100644 --- a/src/exo/worker/engines/mlx/cache.py +++ b/python/mlx_engine/src/mlx_engine/cache.py @@ -5,6 +5,7 @@ from typing import TYPE_CHECKING, cast import mlx.core as mx import psutil from exo_core.utils.memory import Memory +from loguru import logger from mlx_lm.models.cache import ( ArraysCache, CacheList, @@ -14,12 +15,11 @@ from mlx_lm.models.cache import ( ) from mlx_lm.tokenizer_utils import TokenizerWrapper -from exo.shared.types.mlx import KVCacheType, MLXCacheType, Model -from exo.worker.engines.mlx.constants import CACHE_GROUP_SIZE, KV_CACHE_BITS -from exo.worker.runner.bootstrap import logger +from mlx_engine.constants import CACHE_GROUP_SIZE, KV_CACHE_BITS +from mlx_engine.types import KVCacheType, MLXCacheType, Model if TYPE_CHECKING: - from exo.worker.engines.vllm.kv_cache import TorchKVCache + from vllm_engine.kv_cache import TorchKVCache # Fraction of device memory above which LRU eviction kicks in. diff --git a/src/exo/worker/engines/mlx/constants.py b/python/mlx_engine/src/mlx_engine/constants.py similarity index 100% rename from src/exo/worker/engines/mlx/constants.py rename to python/mlx_engine/src/mlx_engine/constants.py diff --git a/src/exo/worker/engines/mlx/dsml_encoding.py b/python/mlx_engine/src/mlx_engine/dsml_encoding.py similarity index 97% rename from src/exo/worker/engines/mlx/dsml_encoding.py rename to python/mlx_engine/src/mlx_engine/dsml_encoding.py index 8005ad49..397d94ea 100644 --- a/src/exo/worker/engines/mlx/dsml_encoding.py +++ b/python/mlx_engine/src/mlx_engine/dsml_encoding.py @@ -4,7 +4,7 @@ from typing import Any from mlx_lm.chat_templates import deepseek_v32 -from exo.api.types import ToolCallItem +from exo_core.types.runner_response import ToolCallItem BOS_TOKEN: str = deepseek_v32.bos_token EOS_TOKEN: str = deepseek_v32.eos_token diff --git a/src/exo/worker/engines/mlx/generator/__init__.py b/python/mlx_engine/src/mlx_engine/generator/__init__.py similarity index 100% rename from src/exo/worker/engines/mlx/generator/__init__.py rename to python/mlx_engine/src/mlx_engine/generator/__init__.py diff --git a/src/exo/worker/engines/mlx/generator/batch_generate.py b/python/mlx_engine/src/mlx_engine/generator/batch_generate.py similarity index 97% rename from src/exo/worker/engines/mlx/generator/batch_generate.py rename to python/mlx_engine/src/mlx_engine/generator/batch_generate.py index c9eb87bc..5e0485bd 100644 --- a/src/exo/worker/engines/mlx/generator/batch_generate.py +++ b/python/mlx_engine/src/mlx_engine/generator/batch_generate.py @@ -8,6 +8,7 @@ from exo_core.types.runner_response import GenerationResponse from exo_core.types.tasks import TaskId from exo_core.types.text_generation import TextGenerationTaskParams from exo_core.utils.memory import Memory +from loguru import logger from mlx_lm.generate import ( BatchGenerator as MlxBatchGenerator, ) @@ -23,23 +24,22 @@ from exo.api.types import ( TopLogprobItem, Usage, ) -from exo.shared.types.mlx import MLXCacheType, Model -from exo.worker.engines.mlx.cache import ( +from mlx_engine.cache import ( CacheSnapshot, KVPrefixCache, encode_prompt, make_kv_cache, ) -from exo.worker.engines.mlx.constants import DEFAULT_TOP_LOGPROBS, MAX_TOKENS -from exo.worker.engines.mlx.generator.generate import ( +from mlx_engine.constants import DEFAULT_TOP_LOGPROBS, MAX_TOKENS +from mlx_engine.generator.generate import ( ban_token_ids, eos_ids_from_tokenizer, extract_top_logprobs, prefill, warmup_inference, ) -from exo.worker.engines.mlx.utils_mlx import fix_unmatched_think_end_tokens -from exo.worker.runner.bootstrap import logger +from mlx_engine.types import MLXCacheType, Model +from mlx_engine.utils_mlx import fix_unmatched_think_end_tokens _MIN_PREFIX_HIT_RATIO_TO_UPDATE = 0.5 diff --git a/src/exo/worker/engines/mlx/generator/generate.py b/python/mlx_engine/src/mlx_engine/generator/generate.py similarity index 98% rename from src/exo/worker/engines/mlx/generator/generate.py rename to python/mlx_engine/src/mlx_engine/generator/generate.py index 9cdf5f2a..559e67f1 100644 --- a/src/exo/worker/engines/mlx/generator/generate.py +++ b/python/mlx_engine/src/mlx_engine/generator/generate.py @@ -11,6 +11,7 @@ from exo_core.types.runner_response import ( ) from exo_core.types.text_generation import InputMessage, TextGenerationTaskParams from exo_core.utils.memory import Memory +from loguru import logger from mlx_lm.generate import ( maybe_quantize_kv_cache, stream_generate, @@ -27,8 +28,7 @@ from exo.api.types import ( TopLogprobItem, Usage, ) -from exo.shared.types.mlx import MLXCacheType, Model -from exo.worker.engines.mlx.auto_parallel import ( +from mlx_engine.auto_parallel import ( PipelineFirstLayer, PipelineLastLayer, clear_prefill_sends, @@ -36,7 +36,7 @@ from exo.worker.engines.mlx.auto_parallel import ( set_pipeline_prefill, set_pipeline_queue_sends, ) -from exo.worker.engines.mlx.cache import ( +from mlx_engine.cache import ( CacheSnapshot, KVPrefixCache, encode_prompt, @@ -44,18 +44,18 @@ from exo.worker.engines.mlx.cache import ( make_kv_cache, snapshot_ssm_states, ) -from exo.worker.engines.mlx.constants import ( +from mlx_engine.constants import ( DEFAULT_TOP_LOGPROBS, KV_BITS, KV_GROUP_SIZE, MAX_TOKENS, ) -from exo.worker.engines.mlx.utils_mlx import ( +from mlx_engine.types import MLXCacheType, Model +from mlx_engine.utils_mlx import ( apply_chat_template, fix_unmatched_think_end_tokens, mx_barrier, ) -from exo.worker.runner.bootstrap import logger generation_stream = mx.new_stream(mx.default_device()) diff --git a/python/mlx_engine/src/mlx_engine/py.typed b/python/mlx_engine/src/mlx_engine/py.typed new file mode 100644 index 00000000..e69de29b diff --git a/src/exo/worker/engines/mlx/tests/test_batch_generate.py b/python/mlx_engine/src/mlx_engine/tests/test_batch_generate.py similarity index 97% rename from src/exo/worker/engines/mlx/tests/test_batch_generate.py rename to python/mlx_engine/src/mlx_engine/tests/test_batch_generate.py index 3d48590c..de830598 100644 --- a/src/exo/worker/engines/mlx/tests/test_batch_generate.py +++ b/python/mlx_engine/src/mlx_engine/tests/test_batch_generate.py @@ -16,18 +16,18 @@ from typing import cast import mlx.core as mx import mlx.nn as nn import mlx.utils + +# Import batch_generate to activate the right-padding BatchKVCache patch +import mlx_engine.generator.batch_generate # noqa: F401 import pytest +from mlx_engine.cache import encode_prompt, make_kv_cache +from mlx_engine.generator.generate import prefill +from mlx_engine.types import Model from mlx_lm.generate import _merge_caches from mlx_lm.sample_utils import make_sampler from mlx_lm.tokenizer_utils import TokenizerWrapper from transformers import AutoTokenizer -# Import batch_generate to activate the right-padding BatchKVCache patch -import exo.worker.engines.mlx.generator.batch_generate # noqa: F401 -from exo.shared.types.mlx import Model -from exo.worker.engines.mlx.cache import encode_prompt, make_kv_cache -from exo.worker.engines.mlx.generator.generate import prefill - NUM_STEPS = 20 diff --git a/src/exo/shared/types/mlx.py b/python/mlx_engine/src/mlx_engine/types.py similarity index 93% rename from src/exo/shared/types/mlx.py rename to python/mlx_engine/src/mlx_engine/types.py index 1c63bafa..62ec52f5 100644 --- a/src/exo/shared/types/mlx.py +++ b/python/mlx_engine/src/mlx_engine/types.py @@ -11,8 +11,7 @@ from mlx_lm.models.cache import ( QuantizedKVCache, RotatingKVCache, ) - -from exo.worker.engines.vllm.kv_cache import TorchKVCache +from vllm_engine.kv_cache import TorchKVCache MLXCacheType = Sequence[ KVCache | RotatingKVCache | QuantizedKVCache | ArraysCache | CacheList diff --git a/src/exo/worker/engines/mlx/utils_mlx.py b/python/mlx_engine/src/mlx_engine/utils_mlx.py similarity index 98% rename from src/exo/worker/engines/mlx/utils_mlx.py rename to python/mlx_engine/src/mlx_engine/utils_mlx.py index 8eca88b7..cdc5b4c0 100644 --- a/src/exo/worker/engines/mlx/utils_mlx.py +++ b/python/mlx_engine/src/mlx_engine/utils_mlx.py @@ -19,12 +19,11 @@ try: except ImportError: pass # transformers < 5.0 or bytes_to_unicode not available -from exo_core.model_cards import ModelId from mlx_lm.models.cache import KVCache from mlx_lm.models.deepseek_v3 import DeepseekV3Model from mlx_lm.tokenizer_utils import TokenizerWrapper -from exo.worker.engines.mlx.constants import TRUST_REMOTE_CODE +from mlx_engine.constants import TRUST_REMOTE_CODE try: from mlx_lm.tokenizer_utils import load_tokenizer @@ -34,7 +33,7 @@ import contextlib import mlx.core as mx import mlx.nn as nn -from exo_core.types.common import Host +from exo_core.types.common import Host, ModelId from exo_core.types.instances import ( BoundInstance, MlxJacclInstance, @@ -50,11 +49,11 @@ from exo_core.types.tasks import TaskId, TextGeneration from exo_core.types.text_generation import TextGenerationTaskParams from exo_core.utils.downloads import build_model_path from exo_core.utils.memory import Memory +from loguru import logger from mlx_lm.utils import load_model from pydantic import RootModel -from exo.shared.types.mlx import Model -from exo.worker.engines.mlx.auto_parallel import ( +from mlx_engine.auto_parallel import ( LayerLoadedCallback, TimeoutCallback, eval_with_timeout, @@ -63,7 +62,7 @@ from exo.worker.engines.mlx.auto_parallel import ( pipeline_auto_parallel, tensor_auto_parallel, ) -from exo.worker.runner.bootstrap import logger +from mlx_engine.types import Model Group = mx.distributed.Group @@ -542,7 +541,7 @@ def apply_chat_template( formatted_messages = formatted_messages[:-1] if _needs_dsml_encoding(task_params): - from exo.worker.engines.mlx.dsml_encoding import encode_messages + from mlx_engine.dsml_encoding import encode_messages prompt = encode_messages( messages=formatted_messages, diff --git a/python/mlx_engine/uv.lock b/python/mlx_engine/uv.lock deleted file mode 100644 index e384221f..00000000 --- a/python/mlx_engine/uv.lock +++ /dev/null @@ -1,123 +0,0 @@ -version = 1 -revision = 3 -requires-python = ">=3.13" - -[[package]] -name = "annotated-types" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, -] - -[[package]] -name = "exo-core" -version = "0.1.0" -source = { directory = "../exo_core" } -dependencies = [ - { name = "pydantic" }, -] - -[package.metadata] -requires-dist = [{ name = "pydantic" }] - -[[package]] -name = "mlx-engine" -version = "0.1.0" -source = { editable = "." } -dependencies = [ - { name = "exo-core" }, -] - -[package.metadata] -requires-dist = [{ name = "exo-core", directory = "../exo_core" }] - -[[package]] -name = "pydantic" -version = "2.12.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "annotated-types" }, - { name = "pydantic-core" }, - { name = "typing-extensions" }, - { name = "typing-inspection" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591, upload-time = "2025-11-26T15:11:46.471Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580, upload-time = "2025-11-26T15:11:44.605Z" }, -] - -[[package]] -name = "pydantic-core" -version = "2.41.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9", size = 2120403, upload-time = "2025-11-04T13:40:25.248Z" }, - { url = "https://files.pythonhosted.org/packages/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34", size = 1896206, upload-time = "2025-11-04T13:40:27.099Z" }, - { url = "https://files.pythonhosted.org/packages/15/df/a4c740c0943e93e6500f9eb23f4ca7ec9bf71b19e608ae5b579678c8d02f/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0", size = 1919307, upload-time = "2025-11-04T13:40:29.806Z" }, - { url = "https://files.pythonhosted.org/packages/9a/e3/6324802931ae1d123528988e0e86587c2072ac2e5394b4bc2bc34b61ff6e/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33", size = 2063258, upload-time = "2025-11-04T13:40:33.544Z" }, - { url = "https://files.pythonhosted.org/packages/c9/d4/2230d7151d4957dd79c3044ea26346c148c98fbf0ee6ebd41056f2d62ab5/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e", size = 2214917, upload-time = "2025-11-04T13:40:35.479Z" }, - { url = "https://files.pythonhosted.org/packages/e6/9f/eaac5df17a3672fef0081b6c1bb0b82b33ee89aa5cec0d7b05f52fd4a1fa/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2", size = 2332186, upload-time = "2025-11-04T13:40:37.436Z" }, - { url = "https://files.pythonhosted.org/packages/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586", size = 2073164, upload-time = "2025-11-04T13:40:40.289Z" }, - { url = "https://files.pythonhosted.org/packages/bf/e3/f6e262673c6140dd3305d144d032f7bd5f7497d3871c1428521f19f9efa2/pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d", size = 2179146, upload-time = "2025-11-04T13:40:42.809Z" }, - { url = "https://files.pythonhosted.org/packages/75/c7/20bd7fc05f0c6ea2056a4565c6f36f8968c0924f19b7d97bbfea55780e73/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740", size = 2137788, upload-time = "2025-11-04T13:40:44.752Z" }, - { url = "https://files.pythonhosted.org/packages/3a/8d/34318ef985c45196e004bc46c6eab2eda437e744c124ef0dbe1ff2c9d06b/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e", size = 2340133, upload-time = "2025-11-04T13:40:46.66Z" }, - { url = "https://files.pythonhosted.org/packages/9c/59/013626bf8c78a5a5d9350d12e7697d3d4de951a75565496abd40ccd46bee/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858", size = 2324852, upload-time = "2025-11-04T13:40:48.575Z" }, - { url = "https://files.pythonhosted.org/packages/1a/d9/c248c103856f807ef70c18a4f986693a46a8ffe1602e5d361485da502d20/pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36", size = 1994679, upload-time = "2025-11-04T13:40:50.619Z" }, - { url = "https://files.pythonhosted.org/packages/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11", size = 2019766, upload-time = "2025-11-04T13:40:52.631Z" }, - { url = "https://files.pythonhosted.org/packages/73/7d/f2f9db34af103bea3e09735bb40b021788a5e834c81eedb541991badf8f5/pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd", size = 1981005, upload-time = "2025-11-04T13:40:54.734Z" }, - { url = "https://files.pythonhosted.org/packages/ea/28/46b7c5c9635ae96ea0fbb779e271a38129df2550f763937659ee6c5dbc65/pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a", size = 2119622, upload-time = "2025-11-04T13:40:56.68Z" }, - { url = "https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14", size = 1891725, upload-time = "2025-11-04T13:40:58.807Z" }, - { url = "https://files.pythonhosted.org/packages/23/04/e89c29e267b8060b40dca97bfc64a19b2a3cf99018167ea1677d96368273/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1", size = 1915040, upload-time = "2025-11-04T13:41:00.853Z" }, - { url = "https://files.pythonhosted.org/packages/84/a3/15a82ac7bd97992a82257f777b3583d3e84bdb06ba6858f745daa2ec8a85/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66", size = 2063691, upload-time = "2025-11-04T13:41:03.504Z" }, - { url = "https://files.pythonhosted.org/packages/74/9b/0046701313c6ef08c0c1cf0e028c67c770a4e1275ca73131563c5f2a310a/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869", size = 2213897, upload-time = "2025-11-04T13:41:05.804Z" }, - { url = "https://files.pythonhosted.org/packages/8a/cd/6bac76ecd1b27e75a95ca3a9a559c643b3afcd2dd62086d4b7a32a18b169/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2", size = 2333302, upload-time = "2025-11-04T13:41:07.809Z" }, - { url = "https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375", size = 2064877, upload-time = "2025-11-04T13:41:09.827Z" }, - { url = "https://files.pythonhosted.org/packages/18/66/e9db17a9a763d72f03de903883c057b2592c09509ccfe468187f2a2eef29/pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553", size = 2180680, upload-time = "2025-11-04T13:41:12.379Z" }, - { url = "https://files.pythonhosted.org/packages/d3/9e/3ce66cebb929f3ced22be85d4c2399b8e85b622db77dad36b73c5387f8f8/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90", size = 2138960, upload-time = "2025-11-04T13:41:14.627Z" }, - { url = "https://files.pythonhosted.org/packages/a6/62/205a998f4327d2079326b01abee48e502ea739d174f0a89295c481a2272e/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07", size = 2339102, upload-time = "2025-11-04T13:41:16.868Z" }, - { url = "https://files.pythonhosted.org/packages/3c/0d/f05e79471e889d74d3d88f5bd20d0ed189ad94c2423d81ff8d0000aab4ff/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb", size = 2326039, upload-time = "2025-11-04T13:41:18.934Z" }, - { url = "https://files.pythonhosted.org/packages/ec/e1/e08a6208bb100da7e0c4b288eed624a703f4d129bde2da475721a80cab32/pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23", size = 1995126, upload-time = "2025-11-04T13:41:21.418Z" }, - { url = "https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf", size = 2015489, upload-time = "2025-11-04T13:41:24.076Z" }, - { url = "https://files.pythonhosted.org/packages/4e/bb/f7a190991ec9e3e0ba22e4993d8755bbc4a32925c0b5b42775c03e8148f9/pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0", size = 1977288, upload-time = "2025-11-04T13:41:26.33Z" }, - { url = "https://files.pythonhosted.org/packages/92/ed/77542d0c51538e32e15afe7899d79efce4b81eee631d99850edc2f5e9349/pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a", size = 2120255, upload-time = "2025-11-04T13:41:28.569Z" }, - { url = "https://files.pythonhosted.org/packages/bb/3d/6913dde84d5be21e284439676168b28d8bbba5600d838b9dca99de0fad71/pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3", size = 1863760, upload-time = "2025-11-04T13:41:31.055Z" }, - { url = "https://files.pythonhosted.org/packages/5a/f0/e5e6b99d4191da102f2b0eb9687aaa7f5bea5d9964071a84effc3e40f997/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c", size = 1878092, upload-time = "2025-11-04T13:41:33.21Z" }, - { url = "https://files.pythonhosted.org/packages/71/48/36fb760642d568925953bcc8116455513d6e34c4beaa37544118c36aba6d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612", size = 2053385, upload-time = "2025-11-04T13:41:35.508Z" }, - { url = "https://files.pythonhosted.org/packages/20/25/92dc684dd8eb75a234bc1c764b4210cf2646479d54b47bf46061657292a8/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d", size = 2218832, upload-time = "2025-11-04T13:41:37.732Z" }, - { url = "https://files.pythonhosted.org/packages/e2/09/f53e0b05023d3e30357d82eb35835d0f6340ca344720a4599cd663dca599/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9", size = 2327585, upload-time = "2025-11-04T13:41:40Z" }, - { url = "https://files.pythonhosted.org/packages/aa/4e/2ae1aa85d6af35a39b236b1b1641de73f5a6ac4d5a7509f77b814885760c/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660", size = 2041078, upload-time = "2025-11-04T13:41:42.323Z" }, - { url = "https://files.pythonhosted.org/packages/cd/13/2e215f17f0ef326fc72afe94776edb77525142c693767fc347ed6288728d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9", size = 2173914, upload-time = "2025-11-04T13:41:45.221Z" }, - { url = "https://files.pythonhosted.org/packages/02/7a/f999a6dcbcd0e5660bc348a3991c8915ce6599f4f2c6ac22f01d7a10816c/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3", size = 2129560, upload-time = "2025-11-04T13:41:47.474Z" }, - { url = "https://files.pythonhosted.org/packages/3a/b1/6c990ac65e3b4c079a4fb9f5b05f5b013afa0f4ed6780a3dd236d2cbdc64/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf", size = 2329244, upload-time = "2025-11-04T13:41:49.992Z" }, - { url = "https://files.pythonhosted.org/packages/d9/02/3c562f3a51afd4d88fff8dffb1771b30cfdfd79befd9883ee094f5b6c0d8/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470", size = 2331955, upload-time = "2025-11-04T13:41:54.079Z" }, - { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906, upload-time = "2025-11-04T13:41:56.606Z" }, - { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607, upload-time = "2025-11-04T13:41:58.889Z" }, - { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769, upload-time = "2025-11-04T13:42:01.186Z" }, -] - -[[package]] -name = "typing-extensions" -version = "4.15.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, -] - -[[package]] -name = "typing-inspection" -version = "0.4.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, -] diff --git a/python/parts.nix b/python/parts.nix index 2b2cfd9f..c6f209e2 100644 --- a/python/parts.nix +++ b/python/parts.nix @@ -247,27 +247,8 @@ }; buildSystemsOverlay = final: prev: - let - addSetupTools = old: { - nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ - final.setuptools - ]; - }; - - in { - # mlx-lm is a git dependency that needs setuptools - mlx-lm = prev.mlx-lm.overrideAttrs addSetupTools; - # rouge-score and sacrebleu don't declare setuptools as a build dependency - rouge-score = prev.rouge-score.overrideAttrs addSetupTools; - sacrebleu = prev.sacrebleu.overrideAttrs addSetupTools; - sqlitedict = prev.sqlitedict.overrideAttrs addSetupTools; - word2number = prev.word2number.overrideAttrs addSetupTools; vllm = prev.vllm.overrideAttrs (old: { - nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ - final.setuptools - final.setuptools-scm - ]; propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ final.torch ]; VLLM_TARGET_DEVICE = "empty"; }); @@ -320,19 +301,6 @@ linuxOverlay ] ); - editablePythonSet = pythonSet.overrideScope ( - workspace.mkEditablePyprojectOverlay { root = "$REPO_ROOT"; members = [ "exo" "exo_core" "vllm_engine" "mlx_engine" "exo_bench" ]; } - ); - evenv = editablePythonSet.mkVirtualEnv "exo-dev-env" - { - exo = lib.optionals isDarwin [ "mlx" ]; - exo-pyo3-bindings = [ ]; - exo-bench = [ ]; - mlx-engine = [ ]; - vllm-engine = [ ]; - - } - ; cudaPythonSet = (cudaPkgs.callPackage inputs.pyproject-nix.build.packages { python = cudaPkgs.python313; }).overrideScope ( @@ -348,12 +316,27 @@ # mlx-cpu and mlx-cuda-13 both ship mlx/ site-packages files; keep first. # mlx-cpu/mlx-cuda-13 and nvidia-cudnn-cu12/cu13 ship overlapping files. venvCollisionPaths = lib.optionals isLinux [ + "lib/python3.13/site-packages/cv2*" "lib/python3.13/site-packages/mlx*" "lib/python3.13/site-packages/nvidia*" ]; + editablePythonSet = pythonSet.overrideScope ( + workspace.mkEditablePyprojectOverlay { root = "$REPO_ROOT"; members = [ "exo" "python/*" "bench" ]; } + ); + evenv = (editablePythonSet.mkVirtualEnv "exo-dev-env" + { + exo = [ "mlx" "dev" ]; + exo-pyo3-bindings = [ ]; + exo-bench = [ ]; + mlx-engine = [ ]; + vllm-engine = [ ]; + }).overrideAttrs { + venvIgnoreCollisions = venvCollisionPaths; + }; exoVenv = (pythonSet.mkVirtualEnv "exo-env" { - exo = lib.optionals isDarwin [ "mlx" ]; + exo = [ "mlx" ]; + mlx-engine = [ ]; exo-pyo3-bindings = [ ]; }).overrideAttrs { venvIgnoreCollisions = venvCollisionPaths; @@ -361,6 +344,7 @@ exoCudaVenv = (cudaPythonSet.mkVirtualEnv "exo-env" { exo = lib.optionals cudaPkgs.config.cudaSupport [ "cuda" ]; exo-pyo3-bindings = [ ]; + vllm-engine = [ ]; }).overrideAttrs { venvIgnoreCollisions = venvCollisionPaths; }; diff --git a/python/vllm_engine/.python-version b/python/vllm_engine/.python-version deleted file mode 100644 index 24ee5b1b..00000000 --- a/python/vllm_engine/.python-version +++ /dev/null @@ -1 +0,0 @@ -3.13 diff --git a/python/vllm_engine/pyproject.toml b/python/vllm_engine/pyproject.toml index 8d8813c4..1cbcbdfb 100644 --- a/python/vllm_engine/pyproject.toml +++ b/python/vllm_engine/pyproject.toml @@ -10,6 +10,8 @@ dependencies = [ "mlx-cuda-13==0.30.6; sys_platform == 'linux'", "fastsafetensors>=0.1.10; sys_platform == 'linux'", "exo_core", + "mlx_engine", # TODO(evan): remove this dependency! + "loguru>=0.7.3", ] [tool.uv] @@ -17,7 +19,8 @@ environments = ["sys_platform == 'linux'"] [tool.uv.sources] -exo_core = { workspace = true } +exo_core = { workspace = true, editable = true } +mlx_engine = { workspace = true, editable = true } vllm = { git = "https://github.com/hmellor/vllm.git", rev = "b99bedc737166ae5ca98cb9e3534b96e0c8c69aa" } torch = [ { index = "pytorch-cu130", marker = "platform_machine == 'aarch64'" }, diff --git a/python/vllm_engine/src/vllm_engine/builder.py b/python/vllm_engine/src/vllm_engine/builder.py new file mode 100644 index 00000000..b8560a09 --- /dev/null +++ b/python/vllm_engine/src/vllm_engine/builder.py @@ -0,0 +1,84 @@ +from dataclasses import dataclass +from typing import Self, Callable +from exo_core.constants import EXO_MODELS_DIR +from exo_core.engine import EngineBuilder, Engine +from exo_core.types.common import ModelId +from exo_core.types.instances import BoundInstance +from exo_core.types.tasks import TextGeneration +from exo_core.types.runner_response import GenerationResponse +from vllm_engine.vllm_generator import VllmBatchEngine +from vllm_engine.vllm_generator import load_vllm_engine + + +@dataclass +class VllmBuilder(EngineBuilder[BoundInstance, TextGeneration, GenerationResponse]): + model_id: ModelId + model_path: str + trust_remote_code: bool + cancel_receiver: MpReceiver[TaskId] + event_sender: MpSender[Event] + bound_instance: BoundInstance + + @classmethod + def create( + cls, + bound_instance: BoundInstance, + event_sender: MpSender[Event], + cancel_receiver: MpReceiver[TaskId], + ) -> Self: + mid = bound_instance.instance.shard_assignments.model_id + return cls( + mid, + str(EXO_MODELS_DIR / mid.normalize()), + bound_instance.bound_shard.model_card.trust_remote_code, + cancel_receiver, + event_sender, + bound_instance, + ) + + def connect(self) -> None: + raise NotImplementedError( + "Multiple node VLLM instances are not supported at the moment!" + ) + + def load( + self, + on_timeout: Callable[[], None], + on_layer_loaded: Callable[[int, int], None], + ) -> None: + self._engine, self._tool_parser, self._prefix_cache = load_vllm_engine( + model_path=self.model_path, + model_id=self.model_id, + trust_remote_code=self.trust_remote_code, + n_layers=self.bound_instance.bound_shard.model_card.n_layers, + on_layer_loaded=on_layer_loaded, + ) + + def build(self) -> Engine[TextGeneration, GenerationResponse]: + gen = VllmBatchEngine( + engine=self._engine, + model_id=self.model_id, + prefix_cache=self._prefix_cache, + ) + from mlx_lm.tokenizer_utils import TokenizerWrapper + + tokenizer = TokenizerWrapper(self._engine.get_tokenizer()) + max_concurrent = 1 if os.environ.get("EXO_NO_BATCH") else 8 + + logger.info(f"using BatchGenerator (vLLM, max_concurrent={max_concurrent})") + return BatchGenerator( + tokenizer=tokenizer, + group=None, + tool_parser=self._tool_parser, + kv_prefix_cache=None, + model_id=self.model_id, + device_rank=0, + cancel_receiver=self.cancel_receiver, + event_sender=self.event_sender, + _gen=gen, + max_concurrent_requests=max_concurrent, + ) + + def close(self) -> None: + with contextlib.suppress(NameError, AttributeError): + del self._engine, self._prefix_cache, self._tool_parser diff --git a/python/vllm_engine/src/vllm_engine/growable_cache.py b/python/vllm_engine/src/vllm_engine/growable_cache.py index eea8ecb8..af623c26 100644 --- a/python/vllm_engine/src/vllm_engine/growable_cache.py +++ b/python/vllm_engine/src/vllm_engine/growable_cache.py @@ -1,8 +1,8 @@ import torch +from mlx_engine.cache import KVPrefixCache from vllm.v1.worker.gpu_model_runner import GPUModelRunner -from exo.shared.logging import logger -from exo.worker.engines.mlx.cache import KVPrefixCache +from loguru import logger INITIAL_FRACTION = 0.05 GROWTH_HEADROOM_BYTES = 512 * 1024 * 1024 diff --git a/python/vllm_engine/src/vllm_engine/prompt_format.py b/python/vllm_engine/src/vllm_engine/prompt_format.py index 63d5fdb1..e757b949 100644 --- a/python/vllm_engine/src/vllm_engine/prompt_format.py +++ b/python/vllm_engine/src/vllm_engine/prompt_format.py @@ -1,14 +1,13 @@ +from exo.worker.engines.mlx.utils_mlx import ( + apply_chat_template, + get_eos_token_ids_for_model, +) from exo_core.types.common import ModelId from exo_core.types.text_generation import TextGenerationTaskParams from mlx_lm.tokenizer_utils import TokenizerWrapper from vllm.sampling_params import SamplingParams from vllm.v1.engine.llm_engine import LLMEngine -from exo.worker.engines.mlx.utils_mlx import ( - apply_chat_template, - get_eos_token_ids_for_model, -) - def format_vllm_prompt( engine: LLMEngine, params: TextGenerationTaskParams diff --git a/python/vllm_engine/src/vllm_engine/py.typed b/python/vllm_engine/src/vllm_engine/py.typed new file mode 100644 index 00000000..e69de29b diff --git a/python/vllm_engine/src/vllm_engine/vllm_generator.py b/python/vllm_engine/src/vllm_engine/vllm_generator.py index 10f94de4..19a99d73 100644 --- a/python/vllm_engine/src/vllm_engine/vllm_generator.py +++ b/python/vllm_engine/src/vllm_engine/vllm_generator.py @@ -8,25 +8,27 @@ from collections.abc import Callable, Generator from dataclasses import dataclass, field import torch +from mlx_engine.cache import KVPrefixCache +from mlx_engine.utils_mlx import get_eos_token_ids_for_model from exo_core.types.common import ModelId from exo_core.types.runner_response import GenerationResponse from exo_core.types.tasks import TaskId from exo_core.types.text_generation import TextGenerationTaskParams from exo_core.utils.memory import Memory +from exo_core.engine import Engine +from loguru import logger from vllm.engine.arg_utils import EngineArgs +from vllm.v1.attention.backends.registry import AttentionBackendEnum from vllm.sampling_params import SamplingParams from vllm.v1.engine.llm_engine import LLMEngine from vllm.v1.kv_cache_interface import KVCacheConfig -from exo.api.types import ( +from exo_core.types.runner_response import ( CompletionTokensDetails, GenerationStats, PromptTokensDetails, Usage, ) -from exo.worker.engines.mlx.cache import KVPrefixCache -from exo.worker.engines.mlx.utils_mlx import get_eos_token_ids_for_model -from exo.worker.runner.bootstrap import logger from exo.worker.runner.llm_inference.tool_parsers import ToolParser, infer_tool_parser from vllm_engine.growable_cache import ( get_model_runner, @@ -177,9 +179,7 @@ def _build_generation_response( else 0.0, prompt_tokens=prompt_token_count, generation_tokens=completion_tokens, - peak_memory_usage=Memory.from_bytes( - torch.cuda.max_memory_allocated() # pyright: ignore[reportUnknownMemberType, reportUnknownArgumentType, reportAttributeAccessIssue] - ), + peak_memory_usage=Memory.from_bytes(torch.cuda.max_memory_allocated()), ) mapped_finish_reason = ( finish_reason @@ -215,7 +215,7 @@ def vllm_generate( stop_ids = _stop_token_ids(tokenizer, model_id) max_batch_tokens: int = ( getattr(engine.model_config, "max_num_batched_tokens", 2048) or 2048 - ) # type: ignore[reportUnknownMemberType] + ) start_time = time.perf_counter() first_token_time: float | None = None prev_token_count = 0 @@ -433,7 +433,7 @@ class VllmBatchEngine: return results def cancel(self, task_ids: list[TaskId]) -> None: - to_abort = [tid for tid in task_ids if tid in self._active] + to_abort = [str(tid) for tid in task_ids if tid in self._active] if to_abort: self.engine.abort_request(to_abort) for tid in task_ids: @@ -480,18 +480,18 @@ def set_n_layers(n: int) -> None: def _wrap_weights_iterator( - original: Callable[..., Generator[tuple[str, "torch.Tensor"], None, None]], -) -> Callable[..., Generator[tuple[str, "torch.Tensor"], None, None]]: # pyright: ignore[reportUnknownParameterType] + original: Callable[..., Generator[tuple[str, torch.Tensor], None, None]], +) -> Callable[..., Generator[tuple[str, torch.Tensor], None, None]]: def patched( hf_weights_files: list[str], *args: object, **kwargs: object - ) -> Generator[tuple[str, "torch.Tensor"], None, None]: # pyright: ignore[reportUnknownParameterType] + ) -> Generator[tuple[str, torch.Tensor], None, None]: callback = get_weight_loading_callback() if callback is not None and hf_weights_files: total_layers = get_n_layers() seen_layers: set[int] = set() last_reported = 0 - for name, tensor in original(hf_weights_files, *args, **kwargs): # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType] - yield name, tensor # pyright: ignore[reportUnknownArgumentType] + for name, tensor in original(hf_weights_files, *args, **kwargs): + yield name, tensor match = _LAYER_INDEX_PATTERN.search(name) if match: seen_layers.add(int(match.group(1))) @@ -501,19 +501,19 @@ def _wrap_weights_iterator( last_reported = current callback(total_layers, total_layers) else: - yield from original(hf_weights_files, *args, **kwargs) # pyright: ignore[reportUnknownMemberType] + yield from original(hf_weights_files, *args, **kwargs) return patched -def _monkey_patch_iterator(weight_utils: object, attr_name: str) -> None: # pyright: ignore[reportUnknownParameterType] +def _monkey_patch_iterator(weight_utils: object, attr_name: str) -> None: original = getattr(weight_utils, attr_name, None) if original is None: return - patched = _wrap_weights_iterator(original) # pyright: ignore[reportUnknownArgumentType] + patched = _wrap_weights_iterator(original) # pyright: ignore[reportAny] setattr(weight_utils, attr_name, patched) for mod in list(sys.modules.values()): - if mod is None or mod is weight_utils: + if mod is weight_utils: continue for name in list(vars(mod)): if vars(mod)[name] is original: @@ -527,21 +527,21 @@ def _patch_weight_loading_progress() -> None: _weight_loading_patched = True from vllm.model_executor.model_loader import ( - weight_utils, # pyright: ignore[reportMissingImports] + weight_utils, ) _monkey_patch_iterator(weight_utils, "safetensors_weights_iterator") _monkey_patch_iterator(weight_utils, "fastsafetensors_weights_iterator") - import huggingface_hub # pyright: ignore[reportMissingImports] + import huggingface_hub def _noop_metadata(*_a: object, **_kw: object) -> None: - pass # pyright: ignore[reportUnknownParameterType] + pass - original_metadata = huggingface_hub.get_safetensors_metadata # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType] - huggingface_hub.get_safetensors_metadata = _noop_metadata # pyright: ignore[reportAttributeAccessIssue] + original_metadata = huggingface_hub.get_safetensors_metadata + huggingface_hub.get_safetensors_metadata = _noop_metadata for mod in list(sys.modules.values()): - if mod is None or mod is huggingface_hub: + if mod is huggingface_hub: continue for attr in list(vars(mod)): if vars(mod)[attr] is original_metadata: @@ -571,7 +571,7 @@ def load_vllm_engine( trust_remote_code=trust_remote_code, load_format="fastsafetensors", enable_prefix_caching=False, - attention_backend="TRITON_ATTN", + attention_backend=AttentionBackendEnum.TRITON_ATTN, enforce_eager=True, disable_log_stats=True, ) diff --git a/python/vllm_engine/uv.lock b/python/vllm_engine/uv.lock deleted file mode 100644 index e997f881..00000000 --- a/python/vllm_engine/uv.lock +++ /dev/null @@ -1,2348 +0,0 @@ -version = 1 -revision = 3 -requires-python = ">=3.13" -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "python_full_version < '3.14' and platform_machine == 'aarch64' and sys_platform == 'linux'", -] -supported-markers = [ - "platform_machine == 'aarch64' and sys_platform == 'linux'", -] - -[[package]] -name = "aiohappyeyeballs" -version = "2.6.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, -] - -[[package]] -name = "aiohttp" -version = "3.13.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohappyeyeballs", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "aiosignal", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "attrs", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "frozenlist", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "multidict", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "propcache", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "yarl", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/50/42/32cf8e7704ceb4481406eb87161349abb46a57fee3f008ba9cb610968646/aiohttp-3.13.3.tar.gz", hash = "sha256:a949eee43d3782f2daae4f4a2819b2cb9b0c5d3b7f7a927067cc84dafdbb9f88", size = 7844556, upload-time = "2026-01-03T17:33:05.204Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/40/a46b03ca03936f832bc7eaa47cfbb1ad012ba1be4790122ee4f4f8cba074/aiohttp-3.13.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7f9120f7093c2a32d9647abcaf21e6ad275b4fbec5b55969f978b1a97c7c86bf", size = 1720652, upload-time = "2026-01-03T17:30:50.974Z" }, - { url = "https://files.pythonhosted.org/packages/9e/84/da0c3ab1192eaf64782b03971ab4055b475d0db07b17eff925e8c93b3aa5/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4021b51936308aeea0367b8f006dc999ca02bc118a0cc78c303f50a2ff6afb91", size = 1682793, upload-time = "2026-01-03T17:31:03.024Z" }, - { url = "https://files.pythonhosted.org/packages/54/d4/438efabdf74e30aeceb890c3290bbaa449780583b1270b00661126b8aae4/aiohttp-3.13.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48e377758516d262bde50c2584fc6c578af272559c409eecbdd2bae1601184d6", size = 1717263, upload-time = "2026-01-03T17:31:23.296Z" }, - { url = "https://files.pythonhosted.org/packages/6a/ed/0a42b127a43712eda7807e7892c083eadfaf8429ca8fb619662a530a3aab/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7b5e8fe4de30df199155baaf64f2fcd604f4c678ed20910db8e2c66dc4b11603", size = 1679455, upload-time = "2026-01-03T17:31:34.76Z" }, - { url = "https://files.pythonhosted.org/packages/ea/76/8c1e5abbfe8e127c893fe7ead569148a4d5a799f7cf958d8c09f3eedf097/aiohttp-3.13.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:568f416a4072fbfae453dcf9a99194bbb8bdeab718e08ee13dfa2ba0e4bebf29", size = 1868835, upload-time = "2026-01-03T17:31:56.733Z" }, - { url = "https://files.pythonhosted.org/packages/12/12/70eedcac9134cfa3219ab7af31ea56bc877395b1ac30d65b1bc4b27d0438/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ca7f2bb6ba8348a3614c7918cc4bb73268c5ac2a207576b7afea19d3d9f64", size = 1795196, upload-time = "2026-01-03T17:32:09.59Z" }, -] - -[[package]] -name = "aiosignal" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "frozenlist", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, -] - -[[package]] -name = "annotated-doc" -version = "0.0.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, -] - -[[package]] -name = "annotated-types" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, -] - -[[package]] -name = "anthropic" -version = "0.86.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "distro", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "docstring-parser", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "httpx", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "jiter", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "sniffio", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/37/7a/8b390dc47945d3169875d342847431e5f7d5fa716b2e37494d57cfc1db10/anthropic-0.86.0.tar.gz", hash = "sha256:60023a7e879aa4fbb1fed99d487fe407b2ebf6569603e5047cfe304cebdaa0e5", size = 583820, upload-time = "2026-03-18T18:43:08.017Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/63/5f/67db29c6e5d16c8c9c4652d3efb934d89cb750cad201539141781d8eae14/anthropic-0.86.0-py3-none-any.whl", hash = "sha256:9d2bbd339446acce98858c5627d33056efe01f70435b22b63546fe7edae0cd57", size = 469400, upload-time = "2026-03-18T18:43:06.526Z" }, -] - -[[package]] -name = "anyio" -version = "4.12.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "idna", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685, upload-time = "2026-01-06T11:45:21.246Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592, upload-time = "2026-01-06T11:45:19.497Z" }, -] - -[[package]] -name = "apache-tvm-ffi" -version = "0.1.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6f/60/1e787a0b5ebf318483235be2a689ee367173983067e441b8379564f667c0/apache_tvm_ffi-0.1.9.tar.gz", hash = "sha256:d2d402587e8906de0a07f4746aa78f3d452c7efe3625d4bb39ac2ad693bce530", size = 2513731, upload-time = "2026-02-27T19:28:06.602Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/c0/6d3d54f50012255b41bc3e24944c086f63c4707c8686c7c6780e9283eb96/apache_tvm_ffi-0.1.9-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d503029e66c43b1a1cb1a42a1e9bb428c8a28dcbdec31c28e705472ca648a3a", size = 2203712, upload-time = "2026-02-27T19:27:25.867Z" }, - { url = "https://files.pythonhosted.org/packages/7a/4a/b469bcb2e1014cb84d336d2a59f42958a058251c577a4c2680cacad346e2/apache_tvm_ffi-0.1.9-cp312-abi3-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:87cacce81df55685fc6a76e1e3c5db1200e85e87bf5974b692c59d131b7bc622", size = 2130865, upload-time = "2026-02-27T19:27:29.092Z" }, - { url = "https://files.pythonhosted.org/packages/b4/a7/1e0643949e683fb3cfababd87058c0cfef122d1a3bb6ce703f719051b842/apache_tvm_ffi-0.1.9-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d1f4d2b7ec7b1213632e9a104e9330bfc3dec48decffa62114c33aa188c9f43a", size = 2215954, upload-time = "2026-02-27T19:27:35.872Z" }, - { url = "https://files.pythonhosted.org/packages/e3/f5/40bf0667330938efbfc0a51743cc53c79e41b4ece1a8abad3076192c9674/apache_tvm_ffi-0.1.9-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c0581dd6bfbce7b017ef85cfda08bbe38891cc4b3afbcfaa8bc2d383728e426", size = 2143850, upload-time = "2026-02-27T19:27:40.437Z" }, -] - -[[package]] -name = "astor" -version = "0.8.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/21/75b771132fee241dfe601d39ade629548a9626d1d39f333fde31bc46febe/astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e", size = 35090, upload-time = "2019-12-10T01:50:35.51Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/88/97eef84f48fa04fbd6750e62dcceafba6c63c81b7ac1420856c8dcc0a3f9/astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5", size = 27488, upload-time = "2019-12-10T01:50:33.628Z" }, -] - -[[package]] -name = "attrs" -version = "25.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, -] - -[[package]] -name = "blake3" -version = "1.0.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/75/aa/abcd75e9600987a0bc6cfe9b6b2ff3f0e2cb08c170addc6e76035b5c4cb3/blake3-1.0.8.tar.gz", hash = "sha256:513cc7f0f5a7c035812604c2c852a0c1468311345573de647e310aca4ab165ba", size = 117308, upload-time = "2025-10-14T06:47:48.83Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/57/e8a85fa261894bf7ce7af928ff3408aab60287ab8d58b55d13a3f700b619/blake3-1.0.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19fc6f2b7edab8acff6895fc6e38c19bd79f4c089e21153020c75dfc7397d52d", size = 370994, upload-time = "2025-10-14T06:46:07.398Z" }, - { url = "https://files.pythonhosted.org/packages/ee/6c/05b7a5a907df1be53a8f19e7828986fc6b608a44119641ef9c0804fbef15/blake3-1.0.8-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:0eab3318ec02f8e16fe549244791ace2ada2c259332f0c77ab22cf94dfff7130", size = 550003, upload-time = "2025-10-14T06:46:17.791Z" }, - { url = "https://files.pythonhosted.org/packages/13/da/722cebca11238f3b24d3cefd2361c9c9ea47cfa0ad9288eeb4d1e0b7cf93/blake3-1.0.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef153c5860d5bf1cc71aece69b28097d2a392913eb323d6b52555c875d0439fc", size = 370441, upload-time = "2025-10-14T06:46:26.29Z" }, - { url = "https://files.pythonhosted.org/packages/4a/04/fed09845b18d90862100c8e48308261e2f663aab25d3c71a6a0bdda6618b/blake3-1.0.8-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:497ef8096ec4ac1ffba9a66152cee3992337cebf8ea434331d8fd9ce5423d227", size = 549550, upload-time = "2025-10-14T06:46:35.23Z" }, - { url = "https://files.pythonhosted.org/packages/49/fa/b913eb9cc4af708c03e01e6b88a8bb3a74833ba4ae4b16b87e2829198e06/blake3-1.0.8-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a47939f04b89c5c6ff1e51e883e5efab1ea1bf01a02f4d208d216dddd63d0dd8", size = 370654, upload-time = "2025-10-14T06:46:43.907Z" }, - { url = "https://files.pythonhosted.org/packages/30/6d/561d537ffc17985e276e08bf4513f1c106f1fdbef571e782604dc4e44070/blake3-1.0.8-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:dd03ff08d1b6e4fdda1cd03826f971ae8966ef6f683a8c68aa27fb21904b5aa9", size = 549929, upload-time = "2025-10-14T06:46:52.494Z" }, - { url = "https://files.pythonhosted.org/packages/11/33/503b37220a3e2e31917ef13722efd00055af51c5e88ae30974c733d7ece6/blake3-1.0.8-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88d527c247f9609dc1d45a08fd243e39f0d5300d54c57e048de24d4fa9240ebb", size = 370220, upload-time = "2025-10-14T06:47:02.573Z" }, - { url = "https://files.pythonhosted.org/packages/96/09/e3eb5d60f97c01de23d9f434e6e1fc117efb466eaa1f6ddbbbcb62580d6e/blake3-1.0.8-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:5eb25bca3cee2e0dd746a214784fb36be6a43640c01c55b6b4e26196e72d076c", size = 549120, upload-time = "2025-10-14T06:47:11.713Z" }, -] - -[[package]] -name = "cachetools" -version = "7.0.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/dd/57fe3fdb6e65b25a5987fd2cdc7e22db0aef508b91634d2e57d22928d41b/cachetools-7.0.5.tar.gz", hash = "sha256:0cd042c24377200c1dcd225f8b7b12b0ca53cc2c961b43757e774ebe190fd990", size = 37367, upload-time = "2026-03-09T20:51:29.451Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/06/f3/39cf3367b8107baa44f861dc802cbf16263c945b62d8265d36034fc07bea/cachetools-7.0.5-py3-none-any.whl", hash = "sha256:46bc8ebefbe485407621d0a4264b23c080cedd913921bad7ac3ed2f26c183114", size = 13918, upload-time = "2026-03-09T20:51:27.33Z" }, -] - -[[package]] -name = "cbor2" -version = "5.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d9/8e/8b4fdde28e42ffcd741a37f4ffa9fb59cd4fe01625b544dfcfd9ccb54f01/cbor2-5.8.0.tar.gz", hash = "sha256:b19c35fcae9688ac01ef75bad5db27300c2537eb4ee00ed07e05d8456a0d4931", size = 107825, upload-time = "2025-12-30T18:44:22.455Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/57/66/177a3f089e69db69c987453ab4934086408c3338551e4984734597be9f80/cbor2-5.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:43efee947e5ab67d406d6e0dc61b5dee9d2f5e89ae176f90677a3741a20ca2e7", size = 285985, upload-time = "2025-12-30T18:43:55.733Z" }, - { url = "https://files.pythonhosted.org/packages/cc/33/9f92e107d78f88ac22723ac15d0259d220ba98c1d855e51796317f4c4114/cbor2-5.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:50f5c709561a71ea7970b4cd2bf9eda4eccacc0aac212577080fdfe64183e7f5", size = 278395, upload-time = "2025-12-30T18:43:58.497Z" }, - { url = "https://files.pythonhosted.org/packages/84/62/4671d24e557d7f5a74a01b422c538925140c0495e57decde7e566f91d029/cbor2-5.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6da25190fad3434ce99876b11d4ca6b8828df6ca232cf7344cd14ae1166fb718", size = 285005, upload-time = "2025-12-30T18:44:05.109Z" }, - { url = "https://files.pythonhosted.org/packages/b2/01/0650972b4dbfbebcfbe37cbba7fc3cd9019a8da6397ab3446e07175e342b/cbor2-5.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f8c40d32e5972047a777f9bf730870828f3cf1c43b3eb96fd0429c57a1d3b9e6", size = 277493, upload-time = "2025-12-30T18:44:07.609Z" }, - { url = "https://files.pythonhosted.org/packages/d6/4f/101071f880b4da05771128c0b89f41e334cff044dee05fb013c8f4be661c/cbor2-5.8.0-py3-none-any.whl", hash = "sha256:3727d80f539567b03a7aa11890e57798c67092c38df9e6c23abb059e0f65069c", size = 24374, upload-time = "2025-12-30T18:44:21.476Z" }, -] - -[[package]] -name = "certifi" -version = "2026.2.25" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" }, -] - -[[package]] -name = "cffi" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser", marker = "implementation_name != 'PyPy' and platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, - { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, - { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, - { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, - { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, - { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7b/60/e3bec1881450851b087e301bedc3daa9377a4d45f1c26aa90b0b235e38aa/charset_normalizer-3.4.6.tar.gz", hash = "sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6", size = 143363, upload-time = "2026-03-15T18:53:25.478Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/47/7b/20e809b89c69d37be748d98e84dce6820bf663cf19cf6b942c951a3e8f41/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843", size = 198527, upload-time = "2026-03-15T18:51:17.177Z" }, - { url = "https://files.pythonhosted.org/packages/75/13/f3550a3ac25b70f87ac98c40d3199a8503676c2f1620efbf8d42095cfc40/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd", size = 201923, upload-time = "2026-03-15T18:51:26.682Z" }, - { url = "https://files.pythonhosted.org/packages/56/60/09bb6c13a8c1016c2ed5c6a6488e4ffef506461aa5161662bd7636936fb1/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421", size = 199277, upload-time = "2026-03-15T18:51:42.953Z" }, - { url = "https://files.pythonhosted.org/packages/5e/bd/f736f7b9cc5e93a18b794a50346bb16fbfd6b37f99e8f306f7951d27c17c/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a", size = 202497, upload-time = "2026-03-15T18:51:52.012Z" }, - { url = "https://files.pythonhosted.org/packages/06/b6/fae511ca98aac69ecc35cde828b0a3d146325dd03d99655ad38fc2cc3293/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc", size = 208138, upload-time = "2026-03-15T18:52:08.239Z" }, - { url = "https://files.pythonhosted.org/packages/b5/38/16baa0affb957b3d880e5ac2144caf3f9d7de7bc4a91842e447fbb5e8b67/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7", size = 210769, upload-time = "2026-03-15T18:52:17.782Z" }, - { url = "https://files.pythonhosted.org/packages/2a/68/687187c7e26cb24ccbd88e5069f5ef00eba804d36dde11d99aad0838ab45/charset_normalizer-3.4.6-py3-none-any.whl", hash = "sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69", size = 61455, upload-time = "2026-03-15T18:53:23.833Z" }, -] - -[[package]] -name = "click" -version = "8.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", size = 295065, upload-time = "2025-11-15T20:45:42.706Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6", size = 108274, upload-time = "2025-11-15T20:45:41.139Z" }, -] - -[[package]] -name = "cloudpickle" -version = "3.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, -] - -[[package]] -name = "compressed-tensors" -version = "0.13.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "loguru", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "torch", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "transformers", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fc/65/88dd1c58fb9d0ded51b5c86471b937a1525f91fad2211a6f051dc1ea822d/compressed_tensors-0.13.0.tar.gz", hash = "sha256:23893824d3498ea3f1a829f14a8fa85f9a5e76a34c711a038b8d7c619ca9a67c", size = 200995, upload-time = "2025-12-16T16:03:55.397Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/b5/61ac2563c62490922b603c09113a083fd74af3630ec3931e769484d6dcb5/compressed_tensors-0.13.0-py3-none-any.whl", hash = "sha256:3518799c9baf034eb642efb551db6b0537b8713d45a64fe4def26f7f8d6cabec", size = 192620, upload-time = "2025-12-16T16:03:53.041Z" }, -] - -[[package]] -name = "cryptography" -version = "46.0.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "platform_machine == 'aarch64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/60/04/ee2a9e8542e4fa2773b81771ff8349ff19cdd56b7258a0cc442639052edb/cryptography-46.0.5.tar.gz", hash = "sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d", size = 750064, upload-time = "2026-02-10T19:18:38.255Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/9e/6b4397a3e3d15123de3b1806ef342522393d50736c13b20ec4c9ea6693a6/cryptography-46.0.5-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b", size = 4275637, upload-time = "2026-02-10T19:17:10.53Z" }, - { url = "https://files.pythonhosted.org/packages/37/53/a18500f270342d66bf7e4d9f091114e31e5ee9e7375a5aba2e85a91e0044/cryptography-46.0.5-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263", size = 4277528, upload-time = "2026-02-10T19:17:13.853Z" }, - { url = "https://files.pythonhosted.org/packages/84/29/65b55622bde135aedf4565dc509d99b560ee4095e56989e815f8fd2aa910/cryptography-46.0.5-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2", size = 4277038, upload-time = "2026-02-10T19:17:20.256Z" }, - { url = "https://files.pythonhosted.org/packages/f9/e5/3fb22e37f66827ced3b902cf895e6a6bc1d095b5b26be26bd13c441fdf19/cryptography-46.0.5-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82", size = 4405497, upload-time = "2026-02-10T19:17:26.66Z" }, - { url = "https://files.pythonhosted.org/packages/67/c8/581a6702e14f0898a0848105cbefd20c058099e2c2d22ef4e476dfec75d7/cryptography-46.0.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678", size = 4265728, upload-time = "2026-02-10T19:17:35.569Z" }, - { url = "https://files.pythonhosted.org/packages/f8/67/8ffdbf7b65ed1ac224d1c2df3943553766914a8ca718747ee3871da6107e/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee", size = 4270291, upload-time = "2026-02-10T19:17:38.748Z" }, - { url = "https://files.pythonhosted.org/packages/d8/d2/b27631f401ddd644e94c5cf33c9a4069f72011821cf3dc7309546b0642a0/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4", size = 4270072, upload-time = "2026-02-10T19:17:45.481Z" }, - { url = "https://files.pythonhosted.org/packages/5f/eb/eee00b28c84c726fe8fa0158c65afe312d9c3b78d9d01daf700f1f6e37ff/cryptography-46.0.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826", size = 4396728, upload-time = "2026-02-10T19:17:50.058Z" }, - { url = "https://files.pythonhosted.org/packages/0f/04/c85bdeab78c8bc77b701bf0d9bdcf514c044e18a46dcff330df5448631b0/cryptography-46.0.5-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18", size = 4275349, upload-time = "2026-02-10T19:17:58.419Z" }, - { url = "https://files.pythonhosted.org/packages/a1/a6/a7cb7010bec4b7c5692ca6f024150371b295ee1c108bdc1c400e4c44562b/cryptography-46.0.5-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a", size = 4276980, upload-time = "2026-02-10T19:18:02.379Z" }, - { url = "https://files.pythonhosted.org/packages/41/e2/df40a31d82df0a70a0daf69791f91dbb70e47644c58581d654879b382d11/cryptography-46.0.5-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1", size = 4276755, upload-time = "2026-02-10T19:18:09.813Z" }, - { url = "https://files.pythonhosted.org/packages/02/ef/ffeb542d3683d24194a38f66ca17c0a4b8bf10631feef44a7ef64e631b1a/cryptography-46.0.5-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4", size = 4404160, upload-time = "2026-02-10T19:18:14.375Z" }, -] - -[[package]] -name = "cuda-bindings" -version = "13.0.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cuda-pathfinder", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/36/41ccc303eb6be8ae82c5edd2ccae938876e8a794660e8bb96a193174a978/cuda_bindings-13.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb16a7f769c9c67469add7a1d9f6c14dd44637f6921cb6b9eb82cb5015b35c3d", size = 11537064, upload-time = "2025-10-21T15:09:07.84Z" }, - { url = "https://files.pythonhosted.org/packages/11/67/9656e003f18c5b32e1a2496998b24f4355ec978c5f3639b0eb9f6d0ff83f/cuda_bindings-13.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c859e326c776a47e66c50386a10c84fe34291eb6e711610c9fd7cc27d446334f", size = 11522409, upload-time = "2025-10-21T15:09:14.674Z" }, - { url = "https://files.pythonhosted.org/packages/e8/99/0042dc5e98e3364480b1aaabc0f5c150d037825b264bba35ac7a883e46ee/cuda_bindings-13.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7c7e6e89cdfc9b34f16a065cc6ad6c4bab19ce5dcef8da3ace8ad10bda899fa0", size = 11594384, upload-time = "2025-10-21T15:09:21.938Z" }, - { url = "https://files.pythonhosted.org/packages/6f/2c/ec611e27ba48a9056f3b0610c5e27727e539f3905356cfe07acea18e772c/cuda_bindings-13.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ed06ef3507bd0aefb0da367e3d15676a8c7443bd68a88f298562d60b41078c20", size = 11521928, upload-time = "2025-10-21T15:09:30.714Z" }, -] - -[[package]] -name = "cuda-pathfinder" -version = "1.4.3" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/59/911a1a597264f1fb7ac176995a0f0b6062e37f8c1b6e0f23071a76838507/cuda_pathfinder-1.4.3-py3-none-any.whl", hash = "sha256:4345d8ead1f701c4fb8a99be6bc1843a7348b6ba0ef3b031f5a2d66fb128ae4c", size = 47951, upload-time = "2026-03-16T21:31:25.526Z" }, -] - -[[package]] -name = "cuda-python" -version = "13.0.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cuda-bindings", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "cuda-pathfinder", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/31/5f/beaa12a11b051027eec0b041df01c6690db4f02e3b2e8fadd5a0eeb4df52/cuda_python-13.0.3-py3-none-any.whl", hash = "sha256:914cd7e2dd075bd06a2d5121c1d9ccdd3d0c94b03ea5a44dbd98d24d8ed93bab", size = 7605, upload-time = "2025-10-21T15:48:59.222Z" }, -] - -[[package]] -name = "depyf" -version = "0.20.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "astor", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "dill", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/88/35/83fb0178212279aa0af031031905804c6de5618435d229f41ed21bb9ad2c/depyf-0.20.0.tar.gz", hash = "sha256:fb7683bd72c44f67b56029df2c47721e9a02ffa4d7b19095f1c54c4ebf797a98", size = 6168761, upload-time = "2025-10-13T12:33:38.589Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/65/4df6936130b56e1429114e663e7c1576cf845f3aef1b2dd200c0a5d19dba/depyf-0.20.0-py3-none-any.whl", hash = "sha256:d31effad4261cebecb58955d832e448ace88f432328f95f82fd99c30fd9308d4", size = 39381, upload-time = "2025-10-13T12:33:33.647Z" }, -] - -[[package]] -name = "dill" -version = "0.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/81/e1/56027a71e31b02ddc53c7d65b01e68edf64dea2932122fe7746a516f75d5/dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa", size = 187315, upload-time = "2026-01-19T02:36:56.85Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019, upload-time = "2026-01-19T02:36:55.663Z" }, -] - -[[package]] -name = "diskcache" -version = "5.6.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/21/1c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6/diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc", size = 67916, upload-time = "2023-08-31T06:12:00.316Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550, upload-time = "2023-08-31T06:11:58.822Z" }, -] - -[[package]] -name = "distro" -version = "1.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, -] - -[[package]] -name = "dnspython" -version = "2.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, -] - -[[package]] -name = "docstring-parser" -version = "0.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/9d/c3b43da9515bd270df0f80548d9944e389870713cc1fe2b8fb35fe2bcefd/docstring_parser-0.17.0.tar.gz", hash = "sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912", size = 27442, upload-time = "2025-07-21T07:35:01.868Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl", hash = "sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708", size = 36896, upload-time = "2025-07-21T07:35:00.684Z" }, -] - -[[package]] -name = "einops" -version = "0.8.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2c/77/850bef8d72ffb9219f0b1aac23fbc1bf7d038ee6ea666f331fa273031aa2/einops-0.8.2.tar.gz", hash = "sha256:609da665570e5e265e27283aab09e7f279ade90c4f01bcfca111f3d3e13f2827", size = 56261, upload-time = "2026-01-26T04:13:17.638Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/09/f8d8f8f31e4483c10a906437b4ce31bdf3d6d417b73fe33f1a8b59e34228/einops-0.8.2-py3-none-any.whl", hash = "sha256:54058201ac7087911181bfec4af6091bb59380360f069276601256a76af08193", size = 65638, upload-time = "2026-01-26T04:13:18.546Z" }, -] - -[[package]] -name = "email-validator" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "dnspython", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "idna", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, -] - -[[package]] -name = "fastapi" -version = "0.135.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "annotated-doc", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "starlette", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-inspection", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e7/7b/f8e0211e9380f7195ba3f3d40c292594fd81ba8ec4629e3854c353aaca45/fastapi-0.135.1.tar.gz", hash = "sha256:d04115b508d936d254cea545b7312ecaa58a7b3a0f84952535b4c9afae7668cd", size = 394962, upload-time = "2026-03-01T18:18:29.369Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/72/42e900510195b23a56bde950d26a51f8b723846bfcaa0286e90287f0422b/fastapi-0.135.1-py3-none-any.whl", hash = "sha256:46e2fc5745924b7c840f71ddd277382af29ce1cdb7d5eab5bf697e3fb9999c9e", size = 116999, upload-time = "2026-03-01T18:18:30.831Z" }, -] - -[package.optional-dependencies] -standard = [ - { name = "email-validator", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "fastapi-cli", extra = ["standard"], marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "httpx", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "jinja2", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic-extra-types", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic-settings", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "python-multipart", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "uvicorn", extra = ["standard"], marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] - -[[package]] -name = "fastapi-cli" -version = "0.0.24" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "rich-toolkit", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typer", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "uvicorn", extra = ["standard"], marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6e/58/74797ae9e4610cfa0c6b34c8309096d3b20bb29be3b8b5fbf1004d10fa5f/fastapi_cli-0.0.24.tar.gz", hash = "sha256:1afc9c9e21d7ebc8a3ca5e31790cd8d837742be7e4f8b9236e99cb3451f0de00", size = 19043, upload-time = "2026-02-24T10:45:10.476Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/4b/68f9fe268e535d79c76910519530026a4f994ce07189ac0dded45c6af825/fastapi_cli-0.0.24-py3-none-any.whl", hash = "sha256:4a1f78ed798f106b4fee85ca93b85d8fe33c0a3570f775964d37edb80b8f0edc", size = 12304, upload-time = "2026-02-24T10:45:09.552Z" }, -] - -[package.optional-dependencies] -standard = [ - { name = "fastapi-cloud-cli", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "uvicorn", extra = ["standard"], marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] - -[[package]] -name = "fastapi-cloud-cli" -version = "0.15.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "fastar", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "httpx", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic", extra = ["email"], marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "rich-toolkit", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "rignore", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "sentry-sdk", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typer", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "uvicorn", extra = ["standard"], marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/63/e1/05c44e7bbc619e980fab0236cff9f5f323ac1aaa79434b4906febf98b1d3/fastapi_cloud_cli-0.15.0.tar.gz", hash = "sha256:d02515231f3f505f7669c20920343934570a88a08af9f9a6463ca2807f27ffe5", size = 45309, upload-time = "2026-03-11T22:31:32.455Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/cc/1ccca747f5609be27186ea8c9219449142f40e3eded2c6089bba6a6ecc82/fastapi_cloud_cli-0.15.0-py3-none-any.whl", hash = "sha256:9ffcf90bd713747efa65447620d29cfbb7b3f7de38d97467952ca6346e418d70", size = 32267, upload-time = "2026-03-11T22:31:33.499Z" }, -] - -[[package]] -name = "fastar" -version = "0.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/69/e7/f89d54fb04104114dd0552836dc2b47914f416cc0e200b409dd04a33de5e/fastar-0.8.0.tar.gz", hash = "sha256:f4d4d68dbf1c4c2808f0e730fac5843493fc849f70fe3ad3af60dfbaf68b9a12", size = 68524, upload-time = "2025-11-26T02:36:00.72Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/39/ba/e24915045852e30014ec6840446975c03f4234d1c9270394b51d3ad18394/fastar-0.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27b404db2b786b65912927ce7f3790964a4bcbde42cdd13091b82a89cd655e1c", size = 765044, upload-time = "2025-11-26T02:32:48.187Z" }, - { url = "https://files.pythonhosted.org/packages/ca/cf/69e16a17961570a755c37ffb5b5aa7610d2e77807625f537989da66f2a9d/fastar-0.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a922f8439231fa0c32b15e8d70ff6d415619b9d40492029dabbc14a0c53b5f18", size = 986227, upload-time = "2025-11-26T02:34:55.06Z" }, - { url = "https://files.pythonhosted.org/packages/bf/02/3ba1267ee5ba7314e29c431cf82eaa68586f2c40cdfa08be3632b7d07619/fastar-0.8.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ae0ff7c0a1c7e1428404b81faee8aebef466bfd0be25bfe4dabf5d535c68741", size = 764667, upload-time = "2025-11-26T02:32:49.606Z" }, - { url = "https://files.pythonhosted.org/packages/42/95/b604ed536544005c9f1aee7c4c74b00150db3d8d535cd8232dc20f947063/fastar-0.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e7f07c4a3dada7757a8fc430a5b4a29e6ef696d2212747213f57086ffd970316", size = 985961, upload-time = "2025-11-26T02:34:56.401Z" }, - { url = "https://files.pythonhosted.org/packages/b2/72/486421f5a8c0c377cc82e7a50c8a8ea899a6ec2aa72bde8f09fb667a2dc8/fastar-0.8.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74ebfecef3fe6d7a90355fac1402fd30636988332a1d33f3e80019a10782bb24", size = 763863, upload-time = "2025-11-26T02:32:51.051Z" }, - { url = "https://files.pythonhosted.org/packages/02/9e/d38edc1f4438cd047e56137c26d94783ffade42e1b3bde620ccf17b771ef/fastar-0.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:dfba078fcd53478032fd0ceed56960ec6b7ff0511cfc013a8a3a4307e3a7bac4", size = 985653, upload-time = "2025-11-26T02:34:57.884Z" }, -] - -[[package]] -name = "fastsafetensors" -version = "0.2.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typer", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f2/c2/1504b51a4ce61cd0f6b8c6a88c0dbed22df011a2aeb99ade35e528b0e091/fastsafetensors-0.2.2.tar.gz", hash = "sha256:67c06bdbb9855070ebb036e1ce7a61a71d2ce722bbd5457534af602dd4734249", size = 52029, upload-time = "2026-02-10T14:12:34.706Z" } - -[[package]] -name = "filelock" -version = "3.25.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/b8/00651a0f559862f3bb7d6f7477b192afe3f583cc5e26403b44e59a55ab34/filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694", size = 40480, upload-time = "2026-03-11T20:45:38.487Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70", size = 26759, upload-time = "2026-03-11T20:45:37.437Z" }, -] - -[[package]] -name = "flashinfer-python" -version = "0.6.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "apache-tvm-ffi", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "click", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "einops", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "ninja", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "numpy", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cudnn-frontend", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cutlass-dsl", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-ml-py", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "packaging", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "requests", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "tabulate", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "torch", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "tqdm", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/03/70/c5a235297351021f5d3d3233523a85f5a6468495587489ad2f257e8eafe2/flashinfer_python-0.6.6.tar.gz", hash = "sha256:0730ba7c7aad332961933bcebc5119762797161ede57d955f6fd199818ed1d92", size = 5344156, upload-time = "2026-03-11T01:36:21.434Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/61/385d06755f3ab66333018285657adf0daf8a90a129448231fd09e315bd2e/flashinfer_python-0.6.6-py3-none-any.whl", hash = "sha256:078f158636969eec1a0d3dea19c3ca90b426b66df89bbf7b7b8276ce2ec08148", size = 7817047, upload-time = "2026-03-11T01:36:19.198Z" }, -] - -[[package]] -name = "frozenlist" -version = "1.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" }, - { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" }, - { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" }, - { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" }, - { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" }, - { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" }, - { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" }, - { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" }, - { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, -] - -[[package]] -name = "fsspec" -version = "2026.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/7c/f60c259dcbf4f0c47cc4ddb8f7720d2dcdc8888c8e5ad84c73ea4531cc5b/fsspec-2026.2.0.tar.gz", hash = "sha256:6544e34b16869f5aacd5b90bdf1a71acb37792ea3ddf6125ee69a22a53fb8bff", size = 313441, upload-time = "2026-02-05T21:50:53.743Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl", hash = "sha256:98de475b5cb3bd66bedd5c4679e87b4fdfe1a3bf4d707b151b3c07e58c9a2437", size = 202505, upload-time = "2026-02-05T21:50:51.819Z" }, -] - -[[package]] -name = "gguf" -version = "0.18.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pyyaml", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "requests", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "tqdm", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3f/26/7622a41c39db9d7090225a4bf8368550e59694dcf7313b44f9a82b501209/gguf-0.18.0.tar.gz", hash = "sha256:b4659093d5d0dccdb5902a904d54b327f4052879fe5e90946ad5fce9f8018c2e", size = 107170, upload-time = "2026-02-27T15:05:39.254Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5e/0c/e0f1eae7535a97476fb903f65301e35da2a66182b8161066b7eb312b2cb8/gguf-0.18.0-py3-none-any.whl", hash = "sha256:af93f7ef198a265cbde5fa6a6b3101528bca285903949ab0a3e591cd993a1864", size = 114244, upload-time = "2026-02-27T15:05:37.991Z" }, -] - -[[package]] -name = "googleapis-common-protos" -version = "1.73.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "protobuf", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/99/96/a0205167fa0154f4a542fd6925bdc63d039d88dab3588b875078107e6f06/googleapis_common_protos-1.73.0.tar.gz", hash = "sha256:778d07cd4fbeff84c6f7c72102f0daf98fa2bfd3fa8bea426edc545588da0b5a", size = 147323, upload-time = "2026-03-06T21:53:09.727Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/28/23eea8acd65972bbfe295ce3666b28ac510dfcb115fac089d3edb0feb00a/googleapis_common_protos-1.73.0-py3-none-any.whl", hash = "sha256:dfdaaa2e860f242046be561e6d6cb5c5f1541ae02cfbcb034371aadb2942b4e8", size = 297578, upload-time = "2026-03-06T21:52:33.933Z" }, -] - -[[package]] -name = "grpcio" -version = "1.78.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/8a/3d098f35c143a89520e568e6539cc098fcd294495910e359889ce8741c84/grpcio-1.78.0.tar.gz", hash = "sha256:7382b95189546f375c174f53a5fa873cef91c4b8005faa05cc5b3beea9c4f1c5", size = 12852416, upload-time = "2026-02-06T09:57:18.093Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/93/b59fe7832ff6ae3c78b813ea43dac60e295fa03606d14d89d2e0ec29f4f3/grpcio-1.78.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8f2ac84905d12918e4e55a16da17939eb63e433dc11b677267c35568aa63fc84", size = 6478628, upload-time = "2026-02-06T09:55:58.533Z" }, - { url = "https://files.pythonhosted.org/packages/bf/9a/289c32e301b85bdb67d7ec68b752155e674ee3ba2173a1858f118e399ef3/grpcio-1.78.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2045397e63a7a0ee7957c25f7dbb36ddc110e0cfb418403d110c0a7a68a844e9", size = 7268838, upload-time = "2026-02-06T09:56:08.397Z" }, - { url = "https://files.pythonhosted.org/packages/0e/1c/bbe2f8216a5bd3036119c544d63c2e592bdf4a8ec6e4a1867592f4586b26/grpcio-1.78.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8dfffba826efcf366b1e3ccc37e67afe676f290e13a3b48d31a46739f80a8724", size = 6487803, upload-time = "2026-02-06T09:56:27.367Z" }, - { url = "https://files.pythonhosted.org/packages/34/84/0de28eac0377742679a510784f049738a80424b17287739fc47d63c2439e/grpcio-1.78.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:3c586ac70e855c721bda8f548d38c3ca66ac791dc49b66a8281a1f99db85e452", size = 7277897, upload-time = "2026-02-06T09:56:34.915Z" }, -] - -[[package]] -name = "h11" -version = "0.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, -] - -[[package]] -name = "hf-xet" -version = "1.4.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/09/08/23c84a26716382c89151b5b447b4beb19e3345f3a93d3b73009a71a57ad3/hf_xet-1.4.2.tar.gz", hash = "sha256:b7457b6b482d9e0743bd116363239b1fa904a5e65deede350fbc0c4ea67c71ea", size = 672357, upload-time = "2026-03-13T06:58:51.077Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/97/c1/a0a44d1f98934f7bdf17f7a915b934f9fca44bb826628c553589900f6df8/hf_xet-1.4.2-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:769431385e746c92dc05492dde6f687d304584b89c33d79def8367ace06cb555", size = 3988266, upload-time = "2026-03-13T06:58:22.887Z" }, - { url = "https://files.pythonhosted.org/packages/7a/82/be713b439060e7d1f1d93543c8053d4ef2fe7e6922c5b31642eaa26f3c4b/hf_xet-1.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c9dd1c1bc4cc56168f81939b0e05b4c36dd2d28c13dc1364b17af89aa0082496", size = 4188513, upload-time = "2026-03-13T06:58:40.858Z" }, - { url = "https://files.pythonhosted.org/packages/eb/01/f89ebba4e369b4ed699dcb60d3152753870996f41c6d22d3d7cac01310e1/hf_xet-1.4.2-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:a296744d771a8621ad1d50c098d7ab975d599800dae6d48528ba3944e5001ba0", size = 3987788, upload-time = "2026-03-13T06:58:29.139Z" }, - { url = "https://files.pythonhosted.org/packages/84/4d/8a53e5ffbc2cc33bbf755382ac1552c6d9af13f623ed125fe67cc3e6772f/hf_xet-1.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f563f7efe49588b7d0629d18d36f46d1658fe7e08dce3fa3d6526e1c98315e2d", size = 4188315, upload-time = "2026-03-13T06:58:48.017Z" }, - { url = "https://files.pythonhosted.org/packages/68/47/d6cf4a39ecf6c7705f887a46f6ef5c8455b44ad9eb0d391aa7e8a2ff7fea/hf_xet-1.4.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c3b3c6a882016b94b6c210957502ff7877802d0dbda8ad142c8595db8b944271", size = 3992847, upload-time = "2026-03-13T06:58:25.989Z" }, - { url = "https://files.pythonhosted.org/packages/2d/ef/e80815061abff54697239803948abc665c6b1d237102c174f4f7a9a5ffc5/hf_xet-1.4.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9d9a634cc929cfbaf2e1a50c0e532ae8c78fa98618426769480c58501e8c8ac2", size = 4193843, upload-time = "2026-03-13T06:58:44.59Z" }, -] - -[[package]] -name = "httpcore" -version = "1.0.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "h11", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, -] - -[[package]] -name = "httptools" -version = "0.7.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b5/46/120a669232c7bdedb9d52d4aeae7e6c7dfe151e99dc70802e2fc7a5e1993/httptools-0.7.1.tar.gz", hash = "sha256:abd72556974f8e7c74a259655924a717a2365b236c882c3f6f8a45fe94703ac9", size = 258961, upload-time = "2025-10-10T03:55:08.559Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/70/023d7ce117993107be88d2cbca566a7c1323ccbaf0af7eabf2064fe356f6/httptools-0.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69d4f9705c405ae3ee83d6a12283dc9feba8cc6aaec671b412917e644ab4fa66", size = 473268, upload-time = "2025-10-10T03:54:49.993Z" }, - { url = "https://files.pythonhosted.org/packages/32/4d/9dd616c38da088e3f436e9a616e1d0cc66544b8cdac405cc4e81c8679fc7/httptools-0.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:44c8f4347d4b31269c8a9205d8a5ee2df5322b09bbbd30f8f862185bb6b05346", size = 455517, upload-time = "2025-10-10T03:54:51.066Z" }, - { url = "https://files.pythonhosted.org/packages/e0/4a/a548bdfae6369c0d078bab5769f7b66f17f1bfaa6fa28f81d6be6959066b/httptools-0.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df091cf961a3be783d6aebae963cc9b71e00d57fa6f149025075217bc6a55a7b", size = 470831, upload-time = "2025-10-10T03:54:57.219Z" }, - { url = "https://files.pythonhosted.org/packages/4d/31/14df99e1c43bd132eec921c2e7e11cda7852f65619bc0fc5bdc2d0cb126c/httptools-0.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f084813239e1eb403ddacd06a30de3d3e09a9b76e7894dcda2b22f8a726e9c60", size = 452631, upload-time = "2025-10-10T03:54:58.219Z" }, -] - -[[package]] -name = "httpx" -version = "0.28.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "certifi", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "httpcore", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "idna", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, -] - -[[package]] -name = "httpx-sse" -version = "0.4.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0f/4c/751061ffa58615a32c31b2d82e8482be8dd4a89154f003147acee90f2be9/httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d", size = 15943, upload-time = "2025-10-10T21:48:22.271Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" }, -] - -[[package]] -name = "huggingface-hub" -version = "0.36.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "filelock", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "fsspec", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "hf-xet", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "packaging", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pyyaml", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "requests", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "tqdm", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7c/b7/8cb61d2eece5fb05a83271da168186721c450eb74e3c31f7ef3169fa475b/huggingface_hub-0.36.2.tar.gz", hash = "sha256:1934304d2fb224f8afa3b87007d58501acfda9215b334eed53072dd5e815ff7a", size = 649782, upload-time = "2026-02-06T09:24:13.098Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/af/48ac8483240de756d2438c380746e7130d1c6f75802ef22f3c6d49982787/huggingface_hub-0.36.2-py3-none-any.whl", hash = "sha256:48f0c8eac16145dfce371e9d2d7772854a4f591bcb56c9cf548accf531d54270", size = 566395, upload-time = "2026-02-06T09:24:11.133Z" }, -] - -[[package]] -name = "idna" -version = "3.11" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, -] - -[[package]] -name = "ijson" -version = "3.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f4/57/60d1a6a512f2f0508d0bc8b4f1cc5616fd3196619b66bd6a01f9155a1292/ijson-3.5.0.tar.gz", hash = "sha256:94688760720e3f5212731b3cb8d30267f9a045fb38fb3870254e7b9504246f31", size = 68658, upload-time = "2026-02-24T03:58:30.974Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/d2/738b88752a70c3be1505faa4dcd7110668c2712e582a6a36488ed1e295d4/ijson-3.5.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9577449313cc94be89a4fe4b3e716c65f09cc19636d5a6b2861c4e80dddebd58", size = 149820, upload-time = "2026-02-24T03:57:26.062Z" }, - { url = "https://files.pythonhosted.org/packages/cc/a3/b0037119f75131b78cb00acc2657b1a9d0435475f1f2c5f8f5a170b66b9c/ijson-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0eb402ab026ffb37a918d75af2b7260fe6cfbce13232cc83728a714dd30bd81d", size = 151027, upload-time = "2026-02-24T03:57:28.522Z" }, - { url = "https://files.pythonhosted.org/packages/ea/a2/f1346d5299e79b988ab472dc773d5381ec2d57c23cb2f1af3ede4a810e62/ijson-3.5.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:009f41443e1521847701c6d87fa3923c0b1961be3c7e7de90947c8cb92ea7c44", size = 216884, upload-time = "2026-02-24T03:57:38.346Z" }, - { url = "https://files.pythonhosted.org/packages/7f/7c/18b1c1df6951ca056782d7580ec40cea4ff9a27a0947d92640d1cc8c4ae3/ijson-3.5.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:945b7abcfcfeae2cde17d8d900870f03536494245dda7ad4f8d056faa303256c", size = 211364, upload-time = "2026-02-24T03:57:40.953Z" }, - { url = "https://files.pythonhosted.org/packages/25/0e/27b887879ba6a5bc29766e3c5af4942638c952220fd63e1e442674f7883a/ijson-3.5.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:903cbdc350173605220edc19796fbea9b2203c8b3951fb7335abfa8ed37afda8", size = 149850, upload-time = "2026-02-24T03:57:50.329Z" }, - { url = "https://files.pythonhosted.org/packages/8e/90/e552f6495063b235cf7fa2c592f6597c057077195e517b842a0374fd470c/ijson-3.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:6b2dcf6349e6042d83f3f8c39ce84823cf7577eba25bac5aae5e39bbbbbe9c1c", size = 150438, upload-time = "2026-02-24T03:57:52.198Z" }, - { url = "https://files.pythonhosted.org/packages/f9/80/796ea0e391b7e2d45c5b1b451734bba03f81c2984cf955ea5eaa6c4920ad/ijson-3.5.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22a51b4f9b81f12793731cf226266d1de2112c3c04ba4a04117ad4e466897e05", size = 217820, upload-time = "2026-02-24T03:58:02.598Z" }, - { url = "https://files.pythonhosted.org/packages/6a/ad/8b3105a78774fd4a65e534a21d975ef3a77e189489fe3029ebcaeba5e243/ijson-3.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f7168a39e8211107666d71b25693fd1b2bac0b33735ef744114c403c6cac21e1", size = 211843, upload-time = "2026-02-24T03:58:05.836Z" }, -] - -[[package]] -name = "importlib-metadata" -version = "8.7.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "zipp", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" }, -] - -[[package]] -name = "interegular" -version = "0.3.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dc/9d/8b6dde58a028a3962ce17e84d5fe73758df61378e00ef8ac3d85da34b0ff/interegular-0.3.3.tar.gz", hash = "sha256:d9b697b21b34884711399ba0f0376914b81899ce670032486d0d048344a76600", size = 24705, upload-time = "2024-01-06T23:01:22.372Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/01/72d6472f80651673716d1deda2a5bbb633e563ecf94f4479da5519d69d25/interegular-0.3.3-py37-none-any.whl", hash = "sha256:b0c07007d48c89d6d19f7204972d369b2a77222722e126b6aa63aa721dc3b19c", size = 23635, upload-time = "2024-01-06T23:01:20.829Z" }, -] - -[[package]] -name = "jinja2" -version = "3.1.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markupsafe", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, -] - -[[package]] -name = "jiter" -version = "0.13.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0d/5e/4ec91646aee381d01cdb9974e30882c9cd3b8c5d1079d6b5ff4af522439a/jiter-0.13.0.tar.gz", hash = "sha256:f2839f9c2c7e2dffc1bc5929a510e14ce0a946be9365fd1219e7ef342dae14f4", size = 164847, upload-time = "2026-02-02T12:37:56.441Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/da/92/b25d2ec333615f5f284f3a4024f7ce68cfa0604c322c6808b2344c7f5d2b/jiter-0.13.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7e1d61da332ec412350463891923f960c3073cf1aae93b538f0bb4c8cd46efb", size = 350560, upload-time = "2026-02-02T12:36:19.746Z" }, - { url = "https://files.pythonhosted.org/packages/d1/84/e0787856196d6d346264d6dcccb01f741e5f0bd014c1d9a2ebe149caf4f3/jiter-0.13.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2d08c9475d48b92892583df9da592a0e2ac49bcd41fae1fec4f39ba6cf107820", size = 513543, upload-time = "2026-02-02T12:36:28.217Z" }, - { url = "https://files.pythonhosted.org/packages/52/56/d19a9a194afa37c1728831e5fb81b7722c3de18a3109e8f282bfc23e587a/jiter-0.13.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade8cb6ff5632a62b7dbd4757d8c5573f7a2e9ae285d6b5b841707d8363205ef", size = 346850, upload-time = "2026-02-02T12:36:38.058Z" }, - { url = "https://files.pythonhosted.org/packages/f3/b9/7257ac59778f1cd025b26a23c5520a36a424f7f1b068f2442a5b499b7464/jiter-0.13.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:879e768938e7b49b5e90b7e3fecc0dbec01b8cb89595861fb39a8967c5220d09", size = 353880, upload-time = "2026-02-02T12:36:47.365Z" }, - { url = "https://files.pythonhosted.org/packages/18/23/58325ef99390d6d40427ed6005bf1ad54f2577866594bcf13ce55675f87d/jiter-0.13.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:c05b450d37ba0c9e21c77fef1f205f56bcee2330bddca68d344baebfc55ae0df", size = 514933, upload-time = "2026-02-02T12:36:58.909Z" }, - { url = "https://files.pythonhosted.org/packages/4f/3b/f77d342a54d4ebcd128e520fc58ec2f5b30a423b0fd26acdfc0c6fef8e26/jiter-0.13.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e104da1db1c0991b3eaed391ccd650ae8d947eab1480c733e5a3fb28d4313e40", size = 351438, upload-time = "2026-02-02T12:37:07.189Z" }, - { url = "https://files.pythonhosted.org/packages/df/2d/03963fc0804e6109b82decfb9974eb92df3797fe7222428cae12f8ccaa0c/jiter-0.13.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:e5562a0f0e90a6223b704163ea28e831bd3a9faa3512a711f031611e6b06c939", size = 514986, upload-time = "2026-02-02T12:37:16.326Z" }, -] - -[[package]] -name = "jmespath" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d3/59/322338183ecda247fb5d1763a6cbe46eff7222eaeebafd9fa65d4bf5cb11/jmespath-1.1.0.tar.gz", hash = "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", size = 27377, upload-time = "2026-01-22T16:35:26.279Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl", hash = "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64", size = 20419, upload-time = "2026-01-22T16:35:24.919Z" }, -] - -[[package]] -name = "jsonschema" -version = "4.26.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "jsonschema-specifications", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "referencing", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "rpds-py", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, -] - -[[package]] -name = "jsonschema-specifications" -version = "2025.9.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "referencing", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, -] - -[[package]] -name = "lark" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132, upload-time = "2024-08-13T19:49:00.652Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036, upload-time = "2024-08-13T19:48:58.603Z" }, -] - -[[package]] -name = "llguidance" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/95/48/3f7a9d3ff1b36bba92b5107a3a21286821227afe9ea464736133994d61fb/llguidance-1.3.0.tar.gz", hash = "sha256:861249afd51dc325646834462ea827e57a5c2b2042e108e6aae7059fdad9104d", size = 1070460, upload-time = "2025-10-20T19:58:44.164Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/11/44389d3d1526d7a5c38ffd587a5ebc61d7bee443ac1dea95f2089ad58f5f/llguidance-1.3.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f6caca5d78db7f76e1fbb0fff8607b861c32d47fa3d5dee2fc49de27ee269df", size = 2835242, upload-time = "2025-10-20T19:58:34.518Z" }, -] - -[[package]] -name = "llvmlite" -version = "0.44.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/89/6a/95a3d3610d5c75293d5dbbb2a76480d5d4eeba641557b69fe90af6c5b84e/llvmlite-0.44.0.tar.gz", hash = "sha256:07667d66a5d150abed9157ab6c0b9393c9356f229784a4385c02f99e94fc94d4", size = 171880, upload-time = "2025-01-20T11:14:41.342Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/e1/12c5f20cb9168fb3464a34310411d5ad86e4163c8ff2d14a2b57e5cc6bac/llvmlite-0.44.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa0097052c32bf721a4efc03bd109d335dfa57d9bffb3d4c24cc680711b8b4fc", size = 41184245, upload-time = "2025-01-20T11:14:31.731Z" }, -] - -[[package]] -name = "lm-format-enforcer" -version = "0.11.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "interegular", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "packaging", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pyyaml", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/84/d5/41cd417ba7dfdbbcfe46cebf81fb3dfd7c591b89897560ad05bb410a465d/lm_format_enforcer-0.11.3.tar.gz", hash = "sha256:e68081c108719cce284a9bcc889709b26ffb085a1945b5eba3a12cfa96d528da", size = 40258, upload-time = "2025-08-24T19:37:47.527Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/ef/11292bb0b85cf4c93447cab5a29f64576ed14d3ab4280e35ddd23486594a/lm_format_enforcer-0.11.3-py3-none-any.whl", hash = "sha256:cf586350875def1ae7a8fba84fcbbfc8371424b6c9d05c1fcba70aa233fbf06f", size = 45418, upload-time = "2025-08-24T19:37:46.325Z" }, -] - -[[package]] -name = "loguru" -version = "0.7.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" }, -] - -[[package]] -name = "markdown-it-py" -version = "4.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mdurl", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, -] - -[[package]] -name = "markupsafe" -version = "3.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, - { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, - { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, - { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, - { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, - { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, - { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, - { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, -] - -[[package]] -name = "mcp" -version = "1.26.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "httpx", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "httpx-sse", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "jsonschema", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic-settings", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pyjwt", extra = ["crypto"], marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "python-multipart", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "sse-starlette", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "starlette", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-inspection", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "uvicorn", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fc/6d/62e76bbb8144d6ed86e202b5edd8a4cb631e7c8130f3f4893c3f90262b10/mcp-1.26.0.tar.gz", hash = "sha256:db6e2ef491eecc1a0d93711a76f28dec2e05999f93afd48795da1c1137142c66", size = 608005, upload-time = "2026-01-24T19:40:32.468Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/d9/eaa1f80170d2b7c5ba23f3b59f766f3a0bb41155fbc32a69adfa1adaaef9/mcp-1.26.0-py3-none-any.whl", hash = "sha256:904a21c33c25aa98ddbeb47273033c435e595bbacfdb177f4bd87f6dceebe1ca", size = 233615, upload-time = "2026-01-24T19:40:30.652Z" }, -] - -[[package]] -name = "mdurl" -version = "0.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, -] - -[[package]] -name = "mistral-common" -version = "1.10.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jsonschema", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "numpy", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pillow", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic-extra-types", extra = ["pycountry"], marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "requests", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "tiktoken", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a7/22/f798c1acc3f8cf32b6201b063d96867d79aa39d31dff12478739e1a78979/mistral_common-1.10.0.tar.gz", hash = "sha256:e456ff101edbdfc094039ec6c26f7d0f73356729798d628a6e6e96c3917147bc", size = 6351515, upload-time = "2026-03-13T10:13:46.683Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/87/c6/1429a0a3ab40f8530492b62b52eb792266c261b22ed62aa7f25d61d531ae/mistral_common-1.10.0-py3-none-any.whl", hash = "sha256:c594d1a05202b61e8f0d867ec6064df4c5e5d492c2c2bdb6fd8fb4872c6afd8b", size = 6525284, upload-time = "2026-03-13T10:13:44.329Z" }, -] - -[package.optional-dependencies] -image = [ - { name = "opencv-python-headless", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] - -[[package]] -name = "mlx-cuda-13" -version = "0.30.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-cublas", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-nvrtc", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cudnn-cu13", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-nccl-cu13", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/08/6b/27cd4abed63ca9e4086536acde4486ea7a762dda5b36bb867ed954efe93a/mlx_cuda_13-0.30.6-py3-none-manylinux_2_35_aarch64.whl", hash = "sha256:1a5e58eaf4b1a4eb6cb0111ecb4099f6f1380403599f8992ec93dfbad8d9c6f1", size = 66904875, upload-time = "2026-02-06T02:49:19.183Z" }, -] - -[[package]] -name = "model-hosting-container-standards" -version = "0.1.14" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "fastapi", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "httpx", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "jmespath", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "setuptools", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "starlette", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "supervisor", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c6/3d/cf5c6029648cb0a116f7b5c2f74aa155ab0c6dd723a1f204a6d7ff354526/model_hosting_container_standards-0.1.14.tar.gz", hash = "sha256:b6cf4c46d88ce6acd6e543a578bb88ffd55d1179a7c09c22e61ae1d8a567c564", size = 90386, upload-time = "2026-03-18T21:25:14.513Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/48/94/052452842d39c562237a70345c57ec213a9db22bd25bba998fd2b32d70a7/model_hosting_container_standards-0.1.14-py3-none-any.whl", hash = "sha256:d678be6745899b8ba1e8246c96b101e7802a6a4ea3fb5d90ae8d6eb4204e84c6", size = 121406, upload-time = "2026-03-18T21:25:12.932Z" }, -] - -[[package]] -name = "mpmath" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, -] - -[[package]] -name = "msgspec" -version = "0.20.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ea/9c/bfbd12955a49180cbd234c5d29ec6f74fe641698f0cd9df154a854fc8a15/msgspec-0.20.0.tar.gz", hash = "sha256:692349e588fde322875f8d3025ac01689fead5901e7fb18d6870a44519d62a29", size = 317862, upload-time = "2025-11-24T03:56:28.934Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/99/93/f2ec1ae1de51d3fdee998a1ede6b2c089453a2ee82b5c1b361ed9095064a/msgspec-0.20.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9a1697da2f85a751ac3cc6a97fceb8e937fc670947183fb2268edaf4016d1ee", size = 218834, upload-time = "2025-11-24T03:55:46.441Z" }, - { url = "https://files.pythonhosted.org/packages/8f/56/362037a1ed5be0b88aced59272442c4b40065c659700f4b195a7f4d0ac88/msgspec-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f953a66f2a3eb8d5ea64768445e2bb301d97609db052628c3e1bcb7d87192a9f", size = 222821, upload-time = "2025-11-24T03:55:49.388Z" }, - { url = "https://files.pythonhosted.org/packages/1e/19/f8bb2dc0f1bfe46cc7d2b6b61c5e9b5a46c62298e8f4d03bbe499c926180/msgspec-0.20.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6cdb227dc585fb109305cee0fd304c2896f02af93ecf50a9c84ee54ee67dbb42", size = 219691, upload-time = "2025-11-24T03:55:57.908Z" }, - { url = "https://files.pythonhosted.org/packages/1c/db/0e833a177db1a4484797adba7f429d4242585980b90882cc38709e1b62df/msgspec-0.20.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b4296393a29ee42dd25947981c65506fd4ad39beaf816f614146fa0c5a6c91ae", size = 223436, upload-time = "2025-11-24T03:56:00.716Z" }, - { url = "https://files.pythonhosted.org/packages/cd/ae/4c7905ac53830c8e3c06fdd60e3cdcfedc0bbc993872d1549b84ea21a1bd/msgspec-0.20.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f13ccb1c335a124e80c4562573b9b90f01ea9521a1a87f7576c2e281d547f56", size = 225973, upload-time = "2025-11-24T03:56:09.18Z" }, - { url = "https://files.pythonhosted.org/packages/69/52/fdc7bdb7057a166f309e0b44929e584319e625aaba4771b60912a9321ccd/msgspec-0.20.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d931709355edabf66c2dd1a756b2d658593e79882bc81aae5964969d5a291b63", size = 230434, upload-time = "2025-11-24T03:56:12.48Z" }, -] - -[[package]] -name = "multidict" -version = "6.7.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/32/befed7f74c458b4a525e60519fe8d87eef72bb1e99924fa2b0f9d97a221e/multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23", size = 256952, upload-time = "2026-01-26T02:44:24.306Z" }, - { url = "https://files.pythonhosted.org/packages/6a/b2/5fb8c124d7561a4974c342bc8c778b471ebbeb3cc17df696f034a7e9afe7/multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6", size = 252291, upload-time = "2026-01-26T02:44:32.31Z" }, - { url = "https://files.pythonhosted.org/packages/58/18/64f5a795e7677670e872673aca234162514696274597b3708b2c0d276cce/multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292", size = 250031, upload-time = "2026-01-26T02:44:50.544Z" }, - { url = "https://files.pythonhosted.org/packages/3e/06/538e58a63ed5cfb0bd4517e346b91da32fde409d839720f664e9a4ae4f9d/multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3", size = 245060, upload-time = "2026-01-26T02:44:58.195Z" }, - { url = "https://files.pythonhosted.org/packages/a7/f9/44d4b3064c65079d2467888794dea218d1601898ac50222ab8a9a8094460/multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31", size = 252420, upload-time = "2026-01-26T02:45:17.293Z" }, - { url = "https://files.pythonhosted.org/packages/48/5a/d5a99e3acbca0e29c5d9cba8f92ceb15dce78bab963b308ae692981e3a5d/multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0", size = 248403, upload-time = "2026-01-26T02:45:25.982Z" }, - { url = "https://files.pythonhosted.org/packages/41/75/4ad0973179361cdf3a113905e6e088173198349131be2b390f9fa4da5fc6/multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59", size = 246884, upload-time = "2026-01-26T02:45:47.167Z" }, - { url = "https://files.pythonhosted.org/packages/7e/a9/a50d2669e506dad33cfc45b5d574a205587b7b8a5f426f2fbb2e90882588/multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489", size = 241982, upload-time = "2026-01-26T02:45:54.919Z" }, - { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, -] - -[[package]] -name = "networkx" -version = "3.6.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, -] - -[[package]] -name = "ninja" -version = "1.13.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/73/79a0b22fc731989c708068427579e840a6cf4e937fe7ae5c5d0b7356ac22/ninja-1.13.0.tar.gz", hash = "sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978", size = 242558, upload-time = "2025-08-11T15:10:19.421Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/de/6e1cd6b84b412ac1ef327b76f0641aeb5dcc01e9d3f9eee0286d0c34fd93/ninja-1.13.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3d00c692fb717fd511abeb44b8c5d00340c36938c12d6538ba989fe764e79630", size = 177467, upload-time = "2025-08-11T15:09:52.767Z" }, - { url = "https://files.pythonhosted.org/packages/31/bf/0d7808af695ceddc763cf251b84a9892cd7f51622dc8b4c89d5012779f06/ninja-1.13.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:11be2d22027bde06f14c343f01d31446747dbb51e72d00decca2eb99be911e2f", size = 552388, upload-time = "2025-08-11T15:10:03.349Z" }, -] - -[[package]] -name = "numba" -version = "0.61.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "llvmlite", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "numpy", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1c/a0/e21f57604304aa03ebb8e098429222722ad99176a4f979d34af1d1ee80da/numba-0.61.2.tar.gz", hash = "sha256:8750ee147940a6637b80ecf7f95062185ad8726c8c28a2295b8ec1160a196f7d", size = 2820615, upload-time = "2025-04-09T02:58:07.659Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/17/58/064f4dcb7d7e9412f16ecf80ed753f92297e39f399c905389688cf950b81/numba-0.61.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5f154aaea625fb32cfbe3b80c5456d514d416fcdf79733dd69c0df3a11348e9e", size = 3584056, upload-time = "2025-04-09T02:58:04.538Z" }, -] - -[[package]] -name = "numpy" -version = "2.2.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, - { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, - { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, - { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, -] - -[[package]] -name = "nvidia-cublas" -version = "13.1.0.3" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/a5/fce49e2ae977e0ccc084e5adafceb4f0ac0c8333cb6863501618a7277f67/nvidia_cublas-13.1.0.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c86fc7f7ae36d7528288c5d88098edcb7b02c633d262e7ddbb86b0ad91be5df2", size = 542851226, upload-time = "2025-10-09T08:59:04.818Z" }, -] - -[[package]] -name = "nvidia-cuda-cupti" -version = "13.0.85" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/2a/80353b103fc20ce05ef51e928daed4b6015db4aaa9162ed0997090fe2250/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_aarch64.whl", hash = "sha256:796bd679890ee55fb14a94629b698b6db54bcfd833d391d5e94017dd9d7d3151", size = 10310827, upload-time = "2025-09-04T08:26:42.012Z" }, -] - -[[package]] -name = "nvidia-cuda-nvrtc" -version = "13.0.88" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/dc/6bb80850e0b7edd6588d560758f17e0550893a1feaf436807d64d2da040f/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d27f20a0ca67a4bb34268a5e951033496c5b74870b868bacd046b1b8e0c3267b", size = 43015449, upload-time = "2025-09-04T08:28:20.239Z" }, -] - -[[package]] -name = "nvidia-cuda-runtime" -version = "13.0.96" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/87/4f/17d7b9b8e285199c58ce28e31b5c5bbaa4d8271af06a89b6405258245de2/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef9bcbe90493a2b9d810e43d249adb3d02e98dd30200d86607d8d02687c43f55", size = 2261060, upload-time = "2025-10-09T08:55:15.78Z" }, -] - -[[package]] -name = "nvidia-cudnn-cu13" -version = "9.15.1.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-cublas", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/93/b3c9db2c35d6183361333d2dcfea50e094c012d012c8a4d7effbfb53ef62/nvidia_cudnn_cu13-9.15.1.9-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:44cd2ec83c3ef62a7357614bd02ce7f3dac35ffcbb04ad20999e730741f0ba17", size = 415636241, upload-time = "2025-11-12T20:22:26.582Z" }, -] - -[[package]] -name = "nvidia-cudnn-frontend" -version = "1.18.0" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/bd/db791a26ebb6a6e1268f518e18c82d8ad18546f7008f4b0d5bde15f927de/nvidia_cudnn_frontend-1.18.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a6e2b7bd43705ffa4af3b187374fdd5e7d09fc228a4d65fc8b4b0a537a8e605", size = 2027249, upload-time = "2026-01-27T23:33:22.46Z" }, - { url = "https://files.pythonhosted.org/packages/a3/0a/515209dd2afc6027bf1112bf415f575bfe9628d18877abe7424cb597dd7b/nvidia_cudnn_frontend-1.18.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b489da1b30f1d7da822b37b89cc4f68afd80e020eb57e4ab24921f8b57f6e946", size = 2028689, upload-time = "2026-02-11T21:32:04.235Z" }, -] - -[[package]] -name = "nvidia-cufft" -version = "12.0.0.61" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-nvjitlink", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" }, -] - -[[package]] -name = "nvidia-cufile" -version = "1.15.1.6" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/73/cc4a14c9813a8a0d509417cf5f4bdaba76e924d58beb9864f5a7baceefbf/nvidia_cufile-1.15.1.6-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:bdc0deedc61f548bddf7733bdc216456c2fdb101d020e1ab4b88d232d5e2f6d1", size = 1136992, upload-time = "2025-09-04T08:32:14.119Z" }, -] - -[[package]] -name = "nvidia-curand" -version = "10.4.0.35" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/72/7c2ae24fb6b63a32e6ae5d241cc65263ea18d08802aaae087d9f013335a2/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:133df5a7509c3e292aaa2b477afd0194f06ce4ea24d714d616ff36439cee349a", size = 61962106, upload-time = "2025-08-04T10:21:41.128Z" }, -] - -[[package]] -name = "nvidia-cusolver" -version = "12.0.4.66" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-cublas", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cusparse", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-nvjitlink", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" }, -] - -[[package]] -name = "nvidia-cusparse" -version = "12.6.3.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-nvjitlink", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" }, -] - -[[package]] -name = "nvidia-cusparselt-cu13" -version = "0.8.0" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/46/10/8dcd1175260706a2fc92a16a52e306b71d4c1ea0b0cc4a9484183399818a/nvidia_cusparselt_cu13-0.8.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:400c6ed1cf6780fc6efedd64ec9f1345871767e6a1a0a552a1ea0578117ea77c", size = 220791277, upload-time = "2025-08-13T19:22:40.982Z" }, -] - -[[package]] -name = "nvidia-cutlass-dsl" -version = "4.4.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-cutlass-dsl-libs-base", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/03/678dab0383db1ddfc449da216220f40404189eb36eeed9d87a4fa4bdb0e6/nvidia_cutlass_dsl-4.4.2-py3-none-any.whl", hash = "sha256:7cfb9ef19062b055b9372c7a627004724e2755e4c8b16c3cc88807d64501a4ae", size = 10167, upload-time = "2026-03-16T02:18:59.043Z" }, -] - -[[package]] -name = "nvidia-cutlass-dsl-libs-base" -version = "4.4.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cuda-python", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "numpy", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/c9/2f17950ee2deb4b5f6b82f8155515a21792fe296e81bb638f164d8e2ca9b/nvidia_cutlass_dsl_libs_base-4.4.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:b59a052cbfb9a25747d1b6d413615456bea38d1f377da085af07c0d86a4c8b39", size = 75477304, upload-time = "2026-03-16T02:27:35.645Z" }, - { url = "https://files.pythonhosted.org/packages/12/44/0dc7f2e5b5c65106a5bb05e60654f1a79abe92e27e9b00588a73cd26ca1f/nvidia_cutlass_dsl_libs_base-4.4.2-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:af96c1170569138b3cb965202907fbf5ab95d7c1dcc210952d00cdf9ab7b859a", size = 75472171, upload-time = "2026-03-16T02:28:03.136Z" }, -] - -[[package]] -name = "nvidia-ml-py" -version = "13.590.48" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/a0/f4fc18cf72f06821a9a665085435b901449986855519d5b3843532db35e9/nvidia_ml_py-13.590.48.tar.gz", hash = "sha256:8184d1be52914ac7f0991cd1c0d946c65dc88a840c754cd12c274b77b88760dd", size = 49732, upload-time = "2026-01-22T01:14:56.456Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/72/fb2af0d259a651affdce65fd6a495f0e07a685a0136baf585c5065204ee7/nvidia_ml_py-13.590.48-py3-none-any.whl", hash = "sha256:fd43d30ee9cd0b7940f5f9f9220b68d42722975e3992b6c21d14144c48760e43", size = 50680, upload-time = "2026-01-22T01:14:55.281Z" }, -] - -[[package]] -name = "nvidia-nccl-cu13" -version = "2.28.9" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/39/55/1920646a2e43ffd4fc958536b276197ed740e9e0c54105b4bb3521591fc7/nvidia_nccl_cu13-2.28.9-py3-none-manylinux_2_18_aarch64.whl", hash = "sha256:01c873ba1626b54caa12272ed228dc5b2781545e0ae8ba3f432a8ef1c6d78643", size = 196561677, upload-time = "2025-11-18T05:49:03.45Z" }, -] - -[[package]] -name = "nvidia-nvjitlink" -version = "13.0.88" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/2c/93c5250e64df4f894f1cbb397c6fd71f79813f9fd79d7cd61de3f97b3c2d/nvidia_nvjitlink-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e931536ccc7d467a98ba1d8b89ff7fa7f1fa3b13f2b0069118cd7f47bff07d0c", size = 38768748, upload-time = "2025-09-04T08:35:20.008Z" }, -] - -[[package]] -name = "nvidia-nvshmem-cu13" -version = "3.4.5" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/0f/05cc9c720236dcd2db9c1ab97fff629e96821be2e63103569da0c9b72f19/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dc2a197f38e5d0376ad52cd1a2a3617d3cdc150fd5966f4aee9bcebb1d68fe9", size = 60215947, upload-time = "2025-09-06T00:32:20.022Z" }, -] - -[[package]] -name = "nvidia-nvtx" -version = "13.0.85" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/64/3708a90d1ebe202ffdeb7185f878a3c84d15c2b2c31858da2ce0583e2def/nvidia_nvtx-13.0.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb7780edb6b14107373c835bf8b72e7a178bac7367e23da7acb108f973f157a6", size = 148878, upload-time = "2025-09-04T08:28:53.627Z" }, -] - -[[package]] -name = "openai" -version = "2.24.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "distro", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "httpx", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "jiter", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "sniffio", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "tqdm", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/55/13/17e87641b89b74552ed408a92b231283786523edddc95f3545809fab673c/openai-2.24.0.tar.gz", hash = "sha256:1e5769f540dbd01cb33bc4716a23e67b9d695161a734aff9c5f925e2bf99a673", size = 658717, upload-time = "2026-02-24T20:02:07.958Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/30/844dc675ee6902579b8eef01ed23917cc9319a1c9c0c14ec6e39340c96d0/openai-2.24.0-py3-none-any.whl", hash = "sha256:fed30480d7d6c884303287bde864980a4b137b60553ffbcf9ab4a233b7a73d94", size = 1120122, upload-time = "2026-02-24T20:02:05.669Z" }, -] - -[[package]] -name = "openai-harmony" -version = "0.0.8" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pydantic", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3e/92/2d038d096f29179c7c9571b431f9e739f87a487121901725e23fe338dd9d/openai_harmony-0.0.8.tar.gz", hash = "sha256:6e43f98e6c242fa2de6f8ea12eab24af63fa2ed3e89c06341fb9d92632c5cbdf", size = 284777, upload-time = "2025-11-05T19:07:06.727Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/d2/ce6953ca87db9cae3e775024184da7d1c5cb88cead19a2d75b42f00a959c/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4f709815924ec325b9a890e6ab2bbb0ceec8e319a4e257328eb752cf36b2efc", size = 2948463, upload-time = "2025-11-05T19:06:48.17Z" }, - { url = "https://files.pythonhosted.org/packages/5b/f8/93b582cad3531797c3db7c2db5400fd841538ccddfd9f5e3df61be99a630/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8565d4f5a0638da1bffde29832ed63c9e695c558611053add3b2dc0b56c92dbc", size = 3127044, upload-time = "2025-11-05T19:06:59.553Z" }, -] - -[[package]] -name = "opencv-python-headless" -version = "4.13.0.92" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/21/76/9417a6aef9def70e467a5bf560579f816148a4c658b7d525581b356eda9e/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c8cfc8e87ed452b5cecb9419473ee5560a989859fe1d10d1ce11ae87b09a2cb", size = 33703709, upload-time = "2026-02-05T10:24:46.469Z" }, - { url = "https://files.pythonhosted.org/packages/8f/b4/b7bcbf7c874665825a8c8e1097e93ea25d1f1d210a3e20d4451d01da30aa/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb60e36b237b1ebd40a912da5384b348df8ed534f6f644d8e0b4f103e272ba7d", size = 35010236, upload-time = "2026-02-05T10:28:11.031Z" }, -] - -[[package]] -name = "opentelemetry-api" -version = "1.40.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "importlib-metadata", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2c/1d/4049a9e8698361cc1a1aa03a6c59e4fa4c71e0c0f94a30f988a6876a2ae6/opentelemetry_api-1.40.0.tar.gz", hash = "sha256:159be641c0b04d11e9ecd576906462773eb97ae1b657730f0ecf64d32071569f", size = 70851, upload-time = "2026-03-04T14:17:21.555Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5f/bf/93795954016c522008da367da292adceed71cca6ee1717e1d64c83089099/opentelemetry_api-1.40.0-py3-none-any.whl", hash = "sha256:82dd69331ae74b06f6a874704be0cfaa49a1650e1537d4a813b86ecef7d0ecf9", size = 68676, upload-time = "2026-03-04T14:17:01.24Z" }, -] - -[[package]] -name = "opentelemetry-exporter-otlp" -version = "1.40.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "opentelemetry-exporter-otlp-proto-grpc", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-exporter-otlp-proto-http", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d0/37/b6708e0eff5c5fb9aba2e0ea09f7f3bcbfd12a592d2a780241b5f6014df7/opentelemetry_exporter_otlp-1.40.0.tar.gz", hash = "sha256:7caa0870b95e2fcb59d64e16e2b639ecffb07771b6cd0000b5d12e5e4fef765a", size = 6152, upload-time = "2026-03-04T14:17:23.235Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/fc/aea77c28d9f3ffef2fdafdc3f4a235aee4091d262ddabd25882f47ce5c5f/opentelemetry_exporter_otlp-1.40.0-py3-none-any.whl", hash = "sha256:48c87e539ec9afb30dc443775a1334cc5487de2f72a770a4c00b1610bf6c697d", size = 7023, upload-time = "2026-03-04T14:17:03.612Z" }, -] - -[[package]] -name = "opentelemetry-exporter-otlp-proto-common" -version = "1.40.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "opentelemetry-proto", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/51/bc/1559d46557fe6eca0b46c88d4c2676285f1f3be2e8d06bb5d15fbffc814a/opentelemetry_exporter_otlp_proto_common-1.40.0.tar.gz", hash = "sha256:1cbee86a4064790b362a86601ee7934f368b81cd4cc2f2e163902a6e7818a0fa", size = 20416, upload-time = "2026-03-04T14:17:23.801Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8b/ca/8f122055c97a932311a3f640273f084e738008933503d0c2563cd5d591fc/opentelemetry_exporter_otlp_proto_common-1.40.0-py3-none-any.whl", hash = "sha256:7081ff453835a82417bf38dccf122c827c3cbc94f2079b03bba02a3165f25149", size = 18369, upload-time = "2026-03-04T14:17:04.796Z" }, -] - -[[package]] -name = "opentelemetry-exporter-otlp-proto-grpc" -version = "1.40.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "googleapis-common-protos", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "grpcio", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-api", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-exporter-otlp-proto-common", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-proto", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-sdk", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8f/7f/b9e60435cfcc7590fa87436edad6822240dddbc184643a2a005301cc31f4/opentelemetry_exporter_otlp_proto_grpc-1.40.0.tar.gz", hash = "sha256:bd4015183e40b635b3dab8da528b27161ba83bf4ef545776b196f0fb4ec47740", size = 25759, upload-time = "2026-03-04T14:17:24.4Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/96/6f/7ee0980afcbdcd2d40362da16f7f9796bd083bf7f0b8e038abfbc0300f5d/opentelemetry_exporter_otlp_proto_grpc-1.40.0-py3-none-any.whl", hash = "sha256:2aa0ca53483fe0cf6405087a7491472b70335bc5c7944378a0a8e72e86995c52", size = 20304, upload-time = "2026-03-04T14:17:05.942Z" }, -] - -[[package]] -name = "opentelemetry-exporter-otlp-proto-http" -version = "1.40.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "googleapis-common-protos", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-api", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-exporter-otlp-proto-common", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-proto", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-sdk", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "requests", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2e/fa/73d50e2c15c56be4d000c98e24221d494674b0cc95524e2a8cb3856d95a4/opentelemetry_exporter_otlp_proto_http-1.40.0.tar.gz", hash = "sha256:db48f5e0f33217588bbc00274a31517ba830da576e59503507c839b38fa0869c", size = 17772, upload-time = "2026-03-04T14:17:25.324Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/3a/8865d6754e61c9fb170cdd530a124a53769ee5f740236064816eb0ca7301/opentelemetry_exporter_otlp_proto_http-1.40.0-py3-none-any.whl", hash = "sha256:a8d1dab28f504c5d96577d6509f80a8150e44e8f45f82cdbe0e34c99ab040069", size = 19960, upload-time = "2026-03-04T14:17:07.153Z" }, -] - -[[package]] -name = "opentelemetry-proto" -version = "1.40.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "protobuf", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/4c/77/dd38991db037fdfce45849491cb61de5ab000f49824a00230afb112a4392/opentelemetry_proto-1.40.0.tar.gz", hash = "sha256:03f639ca129ba513f5819810f5b1f42bcb371391405d99c168fe6937c62febcd", size = 45667, upload-time = "2026-03-04T14:17:31.194Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/b2/189b2577dde745b15625b3214302605b1353436219d42b7912e77fa8dc24/opentelemetry_proto-1.40.0-py3-none-any.whl", hash = "sha256:266c4385d88923a23d63e353e9761af0f47a6ed0d486979777fe4de59dc9b25f", size = 72073, upload-time = "2026-03-04T14:17:16.673Z" }, -] - -[[package]] -name = "opentelemetry-sdk" -version = "1.40.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "opentelemetry-api", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-semantic-conventions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/58/fd/3c3125b20ba18ce2155ba9ea74acb0ae5d25f8cd39cfd37455601b7955cc/opentelemetry_sdk-1.40.0.tar.gz", hash = "sha256:18e9f5ec20d859d268c7cb3c5198c8d105d073714db3de50b593b8c1345a48f2", size = 184252, upload-time = "2026-03-04T14:17:31.87Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/c5/6a852903d8bfac758c6dc6e9a68b015d3c33f2f1be5e9591e0f4b69c7e0a/opentelemetry_sdk-1.40.0-py3-none-any.whl", hash = "sha256:787d2154a71f4b3d81f20524a8ce061b7db667d24e46753f32a7bc48f1c1f3f1", size = 141951, upload-time = "2026-03-04T14:17:17.961Z" }, -] - -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.61b0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "opentelemetry-api", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6d/c0/4ae7973f3c2cfd2b6e321f1675626f0dab0a97027cc7a297474c9c8f3d04/opentelemetry_semantic_conventions-0.61b0.tar.gz", hash = "sha256:072f65473c5d7c6dc0355b27d6c9d1a679d63b6d4b4b16a9773062cb7e31192a", size = 145755, upload-time = "2026-03-04T14:17:32.664Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b2/37/cc6a55e448deaa9b27377d087da8615a3416d8ad523d5960b78dbeadd02a/opentelemetry_semantic_conventions-0.61b0-py3-none-any.whl", hash = "sha256:fa530a96be229795f8cef353739b618148b0fe2b4b3f005e60e262926c4d38e2", size = 231621, upload-time = "2026-03-04T14:17:19.33Z" }, -] - -[[package]] -name = "opentelemetry-semantic-conventions-ai" -version = "0.4.15" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "opentelemetry-sdk", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-semantic-conventions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e9/75/455c15f8360b475dd31101a87eab316420388486f7941bf019cbf4e63d5b/opentelemetry_semantic_conventions_ai-0.4.15.tar.gz", hash = "sha256:12de172d1e11d21c6e82bbf578c7e8a713589a7fda76af9ed785632564a28b81", size = 18595, upload-time = "2026-03-02T15:36:50.254Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/12/49/819fb212386f77cfd93f81bd916d674f0e735f87c8ac2262ed14e3b852c2/opentelemetry_semantic_conventions_ai-0.4.15-py3-none-any.whl", hash = "sha256:011461f1fba30f27035c49ab3b8344367adc72da0a6c8d3c7428303c6779edc9", size = 5999, upload-time = "2026-03-02T15:36:51.44Z" }, -] - -[[package]] -name = "outlines-core" -version = "0.2.11" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1a/d3/e04e9145f8f806723dec9b9e5227ad695a3efcd3ced7794cf7c22b15df5e/outlines_core-0.2.11.tar.gz", hash = "sha256:dfce56f717ff5083e54cbcfdb66cad243365437fccbb5509adaa7e31e030f1d8", size = 197263, upload-time = "2025-05-19T10:12:51.719Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/68/b420b6a3beaadbf8e9f2a82132120027efd6424634013fbeca8c2fed7467/outlines_core-0.2.11-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:76b2512417c68863f8f227a080e87f755682dfd895e23b021121318be11da579", size = 2112861, upload-time = "2025-05-19T10:12:36.742Z" }, -] - -[[package]] -name = "packaging" -version = "26.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, -] - -[[package]] -name = "partial-json-parser" -version = "0.2.1.1.post7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6a/6d/eed37d7ebc1e0bcd27b831c0cf1fe94881934316187c4b30d23f29ea0bd4/partial_json_parser-0.2.1.1.post7.tar.gz", hash = "sha256:86590e1ba6bcb6739a2dfc17d2323f028cb5884f4c6ce23db376999132c9a922", size = 10296, upload-time = "2025-11-17T07:27:41.202Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/32/658973117bf0fd82a24abbfb94fe73a5e86216e49342985e10acce54775a/partial_json_parser-0.2.1.1.post7-py3-none-any.whl", hash = "sha256:145119e5eabcf80cbb13844a6b50a85c68bf99d376f8ed771e2a3c3b03e653ae", size = 10877, upload-time = "2025-11-17T07:27:40.457Z" }, -] - -[[package]] -name = "pillow" -version = "12.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1f/42/5c74462b4fd957fcd7b13b04fb3205ff8349236ea74c7c375766d6c82288/pillow-12.1.1.tar.gz", hash = "sha256:9ad8fa5937ab05218e2b6a4cff30295ad35afd2f83ac592e68c0d871bb0fdbc4", size = 46980264, upload-time = "2026-02-11T04:23:07.146Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/11/6db24d4bd7685583caeae54b7009584e38da3c3d4488ed4cd25b439de486/pillow-12.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d242e8ac078781f1de88bf823d70c1a9b3c7950a44cdf4b7c012e22ccbcd8e4e", size = 4062689, upload-time = "2026-02-11T04:21:06.804Z" }, - { url = "https://files.pythonhosted.org/packages/33/c0/ce6d3b1fe190f0021203e0d9b5b99e57843e345f15f9ef22fcd43842fd21/pillow-12.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:02f84dfad02693676692746df05b89cf25597560db2857363a208e393429f5e9", size = 4138535, upload-time = "2026-02-11T04:21:08.452Z" }, - { url = "https://files.pythonhosted.org/packages/9e/1b/f1a4ea9a895b5732152789326202a82464d5254759fbacae4deea3069334/pillow-12.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:18e5bddd742a44b7e6b1e773ab5db102bd7a94c32555ba656e76d319d19c3850", size = 6232698, upload-time = "2026-02-11T04:21:15.949Z" }, - { url = "https://files.pythonhosted.org/packages/29/9b/d6ecd956bb1266dd1045e995cce9b8d77759e740953a1c9aad9502a0461e/pillow-12.1.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a8eb7ed8d4198bccbd07058416eeec51686b498e784eda166395a23eb99138e", size = 6346621, upload-time = "2026-02-11T04:21:19.547Z" }, - { url = "https://files.pythonhosted.org/packages/94/0e/58cb1a6bc48f746bc4cb3adb8cabff73e2742c92b3bf7a220b7cf69b9177/pillow-12.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:518a48c2aab7ce596d3bf79d0e275661b846e86e4d0e7dec34712c30fe07f02a", size = 6460040, upload-time = "2026-02-11T04:21:23.148Z" }, - { url = "https://files.pythonhosted.org/packages/f7/ec/8a6d22afd02570d30954e043f09c32772bfe143ba9285e2fdb11284952cd/pillow-12.1.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2e0c664be47252947d870ac0d327fea7e63985a08794758aa8af5b6cb6ec0c9c", size = 6269008, upload-time = "2026-02-11T04:21:36.623Z" }, - { url = "https://files.pythonhosted.org/packages/a1/cd/134b0b6ee5eda6dc09e25e24b40fdafe11a520bc725c1d0bbaa5e00bf95b/pillow-12.1.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9e8064fb1cc019296958595f6db671fba95209e3ceb0c4734c9baf97de04b20", size = 6380136, upload-time = "2026-02-11T04:21:40.562Z" }, - { url = "https://files.pythonhosted.org/packages/1e/f8/66ab30a2193b277785601e82ee2d49f68ea575d9637e5e234faaa98efa4c/pillow-12.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:89b54027a766529136a06cfebeecb3a04900397a3590fd252160b888479517bf", size = 6491807, upload-time = "2026-02-11T04:21:44.22Z" }, - { url = "https://files.pythonhosted.org/packages/03/d0/bebb3ffbf31c5a8e97241476c4cf8b9828954693ce6744b4a2326af3e16b/pillow-12.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:417423db963cb4be8bac3fc1204fe61610f6abeed1580a7a2cbb2fbda20f12af", size = 4062652, upload-time = "2026-02-11T04:21:53.19Z" }, - { url = "https://files.pythonhosted.org/packages/2d/c0/0e16fb0addda4851445c28f8350d8c512f09de27bbb0d6d0bbf8b6709605/pillow-12.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:b957b71c6b2387610f556a7eb0828afbe40b4a98036fc0d2acfa5a44a0c2036f", size = 4138823, upload-time = "2026-02-11T04:22:03.088Z" }, - { url = "https://files.pythonhosted.org/packages/6f/18/008d2ca0eb612e81968e8be0bbae5051efba24d52debf930126d7eaacbba/pillow-12.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:652a2c9ccfb556235b2b501a3a7cf3742148cd22e04b5625c5fe057ea3e3191f", size = 6232137, upload-time = "2026-02-11T04:22:11.434Z" }, - { url = "https://files.pythonhosted.org/packages/5a/d6/17824509146e4babbdabf04d8171491fa9d776f7061ff6e727522df9bd03/pillow-12.1.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b574c51cf7d5d62e9be37ba446224b59a2da26dc4c1bb2ecbe936a4fb1a7cb7f", size = 6347798, upload-time = "2026-02-11T04:22:15.449Z" }, - { url = "https://files.pythonhosted.org/packages/ec/f3/bc8ccc6e08a148290d7523bde4d9a0d6c981db34631390dc6e6ec34cacf6/pillow-12.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f95c00d5d6700b2b890479664a06e754974848afaae5e21beb4d83c106923fd0", size = 6462360, upload-time = "2026-02-11T04:22:19.111Z" }, - { url = "https://files.pythonhosted.org/packages/01/54/df6ef130fa43e4b82e32624a7b821a2be1c5653a5fdad8469687a7db4e00/pillow-12.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:42fc1f4677106188ad9a55562bbade416f8b55456f522430fadab3cef7cd4e60", size = 6269951, upload-time = "2026-02-11T04:22:33.921Z" }, - { url = "https://files.pythonhosted.org/packages/c3/bd/f1d71eb39a72fa088d938655afba3e00b38018d052752f435838961127d8/pillow-12.1.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d470ab1178551dd17fdba0fef463359c41aaa613cdcd7ff8373f54be629f9f8f", size = 6381358, upload-time = "2026-02-11T04:22:37.698Z" }, - { url = "https://files.pythonhosted.org/packages/73/cb/8059688b74422ae61278202c4e1ad992e8a2e7375227be0a21c6b87ca8d5/pillow-12.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5d8c41325b382c07799a3682c1c258469ea2ff97103c53717b7893862d0c98ce", size = 6493028, upload-time = "2026-02-11T04:22:42.73Z" }, -] - -[[package]] -name = "prometheus-client" -version = "0.24.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f0/58/a794d23feb6b00fc0c72787d7e87d872a6730dd9ed7c7b3e954637d8f280/prometheus_client-0.24.1.tar.gz", hash = "sha256:7e0ced7fbbd40f7b84962d5d2ab6f17ef88a72504dcf7c0b40737b43b2a461f9", size = 85616, upload-time = "2026-01-14T15:26:26.965Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl", hash = "sha256:150db128af71a5c2482b36e588fc8a6b95e498750da4b17065947c16070f4055", size = 64057, upload-time = "2026-01-14T15:26:24.42Z" }, -] - -[[package]] -name = "prometheus-fastapi-instrumentator" -version = "7.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "prometheus-client", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "starlette", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/69/6d/24d53033cf93826aa7857699a4450c1c67e5b9c710e925b1ed2b320c04df/prometheus_fastapi_instrumentator-7.1.0.tar.gz", hash = "sha256:be7cd61eeea4e5912aeccb4261c6631b3f227d8924542d79eaf5af3f439cbe5e", size = 20220, upload-time = "2025-03-19T19:35:05.351Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/27/72/0824c18f3bc75810f55dacc2dd933f6ec829771180245ae3cc976195dec0/prometheus_fastapi_instrumentator-7.1.0-py3-none-any.whl", hash = "sha256:978130f3c0bb7b8ebcc90d35516a6fe13e02d2eb358c8f83887cdef7020c31e9", size = 19296, upload-time = "2025-03-19T19:35:04.323Z" }, -] - -[[package]] -name = "propcache" -version = "0.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d", size = 46442, upload-time = "2025-10-08T19:49:02.291Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/48/c5ac64dee5262044348d1d78a5f85dd1a57464a60d30daee946699963eb3/propcache-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe", size = 208182, upload-time = "2025-10-08T19:47:11.319Z" }, - { url = "https://files.pythonhosted.org/packages/50/a6/4282772fd016a76d3e5c0df58380a5ea64900afd836cec2c2f662d1b9bb3/propcache-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1", size = 199398, upload-time = "2025-10-08T19:47:17.962Z" }, - { url = "https://files.pythonhosted.org/packages/f4/04/5b4c54a103d480e978d3c8a76073502b18db0c4bc17ab91b3cb5092ad949/propcache-0.4.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e", size = 275950, upload-time = "2025-10-08T19:47:33.481Z" }, - { url = "https://files.pythonhosted.org/packages/2d/18/cd28081658ce597898f0c4d174d4d0f3c5b6d4dc27ffafeef835c95eb359/propcache-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af", size = 261205, upload-time = "2025-10-08T19:47:39.659Z" }, - { url = "https://files.pythonhosted.org/packages/86/bd/47816020d337f4a746edc42fe8d53669965138f39ee117414c7d7a340cfe/propcache-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641", size = 206981, upload-time = "2025-10-08T19:47:55.715Z" }, - { url = "https://files.pythonhosted.org/packages/27/73/033d63069b57b0812c8bd19f311faebeceb6ba31b8f32b73432d12a0b826/propcache-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b", size = 197566, upload-time = "2025-10-08T19:48:02.604Z" }, - { url = "https://files.pythonhosted.org/packages/e2/e3/7dc89f4f21e8f99bad3d5ddb3a3389afcf9da4ac69e3deb2dcdc96e74169/propcache-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a", size = 275712, upload-time = "2025-10-08T19:48:18.901Z" }, - { url = "https://files.pythonhosted.org/packages/0c/b1/8f08a143b204b418285c88b83d00edbd61afbc2c6415ffafc8905da7038b/propcache-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89", size = 260938, upload-time = "2025-10-08T19:48:25.656Z" }, - { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" }, -] - -[[package]] -name = "protobuf" -version = "6.33.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/66/70/e908e9c5e52ef7c3a6c7902c9dfbb34c7e29c25d2f81ade3856445fd5c94/protobuf-6.33.6.tar.gz", hash = "sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135", size = 444531, upload-time = "2026-03-18T19:05:00.988Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ee/90/b3c01fdec7d2f627b3a6884243ba328c1217ed2d978def5c12dc50d328a3/protobuf-6.33.6-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:e2afbae9b8e1825e3529f88d514754e094278bb95eadc0e199751cdd9a2e82a2", size = 324610, upload-time = "2026-03-18T19:04:53.096Z" }, - { url = "https://files.pythonhosted.org/packages/c4/72/02445137af02769918a93807b2b7890047c32bfb9f90371cbc12688819eb/protobuf-6.33.6-py3-none-any.whl", hash = "sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901", size = 170656, upload-time = "2026-03-18T19:04:59.826Z" }, -] - -[[package]] -name = "psutil" -version = "7.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, - { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, - { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, - { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, -] - -[[package]] -name = "py-cpuinfo" -version = "9.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/37/a8/d832f7293ebb21690860d2e01d8115e5ff6f2ae8bbdc953f0eb0fa4bd2c7/py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690", size = 104716, upload-time = "2022-10-25T20:38:06.303Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335, upload-time = "2022-10-25T20:38:27.636Z" }, -] - -[[package]] -name = "pybase64" -version = "1.4.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/b8/4ed5c7ad5ec15b08d35cc79ace6145d5c1ae426e46435f4987379439dfea/pybase64-1.4.3.tar.gz", hash = "sha256:c2ed274c9e0ba9c8f9c4083cfe265e66dd679126cd9c2027965d807352f3f053", size = 137272, upload-time = "2025-12-06T13:27:04.013Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/8d/20b68f11adfc4c22230e034b65c71392e3e338b413bf713c8945bd2ccfb3/pybase64-1.4.3-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:27fdff227a0c0e182e0ba37a99109645188978b920dfb20d8b9c17eeee370d0d", size = 30932, upload-time = "2025-12-06T13:23:43.348Z" }, - { url = "https://files.pythonhosted.org/packages/f7/79/b1b550ac6bff51a4880bf6e089008b2e1ca16f2c98db5e039a08ac3ad157/pybase64-1.4.3-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:2a8204f1fdfec5aa4184249b51296c0de95445869920c88123978304aad42df1", size = 31394, upload-time = "2025-12-06T13:23:44.317Z" }, - { url = "https://files.pythonhosted.org/packages/0d/31/4ca953cc3dcde2b3711d6bfd70a6f4ad2ca95a483c9698076ba605f1520f/pybase64-1.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e98310b7c43145221e7194ac9fa7fffc84763c87bfc5e2f59f9f92363475bdc1", size = 59930, upload-time = "2025-12-06T13:23:51.68Z" }, - { url = "https://files.pythonhosted.org/packages/a7/84/f6368bcaf9f743732e002a9858646fd7a54f428490d427dd6847c5cfe89e/pybase64-1.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0d5f18ed53dfa1d4cf8b39ee542fdda8e66d365940e11f1710989b3cf4a2ed66", size = 58629, upload-time = "2025-12-06T13:23:57.12Z" }, - { url = "https://files.pythonhosted.org/packages/91/3b/3e2f2b6e68e3d83ddb9fa799f3548fb7449765daec9bbd005a9fbe296d7f/pybase64-1.4.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:da1ee8fa04b283873de2d6e8fa5653e827f55b86bdf1a929c5367aaeb8d26f8a", size = 65399, upload-time = "2025-12-06T13:24:13.928Z" }, - { url = "https://files.pythonhosted.org/packages/e0/f0/578ee4ffce5818017de4fdf544e066c225bc435e73eb4793cde28a689d0b/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0e71a4db76726bf830b47477e7d830a75c01b2e9b01842e787a0836b0ba741e3", size = 63636, upload-time = "2025-12-06T13:24:20.497Z" }, - { url = "https://files.pythonhosted.org/packages/e3/71/cf62b261d431857e8e054537a5c3c24caafa331de30daede7b2c6c558501/pybase64-1.4.3-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8f183ac925a48046abe047360fe3a1b28327afb35309892132fe1915d62fb282", size = 30939, upload-time = "2025-12-06T13:24:34.001Z" }, - { url = "https://files.pythonhosted.org/packages/24/3e/d12f92a3c1f7c6ab5d53c155bff9f1084ba997a37a39a4f781ccba9455f3/pybase64-1.4.3-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30bf3558e24dcce4da5248dcf6d73792adfcf4f504246967e9db155be4c439ad", size = 31401, upload-time = "2025-12-06T13:24:35.11Z" }, - { url = "https://files.pythonhosted.org/packages/e3/57/6743e420416c3ff1b004041c85eb0ebd9c50e9cf05624664bfa1dc8b5625/pybase64-1.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0932b0c5cfa617091fd74f17d24549ce5de3628791998c94ba57be808078eeaf", size = 60040, upload-time = "2025-12-06T13:24:44.37Z" }, - { url = "https://files.pythonhosted.org/packages/64/e7/c3c1d09c3d7ae79e3aa1358c6d912d6b85f29281e47aa94fc0122a415a2f/pybase64-1.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:448158d417139cb4851200e5fee62677ae51f56a865d50cda9e0d61bda91b116", size = 58736, upload-time = "2025-12-06T13:24:50.641Z" }, - { url = "https://files.pythonhosted.org/packages/bb/5d/71747d4ad7fe16df4c4c852bdbdeb1f2cf35677b48d7c34d3011a7a6ad3a/pybase64-1.4.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fb852f900e27ffc4ec1896817535a0fa19610ef8875a096b59f21d0aa42ff172", size = 65589, upload-time = "2025-12-06T13:25:08.809Z" }, - { url = "https://files.pythonhosted.org/packages/2b/15/9b6d711035e29b18b2e1c03d47f41396d803d06ef15b6c97f45b75f73f04/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:84cfd4d92668ef5766cc42a9c9474b88960ac2b860767e6e7be255c6fddbd34a", size = 63816, upload-time = "2025-12-06T13:25:15.356Z" }, -] - -[[package]] -name = "pycountry" -version = "26.2.16" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/de/1d/061b9e7a48b85cfd69f33c33d2ef784a531c359399ad764243399673c8f5/pycountry-26.2.16.tar.gz", hash = "sha256:5b6027d453fcd6060112b951dd010f01f168b51b4bf8a1f1fc8c95c8d94a0801", size = 7711342, upload-time = "2026-02-17T03:42:52.367Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/42/7703bd45b62fecd44cd7d3495423097e2f7d28bc2e99e7c1af68892ab157/pycountry-26.2.16-py3-none-any.whl", hash = "sha256:115c4baf7cceaa30f59a4694d79483c9167dbce7a9de4d3d571c5f3ea77c305a", size = 8044600, upload-time = "2026-02-17T03:42:49.777Z" }, -] - -[[package]] -name = "pycparser" -version = "3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, -] - -[[package]] -name = "pydantic" -version = "2.12.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "annotated-types", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic-core", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-inspection", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591, upload-time = "2025-11-26T15:11:46.471Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580, upload-time = "2025-11-26T15:11:44.605Z" }, -] - -[package.optional-dependencies] -email = [ - { name = "email-validator", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] - -[[package]] -name = "pydantic-core" -version = "2.41.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/15/df/a4c740c0943e93e6500f9eb23f4ca7ec9bf71b19e608ae5b579678c8d02f/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0", size = 1919307, upload-time = "2025-11-04T13:40:29.806Z" }, - { url = "https://files.pythonhosted.org/packages/75/c7/20bd7fc05f0c6ea2056a4565c6f36f8968c0924f19b7d97bbfea55780e73/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740", size = 2137788, upload-time = "2025-11-04T13:40:44.752Z" }, - { url = "https://files.pythonhosted.org/packages/23/04/e89c29e267b8060b40dca97bfc64a19b2a3cf99018167ea1677d96368273/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1", size = 1915040, upload-time = "2025-11-04T13:41:00.853Z" }, - { url = "https://files.pythonhosted.org/packages/d3/9e/3ce66cebb929f3ced22be85d4c2399b8e85b622db77dad36b73c5387f8f8/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90", size = 2138960, upload-time = "2025-11-04T13:41:14.627Z" }, - { url = "https://files.pythonhosted.org/packages/5a/f0/e5e6b99d4191da102f2b0eb9687aaa7f5bea5d9964071a84effc3e40f997/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c", size = 1878092, upload-time = "2025-11-04T13:41:33.21Z" }, - { url = "https://files.pythonhosted.org/packages/02/7a/f999a6dcbcd0e5660bc348a3991c8915ce6599f4f2c6ac22f01d7a10816c/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3", size = 2129560, upload-time = "2025-11-04T13:41:47.474Z" }, -] - -[[package]] -name = "pydantic-extra-types" -version = "2.11.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pydantic", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/71/dba38ee2651f84f7842206adbd2233d8bbdb59fb85e9fa14232486a8c471/pydantic_extra_types-2.11.1.tar.gz", hash = "sha256:46792d2307383859e923d8fcefa82108b1a141f8a9c0198982b3832ab5ef1049", size = 172002, upload-time = "2026-03-16T08:08:03.92Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/17/c1/3226e6d7f5a4f736f38ac11a6fbb262d701889802595cdb0f53a885ac2e0/pydantic_extra_types-2.11.1-py3-none-any.whl", hash = "sha256:1722ea2bddae5628ace25f2aa685b69978ef533123e5638cfbddb999e0100ec1", size = 79526, upload-time = "2026-03-16T08:08:02.533Z" }, -] - -[package.optional-dependencies] -pycountry = [ - { name = "pycountry", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] - -[[package]] -name = "pydantic-settings" -version = "2.13.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pydantic", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "python-dotenv", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-inspection", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/52/6d/fffca34caecc4a3f97bda81b2098da5e8ab7efc9a66e819074a11955d87e/pydantic_settings-2.13.1.tar.gz", hash = "sha256:b4c11847b15237fb0171e1462bf540e294affb9b86db4d9aa5c01730bdbe4025", size = 223826, upload-time = "2026-02-19T13:45:08.055Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl", hash = "sha256:d56fd801823dbeae7f0975e1f8c8e25c258eb75d278ea7abb5d9cebb01b56237", size = 58929, upload-time = "2026-02-19T13:45:06.034Z" }, -] - -[[package]] -name = "pygments" -version = "2.19.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, -] - -[[package]] -name = "pyjwt" -version = "2.12.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c2/27/a3b6e5bf6ff856d2509292e95c8f57f0df7017cf5394921fc4e4ef40308a/pyjwt-2.12.1.tar.gz", hash = "sha256:c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b", size = 102564, upload-time = "2026-03-13T19:27:37.25Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/7a/8dd906bd22e79e47397a61742927f6747fe93242ef86645ee9092e610244/pyjwt-2.12.1-py3-none-any.whl", hash = "sha256:28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c", size = 29726, upload-time = "2026-03-13T19:27:35.677Z" }, -] - -[package.optional-dependencies] -crypto = [ - { name = "cryptography", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] - -[[package]] -name = "python-dotenv" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, -] - -[[package]] -name = "python-json-logger" -version = "4.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/29/bf/eca6a3d43db1dae7070f70e160ab20b807627ba953663ba07928cdd3dc58/python_json_logger-4.0.0.tar.gz", hash = "sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f", size = 17683, upload-time = "2025-10-06T04:15:18.984Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl", hash = "sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2", size = 15548, upload-time = "2025-10-06T04:15:17.553Z" }, -] - -[[package]] -name = "python-multipart" -version = "0.0.22" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/01/979e98d542a70714b0cb2b6728ed0b7c46792b695e3eaec3e20711271ca3/python_multipart-0.0.22.tar.gz", hash = "sha256:7340bef99a7e0032613f56dc36027b959fd3b30a787ed62d310e951f7c3a3a58", size = 37612, upload-time = "2026-01-25T10:15:56.219Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/d0/397f9626e711ff749a95d96b7af99b9c566a9bb5129b8e4c10fc4d100304/python_multipart-0.0.22-py3-none-any.whl", hash = "sha256:2b2cd894c83d21bf49d702499531c7bafd057d730c201782048f7945d82de155", size = 24579, upload-time = "2026-01-25T10:15:54.811Z" }, -] - -[[package]] -name = "pyyaml" -version = "6.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, - { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, - { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, - { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, - { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, - { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, -] - -[[package]] -name = "pyzmq" -version = "27.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "implementation_name == 'pypy' and platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload-time = "2025-09-08T23:10:18.157Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574, upload-time = "2025-09-08T23:08:06.828Z" }, - { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070, upload-time = "2025-09-08T23:08:09.989Z" }, - { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469, upload-time = "2025-09-08T23:08:27.623Z" }, - { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282, upload-time = "2025-09-08T23:08:31.349Z" }, - { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427, upload-time = "2025-09-08T23:08:48.187Z" }, - { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193, upload-time = "2025-09-08T23:08:51.7Z" }, -] - -[[package]] -name = "quack-kernels" -version = "0.3.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "apache-tvm-ffi", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cutlass-dsl", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "torch", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "torch-c-dlpack-ext", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/cf/faf4d6af611211016efe38efe9e5ddcf3f1a8dd91023124f566b501d7f20/quack_kernels-0.3.4.tar.gz", hash = "sha256:2cf1545065ea90acca40360dfcc40ea0cafd07056a8afa859b62a27aa070e78a", size = 177914, upload-time = "2026-03-18T18:46:46.625Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/0a/ccc1fc353e2aa68973159a13f87efacbb98cdbd950c3648da2d7d6f6bf0b/quack_kernels-0.3.4-py3-none-any.whl", hash = "sha256:aafab366098017b3a8af371d1eba5c2fa3be5282beef9a5de73b3d36f05d691b", size = 181472, upload-time = "2026-03-18T18:46:45.44Z" }, -] - -[[package]] -name = "referencing" -version = "0.37.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "rpds-py", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, -] - -[[package]] -name = "regex" -version = "2026.2.28" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8b/71/41455aa99a5a5ac1eaf311f5d8efd9ce6433c03ac1e0962de163350d0d97/regex-2026.2.28.tar.gz", hash = "sha256:a729e47d418ea11d03469f321aaf67cdee8954cde3ff2cf8403ab87951ad10f2", size = 415184, upload-time = "2026-02-28T02:19:42.792Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/1b/7cc3b7af4c244c204b7a80924bd3d85aecd9ba5bc82b485c5806ee8cda9e/regex-2026.2.28-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb4db2f17e6484904f986c5a657cec85574c76b5c5e61c7aae9ffa1bc6224f95", size = 796842, upload-time = "2026-02-28T02:17:29.064Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a8/9a92935878aba19bd72706b9db5646a6f993d99b3f6ed42c02ec8beb1d61/regex-2026.2.28-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:96f6269a2882fbb0ee76967116b83679dc628e68eaea44e90884b8d53d833881", size = 784311, upload-time = "2026-02-28T02:17:39.855Z" }, - { url = "https://files.pythonhosted.org/packages/b5/43/aabe384ec1994b91796e903582427bc2ffaed9c4103819ed3c16d8e749f3/regex-2026.2.28-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fd0ce43e71d825b7c0661f9c54d4d74bd97c56c3fd102a8985bcfea48236bacb", size = 809429, upload-time = "2026-02-28T02:18:02.328Z" }, - { url = "https://files.pythonhosted.org/packages/95/30/1aa959ed0d25c1dd7dd5047ea8ba482ceaef38ce363c401fd32a6b923e60/regex-2026.2.28-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:10d28e19bd4888e4abf43bd3925f3c134c52fdf7259219003588a42e24c2aa25", size = 798743, upload-time = "2026-02-28T02:18:13.025Z" }, - { url = "https://files.pythonhosted.org/packages/eb/26/ee53117066a30ef9c883bf1127eece08308ccf8ccd45c45a966e7a665385/regex-2026.2.28-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09500be324f49b470d907b3ef8af9afe857f5cca486f853853f7945ddbf75911", size = 797176, upload-time = "2026-02-28T02:18:37.15Z" }, - { url = "https://files.pythonhosted.org/packages/6a/e9/6e53c34e8068b9deec3e87210086ecb5b9efebdefca6b0d3fa43d66dcecb/regex-2026.2.28-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7900157786428a79615a8264dac1f12c9b02957c473c8110c6b1f972dcecaddf", size = 784859, upload-time = "2026-02-28T02:18:48.269Z" }, - { url = "https://files.pythonhosted.org/packages/2d/be/77e5426cf5948c82f98c53582009ca9e94938c71f73a8918474f2e2990bb/regex-2026.2.28-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b059e71ec363968671693a78c5053bd9cb2fe410f9b8e4657e88377ebd603a2e", size = 809464, upload-time = "2026-02-28T02:19:12.494Z" }, - { url = "https://files.pythonhosted.org/packages/17/1e/9e4ec9b9013931faa32226ec4aa3c71fe664a6d8a2b91ac56442128b332f/regex-2026.2.28-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6db7bfae0f8a2793ff1f7021468ea55e2699d0790eb58ee6ab36ae43aa00bc5b", size = 798925, upload-time = "2026-02-28T02:19:24.173Z" }, -] - -[[package]] -name = "requests" -version = "2.32.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "charset-normalizer", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "idna", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "urllib3", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, -] - -[[package]] -name = "rich" -version = "14.3.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markdown-it-py", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pygments", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b3/c6/f3b320c27991c46f43ee9d856302c70dc2d0fb2dba4842ff739d5f46b393/rich-14.3.3.tar.gz", hash = "sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b", size = 230582, upload-time = "2026-02-19T17:23:12.474Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl", hash = "sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d", size = 310458, upload-time = "2026-02-19T17:23:13.732Z" }, -] - -[[package]] -name = "rich-toolkit" -version = "0.19.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "rich", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/42/ba/dae9e3096651042754da419a4042bc1c75e07d615f9b15066d738838e4df/rich_toolkit-0.19.7.tar.gz", hash = "sha256:133c0915872da91d4c25d85342d5ec1dfacc69b63448af1a08a0d4b4f23ef46e", size = 195877, upload-time = "2026-02-24T16:06:20.555Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/3c/c923619f6d2f5fafcc96fec0aaf9550a46cd5b6481f06e0c6b66a2a4fed0/rich_toolkit-0.19.7-py3-none-any.whl", hash = "sha256:0288e9203728c47c5a4eb60fd2f0692d9df7455a65901ab6f898437a2ba5989d", size = 32963, upload-time = "2026-02-24T16:06:22.066Z" }, -] - -[[package]] -name = "rignore" -version = "0.7.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e5/f5/8bed2310abe4ae04b67a38374a4d311dd85220f5d8da56f47ae9361be0b0/rignore-0.7.6.tar.gz", hash = "sha256:00d3546cd793c30cb17921ce674d2c8f3a4b00501cb0e3dd0e82217dbeba2671", size = 57140, upload-time = "2025-11-05T21:41:21.968Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/36/31/b65b837e39c3f7064c426754714ac633b66b8c2290978af9d7f513e14aa9/rignore-0.7.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1ad295537041dc2ed4b540fb1a3906bd9ede6ccdad3fe79770cd89e04e3c73c", size = 897406, upload-time = "2025-11-05T20:40:53.854Z" }, - { url = "https://files.pythonhosted.org/packages/31/eb/c4f92cc3f2825d501d3c46a244a671eb737fc1bcf7b05a3ecd34abb3e0d7/rignore-0.7.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:181eb2a975a22256a1441a9d2f15eb1292839ea3f05606620bd9e1938302cf79", size = 1078365, upload-time = "2025-11-05T21:40:15.148Z" }, - { url = "https://files.pythonhosted.org/packages/ac/0f/348c829ea2d8d596e856371b14b9092f8a5dfbb62674ec9b3f67e4939a9d/rignore-0.7.6-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ce2268837c3600f82ab8db58f5834009dc638ee17103582960da668963bebc5", size = 899044, upload-time = "2025-11-05T20:40:55.336Z" }, - { url = "https://files.pythonhosted.org/packages/2b/bf/628dfe19c75e8ce1f45f7c248f5148b17dfa89a817f8e3552ab74c3ae812/rignore-0.7.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ead81f728682ba72b5b1c3d5846b011d3e0174da978de87c61645f2ed36659a7", size = 1079299, upload-time = "2025-11-05T21:40:16.639Z" }, - { url = "https://files.pythonhosted.org/packages/71/30/054880b09c0b1b61d17eeb15279d8bf729c0ba52b36c3ada52fb827cbb3c/rignore-0.7.6-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bec3994665a44454df86deb762061e05cd4b61e3772f5b07d1882a8a0d2748d5", size = 897611, upload-time = "2025-11-05T20:40:56.475Z" }, - { url = "https://files.pythonhosted.org/packages/24/a4/52a697158e9920705bdbd0748d59fa63e0f3233fb92e9df9a71afbead6ca/rignore-0.7.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42de84b0289d478d30ceb7ae59023f7b0527786a9a5b490830e080f0e4ea5aeb", size = 1078181, upload-time = "2025-11-05T21:40:18.151Z" }, -] - -[[package]] -name = "rpds-py" -version = "0.30.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" }, - { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" }, - { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" }, - { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" }, - { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" }, - { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" }, - { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" }, - { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" }, -] - -[[package]] -name = "safetensors" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/29/9c/6e74567782559a63bd040a236edca26fd71bc7ba88de2ef35d75df3bca5e/safetensors-0.7.0.tar.gz", hash = "sha256:07663963b67e8bd9f0b8ad15bb9163606cd27cc5a1b96235a50d8369803b96b0", size = 200878, upload-time = "2025-11-19T15:18:43.199Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/06/578ffed52c2296f93d7fd2d844cabfa92be51a587c38c8afbb8ae449ca89/safetensors-0.7.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e07d91d0c92a31200f25351f4acb2bc6aff7f48094e13ebb1d0fb995b54b6542", size = 491748, upload-time = "2025-11-19T15:18:09.79Z" }, - { url = "https://files.pythonhosted.org/packages/06/87/d26d8407c44175d8ae164a95b5a62707fcc445f3c0c56108e37d98070a3d/safetensors-0.7.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cdab83a366799fa730f90a4ebb563e494f28e9e92c4819e556152ad55e43591b", size = 674060, upload-time = "2025-11-19T15:18:37.211Z" }, -] - -[[package]] -name = "sentencepiece" -version = "0.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/15/2e7a025fc62d764b151ae6d0f2a92f8081755ebe8d4a64099accc6f77ba6/sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad", size = 3228515, upload-time = "2025-08-12T07:00:51.718Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/d2/f552be5928105588f4f4d66ee37dd4c61460d8097e62d0e2e0eec41bc61d/sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820", size = 1316271, upload-time = "2025-08-12T06:59:58.109Z" }, - { url = "https://files.pythonhosted.org/packages/bc/85/c72fd1f3c7a6010544d6ae07f8ddb38b5e2a7e33bd4318f87266c0bbafbf/sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596", size = 1315722, upload-time = "2025-08-12T07:00:12.989Z" }, - { url = "https://files.pythonhosted.org/packages/19/ad/d5c7075f701bd97971d7c2ac2904f227566f51ef0838dfbdfdccb58cd212/sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1855f57db07b51fb51ed6c9c452f570624d2b169b36f0f79ef71a6e6c618cd8b", size = 1316247, upload-time = "2025-08-12T07:00:26.435Z" }, - { url = "https://files.pythonhosted.org/packages/ef/23/195b2e7ec85ebb6a547969f60b723c7aca5a75800ece6cc3f41da872d14e/sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:010f025a544ef770bb395091d57cb94deb9652d8972e0d09f71d85d5a0816c8c", size = 1315721, upload-time = "2025-08-12T07:00:42.914Z" }, -] - -[[package]] -name = "sentry-sdk" -version = "2.55.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "urllib3", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e9/b8/285293dc60fc198fffc3fcdbc7c6d4e646e0f74e61461c355d40faa64ceb/sentry_sdk-2.55.0.tar.gz", hash = "sha256:3774c4d8820720ca4101548131b9c162f4c9426eb7f4d24aca453012a7470f69", size = 424505, upload-time = "2026-03-17T14:15:51.707Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/66/20465097782d7e1e742d846407ea7262d338c6e876ddddad38ca8907b38f/sentry_sdk-2.55.0-py2.py3-none-any.whl", hash = "sha256:97026981cb15699394474a196b88503a393cbc58d182ece0d3abe12b9bd978d4", size = 449284, upload-time = "2026-03-17T14:15:49.604Z" }, -] - -[[package]] -name = "setproctitle" -version = "1.3.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8d/48/49393a96a2eef1ab418b17475fb92b8fcfad83d099e678751b05472e69de/setproctitle-1.3.7.tar.gz", hash = "sha256:bc2bc917691c1537d5b9bca1468437176809c7e11e5694ca79a9ca12345dcb9e", size = 27002, upload-time = "2025-09-05T12:51:25.278Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/e4/adf3c4c0a2173cb7920dc9df710bcc67e9bcdbf377e243b7a962dc31a51a/setproctitle-1.3.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5d1cb3f81531f0eb40e13246b679a1bdb58762b170303463cb06ecc296f26d0", size = 34104, upload-time = "2025-09-05T12:49:54.416Z" }, - { url = "https://files.pythonhosted.org/packages/1b/62/f2c0595403cf915db031f346b0e3b2c0096050e90e0be658a64f44f4278a/setproctitle-1.3.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0b5074649797fd07c72ca1f6bff0406f4a42e1194faac03ecaab765ce605866f", size = 33150, upload-time = "2025-09-05T12:49:58.025Z" }, - { url = "https://files.pythonhosted.org/packages/71/36/611fc2ed149fdea17c3677e1d0df30d8186eef9562acc248682b91312706/setproctitle-1.3.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7081f193dab22df2c36f9fc6d113f3793f83c27891af8fe30c64d89d9a37e152", size = 35267, upload-time = "2025-09-05T12:50:06.015Z" }, - { url = "https://files.pythonhosted.org/packages/89/bc/ad9c664fe524fb4a4b2d3663661a5c63453ce851736171e454fa2cdec35c/setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:80e177eff2d1ec172188d0d7fd9694f8e43d3aab76a6f5f929bee7bf7894e98b", size = 33963, upload-time = "2025-09-05T12:50:09.056Z" }, - { url = "https://files.pythonhosted.org/packages/f1/af/ae692a20276d1159dd0cf77b0bcf92cbb954b965655eb4a69672099bb214/setproctitle-1.3.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:46178672599b940368d769474fe13ecef1b587d58bb438ea72b9987f74c56ea5", size = 34043, upload-time = "2025-09-05T12:50:22.454Z" }, - { url = "https://files.pythonhosted.org/packages/1c/1a/8836b9f28cee32859ac36c3df85aa03e1ff4598d23ea17ca2e96b5845a8f/setproctitle-1.3.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:14c7eba8d90c93b0e79c01f0bd92a37b61983c27d6d7d5a3b5defd599113d60e", size = 32898, upload-time = "2025-09-05T12:50:25.617Z" }, - { url = "https://files.pythonhosted.org/packages/86/b4/82cd0c86e6d1c4538e1a7eb908c7517721513b801dff4ba3f98ef816a240/setproctitle-1.3.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e7c5bfe4228ea22373e3025965d1a4116097e555ee3436044f5c954a5e63ac45", size = 35589, upload-time = "2025-09-05T12:50:34.13Z" }, - { url = "https://files.pythonhosted.org/packages/20/92/927b7d4744aac214d149c892cb5fa6dc6f49cfa040cb2b0a844acd63dcaf/setproctitle-1.3.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:96c38cdeef9036eb2724c2210e8d0b93224e709af68c435d46a4733a3675fee1", size = 34201, upload-time = "2025-09-05T12:50:36.697Z" }, -] - -[[package]] -name = "setuptools" -version = "77.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/81/ed/7101d53811fd359333583330ff976e5177c5e871ca8b909d1d6c30553aa3/setuptools-77.0.3.tar.gz", hash = "sha256:583b361c8da8de57403743e756609670de6fb2345920e36dc5c2d914c319c945", size = 1367236, upload-time = "2025-03-20T14:38:08.777Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/07/99f2cefae815c66eb23148f15d79ec055429c38fa8986edcc712ab5f3223/setuptools-77.0.3-py3-none-any.whl", hash = "sha256:67122e78221da5cf550ddd04cf8742c8fe12094483749a792d56cd669d6cf58c", size = 1255678, upload-time = "2025-03-20T14:38:06.621Z" }, -] - -[[package]] -name = "shellingham" -version = "1.5.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, -] - -[[package]] -name = "six" -version = "1.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, -] - -[[package]] -name = "sniffio" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, -] - -[[package]] -name = "sse-starlette" -version = "3.3.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "starlette", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/14/2f/9223c24f568bb7a0c03d751e609844dce0968f13b39a3f73fbb3a96cd27a/sse_starlette-3.3.3.tar.gz", hash = "sha256:72a95d7575fd5129bd0ae15275ac6432bb35ac542fdebb82889c24bb9f3f4049", size = 32420, upload-time = "2026-03-17T20:05:55.529Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/e2/b8cff57a67dddf9a464d7e943218e031617fb3ddc133aeeb0602ff5f6c85/sse_starlette-3.3.3-py3-none-any.whl", hash = "sha256:c5abb5082a1cc1c6294d89c5290c46b5f67808cfdb612b7ec27e8ba061c22e8d", size = 14329, upload-time = "2026-03-17T20:05:54.35Z" }, -] - -[[package]] -name = "starlette" -version = "0.52.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c4/68/79977123bb7be889ad680d79a40f339082c1978b5cfcf62c2d8d196873ac/starlette-0.52.1.tar.gz", hash = "sha256:834edd1b0a23167694292e94f597773bc3f89f362be6effee198165a35d62933", size = 2653702, upload-time = "2026-01-18T13:34:11.062Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl", hash = "sha256:0029d43eb3d273bc4f83a08720b4912ea4b071087a3b48db01b7c839f7954d74", size = 74272, upload-time = "2026-01-18T13:34:09.188Z" }, -] - -[[package]] -name = "supervisor" -version = "4.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/b5/37e7a3706de436a8a2d75334711dad1afb4ddffab09f25e31d89e467542f/supervisor-4.3.0.tar.gz", hash = "sha256:4a2bf149adf42997e1bb44b70c43b613275ec9852c3edacca86a9166b27e945e", size = 468912, upload-time = "2025-08-23T18:25:02.418Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/65/5e726c372da8a5e35022a94388b12252710aad0c2351699c3d76ae8dba78/supervisor-4.3.0-py2.py3-none-any.whl", hash = "sha256:0bcb763fddafba410f35cbde226aa7f8514b9fb82eb05a0c85f6588d1c13f8db", size = 320736, upload-time = "2025-08-23T18:25:00.767Z" }, -] - -[[package]] -name = "sympy" -version = "1.14.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mpmath", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, -] - -[[package]] -name = "tabulate" -version = "0.10.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/46/58/8c37dea7bbf769b20d58e7ace7e5edfe65b849442b00ffcdd56be88697c6/tabulate-0.10.0.tar.gz", hash = "sha256:e2cfde8f79420f6deeffdeda9aaec3b6bc5abce947655d17ac662b126e48a60d", size = 91754, upload-time = "2026-03-04T18:55:34.402Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl", hash = "sha256:f0b0622e567335c8fabaaa659f1b33bcb6ddfe2e496071b743aa113f8774f2d3", size = 39814, upload-time = "2026-03-04T18:55:31.284Z" }, -] - -[[package]] -name = "tiktoken" -version = "0.12.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "regex", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "requests", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7d/ab/4d017d0f76ec3171d469d80fc03dfbb4e48a4bcaddaa831b31d526f05edc/tiktoken-0.12.0.tar.gz", hash = "sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931", size = 37806, upload-time = "2025-10-06T20:22:45.419Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/70/5163fe5359b943f8db9946b62f19be2305de8c3d78a16f629d4165e2f40e/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa", size = 1128948, upload-time = "2025-10-06T20:22:03.814Z" }, - { url = "https://files.pythonhosted.org/packages/a0/5a/886b108b766aa53e295f7216b509be95eb7d60b166049ce2c58416b25f2a/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a", size = 1194222, upload-time = "2025-10-06T20:22:06.265Z" }, - { url = "https://files.pythonhosted.org/packages/72/90/13da56f664286ffbae9dbcfadcc625439142675845baa62715e49b87b68b/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27", size = 1128725, upload-time = "2025-10-06T20:22:13.541Z" }, - { url = "https://files.pythonhosted.org/packages/22/1f/ae535223a8c4ef4c0c1192e3f9b82da660be9eb66b9279e95c99288e9dab/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e", size = 1194451, upload-time = "2025-10-06T20:22:15.545Z" }, - { url = "https://files.pythonhosted.org/packages/14/27/bf795595a2b897e271771cd31cb847d479073497344c637966bdf2853da1/tiktoken-0.12.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff", size = 1129271, upload-time = "2025-10-06T20:22:22.06Z" }, - { url = "https://files.pythonhosted.org/packages/75/0d/881866647b8d1be4d67cb24e50d0c26f9f807f994aa1510cb9ba2fe5f612/tiktoken-0.12.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b", size = 1194860, upload-time = "2025-10-06T20:22:24.602Z" }, - { url = "https://files.pythonhosted.org/packages/5f/77/4f268c41a3957c418b084dd576ea2fad2e95da0d8e1ab705372892c2ca22/tiktoken-0.12.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63", size = 1129022, upload-time = "2025-10-06T20:22:29.981Z" }, - { url = "https://files.pythonhosted.org/packages/28/c0/3c7a39ff68022ddfd7d93f3337ad90389a342f761c4d71de99a3ccc57857/tiktoken-0.12.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a", size = 1194908, upload-time = "2025-10-06T20:22:32.073Z" }, -] - -[[package]] -name = "tokenizers" -version = "0.22.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "huggingface-hub", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/73/6f/f80cfef4a312e1fb34baf7d85c72d4411afde10978d4657f8cdd811d3ccc/tokenizers-0.22.2.tar.gz", hash = "sha256:473b83b915e547aa366d1eee11806deaf419e17be16310ac0a14077f1e28f917", size = 372115, upload-time = "2026-01-05T10:45:15.988Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d6/84/7990e799f1309a8b87af6b948f31edaa12a3ed22d11b352eaf4f4b2e5753/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2249487018adec45d6e3554c71d46eb39fa8ea67156c640f7513eb26f318cec7", size = 3290736, upload-time = "2026-01-05T10:40:32.165Z" }, - { url = "https://files.pythonhosted.org/packages/1d/28/5f9f5a4cc211b69e89420980e483831bcc29dade307955cc9dc858a40f01/tokenizers-0.22.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:29c30b83d8dcd061078b05ae0cb94d3c710555fbb44861139f9f83dcca3dc3e4", size = 9478245, upload-time = "2026-01-05T10:41:04.053Z" }, -] - -[[package]] -name = "torch" -version = "2.10.0+cu130" -source = { registry = "https://download.pytorch.org/whl/cu130" } -dependencies = [ - { name = "cuda-bindings", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "filelock", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "fsspec", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "jinja2", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "networkx", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cublas", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-cupti", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-nvrtc", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-runtime", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cudnn-cu13", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cufft", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cufile", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-curand", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cusolver", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cusparse", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cusparselt-cu13", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-nccl-cu13", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-nvjitlink", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-nvshmem-cu13", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-nvtx", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "setuptools", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "sympy", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "triton", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -wheels = [ - { url = "https://download.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:75780283308df9fede371eeda01e9607c8862a1803a2f2f31a08a2c0deaed342" }, - { url = "https://download.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:46699da91f0367d8dfa1b606cb0352aaf190b5853f463010e75ff08f15a94e7d" }, - { url = "https://download.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:18f87ae628c02f095f2e97756e4fa249ceef6ed6e87d5a3c79b5338abf842511" }, - { url = "https://download.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:7781235583ea06b214075c10fa95f83b9805f06af44efc6e9946808413cff94f" }, -] - -[[package]] -name = "torch-c-dlpack-ext" -version = "0.1.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "torch", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/37/de/921b6491efce5c389a5ef9bbed3d2d6660005840dae488124173180859ab/torch_c_dlpack_ext-0.1.5.tar.gz", hash = "sha256:d06f0357d575d22a168cc77acb9020fc4bae30968ceb6718a055dcbe92bacabe", size = 12913, upload-time = "2026-01-12T11:25:08.484Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/ec/faf10be09a5812b1c5ec9922b53fb5def5fc4080b81a653b9347bb169ebb/torch_c_dlpack_ext-0.1.5-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49f1e99d13c64e22dac0a34a1560e9e5a398a49a9fa81df83053e04fde6ec5bd", size = 443798, upload-time = "2026-01-12T11:24:52.754Z" }, - { url = "https://files.pythonhosted.org/packages/20/62/11c05b99f69aa5152bca0313e0dfa6d125a020cf890dc888ef009aa7891c/torch_c_dlpack_ext-0.1.5-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a58fdf45fb0bda7bc459632cec891570f31c11636d5851c825cf308ec8b73c2", size = 163825, upload-time = "2026-01-12T11:24:59.474Z" }, -] - -[[package]] -name = "torchaudio" -version = "2.10.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "torch", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/49/fd/831c2595c81b17141180ca11ab3c0836cc544ef13e15aa0e7b2cb619e582/torchaudio-2.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5bc39ff3ea341097ce1ab023dd88c9dd8ca5f96ebf48821e7d23766137bb55d7", size = 392757, upload-time = "2026-01-21T16:28:33.631Z" }, - { url = "https://files.pythonhosted.org/packages/43/8c/653e7f67855424bf3b7cbb48335f8316f7fb02bb01a6cab38f6bf9555676/torchaudio-2.10.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:b41b254d958632dc00dc7768431cadda516c91641d798775cbb19bcd4f0d2be4", size = 393430, upload-time = "2026-01-21T16:28:34.855Z" }, - { url = "https://files.pythonhosted.org/packages/57/a1/ef5571406858f4ea89c18d6ad844d21cb9858708149e6bbd9a789ee30ea5/torchaudio-2.10.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:b2d5e11a2bec08f02a4f5fb7d1902ff82d48c533a27ceedc21e6ade650cf65b3", size = 393061, upload-time = "2026-01-21T16:28:25.802Z" }, - { url = "https://files.pythonhosted.org/packages/53/8a/946aa07393845b918d318b5e34b3bd0359fd27fc9fac10a85fae2bb86382/torchaudio-2.10.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:ed912de8ec1b400e17a5172badcfcddc601a9cd4e02d200f3a9504fc8e54961c", size = 393434, upload-time = "2026-01-21T16:28:18.668Z" }, -] - -[[package]] -name = "torchvision" -version = "0.25.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pillow", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "torch", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/36/b1/3d6c42f62c272ce34fcce609bb8939bdf873dab5f1b798fd4e880255f129/torchvision-0.25.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5f271136d2d2c0b7a24c5671795c6e4fd8da4e0ea98aeb1041f62bc04c4370ef", size = 2309106, upload-time = "2026-01-21T16:27:30.624Z" }, - { url = "https://files.pythonhosted.org/packages/28/cc/2103149761fdb4eaed58a53e8437b2d716d48f05174fab1d9fcf1e2a2244/torchvision-0.25.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:146d02c9876858420adf41f3189fe90e3d6a409cbfa65454c09f25fb33bf7266", size = 2310735, upload-time = "2026-01-21T16:27:22.327Z" }, - { url = "https://files.pythonhosted.org/packages/80/ed/d51889da7ceaf5ff7a0574fb28f9b6b223df19667265395891f81b364ab3/torchvision-0.25.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:0b5e7f50002a8145a98c5694a018e738c50e2972608310c7e88e1bd4c058f6ce", size = 2309331, upload-time = "2026-01-21T16:27:19.97Z" }, - { url = "https://files.pythonhosted.org/packages/b5/e2/7abb10a867db79b226b41da419b63b69c0bd5b82438c4a4ed50e084c552f/torchvision-0.25.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:40a122c3cf4d14b651f095e0f672b688dde78632783fc5cd3d4d5e4f6a828563", size = 2310741, upload-time = "2026-01-21T16:27:18.712Z" }, -] - -[[package]] -name = "tqdm" -version = "4.67.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598, upload-time = "2026-02-03T17:35:53.048Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374, upload-time = "2026-02-03T17:35:50.982Z" }, -] - -[[package]] -name = "transformers" -version = "4.57.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "filelock", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "huggingface-hub", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "numpy", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "packaging", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pyyaml", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "regex", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "requests", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "safetensors", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "tokenizers", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "tqdm", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c4/35/67252acc1b929dc88b6602e8c4a982e64f31e733b804c14bc24b47da35e6/transformers-4.57.6.tar.gz", hash = "sha256:55e44126ece9dc0a291521b7e5492b572e6ef2766338a610b9ab5afbb70689d3", size = 10134912, upload-time = "2026-01-16T10:38:39.284Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/03/b8/e484ef633af3887baeeb4b6ad12743363af7cce68ae51e938e00aaa0529d/transformers-4.57.6-py3-none-any.whl", hash = "sha256:4c9e9de11333ddfe5114bc872c9f370509198acf0b87a832a0ab9458e2bd0550", size = 11993498, upload-time = "2026-01-16T10:38:31.289Z" }, -] - -[[package]] -name = "triton" -version = "3.6.0" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/12/34d71b350e89a204c2c7777a9bba0dcf2f19a5bfdd70b57c4dbc5ffd7154/triton-3.6.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:448e02fe6dc898e9e5aa89cf0ee5c371e99df5aa5e8ad976a80b93334f3494fd", size = 176133521, upload-time = "2026-01-20T16:16:13.321Z" }, - { url = "https://files.pythonhosted.org/packages/ce/4e/41b0c8033b503fd3cfcd12392cdd256945026a91ff02452bef40ec34bee7/triton-3.6.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1722e172d34e32abc3eb7711d0025bb69d7959ebea84e3b7f7a341cd7ed694d6", size = 176276087, upload-time = "2026-01-20T16:16:18.989Z" }, - { url = "https://files.pythonhosted.org/packages/49/55/5ecf0dcaa0f2fbbd4420f7ef227ee3cb172e91e5fede9d0ecaddc43363b4/triton-3.6.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5523241e7d1abca00f1d240949eebdd7c673b005edbbce0aca95b8191f1d43", size = 176138577, upload-time = "2026-01-20T16:16:25.426Z" }, - { url = "https://files.pythonhosted.org/packages/48/db/56ee649cab5eaff4757541325aca81f52d02d4a7cd3506776cad2451e060/triton-3.6.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b3a97e8ed304dfa9bd23bb41ca04cdf6b2e617d5e782a8653d616037a5d537d", size = 176274804, upload-time = "2026-01-20T16:16:31.528Z" }, -] - -[[package]] -name = "typer" -version = "0.24.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "annotated-doc", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "click", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "rich", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "shellingham", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f5/24/cb09efec5cc954f7f9b930bf8279447d24618bb6758d4f6adf2574c41780/typer-0.24.1.tar.gz", hash = "sha256:e39b4732d65fbdcde189ae76cf7cd48aeae72919dea1fdfc16593be016256b45", size = 118613, upload-time = "2026-02-21T16:54:40.609Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl", hash = "sha256:112c1f0ce578bfb4cab9ffdabc68f031416ebcc216536611ba21f04e9aa84c9e", size = 56085, upload-time = "2026-02-21T16:54:41.616Z" }, -] - -[[package]] -name = "typing-extensions" -version = "4.15.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, -] - -[[package]] -name = "typing-inspection" -version = "0.4.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, -] - -[[package]] -name = "urllib3" -version = "2.6.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, -] - -[[package]] -name = "uvicorn" -version = "0.42.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "h11", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e3/ad/4a96c425be6fb67e0621e62d86c402b4a17ab2be7f7c055d9bd2f638b9e2/uvicorn-0.42.0.tar.gz", hash = "sha256:9b1f190ce15a2dd22e7758651d9b6d12df09a13d51ba5bf4fc33c383a48e1775", size = 85393, upload-time = "2026-03-16T06:19:50.077Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/89/f8827ccff89c1586027a105e5630ff6139a64da2515e24dafe860bd9ae4d/uvicorn-0.42.0-py3-none-any.whl", hash = "sha256:96c30f5c7abe6f74ae8900a70e92b85ad6613b745d4879eb9b16ccad15645359", size = 68830, upload-time = "2026-03-16T06:19:48.325Z" }, -] - -[package.optional-dependencies] -standard = [ - { name = "httptools", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "python-dotenv", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pyyaml", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "uvloop", marker = "platform_machine == 'aarch64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux'" }, - { name = "watchfiles", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "websockets", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] - -[[package]] -name = "uvloop" -version = "0.22.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/f0/18d39dbd1971d6d62c4629cc7fa67f74821b0dc1f5a77af43719de7936a7/uvloop-0.22.1.tar.gz", hash = "sha256:6c84bae345b9147082b17371e3dd5d42775bddce91f885499017f4607fdaf39f", size = 2443250, upload-time = "2025-10-16T22:17:19.342Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/02/654426ce265ac19e2980bfd9ea6590ca96a56f10c76e63801a2df01c0486/uvloop-0.22.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e2ea3d6190a2968f4a14a23019d3b16870dd2190cd69c8180f7c632d21de68d", size = 4288562, upload-time = "2025-10-16T22:16:39.375Z" }, - { url = "https://files.pythonhosted.org/packages/d2/53/8369e5219a5855869bcee5f4d317f6da0e2c669aecf0ef7d371e3d084449/uvloop-0.22.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bc5ef13bbc10b5335792360623cc378d52d7e62c2de64660616478c32cd0598e", size = 4119472, upload-time = "2025-10-16T22:16:41.694Z" }, - { url = "https://files.pythonhosted.org/packages/a3/94/94af78c156f88da4b3a733773ad5ba0b164393e357cc4bd0ab2e2677a7d6/uvloop-0.22.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:297c27d8003520596236bdb2335e6b3f649480bd09e00d1e3a99144b691d2a35", size = 4272437, upload-time = "2025-10-16T22:16:47.451Z" }, - { url = "https://files.pythonhosted.org/packages/02/62/67d382dfcb25d0a98ce73c11ed1a6fba5037a1a1d533dcbb7cab033a2636/uvloop-0.22.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b31dc2fccbd42adc73bc4e7cdbae4fc5086cf378979e53ca5d0301838c5682c6", size = 4114158, upload-time = "2025-10-16T22:16:50.517Z" }, - { url = "https://files.pythonhosted.org/packages/42/38/c9b09f3271a7a723a5de69f8e237ab8e7803183131bc57c890db0b6bb872/uvloop-0.22.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:badb4d8e58ee08dad957002027830d5c3b06aea446a6a3744483c2b3b745345c", size = 4647548, upload-time = "2025-10-16T22:16:57.008Z" }, - { url = "https://files.pythonhosted.org/packages/97/cc/48d232f33d60e2e2e0b42f4e73455b146b76ebe216487e862700457fbf3c/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:daf620c2995d193449393d6c62131b3fbd40a63bf7b307a1527856ace637fe88", size = 4328384, upload-time = "2025-10-16T22:16:59.36Z" }, -] - -[[package]] -name = "vllm" -version = "0.1.dev14936+gb99bedc73.cu130" -source = { git = "https://github.com/hmellor/vllm.git?rev=b99bedc737166ae5ca98cb9e3534b96e0c8c69aa#b99bedc737166ae5ca98cb9e3534b96e0c8c69aa" } -dependencies = [ - { name = "aiohttp", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "anthropic", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "blake3", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "cachetools", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "cbor2", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "cloudpickle", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "compressed-tensors", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "depyf", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "diskcache", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "einops", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "fastapi", extra = ["standard"], marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "filelock", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "flashinfer-python", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "gguf", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "ijson", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "lark", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "llguidance", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "lm-format-enforcer", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "mcp", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "mistral-common", extra = ["image"], marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "model-hosting-container-standards", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "msgspec", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "ninja", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "numba", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "numpy", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cudnn-frontend", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "nvidia-cutlass-dsl", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "openai", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "openai-harmony", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opencv-python-headless", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-api", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-exporter-otlp", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-sdk", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "opentelemetry-semantic-conventions-ai", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "outlines-core", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "partial-json-parser", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pillow", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "prometheus-client", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "prometheus-fastapi-instrumentator", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "protobuf", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "psutil", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "py-cpuinfo", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pybase64", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "python-json-logger", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pyyaml", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pyzmq", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "quack-kernels", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "regex", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "requests", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "sentencepiece", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "setproctitle", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "setuptools", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "six", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "tiktoken", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "tokenizers", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "torch", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "torchaudio", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "torchvision", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "tqdm", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "transformers", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "watchfiles", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "xgrammar", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] - -[[package]] -name = "vllm-runner" -version = "0.1.0" -source = { editable = "." } -dependencies = [ - { name = "fastsafetensors", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "mlx-cuda-13", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "torch", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "vllm", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] - -[package.metadata] -requires-dist = [ - { name = "fastsafetensors", marker = "sys_platform == 'linux'", specifier = ">=0.1.10" }, - { name = "mlx-cuda-13", marker = "sys_platform == 'linux'", specifier = "==0.30.6" }, - { name = "torch", marker = "platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform == 'linux'", specifier = ">=2.10.0" }, - { name = "torch", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'", specifier = ">=2.10.0", index = "https://download.pytorch.org/whl/cu130" }, - { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'", specifier = ">=2.10.0", index = "https://download.pytorch.org/whl/cpu" }, - { name = "vllm", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'", git = "https://github.com/hmellor/vllm.git?rev=b99bedc737166ae5ca98cb9e3534b96e0c8c69aa" }, -] - -[[package]] -name = "watchfiles" -version = "1.1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c2/c9/8869df9b2a2d6c59d79220a4db37679e74f807c559ffe5265e08b227a210/watchfiles-1.1.1.tar.gz", hash = "sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2", size = 94440, upload-time = "2025-10-14T15:06:21.08Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/11/fc2502457e0bea39a5c958d86d2cb69e407a4d00b85735ca724bfa6e0d1a/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219", size = 449279, upload-time = "2025-10-14T15:05:04.004Z" }, - { url = "https://files.pythonhosted.org/packages/57/99/da6573ba71166e82d288d4df0839128004c67d2778d3b566c138695f5c0b/watchfiles-1.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b", size = 630007, upload-time = "2025-10-14T15:05:10.117Z" }, - { url = "https://files.pythonhosted.org/packages/27/0d/7c315d4bd5f2538910491a0393c56bf70d333d51bc5b34bee8e68e8cea19/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e", size = 448114, upload-time = "2025-10-14T15:05:17.876Z" }, - { url = "https://files.pythonhosted.org/packages/8e/e0/82583485ea00137ddf69bc84a2db88bd92ab4a6e3c405e5fb878ead8d0e7/watchfiles-1.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef", size = 628826, upload-time = "2025-10-14T15:05:24.398Z" }, - { url = "https://files.pythonhosted.org/packages/b2/7e/5643bfff5acb6539b18483128fdc0ef2cccc94a5b8fbda130c823e8ed636/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb", size = 449919, upload-time = "2025-10-14T15:05:28.701Z" }, - { url = "https://files.pythonhosted.org/packages/98/e0/8c9bdba88af756a2fce230dd365fab2baf927ba42cd47521ee7498fd5211/watchfiles-1.1.1-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6", size = 630626, upload-time = "2025-10-14T15:05:35.216Z" }, - { url = "https://files.pythonhosted.org/packages/d5/a0/ad235642118090f66e7b2f18fd5c42082418404a79205cdfca50b6309c13/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7", size = 448408, upload-time = "2025-10-14T15:05:43.385Z" }, - { url = "https://files.pythonhosted.org/packages/66/1d/d0d200b10c9311ec25d2273f8aad8c3ef7cc7ea11808022501811208a750/watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099", size = 629104, upload-time = "2025-10-14T15:05:49.908Z" }, -] - -[[package]] -name = "websockets" -version = "16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/04/24/4b2031d72e840ce4c1ccb255f693b15c334757fc50023e4db9537080b8c4/websockets-16.0.tar.gz", hash = "sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5", size = 179346, upload-time = "2026-01-10T09:23:47.181Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/66/27ea52741752f5107c2e41fda05e8395a682a1e11c4e592a809a90c6a506/websockets-16.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82", size = 186203, upload-time = "2026-01-10T09:23:05.01Z" }, - { url = "https://files.pythonhosted.org/packages/37/e5/8e32857371406a757816a2b471939d51c463509be73fa538216ea52b792a/websockets-16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8", size = 185653, upload-time = "2026-01-10T09:23:06.301Z" }, - { url = "https://files.pythonhosted.org/packages/ad/6e/9a0927ac24bd33a0a9af834d89e0abc7cfd8e13bed17a86407a66773cc0e/websockets-16.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4", size = 186279, upload-time = "2026-01-10T09:23:17.148Z" }, - { url = "https://files.pythonhosted.org/packages/b9/ca/bf1c68440d7a868180e11be653c85959502efd3a709323230314fda6e0b3/websockets-16.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1", size = 185711, upload-time = "2026-01-10T09:23:18.372Z" }, - { url = "https://files.pythonhosted.org/packages/45/b0/cce3784eb519b7b5ad680d14b9673a31ab8dcb7aad8b64d81709d2430aa8/websockets-16.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e", size = 186501, upload-time = "2026-01-10T09:23:29.449Z" }, - { url = "https://files.pythonhosted.org/packages/19/60/b8ebe4c7e89fb5f6cdf080623c9d92789a53636950f7abacfc33fe2b3135/websockets-16.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944", size = 186062, upload-time = "2026-01-10T09:23:31.368Z" }, - { url = "https://files.pythonhosted.org/packages/6f/28/258ebab549c2bf3e64d2b0217b973467394a9cea8c42f70418ca2c5d0d2e/websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec", size = 171598, upload-time = "2026-01-10T09:23:45.395Z" }, -] - -[[package]] -name = "xgrammar" -version = "0.1.29" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "pydantic", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "torch", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "transformers", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/02/a3/70dbe3ffd331a1e7e1ad5a95690a4086e6c7cdb8089f5c7eda712219ccec/xgrammar-0.1.29.tar.gz", hash = "sha256:cf195afa81b489eebf35d4c6f37f27136d05420739ab4a6f7f065c938d7e4baa", size = 2321317, upload-time = "2025-12-19T08:23:54.53Z" } - -[[package]] -name = "yarl" -version = "1.23.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "idna", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "multidict", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "propcache", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/23/6e/beb1beec874a72f23815c1434518bfc4ed2175065173fb138c3705f658d4/yarl-1.23.0.tar.gz", hash = "sha256:53b1ea6ca88ebd4420379c330aea57e258408dd0df9af0992e5de2078dc9f5d5", size = 194676, upload-time = "2026-03-01T22:07:53.373Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/f4/4e30b250927ffdab4db70da08b9b8d2194d7c7b400167b8fbeca1e4701ca/yarl-1.23.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2569b67d616eab450d262ca7cb9f9e19d2f718c70a8b88712859359d0ab17035", size = 98351, upload-time = "2026-03-01T22:05:46.836Z" }, - { url = "https://files.pythonhosted.org/packages/77/4f/96976cb54cbfc5c9fd73ed4c51804f92f209481d1fb190981c0f8a07a1d7/yarl-1.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:578110dd426f0d209d1509244e6d4a3f1a3e9077655d98c5f22583d63252a08a", size = 98027, upload-time = "2026-03-01T22:05:56.409Z" }, - { url = "https://files.pythonhosted.org/packages/1c/07/61c9dd8ba8f86473263b4036f70fb594c09e99c0d9737a799dfd8bc85651/yarl-1.23.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5023346c4ee7992febc0068e7593de5fa2bf611848c08404b35ebbb76b1b0512", size = 95874, upload-time = "2026-03-01T22:06:17.553Z" }, - { url = "https://files.pythonhosted.org/packages/68/03/093f4055ed4cae649ac53bca3d180bd37102e9e11d048588e9ab0c0108d0/yarl-1.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e7b0460976dc75cb87ad9cc1f9899a4b97751e7d4e77ab840fc9b6d377b8fd24", size = 95839, upload-time = "2026-03-01T22:06:27.309Z" }, - { url = "https://files.pythonhosted.org/packages/ea/d8/d1cb2378c81dd729e98c716582b1ccb08357e8488e4c24714658cc6630e8/yarl-1.23.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4a80f77dc1acaaa61f0934176fccca7096d9b1ff08c8ba9cddf5ae034a24319", size = 99026, upload-time = "2026-03-01T22:06:48.459Z" }, - { url = "https://files.pythonhosted.org/packages/88/08/93749219179a45e27b036e03260fda05190b911de8e18225c294ac95bbc9/yarl-1.23.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5ee586fb17ff8f90c91cf73c6108a434b02d69925f44f5f8e0d7f2f260607eae", size = 98750, upload-time = "2026-03-01T22:06:59.794Z" }, - { url = "https://files.pythonhosted.org/packages/aa/b1/08e95f3caee1fad6e65017b9f26c1d79877b502622d60e517de01e72f95d/yarl-1.23.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:71d006bee8397a4a89f469b8deb22469fe7508132d3c17fa6ed871e79832691c", size = 95943, upload-time = "2026-03-01T22:07:21.266Z" }, - { url = "https://files.pythonhosted.org/packages/2d/86/ed7a73ab85ef00e8bb70b0cb5421d8a2a625b81a333941a469a6f4022828/yarl-1.23.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:041b1a4cefacf65840b4e295c6985f334ba83c30607441ae3cf206a0eed1a2e4", size = 95882, upload-time = "2026-03-01T22:07:32.132Z" }, - { url = "https://files.pythonhosted.org/packages/69/68/c8739671f5699c7dc470580a4f821ef37c32c4cb0b047ce223a7f115757f/yarl-1.23.0-py3-none-any.whl", hash = "sha256:a2df6afe50dea8ae15fa34c9f824a3ee958d785fd5d089063d960bae1daa0a3f", size = 48288, upload-time = "2026-03-01T22:07:51.388Z" }, -] - -[[package]] -name = "zipp" -version = "3.23.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, -] diff --git a/src/exo/api/main.py b/src/exo/api/main.py index 06fb7c0d..aa71caf5 100644 --- a/src/exo/api/main.py +++ b/src/exo/api/main.py @@ -22,7 +22,6 @@ from exo_core.constants import ( ) from exo_core.model_cards import ( ModelCard, - ModelId, delete_custom_card, get_model_cards, is_custom_card, @@ -35,7 +34,7 @@ from exo_core.types.chunks import ( TokenChunk, ToolCallChunk, ) -from exo_core.types.common import CommandId, Id, NodeId, SystemId +from exo_core.types.common import CommandId, Id, ModelId, NodeId, SystemId from exo_core.types.downloads import DownloadCompleted from exo_core.types.instances import Instance, InstanceId, InstanceMeta from exo_core.types.shards import Sharding @@ -72,13 +71,19 @@ from exo.api.adapters.responses import ( generate_responses_stream, responses_request_to_text_generation, ) +from exo_core.types.image_generation import ( + normalize_image_size, + AdvancedImageParams, + BenchImageGenerationTaskParams, + ImageEditsTaskParams, + ImageGenerationTaskParams, + ImageSize, +) from exo.api.types import ( AddCustomModelParams, - AdvancedImageParams, BenchChatCompletionRequest, BenchChatCompletionResponse, BenchImageGenerationResponse, - BenchImageGenerationTaskParams, CancelCommandResponse, ChatCompletionChoice, ChatCompletionMessage, @@ -96,13 +101,10 @@ from exo.api.types import ( GenerationStats, HuggingFaceSearchResult, ImageData, - ImageEditsTaskParams, ImageGenerationResponse, ImageGenerationStats, - ImageGenerationTaskParams, ImageListItem, ImageListResponse, - ImageSize, ModelList, ModelListModel, PlaceInstanceParams, @@ -118,7 +120,6 @@ from exo.api.types import ( TraceRankStats, TraceResponse, TraceStatsResponse, - normalize_image_size, ) from exo.api.types.claude_api import ( ClaudeMessagesRequest, diff --git a/src/exo/api/types/__init__.py b/src/exo/api/types/__init__.py index 4c6218d0..409efa9a 100644 --- a/src/exo/api/types/__init__.py +++ b/src/exo/api/types/__init__.py @@ -1,16 +1,13 @@ from .api import AddCustomModelParams as AddCustomModelParams -from .api import AdvancedImageParams as AdvancedImageParams from .api import BenchChatCompletionRequest as BenchChatCompletionRequest from .api import BenchChatCompletionResponse as BenchChatCompletionResponse from .api import BenchImageGenerationResponse as BenchImageGenerationResponse -from .api import BenchImageGenerationTaskParams as BenchImageGenerationTaskParams from .api import CancelCommandResponse as CancelCommandResponse from .api import ChatCompletionChoice as ChatCompletionChoice from .api import ChatCompletionMessage as ChatCompletionMessage from .api import ChatCompletionMessageText as ChatCompletionMessageText from .api import ChatCompletionRequest as ChatCompletionRequest from .api import ChatCompletionResponse as ChatCompletionResponse -from .api import CompletionTokensDetails as CompletionTokensDetails from .api import CreateInstanceParams as CreateInstanceParams from .api import CreateInstanceResponse as CreateInstanceResponse from .api import DeleteDownloadResponse as DeleteDownloadResponse @@ -23,13 +20,10 @@ from .api import FinishReason as FinishReason from .api import GenerationStats as GenerationStats from .api import HuggingFaceSearchResult as HuggingFaceSearchResult from .api import ImageData as ImageData -from .api import ImageEditsTaskParams as ImageEditsTaskParams from .api import ImageGenerationResponse as ImageGenerationResponse from .api import ImageGenerationStats as ImageGenerationStats -from .api import ImageGenerationTaskParams as ImageGenerationTaskParams from .api import ImageListItem as ImageListItem from .api import ImageListResponse as ImageListResponse -from .api import ImageSize as ImageSize from .api import Logprobs as Logprobs from .api import LogprobsContentItem as LogprobsContentItem from .api import ModelList as ModelList @@ -39,7 +33,6 @@ from .api import PlaceInstanceParams as PlaceInstanceParams from .api import PlacementPreview as PlacementPreview from .api import PlacementPreviewResponse as PlacementPreviewResponse from .api import PowerUsage as PowerUsage -from .api import PromptTokensDetails as PromptTokensDetails from .api import StartDownloadParams as StartDownloadParams from .api import StartDownloadResponse as StartDownloadResponse from .api import StreamingChoiceResponse as StreamingChoiceResponse @@ -54,4 +47,3 @@ from .api import TraceRankStats as TraceRankStats from .api import TraceResponse as TraceResponse from .api import TraceStatsResponse as TraceStatsResponse from .api import Usage as Usage -from .api import normalize_image_size as normalize_image_size diff --git a/src/exo/api/types/api.py b/src/exo/api/types/api.py index 458b7218..20dae61a 100644 --- a/src/exo/api/types/api.py +++ b/src/exo/api/types/api.py @@ -1,20 +1,29 @@ import time -from collections.abc import Generator -from typing import Annotated, Any, Literal, get_args -from uuid import uuid4 +from typing import Any, Literal from exo_core.model_cards import ModelCard from exo_core.models import CamelCaseModel from exo_core.types.common import CommandId, ModelId, NodeId +from exo_core.types.image_generation import ImageData from exo_core.types.instances import Instance, InstanceId, InstanceMeta +from exo_core.types.runner_response import ( + FinishReason, + GenerationStats, + ImageGenerationStats, + ToolCallItem, + TopLogprobItem, + Usage, +) from exo_core.types.shards import Sharding, ShardMetadata from exo_core.types.text_generation import ReasoningEffort -from exo_core.utils.memory import Memory -from pydantic import BaseModel, Field, field_validator +from pydantic import BaseModel, Field -FinishReason = Literal[ - "stop", "length", "tool_calls", "content_filter", "function_call", "error" -] + +class ToolCall(BaseModel): + id: str + index: int | None = None + type: Literal["function"] = "function" + function: ToolCallItem class ErrorInfo(BaseModel): @@ -59,19 +68,6 @@ class ChatCompletionMessageText(BaseModel): text: str -class ToolCallItem(BaseModel): - id: str = Field(default_factory=lambda: str(uuid4())) - name: str - arguments: str - - -class ToolCall(BaseModel): - id: str - index: int | None = None - type: Literal["function"] = "function" - function: ToolCallItem - - class ChatCompletionMessage(BaseModel): role: Literal["system", "user", "assistant", "developer", "tool", "function"] content: ( @@ -88,12 +84,6 @@ class BenchChatCompletionMessage(ChatCompletionMessage): pass -class TopLogprobItem(BaseModel): - token: str - logprob: float - bytes: list[int] | None = None - - class LogprobsContentItem(BaseModel): token: str logprob: float @@ -105,26 +95,6 @@ class Logprobs(BaseModel): content: list[LogprobsContentItem] | None = None -class PromptTokensDetails(BaseModel): - cached_tokens: int = 0 - audio_tokens: int = 0 - - -class CompletionTokensDetails(BaseModel): - reasoning_tokens: int = 0 - audio_tokens: int = 0 - accepted_prediction_tokens: int = 0 - rejected_prediction_tokens: int = 0 - - -class Usage(BaseModel): - prompt_tokens: int - completion_tokens: int - total_tokens: int - prompt_tokens_details: PromptTokensDetails - completion_tokens_details: CompletionTokensDetails - - class StreamingChoiceResponse(BaseModel): index: int delta: ChatCompletionMessage @@ -150,27 +120,6 @@ class ChatCompletionResponse(BaseModel): service_tier: str | None = None -class GenerationStats(BaseModel): - prompt_tps: float - generation_tps: float - prompt_tokens: int - generation_tokens: int - peak_memory_usage: Memory - - -class ImageGenerationStats(BaseModel): - seconds_per_step: float - total_generation_time: float - - num_inference_steps: int - num_images: int - - image_width: int - image_height: int - - peak_memory_usage: Memory - - class NodePowerStats(BaseModel, frozen=True): node_id: NodeId samples: int @@ -285,108 +234,6 @@ class CancelCommandResponse(BaseModel): command_id: CommandId -ImageSize = Literal[ - "auto", - "512x512", - "768x768", - "1024x768", - "768x1024", - "1024x1024", - "1024x1536", - "1536x1024", -] - - -def normalize_image_size(v: object) -> ImageSize: - """Shared validator for ImageSize fields: maps None → "auto" and rejects invalid values.""" - if v is None: - return "auto" - if v not in get_args(ImageSize): - raise ValueError(f"Invalid size: {v!r}. Must be one of {get_args(ImageSize)}") - return v # pyright: ignore[reportReturnType] - - -class AdvancedImageParams(BaseModel): - seed: Annotated[int, Field(ge=0)] | None = None - num_inference_steps: Annotated[int, Field(ge=1, le=100)] | None = None - guidance: Annotated[float, Field(ge=1.0, le=20.0)] | None = None - negative_prompt: str | None = None - num_sync_steps: Annotated[int, Field(ge=1, le=100)] | None = None - - -class ImageGenerationTaskParams(BaseModel): - prompt: str - background: str | None = None - model: str - moderation: str | None = None - n: int | None = 1 - output_compression: int | None = None - output_format: Literal["png", "jpeg", "webp"] = "png" - partial_images: int | None = 0 - quality: Literal["high", "medium", "low"] | None = "medium" - response_format: Literal["url", "b64_json"] | None = "b64_json" - size: ImageSize = "auto" - stream: bool | None = False - style: str | None = "vivid" - user: str | None = None - advanced_params: AdvancedImageParams | None = None - # Internal flag for benchmark mode - set by API, preserved through serialization - bench: bool = False - - @field_validator("size", mode="before") - @classmethod - def normalize_size(cls, v: object) -> ImageSize: - return normalize_image_size(v) - - -class BenchImageGenerationTaskParams(ImageGenerationTaskParams): - bench: bool = True - - -class ImageEditsTaskParams(BaseModel): - """Internal task params for image-editing requests.""" - - image_data: str = "" # Base64-encoded image (empty when using chunked transfer) - total_input_chunks: int = 0 - prompt: str - model: str - n: int | None = 1 - quality: Literal["high", "medium", "low"] | None = "medium" - output_format: Literal["png", "jpeg", "webp"] = "png" - response_format: Literal["url", "b64_json"] | None = "b64_json" - size: ImageSize = "auto" - image_strength: float | None = 0.7 - stream: bool = False - partial_images: int | None = 0 - advanced_params: AdvancedImageParams | None = None - bench: bool = False - - @field_validator("size", mode="before") - @classmethod - def normalize_size(cls, v: object) -> ImageSize: - return normalize_image_size(v) - - def __repr_args__(self) -> Generator[tuple[str, Any], None, None]: - for name, value in super().__repr_args__(): # pyright: ignore[reportAny] - if name == "image_data": - yield name, f"<{len(self.image_data)} chars>" - elif name is not None: - yield name, value - - -class ImageData(BaseModel): - b64_json: str | None = None - url: str | None = None - revised_prompt: str | None = None - - def __repr_args__(self) -> Generator[tuple[str, Any], None, None]: - for name, value in super().__repr_args__(): # pyright: ignore[reportAny] - if name == "b64_json" and self.b64_json is not None: - yield name, f"<{len(self.b64_json)} chars>" - elif name is not None: - yield name, value - - class ImageGenerationResponse(BaseModel): created: int = Field(default_factory=lambda: int(time.time())) data: list[ImageData] diff --git a/src/exo/api/types/ollama_api.py b/src/exo/api/types/ollama_api.py index d4a0c148..7e7786eb 100644 --- a/src/exo/api/types/ollama_api.py +++ b/src/exo/api/types/ollama_api.py @@ -1,7 +1,7 @@ import time from typing import Any, Literal -from exo_core.model_cards import ModelId +from exo_core.types.common import ModelId from pydantic import BaseModel, Field # https://github.com/ollama/ollama/blob/main/docs/api.md diff --git a/src/exo/download/coordinator.py b/src/exo/download/coordinator.py index 568543bd..902aa308 100644 --- a/src/exo/download/coordinator.py +++ b/src/exo/download/coordinator.py @@ -3,8 +3,8 @@ from dataclasses import dataclass, field import anyio from anyio import current_time from exo_core.constants import EXO_MODELS_DIR, EXO_MODELS_PATH -from exo_core.model_cards import ModelId, get_model_cards -from exo_core.types.common import NodeId +from exo_core.model_cards import get_model_cards +from exo_core.types.common import NodeId, ModelId from exo_core.types.downloads import ( DownloadCompleted, DownloadFailed, @@ -13,8 +13,10 @@ from exo_core.types.downloads import ( DownloadProgress, ) from exo_core.types.shards import PipelineShardMetadata, ShardMetadata -from exo_core.utils.downloads import ( +from exo_core.types.downloads import ( RepoDownloadProgress, +) +from exo_core.utils.downloads import ( delete_model, map_repo_download_progress_to_download_progress_data, resolve_model_in_path, diff --git a/src/exo/download/impl_shard_downloader.py b/src/exo/download/impl_shard_downloader.py index 53684a9e..4b9f0af8 100644 --- a/src/exo/download/impl_shard_downloader.py +++ b/src/exo/download/impl_shard_downloader.py @@ -4,12 +4,14 @@ from collections.abc import Awaitable from pathlib import Path from typing import AsyncIterator, Callable -from exo_core.model_cards import ModelCard, ModelId, get_model_cards +from exo_core.model_cards import ModelCard, get_model_cards +from exo_core.types.common import ModelId from exo_core.types.shards import ( PipelineShardMetadata, ShardMetadata, ) -from exo_core.utils.downloads import RepoDownloadProgress, download_shard +from exo_core.types.downloads import RepoDownloadProgress +from exo_core.utils.downloads import download_shard from loguru import logger from exo.download.shard_downloader import ShardDownloader diff --git a/src/exo/download/shard_downloader.py b/src/exo/download/shard_downloader.py index df6a635b..91ab893f 100644 --- a/src/exo/download/shard_downloader.py +++ b/src/exo/download/shard_downloader.py @@ -5,12 +5,13 @@ from datetime import timedelta from pathlib import Path from typing import AsyncIterator, Callable -from exo_core.model_cards import ModelCard, ModelId, ModelTask +from exo_core.model_cards import ModelCard, ModelTask +from exo_core.types.common import ModelId from exo_core.types.shards import ( PipelineShardMetadata, ShardMetadata, ) -from exo_core.utils.downloads import RepoDownloadProgress +from exo_core.types.downloads import RepoDownloadProgress from exo_core.utils.memory import Memory diff --git a/src/exo/download/tests/test_re_download.py b/src/exo/download/tests/test_re_download.py index a39b8ffd..59e85c55 100644 --- a/src/exo/download/tests/test_re_download.py +++ b/src/exo/download/tests/test_re_download.py @@ -8,11 +8,11 @@ from pathlib import Path from typing import Callable from unittest.mock import AsyncMock, patch -from exo_core.model_cards import ModelCard, ModelId, ModelTask -from exo_core.types.common import NodeId, SystemId +from exo_core.model_cards import ModelCard, ModelTask +from exo_core.types.common import NodeId, SystemId, ModelId from exo_core.types.downloads import DownloadCompleted from exo_core.types.shards import PipelineShardMetadata, ShardMetadata -from exo_core.utils.downloads import RepoDownloadProgress +from exo_core.types.downloads import RepoDownloadProgress from exo_core.utils.memory import Memory from exo.download.coordinator import DownloadCoordinator diff --git a/src/exo/master/placement.py b/src/exo/master/placement.py index c411f0fe..a1d417c1 100644 --- a/src/exo/master/placement.py +++ b/src/exo/master/placement.py @@ -3,8 +3,7 @@ from collections.abc import Mapping from copy import deepcopy from typing import Sequence -from exo_core.model_cards import ModelId -from exo_core.types.common import NodeId +from exo_core.types.common import NodeId, ModelId from exo_core.types.downloads import ( DownloadOngoing, DownloadProgress, diff --git a/src/exo/master/tests/test_master.py b/src/exo/master/tests/test_master.py index 602d4446..04827857 100644 --- a/src/exo/master/tests/test_master.py +++ b/src/exo/master/tests/test_master.py @@ -8,8 +8,8 @@ from exo_core.types.common import ModelId, NodeId, SessionId, SystemId from exo_core.types.instances import ( InstanceMeta, MlxRingInstance, - ShardAssignments, ) +from exo_core.types.runners import ShardAssignments from exo_core.types.shards import PipelineShardMetadata, Sharding from exo_core.types.tasks import TaskStatus from exo_core.types.tasks import TextGeneration as TextGenerationTask diff --git a/src/exo/master/tests/test_placement.py b/src/exo/master/tests/test_placement.py index ad510d17..59d0cae8 100644 --- a/src/exo/master/tests/test_placement.py +++ b/src/exo/master/tests/test_placement.py @@ -1,6 +1,6 @@ import pytest -from exo_core.model_cards import ModelCard, ModelId, ModelTask -from exo_core.types.common import CommandId, NodeId +from exo_core.model_cards import ModelCard, ModelTask +from exo_core.types.common import CommandId, NodeId, ModelId from exo_core.types.instances import ( Instance, InstanceId, diff --git a/src/exo/master/tests/test_placement_utils.py b/src/exo/master/tests/test_placement_utils.py index 31789e9c..4bfeb6d3 100644 --- a/src/exo/master/tests/test_placement_utils.py +++ b/src/exo/master/tests/test_placement_utils.py @@ -1,6 +1,6 @@ import pytest -from exo_core.model_cards import ModelCard, ModelId, ModelTask -from exo_core.types.common import NodeId +from exo_core.model_cards import ModelCard, ModelTask +from exo_core.types.common import NodeId, ModelId from exo_core.types.shards import ( CfgShardMetadata, PipelineShardMetadata, diff --git a/src/exo/shared/tests/conftest.py b/src/exo/shared/tests/conftest.py index c534cea0..6fc9b549 100644 --- a/src/exo/shared/tests/conftest.py +++ b/src/exo/shared/tests/conftest.py @@ -5,8 +5,9 @@ from typing import Generator import pytest from _pytest.logging import LogCaptureFixture -from exo_core.model_cards import ModelCard, ModelId, ModelTask +from exo_core.model_cards import ModelCard, ModelTask from exo_core.types.shards import PipelineShardMetadata, ShardMetadata +from exo_core.types.common import ModelId from exo_core.utils.memory import Memory from loguru import logger diff --git a/src/exo/shared/tracing.py b/src/exo/shared/tracing.py index 7f894a5c..bd2bdb4c 100644 --- a/src/exo/shared/tracing.py +++ b/src/exo/shared/tracing.py @@ -10,7 +10,7 @@ from typing import cast, final from exo_core.constants import EXO_TRACING_ENABLED -from exo.worker.runner.bootstrap import logger +from loguru import logger # Context variable to track the current trace category for hierarchical nesting _current_category: ContextVar[str | None] = ContextVar("current_category", default=None) diff --git a/src/exo/shared/types/commands.py b/src/exo/shared/types/commands.py index 6e44ea93..af970662 100644 --- a/src/exo/shared/types/commands.py +++ b/src/exo/shared/types/commands.py @@ -7,7 +7,7 @@ from exo_core.types.shards import Sharding, ShardMetadata from exo_core.types.text_generation import TextGenerationTaskParams from pydantic import Field -from exo.api.types import ( +from exo_core.types.image_generation import ( ImageEditsTaskParams, ImageGenerationTaskParams, ) diff --git a/src/exo/shared/types/profiling.py b/src/exo/shared/types/profiling.py index 76f69cda..f83649d7 100644 --- a/src/exo/shared/types/profiling.py +++ b/src/exo/shared/types/profiling.py @@ -33,8 +33,8 @@ class MemoryUsage(CamelCaseModel): sm = psutil.swap_memory() return cls.from_bytes( - ram_total=vm.total, - ram_available=vm.available if override_memory is None else override_memory, + ram_total=vm.total, # pyright: ignore[reportAny] + ram_available=vm.available if override_memory is None else override_memory, # pyright: ignore[reportAny] swap_total=sm.total, swap_available=sm.free, ) diff --git a/src/exo/worker/engines/image/distributed_model.py b/src/exo/worker/engines/image/distributed_model.py index 4e9188b7..843e4d80 100644 --- a/src/exo/worker/engines/image/distributed_model.py +++ b/src/exo/worker/engines/image/distributed_model.py @@ -9,7 +9,7 @@ from exo_core.utils.downloads import build_model_path from mflux.models.common.config.config import Config from PIL import Image -from exo.api.types import AdvancedImageParams +from exo_core.types.image_generation import AdvancedImageParams from exo.worker.engines.image.config import ImageModelConfig from exo.worker.engines.image.models import ( create_adapter_for_model, @@ -17,8 +17,8 @@ from exo.worker.engines.image.models import ( ) from exo.worker.engines.image.models.base import ModelAdapter from exo.worker.engines.image.pipeline import DiffusionRunner -from exo.worker.engines.mlx.utils_mlx import mlx_distributed_init, mx_barrier -from exo.worker.runner.bootstrap import logger +from mlx_engine.utils_mlx import mlx_distributed_init, mx_barrier +from loguru import logger class DistributedImageModel: diff --git a/src/exo/worker/engines/image/generate.py b/src/exo/worker/engines/image/generate.py index 2c41878f..1a078f1a 100644 --- a/src/exo/worker/engines/image/generate.py +++ b/src/exo/worker/engines/image/generate.py @@ -14,13 +14,13 @@ from exo_core.types.runner_response import ( from exo_core.utils.memory import Memory from PIL import Image -from exo.api.types import ( +from exo_core.types.image_generation import ( AdvancedImageParams, ImageEditsTaskParams, - ImageGenerationStats, ImageGenerationTaskParams, ImageSize, ) +from exo_core.types.runner_response import ImageGenerationStats from exo.worker.engines.image.distributed_model import DistributedImageModel diff --git a/src/exo/worker/main.py b/src/exo/worker/main.py index 4327822a..f92ba490 100644 --- a/src/exo/worker/main.py +++ b/src/exo/worker/main.py @@ -3,8 +3,7 @@ from datetime import datetime, timezone import anyio from anyio import fail_after -from exo_core.model_cards import ModelId -from exo_core.types.common import CommandId, NodeId, SystemId +from exo_core.types.common import CommandId, NodeId, SystemId, ModelId from exo_core.types.downloads import DownloadCompleted from exo_core.types.runners import RunnerId from exo_core.types.tasks import ( @@ -19,7 +18,7 @@ from exo_core.types.tasks import ( from exo_core.utils.downloads import resolve_model_in_path from loguru import logger -from exo.api.types import ImageEditsTaskParams +from exo_core.types.image_generation import ImageEditsTaskParams from exo.shared.apply import apply from exo.shared.types.commands import ( ForwarderCommand, diff --git a/src/exo/worker/runner/bootstrap.py b/src/exo/worker/runner/bootstrap.py index ae959c79..6e9e235d 100644 --- a/src/exo/worker/runner/bootstrap.py +++ b/src/exo/worker/runner/bootstrap.py @@ -5,6 +5,7 @@ import sys from pathlib import Path import loguru +from exo_core.constants import EXO_MODELS_DIR from exo_core.types.instances import BoundInstance, VllmInstance from exo_core.types.runners import RunnerFailed from exo_core.types.tasks import Task, TaskId @@ -12,8 +13,6 @@ from exo_core.types.tasks import Task, TaskId from exo.shared.types.events import Event, RunnerStatusUpdated from exo.utils.channels import ClosedResourceError, MpReceiver, MpSender -logger: "loguru.Logger" = loguru.logger - _CUDA_HOST_LIBS = ["libcuda.so.1", "libnvidia-ml.so.1", "libnvidia-ptxjitcompiler.so.1"] _CUDA_HOST_SEARCH_DIRS = [ Path("/usr/lib/aarch64-linux-gnu"), @@ -37,9 +36,9 @@ def _ensure_cuda_libs() -> None: if lib_path.exists(): try: ctypes.CDLL(str(lib_path), mode=ctypes.RTLD_GLOBAL) - logger.info(f"Loaded CUDA host lib: {lib_path}") + loguru.logger.info(f"Loaded CUDA host lib: {lib_path}") except OSError: - logger.warning(f"Failed to load {lib_path}") + loguru.logger.warning(f"Failed to load {lib_path}") raise return @@ -51,8 +50,8 @@ def entrypoint( cancel_receiver: MpReceiver[TaskId], _logger: "loguru.Logger", ) -> None: - global logger - logger = _logger + loguru.logger = _logger + logger = loguru.logger soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE) resource.setrlimit(resource.RLIMIT_NOFILE, (min(max(soft, 2048), hard), hard)) @@ -72,15 +71,12 @@ def entrypoint( os.environ["VLLM_KV_CACHE_LAYOUT"] = "NHD" os.environ["VLLM_BATCH_INVARIANT"] = "1" _ensure_cuda_libs() - from exo_core.constants import EXO_MODELS_DIR - from exo.worker.runner.llm_inference.runner import Runner, VllmBuilder + from vllm_engine.builder import VllmBuilder + from .llm_inference.runner import Runner - model_id = bound_instance.bound_shard.model_card.model_id - builder = VllmBuilder( - model_id=model_id, - model_path=str(EXO_MODELS_DIR / model_id.normalize()), - trust_remote_code=bound_instance.bound_shard.model_card.trust_remote_code, + builder = VllmBuilder.create( + bound_instance=bound_instance, cancel_receiver=cancel_receiver, event_sender=event_sender, ) @@ -89,14 +85,15 @@ def entrypoint( ) runner.main() elif bound_instance.is_image_model: - from exo.worker.runner.image_models.runner import Runner as ImageRunner + from .image_models.runner import Runner - runner = ImageRunner( + runner = Runner( bound_instance, event_sender, task_receiver, cancel_receiver ) runner.main() else: - from exo.worker.runner.llm_inference.runner import MlxBuilder, Runner + from .llm_inference.runner import Runner + from mlx_engine.builder import MlxBuilder builder = MlxBuilder.create( bound_instance, diff --git a/src/exo/worker/runner/image_models/runner.py b/src/exo/worker/runner/image_models/runner.py index a9fd1497..4cf0e9d5 100644 --- a/src/exo/worker/runner/image_models/runner.py +++ b/src/exo/worker/runner/image_models/runner.py @@ -44,7 +44,7 @@ from exo_core.types.tasks import ( TaskStatus, ) -from exo.api.types import ImageGenerationStats +from exo_core.types.runner_response import ImageGenerationStats from exo.shared.tracing import clear_trace_buffer, get_trace_buffer from exo.shared.types.events import ( ChunkGenerated, @@ -62,10 +62,10 @@ from exo.worker.engines.image import ( initialize_image_model, warmup_image_generator, ) -from exo.worker.engines.mlx.utils_mlx import ( +from mlx_engine.utils_mlx import ( initialize_mlx, ) -from exo.worker.runner.bootstrap import logger +from loguru import logger def _is_primary_output_node(shard_metadata: ShardMetadata) -> bool: diff --git a/src/exo/worker/runner/llm_inference/batch_generator.py b/src/exo/worker/runner/llm_inference/batch_generator.py index 3e7193a7..733f6502 100644 --- a/src/exo/worker/runner/llm_inference/batch_generator.py +++ b/src/exo/worker/runner/llm_inference/batch_generator.py @@ -1,6 +1,5 @@ import itertools import time -from abc import ABC, abstractmethod from collections import deque from collections.abc import Callable, Generator, Iterable from dataclasses import dataclass, field @@ -17,31 +16,24 @@ from mlx_lm.tokenizer_utils import TokenizerWrapper from exo.shared.types.events import ChunkGenerated, Event from exo.utils.channels import MpReceiver, MpSender -from exo.worker.engines.mlx.cache import KVPrefixCache -from exo.worker.engines.mlx.generator.batch_generate import ExoBatchGenerator +from mlx_engine.cache import KVPrefixCache +from mlx_engine.generator.batch_generate import ExoBatchGenerator if TYPE_CHECKING: - from exo.worker.engines.vllm.vllm_generator import VllmBatchEngine -from exo.worker.engines.mlx.generator.generate import ( + from vllm_engine.vllm_generator import VllmBatchEngine +from mlx_engine.generator.generate import ( PrefillCancelled, ) -from exo.worker.engines.mlx.utils_mlx import ( +from mlx_engine.utils_mlx import ( apply_chat_template, mx_all_gather_tasks, mx_any, ) -from exo.worker.runner.bootstrap import logger +from loguru import logger +from exo_core.engine import Engine, Cancelled, Finished from .model_output_parsers import apply_all_parsers -from .tool_parsers import ToolParser - - -class Cancelled: - pass - - -class Finished: - pass +from exo_core.utils.tool_parsers import ToolParser class GeneratorQueue[T]: @@ -59,35 +51,6 @@ class GeneratorQueue[T]: yield self._q.popleft() -class InferenceGenerator(ABC): - _cancelled_tasks: set[TaskId] - - def should_cancel(self, task_id: TaskId) -> bool: - return ( - task_id in self._cancelled_tasks - or CANCEL_ALL_TASKS in self._cancelled_tasks - ) - - @abstractmethod - def warmup(self) -> None: ... - - @abstractmethod - def submit( - self, - task: TextGeneration, - ) -> None: ... - - @abstractmethod - def step( - self, - ) -> Iterable[ - tuple[TaskId, ToolCallResponse | GenerationResponse | Cancelled | Finished] - ]: ... - - @abstractmethod - def close(self) -> None: ... - - EXO_RUNNER_MUST_FAIL = "EXO RUNNER MUST FAIL" EXO_RUNNER_MUST_OOM = "EXO RUNNER MUST OOM" EXO_RUNNER_MUST_TIMEOUT = "EXO RUNNER MUST TIMEOUT" @@ -95,7 +58,7 @@ EXO_RUNNER_MUST_TIMEOUT = "EXO RUNNER MUST TIMEOUT" def _check_for_debug_prompts(task_params: TextGenerationTaskParams) -> None: """Check for debug prompt triggers in the input.""" - from exo.worker.engines.mlx.utils_mlx import mlx_force_oom + from mlx_engine.utils_mlx import mlx_force_oom if len(task_params.input) == 0: return @@ -111,7 +74,7 @@ def _check_for_debug_prompts(task_params: TextGenerationTaskParams) -> None: @dataclass(eq=False) -class SequentialGenerator(InferenceGenerator): +class SequentialGenerator(Engine[TextGeneration, GenerationResponse | ToolCallResponse]): tokenizer: TokenizerWrapper group: mx.distributed.Group | None kv_prefix_cache: KVPrefixCache | None @@ -297,7 +260,7 @@ class SequentialGenerator(InferenceGenerator): @dataclass(eq=False) -class BatchGenerator(InferenceGenerator): +class BatchGenerator(Engine[TextGeneration, GenerationResponse | ToolCallResponse]): tokenizer: TokenizerWrapper group: mx.distributed.Group | None kv_prefix_cache: KVPrefixCache | None diff --git a/src/exo/worker/runner/llm_inference/model_output_parsers.py b/src/exo/worker/runner/llm_inference/model_output_parsers.py index aeb50617..05c1f69c 100644 --- a/src/exo/worker/runner/llm_inference/model_output_parsers.py +++ b/src/exo/worker/runner/llm_inference/model_output_parsers.py @@ -14,11 +14,11 @@ from openai_harmony import ( ) from exo.api.types import ToolCallItem -from exo.worker.engines.mlx.utils_mlx import ( +from mlx_engine.utils_mlx import ( detect_thinking_prompt_suffix, ) -from exo.worker.runner.bootstrap import logger -from exo.worker.runner.llm_inference.tool_parsers import ToolParser +from loguru import logger +from exo_core.utils.tool_parsers import ToolParser @cache @@ -143,7 +143,7 @@ def parse_deepseek_v32( DSML markers like <|DSML|function_calls> may span multiple tokens. Also handles ... blocks for thinking mode. """ - from exo.worker.engines.mlx.dsml_encoding import ( + from mlx_engine.dsml_encoding import ( THINKING_END, THINKING_START, TOOL_CALLS_END, @@ -284,7 +284,7 @@ def _could_be_dsml_prefix(text: str) -> bool: We look for suffixes of text that are prefixes of the TOOL_CALLS_START pattern. This allows us to buffer tokens until we can determine if a tool call is starting. """ - from exo.worker.engines.mlx.dsml_encoding import TOOL_CALLS_START + from mlx_engine.dsml_encoding import TOOL_CALLS_START # Only check the last portion of text that could overlap with the marker max_check = len(TOOL_CALLS_START) diff --git a/src/exo/worker/runner/llm_inference/runner.py b/src/exo/worker/runner/llm_inference/runner.py index 8a6978f8..79ff9259 100644 --- a/src/exo/worker/runner/llm_inference/runner.py +++ b/src/exo/worker/runner/llm_inference/runner.py @@ -1,12 +1,7 @@ -import contextlib import gc -import os import time -from abc import ABC, abstractmethod -from collections.abc import Callable -from dataclasses import dataclass from enum import Enum -from typing import TYPE_CHECKING, Self +from typing import TYPE_CHECKING from anyio import WouldBlock from exo_core.model_cards import ModelTask @@ -15,7 +10,7 @@ from exo_core.types.chunks import ( TokenChunk, ToolCallChunk, ) -from exo_core.types.common import CommandId, ModelId +from exo_core.types.common import CommandId from exo_core.types.instances import BoundInstance from exo_core.types.runner_response import ( GenerationResponse, @@ -53,22 +48,22 @@ from exo.shared.types.events import ( TaskAcknowledged, TaskStatusUpdated, ) -from exo.shared.types.mlx import Model from exo.utils.channels import MpReceiver, MpSender -from exo.worker.engines.mlx.cache import KVPrefixCache -from exo.worker.engines.mlx.utils_mlx import ( - initialize_mlx, - load_mlx_items, -) -from exo.worker.runner.bootstrap import logger -from exo.worker.runner.llm_inference.batch_generator import ( - BatchGenerator, - InferenceGenerator, - SequentialGenerator, -) +from loguru import logger from .batch_generator import Cancelled, Finished -from .tool_parsers import make_mlx_parser + +from exo_core.engine import EngineBuilder, Engine + +try: + from vllm_engine.builder import VllmBuilder +except: + VllmBuilder = type(None) + +try: + from mlx_engine.builder import MlxBuilder +except: + MlxBuilder = type(None) if TYPE_CHECKING: pass @@ -79,31 +74,8 @@ class ExitCode(str, Enum): Shutdown = "Shutdown" -class Builder(ABC): - @abstractmethod - @classmethod - def create( - cls, - bound_instance: BoundInstance, - event_sender: MpSender[Event], - cancel_receiver: MpReceiver[TaskId], - ) -> Self: ... - - @abstractmethod - def connect(self) -> None: ... - - @abstractmethod - def load( - self, - on_timeout: Callable[[], None], - on_layer_loaded: Callable[[int, int], None], - ) -> None: ... - - @abstractmethod - def build(self) -> InferenceGenerator: ... - - @abstractmethod - def close(self) -> None: ... +BuilderType = EngineBuilder[BoundInstance, TextGeneration, GenerationResponse | ToolCallResponse] +EngineType = Engine[TextGeneration, GenerationResponse | ToolCallResponse] class Runner: @@ -113,7 +85,7 @@ class Runner: event_sender: MpSender[Event], task_receiver: MpReceiver[Task], cancel_receiver: MpReceiver[TaskId], - builder: Builder, + builder: BuilderType, ): self.event_sender = event_sender self.task_receiver = task_receiver @@ -136,7 +108,7 @@ class Runner: self.setup_start_time = time.time() - self.generator: Builder | InferenceGenerator = builder + self.generator: BuilderType | EngineType = builder self.seen: set[TaskId] = set() self.active_tasks: dict[ @@ -184,8 +156,7 @@ class Runner: match task: case ConnectToGroup() if isinstance( self.current_status, (RunnerIdle, RunnerFailed) - ): - assert isinstance(self.generator, Builder) + ) and isinstance(self.generator, EngineBuilder): logger.info("runner connecting") self.update_status(RunnerConnecting()) self.acknowledge_task(task) @@ -213,6 +184,7 @@ class Runner: and isinstance(self.current_status, RunnerIdle) ) ): + assert isinstance(self.generator, EngineBuilder) total_layers = ( self.shard_metadata.end_layer - self.shard_metadata.start_layer ) @@ -248,7 +220,7 @@ class Runner: self.update_status(RunnerLoaded()) logger.info("runner loaded") - case StartWarmup() if isinstance(self.current_status, RunnerLoaded): + case StartWarmup() if isinstance(self.current_status, RunnerLoaded) and isinstance(self.generator, Engine): assert isinstance(self.generator, InferenceGenerator) logger.info("runner warming up") @@ -289,13 +261,13 @@ class Runner: self.update_status(RunnerShutdown()) def submit_text_generation(self, task: TextGeneration): - assert isinstance(self.generator, InferenceGenerator) + assert isinstance(self.generator, Engine) self.active_tasks[task.task_id] = task self.generator.submit(task) def handle_generation_tasks(self, starting_task: TextGeneration): assert isinstance(self.current_status, RunnerReady) - assert isinstance(self.generator, InferenceGenerator) + assert isinstance(self.generator, Engine) logger.info(f"received chat request: {starting_task}") self.update_status(RunnerRunning()) @@ -403,206 +375,3 @@ class Runner: ), ) ) - - -@dataclass -class MlxBuilder(Builder): - import mlx.core as mx - from mlx_lm.tokenizer_utils import TokenizerWrapper - - model_id: ModelId - bound_instance: BoundInstance - event_sender: MpSender[Event] - cancel_receiver: MpReceiver[TaskId] - inference_model: Model | None = None - tokenizer: TokenizerWrapper | None = None - group: mx.distributed.Group | None = None - - @classmethod - def create( - cls, - bound_instance: BoundInstance, - event_sender: MpSender[Event], - cancel_receiver: MpReceiver[TaskId], - ) -> Self: - return cls( - bound_instance.instance.shard_assignments.model_id, - bound_instance, - event_sender, - cancel_receiver, - ) - - def connect(self) -> None: - self.group = initialize_mlx(self.bound_instance) - - def load( - self, - on_timeout: Callable[[], None], - on_layer_loaded: Callable[[int, int], None], - ) -> None: - self.inference_model, self.tokenizer = load_mlx_items( - self.bound_instance, - self.group, - on_timeout=on_timeout, - on_layer_loaded=on_layer_loaded, - ) - - def build(self) -> InferenceGenerator: - assert self.inference_model - assert self.tokenizer - - tool_parser = None - logger.info( - f"model has_tool_calling={self.tokenizer.has_tool_calling} using tokens {self.tokenizer.tool_call_start}, {self.tokenizer.tool_call_end}" - ) - if ( - self.tokenizer.tool_call_start - and self.tokenizer.tool_call_end - and self.tokenizer.tool_parser # type: ignore - ): - tool_parser = make_mlx_parser( - self.tokenizer.tool_call_start, - self.tokenizer.tool_call_end, - self.tokenizer.tool_parser, # type: ignore - ) - - kv_prefix_cache = KVPrefixCache(self.group) - - from functools import partial - - from exo.worker.engines.mlx.generator.generate import ( - mlx_generate, - warmup_inference, - ) - - device_rank = 0 if self.group is None else self.group.rank() - generate_fn = partial( - mlx_generate, model=self.inference_model, tokenizer=self.tokenizer - ) - warmup_fn = partial( - warmup_inference, - model=self.inference_model, - tokenizer=self.tokenizer, - group=self.group, - model_id=self.model_id, - ) - - if os.environ.get("EXO_NO_BATCH"): - logger.info("using SequentialGenerator (batching disabled)") - return SequentialGenerator( - tokenizer=self.tokenizer, - group=self.group, - tool_parser=tool_parser, - kv_prefix_cache=kv_prefix_cache, - model_id=self.model_id, - device_rank=device_rank, - cancel_receiver=self.cancel_receiver, - event_sender=self.event_sender, - _generate_fn=generate_fn, - _warmup_fn=warmup_fn, - ) - from exo.worker.runner.llm_inference.batch_generator import ExoBatchGenerator - - logger.info("using BatchGenerator") - gen = ExoBatchGenerator( - model=self.inference_model, - tokenizer=self.tokenizer, - group=self.group, - kv_prefix_cache=kv_prefix_cache, - model_id=self.model_id, - ) - return BatchGenerator( - tokenizer=self.tokenizer, - group=self.group, - tool_parser=tool_parser, - kv_prefix_cache=kv_prefix_cache, - model_id=self.model_id, - device_rank=device_rank, - cancel_receiver=self.cancel_receiver, - event_sender=self.event_sender, - _gen=gen, - ) - - def close(self): - with contextlib.suppress(NameError, AttributeError): - del self.inference_model, self.tokenizer - - -@dataclass -class VllmBuilder(Builder): - model_id: ModelId - model_path: str - trust_remote_code: bool - cancel_receiver: MpReceiver[TaskId] - event_sender: MpSender[Event] - bound_instance: BoundInstance - - @classmethod - def create( - cls, - bound_instance: BoundInstance, - event_sender: MpSender[Event], - cancel_receiver: MpReceiver[TaskId], - ) -> Self: - from exo_core.constants import EXO_MODELS_DIR - - mid = bound_instance.instance.shard_assignments.model_id - return cls( - mid, - str(EXO_MODELS_DIR / mid.normalize()), - bound_instance.bound_shard.model_card.trust_remote_code, - cancel_receiver, - event_sender, - bound_instance, - ) - - def connect(self) -> None: - raise NotImplementedError( - "Multiple node VLLM instances are not supported at the moment!" - ) - - def load( - self, - on_timeout: Callable[[], None], - on_layer_loaded: Callable[[int, int], None], - ) -> None: - from vllm_engine.vllm_generator import load_vllm_engine - - self._engine, self._tool_parser, self._prefix_cache = load_vllm_engine( - model_path=self.model_path, - model_id=self.model_id, - trust_remote_code=self.trust_remote_code, - n_layers=self.bound_instance.bound_shard.model_card.n_layers, - on_layer_loaded=on_layer_loaded, - ) - - def build(self) -> InferenceGenerator: - from exo.worker.engines.vllm.vllm_generator import VllmBatchEngine - - gen = VllmBatchEngine( - engine=self._engine, - model_id=self.model_id, - prefix_cache=self._prefix_cache, - ) - from mlx_lm.tokenizer_utils import TokenizerWrapper - - tokenizer = TokenizerWrapper(self._engine.get_tokenizer()) - max_concurrent = 1 if os.environ.get("EXO_NO_BATCH") else 8 - - logger.info(f"using BatchGenerator (vLLM, max_concurrent={max_concurrent})") - return BatchGenerator( - tokenizer=tokenizer, - group=None, - tool_parser=self._tool_parser, - kv_prefix_cache=None, - model_id=self.model_id, - device_rank=0, - cancel_receiver=self.cancel_receiver, - event_sender=self.event_sender, - _gen=gen, - max_concurrent_requests=max_concurrent, - ) - - def close(self) -> None: - with contextlib.suppress(NameError, AttributeError): - del self._engine, self._prefix_cache, self._tool_parser diff --git a/src/exo/worker/tests/unittests/test_runner/test_dsml_e2e.py b/src/exo/worker/tests/unittests/test_runner/test_dsml_e2e.py index c99a6e6b..d9145154 100644 --- a/src/exo/worker/tests/unittests/test_runner/test_dsml_e2e.py +++ b/src/exo/worker/tests/unittests/test_runner/test_dsml_e2e.py @@ -7,7 +7,7 @@ from exo_core.types.runner_response import ( ToolCallResponse, ) -from exo.worker.engines.mlx.dsml_encoding import ( +from mlx_engine.dsml_encoding import ( ASSISTANT_TOKEN, BOS_TOKEN, DSML_TOKEN, diff --git a/uv.lock b/uv.lock index 77a813d1..4478b651 100644 --- a/uv.lock +++ b/uv.lock @@ -509,7 +509,7 @@ name = "contourpy" version = "1.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "numpy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } wheels = [ @@ -816,12 +816,13 @@ dependencies = [ { name = "huggingface-hub", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "hypercorn", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "loguru", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "mflux", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "mlx", version = "0.30.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "mflux", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "mlx", version = "0.30.6", source = { registry = "https://pypi.org/simple" }, extra = ["cpu"], marker = "sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "mlx", version = "0.30.7.dev20260306+257d5692", source = { git = "https://github.com/rltakashige/mlx-jaccl-fix-small-recv.git?branch=address-rdma-gpu-locks#257d5692fc7af6bba3b8afaeb63c549b7d1e43d5" }, marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "mlx-lm", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "msgspec", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "openai-harmony", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "pillow", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "psutil", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "pydantic", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "python-multipart", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, @@ -846,11 +847,13 @@ build = [ ] dev = [ { name = "basedpyright", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "mlx-engine", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "pyinstaller", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "pytest", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "pytest-asyncio", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "pytest-env", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "ruff", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "vllm-engine", marker = "sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, ] [package.metadata] @@ -866,13 +869,14 @@ requires-dist = [ { name = "huggingface-hub", specifier = ">=0.33.4" }, { name = "hypercorn", specifier = ">=0.18.0" }, { name = "loguru", specifier = ">=0.7.3" }, - { name = "mflux", marker = "sys_platform == 'darwin'", specifier = "==0.16.9" }, + { name = "mflux", specifier = "==0.16.9" }, { name = "mlx", marker = "sys_platform == 'darwin'", git = "https://github.com/rltakashige/mlx-jaccl-fix-small-recv.git?branch=address-rdma-gpu-locks" }, - { name = "mlx", marker = "sys_platform == 'linux'", specifier = "==0.30.6" }, + { name = "mlx", extras = ["cpu"], marker = "sys_platform == 'linux'" }, { name = "mlx-engine", marker = "extra == 'mlx'", editable = "python/mlx_engine" }, { name = "mlx-lm", git = "https://github.com/rltakashige/mlx-lm?branch=leo%2Feval-left-padding-in-batched-rotation" }, { name = "msgspec", specifier = ">=0.19.0" }, { name = "openai-harmony", specifier = ">=0.0.8" }, + { name = "pillow", specifier = ">=12.1.1" }, { name = "psutil", specifier = ">=7.0.0" }, { name = "pydantic", specifier = ">=2.11.7" }, { name = "python-multipart", specifier = ">=0.0.21" }, @@ -889,11 +893,13 @@ provides-extras = ["mlx", "cuda"] build = [{ name = "nanobind" }] dev = [ { name = "basedpyright", specifier = ">=1.29.0" }, + { name = "mlx-engine", editable = "python/mlx_engine" }, { name = "pyinstaller", specifier = ">=6.17.0" }, { name = "pytest", specifier = ">=8.4.0" }, { name = "pytest-asyncio", specifier = ">=1.0.0" }, { name = "pytest-env" }, { name = "ruff", specifier = ">=0.11.13" }, + { name = "vllm-engine", marker = "sys_platform == 'linux'", editable = "python/vllm_engine" }, ] [[package]] @@ -1513,7 +1519,7 @@ name = "id" version = "1.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "urllib3", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "urllib3", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6d/04/c2156091427636080787aac190019dc64096e56a23b7364d3c1764ee3a06/id-1.6.1.tar.gz", hash = "sha256:d0732d624fb46fd4e7bc4e5152f00214450953b9e772c182c1c22964def1a069", size = 18088, upload-time = "2026-02-04T16:19:41.26Z" } wheels = [ @@ -1616,7 +1622,7 @@ name = "jaraco-classes" version = "3.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "more-itertools", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "more-itertools", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", size = 11780, upload-time = "2024-03-31T07:27:36.643Z" } wheels = [ @@ -1637,13 +1643,22 @@ name = "jaraco-functools" version = "4.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "more-itertools", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "more-itertools", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0f/27/056e0638a86749374d6f57d0b0db39f29509cce9313cf91bdc0ac4d91084/jaraco_functools-4.4.0.tar.gz", hash = "sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb", size = 19943, upload-time = "2025-12-21T09:29:43.6Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl", hash = "sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176", size = 10481, upload-time = "2025-12-21T09:29:42.27Z" }, ] +[[package]] +name = "jeepney" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/6f/357efd7602486741aa73ffc0617fb310a29b588ed0fd69c2399acbb85b0c/jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732", size = 106758, upload-time = "2025-02-27T18:51:01.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload-time = "2025-02-27T18:51:00.104Z" }, +] + [[package]] name = "jinja2" version = "3.1.6" @@ -1769,9 +1784,11 @@ name = "keyring" version = "25.7.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jaraco-classes", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "jaraco-context", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "jaraco-functools", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "jaraco-classes", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "jaraco-context", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "jaraco-functools", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "jeepney", marker = "sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "secretstorage", marker = "sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/43/4b/674af6ef2f97d56f0ab5153bf0bfa28ccb6c3ed4d1babf4305449668807b/keyring-25.7.0.tar.gz", hash = "sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b", size = 63516, upload-time = "2025-11-16T16:26:09.482Z" } wheels = [ @@ -2111,15 +2128,15 @@ name = "matplotlib" version = "3.10.8" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "contourpy", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "cycler", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "fonttools", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "kiwisolver", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "numpy", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "packaging", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "pillow", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "pyparsing", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "python-dateutil", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "contourpy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "cycler", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "fonttools", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "kiwisolver", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "numpy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "packaging", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "pillow", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "pyparsing", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "python-dateutil", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/8a/76/d3c6e3a13fe484ebe7718d14e269c9569c4eb0020a968a327acb3b9a8fe6/matplotlib-3.10.8.tar.gz", hash = "sha256:2299372c19d56bcd35cf05a2738308758d32b9eaed2371898d8f5bd33f084aa3", size = 34806269, upload-time = "2025-12-10T22:56:51.155Z" } wheels = [ @@ -2203,28 +2220,31 @@ name = "mflux" version = "0.16.9" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "filelock", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "fonttools", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "hf-transfer", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "huggingface-hub", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "matplotlib", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "filelock", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "fonttools", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "hf-transfer", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "huggingface-hub", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "matplotlib", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "mlx", version = "0.30.6", source = { registry = "https://pypi.org/simple" }, extra = ["cuda13"], marker = "sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "mlx", version = "0.30.7.dev20260306+257d5692", source = { git = "https://github.com/rltakashige/mlx-jaccl-fix-small-recv.git?branch=address-rdma-gpu-locks#257d5692fc7af6bba3b8afaeb63c549b7d1e43d5" }, marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "numpy", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "opencv-python", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "piexif", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "pillow", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "platformdirs", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "regex", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "requests", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "safetensors", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "sentencepiece", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "tokenizers", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "toml", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "tqdm", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "transformers", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "twine", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "urllib3", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "numpy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "opencv-python", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "piexif", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "pillow", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "platformdirs", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "regex", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "requests", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "safetensors", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "sentencepiece", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "tokenizers", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "toml", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform == 'linux') or (platform_machine == 'aarch64' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench') or (platform_machine == 'x86_64' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench') or sys_platform == 'darwin' or (sys_platform != 'linux' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "torch", version = "2.10.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine != 'x86_64' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench') or (sys_platform != 'linux' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "torch", version = "2.10.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine != 'aarch64' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench') or (sys_platform != 'linux' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "tqdm", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "transformers", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "twine", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "urllib3", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e3/dc/73dfccae395df22623fbb6f748657700fd9372be22904a0dafb825dc42d2/mflux-0.16.9.tar.gz", hash = "sha256:ff35e9386b5f026a6b97c786b3426e5341105de3356e55ec1b0c5951ff0ac8c8", size = 764296, upload-time = "2026-03-07T11:54:45.031Z" } wheels = [ @@ -2280,6 +2300,14 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/42/92/3140a15a50cb1f9267a6552171e1dfa577861de53e093124bc43707f2a0e/mlx-0.30.6-cp314-cp314-manylinux_2_35_x86_64.whl", hash = "sha256:4a6ffd2d16728cf95f63a1b555d7c2eaeea686a0e6b73228bd265411cb5d77a4", size = 663569, upload-time = "2026-02-06T03:45:37.242Z" }, ] +[package.optional-dependencies] +cpu = [ + { name = "mlx-cpu", marker = "sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, +] +cuda13 = [ + { name = "mlx-cuda-13", marker = "sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, +] + [[package]] name = "mlx" version = "0.30.7.dev20260306+257d5692" @@ -2291,6 +2319,15 @@ resolution-markers = [ "sys_platform == 'darwin' and extra != 'extra-3-exo-cuda' and extra != 'project-9-exo-bench'", ] +[[package]] +name = "mlx-cpu" +version = "0.30.6" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/fd/b52c37d8514c321675bd9c8dacf1a26f493bb1004adbb3986feda76f2776/mlx_cpu-0.30.6-py3-none-manylinux_2_35_aarch64.whl", hash = "sha256:d4ca39400e06a762ab8c43c1da7e4ada87d9880b864d10eff8023dc910c76985", size = 8689310, upload-time = "2026-02-06T01:48:34.598Z" }, + { url = "https://files.pythonhosted.org/packages/67/a1/f097b2042c3373abeb0365b52a5f5fc9176fe5c14682483b53012f714697/mlx_cpu-0.30.6-py3-none-manylinux_2_35_x86_64.whl", hash = "sha256:573baa804539b64fc3e1740d7055e80e7b47eaa4139bbace69d6f9896d2081e4", size = 10262929, upload-time = "2026-02-06T01:48:37.157Z" }, +] + [[package]] name = "mlx-cuda-13" version = "0.30.6" @@ -2312,10 +2349,16 @@ version = "0.1.0" source = { editable = "python/mlx_engine" } dependencies = [ { name = "exo-core", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "loguru", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "psutil", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, ] [package.metadata] -requires-dist = [{ name = "exo-core", editable = "python/exo_core" }] +requires-dist = [ + { name = "exo-core", editable = "python/exo_core" }, + { name = "loguru", specifier = ">=0.7.3" }, + { name = "psutil", specifier = ">=7.0.0" }, +] [[package]] name = "mlx-lm" @@ -2865,7 +2908,7 @@ name = "opencv-python" version = "4.13.0.92" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "numpy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/fc/6f/5a28fef4c4a382be06afe3938c64cc168223016fa520c5abaf37e8862aa5/opencv_python-4.13.0.92-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:caf60c071ec391ba51ed00a4a920f996d0b64e3e46068aac1f646b5de0326a19", size = 46247052, upload-time = "2026-02-05T07:01:25.046Z" }, @@ -3773,7 +3816,7 @@ name = "python-dateutil" version = "2.9.0.post0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "six", marker = "sys_platform == 'darwin' or (sys_platform == 'linux' and extra == 'project-9-exo-bench') or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "six", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } wheels = [ @@ -3900,9 +3943,9 @@ name = "readme-renderer" version = "44.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "docutils", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "nh3", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "pygments", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "docutils", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "nh3", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "pygments", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5a/a9/104ec9234c8448c4379768221ea6df01260cd6c2ce13182d4eac531c8342/readme_renderer-44.0.tar.gz", hash = "sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1", size = 32056, upload-time = "2024-07-08T15:00:57.805Z" } wheels = [ @@ -4014,7 +4057,7 @@ name = "requests-toolbelt" version = "1.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "requests", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "requests", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } wheels = [ @@ -4363,6 +4406,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165, upload-time = "2026-02-23T00:22:29.563Z" }, ] +[[package]] +name = "secretstorage" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography", marker = "sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "jeepney", marker = "sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl", hash = "sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137", size = 15554, upload-time = "2025-11-23T19:02:51.545Z" }, +] + [[package]] name = "sentencepiece" version = "0.2.1" @@ -4933,15 +4989,15 @@ name = "twine" version = "6.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "id", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "keyring", marker = "(platform_machine != 'ppc64le' and platform_machine != 's390x' and sys_platform == 'darwin') or (platform_machine == 'ppc64le' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench') or (platform_machine == 's390x' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench') or (sys_platform != 'darwin' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "packaging", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "readme-renderer", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "requests", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "requests-toolbelt", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "rfc3986", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "rich", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, - { name = "urllib3", marker = "sys_platform == 'darwin' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "id", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "keyring", marker = "(platform_machine != 'ppc64le' and platform_machine != 's390x' and sys_platform == 'darwin') or (platform_machine != 'ppc64le' and platform_machine != 's390x' and sys_platform == 'linux') or (platform_machine == 'ppc64le' and sys_platform == 'darwin' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench') or (platform_machine == 's390x' and sys_platform == 'darwin' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench') or (platform_machine == 'ppc64le' and sys_platform == 'linux' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench') or (platform_machine == 's390x' and sys_platform == 'linux' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench') or (sys_platform != 'darwin' and sys_platform != 'linux' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "packaging", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "readme-renderer", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "requests", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "requests-toolbelt", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "rfc3986", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "rich", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "urllib3", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e0/a8/949edebe3a82774c1ec34f637f5dd82d1cf22c25e963b7d63771083bbee5/twine-6.2.0.tar.gz", hash = "sha256:e5ed0d2fd70c9959770dce51c8f39c8945c574e18173a7b81802dab51b4b75cf", size = 172262, upload-time = "2025-09-04T15:43:17.255Z" } wheels = [ @@ -5140,7 +5196,9 @@ source = { editable = "python/vllm_engine" } dependencies = [ { name = "exo-core", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "fastsafetensors", marker = "sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "loguru", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "mlx-cuda-13", marker = "sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, + { name = "mlx-engine", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or (extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform == 'linux') or (platform_machine == 'aarch64' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench') or (platform_machine == 'x86_64' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench') or (sys_platform != 'linux' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "torch", version = "2.10.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine != 'x86_64' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench') or (sys_platform != 'linux' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, { name = "torch", version = "2.10.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine != 'aarch64' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench') or (sys_platform != 'linux' and extra == 'extra-3-exo-cuda' and extra == 'project-9-exo-bench')" }, @@ -5151,7 +5209,9 @@ dependencies = [ requires-dist = [ { name = "exo-core", editable = "python/exo_core" }, { name = "fastsafetensors", marker = "sys_platform == 'linux'", specifier = ">=0.1.10" }, + { name = "loguru", specifier = ">=0.7.3" }, { name = "mlx-cuda-13", marker = "sys_platform == 'linux'", specifier = "==0.30.6" }, + { name = "mlx-engine", editable = "python/mlx_engine" }, { name = "torch", marker = "platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform == 'linux'", specifier = ">=2.10.0" }, { name = "torch", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'", specifier = ">=2.10.0", index = "https://download.pytorch.org/whl/cu130" }, { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'", specifier = ">=2.10.0", index = "https://download.pytorch.org/whl/cpu" },