// Copyright © 2023-2024 Apple Inc. #pragma once #include #include #include "mlx/array.h" #include "mlx/io/load.h" #include "mlx/stream.h" #include "mlx/utils.h" namespace mlx::core { using GGUFMetaData = std::variant>; using GGUFLoad = std::pair< std::unordered_map, std::unordered_map>; using SafetensorsLoad = std::pair< std::unordered_map, std::unordered_map>; /** Save array to out stream in .npy format */ void save(std::shared_ptr out_stream, array a); /** Save array to file in .npy format */ void save(std::string file, array a); /** Load array from reader in .npy format */ array load(std::shared_ptr in_stream, StreamOrDevice s = {}); /** Load array from file in .npy format */ array load(std::string file, StreamOrDevice s = {}); /** Load array map from .safetensors file format */ SafetensorsLoad load_safetensors( std::shared_ptr in_stream, StreamOrDevice s = {}); SafetensorsLoad load_safetensors( const std::string& file, StreamOrDevice s = {}); void save_safetensors( std::shared_ptr in_stream, std::unordered_map, std::unordered_map metadata = {}); void save_safetensors( std::string file, std::unordered_map, std::unordered_map metadata = {}); /** Load array map and metadata from .gguf file format */ GGUFLoad load_gguf(const std::string& file, StreamOrDevice s = {}); void save_gguf( std::string file, std::unordered_map array_map, std::unordered_map meta_data = {}); } // namespace mlx::core