using LLama.Native; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LLama { public class Quantizer { public static bool Quantize(string srcFileName, string dstFilename, LLamaFtype ftype, int nthread = 0, bool printInfo = true) { return Quantize(srcFileName, dstFilename, FtypeToString(ftype), nthread, printInfo); } public static bool Quantize(string srcFileName, string dstFilename, string ftype, int nthread = 0, bool printInfo = true) { if (!ValidateFtype(ftype)) { throw new ArgumentException($"The type {Enum.GetName(typeof(LLamaFtype), ftype)} is not a valid type " + $"to perform quantization."); } return NativeApi.ggml_custom_quantize(srcFileName, dstFilename, ftype, nthread, printInfo); } private static bool ValidateFtype(string ftype) { return new string[] { "q4_0", "q4_1", "q4_2", "q5_0", "q5_1", "q8_0" }.Contains(ftype); } private static string FtypeToString(LLamaFtype ftype) { return ftype switch { LLamaFtype.LLAMA_FTYPE_MOSTLY_Q4_0 => "q4_0", LLamaFtype.LLAMA_FTYPE_MOSTLY_Q4_1 => "q4_1", LLamaFtype.LLAMA_FTYPE_MOSTLY_Q4_2 => "q4_2", LLamaFtype.LLAMA_FTYPE_MOSTLY_Q5_0 => "q5_0", LLamaFtype.LLAMA_FTYPE_MOSTLY_Q5_1 => "q5_1", LLamaFtype.LLAMA_FTYPE_MOSTLY_Q8_0 => "q8_0", _ => throw new ArgumentException($"The type {Enum.GetName(typeof(LLamaFtype), ftype)} is not a valid type " + $"to perform quantization.") }; } } }