From 0b03b9c32f483be2d7a4e902d13a909b546ae6bf Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Fri, 23 Aug 2024 11:20:39 -0700 Subject: [PATCH 01/55] llm: Align cmake define for cuda no peer copy (#6455) Define changed recently and this slipped through the cracks with the old name. --- llm/generate/gen_linux.sh | 2 +- llm/generate/gen_windows.ps1 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/llm/generate/gen_linux.sh b/llm/generate/gen_linux.sh index 6927dda8..1f702ca2 100755 --- a/llm/generate/gen_linux.sh +++ b/llm/generate/gen_linux.sh @@ -252,7 +252,7 @@ if [ -z "${OLLAMA_SKIP_ROCM_GENERATE}" -a -d "${ROCM_PATH}" ]; then ROCM_VARIANT=_v$(ls ${ROCM_PATH}/lib/librocblas.so.*.*.????? | cut -f5 -d. || true) fi init_vars - CMAKE_DEFS="${COMMON_CMAKE_DEFS} ${CMAKE_DEFS} -DGGML_HIPBLAS=on -DLLAMA_CUDA_NO_PEER_COPY=on -DCMAKE_C_COMPILER=$ROCM_PATH/llvm/bin/clang -DCMAKE_CXX_COMPILER=$ROCM_PATH/llvm/bin/clang++ -DAMDGPU_TARGETS=$(amdGPUs) -DGPU_TARGETS=$(amdGPUs)" + CMAKE_DEFS="${COMMON_CMAKE_DEFS} ${CMAKE_DEFS} -DGGML_HIPBLAS=on -DGGML_CUDA_NO_PEER_COPY=on -DCMAKE_C_COMPILER=$ROCM_PATH/llvm/bin/clang -DCMAKE_CXX_COMPILER=$ROCM_PATH/llvm/bin/clang++ -DAMDGPU_TARGETS=$(amdGPUs) -DGPU_TARGETS=$(amdGPUs)" # Users building from source can tune the exact flags we pass to cmake for configuring llama.cpp if [ -n "${OLLAMA_CUSTOM_ROCM_DEFS}" ]; then echo "OLLAMA_CUSTOM_ROCM_DEFS=\"${OLLAMA_CUSTOM_ROCM_DEFS}\"" diff --git a/llm/generate/gen_windows.ps1 b/llm/generate/gen_windows.ps1 index cbdfd09f..7179c1bc 100644 --- a/llm/generate/gen_windows.ps1 +++ b/llm/generate/gen_windows.ps1 @@ -355,7 +355,7 @@ function build_rocm() { "-DCMAKE_C_COMPILER=clang.exe", "-DCMAKE_CXX_COMPILER=clang++.exe", "-DGGML_HIPBLAS=on", - "-DLLAMA_CUDA_NO_PEER_COPY=on", + "-DGGML_CUDA_NO_PEER_COPY=on", "-DHIP_PLATFORM=amd", "-DGGML_AVX=on", "-DGGML_AVX2=off", From 7a1e1c1cafe4d3f3f935dc7192f9e66d4b2185b3 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Fri, 23 Aug 2024 11:21:12 -0700 Subject: [PATCH 02/55] gpu: Ensure driver version set before variant (#6480) During rebasing, the ordering was inverted causing the cuda version selection logic to break, with driver version being evaluated as zero incorrectly causing a downgrade to v11. --- gpu/gpu.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gpu/gpu.go b/gpu/gpu.go index 72d237a6..10afb1e3 100644 --- a/gpu/gpu.go +++ b/gpu/gpu.go @@ -264,6 +264,8 @@ func GetGPUInfo() GpuInfoList { gpuInfo.computeMajor = int(memInfo.major) gpuInfo.computeMinor = int(memInfo.minor) gpuInfo.MinimumMemory = cudaMinimumMemory + gpuInfo.DriverMajor = driverMajor + gpuInfo.DriverMinor = driverMinor variant := cudaVariant(gpuInfo) if depPath != "" { gpuInfo.DependencyPath = depPath @@ -275,8 +277,6 @@ func GetGPUInfo() GpuInfoList { } } gpuInfo.Name = C.GoString(&memInfo.gpu_name[0]) - gpuInfo.DriverMajor = driverMajor - gpuInfo.DriverMinor = driverMinor gpuInfo.Variant = variant // query the management library as well so we can record any skew between the two From 0c819e167becd7f08312d2a1a1e2ac8e8ea5d4da Mon Sep 17 00:00:00 2001 From: Patrick Devine Date: Fri, 23 Aug 2024 11:29:56 -0700 Subject: [PATCH 03/55] convert safetensor adapters into GGUF (#6327) --- cmd/cmd.go | 6 + convert/convert.go | 111 +++++++++++-- convert/convert_bert.go | 18 +- convert/convert_gemma.go | 18 +- convert/convert_gemma2.go | 12 +- convert/convert_gemma2_adapter.go | 91 +++++++++++ convert/convert_llama.go | 16 +- convert/convert_llama_adapter.go | 169 +++++++++++++++++++ convert/convert_mixtral.go | 16 +- convert/convert_phi3.go | 14 +- convert/convert_test.go | 262 +++++++++++++++++++++++++++--- convert/reader.go | 2 + llm/ggml.go | 8 + server/images.go | 11 +- server/model.go | 38 ++++- server/model_test.go | 6 +- 16 files changed, 697 insertions(+), 101 deletions(-) create mode 100644 convert/convert_gemma2_adapter.go create mode 100644 convert/convert_llama_adapter.go diff --git a/cmd/cmd.go b/cmd/cmd.go index a8a02605..b75c0b5e 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -204,6 +204,12 @@ func tempZipFiles(path string) (string, error) { // safetensors files might be unresolved git lfs references; skip if they are // covers model-x-of-y.safetensors, model.fp32-x-of-y.safetensors, model.safetensors files = append(files, st...) + } else if st, _ := glob(filepath.Join(path, "adapters.safetensors"), "application/octet-stream"); len(st) > 0 { + // covers adapters.safetensors + files = append(files, st...) + } else if st, _ := glob(filepath.Join(path, "adapter_model.safetensors"), "application/octet-stream"); len(st) > 0 { + // covers adapter_model.safetensors + files = append(files, st...) } else if pt, _ := glob(filepath.Join(path, "pytorch_model*.bin"), "application/zip"); len(pt) > 0 { // pytorch files might also be unresolved git lfs references; skip if they are // covers pytorch_model-x-of-y.bin, pytorch_model.fp32-x-of-y.bin, pytorch_model.bin diff --git a/convert/convert.go b/convert/convert.go index 5a314cdd..8c7b0943 100644 --- a/convert/convert.go +++ b/convert/convert.go @@ -12,12 +12,22 @@ import ( "github.com/ollama/ollama/llm" ) -type Parameters struct { +type ModelParameters struct { Architectures []string `json:"architectures"` VocabSize uint32 `json:"vocab_size"` } -func (Parameters) KV(t *Tokenizer) llm.KV { +type AdapterParameters struct { + Alpha uint32 `json:"lora_alpha"` + LoraLayers uint32 `json:"lora_layers"` + LoraParameters struct { + Rank uint32 `json:"rank"` + Alpha float32 `json:"alpha"` + Scale float32 `json:"scale"` + } `json:"lora_parameters"` +} + +func (ModelParameters) KV(t *Tokenizer) llm.KV { kv := llm.KV{ "general.file_type": uint32(1), "general.quantization_version": uint32(2), @@ -44,17 +54,40 @@ func (Parameters) KV(t *Tokenizer) llm.KV { return kv } -func (Parameters) specialTokenTypes() []string { +func (p AdapterParameters) KV() llm.KV { + var alpha float32 + if p.LoraParameters.Alpha == 0 { + alpha = float32(p.Alpha) + } else { + alpha = p.LoraParameters.Alpha + } + + kv := llm.KV{ + "adapter.lora.alpha": alpha, + "adapter.type": "lora", + "general.file_type": uint32(1), + "general.type": "adapter", + "general.version": "v0.2", + } + + return kv +} + +func (ModelParameters) specialTokenTypes() []string { return []string{ "bos", "eos", "unk", "sep", "pad", "cls", "mask", } } -func (Parameters) writeFile(ws io.WriteSeeker, kv llm.KV, ts []llm.Tensor) error { +func (ModelParameters) writeFile(ws io.WriteSeeker, kv llm.KV, ts []llm.Tensor) error { return llm.WriteGGUF(ws, kv, ts) } -type Converter interface { +func (AdapterParameters) writeFile(ws io.WriteSeeker, kv llm.KV, ts []llm.Tensor) error { + return llm.WriteGGUF(ws, kv, ts) +} + +type ModelConverter interface { // KV maps parameters to LLM key-values KV(*Tokenizer) llm.KV // Tensors maps input tensors to LLM tensors. Model specific modifications can be done here. @@ -73,17 +106,67 @@ type moreParser interface { parseMore(fs.FS) error } +type AdapterConverter interface { + // KV maps parameters to LLM key-values + KV(llm.KV) llm.KV + // Tensors maps input tensors to LLM tensors. Adapter specific modifications can be done here. + Tensors([]Tensor) []llm.Tensor + // Replacements returns a list of string pairs to replace in tensor names. + // See [strings.Replacer](https://pkg.go.dev/strings#Replacer) for details + Replacements() []string + + writeFile(io.WriteSeeker, llm.KV, []llm.Tensor) error +} + +func ConvertAdapter(fsys fs.FS, ws io.WriteSeeker, baseKV llm.KV) error { + bts, err := fs.ReadFile(fsys, "adapter_config.json") + if err != nil { + return err + } + + var p AdapterParameters + if err := json.Unmarshal(bts, &p); err != nil { + return err + } + + arch, ok := baseKV["general.architecture"] + if !ok { + return errors.New("architecture not set for the base model") + } + + var conv AdapterConverter + switch arch { + case "llama": + conv = &llamaAdapter{} + case "gemma2": + conv = &gemma2Adapter{} + default: + return errors.New("unsupported architecture") + } + + ts, err := parseTensors(fsys, strings.NewReplacer(conv.Replacements()...)) + if err != nil { + return err + } + + if err := json.Unmarshal(bts, conv); err != nil { + return err + } + + return conv.writeFile(ws, conv.KV(baseKV), conv.Tensors(ts)) +} + // Convert writes an Ollama compatible model to the provided io.WriteSeeker based on configurations // and files it finds in the input path. // Supported input model formats include safetensors. // Supported input tokenizers files include tokenizer.json (preferred) and tokenizer.model. -func Convert(fsys fs.FS, ws io.WriteSeeker) error { +func ConvertModel(fsys fs.FS, ws io.WriteSeeker) error { bts, err := fs.ReadFile(fsys, "config.json") if err != nil { return err } - var p Parameters + var p ModelParameters if err := json.Unmarshal(bts, &p); err != nil { return err } @@ -92,20 +175,20 @@ func Convert(fsys fs.FS, ws io.WriteSeeker) error { return errors.New("unknown architecture") } - var conv Converter + var conv ModelConverter switch p.Architectures[0] { case "LlamaForCausalLM", "MistralForCausalLM": - conv = &llama{} + conv = &llamaModel{} case "MixtralForCausalLM": - conv = &mixtral{} + conv = &mixtralModel{} case "GemmaForCausalLM": - conv = &gemma{} + conv = &gemmaModel{} case "Gemma2ForCausalLM": - conv = &gemma2{} + conv = &gemma2Model{} case "Phi3ForCausalLM": - conv = &phi3{} + conv = &phi3Model{} case "BertModel": - conv = &bert{} + conv = &bertModel{} default: return errors.New("unsupported architecture") } diff --git a/convert/convert_bert.go b/convert/convert_bert.go index 6e7d59fe..ea5facaa 100644 --- a/convert/convert_bert.go +++ b/convert/convert_bert.go @@ -11,8 +11,8 @@ import ( "github.com/ollama/ollama/llm" ) -type bert struct { - Parameters +type bertModel struct { + ModelParameters NLayers uint32 `json:"n_layers"` NumHiddenLayers uint32 `json:"num_hidden_layers"` NLayer uint32 `json:"n_layer"` @@ -33,11 +33,11 @@ type bert struct { } var ( - _ Converter = (*bert)(nil) - _ moreParser = (*bert)(nil) + _ ModelConverter = (*bertModel)(nil) + _ moreParser = (*bertModel)(nil) ) -func (p *bert) parseMore(fsys fs.FS) error { +func (p *bertModel) parseMore(fsys fs.FS) error { bts, err := fs.ReadFile(fsys, "modules.json") if err != nil { return err @@ -85,8 +85,8 @@ func (p *bert) parseMore(fsys fs.FS) error { return nil } -func (p *bert) KV(t *Tokenizer) llm.KV { - kv := p.Parameters.KV(t) +func (p *bertModel) KV(t *Tokenizer) llm.KV { + kv := p.ModelParameters.KV(t) kv["general.architecture"] = "bert" kv["bert.attention.causal"] = false kv["bert.pooling_type"] = p.PoolingType @@ -132,7 +132,7 @@ func (p *bert) KV(t *Tokenizer) llm.KV { return kv } -func (p *bert) Tensors(ts []Tensor) []llm.Tensor { +func (p *bertModel) Tensors(ts []Tensor) []llm.Tensor { var out []llm.Tensor for _, t := range ts { if slices.Contains([]string{ @@ -154,7 +154,7 @@ func (p *bert) Tensors(ts []Tensor) []llm.Tensor { return out } -func (bert) Replacements() []string { +func (bertModel) Replacements() []string { return []string{ "encoder.layer", "blk", "encoder.layers", "blk", diff --git a/convert/convert_gemma.go b/convert/convert_gemma.go index c4316808..b8865294 100644 --- a/convert/convert_gemma.go +++ b/convert/convert_gemma.go @@ -9,8 +9,8 @@ import ( "github.com/ollama/ollama/llm" ) -type gemma struct { - Parameters +type gemmaModel struct { + ModelParameters MaxPositionEmbeddings uint32 `json:"max_position_embeddings"` HiddenSize uint32 `json:"hidden_size"` HiddenLayers uint32 `json:"num_hidden_layers"` @@ -21,10 +21,10 @@ type gemma struct { HeadDim uint32 `json:"head_dim"` } -var _ Converter = (*gemma)(nil) +var _ ModelConverter = (*gemmaModel)(nil) -func (p *gemma) KV(t *Tokenizer) llm.KV { - kv := p.Parameters.KV(t) +func (p *gemmaModel) KV(t *Tokenizer) llm.KV { + kv := p.ModelParameters.KV(t) kv["general.architecture"] = "gemma" kv["gemma.context_length"] = p.MaxPositionEmbeddings kv["gemma.embedding_length"] = p.HiddenSize @@ -42,8 +42,8 @@ func (p *gemma) KV(t *Tokenizer) llm.KV { return kv } -func (p *gemma) Tensors(ts []Tensor) []llm.Tensor { - out := make([]llm.Tensor, 0, len(ts)) +func (p *gemmaModel) Tensors(ts []Tensor) []llm.Tensor { + var out []llm.Tensor for _, t := range ts { if strings.HasSuffix(t.Name(), "_norm.weight") { t.SetRepacker(p.addOne) @@ -60,7 +60,7 @@ func (p *gemma) Tensors(ts []Tensor) []llm.Tensor { return out } -func (p *gemma) Replacements() []string { +func (p *gemmaModel) Replacements() []string { return []string{ "model.embed_tokens", "token_embd", "model.norm", "output_norm", @@ -77,7 +77,7 @@ func (p *gemma) Replacements() []string { } } -func (*gemma) addOne(_ string, data []float32, shape []uint64) ([]float32, error) { +func (*gemmaModel) addOne(_ string, data []float32, shape []uint64) ([]float32, error) { n := tensor.New(tensor.WithShape(int(shape[0])), tensor.WithBacking(data)) ones := tensor.Ones(tensor.Float32, int(shape[0])) diff --git a/convert/convert_gemma2.go b/convert/convert_gemma2.go index 084f9c52..c4ee2d09 100644 --- a/convert/convert_gemma2.go +++ b/convert/convert_gemma2.go @@ -4,15 +4,15 @@ import ( "github.com/ollama/ollama/llm" ) -type gemma2 struct { - gemma +type gemma2Model struct { + gemmaModel SlidingWindow uint32 `json:"sliding_window"` AttentionLogitSoftcap float32 `json:"attn_logit_softcapping"` FinalLogitSoftcap float32 `json:"final_logit_softcapping"` } -func (p *gemma2) KV(t *Tokenizer) llm.KV { - kv := p.Parameters.KV(t) +func (p *gemma2Model) KV(t *Tokenizer) llm.KV { + kv := p.ModelParameters.KV(t) kv["general.architecture"] = "gemma2" kv["gemma2.context_length"] = p.MaxPositionEmbeddings kv["gemma2.embedding_length"] = p.HiddenSize @@ -33,9 +33,9 @@ func (p *gemma2) KV(t *Tokenizer) llm.KV { return kv } -func (p *gemma2) Replacements() []string { +func (p *gemma2Model) Replacements() []string { return append( - p.gemma.Replacements(), + p.gemmaModel.Replacements(), "post_attention_layernorm", "post_attention_norm", "pre_feedforward_layernorm", "ffn_norm", "post_feedforward_layernorm", "post_ffw_norm", diff --git a/convert/convert_gemma2_adapter.go b/convert/convert_gemma2_adapter.go new file mode 100644 index 00000000..a89a25f4 --- /dev/null +++ b/convert/convert_gemma2_adapter.go @@ -0,0 +1,91 @@ +package convert + +import ( + "strings" + + "github.com/pdevine/tensor" + "github.com/pdevine/tensor/native" + + "github.com/ollama/ollama/llm" +) + +type gemma2Adapter struct { + AdapterParameters +} + +var _ AdapterConverter = (*gemma2Adapter)(nil) + +func (p *gemma2Adapter) KV(baseKV llm.KV) llm.KV { + kv := p.AdapterParameters.KV() + kv["general.architecture"] = "gemma2" + return kv +} + +func (p *gemma2Adapter) Tensors(ts []Tensor) []llm.Tensor { + var out []llm.Tensor + for _, t := range ts { + shape := t.Shape() + if (strings.HasSuffix(t.Name(), "weight.lora_a") && shape[0] > shape[1]) || + (strings.HasSuffix(t.Name(), "weight.lora_b") && shape[0] < shape[1]) { + shape[0], shape[1] = shape[1], shape[0] + t.SetRepacker(p.repack) + } + + out = append(out, llm.Tensor{ + Name: t.Name(), + Kind: t.Kind(), + Shape: t.Shape(), + WriterTo: t, + }) + } + + return out +} + +func (p *gemma2Adapter) Replacements() []string { + return []string{ + "base_model.model.", "", + "model.layers", "blk", + "self_attn.q_proj", "attn_q", + "self_attn.k_proj", "attn_k", + "self_attn.v_proj", "attn_v", + "self_attn.o_proj", "attn_output", + "mlp.gate_proj", "ffn_gate", + "mlp.down_proj", "ffn_down", + "mlp.up_proj", "ffn_up", + "lora_A.weight", "weight.lora_a", + "lora_B.weight", "weight.lora_b", + "lora_a", "weight.lora_a", + "lora_b", "weight.lora_b", + } +} + +func (p *gemma2Adapter) repack(name string, data []float32, shape []uint64) ([]float32, error) { + dims := []int{int(shape[1]), int(shape[0])} + + n := tensor.New(tensor.WithShape(dims...), tensor.WithBacking(data)) + + if err := n.T(1, 0); err != nil { + return nil, err + } + + if err := n.Reshape(dims...); err != nil { + return nil, err + } + + if err := n.Transpose(); err != nil { + return nil, err + } + + ts, err := native.SelectF32(n, 1) + if err != nil { + return nil, err + } + + var f32s []float32 + for _, t := range ts { + f32s = append(f32s, t...) + } + + return f32s, nil +} diff --git a/convert/convert_llama.go b/convert/convert_llama.go index 27f924fb..5dedb829 100644 --- a/convert/convert_llama.go +++ b/convert/convert_llama.go @@ -12,8 +12,8 @@ import ( "github.com/ollama/ollama/llm" ) -type llama struct { - Parameters +type llamaModel struct { + ModelParameters NLayers uint32 `json:"n_layers"` NumHiddenLayers uint32 `json:"num_hidden_layers"` NLayer uint32 `json:"n_layer"` @@ -44,10 +44,10 @@ type llama struct { HeadDim uint32 `json:"head_dim"` } -var _ Converter = (*llama)(nil) +var _ ModelConverter = (*llamaModel)(nil) -func (p *llama) KV(t *Tokenizer) llm.KV { - kv := p.Parameters.KV(t) +func (p *llamaModel) KV(t *Tokenizer) llm.KV { + kv := p.ModelParameters.KV(t) kv["general.architecture"] = "llama" kv["llama.vocab_size"] = p.VocabSize @@ -120,7 +120,7 @@ func (p *llama) KV(t *Tokenizer) llm.KV { return kv } -func (p *llama) Tensors(ts []Tensor) []llm.Tensor { +func (p *llamaModel) Tensors(ts []Tensor) []llm.Tensor { var out []llm.Tensor if p.RopeScaling.factors != nil { @@ -149,7 +149,7 @@ func (p *llama) Tensors(ts []Tensor) []llm.Tensor { return out } -func (p *llama) Replacements() []string { +func (p *llamaModel) Replacements() []string { return []string{ "lm_head", "output", "model.embed_tokens", "token_embd", @@ -167,7 +167,7 @@ func (p *llama) Replacements() []string { } } -func (p *llama) repack(name string, data []float32, shape []uint64) ([]float32, error) { +func (p *llamaModel) repack(name string, data []float32, shape []uint64) ([]float32, error) { var dims []int for _, dim := range shape { dims = append(dims, int(dim)) diff --git a/convert/convert_llama_adapter.go b/convert/convert_llama_adapter.go new file mode 100644 index 00000000..08ddee10 --- /dev/null +++ b/convert/convert_llama_adapter.go @@ -0,0 +1,169 @@ +package convert + +import ( + "cmp" + "strings" + + "github.com/pdevine/tensor" + "github.com/pdevine/tensor/native" + + "github.com/ollama/ollama/llm" +) + +type llamaAdapter struct { + AdapterParameters + NumAttentionHeads uint32 `json:"num_attention_heads"` + NumKeyValueHeads uint32 `json:"num_key_value_heads"` +} + +var _ AdapterConverter = (*llamaAdapter)(nil) + +func (p *llamaAdapter) KV(baseKV llm.KV) llm.KV { + kv := p.AdapterParameters.KV() + kv["general.architecture"] = "llama" + kv["llama.attention.head_count"] = baseKV["llama.attention.head_count"] + kv["llama.attention.head_count_kv"] = baseKV["llama.attention.head_count_kv"] + + p.NumAttentionHeads = baseKV["llama.attention.head_count"].(uint32) + + return kv +} + +func (p *llamaAdapter) Tensors(ts []Tensor) []llm.Tensor { + var out []llm.Tensor + for _, t := range ts { + shape := t.Shape() + if (strings.HasSuffix(t.Name(), "weight.lora_a") && shape[0] > shape[1]) || + (strings.HasSuffix(t.Name(), "weight.lora_b") && shape[0] < shape[1]) { + shape[0], shape[1] = shape[1], shape[0] + t.SetRepacker(p.repackAndTranspose) + } else { + t.SetRepacker(p.repack) + } + + out = append(out, llm.Tensor{ + Name: t.Name(), + Kind: t.Kind(), + Shape: shape, + WriterTo: t, + }) + } + + return out +} + +func (p *llamaAdapter) Replacements() []string { + return []string{ + "base_model.model.", "", + "model.layers", "blk", + "self_attn.q_proj", "attn_q", + "self_attn.k_proj", "attn_k", + "self_attn.v_proj", "attn_v", + "self_attn.o_proj", "attn_output", + "mlp.gate_proj", "ffn_gate", + "mlp.down_proj", "ffn_down", + "mlp.up_proj", "ffn_up", + "lora_A.weight", "weight.lora_a", + "lora_B.weight", "weight.lora_b", + "lora_a", "weight.lora_a", + "lora_b", "weight.lora_b", + } +} + +func (p *llamaAdapter) repack(name string, data []float32, shape []uint64) ([]float32, error) { + dims := []int{int(shape[1]), int(shape[0])} + + var heads uint32 + if strings.HasSuffix(name, "attn_q.weight.lora_a") { + heads = p.NumAttentionHeads + } else if strings.HasSuffix(name, "attn_k.weight.lora_a") { + heads = cmp.Or(p.NumKeyValueHeads, p.NumAttentionHeads) + } else { + return data, nil + } + + n := tensor.New(tensor.WithShape(dims...), tensor.WithBacking(data)) + + if err := n.Reshape(append([]int{int(heads), 2, dims[0] / int(heads) / 2}, dims[1:]...)...); err != nil { + return nil, err + } + + if err := n.T(0, 2, 1, 3); err != nil { + return nil, err + } + + if err := n.Reshape(dims...); err != nil { + return nil, err + } + + if err := n.Transpose(); err != nil { + return nil, err + } + + ts, err := native.SelectF32(n, 1) + if err != nil { + return nil, err + } + + var f32s []float32 + for _, t := range ts { + f32s = append(f32s, t...) + } + + return f32s, nil +} + +func (p *llamaAdapter) repackAndTranspose(name string, data []float32, shape []uint64) ([]float32, error) { + dims := []int{int(shape[1]), int(shape[0])} + + n := tensor.New(tensor.WithShape(dims...), tensor.WithBacking(data)) + + var heads uint32 + if strings.HasSuffix(name, "attn_q.weight.lora_a") { + heads = p.NumAttentionHeads + } else if strings.HasSuffix(name, "attn_k.weight.lora_a") { + heads = cmp.Or(p.NumKeyValueHeads, p.NumAttentionHeads) + } + + if heads > 0 { + if err := n.Reshape(append([]int{int(heads), 2, dims[0] / int(heads) / 2}, dims[1:]...)...); err != nil { + return nil, err + } + + if err := n.T(0, 2, 1, 3); err != nil { + return nil, err + } + + if err := n.Reshape(dims...); err != nil { + return nil, err + } + + if err := n.Transpose(); err != nil { + return nil, err + } + } + + if err := n.T(1, 0); err != nil { + return nil, err + } + + if err := n.Reshape(dims...); err != nil { + return nil, err + } + + if err := n.Transpose(); err != nil { + return nil, err + } + + ts, err := native.SelectF32(n, 1) + if err != nil { + return nil, err + } + + var f32s []float32 + for _, t := range ts { + f32s = append(f32s, t...) + } + + return f32s, nil +} diff --git a/convert/convert_mixtral.go b/convert/convert_mixtral.go index 97a86b30..43b7c8b1 100644 --- a/convert/convert_mixtral.go +++ b/convert/convert_mixtral.go @@ -9,14 +9,14 @@ import ( "github.com/ollama/ollama/llm" ) -type mixtral struct { - llama +type mixtralModel struct { + llamaModel NumLocalExperts uint32 `json:"num_local_experts"` NumExpertsPerToken uint32 `json:"num_experts_per_tok"` } -func (p *mixtral) KV(t *Tokenizer) llm.KV { - kv := p.llama.KV(t) +func (p *mixtralModel) KV(t *Tokenizer) llm.KV { + kv := p.llamaModel.KV(t) if p.NumLocalExperts > 0 { kv["llama.expert_count"] = p.NumLocalExperts @@ -29,7 +29,7 @@ func (p *mixtral) KV(t *Tokenizer) llm.KV { return kv } -func (p *mixtral) Tensors(ts []Tensor) []llm.Tensor { +func (p *mixtralModel) Tensors(ts []Tensor) []llm.Tensor { oldnew := []string{ "model.layers", "blk", "w1", "ffn_gate_exps", @@ -67,12 +67,12 @@ func (p *mixtral) Tensors(ts []Tensor) []llm.Tensor { }) } - return append(out, p.llama.Tensors(ts)...) + return append(out, p.llamaModel.Tensors(ts)...) } -func (p *mixtral) Replacements() []string { +func (p *mixtralModel) Replacements() []string { return append( - p.llama.Replacements(), + p.llamaModel.Replacements(), "block_sparse_moe.gate", "ffn_gate_inp", ) } diff --git a/convert/convert_phi3.go b/convert/convert_phi3.go index 64d3d012..3de0d404 100644 --- a/convert/convert_phi3.go +++ b/convert/convert_phi3.go @@ -11,8 +11,8 @@ import ( "github.com/ollama/ollama/llm" ) -type phi3 struct { - Parameters +type phi3Model struct { + ModelParameters NumHiddenLayers uint32 `json:"num_hidden_layers"` NLayers uint32 `json:"n_layers"` HiddenSize uint32 `json:"hidden_size"` @@ -35,10 +35,10 @@ type phi3 struct { SlidingWindow uint32 `json:"sliding_window"` } -var _ Converter = (*phi3)(nil) +var _ ModelConverter = (*phi3Model)(nil) -func (p *phi3) KV(t *Tokenizer) llm.KV { - kv := p.Parameters.KV(t) +func (p *phi3Model) KV(t *Tokenizer) llm.KV { + kv := p.ModelParameters.KV(t) kv["general.architecture"] = "phi3" kv["phi3.context_length"] = p.MaxPositionEmbeddings kv["phi3.embedding_length"] = cmp.Or(p.HiddenSize, p.NEmbd) @@ -68,7 +68,7 @@ func (p *phi3) KV(t *Tokenizer) llm.KV { return kv } -func (p *phi3) Tensors(ts []Tensor) []llm.Tensor { +func (p *phi3Model) Tensors(ts []Tensor) []llm.Tensor { var addRopeFactors sync.Once out := make([]llm.Tensor, 0, len(ts)+2) @@ -100,7 +100,7 @@ func (p *phi3) Tensors(ts []Tensor) []llm.Tensor { return out } -func (p *phi3) Replacements() []string { +func (p *phi3Model) Replacements() []string { return []string{ "lm_head", "output", "model.embed_tokens", "token_embd", diff --git a/convert/convert_test.go b/convert/convert_test.go index 64b7df3b..56b34f22 100644 --- a/convert/convert_test.go +++ b/convert/convert_test.go @@ -1,7 +1,9 @@ package convert import ( + "bytes" "crypto/sha256" + "encoding/binary" "encoding/hex" "encoding/json" "flag" @@ -29,7 +31,7 @@ func convertFull(t *testing.T, fsys fs.FS) (*os.File, llm.KV, llm.Tensors) { } defer f.Close() - if err := Convert(fsys, f); err != nil { + if err := ConvertModel(fsys, f); err != nil { t.Fatal(err) } @@ -51,6 +53,34 @@ func convertFull(t *testing.T, fsys fs.FS) (*os.File, llm.KV, llm.Tensors) { return r, m.KV(), m.Tensors() } +func generateResultsJSON(t *testing.T, f *os.File, kv llm.KV, tensors llm.Tensors) map[string]string { + actual := make(map[string]string) + for k, v := range kv { + if s, ok := v.(json.Marshaler); !ok { + actual[k] = fmt.Sprintf("%v", v) + } else { + bts, err := json.Marshal(s) + if err != nil { + t.Fatal(err) + } + + actual[k] = fmt.Sprintf("%x", sha256.Sum256(bts)) + } + } + + for _, tensor := range tensors.Items { + sha256sum := sha256.New() + sr := io.NewSectionReader(f, int64(tensors.Offset+tensor.Offset), int64(tensor.Size())) + if _, err := io.Copy(sha256sum, sr); err != nil { + t.Fatal(err) + } + + actual[tensor.Name] = hex.EncodeToString(sha256sum.Sum(nil)) + } + + return actual +} + func TestMain(m *testing.M) { var level slog.Level flag.TextVar(&level, "level", slog.LevelInfo, "log level") @@ -85,29 +115,7 @@ func TestConvertFull(t *testing.T) { } f, kv, tensors := convertFull(t, os.DirFS(p)) - actual := make(map[string]string) - for k, v := range kv { - if s, ok := v.(json.Marshaler); !ok { - actual[k] = fmt.Sprintf("%v", v) - } else { - bts, err := json.Marshal(s) - if err != nil { - t.Fatal(err) - } - - actual[k] = fmt.Sprintf("%x", sha256.Sum256(bts)) - } - } - - for _, tensor := range tensors.Items { - sha256sum := sha256.New() - sr := io.NewSectionReader(f, int64(tensors.Offset+tensor.Offset), int64(tensor.Size())) - if _, err := io.Copy(sha256sum, sr); err != nil { - t.Fatal(err) - } - - actual[tensor.Name] = hex.EncodeToString(sha256sum.Sum(nil)) - } + actual := generateResultsJSON(t, f, kv, tensors) expectFile, err := os.Open(filepath.Join("testdata", fmt.Sprintf("%s.json", tt))) if err != nil { @@ -131,3 +139,209 @@ func TestConvertFull(t *testing.T) { }) } } + +func TestConvertAdapter(t *testing.T) { + type AdapterCase struct { + Name string + BaseKV map[string]any + Expected map[string]string + } + + cases := []AdapterCase{ + { + Name: "discollama", + BaseKV: map[string]any{ + "general.architecture": "llama", + "llama.attention.head_count": uint32(32), + "llama.attention.head_count_kv": uint32(8), + }, + Expected: map[string]string{ + "general.architecture": "llama", + "general.file_type": "1", + "general.parameter_count": "106496", + "general.type": "adapter", + "general.version": "v0.2", + "adapter.lora.alpha": "16", + "adapter.type": "lora", + "llama.attention.head_count": "32", + "llama.attention.head_count_kv": "8", + "blk.31.attn_q.weight.lora_a": "0eb3318b02cd313429bcc7621b539fdbb10240fea190c56c9e5f93fcd37a4e50", + "blk.31.attn_q.weight.lora_b": "0eb3318b02cd313429bcc7621b539fdbb10240fea190c56c9e5f93fcd37a4e50", + "blk.31.attn_v.weight.lora_a": "0eb3318b02cd313429bcc7621b539fdbb10240fea190c56c9e5f93fcd37a4e50", + "blk.31.attn_v.weight.lora_b": "071dcafe89df065d6e1c935ecb8fdf6479b3c202eb912e7da938597673ff5857", + }, + }, + } + + for _, c := range cases { + t.Run(c.Name, func(t *testing.T) { + t.Parallel() + + f, err := os.CreateTemp(t.TempDir(), "f16") + if err != nil { + t.Fatal(err) + } + defer f.Close() + + tempDir := t.TempDir() + generateLoraTestData(t, tempDir) + + if err = ConvertAdapter(os.DirFS(tempDir), f, c.BaseKV); err != nil { + t.Fatal(err) + } + + r, err := os.Open(f.Name()) + if err != nil { + t.Fatal(err) + } + defer r.Close() + + m, _, err := llm.DecodeGGML(r, math.MaxInt) + if err != nil { + t.Fatal(err) + } + + if _, err := r.Seek(0, io.SeekStart); err != nil { + t.Fatal(err) + } + + actual := generateResultsJSON(t, r, m.KV(), m.Tensors()) + + keys := maps.Keys(c.Expected) + slices.Sort(keys) + for _, k := range keys { + if v, ok := actual[k]; !ok { + t.Errorf("missing %s", k) + } else if v != c.Expected[k] { + t.Errorf("unexpected %s: want %s, got %s", k, c.Expected[k], v) + } + } + }) + } +} + +func generateLoraTestData(t *testing.T, tempDir string) { + type tensorData struct { + Offsets []int `json:"data_offsets"` + Type string `json:"dtype"` + Shape []int `json:"shape"` + } + offset := 4096 * 8 * 4 + + td := map[string]*tensorData{"__metadata__": nil} + td["model.layers.31.self_attn.q_proj.lora_a"] = &tensorData{ + Offsets: []int{0, offset}, + Type: "F32", + Shape: []int{4096, 8}, + } + td["model.layers.31.self_attn.q_proj.lora_b"] = &tensorData{ + Offsets: []int{offset, offset * 2}, + Type: "F32", + Shape: []int{8, 4096}, + } + td["model.layers.31.self_attn.v_proj.lora_a"] = &tensorData{ + Offsets: []int{offset * 2, offset * 3}, + Type: "F32", + Shape: []int{4096, 8}, + } + td["model.layers.31.self_attn.v_proj.lora_b"] = &tensorData{ + Offsets: []int{offset * 3, offset*3 + 8*1024*4}, + Type: "F32", + Shape: []int{8, 1024}, + } + + data, err := json.Marshal(td) + if err != nil { + t.Fatal(err) + } + + var buf bytes.Buffer + + l := int64(len(data)) + err = binary.Write(&buf, binary.LittleEndian, l) + if err != nil { + t.Fatal(err) + } + + _, err = buf.Write(data) + if err != nil { + t.Fatal(err) + } + + // write some data for the tensors + + ones := make([]float32, 4096*8) + for i := range ones { + ones[i] = float32(1) + } + + for range 3 { + err = binary.Write(&buf, binary.LittleEndian, ones) + if err != nil { + t.Fatal(err) + } + } + + ones = make([]float32, 1024*8) + for i := range ones { + ones[i] = float32(1) + } + + err = binary.Write(&buf, binary.LittleEndian, ones) + if err != nil { + t.Fatal(err) + } + + fdata, err := os.Create(filepath.Join(tempDir, "adapters.safetensors")) + if err != nil { + t.Fatal(err) + } + defer fdata.Close() + + _, err = fdata.Write(buf.Bytes()) + if err != nil { + t.Fatal(err) + } + + configData := ` +{ + "adapter_path": "adapters-test", + "batch_size": 8, + "config": "config-tiny.json", + "data": "../discollama-completion", + "grad_checkpoint": null, + "iters": 1000, + "learning_rate": 1e-05, + "lora_layers": 1, + "lora_parameters": { + "rank": 8, + "alpha": 16, + "dropout": 0.0, + "scale": 2.0 + }, + "lr_schedule": null, + "max_seq_length": 2048, + "model": "/Users/pdevine/git/Meta-Llama-3-8B-Instruct", + "resume_adapter_file": null, + "save_every": 100, + "seed": 0, + "steps_per_eval": 200, + "steps_per_report": 10, + "test": false, + "test_batches": 500, + "train": true, + "use_dora": false, + "val_batches": 25 +} +` + f, err := os.Create(filepath.Join(tempDir, "adapter_config.json")) + if err != nil { + t.Fatal(err) + } + defer f.Close() + + _, err = f.WriteString(configData) + if err != nil { + t.Fatal(err) + } +} diff --git a/convert/reader.go b/convert/reader.go index 5bba0406..c1218e66 100644 --- a/convert/reader.go +++ b/convert/reader.go @@ -64,6 +64,8 @@ func parseTensors(fsys fs.FS, replacer *strings.Replacer) ([]Tensor, error) { }{ {"model-*-of-*.safetensors", parseSafetensors}, {"model.safetensors", parseSafetensors}, + {"adapters.safetensors", parseSafetensors}, + {"adapter_model.safetensors", parseSafetensors}, {"pytorch_model-*-of-*.bin", parseTorch}, {"pytorch_model.bin", parseTorch}, {"consolidated.*.pth", parseTorch}, diff --git a/llm/ggml.go b/llm/ggml.go index 4c68adf9..ab436095 100644 --- a/llm/ggml.go +++ b/llm/ggml.go @@ -43,6 +43,14 @@ func (kv KV) Architecture() string { return "unknown" } +func (kv KV) Kind() string { + if s, ok := kv["general.type"].(string); ok { + return s + } + + return "unknown" +} + func (kv KV) ParameterCount() uint64 { return kv.u64("general.parameter_count") } diff --git a/server/images.go b/server/images.go index 8b3a67cf..b5bf7ad6 100644 --- a/server/images.go +++ b/server/images.go @@ -369,13 +369,14 @@ func CreateModel(ctx context.Context, name model.Name, modelFileDir, quantizatio parameters := make(map[string]any) var layers []Layer + var baseLayers []*layerGGML for _, c := range modelfile.Commands { mediatype := fmt.Sprintf("application/vnd.ollama.image.%s", c.Name) + command := c.Name - switch c.Name { + switch command { case "model", "adapter": - var baseLayers []*layerGGML - if name := model.ParseName(c.Args); name.IsValid() { + if name := model.ParseName(c.Args); name.IsValid() && command == "model" { baseLayers, err = parseFromModel(ctx, name, fn) if err != nil { return err @@ -409,14 +410,14 @@ func CreateModel(ctx context.Context, name model.Name, modelFileDir, quantizatio } defer blob.Close() - baseLayers, err = parseFromFile(ctx, blob, digest, fn) + baseLayers, err = parseFromFile(ctx, command, baseLayers, blob, digest, fn) if err != nil { return err } } else if file, err := os.Open(realpath(modelFileDir, c.Args)); err == nil { defer file.Close() - baseLayers, err = parseFromFile(ctx, file, "", fn) + baseLayers, err = parseFromFile(ctx, command, baseLayers, file, "", fn) if err != nil { return err } diff --git a/server/model.go b/server/model.go index b17bf0e3..55fb2d8d 100644 --- a/server/model.go +++ b/server/model.go @@ -81,7 +81,7 @@ func parseFromModel(ctx context.Context, name model.Name, fn func(api.ProgressRe return layers, nil } -func parseFromZipFile(_ context.Context, f *os.File, digest string, fn func(api.ProgressResponse)) (layers []*layerGGML, err error) { +func parseFromZipFile(_ context.Context, command string, baseLayers []*layerGGML, f *os.File, digest string, fn func(api.ProgressResponse)) (layers []*layerGGML, err error) { fi, err := f.Stat() if err != nil { return nil, err @@ -108,16 +108,38 @@ func parseFromZipFile(_ context.Context, f *os.File, digest string, fn func(api. defer t.Close() defer os.Remove(t.Name()) - fn(api.ProgressResponse{Status: "converting model"}) - if err := convert.Convert(convert.NewZipReader(r, p, 32<<20), t); err != nil { - return nil, err + var layerType string + + switch command { + case "adapter": + var baseModel *llm.GGML + for _, l := range baseLayers { + if l.GGML != nil { + baseModel = l.GGML + break + } + } + + if baseModel == nil { + return nil, fmt.Errorf("no base model specified for the adapter") + } + + if err := convert.ConvertAdapter(convert.NewZipReader(r, p, 32<<20), t, baseModel.KV()); err != nil { + return nil, err + } + layerType = "application/vnd.ollama.image.adapter" + case "model": + if err := convert.ConvertModel(convert.NewZipReader(r, p, 32<<20), t); err != nil { + return nil, err + } + layerType = "application/vnd.ollama.image.model" } if _, err := t.Seek(0, io.SeekStart); err != nil { return nil, err } - layer, err := NewLayer(t, "application/vnd.ollama.image.model") + layer, err := NewLayer(t, layerType) if err != nil { return nil, err } @@ -139,7 +161,7 @@ func parseFromZipFile(_ context.Context, f *os.File, digest string, fn func(api. return detectChatTemplate(layers) } -func parseFromFile(ctx context.Context, file *os.File, digest string, fn func(api.ProgressResponse)) (layers []*layerGGML, err error) { +func parseFromFile(ctx context.Context, command string, baseLayers []*layerGGML, file *os.File, digest string, fn func(api.ProgressResponse)) (layers []*layerGGML, err error) { sr := io.NewSectionReader(file, 0, 512) contentType, err := detectContentType(sr) if err != nil { @@ -150,7 +172,7 @@ func parseFromFile(ctx context.Context, file *os.File, digest string, fn func(ap case "gguf", "ggla": // noop case "application/zip": - return parseFromZipFile(ctx, file, digest, fn) + return parseFromZipFile(ctx, command, baseLayers, file, digest, fn) default: return nil, fmt.Errorf("unsupported content type: %s", contentType) } @@ -170,7 +192,7 @@ func parseFromFile(ctx context.Context, file *os.File, digest string, fn func(ap } mediatype := "application/vnd.ollama.image.model" - if ggml.Name() == "ggla" { + if ggml.Name() == "ggla" || ggml.KV().Kind() == "adapter" { mediatype = "application/vnd.ollama.image.adapter" } else if ggml.KV().Architecture() == "clip" { mediatype = "application/vnd.ollama.image.projector" diff --git a/server/model_test.go b/server/model_test.go index 63fc408d..7753c549 100644 --- a/server/model_test.go +++ b/server/model_test.go @@ -153,7 +153,7 @@ func TestParseFromFileFromLayer(t *testing.T) { t.Fatalf("failed to seek to start: %v", err) } - layers, err := parseFromFile(context.Background(), file, "", func(api.ProgressResponse) {}) + layers, err := parseFromFile(context.Background(), "model", []*layerGGML{}, file, "", func(api.ProgressResponse) {}) if err != nil { t.Fatalf("failed to parse from file: %v", err) } @@ -166,7 +166,7 @@ func TestParseFromFileFromLayer(t *testing.T) { t.Fatalf("failed to seek to start: %v", err) } - layers2, err := parseFromFile(context.Background(), file, layers[0].Digest, func(api.ProgressResponse) {}) + layers2, err := parseFromFile(context.Background(), "model", []*layerGGML{}, file, layers[0].Digest, func(api.ProgressResponse) {}) if err != nil { t.Fatalf("failed to parse from file: %v", err) } @@ -206,7 +206,7 @@ func TestParseLayerFromCopy(t *testing.T) { t.Fatalf("failed to seek to start: %v", err) } - layers, err := parseFromFile(context.Background(), file2, "", func(api.ProgressResponse) {}) + layers, err := parseFromFile(context.Background(), "model", []*layerGGML{}, file2, "", func(api.ProgressResponse) {}) if err != nil { t.Fatalf("failed to parse from file: %v", err) } From 386af6c1a0e9b1f4788b000ddf98955b4ce6183b Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Fri, 23 Aug 2024 13:16:30 -0700 Subject: [PATCH 04/55] passthrough OLLAMA_HOST path to client --- envconfig/config.go | 10 +++------ envconfig/config_test.go | 47 ++++++++++++++++++++-------------------- 2 files changed, 27 insertions(+), 30 deletions(-) diff --git a/envconfig/config.go b/envconfig/config.go index 7e45a4f5..c13167b5 100644 --- a/envconfig/config.go +++ b/envconfig/config.go @@ -30,9 +30,7 @@ func Host() *url.URL { defaultPort = "443" } - // trim trailing slashes - hostport = strings.TrimRight(hostport, "/") - + hostport, path, _ := strings.Cut(hostport, "/") host, port, err := net.SplitHostPort(hostport) if err != nil { host, port = "127.0.0.1", defaultPort @@ -45,15 +43,13 @@ func Host() *url.URL { if n, err := strconv.ParseInt(port, 10, 32); err != nil || n > 65535 || n < 0 { slog.Warn("invalid port, using default", "port", port, "default", defaultPort) - return &url.URL{ - Scheme: scheme, - Host: net.JoinHostPort(host, defaultPort), - } + port = defaultPort } return &url.URL{ Scheme: scheme, Host: net.JoinHostPort(host, port), + Path: path, } } diff --git a/envconfig/config_test.go b/envconfig/config_test.go index 92a500f1..d52a98a5 100644 --- a/envconfig/config_test.go +++ b/envconfig/config_test.go @@ -13,34 +13,35 @@ func TestHost(t *testing.T) { value string expect string }{ - "empty": {"", "127.0.0.1:11434"}, - "only address": {"1.2.3.4", "1.2.3.4:11434"}, - "only port": {":1234", ":1234"}, - "address and port": {"1.2.3.4:1234", "1.2.3.4:1234"}, - "hostname": {"example.com", "example.com:11434"}, - "hostname and port": {"example.com:1234", "example.com:1234"}, - "zero port": {":0", ":0"}, - "too large port": {":66000", ":11434"}, - "too small port": {":-1", ":11434"}, - "ipv6 localhost": {"[::1]", "[::1]:11434"}, - "ipv6 world open": {"[::]", "[::]:11434"}, - "ipv6 no brackets": {"::1", "[::1]:11434"}, - "ipv6 + port": {"[::1]:1337", "[::1]:1337"}, - "extra space": {" 1.2.3.4 ", "1.2.3.4:11434"}, - "extra quotes": {"\"1.2.3.4\"", "1.2.3.4:11434"}, - "extra space+quotes": {" \" 1.2.3.4 \" ", "1.2.3.4:11434"}, - "extra single quotes": {"'1.2.3.4'", "1.2.3.4:11434"}, - "http": {"http://1.2.3.4", "1.2.3.4:80"}, - "http port": {"http://1.2.3.4:4321", "1.2.3.4:4321"}, - "https": {"https://1.2.3.4", "1.2.3.4:443"}, - "https port": {"https://1.2.3.4:4321", "1.2.3.4:4321"}, + "empty": {"", "http://127.0.0.1:11434"}, + "only address": {"1.2.3.4", "http://1.2.3.4:11434"}, + "only port": {":1234", "http://:1234"}, + "address and port": {"1.2.3.4:1234", "http://1.2.3.4:1234"}, + "hostname": {"example.com", "http://example.com:11434"}, + "hostname and port": {"example.com:1234", "http://example.com:1234"}, + "zero port": {":0", "http://:0"}, + "too large port": {":66000", "http://:11434"}, + "too small port": {":-1", "http://:11434"}, + "ipv6 localhost": {"[::1]", "http://[::1]:11434"}, + "ipv6 world open": {"[::]", "http://[::]:11434"}, + "ipv6 no brackets": {"::1", "http://[::1]:11434"}, + "ipv6 + port": {"[::1]:1337", "http://[::1]:1337"}, + "extra space": {" 1.2.3.4 ", "http://1.2.3.4:11434"}, + "extra quotes": {"\"1.2.3.4\"", "http://1.2.3.4:11434"}, + "extra space+quotes": {" \" 1.2.3.4 \" ", "http://1.2.3.4:11434"}, + "extra single quotes": {"'1.2.3.4'", "http://1.2.3.4:11434"}, + "http": {"http://1.2.3.4", "http://1.2.3.4:80"}, + "http port": {"http://1.2.3.4:4321", "http://1.2.3.4:4321"}, + "https": {"https://1.2.3.4", "https://1.2.3.4:443"}, + "https port": {"https://1.2.3.4:4321", "https://1.2.3.4:4321"}, + "proxy path": {"https://example.com/ollama", "https://example.com:443/ollama"}, } for name, tt := range cases { t.Run(name, func(t *testing.T) { t.Setenv("OLLAMA_HOST", tt.value) - if host := Host(); host.Host != tt.expect { - t.Errorf("%s: expected %s, got %s", name, tt.expect, host.Host) + if host := Host(); host.String() != tt.expect { + t.Errorf("%s: expected %s, got %s", name, tt.expect, host.String()) } }) } From bb362caf88487a08cb29c8263d383a7d9e448803 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Tue, 2 Jul 2024 15:02:07 -0700 Subject: [PATCH 05/55] update faq --- docs/faq.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/faq.md b/docs/faq.md index 324116d1..25b68248 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -111,7 +111,10 @@ On Windows, Ollama inherits your user and system environment variables. ## How do I use Ollama behind a proxy? -Ollama is compatible with proxy servers if `HTTP_PROXY` or `HTTPS_PROXY` are configured. When using either variables, ensure it is set where `ollama serve` can access the values. When using `HTTPS_PROXY`, ensure the proxy certificate is installed as a system certificate. Refer to the section above for how to use environment variables on your platform. +Ollama pulls models from the Internet and may require a proxy server to access the models. Use `HTTPS_PROXY` to redirect outbound requests through the proxy. Ensure the proxy certificate is installed as a system certificate. Refer to the section above for how to use environment variables on your platform. + +> [!NOTE] +> Avoid setting `HTTP_PROXY`. Ollama does not use HTTP for model pulls, only HTTPS. Setting `HTTP_PROXY` may interrupt client connections to the server. ### How do I use Ollama behind a proxy in Docker? @@ -276,4 +279,4 @@ Note: Windows with Radeon GPUs currently default to 1 model maximum due to limit ## How does Ollama load models on multiple GPUs? -Installing multiple GPUs of the same brand can be a great way to increase your available VRAM to load larger models. When you load a new model, Ollama evaluates the required VRAM for the model against what is currently available. If the model will entirely fit on any single GPU, Ollama will load the model on that GPU. This typically provides the best performance as it reduces the amount of data transfering across the PCI bus during inference. If the model does not fit entirely on one GPU, then it will be spread across all the available GPUs. \ No newline at end of file +Installing multiple GPUs of the same brand can be a great way to increase your available VRAM to load larger models. When you load a new model, Ollama evaluates the required VRAM for the model against what is currently available. If the model will entirely fit on any single GPU, Ollama will load the model on that GPU. This typically provides the best performance as it reduces the amount of data transfering across the PCI bus during inference. If the model does not fit entirely on one GPU, then it will be spread across all the available GPUs. From 69be940bf6d2816f61c79facfa336183bc882720 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Fri, 23 Aug 2024 15:11:56 -0700 Subject: [PATCH 06/55] gpu: Group GPU Library sets by variant (#6483) The recent cuda variant changes uncovered a bug in ByLibrary which failed to group by common variant for GPU types. --- gpu/gpu_test.go | 25 +++++++++++++++++++++++++ gpu/types.go | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/gpu/gpu_test.go b/gpu/gpu_test.go index 46d3201e..13a3f544 100644 --- a/gpu/gpu_test.go +++ b/gpu/gpu_test.go @@ -32,4 +32,29 @@ func TestCPUMemInfo(t *testing.T) { } } +func TestByLibrary(t *testing.T) { + type testCase struct { + input []GpuInfo + expect int + } + + testCases := map[string]*testCase{ + "empty": {input: []GpuInfo{}, expect: 0}, + "cpu": {input: []GpuInfo{{Library: "cpu"}}, expect: 1}, + "cpu + GPU": {input: []GpuInfo{{Library: "cpu"}, {Library: "cuda"}}, expect: 2}, + "cpu + 2 GPU no variant": {input: []GpuInfo{{Library: "cpu"}, {Library: "cuda"}, {Library: "cuda"}}, expect: 2}, + "cpu + 2 GPU same variant": {input: []GpuInfo{{Library: "cpu"}, {Library: "cuda", Variant: "v11"}, {Library: "cuda", Variant: "v11"}}, expect: 2}, + "cpu + 2 GPU diff variant": {input: []GpuInfo{{Library: "cpu"}, {Library: "cuda", Variant: "v11"}, {Library: "cuda", Variant: "v12"}}, expect: 3}, + } + + for k, v := range testCases { + t.Run(k, func(t *testing.T) { + resp := (GpuInfoList)(v.input).ByLibrary() + if len(resp) != v.expect { + t.Fatalf("expected length %d, got %d => %+v", v.expect, len(resp), resp) + } + }) + } +} + // TODO - add some logic to figure out card type through other means and actually verify we got back what we expected diff --git a/gpu/types.go b/gpu/types.go index 4cbbeb84..a30e5fb3 100644 --- a/gpu/types.go +++ b/gpu/types.go @@ -94,7 +94,7 @@ func (l GpuInfoList) ByLibrary() []GpuInfoList { } } if !found { - libs = append(libs, info.Library) + libs = append(libs, requested) resp = append(resp, []GpuInfo{info}) } } From 0f92b19bec97198b035a7801eda14e3d48149033 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Sat, 24 Aug 2024 17:24:50 -0700 Subject: [PATCH 07/55] Only enable numa on CPUs (#6484) The numa flag may be having a performance impact on multi-socket systems with GPU loads --- llm/server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llm/server.go b/llm/server.go index 9347a458..4e5dac28 100644 --- a/llm/server.go +++ b/llm/server.go @@ -258,7 +258,7 @@ func NewLlamaServer(gpus gpu.GpuInfoList, model string, ggml *GGML, adapters, pr params = append(params, "--mlock") } - if gpu.IsNUMA() { + if gpu.IsNUMA() && gpus[0].Library == "cpu" { numaMode := "distribute" if runtime.GOOS == "linux" { if _, err := exec.LookPath("numactl"); err == nil { From 47fa0839b970f7ad8dbb35344440bb51d5a7ba56 Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Mon, 26 Aug 2024 19:36:11 -0700 Subject: [PATCH 08/55] server: clean up route names for consistency (#6524) --- server/routes.go | 36 ++++++++++++++++---------------- server/routes_create_test.go | 38 +++++++++++++++++----------------- server/routes_delete_test.go | 10 ++++----- server/routes_generate_test.go | 14 ++++++------- server/routes_list_test.go | 4 ++-- server/routes_test.go | 12 +++++------ 6 files changed, 57 insertions(+), 57 deletions(-) diff --git a/server/routes.go b/server/routes.go index 6c470c17..5e9f51e1 100644 --- a/server/routes.go +++ b/server/routes.go @@ -463,7 +463,7 @@ func (s *Server) EmbeddingsHandler(c *gin.Context) { c.JSON(http.StatusOK, resp) } -func (s *Server) PullModelHandler(c *gin.Context) { +func (s *Server) PullHandler(c *gin.Context) { var req api.PullRequest err := c.ShouldBindJSON(&req) switch { @@ -513,7 +513,7 @@ func (s *Server) PullModelHandler(c *gin.Context) { streamResponse(c, ch) } -func (s *Server) PushModelHandler(c *gin.Context) { +func (s *Server) PushHandler(c *gin.Context) { var req api.PushRequest err := c.ShouldBindJSON(&req) switch { @@ -577,7 +577,7 @@ func checkNameExists(name model.Name) error { return nil } -func (s *Server) CreateModelHandler(c *gin.Context) { +func (s *Server) CreateHandler(c *gin.Context) { var r api.CreateRequest if err := c.ShouldBindJSON(&r); errors.Is(err, io.EOF) { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": "missing request body"}) @@ -647,7 +647,7 @@ func (s *Server) CreateModelHandler(c *gin.Context) { streamResponse(c, ch) } -func (s *Server) DeleteModelHandler(c *gin.Context) { +func (s *Server) DeleteHandler(c *gin.Context) { var r api.DeleteRequest if err := c.ShouldBindJSON(&r); errors.Is(err, io.EOF) { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": "missing request body"}) @@ -680,7 +680,7 @@ func (s *Server) DeleteModelHandler(c *gin.Context) { } } -func (s *Server) ShowModelHandler(c *gin.Context) { +func (s *Server) ShowHandler(c *gin.Context) { var req api.ShowRequest err := c.ShouldBindJSON(&req) switch { @@ -829,7 +829,7 @@ func getKVData(digest string, verbose bool) (llm.KV, error) { return kv, nil } -func (s *Server) ListModelsHandler(c *gin.Context) { +func (s *Server) ListHandler(c *gin.Context) { ms, err := Manifests() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) @@ -879,7 +879,7 @@ func (s *Server) ListModelsHandler(c *gin.Context) { c.JSON(http.StatusOK, api.ListResponse{Models: models}) } -func (s *Server) CopyModelHandler(c *gin.Context) { +func (s *Server) CopyHandler(c *gin.Context) { var r api.CopyRequest if err := c.ShouldBindJSON(&r); errors.Is(err, io.EOF) { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": "missing request body"}) @@ -1081,33 +1081,33 @@ func (s *Server) GenerateRoutes() http.Handler { allowedHostsMiddleware(s.addr), ) - r.POST("/api/pull", s.PullModelHandler) + r.POST("/api/pull", s.PullHandler) r.POST("/api/generate", s.GenerateHandler) r.POST("/api/chat", s.ChatHandler) r.POST("/api/embed", s.EmbedHandler) r.POST("/api/embeddings", s.EmbeddingsHandler) - r.POST("/api/create", s.CreateModelHandler) - r.POST("/api/push", s.PushModelHandler) - r.POST("/api/copy", s.CopyModelHandler) - r.DELETE("/api/delete", s.DeleteModelHandler) - r.POST("/api/show", s.ShowModelHandler) + r.POST("/api/create", s.CreateHandler) + r.POST("/api/push", s.PushHandler) + r.POST("/api/copy", s.CopyHandler) + r.DELETE("/api/delete", s.DeleteHandler) + r.POST("/api/show", s.ShowHandler) r.POST("/api/blobs/:digest", s.CreateBlobHandler) r.HEAD("/api/blobs/:digest", s.HeadBlobHandler) - r.GET("/api/ps", s.ProcessHandler) + r.GET("/api/ps", s.PsHandler) // Compatibility endpoints r.POST("/v1/chat/completions", openai.ChatMiddleware(), s.ChatHandler) r.POST("/v1/completions", openai.CompletionsMiddleware(), s.GenerateHandler) r.POST("/v1/embeddings", openai.EmbeddingsMiddleware(), s.EmbedHandler) - r.GET("/v1/models", openai.ListMiddleware(), s.ListModelsHandler) - r.GET("/v1/models/:model", openai.RetrieveMiddleware(), s.ShowModelHandler) + r.GET("/v1/models", openai.ListMiddleware(), s.ListHandler) + r.GET("/v1/models/:model", openai.RetrieveMiddleware(), s.ShowHandler) for _, method := range []string{http.MethodGet, http.MethodHead} { r.Handle(method, "/", func(c *gin.Context) { c.String(http.StatusOK, "Ollama is running") }) - r.Handle(method, "/api/tags", s.ListModelsHandler) + r.Handle(method, "/api/tags", s.ListHandler) r.Handle(method, "/api/version", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"version": version.Version}) }) @@ -1269,7 +1269,7 @@ func streamResponse(c *gin.Context, ch chan any) { }) } -func (s *Server) ProcessHandler(c *gin.Context) { +func (s *Server) PsHandler(c *gin.Context) { models := []api.ProcessModelResponse{} for _, v := range s.sched.loaded { diff --git a/server/routes_create_test.go b/server/routes_create_test.go index 4de07b25..d436f26c 100644 --- a/server/routes_create_test.go +++ b/server/routes_create_test.go @@ -93,7 +93,7 @@ func TestCreateFromBin(t *testing.T) { t.Setenv("OLLAMA_MODELS", p) var s Server - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s", createBinFile(t, nil, nil)), Stream: &stream, @@ -120,7 +120,7 @@ func TestCreateFromModel(t *testing.T) { t.Setenv("OLLAMA_MODELS", p) var s Server - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s", createBinFile(t, nil, nil)), Stream: &stream, @@ -134,7 +134,7 @@ func TestCreateFromModel(t *testing.T) { filepath.Join(p, "manifests", "registry.ollama.ai", "library", "test", "latest"), }) - w = createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w = createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test2", Modelfile: "FROM test", Stream: &stream, @@ -162,7 +162,7 @@ func TestCreateRemovesLayers(t *testing.T) { t.Setenv("OLLAMA_MODELS", p) var s Server - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s\nTEMPLATE {{ .Prompt }}", createBinFile(t, nil, nil)), Stream: &stream, @@ -182,7 +182,7 @@ func TestCreateRemovesLayers(t *testing.T) { filepath.Join(p, "blobs", "sha256-bc80b03733773e0728011b2f4adf34c458b400e1aad48cb28d61170f3a2ad2d6"), }) - w = createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w = createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s\nTEMPLATE {{ .System }} {{ .Prompt }}", createBinFile(t, nil, nil)), Stream: &stream, @@ -210,7 +210,7 @@ func TestCreateUnsetsSystem(t *testing.T) { t.Setenv("OLLAMA_MODELS", p) var s Server - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s\nSYSTEM Say hi!", createBinFile(t, nil, nil)), Stream: &stream, @@ -230,7 +230,7 @@ func TestCreateUnsetsSystem(t *testing.T) { filepath.Join(p, "blobs", "sha256-f29e82a8284dbdf5910b1555580ff60b04238b8da9d5e51159ada67a4d0d5851"), }) - w = createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w = createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s\nSYSTEM \"\"", createBinFile(t, nil, nil)), Stream: &stream, @@ -267,7 +267,7 @@ func TestCreateMergeParameters(t *testing.T) { t.Setenv("OLLAMA_MODELS", p) var s Server - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s\nPARAMETER temperature 1\nPARAMETER top_k 10\nPARAMETER stop USER:\nPARAMETER stop ASSISTANT:", createBinFile(t, nil, nil)), Stream: &stream, @@ -288,7 +288,7 @@ func TestCreateMergeParameters(t *testing.T) { }) // in order to merge parameters, the second model must be created FROM the first - w = createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w = createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test2", Modelfile: "FROM test\nPARAMETER temperature 0.6\nPARAMETER top_p 0.7", Stream: &stream, @@ -326,7 +326,7 @@ func TestCreateMergeParameters(t *testing.T) { } // slices are replaced - w = createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w = createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test2", Modelfile: "FROM test\nPARAMETER temperature 0.6\nPARAMETER top_p 0.7\nPARAMETER stop <|endoftext|>", Stream: &stream, @@ -371,7 +371,7 @@ func TestCreateReplacesMessages(t *testing.T) { t.Setenv("OLLAMA_MODELS", p) var s Server - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s\nMESSAGE assistant \"What is my purpose?\"\nMESSAGE user \"You run tests.\"\nMESSAGE assistant \"Oh, my god.\"", createBinFile(t, nil, nil)), Stream: &stream, @@ -391,7 +391,7 @@ func TestCreateReplacesMessages(t *testing.T) { filepath.Join(p, "blobs", "sha256-e0e27d47045063ccb167ae852c51d49a98eab33fabaee4633fdddf97213e40b5"), }) - w = createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w = createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test2", Modelfile: "FROM test\nMESSAGE assistant \"You're a test, Harry.\"\nMESSAGE user \"I-I'm a what?\"\nMESSAGE assistant \"A test. And a thumping good one at that, I'd wager.\"", Stream: &stream, @@ -448,7 +448,7 @@ func TestCreateTemplateSystem(t *testing.T) { t.Setenv("OLLAMA_MODELS", p) var s Server - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s\nTEMPLATE {{ .Prompt }}\nSYSTEM Say hello!\nTEMPLATE {{ .System }} {{ .Prompt }}\nSYSTEM Say bye!", createBinFile(t, nil, nil)), Stream: &stream, @@ -488,7 +488,7 @@ func TestCreateTemplateSystem(t *testing.T) { } t.Run("incomplete template", func(t *testing.T) { - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s\nTEMPLATE {{ .Prompt", createBinFile(t, nil, nil)), Stream: &stream, @@ -500,7 +500,7 @@ func TestCreateTemplateSystem(t *testing.T) { }) t.Run("template with unclosed if", func(t *testing.T) { - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s\nTEMPLATE {{ if .Prompt }}", createBinFile(t, nil, nil)), Stream: &stream, @@ -512,7 +512,7 @@ func TestCreateTemplateSystem(t *testing.T) { }) t.Run("template with undefined function", func(t *testing.T) { - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s\nTEMPLATE {{ Prompt }}", createBinFile(t, nil, nil)), Stream: &stream, @@ -531,7 +531,7 @@ func TestCreateLicenses(t *testing.T) { t.Setenv("OLLAMA_MODELS", p) var s Server - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s\nLICENSE MIT\nLICENSE Apache-2.0", createBinFile(t, nil, nil)), Stream: &stream, @@ -579,7 +579,7 @@ func TestCreateDetectTemplate(t *testing.T) { var s Server t.Run("matched", func(t *testing.T) { - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s", createBinFile(t, llm.KV{ "tokenizer.chat_template": "{{ bos_token }}{% for message in messages %}{{'<|' + message['role'] + '|>' + '\n' + message['content'] + '<|end|>\n' }}{% endfor %}{% if add_generation_prompt %}{{ '<|assistant|>\n' }}{% else %}{{ eos_token }}{% endif %}", @@ -600,7 +600,7 @@ func TestCreateDetectTemplate(t *testing.T) { }) t.Run("unmatched", func(t *testing.T) { - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s", createBinFile(t, nil, nil)), Stream: &stream, diff --git a/server/routes_delete_test.go b/server/routes_delete_test.go index 82fac9f5..5a337e79 100644 --- a/server/routes_delete_test.go +++ b/server/routes_delete_test.go @@ -22,7 +22,7 @@ func TestDelete(t *testing.T) { var s Server - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test", Modelfile: fmt.Sprintf("FROM %s", createBinFile(t, nil, nil)), }) @@ -31,7 +31,7 @@ func TestDelete(t *testing.T) { t.Fatalf("expected status code 200, actual %d", w.Code) } - w = createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w = createRequest(t, s.CreateHandler, api.CreateRequest{ Name: "test2", Modelfile: fmt.Sprintf("FROM %s\nTEMPLATE {{ .System }} {{ .Prompt }}", createBinFile(t, nil, nil)), }) @@ -52,7 +52,7 @@ func TestDelete(t *testing.T) { filepath.Join(p, "blobs", "sha256-fe7ac77b725cda2ccad03f88a880ecdfd7a33192d6cae08fce2c0ee1455991ed"), }) - w = createRequest(t, s.DeleteModelHandler, api.DeleteRequest{Name: "test"}) + w = createRequest(t, s.DeleteHandler, api.DeleteRequest{Name: "test"}) if w.Code != http.StatusOK { t.Fatalf("expected status code 200, actual %d", w.Code) @@ -68,7 +68,7 @@ func TestDelete(t *testing.T) { filepath.Join(p, "blobs", "sha256-fe7ac77b725cda2ccad03f88a880ecdfd7a33192d6cae08fce2c0ee1455991ed"), }) - w = createRequest(t, s.DeleteModelHandler, api.DeleteRequest{Name: "test2"}) + w = createRequest(t, s.DeleteHandler, api.DeleteRequest{Name: "test2"}) if w.Code != http.StatusOK { t.Fatalf("expected status code 200, actual %d", w.Code) @@ -102,7 +102,7 @@ func TestDeleteDuplicateLayers(t *testing.T) { t.Fatal(err) } - w := createRequest(t, s.DeleteModelHandler, api.DeleteRequest{Name: "test"}) + w := createRequest(t, s.DeleteHandler, api.DeleteRequest{Name: "test"}) if w.Code != http.StatusOK { t.Errorf("expected status code 200, actual %d", w.Code) } diff --git a/server/routes_generate_test.go b/server/routes_generate_test.go index 5c0caff1..480b9672 100644 --- a/server/routes_generate_test.go +++ b/server/routes_generate_test.go @@ -84,7 +84,7 @@ func TestGenerateChat(t *testing.T) { go s.sched.Run(context.TODO()) - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Model: "test", Modelfile: fmt.Sprintf(`FROM %s TEMPLATE """ @@ -144,7 +144,7 @@ func TestGenerateChat(t *testing.T) { }) t.Run("missing capabilities chat", func(t *testing.T) { - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Model: "bert", Modelfile: fmt.Sprintf("FROM %s", createBinFile(t, llm.KV{ "general.architecture": "bert", @@ -270,7 +270,7 @@ func TestGenerateChat(t *testing.T) { checkChatResponse(t, w.Body, "test", "Hi!") }) - w = createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w = createRequest(t, s.CreateHandler, api.CreateRequest{ Model: "test-system", Modelfile: "FROM test\nSYSTEM You are a helpful assistant.", }) @@ -382,7 +382,7 @@ func TestGenerate(t *testing.T) { go s.sched.Run(context.TODO()) - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Model: "test", Modelfile: fmt.Sprintf(`FROM %s TEMPLATE """ @@ -442,7 +442,7 @@ func TestGenerate(t *testing.T) { }) t.Run("missing capabilities generate", func(t *testing.T) { - w := createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w := createRequest(t, s.CreateHandler, api.CreateRequest{ Model: "bert", Modelfile: fmt.Sprintf("FROM %s", createBinFile(t, llm.KV{ "general.architecture": "bert", @@ -583,7 +583,7 @@ func TestGenerate(t *testing.T) { checkGenerateResponse(t, w.Body, "test", "Hi!") }) - w = createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w = createRequest(t, s.CreateHandler, api.CreateRequest{ Model: "test-system", Modelfile: "FROM test\nSYSTEM You are a helpful assistant.", }) @@ -652,7 +652,7 @@ func TestGenerate(t *testing.T) { checkGenerateResponse(t, w.Body, "test-system", "Abra kadabra!") }) - w = createRequest(t, s.CreateModelHandler, api.CreateRequest{ + w = createRequest(t, s.CreateHandler, api.CreateRequest{ Model: "test-suffix", Modelfile: `FROM test TEMPLATE """{{- if .Suffix }}
 {{ .Prompt }} {{ .Suffix }} 
diff --git a/server/routes_list_test.go b/server/routes_list_test.go
index 6e92b7a1..56b40830 100644
--- a/server/routes_list_test.go
+++ b/server/routes_list_test.go
@@ -31,13 +31,13 @@ func TestList(t *testing.T) {
 
 	var s Server
 	for _, n := range expectNames {
-		createRequest(t, s.CreateModelHandler, api.CreateRequest{
+		createRequest(t, s.CreateHandler, api.CreateRequest{
 			Name:      n,
 			Modelfile: fmt.Sprintf("FROM %s", createBinFile(t, nil, nil)),
 		})
 	}
 
-	w := createRequest(t, s.ListModelsHandler, nil)
+	w := createRequest(t, s.ListHandler, nil)
 	if w.Code != http.StatusOK {
 		t.Fatalf("expected status code 200, actual %d", w.Code)
 	}
diff --git a/server/routes_test.go b/server/routes_test.go
index 242875d6..bffcea20 100644
--- a/server/routes_test.go
+++ b/server/routes_test.go
@@ -318,7 +318,7 @@ func TestCase(t *testing.T) {
 	var s Server
 	for _, tt := range cases {
 		t.Run(tt, func(t *testing.T) {
-			w := createRequest(t, s.CreateModelHandler, api.CreateRequest{
+			w := createRequest(t, s.CreateHandler, api.CreateRequest{
 				Name:      tt,
 				Modelfile: fmt.Sprintf("FROM %s", createBinFile(t, nil, nil)),
 				Stream:    &stream,
@@ -334,7 +334,7 @@ func TestCase(t *testing.T) {
 			}
 
 			t.Run("create", func(t *testing.T) {
-				w = createRequest(t, s.CreateModelHandler, api.CreateRequest{
+				w = createRequest(t, s.CreateHandler, api.CreateRequest{
 					Name:      strings.ToUpper(tt),
 					Modelfile: fmt.Sprintf("FROM %s", createBinFile(t, nil, nil)),
 					Stream:    &stream,
@@ -350,7 +350,7 @@ func TestCase(t *testing.T) {
 			})
 
 			t.Run("pull", func(t *testing.T) {
-				w := createRequest(t, s.PullModelHandler, api.PullRequest{
+				w := createRequest(t, s.PullHandler, api.PullRequest{
 					Name:   strings.ToUpper(tt),
 					Stream: &stream,
 				})
@@ -365,7 +365,7 @@ func TestCase(t *testing.T) {
 			})
 
 			t.Run("copy", func(t *testing.T) {
-				w := createRequest(t, s.CopyModelHandler, api.CopyRequest{
+				w := createRequest(t, s.CopyHandler, api.CopyRequest{
 					Source:      tt,
 					Destination: strings.ToUpper(tt),
 				})
@@ -387,7 +387,7 @@ func TestShow(t *testing.T) {
 
 	var s Server
 
-	createRequest(t, s.CreateModelHandler, api.CreateRequest{
+	createRequest(t, s.CreateHandler, api.CreateRequest{
 		Name: "show-model",
 		Modelfile: fmt.Sprintf(
 			"FROM %s\nFROM %s",
@@ -396,7 +396,7 @@ func TestShow(t *testing.T) {
 		),
 	})
 
-	w := createRequest(t, s.ShowModelHandler, api.ShowRequest{
+	w := createRequest(t, s.ShowHandler, api.ShowRequest{
 		Name: "show-model",
 	})
 

From ac80010db8ceebac6891beea9a5cd761815678ad Mon Sep 17 00:00:00 2001
From: Patrick Devine 
Date: Mon, 26 Aug 2024 19:57:26 -0700
Subject: [PATCH 09/55] update the import docs (#6104)

---
 docs/images/ollama-keys.png | Bin 0 -> 144101 bytes
 docs/images/signup.png      | Bin 0 -> 81360 bytes
 docs/import.md              | 188 +++++++++++++++++++++++++++---------
 3 files changed, 142 insertions(+), 46 deletions(-)
 create mode 100644 docs/images/ollama-keys.png
 create mode 100644 docs/images/signup.png

diff --git a/docs/images/ollama-keys.png b/docs/images/ollama-keys.png
new file mode 100644
index 0000000000000000000000000000000000000000..119a4bcf4cb0cf0639f3e71e3cb70010f8179316
GIT binary patch
literal 144101
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
E3ov}7S^xk5

literal 0
HcmV?d00001

diff --git a/docs/import.md b/docs/import.md
index 82ea9ba5..baf34550 100644
--- a/docs/import.md
+++ b/docs/import.md
@@ -1,44 +1,129 @@
-# Import
+# Importing a model
 
-GGUF models and select Safetensors models can be imported directly into Ollama.
+## Table of Contents
 
-## Import GGUF
+  * [Importing a Safetensors adapter](#Importing-a-fine-tuned-adapter-from-Safetensors-weights)
+  * [Importing a Safetensors model](#Importing-a-model-from-Safetensors-weights)
+  * [Importing a GGUF file](#Importing-a-GGUF-based-model-or-adapter)
+  * [Sharing models on ollama.com](#Sharing-your-model-on-ollama.com)
 
-A binary GGUF file can be imported directly into Ollama through a Modelfile.
+## Importing a fine tuned adapter from Safetensors weights
+
+First, create a `Modelfile` with a `FROM` command pointing at the base model you used for fine tuning, and an `ADAPTER` command which points to the directory with your Safetensors adapter:
 
 ```dockerfile
-FROM /path/to/file.gguf
+FROM 
+ADAPTER /path/to/safetensors/adapter/directory
 ```
 
-## Import Safetensors
+Make sure that you use the same base model in the `FROM` command as you used to create the adapter otherwise you will get erratic results. Most frameworks use different quantization methods, so it's best to use non-quantized (i.e. non-QLoRA) adapters. If your adapter is in the same directory as your `Modelfile`, use `ADAPTER .` to specify the adapter path.
 
-If the model being imported is one of these architectures, it can be imported directly into Ollama through a Modelfile:
+Now run `ollama create` from the directory where the `Modelfile` was created:
 
- - LlamaForCausalLM
- - MistralForCausalLM
- - MixtralForCausalLM
- - GemmaForCausalLM
- - Phi3ForCausalLM
+```bash
+ollama create my-model
+```
+
+Lastly, test the model:
+
+```bash
+ollama run my-model
+```
+
+Ollama supports importing adapters based on several different model architectures including:
+
+  * Llama (including Llama 2, Llama 3, and Llama 3.1);
+  * Mistral (including Mistral 1, Mistral 2, and Mixtral); and
+  * Gemma (including Gemma 1 and Gemma 2)
+
+You can create the adapter using a fine tuning framework or tool which can output adapters in the Safetensors format, such as:
+
+  * Hugging Face [fine tuning framework] (https://huggingface.co/docs/transformers/en/training)
+  * [Unsloth](https://github.com/unslothai/unsloth)
+  * [MLX](https://github.com/ml-explore/mlx)
+
+
+## Importing a model from Safetensors weights
+
+First, create a `Modelfile` with a `FROM` command which points to the directory containing your Safetensors weights:
 
 ```dockerfile
 FROM /path/to/safetensors/directory
 ```
 
-For architectures not directly convertable by Ollama, see llama.cpp's [guide](https://github.com/ggerganov/llama.cpp/blob/master/README.md#prepare-and-quantize) on conversion. After conversion, see [Import GGUF](#import-gguf).
+If you create the Modelfile in the same directory as the weights, you can use the command `FROM .`.
 
-## Automatic Quantization
+Now run the `ollama create` command from the directory where you created the `Modelfile`:
 
-> [!NOTE]
-> Automatic quantization requires v0.1.35 or higher.
+```shell
+ollama create my-model
+```
 
-Ollama is capable of quantizing FP16 or FP32 models to any of the supported quantizations with the `-q/--quantize` flag in `ollama create`.
+Lastly, test the model:
+
+```shell
+ollama run my-model
+```
+
+Ollama supports importing models for several different architectures including:
+
+  * Llama (including Llama 2, Llama 3, and Llama 3.1);
+  * Mistral (including Mistral 1, Mistral 2, and Mixtral);
+  * Gemma (including Gemma 1 and Gemma 2); and
+  * Phi3
+
+This includes importing foundation models as well as any fine tuned models which which have been _fused_ with a foundation model.
+
+
+## Importing a GGUF based model or adapter
+
+If you have a GGUF based model or adapter it is possible to import it into Ollama. You can obtain a GGUF model or adapter by:
+
+  * converting a Safetensors model with the `convert_hf_to_gguf.py` from Llama.cpp; 
+  * converting a Safetensors adapter with the `convert_lora_to_gguf.py` from Llama.cpp; or
+  * downloading a model or adapter from a place such as HuggingFace
+
+To import a GGUF model, create a `Modelfile` containg:
+
+```dockerfile
+FROM /path/to/file.gguf
+```
+
+For a GGUF adapter, create the `Modelfile` with:
+
+```dockerfile
+FROM 
+ADAPTER /path/to/file.gguf
+```
+
+When importing a GGUF adapter, it's important to use the same base model as the base model that the adapter was created with. You can use:
+
+ * a model from Ollama
+ * a GGUF file
+ * a Safetensors based model 
+
+Once you have created your `Modelfile`, use the `ollama create` command to build the model.
+
+```shell
+ollama create my-model
+```
+
+## Quantizing a Model
+
+Quantizing a model allows you to run models faster and with less memory consumption but at reduced accuracy. This allows you to run a model on more modest hardware.
+
+Ollama can quantize FP16 and FP32 based models into different quantization levels using the `-q/--quantize` flag with the `ollama create` command.
+
+First, create a Modelfile with the FP16 or FP32 based model you wish to quantize.
 
 ```dockerfile
 FROM /path/to/my/gemma/f16/model
 ```
 
+Use `ollama create` to then create the quantized model.
+
 ```shell
-$ ollama create -q Q4_K_M mymodel
+$ ollama create --quantize q4_K_M mymodel
 transferring model data
 quantizing F16 model to Q4_K_M
 creating new layer sha256:735e246cc1abfd06e9cdcf95504d6789a6cd1ad7577108a70d9902fef503c1bd
@@ -49,42 +134,53 @@ success
 
 ### Supported Quantizations
 
-- `Q4_0`
-- `Q4_1`
-- `Q5_0`
-- `Q5_1`
-- `Q8_0`
+- `q4_0`
+- `q4_1`
+- `q5_0`
+- `q5_1`
+- `q8_0`
 
 #### K-means Quantizations
 
-- `Q3_K_S`
-- `Q3_K_M`
-- `Q3_K_L`
-- `Q4_K_S`
-- `Q4_K_M`
-- `Q5_K_S`
-- `Q5_K_M`
-- `Q6_K`
+- `q3_K_S`
+- `q3_K_M`
+- `q3_K_L`
+- `q4_K_S`
+- `q4_K_M`
+- `q5_K_S`
+- `q5_K_M`
+- `q6_K`
 
-## Template Detection
 
-> [!NOTE]
-> Template detection requires v0.1.42 or higher.
+## Sharing your model on ollama.com
 
-Ollama uses model metadata, specifically `tokenizer.chat_template`, to automatically create a template appropriate for the model you're importing.
+You can share any model you have created by pushing it to [ollama.com](https://ollama.com) so that other users can try it out.
 
-```dockerfile
-FROM /path/to/my/gemma/model
-```
+First, use your browser to go to the [Ollama Sign-Up](https://ollama.com/signup) page. If you already have an account, you can skip this step.
+
+![Sign-Up](images/signup.png)
+
+The `Username` field will be used as part of your model's name (e.g. `jmorganca/mymodel`), so make sure you are comfortable with the username that you have selected.
+
+Now that you have created an account and are signed-in, go to the [Ollama Keys Settings](https://ollama.com/settings/keys) page.
+
+Follow the directions on the page to determine where your Ollama Public Key is located.
+
+![Ollama Key](images/ollama-keys.png)
+
+Click on the `Add Ollama Public Key` button, and copy and paste the contents of your Ollama Public Key into the text field.
+
+To push a model to [ollama.com](https://ollama.com), first make sure that it is named correctly with your username. You may have to use the `ollama cp` command to copy
+your model to give it the correct name. Once you're happy with your model's name, use the `ollama push` command to push it to [ollama.com](https://ollama.com).
 
 ```shell
-$ ollama create mymodel
-transferring model data
-using autodetected template gemma-instruct
-creating new layer sha256:baa2a0edc27d19cc6b7537578a9a7ba1a4e3214dc185ed5ae43692b319af7b84
-creating new layer sha256:ba66c3309914dbef07e5149a648fd1877f030d337a4f240d444ea335008943cb
-writing manifest
-success
+ollama cp mymodel myuser/mymodel
+ollama push myuser/mymodel
+```
+
+Once your model has been pushed, other users can pull and run it by using the command:
+
+```shell
+ollama run myuser/mymodel
 ```
 
-Defining a template in the Modelfile will disable this feature which may be useful if you want to use a different template than the autodetected one.

From 3eb08377f82a7df091df5a9e6e73fac0ed3bcc26 Mon Sep 17 00:00:00 2001
From: Michael Yang 
Date: Mon, 26 Aug 2024 16:36:50 -0700
Subject: [PATCH 10/55] detect chat template from configs that contain lists

---
 convert/tokenizer.go      | 17 ++++++-
 convert/tokenizer_test.go | 96 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 111 insertions(+), 2 deletions(-)
 create mode 100644 convert/tokenizer_test.go

diff --git a/convert/tokenizer.go b/convert/tokenizer.go
index 653df6d2..429d36e7 100644
--- a/convert/tokenizer.go
+++ b/convert/tokenizer.go
@@ -100,8 +100,21 @@ func parseTokenizer(fsys fs.FS, specialTokenTypes []string) (*Tokenizer, error)
 		}
 
 		if template, ok := p["chat_template"]; ok {
-			if err := json.Unmarshal(template, &t.Template); err != nil {
-				return nil, err
+			var s []struct {
+				Name     string `json:"name"`
+				Template string `json:"template"`
+			}
+			if err := json.Unmarshal(template, &t.Template); err == nil {
+				// noop
+			} else if err := json.Unmarshal(template, &s); err == nil {
+				for _, e := range s {
+					if e.Name == "default" {
+						t.Template = e.Template
+						break
+					}
+				}
+			} else {
+				return nil, fmt.Errorf("invalid chat_template: %w", err)
 			}
 		}
 
diff --git a/convert/tokenizer_test.go b/convert/tokenizer_test.go
new file mode 100644
index 00000000..ed0175a4
--- /dev/null
+++ b/convert/tokenizer_test.go
@@ -0,0 +1,96 @@
+package convert
+
+import (
+	"io"
+	"io/fs"
+	"os"
+	"path/filepath"
+	"strings"
+	"testing"
+
+	"github.com/google/go-cmp/cmp"
+)
+
+func createTokenizerFS(t *testing.T, dir string, files map[string]io.Reader) fs.FS {
+	t.Helper()
+
+	for k, v := range files {
+		if err := func() error {
+			f, err := os.Create(filepath.Join(dir, k))
+			if err != nil {
+				return err
+			}
+			defer f.Close()
+
+			if _, err := io.Copy(f, v); err != nil {
+				return err
+			}
+
+			return nil
+		}(); err != nil {
+			t.Fatalf("unexpected error: %v", err)
+		}
+	}
+
+	return os.DirFS(dir)
+}
+
+func TestParseTokenizer(t *testing.T) {
+	cases := []struct {
+		name              string
+		fsys              fs.FS
+		specialTokenTypes []string
+		want              *Tokenizer
+	}{
+		{
+			name: "string chat template",
+			fsys: createTokenizerFS(t, t.TempDir(), map[string]io.Reader{
+				"tokenizer.json": strings.NewReader(`{}`),
+				"tokenizer_config.json": strings.NewReader(`{
+					"chat_template": ""
+				}`),
+			}),
+			want: &Tokenizer{
+				Vocabulary: &Vocabulary{Model: "gpt2"},
+				Pre:        "default",
+				Template:   "",
+			},
+		},
+		{
+			name: "list chat template",
+			fsys: createTokenizerFS(t, t.TempDir(), map[string]io.Reader{
+				"tokenizer.json": strings.NewReader(`{}`),
+				"tokenizer_config.json": strings.NewReader(`{
+					"chat_template": [
+						{
+							"name": "default",
+							"template": ""
+						},
+						{
+							"name": "tools",
+							"template": ""
+						}
+					]
+				}`),
+			}),
+			want: &Tokenizer{
+				Vocabulary: &Vocabulary{Model: "gpt2"},
+				Pre:        "default",
+				Template:   "",
+			},
+		},
+	}
+
+	for _, tt := range cases {
+		t.Run(tt.name, func(t *testing.T) {
+			tokenizer, err := parseTokenizer(tt.fsys, tt.specialTokenTypes)
+			if err != nil {
+				t.Fatalf("unexpected error: %v", err)
+			}
+
+			if diff := cmp.Diff(tt.want, tokenizer); diff != "" {
+				t.Errorf("unexpected tokenizer (-want +got):\n%s", diff)
+			}
+		})
+	}
+}

From eae3af6807954c10f7a95c4c1bfb536330270a23 Mon Sep 17 00:00:00 2001
From: Michael Yang 
Date: Tue, 27 Aug 2024 10:45:39 -0700
Subject: [PATCH 11/55] clean up convert tokenizer

---
 convert/convert_test.go | 2 +-
 convert/tokenizer.go    | 3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/convert/convert_test.go b/convert/convert_test.go
index 56b34f22..7dd489e2 100644
--- a/convert/convert_test.go
+++ b/convert/convert_test.go
@@ -89,7 +89,7 @@ func TestMain(m *testing.M) {
 	os.Exit(m.Run())
 }
 
-func TestConvertFull(t *testing.T) {
+func TestConvertModel(t *testing.T) {
 	cases := []string{
 		"Meta-Llama-3-8B-Instruct",
 		"Meta-Llama-3.1-8B-Instruct",
diff --git a/convert/tokenizer.go b/convert/tokenizer.go
index 429d36e7..14d6ba66 100644
--- a/convert/tokenizer.go
+++ b/convert/tokenizer.go
@@ -154,7 +154,6 @@ func parseTokenizer(fsys fs.FS, specialTokenTypes []string) (*Tokenizer, error)
 }
 
 type tokenizer struct {
-	Version     string  `json:"version"`
 	AddedTokens []token `json:"added_tokens"`
 	Model       struct {
 		Type   string         `json:"type"`
@@ -252,7 +251,7 @@ func parseVocabulary(fsys fs.FS) (*Vocabulary, error) {
 		return pattern.Func(fsys)
 	}
 
-	return nil, errors.New("unknown tensor format")
+	return nil, errors.New("unknown tokenizer format")
 }
 
 type SpecialVocabulary struct {

From 1c70a00f716ed61c5b0a9e0f2a01876de0fc54d0 Mon Sep 17 00:00:00 2001
From: Patrick Devine 
Date: Tue, 27 Aug 2024 11:15:25 -0700
Subject: [PATCH 12/55] adjust image sizes

---
 docs/import.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/docs/import.md b/docs/import.md
index baf34550..a81c4bb4 100644
--- a/docs/import.md
+++ b/docs/import.md
@@ -158,7 +158,7 @@ You can share any model you have created by pushing it to [ollama.com](https://o
 
 First, use your browser to go to the [Ollama Sign-Up](https://ollama.com/signup) page. If you already have an account, you can skip this step.
 
-![Sign-Up](images/signup.png)
+Sign-Up
 
 The `Username` field will be used as part of your model's name (e.g. `jmorganca/mymodel`), so make sure you are comfortable with the username that you have selected.
 
@@ -166,7 +166,7 @@ Now that you have created an account and are signed-in, go to the [Ollama Keys S
 
 Follow the directions on the page to determine where your Ollama Public Key is located.
 
-![Ollama Key](images/ollama-keys.png)
+Ollama Keys
 
 Click on the `Add Ollama Public Key` button, and copy and paste the contents of your Ollama Public Key into the text field.
 

From 397cae79620e09220f4207beadd523ce1ae7cbd5 Mon Sep 17 00:00:00 2001
From: Sean Khatiri <39913795+seankhatiri@users.noreply.github.com>
Date: Tue, 27 Aug 2024 16:28:29 -0400
Subject: [PATCH 13/55] llm: fix typo in comment (#6530)

---
 llm/server.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llm/server.go b/llm/server.go
index 4e5dac28..c38bc6bb 100644
--- a/llm/server.go
+++ b/llm/server.go
@@ -409,7 +409,7 @@ func NewLlamaServer(gpus gpu.GpuInfoList, model string, ggml *GGML, adapters, pr
 		}
 
 		if err = s.cmd.Start(); err != nil {
-			// Detect permission denied and augment them essage about noexec
+			// Detect permission denied and augment the message about noexec
 			if errors.Is(err, os.ErrPermission) {
 				finalErr = fmt.Errorf("unable to start server %w.  %s may have noexec set.  Set OLLAMA_TMPDIR for server to a writable executable directory", err, dir)
 				continue

From 4e1c4f6e0bfc7b0feabe08d7aa4bf92f444fbe66 Mon Sep 17 00:00:00 2001
From: Daniel Hiltgen 
Date: Tue, 27 Aug 2024 13:42:28 -0700
Subject: [PATCH 14/55] Update manual instructions with discrete ROCm bundle
 (#6445)

---
 docs/linux.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/docs/linux.md b/docs/linux.md
index d1d5892c..fbaf4845 100644
--- a/docs/linux.md
+++ b/docs/linux.md
@@ -28,6 +28,11 @@ Download and extract the Linux package:
 curl -fsSL https://ollama.com/download/ollama-linux-amd64.tgz | sudo tar zx -C /usr
 ```
 
+If you have an AMD GPU, also download and extract the ROCm package into the same location
+```bash
+curl -fsSL https://ollama.com/download/ollama-linux-amd64-rocm.tgz | sudo tar zx -C /usr
+```
+
 ### Adding Ollama as a startup service (recommended)
 
 Create a user for Ollama:

From 1713eddcd05e4c234108511f6fc1470c383e21b2 Mon Sep 17 00:00:00 2001
From: Patrick Devine 
Date: Tue, 27 Aug 2024 14:19:47 -0700
Subject: [PATCH 15/55] Fix import image width (#6528)

---
 docs/images/ollama-keys.png | Bin 144101 -> 154049 bytes
 docs/import.md              |   6 +++---
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/docs/images/ollama-keys.png b/docs/images/ollama-keys.png
index 119a4bcf4cb0cf0639f3e71e3cb70010f8179316..942079a8637c6e1312c30f19a688e115fda93829 100644
GIT binary patch
literal 154049
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

!pwP8H(-MhL|l_2v~BpuT+LXgK7$OKKh;u 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 TE)4q`@J~ZkSEW+PBKUs+^5v58 literal 144101 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 +Sign-Up The `Username` field will be used as part of your model's name (e.g. `jmorganca/mymodel`), so make sure you are comfortable with the username that you have selected. @@ -166,7 +166,7 @@ Now that you have created an account and are signed-in, go to the [Ollama Keys S Follow the directions on the page to determine where your Ollama Public Key is located. -Ollama Keys +Ollama Keys Click on the `Add Ollama Public Key` button, and copy and paste the contents of your Ollama Public Key into the text field. From d13c3daa0bff581532b29c269040338fdc895aeb Mon Sep 17 00:00:00 2001 From: Patrick Devine Date: Tue, 27 Aug 2024 14:46:47 -0700 Subject: [PATCH 16/55] add safetensors to the modelfile docs (#6532) --- docs/modelfile.md | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/docs/modelfile.md b/docs/modelfile.md index 852bf96c..51827e74 100644 --- a/docs/modelfile.md +++ b/docs/modelfile.md @@ -11,8 +11,9 @@ A model file is the blueprint to create and share models with Ollama. - [Examples](#examples) - [Instructions](#instructions) - [FROM (Required)](#from-required) - - [Build from llama3](#build-from-llama3) - - [Build from a bin file](#build-from-a-bin-file) + - [Build from llama3.1](#build-from-llama31) + - [Build from a Safetensors model](#build-from-a-safetensors-model) + - [Build from a GGUF file](#build-from-a-gguf-file) - [PARAMETER](#parameter) - [Valid Parameters and Values](#valid-parameters-and-values) - [TEMPLATE](#template) @@ -99,22 +100,39 @@ The `FROM` instruction defines the base model to use when creating a model. FROM : ``` -#### Build from llama3 +#### Build from llama3.1 ```modelfile -FROM llama3 +FROM llama3.1 ``` A list of available base models: +Additional models can be found at: + -#### Build from a `bin` file +#### Build from a Safetensors model + +```modelfile +FROM +``` + +The model directory should contain the Safetensors weights for a supported architecture. + +Currently supported model architectures: + * Llama (including Llama 2, Llama 3, and Llama 3.1) + * Mistral (including Mistral 1, Mistral 2, and Mixtral) + * Gemma (including Gemma 1 and Gemma 2) + * Phi3 + +#### Build from a GGUF file ```modelfile FROM ./ollama-model.bin ``` -This bin file location should be specified as an absolute path or relative to the `Modelfile` location. +The GGUF bin file location should be specified as an absolute path or relative to the `Modelfile` location. + ### PARAMETER @@ -174,7 +192,20 @@ SYSTEM """""" ### ADAPTER -The `ADAPTER` instruction is an optional instruction that specifies any LoRA adapter that should apply to the base model. The value of this instruction should be an absolute path or a path relative to the Modelfile and the file must be in a GGML file format. The adapter should be tuned from the base model otherwise the behaviour is undefined. +The `ADAPTER` instruction specifies a fine tuned LoRA adapter that should apply to the base model. The value of the adapter should be an absolute path or a path relative to the Modelfile. The base model should be specified with a `FROM` instruction. If the base model is not the same as the base model that the adapter was tuned from the behaviour will be erratic. + +#### Safetensor adapter + +```modelfile +ADAPTER +``` + +Currently supported Safetensor adapters: + * Llama (including Llama 2, Llama 3, and Llama 3.1) + * Mistral (including Mistral 1, Mistral 2, and Mixtral) + * Gemma (including Gemma 1 and Gemma 2) + +#### GGUF adapter ```modelfile ADAPTER ./ollama-lora.bin From 60e47573a6efef0c9d13a2970a3951d739b9304e Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Tue, 27 Aug 2024 11:11:53 -0700 Subject: [PATCH 17/55] more tokenizer tests --- convert/tokenizer_test.go | 112 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/convert/tokenizer_test.go b/convert/tokenizer_test.go index ed0175a4..d9550e09 100644 --- a/convert/tokenizer_test.go +++ b/convert/tokenizer_test.go @@ -79,6 +79,118 @@ func TestParseTokenizer(t *testing.T) { Template: "", }, }, + { + name: "added tokens", + fsys: createTokenizerFS(t, t.TempDir(), map[string]io.Reader{ + "tokenizer.json": strings.NewReader(`{ + "added_tokens": [ + { + "id": 999, + "content": "", + "special": false + } + ] + }`), + }), + want: &Tokenizer{ + Vocabulary: &Vocabulary{ + Model: "gpt2", + Tokens: []string{""}, + Scores: []float32{999}, + Types: []int32{4}, + }, + Pre: "default", + }, + }, + { + name: "added tokens overlap vocab", + fsys: createTokenizerFS(t, t.TempDir(), map[string]io.Reader{ + "tokenizer.json": strings.NewReader(`{ + "added_tokens": [ + { + "id": 0, + "content": "", + "special": true + } + ], + "model": { + "vocab": { + "": 0 + } + } + }`), + }), + want: &Tokenizer{ + Vocabulary: &Vocabulary{ + Model: "gpt2", + Tokens: []string{""}, + Scores: []float32{0}, + Types: []int32{3}, + }, + Pre: "default", + }, + }, + { + name: "special token types", + fsys: createTokenizerFS(t, t.TempDir(), map[string]io.Reader{ + "tokenizer.json": strings.NewReader(`{ + "added_tokens": [ + { + "id": 0, + "content": "", + "special": true + }, + { + "id": 1, + "content": "", + "special": true + }, + { + "id": 2, + "content": "", + "special": true + }, + { + "id": 3, + "content": "", + "special": true + } + ], + "model": { + "vocab": { + "": 0, + "": 1, + "": 2, + "": 3 + } + } + }`), + "tokenizer_config.json": strings.NewReader(`{ + "add_bos_token": true, + "add_eos_token": false, + "bos_token": "", + "eos_token": "", + "pad_token": "", + "unk_token": "" + }`), + }), + specialTokenTypes: []string{"pad", "eos", "bos", "unk"}, + want: &Tokenizer{ + Vocabulary: &Vocabulary{ + Model: "gpt2", + Tokens: []string{"", "", "", ""}, + Scores: []float32{0, 1, 2, 3}, + Types: []int32{3, 3, 3, 3}, + }, + SpecialVocabulary: []*SpecialVocabulary{ + {Type: "pad", Content: "", ID: 0, AddToken: false}, + {Type: "eos", Content: "", ID: 1, AddToken: false}, + {Type: "bos", Content: "", ID: 2, AddToken: true}, + {Type: "unk", Content: "", ID: 3, AddToken: false}, + }, + Pre: "default", + }, + }, } for _, tt := range cases { From 413ae39f3c947a65f9c940edc0319218135ba767 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Tue, 27 Aug 2024 11:34:30 -0700 Subject: [PATCH 18/55] update templates to use messages --- server/routes_create_test.go | 4 ++-- template/alfred.gotmpl | 3 ++- template/alpaca.gotmpl | 20 +++++++++++++++----- template/chatml.gotmpl | 7 ++----- template/chatqa.gotmpl | 11 ++++++----- template/codellama-70b-instruct.gotmpl | 16 ++++++++-------- template/falcon-instruct.gotmpl | 11 +++++++---- template/gemma-instruct.gotmpl | 21 ++++++++++++++++----- template/granite-instruct.gotmpl | 13 ++++++------- template/llama2-chat.gotmpl | 18 +++++++++++++----- template/llama3-instruct.gotmpl | 8 +++----- template/magicoder.gotmpl | 19 ++++++++++++++----- template/mistral-instruct.gotmpl | 7 +++++-- template/openchat.gotmpl | 7 ++++++- template/phi-3.gotmpl | 7 ++----- template/solar-instruct.gotmpl | 14 ++++++++------ template/starcoder2-instruct.gotmpl | 20 +++++++++++++++----- template/vicuna.gotmpl | 16 +++++++++++++--- template/zephyr.gotmpl | 7 ++----- 19 files changed, 145 insertions(+), 84 deletions(-) diff --git a/server/routes_create_test.go b/server/routes_create_test.go index 4de07b25..2f577eb4 100644 --- a/server/routes_create_test.go +++ b/server/routes_create_test.go @@ -593,9 +593,9 @@ func TestCreateDetectTemplate(t *testing.T) { checkFileExists(t, filepath.Join(p, "blobs", "*"), []string{ filepath.Join(p, "blobs", "sha256-0d79f567714c62c048378f2107fb332dabee0135d080c302d884317da9433cc5"), + filepath.Join(p, "blobs", "sha256-35360843d0c84fb1506952a131bbef13cd2bb4a541251f22535170c05b56e672"), filepath.Join(p, "blobs", "sha256-553c4a3f747b3d22a4946875f1cc8ed011c2930d83f864a0c7265f9ec0a20413"), - filepath.Join(p, "blobs", "sha256-c608dc615584cd20d9d830363dabf8a4783ae5d34245c3d8c115edb3bc7b28e4"), - filepath.Join(p, "blobs", "sha256-ea34c57ba5b78b740aafe2aeb74dc6507fc3ad14170b64c26a04fb9e36c88d75"), + filepath.Join(p, "blobs", "sha256-de3959f841e9ef6b4b6255fa41cb9e0a45da89c3066aa72bdd07a4747f848990"), }) }) diff --git a/template/alfred.gotmpl b/template/alfred.gotmpl index cecb9d2c..86dba48f 100644 --- a/template/alfred.gotmpl +++ b/template/alfred.gotmpl @@ -1 +1,2 @@ -{{ if .System }}{{ .System }}{{ end }}{{ if .Prompt }}{{ .Prompt }}{{ end }}{{ .Response }} \ No newline at end of file +{{- range .Messages }}{{ .Content }} +{{- end }} \ No newline at end of file diff --git a/template/alpaca.gotmpl b/template/alpaca.gotmpl index ec7a8edc..00439736 100644 --- a/template/alpaca.gotmpl +++ b/template/alpaca.gotmpl @@ -1,8 +1,18 @@ -{{ if .System }}{{ .System }} +{{- $system := "" }} +{{- range .Messages }} +{{- if eq .Role "system" }} +{{- if not $system }}{{ $system = .Content }} +{{- else }}{{ $system = printf "%s\n\n%s" $system .Content }} +{{- end }} +{{- else if eq .Role "user" }} +{{- if $system }}{{ $system }} -{{ end }}{{ if .Prompt }}### Instruction: -{{ .Prompt }} +{{ $system = "" }} +{{- end }}### Instruction: +{{ .Content }} -{{ end }}### Response: -{{ .Response }} +{{ else if eq .Role "assistant" }}### Response: +{{ .Content }} +{{ end }} +{{- end }}### Response: diff --git a/template/chatml.gotmpl b/template/chatml.gotmpl index fb672601..43207ab1 100644 --- a/template/chatml.gotmpl +++ b/template/chatml.gotmpl @@ -1,6 +1,3 @@ -{{ if .System }}<|im_start|>system -{{ .System }}<|im_end|> -{{ end }}{{ if .Prompt }}<|im_start|>user -{{ .Prompt }}<|im_end|> +{{- range .Messages }}<|im_start|>{{ .Role }} +{{ .Content }}<|im_end|> {{ end }}<|im_start|>assistant -{{ .Response }}<|im_end|> diff --git a/template/chatqa.gotmpl b/template/chatqa.gotmpl index 91679a72..0f91e0f0 100644 --- a/template/chatqa.gotmpl +++ b/template/chatqa.gotmpl @@ -1,6 +1,7 @@ -{{ if .System }}System: {{ .System }} - -{{ end }}{{ if .Prompt }}User: {{ .Prompt }} - -{{ end }}Assistant: {{ .Response }} +{{- range .Messages }} +{{- if eq .Role "system" }}System: +{{- else if eq .Role "user" }}User: +{{- else if eq .Role "assistant" }}Assistant: +{{- end }} {{ .Content }} +{{ end }}Assistant: \ No newline at end of file diff --git a/template/codellama-70b-instruct.gotmpl b/template/codellama-70b-instruct.gotmpl index e5856042..18931520 100644 --- a/template/codellama-70b-instruct.gotmpl +++ b/template/codellama-70b-instruct.gotmpl @@ -1,10 +1,10 @@ -{{ if .System }}Source: system - - {{ .System }} {{ end }}Source: user - - {{ .Prompt }} Source: assistant -{{- if not .Response }} -Destination: user +{{- range .Messages }}Source: +{{- if eq .Role "system" }} system +{{- else if eq .Role "user" }} user +{{- else if eq .Role "assistant" }} assistant {{- end }} - {{ .Response }} \ No newline at end of file + {{ .Content }} {{ end }}Source: assistant +Destination: user + + \ No newline at end of file diff --git a/template/falcon-instruct.gotmpl b/template/falcon-instruct.gotmpl index 0a5fe48e..b9b51d2c 100644 --- a/template/falcon-instruct.gotmpl +++ b/template/falcon-instruct.gotmpl @@ -1,5 +1,8 @@ -{{ if .System }}System: {{ .System }} -{{ end }}{{ if .Prompt }}User: -{{ .Prompt }} +{{- range .Messages }} +{{- if eq .Role "system" }}System: {{ .Content }} +{{ continue }} +{{- else if eq .Role "user" }}User: +{{- else if eq .Role "assistant" }}Falcon: +{{- end }} +{{ .Content }} {{ end }}Falcon: -{{ .Response }} diff --git a/template/gemma-instruct.gotmpl b/template/gemma-instruct.gotmpl index 3c3a8425..cce25719 100644 --- a/template/gemma-instruct.gotmpl +++ b/template/gemma-instruct.gotmpl @@ -1,5 +1,16 @@ -user -{{ if .System }}{{ .System }} -{{ end }}{{ .Prompt }} -model -{{ .Response }} +{{- $system := "" }} +{{- range .Messages }} +{{- if eq .Role "system" }} +{{- if not $system }}{{ $system = .Content }} +{{- else }}{{ $system = printf "%s\n\n%s" $system .Content }} +{{- end }} +{{- continue }} +{{- else if eq .Role "user" }}user +{{- if $system }} +{{ $system }} +{{- $system = "" }} +{{- end }} +{{- else if eq .Role "assistant" }}model +{{- end }} +{{ .Content }} +{{ end }}model diff --git a/template/granite-instruct.gotmpl b/template/granite-instruct.gotmpl index 56690fce..83634990 100644 --- a/template/granite-instruct.gotmpl +++ b/template/granite-instruct.gotmpl @@ -1,9 +1,8 @@ -{{ if .System }}System: -{{ .System }} - -{{ end }}{{ if .Prompt }}Question: -{{ .Prompt }} +{{- range .Messages }} +{{- if eq .Role "system" }}System: +{{- else if eq .Role "user" }}Question: +{{- else if eq .Role "assistant" }}Answer: +{{- end }} +{{ .Content }} {{ end }}Answer: -{{ .Response }} - diff --git a/template/llama2-chat.gotmpl b/template/llama2-chat.gotmpl index 013b414e..5634a072 100644 --- a/template/llama2-chat.gotmpl +++ b/template/llama2-chat.gotmpl @@ -1,6 +1,14 @@ -[INST] <> -{{- if .System }} -{{ .System }} -{{ end }}<> +{{- $system := "" }}[INST] {{ range .Messages }} +{{- if eq .Role "system" }} +{{- if not $system }}{{ $system = .Content }} +{{- else }}{{ $system = printf "%s\n\n%s" $system .Content }} +{{- end }} +{{- else if eq .Role "user" }}<> +{{- if $system }} +{{ $system }} +{{ $system = "" }} +{{- end }}<> -{{ .Prompt }} [/INST] {{ .Response }} \ No newline at end of file +{{ .Content }} [/INST] +{{- else if eq .Role "assistant" }} {{ .Content }}[INST] {{ end }} +{{- end }} \ No newline at end of file diff --git a/template/llama3-instruct.gotmpl b/template/llama3-instruct.gotmpl index 36d0218b..305ae403 100644 --- a/template/llama3-instruct.gotmpl +++ b/template/llama3-instruct.gotmpl @@ -1,7 +1,5 @@ -{{ if .System }}<|start_header_id|>system<|end_header_id|> +{{- range .Messages }}<|start_header_id|>{{ .Role }}<|end_header_id|> -{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|> +{{ .Content }}<|eot_id|> +{{- end }}<|start_header_id|>assistant<|end_header_id|> -{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|> - -{{ .Response }}<|eot_id|> \ No newline at end of file diff --git a/template/magicoder.gotmpl b/template/magicoder.gotmpl index 52abc01a..e5ee0e47 100644 --- a/template/magicoder.gotmpl +++ b/template/magicoder.gotmpl @@ -1,8 +1,17 @@ -{{ if .System }}{{ .System }} +{{- $system := "" }} +{{- range .Messages }} +{{- if eq .Role "system" }} +{{- if not $system }}{{ $system = .Content }} +{{- else }}{{ $system = printf "%s\n\n%s" $system .Content }} +{{- end }} +{{- continue }} +{{- else if eq .Role "user" }} +{{- if $system }}{{ $system }} -{{ end }}{{ if .Prompt }}@@ Instruction -{{ .Prompt }} +{{ $system = "" }} +{{- end }}@@ Instruction +{{- else if eq .Role "assistant" }}@@ Response +{{- end }} +{{ .Content }} {{ end }}@@ Response -{{ .Response }} - diff --git a/template/mistral-instruct.gotmpl b/template/mistral-instruct.gotmpl index e489bd4c..7a6ecdfd 100644 --- a/template/mistral-instruct.gotmpl +++ b/template/mistral-instruct.gotmpl @@ -1,3 +1,6 @@ -[INST] {{ if .System }}{{ .System }} +[INST] {{ range $index, $_ := .Messages }} +{{- if eq .Role "system" }}{{ .Content }} -{{ end }}{{ .Prompt }}[/INST] {{ .Response }} \ No newline at end of file +{{ else if eq .Role "user" }}{{ .Content }}[/INST] +{{- else if eq .Role "assistant" }} {{ .Content }}[INST] {{ end }} +{{- end }} \ No newline at end of file diff --git a/template/openchat.gotmpl b/template/openchat.gotmpl index 9c183834..66a4d687 100644 --- a/template/openchat.gotmpl +++ b/template/openchat.gotmpl @@ -1 +1,6 @@ -{{ if .System }}GPT4 Correct System: {{ .System }}<|end_of_turn|>{{ end }}GPT4 Correct User: {{ .Prompt }}<|end_of_turn|>GPT4 Correct Assistant: {{ .Response }}<|end_of_turn|> \ No newline at end of file +{{- range .Messages }}GPT4 Correct +{{- if eq .Role "system" }} System: +{{- else if eq .Role "user" }} User: +{{- else if eq .Role "assistant" }} Assistant: +{{- end }} {{ .Content }}<|end_of_turn|> +{{- end }}GPT4 Correct Assistant: \ No newline at end of file diff --git a/template/phi-3.gotmpl b/template/phi-3.gotmpl index 6c3610dd..abec2137 100644 --- a/template/phi-3.gotmpl +++ b/template/phi-3.gotmpl @@ -1,6 +1,3 @@ -{{ if .System }}<|system|> -{{ .System }}<|end|> -{{ end }}{{ if .Prompt }}<|user|> -{{ .Prompt }}<|end|> +{{- range .Messages }}<|{{ .Role }}|> +{{ .Content }}<|end|> {{ end }}<|assistant|> -{{ .Response }}<|end|> diff --git a/template/solar-instruct.gotmpl b/template/solar-instruct.gotmpl index 1c14960d..263bde80 100644 --- a/template/solar-instruct.gotmpl +++ b/template/solar-instruct.gotmpl @@ -1,9 +1,11 @@ -{{ if .System }}### System: -{{ .System }} +{{- range .Messages }} +{{- if eq .Role "system" }}### System: +{{- else if eq .Role "user" }}### User: +{{- else if eq .Role "assistant" }}### Assistant: +{{ .Content }} -{{ end }}{{ if .Prompt }}### User: -{{ .Prompt }} +{{ continue }} +{{- end }} +{{ .Content }} {{ end }}### Assistant: -{{ .Response }} - diff --git a/template/starcoder2-instruct.gotmpl b/template/starcoder2-instruct.gotmpl index 6c93a7ab..7963b4f9 100644 --- a/template/starcoder2-instruct.gotmpl +++ b/template/starcoder2-instruct.gotmpl @@ -1,8 +1,18 @@ -{{ if .System }}{{ .System }} +{{- $system := "" }} +{{- range .Messages }} +{{- if eq .Role "system" }} +{{- if not $system }}{{ $system = .Content }} +{{- else }}{{ $system = printf "%s\n\n%s" $system .Content }} +{{- end }} +{{- else if eq .Role "user" }} +{{- if $system }}{{ $system }} -{{ end }}{{ if .Prompt }}### Instruction -{{ .Prompt }} +{{ $system = "" }} +{{- end }}### Instruction +{{ .Content }} -{{ end }}### Response -{{ .Response }}<|endoftext|> +{{ else if eq .Role "assistant" }}### Response +{{ .Content }}<|endoftext|> +{{ end }} +{{- end }}### Response diff --git a/template/vicuna.gotmpl b/template/vicuna.gotmpl index 515b2fe9..c27f39c5 100644 --- a/template/vicuna.gotmpl +++ b/template/vicuna.gotmpl @@ -1,4 +1,14 @@ -{{ if .System }}{{ .System }} +{{- $system := "" }} +{{- range .Messages }} +{{- if eq .Role "system" }} +{{- if not $system }}{{ $system = .Content }} +{{- else }}{{ $system = printf "%s\n\n%s" $system .Content }} +{{- end }} +{{- else if eq .Role "user" }} +{{- if $system }}{{ $system }} -{{ end }}{{ if .Prompt }}USER: {{ .Prompt }} -{{ end }}ASSISTANT: {{ .Response }} +{{ $system = "" }} +{{- end }}USER: {{ .Content }} +{{ else if eq .Role "assistant" }}ASSISTANT: {{ .Content }} +{{ end }} +{{- end }}ASSISTANT: \ No newline at end of file diff --git a/template/zephyr.gotmpl b/template/zephyr.gotmpl index 1f889f26..25da148a 100644 --- a/template/zephyr.gotmpl +++ b/template/zephyr.gotmpl @@ -1,6 +1,3 @@ -{{ if .System }}<|system|> -{{ .System }} -{{ end }}{{ if .Prompt }}<|user|> -{{ .Prompt }} +{{- range .Messages }}<|{{ .Role }}|> +{{ .Content }} {{ end }}<|assistant|> -{{ .Response }} From 93ea9240aee8a51b0fe455fdddedec2046438f95 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Tue, 27 Aug 2024 16:19:00 -0700 Subject: [PATCH 19/55] Move ollama executable out of bin dir (#6535) --- app/ollama.iss | 8 ++++---- envconfig/config.go | 11 ++++++++++- gpu/amd_common.go | 4 +++- gpu/amd_windows.go | 2 +- gpu/gpu.go | 2 +- scripts/build_windows.ps1 | 4 ++-- 6 files changed, 21 insertions(+), 10 deletions(-) diff --git a/app/ollama.iss b/app/ollama.iss index bce0a337..34cc5c4c 100644 --- a/app/ollama.iss +++ b/app/ollama.iss @@ -87,7 +87,7 @@ DialogFontSize=12 [Files] Source: ".\app.exe"; DestDir: "{app}"; DestName: "{#MyAppExeName}" ; Flags: ignoreversion 64bit -Source: "..\ollama.exe"; DestDir: "{app}\bin"; Flags: ignoreversion 64bit +Source: "..\ollama.exe"; DestDir: "{app}"; Flags: ignoreversion 64bit Source: "..\dist\windows-{#ARCH}\lib\ollama\runners\*"; DestDir: "{app}\lib\ollama\runners"; Flags: ignoreversion 64bit recursesubdirs Source: "..\dist\ollama_welcome.ps1"; DestDir: "{app}"; Flags: ignoreversion Source: ".\assets\app.ico"; DestDir: "{app}"; Flags: ignoreversion @@ -99,7 +99,7 @@ Name: "{userstartup}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilen Name: "{userprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\app.ico" [Run] -Filename: "{cmd}"; Parameters: "/C set PATH={app}\bin;%PATH% & ""{app}\{#MyAppExeName}"""; Flags: postinstall nowait runhidden +Filename: "{cmd}"; Parameters: "/C set PATH={app};%PATH% & ""{app}\{#MyAppExeName}"""; Flags: postinstall nowait runhidden [UninstallRun] ; Filename: "{cmd}"; Parameters: "/C ""taskkill /im ''{#MyAppExeName}'' /f /t"; Flags: runhidden @@ -134,8 +134,8 @@ SetupAppRunningError=Another Ollama installer is running.%n%nPlease cancel or fi [Registry] Root: HKCU; Subkey: "Environment"; \ - ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}\bin"; \ - Check: NeedsAddPath('{app}\bin') + ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}"; \ + Check: NeedsAddPath('{app}') [Code] diff --git a/envconfig/config.go b/envconfig/config.go index 7e45a4f5..806a2d08 100644 --- a/envconfig/config.go +++ b/envconfig/config.go @@ -190,7 +190,7 @@ func RunnersDir() (p string) { } var paths []string - for _, root := range []string{filepath.Dir(exe), filepath.Join(filepath.Dir(exe), ".."), cwd} { + for _, root := range []string{filepath.Dir(exe), filepath.Join(filepath.Dir(exe), LibRelativeToExe()), cwd} { paths = append(paths, root, filepath.Join(root, runtime.GOOS+"-"+runtime.GOARCH), @@ -282,3 +282,12 @@ func Values() map[string]string { func Var(key string) string { return strings.Trim(strings.TrimSpace(os.Getenv(key)), "\"'") } + +// On windows, we keep the binary at the top directory, but +// other platforms use a "bin" directory, so this returns ".." +func LibRelativeToExe() string { + if runtime.GOOS == "windows" { + return "." + } + return ".." +} diff --git a/gpu/amd_common.go b/gpu/amd_common.go index 72d204f7..2894ac2c 100644 --- a/gpu/amd_common.go +++ b/gpu/amd_common.go @@ -9,6 +9,8 @@ import ( "path/filepath" "runtime" "strings" + + "github.com/ollama/ollama/envconfig" ) // Determine if the given ROCm lib directory is usable by checking for existence of some glob patterns @@ -54,7 +56,7 @@ func commonAMDValidateLibDir() (string, error) { // Installer payload location if we're running the installed binary exe, err := os.Executable() if err == nil { - rocmTargetDir := filepath.Join(filepath.Dir(exe), "..", "lib", "ollama") + rocmTargetDir := filepath.Join(filepath.Dir(exe), envconfig.LibRelativeToExe(), "lib", "ollama") if rocmLibUsable(rocmTargetDir) { slog.Debug("detected ROCM next to ollama executable " + rocmTargetDir) return rocmTargetDir, nil diff --git a/gpu/amd_windows.go b/gpu/amd_windows.go index a0ae7c96..ef6bf830 100644 --- a/gpu/amd_windows.go +++ b/gpu/amd_windows.go @@ -153,7 +153,7 @@ func AMDValidateLibDir() (string, error) { // Installer payload (if we're running from some other location) localAppData := os.Getenv("LOCALAPPDATA") appDir := filepath.Join(localAppData, "Programs", "Ollama") - rocmTargetDir := filepath.Join(appDir, "..", "lib", "ollama") + rocmTargetDir := filepath.Join(appDir, envconfig.LibRelativeToExe(), "lib", "ollama") if rocmLibUsable(rocmTargetDir) { slog.Debug("detected ollama installed ROCm at " + rocmTargetDir) return rocmTargetDir, nil diff --git a/gpu/gpu.go b/gpu/gpu.go index 10afb1e3..3de93f7f 100644 --- a/gpu/gpu.go +++ b/gpu/gpu.go @@ -653,7 +653,7 @@ func LibraryDir() string { slog.Warn("failed to lookup working directory", "error", err) } // Scan for any of our dependeices, and pick first match - for _, root := range []string{filepath.Dir(appExe), filepath.Join(filepath.Dir(appExe), ".."), cwd} { + for _, root := range []string{filepath.Dir(appExe), filepath.Join(filepath.Dir(appExe), envconfig.LibRelativeToExe()), cwd} { libDep := filepath.Join("lib", "ollama") if _, err := os.Stat(filepath.Join(root, libDep)); err == nil { return filepath.Join(root, libDep) diff --git a/scripts/build_windows.ps1 b/scripts/build_windows.ps1 index 9cebf1f4..eb8570c8 100644 --- a/scripts/build_windows.ps1 +++ b/scripts/build_windows.ps1 @@ -122,8 +122,8 @@ function buildOllama() { /csp "Google Cloud KMS Provider" /kc ${env:KEY_CONTAINER} ollama.exe if ($LASTEXITCODE -ne 0) { exit($LASTEXITCODE)} } - New-Item -ItemType Directory -Path .\dist\windows-${script:TARGET_ARCH}\bin\ -Force - cp .\ollama.exe .\dist\windows-${script:TARGET_ARCH}\bin\ + New-Item -ItemType Directory -Path .\dist\windows-${script:TARGET_ARCH}\ -Force + cp .\ollama.exe .\dist\windows-${script:TARGET_ARCH}\ } function buildApp() { From 6c1c1ad6a90e8fe23d63d2c431745e48e3fe9d81 Mon Sep 17 00:00:00 2001 From: Patrick Devine Date: Tue, 27 Aug 2024 17:54:04 -0700 Subject: [PATCH 20/55] throw an error when encountering unsupport tensor sizes (#6538) --- convert/convert_test.go | 101 ++++++++++++++++++++++++++++++++++ convert/reader_safetensors.go | 5 ++ 2 files changed, 106 insertions(+) diff --git a/convert/convert_test.go b/convert/convert_test.go index 56b34f22..f71ff8cd 100644 --- a/convert/convert_test.go +++ b/convert/convert_test.go @@ -140,6 +140,107 @@ func TestConvertFull(t *testing.T) { } } +func TestConvertInvalidDatatype(t *testing.T) { + f, err := os.CreateTemp(t.TempDir(), "testmodel") + if err != nil { + t.Fatal(err) + } + defer f.Close() + + tempDir := t.TempDir() + generateSafetensorTestData(t, tempDir) + + err = ConvertModel(os.DirFS(tempDir), f) + if err == nil || err.Error() != "unsupported safetensors model" { + t.Errorf("expected error but didn't get one") + } +} + +func generateSafetensorTestData(t *testing.T, tempDir string) { + type tensorData struct { + Offsets []int `json:"data_offsets"` + Type string `json:"dtype"` + Shape []int `json:"shape"` + } + offset := 4096 * 14336 + + td := map[string]*tensorData{} + td["model.layers.0.mlp.down_proj.weight"] = &tensorData{ + Offsets: []int{0, offset}, + Type: "I8", + Shape: []int{4096, 14336}, + } + td["model.layers.0.mlp.down_proj.weight_format"] = &tensorData{ + Offsets: []int{offset, offset}, + Type: "U8", + Shape: []int{}, + } + + data, err := json.Marshal(td) + if err != nil { + t.Fatal(err) + } + + var buf bytes.Buffer + + l := int64(len(data)) + err = binary.Write(&buf, binary.LittleEndian, l) + if err != nil { + t.Fatal(err) + } + + _, err = buf.Write(data) + if err != nil { + t.Fatal(err) + } + + fdata, err := os.Create(filepath.Join(tempDir, "model-00001-of-00001.safetensors")) + if err != nil { + t.Fatal(err) + } + defer fdata.Close() + + _, err = fdata.Write(buf.Bytes()) + if err != nil { + t.Fatal(err) + } + + configData := ` +{ + "architectures": [ + "LlamaForCausalLM" + ] +} +` + + f, err := os.Create(filepath.Join(tempDir, "config.json")) + if err != nil { + t.Fatal(err) + } + defer f.Close() + + _, err = f.WriteString(configData) + if err != nil { + t.Fatal(err) + } + + tokenizerData := ` +{ +} +` + + f, err = os.Create(filepath.Join(tempDir, "tokenizer.json")) + if err != nil { + t.Fatal(err) + } + defer f.Close() + + _, err = f.WriteString(tokenizerData) + if err != nil { + t.Fatal(err) + } +} + func TestConvertAdapter(t *testing.T) { type AdapterCase struct { Name string diff --git a/convert/reader_safetensors.go b/convert/reader_safetensors.go index 32a362cd..e1dde8fa 100644 --- a/convert/reader_safetensors.go +++ b/convert/reader_safetensors.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/binary" "encoding/json" + "errors" "fmt" "io" "io/fs" @@ -50,6 +51,10 @@ func parseSafetensors(fsys fs.FS, replacer *strings.Replacer, ps ...string) ([]T for _, key := range keys { if value := headers[key]; value.Type != "" { + // bitsandbytes quantized models are unsupported + if len(value.Shape) == 0 { + return nil, errors.New("unsupported safetensors model") + } ts = append(ts, safetensor{ fs: fsys, path: p, From d9d50c43cca950e70cdd288d62c58a8d5a8e43d4 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Tue, 27 Aug 2024 17:56:04 -0700 Subject: [PATCH 21/55] validate model path --- server/modelpath.go | 18 +++++------------- server/modelpath_test.go | 8 ++++++++ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/server/modelpath.go b/server/modelpath.go index 354eeed7..d498c467 100644 --- a/server/modelpath.go +++ b/server/modelpath.go @@ -73,18 +73,6 @@ func ParseModelPath(name string) ModelPath { var errModelPathInvalid = errors.New("invalid model path") -func (mp ModelPath) Validate() error { - if mp.Repository == "" { - return fmt.Errorf("%w: model repository name is required", errModelPathInvalid) - } - - if strings.Contains(mp.Tag, ":") { - return fmt.Errorf("%w: ':' (colon) is not allowed in tag names", errModelPathInvalid) - } - - return nil -} - func (mp ModelPath) GetNamespaceRepository() string { return fmt.Sprintf("%s/%s", mp.Namespace, mp.Repository) } @@ -105,7 +93,11 @@ func (mp ModelPath) GetShortTagname() string { // GetManifestPath returns the path to the manifest file for the given model path, it is up to the caller to create the directory if it does not exist. func (mp ModelPath) GetManifestPath() (string, error) { - return filepath.Join(envconfig.Models(), "manifests", mp.Registry, mp.Namespace, mp.Repository, mp.Tag), nil + if p := filepath.Join(mp.Registry, mp.Namespace, mp.Repository, mp.Tag); filepath.IsLocal(p) { + return filepath.Join(envconfig.Models(), "manifests", p), nil + } + + return "", errModelPathInvalid } func (mp ModelPath) BaseURL() *url.URL { diff --git a/server/modelpath_test.go b/server/modelpath_test.go index 849e0fa7..ef26266b 100644 --- a/server/modelpath_test.go +++ b/server/modelpath_test.go @@ -1,6 +1,7 @@ package server import ( + "errors" "os" "path/filepath" "testing" @@ -154,3 +155,10 @@ func TestParseModelPath(t *testing.T) { }) } } + +func TestInsecureModelpath(t *testing.T) { + mp := ParseModelPath("../../..:something") + if _, err := mp.GetManifestPath(); !errors.Is(err, errModelPathInvalid) { + t.Errorf("expected error: %v", err) + } +} From 8e6da3cbc57de9dce71bb6f0b13ab2929af1474f Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Tue, 27 Aug 2024 17:57:34 -0700 Subject: [PATCH 22/55] update deprecated warnings --- .golangci.yaml | 4 ++++ api/types.go | 16 +++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.golangci.yaml b/.golangci.yaml index c9c9f620..2e0ed3c7 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -32,6 +32,10 @@ linters: linters-settings: gci: sections: [standard, default, localmodule] + staticcheck: + checks: + - all + - -SA1019 # omit Deprecated check severity: default-severity: error rules: diff --git a/api/types.go b/api/types.go index 2f5a9424..df7bab21 100644 --- a/api/types.go +++ b/api/types.go @@ -296,15 +296,17 @@ type EmbeddingResponse struct { // CreateRequest is the request passed to [Client.Create]. type CreateRequest struct { Model string `json:"model"` - Path string `json:"path"` Modelfile string `json:"modelfile"` Stream *bool `json:"stream,omitempty"` Quantize string `json:"quantize,omitempty"` - // Name is deprecated, see Model + // Deprecated: set the model name with Model instead Name string `json:"name"` - // Quantization is deprecated, see Quantize + // Deprecated: set the file content with Modelfile instead + Path string `json:"path"` + + // Deprecated: use Quantize instead Quantization string `json:"quantization,omitempty"` } @@ -312,7 +314,7 @@ type CreateRequest struct { type DeleteRequest struct { Model string `json:"model"` - // Name is deprecated, see Model + // Deprecated: set the model name with Model instead Name string `json:"name"` } @@ -327,7 +329,7 @@ type ShowRequest struct { Options map[string]interface{} `json:"options"` - // Name is deprecated, see Model + // Deprecated: set the model name with Model instead Name string `json:"name"` } @@ -359,7 +361,7 @@ type PullRequest struct { Password string `json:"password"` Stream *bool `json:"stream,omitempty"` - // Name is deprecated, see Model + // Deprecated: set the model name with Model instead Name string `json:"name"` } @@ -380,7 +382,7 @@ type PushRequest struct { Password string `json:"password"` Stream *bool `json:"stream,omitempty"` - // Name is deprecated, see Model + // Deprecated: set the model name with Model instead Name string `json:"name"` } From 7416ced70f02f18f353d4025b817148d04867a3f Mon Sep 17 00:00:00 2001 From: Patrick Devine Date: Wed, 28 Aug 2024 14:03:20 -0700 Subject: [PATCH 23/55] add llama3.1 chat template (#6545) --- template/index.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/template/index.json b/template/index.json index e2d41893..0ce6ac0f 100644 --- a/template/index.json +++ b/template/index.json @@ -91,6 +91,10 @@ "template": "{% set loop_messages = messages %}{% for message in loop_messages %}{% set content = '<|start_header_id|>' + message['role'] + '<|end_header_id|>\n\n'+ message['content'] | trim + '<|eot_id|>' %}{% if loop.index0 == 0 %}{% set content = bos_token + content %}{% endif %}{{ content }}{% endfor %}{% if add_generation_prompt %}{{ '<|start_header_id|>assistant<|end_header_id|>\n\n' }}{% endif %}", "name": "llama3-instruct" }, + { + "template": "{{- bos_token }}\n{%- if custom_tools is defined %}\n {%- set tools = custom_tools %}\n{%- endif %}\n{%- if not tools_in_user_message is defined %}\n {%- set tools_in_user_message = true %}\n{%- endif %}\n{%- if not date_string is defined %}\n {%- set date_string = \"26 Jul 2024\" %}\n{%- endif %}\n{%- if not tools is defined %}\n {%- set tools = none %}\n{%- endif %}\n\n{#- This block extracts the system message, so we can slot it into the right place. #}\n{%- if messages[0]['role'] == 'system' %}\n {%- set system_message = messages[0]['content']|trim %}\n {%- set messages = messages[1:] %}\n{%- else %}\n {%- set system_message = \"\" %}\n{%- endif %}\n\n{#- System message + builtin tools #}\n{{- \"<|start_header_id|>system<|end_header_id|>\\n\\n\" }}\n{%- if builtin_tools is defined or tools is not none %}\n {{- \"Environment: ipython\\n\" }}\n{%- endif %}\n{%- if builtin_tools is defined %}\n {{- \"Tools: \" + builtin_tools | reject('equalto', 'code_interpreter') | join(\", \") + \"\\n\\n\"}}\n{%- endif %}\n{{- \"Cutting Knowledge Date: December 2023\\n\" }}\n{{- \"Today Date: \" + date_string + \"\\n\\n\" }}\n{%- if tools is not none and not tools_in_user_message %}\n {{- \"You have access to the following functions. To call a function, please respond with JSON for a function call.\" }}\n {{- 'Respond in the format {\"name\": function name, \"parameters\": dictionary of argument name and its value}.' }}\n {{- \"Do not use variables.\\n\\n\" }}\n {%- for t in tools %}\n {{- t | tojson(indent=4) }}\n {{- \"\\n\\n\" }}\n {%- endfor %}\n{%- endif %}\n{{- system_message }}\n{{- \"<|eot_id|>\" }}\n\n{#- Custom tools are passed in a user message with some extra guidance #}\n{%- if tools_in_user_message and not tools is none %}\n {#- Extract the first user message so we can plug it in here #}\n {%- if messages | length != 0 %}\n {%- set first_user_message = messages[0]['content']|trim %}\n {%- set messages = messages[1:] %}\n {%- else %}\n {{- raise_exception(\"Cannot put tools in the first user message when there's no first user message!\") }}\n{%- endif %}\n {{- '<|start_header_id|>user<|end_header_id|>\\n\\n' -}}\n {{- \"Given the following functions, please respond with a JSON for a function call \" }}\n {{- \"with its proper arguments that best answers the given prompt.\\n\\n\" }}\n {{- 'Respond in the format {\"name\": function name, \"parameters\": dictionary of argument name and its value}.' }}\n {{- \"Do not use variables.\\n\\n\" }}\n {%- for t in tools %}\n {{- t | tojson(indent=4) }}\n {{- \"\\n\\n\" }}\n {%- endfor %}\n {{- first_user_message + \"<|eot_id|>\"}}\n{%- endif %}\n\n{%- for message in messages %}\n {%- if not (message.role == 'ipython' or message.role == 'tool' or 'tool_calls' in message) %}\n {{- '<|start_header_id|>' + message['role'] + '<|end_header_id|>\\n\\n'+ message['content'] | trim + '<|eot_id|>' }}\n {%- elif 'tool_calls' in message %}\n {%- if not message.tool_calls|length == 1 %}\n {{- raise_exception(\"This model only supports single tool-calls at once!\") }}\n {%- endif %}\n {%- set tool_call = message.tool_calls[0].function %}\n {%- if builtin_tools is defined and tool_call.name in builtin_tools %}\n {{- '<|start_header_id|>assistant<|end_header_id|>\\n\\n' -}}\n {{- \"<|python_tag|>\" + tool_call.name + \".call(\" }}\n {%- for arg_name, arg_val in tool_call.arguments | items %}\n {{- arg_name + '=\"' + arg_val + '\"' }}\n {%- if not loop.last %}\n {{- \", \" }}\n {%- endif %}\n {%- endfor %}\n {{- \")\" }}\n {%- else %}\n {{- '<|start_header_id|>assistant<|end_header_id|>\\n\\n' -}}\n {{- '{\"name\": \"' + tool_call.name + '\", ' }}\n {{- '\"parameters\": ' }}\n {{- tool_call.arguments | tojson }}\n {{- \"}\" }}\n {%- endif %}\n {%- if builtin_tools is defined %}\n {#- This means we're in ipython mode #}\n {{- \"<|eom_id|>\" }}\n {%- else %}\n {{- \"<|eot_id|>\" }}\n {%- endif %}\n {%- elif message.role == \"tool\" or message.role == \"ipython\" %}\n {{- \"<|start_header_id|>ipython<|end_header_id|>\\n\\n\" }}\n {%- if message.content is mapping or message.content is iterable %}\n {{- message.content | tojson }}\n {%- else %}\n {{- message.content }}\n {%- endif %}\n {{- \"<|eot_id|>\" }}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|start_header_id|>assistant<|end_header_id|>\\n\\n' }}\n{%- endif %}\n", + "name": "llama3-instruct" + }, { "template": "{% for message in messages %}\n{% if message['role'] == 'user' %}\n{{ 'Question:\n' + message['content'] + '\n\n' }}{% elif message['role'] == 'system' %}\n{{ 'System:\n' + message['content'] + '\n\n' }}{% elif message['role'] == 'assistant' %}{{ 'Answer:\n' + message['content'] + '\n\n' }}{% endif %}\n{% if loop.last and add_generation_prompt %}\n{{ 'Answer:\n' }}{% endif %}{% endfor %}", "name": "granite-instruct" From e4d0a9c325137b684d9c0bb02694e8f10197314a Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Wed, 28 Aug 2024 14:07:48 -0700 Subject: [PATCH 24/55] fix(test): do not clobber models directory --- server/model_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/model_test.go b/server/model_test.go index 7753c549..e1737a5b 100644 --- a/server/model_test.go +++ b/server/model_test.go @@ -139,6 +139,7 @@ The temperature in San Francisco, CA is 70°F and in Toronto, Canada is 20°C.`, func TestParseFromFileFromLayer(t *testing.T) { tempModels := t.TempDir() + t.Setenv("OLLAMA_MODELS", tempModels) file, err := os.CreateTemp(tempModels, "") if err != nil { @@ -189,6 +190,7 @@ func TestParseFromFileFromLayer(t *testing.T) { func TestParseLayerFromCopy(t *testing.T) { tempModels := t.TempDir() + t.Setenv("OLLAMA_MODELS", tempModels) file2, err := os.CreateTemp(tempModels, "") if err != nil { From 8e4e509fa4e8e1c49cedfc2754e9a0c9ed0f2fae Mon Sep 17 00:00:00 2001 From: Patrick Devine Date: Wed, 28 Aug 2024 17:11:46 -0700 Subject: [PATCH 25/55] update the openai docs to explain how to set the context size (#6548) --- docs/openai.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/openai.md b/docs/openai.md index 75d2c595..0cbea6cc 100644 --- a/docs/openai.md +++ b/docs/openai.md @@ -300,3 +300,28 @@ curl http://localhost:11434/v1/chat/completions \ ] }' ``` + +### Setting the context size + +The OpenAI API does not have a way of setting the context size for a model. If you need to change the context size, create a `Modelfile` which looks like: + +```modelfile +FROM +PARAMETER num_ctx +``` + +Use the `ollama create mymodel` command to create a new model with the updated context size. Call the API with the updated model name: + +```shell +curl http://localhost:11434/v1/chat/completions \ + -H "Content-Type: application/json" \ + -d '{ + "model": "mymodel", + "messages": [ + { + "role": "user", + "content": "Hello!" + } + ] + }' +``` From 56346ccfa3e51eec51fc26ae8e91fc88cb74a9b8 Mon Sep 17 00:00:00 2001 From: Bryan Honof Date: Thu, 29 Aug 2024 18:45:35 +0200 Subject: [PATCH 26/55] doc: Add Nix and Flox to package manager listing (#6074) --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index aae92e6c..9f643800 100644 --- a/README.md +++ b/README.md @@ -337,6 +337,8 @@ See the [API documentation](./docs/api.md) for all endpoints. - [Pacman](https://archlinux.org/packages/extra/x86_64/ollama/) - [Helm Chart](https://artifacthub.io/packages/helm/ollama-helm/ollama) - [Guix channel](https://codeberg.org/tusharhero/ollama-guix) +- [Nix package](https://search.nixos.org/packages?channel=24.05&show=ollama&from=0&size=50&sort=relevance&type=packages&query=ollama) +- [Flox](https://flox.dev/blog/ollama-part-one) ### Libraries From 11018196e0e15b78328f710cef707c09eabcbd8d Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Thu, 29 Aug 2024 13:40:43 -0700 Subject: [PATCH 27/55] remove any unneeded build artifacts --- llm/generate/gen_common.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/llm/generate/gen_common.sh b/llm/generate/gen_common.sh index 40115936..cef68ea1 100644 --- a/llm/generate/gen_common.sh +++ b/llm/generate/gen_common.sh @@ -87,6 +87,8 @@ apply_patches() { build() { cmake -S ${LLAMACPP_DIR} -B ${BUILD_DIR} ${CMAKE_DEFS} cmake --build ${BUILD_DIR} ${CMAKE_TARGETS} -j8 + # remove unnecessary build artifacts + rm -f ${BUILD_DIR}/bin/ggml-common.h ${BUILD_DIR}/bin/ggml-metal.metal } compress() { From a1cef4d0a5f31280ea82b350605775931a6163cb Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Sat, 31 Aug 2024 10:40:05 -0700 Subject: [PATCH 28/55] Add findutils to base images (#6581) This caused missing internal files --- scripts/rh_linux_deps.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/rh_linux_deps.sh b/scripts/rh_linux_deps.sh index b4c9afd6..23f1f650 100644 --- a/scripts/rh_linux_deps.sh +++ b/scripts/rh_linux_deps.sh @@ -30,7 +30,7 @@ if grep -i "centos" /etc/system-release >/dev/null; then dnf install -y rh-git227-git ln -s /opt/rh/rh-git227/root/usr/bin/git /usr/local/bin/git fi - dnf install -y devtoolset-10-gcc devtoolset-10-gcc-c++ pigz + dnf install -y devtoolset-10-gcc devtoolset-10-gcc-c++ pigz findutils elif grep -i "rocky" /etc/system-release >/dev/null; then # Temporary workaround until rocky 8 AppStream ships GCC 10.4 (10.3 is incompatible with NVCC) cat << EOF > /etc/yum.repos.d/Rocky-Vault.repo @@ -45,6 +45,7 @@ EOF dnf install -y git \ gcc-toolset-10-gcc-10.2.1-8.2.el8 \ gcc-toolset-10-gcc-c++-10.2.1-8.2.el8 \ + findutils \ pigz else echo "ERROR Unexpected distro" From 1aad838707227eaf1be92ff6dd2fd3a6662858c2 Mon Sep 17 00:00:00 2001 From: rayfiyo <108730891+rayfiyo@users.noreply.github.com> Date: Sun, 1 Sep 2024 11:34:25 +0900 Subject: [PATCH 29/55] docs: update GGUF examples and references (#6577) --- docs/modelfile.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/modelfile.md b/docs/modelfile.md index 51827e74..92df22ef 100644 --- a/docs/modelfile.md +++ b/docs/modelfile.md @@ -128,10 +128,10 @@ Currently supported model architectures: #### Build from a GGUF file ```modelfile -FROM ./ollama-model.bin +FROM ./ollama-model.gguf ``` -The GGUF bin file location should be specified as an absolute path or relative to the `Modelfile` location. +The GGUF file location should be specified as an absolute path or relative to the `Modelfile` location. ### PARAMETER @@ -208,7 +208,7 @@ Currently supported Safetensor adapters: #### GGUF adapter ```modelfile -ADAPTER ./ollama-lora.bin +ADAPTER ./ollama-lora.gguf ``` ### LICENSE From 5f7b4a5e3056d083997b744029c30614cd32397b Mon Sep 17 00:00:00 2001 From: Vimal Kumar Date: Sun, 1 Sep 2024 09:42:17 +0530 Subject: [PATCH 30/55] fix(cmd): show info may have nil ModelInfo (#6579) --- cmd/cmd.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index b75c0b5e..f6d31f5b 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -726,14 +726,17 @@ func ShowHandler(cmd *cobra.Command, args []string) error { } func showInfo(resp *api.ShowResponse) { - arch := resp.ModelInfo["general.architecture"].(string) - modelData := [][]string{ - {"arch", arch}, {"parameters", resp.Details.ParameterSize}, {"quantization", resp.Details.QuantizationLevel}, - {"context length", fmt.Sprintf("%v", resp.ModelInfo[fmt.Sprintf("%s.context_length", arch)].(float64))}, - {"embedding length", fmt.Sprintf("%v", resp.ModelInfo[fmt.Sprintf("%s.embedding_length", arch)].(float64))}, + } + if resp.ModelInfo != nil { + arch := resp.ModelInfo["general.architecture"].(string) + modelData = append(modelData, + []string{"arch", arch}, + []string{"context length", fmt.Sprintf("%v", resp.ModelInfo[fmt.Sprintf("%s.context_length", arch)].(float64))}, + []string{"embedding length", fmt.Sprintf("%v", resp.ModelInfo[fmt.Sprintf("%s.embedding_length", arch)].(float64))}, + ) } mainTableData := [][]string{ From 741affdfd6938bebcec34a2ee4c40fe2584a63bc Mon Sep 17 00:00:00 2001 From: SnoopyTlion <771933002@qq.com> Date: Tue, 3 Sep 2024 03:31:29 +0800 Subject: [PATCH 31/55] docs: update faq.md for OLLAMA_MODELS env var permissions (#6587) --- docs/faq.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/faq.md b/docs/faq.md index 25b68248..356d5105 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -194,6 +194,8 @@ Refer to the section [above](#how-do-i-configure-ollama-server) for how to set e If a different directory needs to be used, set the environment variable `OLLAMA_MODELS` to the chosen directory. +> Note: on Linux using the standard installer, the `ollama` user needs read and write access to the specified directory. To assign the directory to the `ollama` user run `sudo chown -R ollama:ollama `. + Refer to the section [above](#how-do-i-configure-ollama-server) for how to set environment variables on your platform. ## How can I use Ollama in Visual Studio Code? From bfc2d61549534687277256590dce16864dda40c7 Mon Sep 17 00:00:00 2001 From: Jonathan Hecl Date: Mon, 2 Sep 2024 16:34:26 -0300 Subject: [PATCH 32/55] readme: add go-crew and Ollamaclient projects (#6583) --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 9f643800..1767d2dc 100644 --- a/README.md +++ b/README.md @@ -302,6 +302,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [LLMStack](https://github.com/trypromptly/LLMStack) (No-code multi-agent framework to build LLM agents and workflows) - [BoltAI for Mac](https://boltai.com) (AI Chat Client for Mac) - [Harbor](https://github.com/av/harbor) (Containerized LLM Toolkit with Ollama as default backend) +- [Go-CREW](https://www.jonathanhecl.com/go-crew/) (Powerful Offline RAG in Golang) ### Terminal @@ -370,6 +371,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [Portkey](https://portkey.ai/docs/welcome/integration-guides/ollama) - [PromptingTools.jl](https://github.com/svilupp/PromptingTools.jl) with an [example](https://svilupp.github.io/PromptingTools.jl/dev/examples/working_with_ollama) - [LlamaScript](https://github.com/Project-Llama/llamascript) +- [Ollamaclient for Golang](https://github.com/xyproto/ollamaclient) ### Mobile From ad3eb00bee71052576807b8cf4b9a25b2cceba50 Mon Sep 17 00:00:00 2001 From: presbrey Date: Mon, 2 Sep 2024 16:05:36 -0400 Subject: [PATCH 33/55] readme: add OllamaFarm project (#6508) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1767d2dc..84368f8d 100644 --- a/README.md +++ b/README.md @@ -350,6 +350,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [LangChainRust](https://github.com/Abraxas-365/langchain-rust) with [example](https://github.com/Abraxas-365/langchain-rust/blob/main/examples/llm_ollama.rs) - [LlamaIndex](https://gpt-index.readthedocs.io/en/stable/examples/llm/ollama.html) - [LiteLLM](https://github.com/BerriAI/litellm) +- [OllamaFarm for Go](https://github.com/presbrey/ollamafarm) - [OllamaSharp for .NET](https://github.com/awaescher/OllamaSharp) - [Ollama for Ruby](https://github.com/gbaptista/ollama-ai) - [Ollama-rs for Rust](https://github.com/pepperoni21/ollama-rs) From 9df5f0e8e4d9a7f2f0fdfc782304df8dbcbd50c6 Mon Sep 17 00:00:00 2001 From: R0CKSTAR Date: Wed, 4 Sep 2024 00:25:31 +0800 Subject: [PATCH 34/55] Reduce docker image size (#5847) Signed-off-by: Xiaodong Ye --- Dockerfile | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index c46477b4..6743866a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,7 @@ COPY --from=llm-code / /go/src/github.com/ollama/ollama/ WORKDIR /go/src/github.com/ollama/ollama/llm/generate ARG CGO_CFLAGS ARG CUDA_V11_ARCHITECTURES -ENV GOARCH amd64 +ENV GOARCH amd64 RUN --mount=type=cache,target=/root/.ccache \ OLLAMA_SKIP_STATIC_GENERATE=1 \ OLLAMA_SKIP_CPU_GENERATE=1 \ @@ -38,7 +38,7 @@ COPY --from=llm-code / /go/src/github.com/ollama/ollama/ WORKDIR /go/src/github.com/ollama/ollama/llm/generate ARG CGO_CFLAGS ARG CUDA_V12_ARCHITECTURES -ENV GOARCH amd64 +ENV GOARCH amd64 RUN --mount=type=cache,target=/root/.ccache \ OLLAMA_SKIP_STATIC_GENERATE=1 \ OLLAMA_SKIP_CPU_GENERATE=1 \ @@ -56,7 +56,7 @@ COPY --from=llm-code / /go/src/github.com/ollama/ollama/ WORKDIR /go/src/github.com/ollama/ollama/llm/generate ARG CGO_CFLAGS ARG CUDA_V11_ARCHITECTURES -ENV GOARCH arm64 +ENV GOARCH arm64 RUN OLLAMA_SKIP_STATIC_GENERATE=1 \ OLLAMA_SKIP_CPU_GENERATE=1 \ CMAKE_CUDA_ARCHITECTURES="${CUDA_V11_ARCHITECTURES}" \ @@ -72,7 +72,7 @@ COPY --from=llm-code / /go/src/github.com/ollama/ollama/ WORKDIR /go/src/github.com/ollama/ollama/llm/generate ARG CGO_CFLAGS ARG CUDA_V12_ARCHITECTURES -ENV GOARCH arm64 +ENV GOARCH arm64 RUN --mount=type=cache,target=/root/.ccache \ OLLAMA_SKIP_STATIC_GENERATE=1 \ OLLAMA_SKIP_CPU_GENERATE=1 \ @@ -92,7 +92,7 @@ COPY --from=llm-code / /go/src/github.com/ollama/ollama/ WORKDIR /go/src/github.com/ollama/ollama/llm/generate ARG CGO_CFLAGS ARG AMDGPU_TARGETS -ENV GOARCH amd64 +ENV GOARCH amd64 RUN --mount=type=cache,target=/root/.ccache \ OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_SKIP_CPU_GENERATE=1 bash gen_linux.sh RUN mkdir -p ../../dist/linux-amd64-rocm/lib/ollama && \ @@ -107,7 +107,7 @@ ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH COPY --from=llm-code / /go/src/github.com/ollama/ollama/ ARG OLLAMA_CUSTOM_CPU_DEFS ARG CGO_CFLAGS -ENV GOARCH amd64 +ENV GOARCH amd64 WORKDIR /go/src/github.com/ollama/ollama/llm/generate FROM --platform=linux/amd64 cpu-builder-amd64 AS static-build-amd64 @@ -181,17 +181,19 @@ RUN --mount=type=cache,target=/root/.ccache \ # Strip out ROCm dependencies to keep the primary image lean FROM --platform=linux/amd64 ubuntu:22.04 as amd64-libs-without-rocm COPY --from=build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /scratch/ -RUN cd /scratch/ollama/ && rm -rf rocblas libamd* libdrm* libroc* libhip* libhsa* +RUN cd /scratch/ollama/ && rm -rf rocblas libamd* libdrm* libroc* libhip* libhsa* # Runtime stages FROM --platform=linux/amd64 ubuntu:22.04 as runtime-amd64 COPY --from=amd64-libs-without-rocm /scratch/ /lib/ -RUN apt-get update && apt-get install -y ca-certificates +RUN apt-get update && apt-get install -y ca-certificates && \ + apt-get clean && rm -rf /var/lib/apt/lists/* COPY --from=build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/bin/ /bin/ FROM --platform=linux/arm64 ubuntu:22.04 as runtime-arm64 COPY --from=build-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/lib/ /lib/ -RUN apt-get update && apt-get install -y ca-certificates +RUN apt-get update && apt-get install -y ca-certificates && \ + apt-get clean && rm -rf /var/lib/apt/lists/* COPY --from=build-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/bin/ /bin/ # Radeon images are much larger so we keep it distinct from the CPU/CUDA image From 14d5093cd02373f11ed138241e3e2eedf349824b Mon Sep 17 00:00:00 2001 From: OpenVMP Date: Tue, 3 Sep 2024 09:28:01 -0700 Subject: [PATCH 35/55] readme: add PartCAD tool to readme for generating 3D CAD models using Ollama (#6605) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 84368f8d..3b619ae0 100644 --- a/README.md +++ b/README.md @@ -303,6 +303,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [BoltAI for Mac](https://boltai.com) (AI Chat Client for Mac) - [Harbor](https://github.com/av/harbor) (Containerized LLM Toolkit with Ollama as default backend) - [Go-CREW](https://www.jonathanhecl.com/go-crew/) (Powerful Offline RAG in Golang) +- [PartCAD](https://github.com/openvmp/partcad/) (CAD model generation with OpenSCAD and CadQuery) ### Terminal From 94fff5805fecd25287e1a21ac9910859011adcff Mon Sep 17 00:00:00 2001 From: FellowTraveler Date: Tue, 3 Sep 2024 11:32:59 -0500 Subject: [PATCH 36/55] Fix sprintf to snprintf (#5664) /Users/au/src/ollama/llm/ext_server/server.cpp:289:9: warning: 'sprintf' is deprecated: This function is provided for compatibility reasons only. Due to security concerns inherent in the design of sprintf(3), it is highly recommended that you use snprintf(3) instead. --- llm/ext_server/server.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/llm/ext_server/server.cpp b/llm/ext_server/server.cpp index 8e08b850..1e230611 100644 --- a/llm/ext_server/server.cpp +++ b/llm/ext_server/server.cpp @@ -262,7 +262,7 @@ struct server_slot { char buffer[512]; double t_token = t_prompt_processing / n_prompt_tokens_processed; double n_tokens_second = 1e3 / t_prompt_processing * n_prompt_tokens_processed; - sprintf(buffer, "prompt eval time = %10.2f ms / %5d tokens (%8.2f ms per token, %8.2f tokens per second)", + snprintf(buffer, sizeof(buffer), "prompt eval time = %10.2f ms / %5d tokens (%8.2f ms per token, %8.2f tokens per second)", t_prompt_processing, n_prompt_tokens_processed, t_token, n_tokens_second); LOG_DEBUG(buffer, { @@ -276,7 +276,7 @@ struct server_slot { t_token = t_token_generation / n_decoded; n_tokens_second = 1e3 / t_token_generation * n_decoded; - sprintf(buffer, "generation eval time = %10.2f ms / %5d runs (%8.2f ms per token, %8.2f tokens per second)", + snprintf(buffer, sizeof(buffer), "generation eval time = %10.2f ms / %5d runs (%8.2f ms per token, %8.2f tokens per second)", t_token_generation, n_decoded, t_token, n_tokens_second); LOG_DEBUG(buffer, { @@ -288,7 +288,7 @@ struct server_slot { {"n_tokens_second", n_tokens_second}, }); - sprintf(buffer, " total time = %10.2f ms", t_prompt_processing + t_token_generation); + snprintf(buffer, sizeof(buffer), " total time = %10.2f ms", t_prompt_processing + t_token_generation); LOG_DEBUG(buffer, { {"slot_id", id}, {"task_id", task_id}, From 35159de18a6054f30d6eb73747f150c519cbf0b9 Mon Sep 17 00:00:00 2001 From: Amith Koujalgi Date: Wed, 4 Sep 2024 01:38:50 +0530 Subject: [PATCH 37/55] readme: update Ollama4j link and add link to Ollama4j Web UI (#6608) --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3b619ae0..5568b6e7 100644 --- a/README.md +++ b/README.md @@ -304,6 +304,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [Harbor](https://github.com/av/harbor) (Containerized LLM Toolkit with Ollama as default backend) - [Go-CREW](https://www.jonathanhecl.com/go-crew/) (Powerful Offline RAG in Golang) - [PartCAD](https://github.com/openvmp/partcad/) (CAD model generation with OpenSCAD and CadQuery) +- [Ollama4j Web UI](https://github.com/ollama4j/ollama4j-web-ui) - Java-based Web UI for Ollama built with Vaadin, Spring Boot and Ollama4j ### Terminal @@ -356,7 +357,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [Ollama for Ruby](https://github.com/gbaptista/ollama-ai) - [Ollama-rs for Rust](https://github.com/pepperoni21/ollama-rs) - [Ollama-hpp for C++](https://github.com/jmont-dev/ollama-hpp) -- [Ollama4j for Java](https://github.com/amithkoujalgi/ollama4j) +- [Ollama4j for Java](https://github.com/ollama4j/ollama4j) - [ModelFusion Typescript Library](https://modelfusion.dev/integration/model-provider/ollama) - [OllamaKit for Swift](https://github.com/kevinhermawan/OllamaKit) - [Ollama for Dart](https://github.com/breitburg/dart-ollama) From 50c05d57e0100625ee5bdd4ba9accec7f4536005 Mon Sep 17 00:00:00 2001 From: Mateusz Migas <54471371+mateuszmigas@users.noreply.github.com> Date: Tue, 3 Sep 2024 22:15:54 +0200 Subject: [PATCH 38/55] readme: add Painting Droid community integration (#5514) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5568b6e7..fee01baa 100644 --- a/README.md +++ b/README.md @@ -296,6 +296,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [OllamaSpring](https://github.com/CrazyNeil/OllamaSpring) (Ollama Client for macOS) - [LLocal.in](https://github.com/kartikm7/llocal) (Easy to use Electron Desktop Client for Ollama) - [Ollama with Google Mesop](https://github.com/rapidarchitect/ollama_mesop/) (Mesop Chat Client implementation with Ollama) +- [Painting Droid](https://github.com/mateuszmigas/painting-droid) (Painting app with AI integrations) - [Kerlig AI](https://www.kerlig.com/) (AI writing assistant for macOS) - [AI Studio](https://github.com/MindWorkAI/AI-Studio) - [Sidellama](https://github.com/gyopak/sidellama) (browser-based LLM client) From 037a4d103edff143db2f82e1feb8b5b80afea6f1 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Tue, 3 Sep 2024 14:55:20 -0700 Subject: [PATCH 39/55] Log system memory at info (#6617) On systems with low system memory, we can hit allocation failures that are difficult to diagnose without debug logs. This will make it easier to spot. --- llm/server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llm/server.go b/llm/server.go index c38bc6bb..9c08f1bb 100644 --- a/llm/server.go +++ b/llm/server.go @@ -98,7 +98,7 @@ func NewLlamaServer(gpus gpu.GpuInfoList, model string, ggml *GGML, adapters, pr systemTotalMemory = systemMemInfo.TotalMemory systemFreeMemory = systemMemInfo.FreeMemory systemSwapFreeMemory = systemMemInfo.FreeSwap - slog.Debug("system memory", "total", format.HumanBytes2(systemTotalMemory), "free", format.HumanBytes2(systemFreeMemory), "free_swap", format.HumanBytes2(systemSwapFreeMemory)) + slog.Info("system memory", "total", format.HumanBytes2(systemTotalMemory), "free", format.HumanBytes2(systemFreeMemory), "free_swap", format.HumanBytes2(systemSwapFreeMemory)) } // If the user wants zero GPU layers, reset the gpu list to be CPU/system ram info From f29b167e1af8a7c0e8a15044584826432aff76d8 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Tue, 3 Sep 2024 17:15:31 -0700 Subject: [PATCH 40/55] Use cuda v11 for driver 525 and older (#6620) It looks like driver 525 (aka, cuda driver 12.0) has problems with the cuda v12 library we compile against, so run v11 on those older drivers if detected. --- gpu/cuda_common.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gpu/cuda_common.go b/gpu/cuda_common.go index 827cc9b4..aceec70a 100644 --- a/gpu/cuda_common.go +++ b/gpu/cuda_common.go @@ -57,7 +57,7 @@ func cudaVariant(gpuInfo CudaGPUInfo) string { } } - if gpuInfo.computeMajor < 6 || gpuInfo.DriverMajor < 12 { + if gpuInfo.computeMajor < 6 || gpuInfo.DriverMajor < 12 || (gpuInfo.DriverMajor == 12 && gpuInfo.DriverMinor == 0) { return "v11" } return "v12" From 5e2653f9fe454e948a8d48e3c15c21830c1ac26b Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Tue, 3 Sep 2024 21:12:39 -0400 Subject: [PATCH 41/55] llm: update llama.cpp commit to 8962422 (#6618) --- llm/ext_server/server.cpp | 19 +- llm/generate/gen_darwin.sh | 2 +- llm/llama.cpp | 2 +- llm/patches/05-default-pretokenizer.diff | 10 +- llm/patches/06-embeddings.diff | 28 +- llm/patches/09-lora.diff | 350 ----------------------- llm/patches/11-phi3-sliding-window.diff | 43 --- 7 files changed, 32 insertions(+), 422 deletions(-) delete mode 100644 llm/patches/09-lora.diff delete mode 100644 llm/patches/11-phi3-sliding-window.diff diff --git a/llm/ext_server/server.cpp b/llm/ext_server/server.cpp index 1e230611..fc673c47 100644 --- a/llm/ext_server/server.cpp +++ b/llm/ext_server/server.cpp @@ -425,7 +425,7 @@ struct llama_server_context n_ctx = llama_n_ctx(ctx); - add_bos_token = llama_should_add_bos_token(model); + add_bos_token = llama_add_bos_token(model); return true; } @@ -1031,7 +1031,7 @@ struct llama_server_context continue; } - if (!llava_image_embed_make_with_clip_img(clp_ctx, params.n_threads, img.img_data, &img.image_embedding, &img.image_tokens)) { + if (!llava_image_embed_make_with_clip_img(clp_ctx, params.cpuparams.n_threads, img.img_data, &img.image_embedding, &img.image_tokens)) { LOG_TEE("Error processing the given image"); return false; } @@ -2014,7 +2014,7 @@ static void server_print_usage(const char *argv0, const gpt_params ¶ms, printf("options:\n"); printf(" -h, --help show this help message and exit\n"); printf(" -v, --verbose verbose output (default: %s)\n", server_verbose ? "enabled" : "disabled"); - printf(" -t N, --threads N number of threads to use during computation (default: %d)\n", params.n_threads); + printf(" -t N, --threads N number of threads to use during computation (default: %d)\n", params.cpuparams.n_threads); printf(" -tb N, --threads-batch N number of threads to use during batch and prompt processing (default: same as --threads)\n"); printf(" --threads-http N number of threads in the http server pool to process requests (default: max(hardware concurrency - 1, --parallel N + 2))\n"); printf(" -c N, --ctx-size N size of the prompt context (default: %d)\n", params.n_ctx); @@ -2287,7 +2287,7 @@ static void server_params_parse(int argc, char **argv, server_params &sparams, g invalid_param = true; break; } - params.n_threads = std::stoi(argv[i]); + params.cpuparams.n_threads = std::stoi(argv[i]); } else if (arg == "--grp-attn-n" || arg == "-gan") { @@ -2315,7 +2315,7 @@ static void server_params_parse(int argc, char **argv, server_params &sparams, g invalid_param = true; break; } - params.n_threads_batch = std::stoi(argv[i]); + params.cpuparams_batch.n_threads = std::stoi(argv[i]); } else if (arg == "--threads-http") { @@ -2626,6 +2626,11 @@ static void server_params_parse(int argc, char **argv, server_params &sparams, g params.kv_overrides.back().key[0] = 0; } + postprocess_cpu_params(params.cpuparams, nullptr); + postprocess_cpu_params(params.cpuparams_batch, ¶ms.cpuparams); + postprocess_cpu_params(params.draft_cpuparams, ¶ms.cpuparams); + postprocess_cpu_params(params.draft_cpuparams_batch, ¶ms.cpuparams_batch); + if (invalid_param) { fprintf(stderr, "error: invalid parameter for argument: %s\n", arg.c_str()); @@ -2775,8 +2780,8 @@ int main(int argc, char **argv) { {"commit", LLAMA_COMMIT}}); LOG_INFO("system info", { - {"n_threads", params.n_threads}, - {"n_threads_batch", params.n_threads_batch}, + {"n_threads", params.cpuparams.n_threads}, + {"n_threads_batch", params.cpuparams_batch.n_threads}, {"total_threads", std::thread::hardware_concurrency()}, {"system_info", llama_print_system_info()}, }); diff --git a/llm/generate/gen_darwin.sh b/llm/generate/gen_darwin.sh index f22c0f8e..acea9c8d 100755 --- a/llm/generate/gen_darwin.sh +++ b/llm/generate/gen_darwin.sh @@ -19,7 +19,7 @@ sign() { fi } -COMMON_DARWIN_DEFS="-DBUILD_SHARED_LIBS=off -DCMAKE_OSX_DEPLOYMENT_TARGET=11.3 -DLLAMA_METAL_MACOSX_VERSION_MIN=11.3 -DCMAKE_SYSTEM_NAME=Darwin -DGGML_METAL_EMBED_LIBRARY=on -DGGML_OPENMP=off" +COMMON_DARWIN_DEFS="-DBUILD_SHARED_LIBS=off -DCMAKE_OSX_DEPLOYMENT_TARGET=11.3 -DGGML_METAL_MACOSX_VERSION_MIN=11.3 -DCMAKE_SYSTEM_NAME=Darwin -DGGML_METAL_EMBED_LIBRARY=on -DGGML_OPENMP=off" case "${GOARCH}" in "amd64") diff --git a/llm/llama.cpp b/llm/llama.cpp index 1e6f6554..8962422b 160000 --- a/llm/llama.cpp +++ b/llm/llama.cpp @@ -1 +1 @@ -Subproject commit 1e6f6554aa11fa10160a5fda689e736c3c34169f +Subproject commit 8962422b1c6f9b8b15f5aeaea42600bcc2d44177 diff --git a/llm/patches/05-default-pretokenizer.diff b/llm/patches/05-default-pretokenizer.diff index 0d40fc3c..351bcaef 100644 --- a/llm/patches/05-default-pretokenizer.diff +++ b/llm/patches/05-default-pretokenizer.diff @@ -1,8 +1,8 @@ diff --git a/src/llama.cpp b/src/llama.cpp -index a207451f..2ddf431d 100644 +index 88355971..dd7d41ed 100644 --- a/src/llama.cpp +++ b/src/llama.cpp -@@ -5347,16 +5347,7 @@ static void llm_load_vocab( +@@ -6083,16 +6083,7 @@ static void llm_load_vocab( if (vocab.type == LLAMA_VOCAB_TYPE_BPE) { vocab.tokenizer_add_space_prefix = false; vocab.tokenizer_clean_spaces = true; @@ -20,9 +20,9 @@ index a207451f..2ddf431d 100644 vocab.type_pre = LLAMA_VOCAB_PRE_TYPE_DEFAULT; } else if ( tokenizer_pre == "llama3" || -@@ -5443,7 +5434,8 @@ static void llm_load_vocab( - tokenizer_pre == "codeshell") { - vocab.type_pre = LLAMA_VOCAB_PRE_TYPE_CODESHELL; +@@ -6188,7 +6179,8 @@ static void llm_load_vocab( + tokenizer_pre == "exaone") { + vocab.type_pre = LLAMA_VOCAB_PRE_TYPE_EXAONE; } else { - throw std::runtime_error(format("unknown pre-tokenizer type: '%s'", tokenizer_pre.c_str())); + LLAMA_LOG_WARN("%s: missing or unrecognized pre-tokenizer type, using: 'default'\n", __func__); diff --git a/llm/patches/06-embeddings.diff b/llm/patches/06-embeddings.diff index a84e3b06..f3c071cb 100644 --- a/llm/patches/06-embeddings.diff +++ b/llm/patches/06-embeddings.diff @@ -1,37 +1,36 @@ diff --git a/src/llama.cpp b/src/llama.cpp -index 1fe2b9f7..a43312a7 100644 +index 88355971..d7db689b 100644 --- a/src/llama.cpp +++ b/src/llama.cpp -@@ -13689,7 +13689,7 @@ static size_t llama_output_reserve(llama_context & lctx, size_t n_outputs) { +@@ -15906,7 +15906,7 @@ static size_t llama_output_reserve(llama_context & lctx, size_t n_outputs) { const auto n_embd = hparams.n_embd; // TODO: use a per-batch flag for logits presence instead - const bool has_logits = !cparams.embeddings; + const bool has_logits = cparams.causal_attn; - const bool has_embd = lctx.is_encoding || (cparams.embeddings && (cparams.pooling_type == LLAMA_POOLING_TYPE_NONE)); + const bool has_embd = cparams.embeddings && (cparams.pooling_type == LLAMA_POOLING_TYPE_NONE); const size_t logits_size = has_logits ? n_vocab*n_outputs_max : 0; -@@ -13959,17 +13959,25 @@ static int llama_decode_internal( +@@ -16175,20 +16175,23 @@ static int llama_decode_internal( // no output res = nullptr; embd = nullptr; - } else if (cparams.embeddings) { -- res = nullptr; // do not extract logits for embedding case -- embd = gf->nodes[gf->n_nodes - 1]; -- if (strcmp(embd->name, "result_embd_pooled") != 0) { -- embd = gf->nodes[gf->n_nodes - 2]; +- res = nullptr; // do not extract logits for embedding case +- embd = nullptr; + } + + if (cparams.embeddings) { -+ for (int i = gf->n_nodes - 1; i >= 0; --i) { + for (int i = gf->n_nodes - 1; i >= 0; --i) { +- if (strcmp(gf->nodes[i]->name, "result_embd_pooled") == 0) { +- embd = gf->nodes[i]; + embd = gf->nodes[i]; + if (strcmp(embd->name, "result_embd_pooled") == 0) { -+ break; -+ } + break; + } } - GGML_ASSERT(strcmp(embd->name, "result_embd_pooled") == 0 && "missing embeddings tensor"); -- } else { -+ } else { +- GGML_ASSERT(embd != nullptr && "missing embeddings tensor"); + } else { embd = nullptr; // do not extract embeddings when not needed GGML_ASSERT(strcmp(res->name, "result_output") == 0 && "missing result_output tensor"); } @@ -39,7 +38,6 @@ index 1fe2b9f7..a43312a7 100644 + if (!cparams.causal_attn) { + res = nullptr; // do not extract logits when not needed + } -+ // LLAMA_LOG_INFO("graph build time: %.3f ms (%d nodes, %d leafs)\n", (ggml_time_us() - t_start_us)/1000.0, gf->n_nodes, gf->n_leafs); ggml_backend_sched_alloc_graph(lctx.sched, gf); diff --git a/llm/patches/09-lora.diff b/llm/patches/09-lora.diff deleted file mode 100644 index 21958476..00000000 --- a/llm/patches/09-lora.diff +++ /dev/null @@ -1,350 +0,0 @@ -diff --git a/common/common.cpp b/common/common.cpp -index 2e8374d5..70d0afde 100644 ---- a/common/common.cpp -+++ b/common/common.cpp -@@ -2110,9 +2110,21 @@ struct llama_init_result llama_init_from_gpt_params(gpt_params & params) { - loaded_la.adapter = llama_lora_adapter_init(model, la.path.c_str()); - if (loaded_la.adapter == nullptr) { - fprintf(stderr, "%s: error: failed to apply lora adapter '%s'\n", __func__, la.path.c_str()); -- llama_free(lctx); -- llama_free_model(model); -- return iparams; -+ -+ // if that fails, try loading as ggla for compatibility -+ int err = llama_model_apply_lora_from_file(model, -+ la.path.c_str(), -+ la.scale, -+ nullptr, -+ params.n_threads); -+ if (err != 0) { -+ fprintf(stderr, "%s: error: failed to apply lora adapter\n", __func__); -+ llama_free(lctx); -+ llama_free_model(model); -+ return iparams; -+ } else { -+ break; -+ } - } - iparams.lora_adapters.push_back(loaded_la); // copy to list of loaded adapters - } -diff --git a/include/llama.h b/include/llama.h -index 93fd77ca..b0fb37a6 100644 ---- a/include/llama.h -+++ b/include/llama.h -@@ -1160,6 +1160,20 @@ extern "C" { - - LLAMA_API void llama_dump_timing_info_yaml(FILE * stream, const struct llama_context * ctx); - -+ // Apply a LoRA adapter to a loaded model -+ // path_base_model is the path to a higher quality model to use as a base for -+ // the layers modified by the adapter. Can be NULL to use the current loaded model. -+ // The model needs to be reloaded before applying a new adapter, otherwise the adapter -+ // will be applied on top of the previous one -+ // Returns 0 on success -+ LLAMA_API int32_t llama_model_apply_lora_from_file( -+ const struct llama_model * model, -+ const char * path_lora, -+ float scale, -+ const char * path_base_model, -+ int32_t n_threads); -+ -+ - #ifdef __cplusplus - } - #endif -diff --git a/src/llama.cpp b/src/llama.cpp -index 80a0dd0f..9d7b0e17 100644 ---- a/src/llama.cpp -+++ b/src/llama.cpp -@@ -21880,3 +21880,290 @@ static void llama_log_callback_default(ggml_log_level level, const char * text, - fputs(text, stderr); - fflush(stderr); - } -+ -+static int llama_apply_lora_from_file_internal( -+ const struct llama_model & model, const char * path_lora, float scale, const char * path_base_model, int n_threads -+) { -+ LLAMA_LOG_INFO("%s: applying lora adapter from '%s' - please wait ...\n", __func__, path_lora); -+ -+ const int64_t t_start_lora_us = ggml_time_us(); -+ -+ llama_file fin(path_lora, "rb"); -+ -+ // verify magic and version -+ { -+ uint32_t magic = fin.read_u32(); -+ if (magic != LLAMA_FILE_MAGIC_GGLA) { -+ LLAMA_LOG_ERROR("%s: bad file magic\n", __func__); -+ return 1; -+ } -+ -+ uint32_t format_version = fin.read_u32(); -+ if (format_version != 1) { -+ LLAMA_LOG_ERROR("%s: unsupported file version\n", __func__ ); -+ return 1; -+ } -+ } -+ -+ int32_t lora_r = fin.read_u32(); -+ int32_t lora_alpha = fin.read_u32(); -+ float scaling = scale * (float)lora_alpha / (float)lora_r; -+ -+ LLAMA_LOG_INFO("%s: r = %d, alpha = %d, scaling = %.2f\n", __func__, lora_r, lora_alpha, scaling); -+ -+ // load base model -+ std::unique_ptr ml; -+ if (path_base_model) { -+ LLAMA_LOG_INFO("%s: loading base model from '%s'\n", __func__, path_base_model); -+ ml.reset(new llama_model_loader(path_base_model, /*use_mmap*/ true, /*check_tensors*/ false, /*kv_overrides*/ nullptr)); -+ ml->init_mappings(/*prefetch*/ false); // no prefetching -+ } -+ -+ struct tensor_meta { -+ std::string name; -+ ggml_type type; -+ int32_t ne[2]; -+ size_t offset; -+ }; -+ std::map tensor_meta_map; -+ -+ // load all tensor meta -+ while (true) { -+ if (fin.tell() == fin.size) { -+ // eof -+ break; -+ } -+ -+ int32_t n_dims; -+ int32_t name_len; -+ int32_t ftype; -+ -+ fin.read_raw(&n_dims, sizeof(n_dims)); -+ fin.read_raw(&name_len, sizeof(name_len)); -+ fin.read_raw(&ftype, sizeof(ftype)); -+ -+ if (n_dims != 1 && n_dims != 2) { -+ LLAMA_LOG_ERROR("%s: unsupported tensor dimension %d\n", __func__, n_dims); -+ return 1; -+ } -+ -+ int32_t ne[2] = { 1, 1 }; -+ for (int i = 0; i < n_dims; ++i) { -+ fin.read_raw(&ne[i], sizeof(ne[i])); -+ } -+ -+ std::string name; -+ { -+ GGML_ASSERT(name_len < GGML_MAX_NAME); -+ char buf[GGML_MAX_NAME]; -+ fin.read_raw(buf, name_len); -+ name = std::string(buf, name_len); -+ } -+ -+ // check for lora suffix -+ std::string lora_suffix; -+ if (name.length() > 6) { -+ lora_suffix = name.substr(name.length() - 6); -+ } -+ if (lora_suffix != ".loraA" && lora_suffix != ".loraB") { -+ LLAMA_LOG_ERROR("%s: error: '%s' is not a lora tensor\n", __func__, name.c_str()); -+ return 1; -+ } -+ -+ // tensor type -+ ggml_type wtype; -+ switch (ftype) { -+ case 0: wtype = GGML_TYPE_F32; break; -+ case 1: wtype = GGML_TYPE_F16; break; -+ default: -+ { -+ LLAMA_LOG_ERROR("%s: invalid tensor data type '%d'\n", -+ __func__, ftype); -+ return 1; -+ } -+ } -+ -+ // data offset -+ size_t offset = fin.tell(); -+ offset = (offset + 31) & -32; -+ -+ // skip tensor data -+ fin.seek(offset + ggml_row_size(wtype, ne[0]) * ne[1], SEEK_SET); -+ -+ tensor_meta_map.emplace(name, tensor_meta{ name, wtype, { ne[0], ne[1] }, offset }); -+ } -+ -+ bool warned = false; -+ int n_tensors = 0; -+ -+ // apply -+ ggml_backend_t backend_cpu = ggml_backend_cpu_init(); -+ if (backend_cpu == nullptr) { -+ LLAMA_LOG_ERROR("%s: error: failed to initialize cpu backend\n", __func__); -+ return 1; -+ } -+ ggml_backend_cpu_set_n_threads(backend_cpu, n_threads); -+ -+ std::vector> read_buf; -+ for (const auto & it : model.tensors_by_name) { -+ const std::string & base_name = it.first; -+ ggml_tensor * model_t = it.second; -+ -+ if (tensor_meta_map.find(base_name + ".loraA") == tensor_meta_map.end() || -+ tensor_meta_map.find(base_name + ".loraB") == tensor_meta_map.end()) { -+ continue; -+ } -+ -+ tensor_meta & metaA = tensor_meta_map.at(base_name + ".loraA"); -+ tensor_meta & metaB = tensor_meta_map.at(base_name + ".loraB"); -+ -+ ggml_init_params lora_init_params = { -+ /* .mem_size */ ggml_tensor_overhead()*128 + ggml_graph_overhead(), -+ /* .mem_buffer */ nullptr, -+ /* .no_alloc */ true, -+ }; -+ ggml_context * lora_ctx = ggml_init(lora_init_params); -+ if (lora_ctx == nullptr) { -+ LLAMA_LOG_ERROR("%s: error: failed to initialize lora context\n", __func__); -+ ggml_backend_free(backend_cpu); -+ return 1; -+ } -+ -+ // create tensors -+ ggml_tensor * loraA = ggml_new_tensor_2d(lora_ctx, metaA.type, metaA.ne[0], metaA.ne[1]); -+ ggml_tensor * loraB = ggml_new_tensor_2d(lora_ctx, metaB.type, metaB.ne[0], metaB.ne[1]); -+ ggml_set_name(loraA, metaA.name.c_str()); -+ ggml_set_name(loraB, metaB.name.c_str()); -+ -+ ggml_tensor * base_t; -+ if (ml) { -+ if (!ml->get_tensor_meta(base_name.c_str())) { -+ LLAMA_LOG_ERROR("%s: error: tensor '%s' not found in base model\n", __func__, base_name.c_str()); -+ return 1; -+ } -+ base_t = ggml_dup_tensor(lora_ctx, ml->get_tensor_meta(base_name.c_str())); -+ } else { -+ base_t = ggml_dup_tensor(lora_ctx, model_t); -+ } -+ ggml_set_name(base_t, base_name.c_str()); -+ -+ // allocate in backend buffer -+ ggml_backend_buffer_t lora_buf = ggml_backend_alloc_ctx_tensors_from_buft(lora_ctx, ggml_backend_cpu_buffer_type()); -+ if (lora_buf == nullptr) { -+ LLAMA_LOG_ERROR("%s: error: failed to allocate lora tensors\n", __func__); -+ return 1; -+ } -+ -+ // load tensor data -+ auto load_tensor = [&read_buf, &fin](const tensor_meta & tensor_meta, ggml_tensor * tensor) { -+ read_buf.resize(ggml_nbytes(tensor)); -+ fin.seek(tensor_meta.offset, SEEK_SET); -+ fin.read_raw(read_buf.data(), ggml_nbytes(tensor)); -+ ggml_backend_tensor_set(tensor, read_buf.data(), 0, read_buf.size()); -+ }; -+ load_tensor(metaA, loraA); -+ load_tensor(metaB, loraB); -+ -+ // load base model tensor data -+ if (ml) { -+ ml->load_data_for(base_t); -+ } else { -+ ggml_backend_tensor_copy(model_t, base_t); -+ } -+ -+ if (ggml_is_quantized(base_t->type) && !warned) { -+ LLAMA_LOG_WARN("%s: warning: using a lora adapter with a quantized model may result in poor quality, " -+ "use a f16 or f32 base model with --lora-base\n", __func__); -+ warned = true; -+ } -+ -+ if (base_t->ne[0] != loraA->ne[1] || base_t->ne[1] != loraB->ne[1]) { -+ LLAMA_LOG_ERROR("%s: incompatible tensor dimensions (%" PRId64 " and %" PRId64 ");" -+ " are you sure that this adapter is for this model?\n", __func__, base_t->ne[0], loraA->ne[1]); -+ ggml_free(lora_ctx); -+ ggml_backend_buffer_free(lora_buf); -+ ggml_backend_free(backend_cpu); -+ return 1; -+ } -+ -+ auto build_lora_graph = [&]() { -+ // w = w + BA*s -+ ggml_tensor * BA = ggml_mul_mat(lora_ctx, loraA, loraB); -+ ggml_set_name(BA, "BA"); -+ -+ if (scaling != 1.0f) { -+ BA = ggml_scale(lora_ctx, BA, scaling); -+ ggml_set_name(BA, "BA_scaled"); -+ } -+ -+ ggml_tensor * r; -+ r = ggml_add_inplace(lora_ctx, base_t, BA); -+ ggml_set_name(r, "r_add"); -+ -+ if (base_t->type != model_t->type) { -+ // convert the result to the model type -+ r = ggml_cast(lora_ctx, r, model_t->type); -+ ggml_set_name(r, "r_cast"); -+ } -+ -+ return r; -+ }; -+ -+ ggml_cgraph * gf = ggml_new_graph(lora_ctx); -+ ggml_tensor * r = build_lora_graph(); -+ ggml_build_forward_expand(gf, r); -+ -+ ggml_backend_buffer_t graph_buf = ggml_backend_alloc_ctx_tensors_from_buft(lora_ctx, ggml_backend_cpu_buffer_type()); -+ if (graph_buf == nullptr) { -+ LLAMA_LOG_ERROR("%s: error: failed to allocate graph tensors\n", __func__); -+ ggml_free(lora_ctx); -+ ggml_backend_buffer_free(lora_buf); -+ ggml_backend_free(backend_cpu); -+ return 1; -+ } -+ -+ ggml_backend_graph_compute(backend_cpu, gf); -+ -+ ggml_backend_tensor_set(model_t, r->data, 0, ggml_nbytes(r)); -+ -+#if 0 -+ // TODO: use scheduler with fallback to CPU for less copies between CPU and GPU -+ //ggml_backend_sched_t sched = ggml_backend_sched_new(backends.data(), backends.size(), GGML_DEFAULT_GRAPH_SIZE); -+ -+ // sched compute -+ ggml_build_forward_expand(gf, build_graph()); -+ ggml_backend_sched_init_measure(sched, gf); -+ -+ // create the graph again, since the previous one was destroyed by the measure -+ ggml_graph_clear(gf); -+ ggml_build_forward_expand(gf, build_graph()); -+ ggml_backend_sched_graph_compute(sched, gf); -+ ggml_backend_sched_free(sched); -+#endif -+ -+ ggml_backend_buffer_free(lora_buf); -+ ggml_backend_buffer_free(graph_buf); -+ ggml_free(lora_ctx); -+ -+ n_tensors++; -+ if (n_tensors % 4 == 0) { -+ LLAMA_LOG_INFO("."); -+ } -+ } -+ -+ ggml_backend_free(backend_cpu); -+ -+ const int64_t t_lora_us = ggml_time_us() - t_start_lora_us; -+ LLAMA_LOG_INFO(" done (%.2f ms)\n", t_lora_us / 1000.0); -+ -+ return 0; -+} -+ -+int32_t llama_model_apply_lora_from_file(const struct llama_model * model, const char * path_lora, float scale, const char * path_base_model, int32_t n_threads) { -+ try { -+ return llama_apply_lora_from_file_internal(*model, path_lora, scale, path_base_model, n_threads); -+ } catch (const std::exception & err) { -+ LLAMA_LOG_ERROR("%s: failed to apply lora adapter: %s\n", __func__, err.what()); -+ return 1; -+ } -+} -\ No newline at end of file \ No newline at end of file diff --git a/llm/patches/11-phi3-sliding-window.diff b/llm/patches/11-phi3-sliding-window.diff deleted file mode 100644 index fde3dd21..00000000 --- a/llm/patches/11-phi3-sliding-window.diff +++ /dev/null @@ -1,43 +0,0 @@ -From 6eedae4cf2fcc8015dac79cb3f28f61fcabacab2 Mon Sep 17 00:00:00 2001 -From: Michael Yang -Date: Wed, 31 Jul 2024 14:57:04 -0700 -Subject: [PATCH] phi3 sliding window - ---- - src/llama.cpp | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/llama.cpp b/src/llama.cpp -index a207451f..f2872d4e 100644 ---- a/src/llama.cpp -+++ b/src/llama.cpp -@@ -4893,7 +4893,7 @@ static void llm_load_hparams( - } break; - case LLM_ARCH_PHI3: - { -- ml.get_key(LLM_KV_ATTENTION_SLIDING_WINDOW, hparams.n_swa); -+ ml.get_key(LLM_KV_ATTENTION_SLIDING_WINDOW, hparams.n_swa, false); - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - - switch (hparams.n_layer) { -@@ -10762,7 +10762,7 @@ struct llm_build_context { - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) -- struct ggml_tensor * KQ_mask_swa = build_inp_KQ_mask_swa(); -+ struct ggml_tensor * KQ_mask = hparams.n_swa > 0 ? build_inp_KQ_mask_swa() : build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - auto residual = inpL; -@@ -10820,7 +10820,7 @@ struct llm_build_context { - - cur = llm_build_kv(ctx0, lctx, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, -- Kcur, Vcur, Qcur, KQ_mask_swa, n_tokens, kv_head, n_kv, 1.0f, cb, il); -+ Kcur, Vcur, Qcur, KQ_mask, n_tokens, kv_head, n_kv, 1.0f, cb, il); - } - - if (il == n_layer - 1) { --- -2.45.2 - From 491fc312ae1e5a7a2ea0a02546b2ffa61675dd1a Mon Sep 17 00:00:00 2001 From: Viz <7476271+kspviswa@users.noreply.github.com> Date: Tue, 3 Sep 2024 23:10:53 -0400 Subject: [PATCH 42/55] readme: add PyOllaMx project (#6624) --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fee01baa..4fc02d10 100644 --- a/README.md +++ b/README.md @@ -306,7 +306,8 @@ See the [API documentation](./docs/api.md) for all endpoints. - [Go-CREW](https://www.jonathanhecl.com/go-crew/) (Powerful Offline RAG in Golang) - [PartCAD](https://github.com/openvmp/partcad/) (CAD model generation with OpenSCAD and CadQuery) - [Ollama4j Web UI](https://github.com/ollama4j/ollama4j-web-ui) - Java-based Web UI for Ollama built with Vaadin, Spring Boot and Ollama4j - +- [PyOllaMx](https://github.com/kspviswa/pyOllaMx) - macOS application capable of chatting with both Ollama and Apple MLX models. + ### Terminal - [oterm](https://github.com/ggozad/oterm) From 27bcce6d9fb1e002ef4393ff48d6cadb5b29da41 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 4 Sep 2024 23:32:26 +1000 Subject: [PATCH 43/55] readme: add claude-dev to community integrations (#6630) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4fc02d10..edd8ab1b 100644 --- a/README.md +++ b/README.md @@ -307,6 +307,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [PartCAD](https://github.com/openvmp/partcad/) (CAD model generation with OpenSCAD and CadQuery) - [Ollama4j Web UI](https://github.com/ollama4j/ollama4j-web-ui) - Java-based Web UI for Ollama built with Vaadin, Spring Boot and Ollama4j - [PyOllaMx](https://github.com/kspviswa/pyOllaMx) - macOS application capable of chatting with both Ollama and Apple MLX models. +- [Claude Dev](https://github.com/saoudrizwan/claude-dev) - VSCode extension for multi-file/whole-repo coding ### Terminal From 7d89e48f5c1a8e719d5b8d154151c39685f50919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erkin=20Alp=20G=C3=BCney?= Date: Wed, 4 Sep 2024 16:34:53 +0300 Subject: [PATCH 44/55] install.sh: update instructions to use WSL2 (#6450) --- scripts/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install.sh b/scripts/install.sh index 25f57565..5a212975 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -38,7 +38,7 @@ IS_WSL2=false KERN=$(uname -r) case "$KERN" in *icrosoft*WSL2 | *icrosoft*wsl2) IS_WSL2=true;; - *icrosoft) error "Microsoft WSL1 is not currently supported. Please upgrade to WSL2 with 'wsl --set-version 2'" ;; + *icrosoft) error "Microsoft WSL1 is not currently supported. Please use WSL2 with 'wsl --set-version 2'" ;; *) ;; esac From 369479cc3068b5f2b28cdc766de3c27cff7e2f7b Mon Sep 17 00:00:00 2001 From: Carter <102479896+Carter907@users.noreply.github.com> Date: Wed, 4 Sep 2024 09:42:33 -0400 Subject: [PATCH 45/55] docs: fix spelling error (#6391) change "dorrect" to "correct" --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7f12a0fc..f003a69d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,7 +18,7 @@ See the [development documentation](./docs/development.md) for instructions on h * New features: new features (e.g. API fields, environment variables) add surface area to Ollama and make it harder to maintain in the long run as they cannot be removed without potentially breaking users in the future. * Refactoring: large code improvements are important, but can be harder or take longer to review and merge. -* Documentation: small updates to fill in or dorrect missing documentation is helpful, however large documentation additions can be hard to maintain over time. +* Documentation: small updates to fill in or correct missing documentation is helpful, however large documentation additions can be hard to maintain over time. ### Issues that may not be accepted From 93eb43d020665cce0f1de17cc108224ae83b0605 Mon Sep 17 00:00:00 2001 From: Mitar Date: Wed, 4 Sep 2024 16:52:46 +0200 Subject: [PATCH 46/55] readme: add Go fun package (#6421) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index edd8ab1b..a6f254fe 100644 --- a/README.md +++ b/README.md @@ -378,6 +378,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [PromptingTools.jl](https://github.com/svilupp/PromptingTools.jl) with an [example](https://svilupp.github.io/PromptingTools.jl/dev/examples/working_with_ollama) - [LlamaScript](https://github.com/Project-Llama/llamascript) - [Ollamaclient for Golang](https://github.com/xyproto/ollamaclient) +- [High-level function abstraction in Go](https://gitlab.com/tozd/go/fun) ### Mobile From 5b55379651f4cdbd5efcc397d894c3d008c96a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=A2=E5=A5=8B=E7=8C=AB?= Date: Wed, 4 Sep 2024 22:53:36 +0800 Subject: [PATCH 47/55] readme: add Cherry Studio to community integrations (#6633) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a6f254fe..afcda18f 100644 --- a/README.md +++ b/README.md @@ -308,6 +308,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [Ollama4j Web UI](https://github.com/ollama4j/ollama4j-web-ui) - Java-based Web UI for Ollama built with Vaadin, Spring Boot and Ollama4j - [PyOllaMx](https://github.com/kspviswa/pyOllaMx) - macOS application capable of chatting with both Ollama and Apple MLX models. - [Claude Dev](https://github.com/saoudrizwan/claude-dev) - VSCode extension for multi-file/whole-repo coding +- [Cherry Studio](https://github.com/kangfenmao/cherry-studio) (Desktop client with Ollama support) ### Terminal From f36ebfb47835075e3b9d01a6c1a082653c24d9ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Te=C3=AFlo=20M?= <39594466+teilomillet@users.noreply.github.com> Date: Wed, 4 Sep 2024 20:19:41 +0200 Subject: [PATCH 48/55] readme: add gollm to the list of community libraries (#6099) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index afcda18f..56f2e1d8 100644 --- a/README.md +++ b/README.md @@ -378,6 +378,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [Portkey](https://portkey.ai/docs/welcome/integration-guides/ollama) - [PromptingTools.jl](https://github.com/svilupp/PromptingTools.jl) with an [example](https://svilupp.github.io/PromptingTools.jl/dev/examples/working_with_ollama) - [LlamaScript](https://github.com/Project-Llama/llamascript) +- [Gollm](https://docs.gollm.co/examples/ollama-example) - [Ollamaclient for Golang](https://github.com/xyproto/ollamaclient) - [High-level function abstraction in Go](https://gitlab.com/tozd/go/fun) From 133770a5484e4ff2e22a49b4728a4ddac7e19db4 Mon Sep 17 00:00:00 2001 From: Tomoya Fujita Date: Wed, 4 Sep 2024 11:45:09 -0700 Subject: [PATCH 49/55] docs: add group to manual Linux isntructions and verify service is running (#6430) --- docs/linux.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/linux.md b/docs/linux.md index fbaf4845..46c17a20 100644 --- a/docs/linux.md +++ b/docs/linux.md @@ -35,10 +35,11 @@ curl -fsSL https://ollama.com/download/ollama-linux-amd64-rocm.tgz | sudo tar zx ### Adding Ollama as a startup service (recommended) -Create a user for Ollama: +Create a user and group for Ollama: ```bash -sudo useradd -r -s /bin/false -m -d /usr/share/ollama ollama +sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama +sudo usermod -a -G ollama $(whoami) ``` Create a service file in `/etc/systemd/system/ollama.service`: @@ -54,6 +55,7 @@ User=ollama Group=ollama Restart=always RestartSec=3 +Environment="PATH=$PATH" [Install] WantedBy=default.target @@ -83,10 +85,11 @@ Make sure to install ROCm v6 ### Start Ollama -Start Ollama using `systemd`: +Start Ollama and verify it is running: ```bash sudo systemctl start ollama +sudo systemctl status ollama ``` ## Update From c18ff18b2c95a8a39dcd7148c0311e8409221ec5 Mon Sep 17 00:00:00 2001 From: Rune Berg <1runeberg@users.noreply.github.com> Date: Thu, 5 Sep 2024 09:26:02 +1200 Subject: [PATCH 50/55] readme: add confichat to community integrations (#6378) --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 56f2e1d8..ea279761 100644 --- a/README.md +++ b/README.md @@ -309,7 +309,8 @@ See the [API documentation](./docs/api.md) for all endpoints. - [PyOllaMx](https://github.com/kspviswa/pyOllaMx) - macOS application capable of chatting with both Ollama and Apple MLX models. - [Claude Dev](https://github.com/saoudrizwan/claude-dev) - VSCode extension for multi-file/whole-repo coding - [Cherry Studio](https://github.com/kangfenmao/cherry-studio) (Desktop client with Ollama support) - +- [ConfiChat](https://github.com/1runeberg/confichat) (Lightweight, standalone, multi-platform, and privacy focused LLM chat interface with optional encryption) + ### Terminal - [oterm](https://github.com/ggozad/oterm) @@ -386,6 +387,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [Enchanted](https://github.com/AugustDev/enchanted) - [Maid](https://github.com/Mobile-Artificial-Intelligence/maid) +- [ConfiChat](https://github.com/1runeberg/confichat) (Lightweight, standalone, multi-platform, and privacy focused LLM chat interface with optional encryption) ### Extensions & Plugins From bbe7b96ded600fa429639c9de97f5334c414b6c8 Mon Sep 17 00:00:00 2001 From: Pascal Patry Date: Wed, 4 Sep 2024 19:34:42 -0400 Subject: [PATCH 51/55] llm: use json.hpp from common (#6642) --- llm/ext_server/CMakeLists.txt | 2 +- llm/ext_server/json.hpp | 24596 -------------------------------- 2 files changed, 1 insertion(+), 24597 deletions(-) delete mode 100644 llm/ext_server/json.hpp diff --git a/llm/ext_server/CMakeLists.txt b/llm/ext_server/CMakeLists.txt index 90fd0ef2..88c8b03d 100644 --- a/llm/ext_server/CMakeLists.txt +++ b/llm/ext_server/CMakeLists.txt @@ -2,7 +2,7 @@ set(TARGET ollama_llama_server) option(LLAMA_SERVER_VERBOSE "Build verbose logging option for Server" ON) set(LLAMA_SERVER_LDFLAGS $ENV{LLAMA_SERVER_LDFLAGS}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) -add_executable(${TARGET} server.cpp utils.hpp json.hpp httplib.h) +add_executable(${TARGET} server.cpp utils.hpp httplib.h) install(TARGETS ${TARGET} RUNTIME) target_compile_definitions(${TARGET} PRIVATE SERVER_VERBOSE=$ diff --git a/llm/ext_server/json.hpp b/llm/ext_server/json.hpp deleted file mode 100644 index ea945f34..00000000 --- a/llm/ext_server/json.hpp +++ /dev/null @@ -1,24596 +0,0 @@ -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - -/****************************************************************************\ - * Note on documentation: The source files contain links to the online * - * documentation of the public API at https://json.nlohmann.me. This URL * - * contains the most recent documentation and should also be applicable to * - * previous versions; documentation for deprecated functions is not * - * removed, but marked deprecated. See "Generate documentation" section in * - * file docs/README.md. * -\****************************************************************************/ - -#ifndef INCLUDE_NLOHMANN_JSON_HPP_ -#define INCLUDE_NLOHMANN_JSON_HPP_ - -#include // all_of, find, for_each -#include // nullptr_t, ptrdiff_t, size_t -#include // hash, less -#include // initializer_list -#ifndef JSON_NO_IO - #include // istream, ostream -#endif // JSON_NO_IO -#include // random_access_iterator_tag -#include // unique_ptr -#include // accumulate -#include // string, stoi, to_string -#include // declval, forward, move, pair, swap -#include // vector - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -// This file contains all macro definitions affecting or depending on the ABI - -#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK - #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) - #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 2 - #warning "Already included a different version of the library!" - #endif - #endif -#endif - -#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) -#define NLOHMANN_JSON_VERSION_MINOR 11 // NOLINT(modernize-macro-to-enum) -#define NLOHMANN_JSON_VERSION_PATCH 2 // NOLINT(modernize-macro-to-enum) - -#ifndef JSON_DIAGNOSTICS - #define JSON_DIAGNOSTICS 0 -#endif - -#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 -#endif - -#if JSON_DIAGNOSTICS - #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag -#else - #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS -#endif - -#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp -#else - #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON -#endif - -#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION - #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 -#endif - -// Construct the namespace ABI tags component -#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi ## a ## b -#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \ - NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) - -#define NLOHMANN_JSON_ABI_TAGS \ - NLOHMANN_JSON_ABI_TAGS_CONCAT( \ - NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ - NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON) - -// Construct the namespace version component -#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \ - _v ## major ## _ ## minor ## _ ## patch -#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \ - NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) - -#if NLOHMANN_JSON_NAMESPACE_NO_VERSION -#define NLOHMANN_JSON_NAMESPACE_VERSION -#else -#define NLOHMANN_JSON_NAMESPACE_VERSION \ - NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \ - NLOHMANN_JSON_VERSION_MINOR, \ - NLOHMANN_JSON_VERSION_PATCH) -#endif - -// Combine namespace components -#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b -#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \ - NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) - -#ifndef NLOHMANN_JSON_NAMESPACE -#define NLOHMANN_JSON_NAMESPACE \ - nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \ - NLOHMANN_JSON_ABI_TAGS, \ - NLOHMANN_JSON_NAMESPACE_VERSION) -#endif - -#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN -#define NLOHMANN_JSON_NAMESPACE_BEGIN \ - namespace nlohmann \ - { \ - inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \ - NLOHMANN_JSON_ABI_TAGS, \ - NLOHMANN_JSON_NAMESPACE_VERSION) \ - { -#endif - -#ifndef NLOHMANN_JSON_NAMESPACE_END -#define NLOHMANN_JSON_NAMESPACE_END \ - } /* namespace (inline namespace) NOLINT(readability/namespace) */ \ - } // namespace nlohmann -#endif - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // transform -#include // array -#include // forward_list -#include // inserter, front_inserter, end -#include // map -#include // string -#include // tuple, make_tuple -#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible -#include // unordered_map -#include // pair, declval -#include // valarray - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // nullptr_t -#include // exception -#include // runtime_error -#include // to_string -#include // vector - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // array -#include // size_t -#include // uint8_t -#include // string - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // declval, pair -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -// #include - - -NLOHMANN_JSON_NAMESPACE_BEGIN -namespace detail -{ - -template struct make_void -{ - using type = void; -}; -template using void_t = typename make_void::type; - -} // namespace detail -NLOHMANN_JSON_NAMESPACE_END - - -NLOHMANN_JSON_NAMESPACE_BEGIN -namespace detail -{ - -// https://en.cppreference.com/w/cpp/experimental/is_detected -struct nonesuch -{ - nonesuch() = delete; - ~nonesuch() = delete; - nonesuch(nonesuch const&) = delete; - nonesuch(nonesuch const&&) = delete; - void operator=(nonesuch const&) = delete; - void operator=(nonesuch&&) = delete; -}; - -template class Op, - class... Args> -struct detector -{ - using value_t = std::false_type; - using type = Default; -}; - -template class Op, class... Args> -struct detector>, Op, Args...> -{ - using value_t = std::true_type; - using type = Op; -}; - -template class Op, class... Args> -using is_detected = typename detector::value_t; - -template class Op, class... Args> -struct is_detected_lazy : is_detected { }; - -template class Op, class... Args> -using detected_t = typename detector::type; - -template class Op, class... Args> -using detected_or = detector; - -template class Op, class... Args> -using detected_or_t = typename detected_or::type; - -template class Op, class... Args> -using is_detected_exact = std::is_same>; - -template class Op, class... Args> -using is_detected_convertible = - std::is_convertible, To>; - -} // namespace detail -NLOHMANN_JSON_NAMESPACE_END - -// #include - - -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-FileCopyrightText: 2016-2021 Evan Nemerson -// SPDX-License-Identifier: MIT - -/* Hedley - https://nemequ.github.io/hedley - * Created by Evan Nemerson - */ - -#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) -#if defined(JSON_HEDLEY_VERSION) - #undef JSON_HEDLEY_VERSION -#endif -#define JSON_HEDLEY_VERSION 15 - -#if defined(JSON_HEDLEY_STRINGIFY_EX) - #undef JSON_HEDLEY_STRINGIFY_EX -#endif -#define JSON_HEDLEY_STRINGIFY_EX(x) #x - -#if defined(JSON_HEDLEY_STRINGIFY) - #undef JSON_HEDLEY_STRINGIFY -#endif -#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) - -#if defined(JSON_HEDLEY_CONCAT_EX) - #undef JSON_HEDLEY_CONCAT_EX -#endif -#define JSON_HEDLEY_CONCAT_EX(a,b) a##b - -#if defined(JSON_HEDLEY_CONCAT) - #undef JSON_HEDLEY_CONCAT -#endif -#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) - -#if defined(JSON_HEDLEY_CONCAT3_EX) - #undef JSON_HEDLEY_CONCAT3_EX -#endif -#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c - -#if defined(JSON_HEDLEY_CONCAT3) - #undef JSON_HEDLEY_CONCAT3 -#endif -#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) - -#if defined(JSON_HEDLEY_VERSION_ENCODE) - #undef JSON_HEDLEY_VERSION_ENCODE -#endif -#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) - -#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) - #undef JSON_HEDLEY_VERSION_DECODE_MAJOR -#endif -#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) - -#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) - #undef JSON_HEDLEY_VERSION_DECODE_MINOR -#endif -#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) - -#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) - #undef JSON_HEDLEY_VERSION_DECODE_REVISION -#endif -#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) - -#if defined(JSON_HEDLEY_GNUC_VERSION) - #undef JSON_HEDLEY_GNUC_VERSION -#endif -#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) - #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) -#elif defined(__GNUC__) - #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) -#endif - -#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) - #undef JSON_HEDLEY_GNUC_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_GNUC_VERSION) - #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_MSVC_VERSION) - #undef JSON_HEDLEY_MSVC_VERSION -#endif -#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) - #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) -#elif defined(_MSC_FULL_VER) && !defined(__ICL) - #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) -#elif defined(_MSC_VER) && !defined(__ICL) - #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) -#endif - -#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) - #undef JSON_HEDLEY_MSVC_VERSION_CHECK -#endif -#if !defined(JSON_HEDLEY_MSVC_VERSION) - #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) -#elif defined(_MSC_VER) && (_MSC_VER >= 1400) - #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) -#elif defined(_MSC_VER) && (_MSC_VER >= 1200) - #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) -#else - #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) -#endif - -#if defined(JSON_HEDLEY_INTEL_VERSION) - #undef JSON_HEDLEY_INTEL_VERSION -#endif -#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL) - #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) -#elif defined(__INTEL_COMPILER) && !defined(__ICL) - #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) -#endif - -#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) - #undef JSON_HEDLEY_INTEL_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_INTEL_VERSION) - #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_INTEL_CL_VERSION) - #undef JSON_HEDLEY_INTEL_CL_VERSION -#endif -#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL) - #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) -#endif - -#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK) - #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_INTEL_CL_VERSION) - #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_PGI_VERSION) - #undef JSON_HEDLEY_PGI_VERSION -#endif -#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) - #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) -#endif - -#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) - #undef JSON_HEDLEY_PGI_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_PGI_VERSION) - #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_SUNPRO_VERSION) - #undef JSON_HEDLEY_SUNPRO_VERSION -#endif -#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) - #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) -#elif defined(__SUNPRO_C) - #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) -#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) - #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) -#elif defined(__SUNPRO_CC) - #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) -#endif - -#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) - #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_SUNPRO_VERSION) - #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) - #undef JSON_HEDLEY_EMSCRIPTEN_VERSION -#endif -#if defined(__EMSCRIPTEN__) - #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) -#endif - -#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) - #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) - #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_ARM_VERSION) - #undef JSON_HEDLEY_ARM_VERSION -#endif -#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) - #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) -#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) - #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) -#endif - -#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) - #undef JSON_HEDLEY_ARM_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_ARM_VERSION) - #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_IBM_VERSION) - #undef JSON_HEDLEY_IBM_VERSION -#endif -#if defined(__ibmxl__) - #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) -#elif defined(__xlC__) && defined(__xlC_ver__) - #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) -#elif defined(__xlC__) - #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) -#endif - -#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) - #undef JSON_HEDLEY_IBM_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_IBM_VERSION) - #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_VERSION) - #undef JSON_HEDLEY_TI_VERSION -#endif -#if \ - defined(__TI_COMPILER_VERSION__) && \ - ( \ - defined(__TMS470__) || defined(__TI_ARM__) || \ - defined(__MSP430__) || \ - defined(__TMS320C2000__) \ - ) -#if (__TI_COMPILER_VERSION__ >= 16000000) - #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif -#endif - -#if defined(JSON_HEDLEY_TI_VERSION_CHECK) - #undef JSON_HEDLEY_TI_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_VERSION) - #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CL2000_VERSION) - #undef JSON_HEDLEY_TI_CL2000_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) - #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CL2000_VERSION) - #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CL430_VERSION) - #undef JSON_HEDLEY_TI_CL430_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) - #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CL430_VERSION) - #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) - #undef JSON_HEDLEY_TI_ARMCL_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) - #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) - #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) - #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CL6X_VERSION) - #undef JSON_HEDLEY_TI_CL6X_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) - #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CL6X_VERSION) - #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CL7X_VERSION) - #undef JSON_HEDLEY_TI_CL7X_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) - #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CL7X_VERSION) - #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) - #undef JSON_HEDLEY_TI_CLPRU_VERSION -#endif -#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) - #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) - #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) - #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_CRAY_VERSION) - #undef JSON_HEDLEY_CRAY_VERSION -#endif -#if defined(_CRAYC) - #if defined(_RELEASE_PATCHLEVEL) - #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) - #else - #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) - #endif -#endif - -#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) - #undef JSON_HEDLEY_CRAY_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_CRAY_VERSION) - #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_IAR_VERSION) - #undef JSON_HEDLEY_IAR_VERSION -#endif -#if defined(__IAR_SYSTEMS_ICC__) - #if __VER__ > 1000 - #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) - #else - #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) - #endif -#endif - -#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) - #undef JSON_HEDLEY_IAR_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_IAR_VERSION) - #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_TINYC_VERSION) - #undef JSON_HEDLEY_TINYC_VERSION -#endif -#if defined(__TINYC__) - #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) -#endif - -#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) - #undef JSON_HEDLEY_TINYC_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_TINYC_VERSION) - #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_DMC_VERSION) - #undef JSON_HEDLEY_DMC_VERSION -#endif -#if defined(__DMC__) - #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) -#endif - -#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) - #undef JSON_HEDLEY_DMC_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_DMC_VERSION) - #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_COMPCERT_VERSION) - #undef JSON_HEDLEY_COMPCERT_VERSION -#endif -#if defined(__COMPCERT_VERSION__) - #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) -#endif - -#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) - #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_COMPCERT_VERSION) - #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_PELLES_VERSION) - #undef JSON_HEDLEY_PELLES_VERSION -#endif -#if defined(__POCC__) - #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) -#endif - -#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) - #undef JSON_HEDLEY_PELLES_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_PELLES_VERSION) - #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_MCST_LCC_VERSION) - #undef JSON_HEDLEY_MCST_LCC_VERSION -#endif -#if defined(__LCC__) && defined(__LCC_MINOR__) - #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) -#endif - -#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK) - #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_MCST_LCC_VERSION) - #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_GCC_VERSION) - #undef JSON_HEDLEY_GCC_VERSION -#endif -#if \ - defined(JSON_HEDLEY_GNUC_VERSION) && \ - !defined(__clang__) && \ - !defined(JSON_HEDLEY_INTEL_VERSION) && \ - !defined(JSON_HEDLEY_PGI_VERSION) && \ - !defined(JSON_HEDLEY_ARM_VERSION) && \ - !defined(JSON_HEDLEY_CRAY_VERSION) && \ - !defined(JSON_HEDLEY_TI_VERSION) && \ - !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ - !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ - !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ - !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ - !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ - !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ - !defined(__COMPCERT__) && \ - !defined(JSON_HEDLEY_MCST_LCC_VERSION) - #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION -#endif - -#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) - #undef JSON_HEDLEY_GCC_VERSION_CHECK -#endif -#if defined(JSON_HEDLEY_GCC_VERSION) - #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) -#else - #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) -#endif - -#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_HAS_ATTRIBUTE -#endif -#if \ - defined(__has_attribute) && \ - ( \ - (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \ - ) -# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) -#else -# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE -#endif -#if defined(__has_attribute) - #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) -#else - #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE -#endif -#if defined(__has_attribute) - #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) -#else - #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE -#endif -#if \ - defined(__has_cpp_attribute) && \ - defined(__cplusplus) && \ - (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) -#else - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) -#endif - -#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) - #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS -#endif -#if !defined(__cplusplus) || !defined(__has_cpp_attribute) - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) -#elif \ - !defined(JSON_HEDLEY_PGI_VERSION) && \ - !defined(JSON_HEDLEY_IAR_VERSION) && \ - (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ - (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) -#else - #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE -#endif -#if defined(__has_cpp_attribute) && defined(__cplusplus) - #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) -#else - #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE -#endif -#if defined(__has_cpp_attribute) && defined(__cplusplus) - #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) -#else - #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_BUILTIN) - #undef JSON_HEDLEY_HAS_BUILTIN -#endif -#if defined(__has_builtin) - #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) -#else - #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) - #undef JSON_HEDLEY_GNUC_HAS_BUILTIN -#endif -#if defined(__has_builtin) - #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) -#else - #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) - #undef JSON_HEDLEY_GCC_HAS_BUILTIN -#endif -#if defined(__has_builtin) - #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) -#else - #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_FEATURE) - #undef JSON_HEDLEY_HAS_FEATURE -#endif -#if defined(__has_feature) - #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) -#else - #define JSON_HEDLEY_HAS_FEATURE(feature) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) - #undef JSON_HEDLEY_GNUC_HAS_FEATURE -#endif -#if defined(__has_feature) - #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) -#else - #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) - #undef JSON_HEDLEY_GCC_HAS_FEATURE -#endif -#if defined(__has_feature) - #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) -#else - #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_EXTENSION) - #undef JSON_HEDLEY_HAS_EXTENSION -#endif -#if defined(__has_extension) - #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) -#else - #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) - #undef JSON_HEDLEY_GNUC_HAS_EXTENSION -#endif -#if defined(__has_extension) - #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) -#else - #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) - #undef JSON_HEDLEY_GCC_HAS_EXTENSION -#endif -#if defined(__has_extension) - #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) -#else - #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE -#endif -#if defined(__has_declspec_attribute) - #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) -#else - #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE -#endif -#if defined(__has_declspec_attribute) - #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) -#else - #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE -#endif -#if defined(__has_declspec_attribute) - #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) -#else - #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_HAS_WARNING) - #undef JSON_HEDLEY_HAS_WARNING -#endif -#if defined(__has_warning) - #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) -#else - #define JSON_HEDLEY_HAS_WARNING(warning) (0) -#endif - -#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) - #undef JSON_HEDLEY_GNUC_HAS_WARNING -#endif -#if defined(__has_warning) - #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) -#else - #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_GCC_HAS_WARNING) - #undef JSON_HEDLEY_GCC_HAS_WARNING -#endif -#if defined(__has_warning) - #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) -#else - #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if \ - (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ - defined(__clang__) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ - JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ - (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) - #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) - #define JSON_HEDLEY_PRAGMA(value) __pragma(value) -#else - #define JSON_HEDLEY_PRAGMA(value) -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) - #undef JSON_HEDLEY_DIAGNOSTIC_PUSH -#endif -#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) - #undef JSON_HEDLEY_DIAGNOSTIC_POP -#endif -#if defined(__clang__) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) - #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) -#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") -#elif \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) - #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") - #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") -#else - #define JSON_HEDLEY_DIAGNOSTIC_PUSH - #define JSON_HEDLEY_DIAGNOSTIC_POP -#endif - -/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for - HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ -#endif -#if defined(__cplusplus) -# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") -# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") -# if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions") -# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ - _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ - _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \ - xpr \ - JSON_HEDLEY_DIAGNOSTIC_POP -# else -# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ - _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ - xpr \ - JSON_HEDLEY_DIAGNOSTIC_POP -# endif -# else -# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ - xpr \ - JSON_HEDLEY_DIAGNOSTIC_POP -# endif -# endif -#endif -#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x -#endif - -#if defined(JSON_HEDLEY_CONST_CAST) - #undef JSON_HEDLEY_CONST_CAST -#endif -#if defined(__cplusplus) -# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) -#elif \ - JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) -# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ - ((T) (expr)); \ - JSON_HEDLEY_DIAGNOSTIC_POP \ - })) -#else -# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) -#endif - -#if defined(JSON_HEDLEY_REINTERPRET_CAST) - #undef JSON_HEDLEY_REINTERPRET_CAST -#endif -#if defined(__cplusplus) - #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) -#else - #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) -#endif - -#if defined(JSON_HEDLEY_STATIC_CAST) - #undef JSON_HEDLEY_STATIC_CAST -#endif -#if defined(__cplusplus) - #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) -#else - #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) -#endif - -#if defined(JSON_HEDLEY_CPP_CAST) - #undef JSON_HEDLEY_CPP_CAST -#endif -#if defined(__cplusplus) -# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") -# define JSON_HEDLEY_CPP_CAST(T, expr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ - ((T) (expr)) \ - JSON_HEDLEY_DIAGNOSTIC_POP -# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) -# define JSON_HEDLEY_CPP_CAST(T, expr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("diag_suppress=Pe137") \ - JSON_HEDLEY_DIAGNOSTIC_POP -# else -# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) -# endif -#else -# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") -#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786)) -#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445") -#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) -#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") -#elif \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") -#else - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") -#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161)) -#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) -#elif \ - JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") -#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") -#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161") -#else - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") -#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292)) -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) -#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098") -#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") -#elif \ - JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") -#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") -#else - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") -#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") -#else - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL -#endif - -#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) - #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wunused-function") - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"") -#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"") -#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505)) -#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142") -#else - #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION -#endif - -#if defined(JSON_HEDLEY_DEPRECATED) - #undef JSON_HEDLEY_DEPRECATED -#endif -#if defined(JSON_HEDLEY_DEPRECATED_FOR) - #undef JSON_HEDLEY_DEPRECATED_FOR -#endif -#if \ - JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) -#elif \ - (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) -#elif defined(__cplusplus) && (__cplusplus >= 201402L) - #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) -#elif \ - JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ - JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) - #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ - JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") -#else - #define JSON_HEDLEY_DEPRECATED(since) - #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) -#endif - -#if defined(JSON_HEDLEY_UNAVAILABLE) - #undef JSON_HEDLEY_UNAVAILABLE -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) -#else - #define JSON_HEDLEY_UNAVAILABLE(available_since) -#endif - -#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) - #undef JSON_HEDLEY_WARN_UNUSED_RESULT -#endif -#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) - #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) -#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) - #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) -#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) - #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) -#elif defined(_Check_return_) /* SAL */ - #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ -#else - #define JSON_HEDLEY_WARN_UNUSED_RESULT - #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) -#endif - -#if defined(JSON_HEDLEY_SENTINEL) - #undef JSON_HEDLEY_SENTINEL -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) -#else - #define JSON_HEDLEY_SENTINEL(position) -#endif - -#if defined(JSON_HEDLEY_NO_RETURN) - #undef JSON_HEDLEY_NO_RETURN -#endif -#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_NO_RETURN __noreturn -#elif \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) -#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L - #define JSON_HEDLEY_NO_RETURN _Noreturn -#elif defined(__cplusplus) && (__cplusplus >= 201103L) - #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) -#elif \ - JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) - #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) - #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) -#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) - #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") -#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) - #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) - #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) -#else - #define JSON_HEDLEY_NO_RETURN -#endif - -#if defined(JSON_HEDLEY_NO_ESCAPE) - #undef JSON_HEDLEY_NO_ESCAPE -#endif -#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) - #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) -#else - #define JSON_HEDLEY_NO_ESCAPE -#endif - -#if defined(JSON_HEDLEY_UNREACHABLE) - #undef JSON_HEDLEY_UNREACHABLE -#endif -#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) - #undef JSON_HEDLEY_UNREACHABLE_RETURN -#endif -#if defined(JSON_HEDLEY_ASSUME) - #undef JSON_HEDLEY_ASSUME -#endif -#if \ - JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_ASSUME(expr) __assume(expr) -#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) - #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) -#elif \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) - #if defined(__cplusplus) - #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) - #else - #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) - #endif -#endif -#if \ - (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \ - JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() -#elif defined(JSON_HEDLEY_ASSUME) - #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) -#endif -#if !defined(JSON_HEDLEY_ASSUME) - #if defined(JSON_HEDLEY_UNREACHABLE) - #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) - #else - #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) - #endif -#endif -#if defined(JSON_HEDLEY_UNREACHABLE) - #if \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) - #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) - #else - #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() - #endif -#else - #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) -#endif -#if !defined(JSON_HEDLEY_UNREACHABLE) - #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) -#endif - -JSON_HEDLEY_DIAGNOSTIC_PUSH -#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") - #pragma clang diagnostic ignored "-Wpedantic" -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) - #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" -#endif -#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) - #if defined(__clang__) - #pragma clang diagnostic ignored "-Wvariadic-macros" - #elif defined(JSON_HEDLEY_GCC_VERSION) - #pragma GCC diagnostic ignored "-Wvariadic-macros" - #endif -#endif -#if defined(JSON_HEDLEY_NON_NULL) - #undef JSON_HEDLEY_NON_NULL -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) - #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) -#else - #define JSON_HEDLEY_NON_NULL(...) -#endif -JSON_HEDLEY_DIAGNOSTIC_POP - -#if defined(JSON_HEDLEY_PRINTF_FORMAT) - #undef JSON_HEDLEY_PRINTF_FORMAT -#endif -#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) -#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) -#elif \ - JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) -#else - #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) -#endif - -#if defined(JSON_HEDLEY_CONSTEXPR) - #undef JSON_HEDLEY_CONSTEXPR -#endif -#if defined(__cplusplus) - #if __cplusplus >= 201103L - #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) - #endif -#endif -#if !defined(JSON_HEDLEY_CONSTEXPR) - #define JSON_HEDLEY_CONSTEXPR -#endif - -#if defined(JSON_HEDLEY_PREDICT) - #undef JSON_HEDLEY_PREDICT -#endif -#if defined(JSON_HEDLEY_LIKELY) - #undef JSON_HEDLEY_LIKELY -#endif -#if defined(JSON_HEDLEY_UNLIKELY) - #undef JSON_HEDLEY_UNLIKELY -#endif -#if defined(JSON_HEDLEY_UNPREDICTABLE) - #undef JSON_HEDLEY_UNPREDICTABLE -#endif -#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) - #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) -#endif -#if \ - (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) -# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) -# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) -# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) -# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) -# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) -#elif \ - (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ - JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) -# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ - (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) -# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ - (__extension__ ({ \ - double hedley_probability_ = (probability); \ - ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ - })) -# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ - (__extension__ ({ \ - double hedley_probability_ = (probability); \ - ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ - })) -# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) -# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) -#else -# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) -# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) -# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) -# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) -# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) -#endif -#if !defined(JSON_HEDLEY_UNPREDICTABLE) - #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) -#endif - -#if defined(JSON_HEDLEY_MALLOC) - #undef JSON_HEDLEY_MALLOC -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) - #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_MALLOC __declspec(restrict) -#else - #define JSON_HEDLEY_MALLOC -#endif - -#if defined(JSON_HEDLEY_PURE) - #undef JSON_HEDLEY_PURE -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) -# define JSON_HEDLEY_PURE __attribute__((__pure__)) -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) -# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") -#elif defined(__cplusplus) && \ - ( \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ - ) -# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") -#else -# define JSON_HEDLEY_PURE -#endif - -#if defined(JSON_HEDLEY_CONST) - #undef JSON_HEDLEY_CONST -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_CONST __attribute__((__const__)) -#elif \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) - #define JSON_HEDLEY_CONST _Pragma("no_side_effect") -#else - #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE -#endif - -#if defined(JSON_HEDLEY_RESTRICT) - #undef JSON_HEDLEY_RESTRICT -#endif -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) - #define JSON_HEDLEY_RESTRICT restrict -#elif \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ - JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ - defined(__clang__) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_RESTRICT __restrict -#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) - #define JSON_HEDLEY_RESTRICT _Restrict -#else - #define JSON_HEDLEY_RESTRICT -#endif - -#if defined(JSON_HEDLEY_INLINE) - #undef JSON_HEDLEY_INLINE -#endif -#if \ - (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ - (defined(__cplusplus) && (__cplusplus >= 199711L)) - #define JSON_HEDLEY_INLINE inline -#elif \ - defined(JSON_HEDLEY_GCC_VERSION) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) - #define JSON_HEDLEY_INLINE __inline__ -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_INLINE __inline -#else - #define JSON_HEDLEY_INLINE -#endif - -#if defined(JSON_HEDLEY_ALWAYS_INLINE) - #undef JSON_HEDLEY_ALWAYS_INLINE -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ - JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) -# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) -# define JSON_HEDLEY_ALWAYS_INLINE __forceinline -#elif defined(__cplusplus) && \ - ( \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ - ) -# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) -# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") -#else -# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE -#endif - -#if defined(JSON_HEDLEY_NEVER_INLINE) - #undef JSON_HEDLEY_NEVER_INLINE -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ - JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ - (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ - (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ - (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ - JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ - JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ - JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) - #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) -#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) - #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") -#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) - #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) - #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") -#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) - #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) - #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) -#else - #define JSON_HEDLEY_NEVER_INLINE -#endif - -#if defined(JSON_HEDLEY_PRIVATE) - #undef JSON_HEDLEY_PRIVATE -#endif -#if defined(JSON_HEDLEY_PUBLIC) - #undef JSON_HEDLEY_PUBLIC -#endif -#if defined(JSON_HEDLEY_IMPORT) - #undef JSON_HEDLEY_IMPORT -#endif -#if defined(_WIN32) || defined(__CYGWIN__) -# define JSON_HEDLEY_PRIVATE -# define JSON_HEDLEY_PUBLIC __declspec(dllexport) -# define JSON_HEDLEY_IMPORT __declspec(dllimport) -#else -# if \ - JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ - JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ - ( \ - defined(__TI_EABI__) && \ - ( \ - (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ - ) \ - ) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) -# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) -# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) -# else -# define JSON_HEDLEY_PRIVATE -# define JSON_HEDLEY_PUBLIC -# endif -# define JSON_HEDLEY_IMPORT extern -#endif - -#if defined(JSON_HEDLEY_NO_THROW) - #undef JSON_HEDLEY_NO_THROW -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) - #define JSON_HEDLEY_NO_THROW __declspec(nothrow) -#else - #define JSON_HEDLEY_NO_THROW -#endif - -#if defined(JSON_HEDLEY_FALL_THROUGH) - #undef JSON_HEDLEY_FALL_THROUGH -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) -#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) - #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) -#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) - #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) -#elif defined(__fallthrough) /* SAL */ - #define JSON_HEDLEY_FALL_THROUGH __fallthrough -#else - #define JSON_HEDLEY_FALL_THROUGH -#endif - -#if defined(JSON_HEDLEY_RETURNS_NON_NULL) - #undef JSON_HEDLEY_RETURNS_NON_NULL -#endif -#if \ - JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) -#elif defined(_Ret_notnull_) /* SAL */ - #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ -#else - #define JSON_HEDLEY_RETURNS_NON_NULL -#endif - -#if defined(JSON_HEDLEY_ARRAY_PARAM) - #undef JSON_HEDLEY_ARRAY_PARAM -#endif -#if \ - defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ - !defined(__STDC_NO_VLA__) && \ - !defined(__cplusplus) && \ - !defined(JSON_HEDLEY_PGI_VERSION) && \ - !defined(JSON_HEDLEY_TINYC_VERSION) - #define JSON_HEDLEY_ARRAY_PARAM(name) (name) -#else - #define JSON_HEDLEY_ARRAY_PARAM(name) -#endif - -#if defined(JSON_HEDLEY_IS_CONSTANT) - #undef JSON_HEDLEY_IS_CONSTANT -#endif -#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) - #undef JSON_HEDLEY_REQUIRE_CONSTEXPR -#endif -/* JSON_HEDLEY_IS_CONSTEXPR_ is for - HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ -#if defined(JSON_HEDLEY_IS_CONSTEXPR_) - #undef JSON_HEDLEY_IS_CONSTEXPR_ -#endif -#if \ - JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ - JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ - (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ - JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ - JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) - #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) -#endif -#if !defined(__cplusplus) -# if \ - JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ - JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ - JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) -#if defined(__INTPTR_TYPE__) - #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) -#else - #include - #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) -#endif -# elif \ - ( \ - defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ - !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ - !defined(JSON_HEDLEY_PGI_VERSION) && \ - !defined(JSON_HEDLEY_IAR_VERSION)) || \ - (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ - JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ - JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) -#if defined(__INTPTR_TYPE__) - #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) -#else - #include - #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) -#endif -# elif \ - defined(JSON_HEDLEY_GCC_VERSION) || \ - defined(JSON_HEDLEY_INTEL_VERSION) || \ - defined(JSON_HEDLEY_TINYC_VERSION) || \ - defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ - JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ - defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ - defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ - defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ - defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ - defined(__clang__) -# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ - sizeof(void) != \ - sizeof(*( \ - 1 ? \ - ((void*) ((expr) * 0L) ) : \ -((struct { char v[sizeof(void) * 2]; } *) 1) \ - ) \ - ) \ - ) -# endif -#endif -#if defined(JSON_HEDLEY_IS_CONSTEXPR_) - #if !defined(JSON_HEDLEY_IS_CONSTANT) - #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) - #endif - #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) -#else - #if !defined(JSON_HEDLEY_IS_CONSTANT) - #define JSON_HEDLEY_IS_CONSTANT(expr) (0) - #endif - #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) -#endif - -#if defined(JSON_HEDLEY_BEGIN_C_DECLS) - #undef JSON_HEDLEY_BEGIN_C_DECLS -#endif -#if defined(JSON_HEDLEY_END_C_DECLS) - #undef JSON_HEDLEY_END_C_DECLS -#endif -#if defined(JSON_HEDLEY_C_DECL) - #undef JSON_HEDLEY_C_DECL -#endif -#if defined(__cplusplus) - #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { - #define JSON_HEDLEY_END_C_DECLS } - #define JSON_HEDLEY_C_DECL extern "C" -#else - #define JSON_HEDLEY_BEGIN_C_DECLS - #define JSON_HEDLEY_END_C_DECLS - #define JSON_HEDLEY_C_DECL -#endif - -#if defined(JSON_HEDLEY_STATIC_ASSERT) - #undef JSON_HEDLEY_STATIC_ASSERT -#endif -#if \ - !defined(__cplusplus) && ( \ - (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ - (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ - JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ - defined(_Static_assert) \ - ) -# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) -#elif \ - (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ - JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) -# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) -#else -# define JSON_HEDLEY_STATIC_ASSERT(expr, message) -#endif - -#if defined(JSON_HEDLEY_NULL) - #undef JSON_HEDLEY_NULL -#endif -#if defined(__cplusplus) - #if __cplusplus >= 201103L - #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) - #elif defined(NULL) - #define JSON_HEDLEY_NULL NULL - #else - #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) - #endif -#elif defined(NULL) - #define JSON_HEDLEY_NULL NULL -#else - #define JSON_HEDLEY_NULL ((void*) 0) -#endif - -#if defined(JSON_HEDLEY_MESSAGE) - #undef JSON_HEDLEY_MESSAGE -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") -# define JSON_HEDLEY_MESSAGE(msg) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ - JSON_HEDLEY_PRAGMA(message msg) \ - JSON_HEDLEY_DIAGNOSTIC_POP -#elif \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) -# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) -#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) -# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) -#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) -# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) -#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) -# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) -#else -# define JSON_HEDLEY_MESSAGE(msg) -#endif - -#if defined(JSON_HEDLEY_WARNING) - #undef JSON_HEDLEY_WARNING -#endif -#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") -# define JSON_HEDLEY_WARNING(msg) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ - JSON_HEDLEY_PRAGMA(clang warning msg) \ - JSON_HEDLEY_DIAGNOSTIC_POP -#elif \ - JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ - JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ - JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) -# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) -#elif \ - JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) -# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) -#else -# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) -#endif - -#if defined(JSON_HEDLEY_REQUIRE) - #undef JSON_HEDLEY_REQUIRE -#endif -#if defined(JSON_HEDLEY_REQUIRE_MSG) - #undef JSON_HEDLEY_REQUIRE_MSG -#endif -#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) -# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") -# define JSON_HEDLEY_REQUIRE(expr) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ - __attribute__((diagnose_if(!(expr), #expr, "error"))) \ - JSON_HEDLEY_DIAGNOSTIC_POP -# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ - __attribute__((diagnose_if(!(expr), msg, "error"))) \ - JSON_HEDLEY_DIAGNOSTIC_POP -# else -# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) -# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) -# endif -#else -# define JSON_HEDLEY_REQUIRE(expr) -# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) -#endif - -#if defined(JSON_HEDLEY_FLAGS) - #undef JSON_HEDLEY_FLAGS -#endif -#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion")) - #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) -#else - #define JSON_HEDLEY_FLAGS -#endif - -#if defined(JSON_HEDLEY_FLAGS_CAST) - #undef JSON_HEDLEY_FLAGS_CAST -#endif -#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) -# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ - JSON_HEDLEY_DIAGNOSTIC_PUSH \ - _Pragma("warning(disable:188)") \ - ((T) (expr)); \ - JSON_HEDLEY_DIAGNOSTIC_POP \ - })) -#else -# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) -#endif - -#if defined(JSON_HEDLEY_EMPTY_BASES) - #undef JSON_HEDLEY_EMPTY_BASES -#endif -#if \ - (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \ - JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) - #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) -#else - #define JSON_HEDLEY_EMPTY_BASES -#endif - -/* Remaining macros are deprecated. */ - -#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) - #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK -#endif -#if defined(__clang__) - #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) -#else - #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) -#endif - -#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) - #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE -#endif -#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) - -#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) - #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE -#endif -#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) - -#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) - #undef JSON_HEDLEY_CLANG_HAS_BUILTIN -#endif -#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) - -#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) - #undef JSON_HEDLEY_CLANG_HAS_FEATURE -#endif -#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) - -#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) - #undef JSON_HEDLEY_CLANG_HAS_EXTENSION -#endif -#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) - -#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) - #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE -#endif -#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) - -#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) - #undef JSON_HEDLEY_CLANG_HAS_WARNING -#endif -#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) - -#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ - - -// This file contains all internal macro definitions (except those affecting ABI) -// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them - -// #include - - -// exclude unsupported compilers -#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) - #if defined(__clang__) - #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 - #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" - #endif - #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) - #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 - #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" - #endif - #endif -#endif - -// C++ language standard detection -// if the user manually specified the used c++ version this is skipped -#if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) - #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) - #define JSON_HAS_CPP_20 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 - #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 - #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) - #define JSON_HAS_CPP_14 - #endif - // the cpp 11 flag is always specified because it is the minimal required version - #define JSON_HAS_CPP_11 -#endif - -#ifdef __has_include - #if __has_include() - #include - #endif -#endif - -#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) - #ifdef JSON_HAS_CPP_17 - #if defined(__cpp_lib_filesystem) - #define JSON_HAS_FILESYSTEM 1 - #elif defined(__cpp_lib_experimental_filesystem) - #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 - #elif !defined(__has_include) - #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 - #elif __has_include() - #define JSON_HAS_FILESYSTEM 1 - #elif __has_include() - #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 - #endif - - // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ - #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 - #undef JSON_HAS_FILESYSTEM - #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #endif - - // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support - #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 - #undef JSON_HAS_FILESYSTEM - #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #endif - - // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support - #if defined(__clang_major__) && __clang_major__ < 7 - #undef JSON_HAS_FILESYSTEM - #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #endif - - // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support - #if defined(_MSC_VER) && _MSC_VER < 1914 - #undef JSON_HAS_FILESYSTEM - #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #endif - - // no filesystem support before iOS 13 - #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 - #undef JSON_HAS_FILESYSTEM - #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #endif - - // no filesystem support before macOS Catalina - #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 - #undef JSON_HAS_FILESYSTEM - #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #endif - #endif -#endif - -#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM - #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 -#endif - -#ifndef JSON_HAS_FILESYSTEM - #define JSON_HAS_FILESYSTEM 0 -#endif - -#ifndef JSON_HAS_THREE_WAY_COMPARISON - #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \ - && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L - #define JSON_HAS_THREE_WAY_COMPARISON 1 - #else - #define JSON_HAS_THREE_WAY_COMPARISON 0 - #endif -#endif - -#ifndef JSON_HAS_RANGES - // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error - #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427 - #define JSON_HAS_RANGES 0 - #elif defined(__cpp_lib_ranges) - #define JSON_HAS_RANGES 1 - #else - #define JSON_HAS_RANGES 0 - #endif -#endif - -#ifdef JSON_HAS_CPP_17 - #define JSON_INLINE_VARIABLE inline -#else - #define JSON_INLINE_VARIABLE -#endif - -#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address) - #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]] -#else - #define JSON_NO_UNIQUE_ADDRESS -#endif - -// disable documentation warnings on clang -#if defined(__clang__) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wdocumentation" - #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" -#endif - -// allow disabling exceptions -#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) - #define JSON_THROW(exception) throw exception - #define JSON_TRY try - #define JSON_CATCH(exception) catch(exception) - #define JSON_INTERNAL_CATCH(exception) catch(exception) -#else - #include - #define JSON_THROW(exception) std::abort() - #define JSON_TRY if(true) - #define JSON_CATCH(exception) if(false) - #define JSON_INTERNAL_CATCH(exception) if(false) -#endif - -// override exception macros -#if defined(JSON_THROW_USER) - #undef JSON_THROW - #define JSON_THROW JSON_THROW_USER -#endif -#if defined(JSON_TRY_USER) - #undef JSON_TRY - #define JSON_TRY JSON_TRY_USER -#endif -#if defined(JSON_CATCH_USER) - #undef JSON_CATCH - #define JSON_CATCH JSON_CATCH_USER - #undef JSON_INTERNAL_CATCH - #define JSON_INTERNAL_CATCH JSON_CATCH_USER -#endif -#if defined(JSON_INTERNAL_CATCH_USER) - #undef JSON_INTERNAL_CATCH - #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER -#endif - -// allow overriding assert -#if !defined(JSON_ASSERT) - #include // assert - #define JSON_ASSERT(x) assert(x) -#endif - -// allow to access some private functions (needed by the test suite) -#if defined(JSON_TESTS_PRIVATE) - #define JSON_PRIVATE_UNLESS_TESTED public -#else - #define JSON_PRIVATE_UNLESS_TESTED private -#endif - -/*! -@brief macro to briefly define a mapping between an enum and JSON -@def NLOHMANN_JSON_SERIALIZE_ENUM -@since version 3.4.0 -*/ -#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ - template \ - inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ - { \ - static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ - static const std::pair m[] = __VA_ARGS__; \ - auto it = std::find_if(std::begin(m), std::end(m), \ - [e](const std::pair& ej_pair) -> bool \ - { \ - return ej_pair.first == e; \ - }); \ - j = ((it != std::end(m)) ? it : std::begin(m))->second; \ - } \ - template \ - inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ - { \ - static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ - static const std::pair m[] = __VA_ARGS__; \ - auto it = std::find_if(std::begin(m), std::end(m), \ - [&j](const std::pair& ej_pair) -> bool \ - { \ - return ej_pair.second == j; \ - }); \ - e = ((it != std::end(m)) ? it : std::begin(m))->first; \ - } - -// Ugly macros to avoid uglier copy-paste when specializing basic_json. They -// may be removed in the future once the class is split. - -#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ - template class ObjectType, \ - template class ArrayType, \ - class StringType, class BooleanType, class NumberIntegerType, \ - class NumberUnsignedType, class NumberFloatType, \ - template class AllocatorType, \ - template class JSONSerializer, \ - class BinaryType> - -#define NLOHMANN_BASIC_JSON_TPL \ - basic_json - -// Macros to simplify conversion from/to types - -#define NLOHMANN_JSON_EXPAND( x ) x -#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME -#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ - NLOHMANN_JSON_PASTE64, \ - NLOHMANN_JSON_PASTE63, \ - NLOHMANN_JSON_PASTE62, \ - NLOHMANN_JSON_PASTE61, \ - NLOHMANN_JSON_PASTE60, \ - NLOHMANN_JSON_PASTE59, \ - NLOHMANN_JSON_PASTE58, \ - NLOHMANN_JSON_PASTE57, \ - NLOHMANN_JSON_PASTE56, \ - NLOHMANN_JSON_PASTE55, \ - NLOHMANN_JSON_PASTE54, \ - NLOHMANN_JSON_PASTE53, \ - NLOHMANN_JSON_PASTE52, \ - NLOHMANN_JSON_PASTE51, \ - NLOHMANN_JSON_PASTE50, \ - NLOHMANN_JSON_PASTE49, \ - NLOHMANN_JSON_PASTE48, \ - NLOHMANN_JSON_PASTE47, \ - NLOHMANN_JSON_PASTE46, \ - NLOHMANN_JSON_PASTE45, \ - NLOHMANN_JSON_PASTE44, \ - NLOHMANN_JSON_PASTE43, \ - NLOHMANN_JSON_PASTE42, \ - NLOHMANN_JSON_PASTE41, \ - NLOHMANN_JSON_PASTE40, \ - NLOHMANN_JSON_PASTE39, \ - NLOHMANN_JSON_PASTE38, \ - NLOHMANN_JSON_PASTE37, \ - NLOHMANN_JSON_PASTE36, \ - NLOHMANN_JSON_PASTE35, \ - NLOHMANN_JSON_PASTE34, \ - NLOHMANN_JSON_PASTE33, \ - NLOHMANN_JSON_PASTE32, \ - NLOHMANN_JSON_PASTE31, \ - NLOHMANN_JSON_PASTE30, \ - NLOHMANN_JSON_PASTE29, \ - NLOHMANN_JSON_PASTE28, \ - NLOHMANN_JSON_PASTE27, \ - NLOHMANN_JSON_PASTE26, \ - NLOHMANN_JSON_PASTE25, \ - NLOHMANN_JSON_PASTE24, \ - NLOHMANN_JSON_PASTE23, \ - NLOHMANN_JSON_PASTE22, \ - NLOHMANN_JSON_PASTE21, \ - NLOHMANN_JSON_PASTE20, \ - NLOHMANN_JSON_PASTE19, \ - NLOHMANN_JSON_PASTE18, \ - NLOHMANN_JSON_PASTE17, \ - NLOHMANN_JSON_PASTE16, \ - NLOHMANN_JSON_PASTE15, \ - NLOHMANN_JSON_PASTE14, \ - NLOHMANN_JSON_PASTE13, \ - NLOHMANN_JSON_PASTE12, \ - NLOHMANN_JSON_PASTE11, \ - NLOHMANN_JSON_PASTE10, \ - NLOHMANN_JSON_PASTE9, \ - NLOHMANN_JSON_PASTE8, \ - NLOHMANN_JSON_PASTE7, \ - NLOHMANN_JSON_PASTE6, \ - NLOHMANN_JSON_PASTE5, \ - NLOHMANN_JSON_PASTE4, \ - NLOHMANN_JSON_PASTE3, \ - NLOHMANN_JSON_PASTE2, \ - NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) -#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) -#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) -#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) -#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) -#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) -#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) -#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) -#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) -#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) -#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) -#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) -#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) -#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) -#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) -#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) -#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) -#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) -#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) -#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) -#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) -#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) -#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) -#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) -#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) -#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) -#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) -#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) -#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) -#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) -#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) -#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) -#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) -#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) -#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) -#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) -#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) -#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) -#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) -#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) -#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) -#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) -#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) -#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) -#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) -#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) -#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) -#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) -#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) -#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) -#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) -#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) -#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) -#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) -#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) -#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) -#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) -#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) -#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) -#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) -#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) -#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) -#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) -#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) - -#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; -#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); -#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1); - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_INTRUSIVE -@since version 3.9.0 -*/ -#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ - friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } - -#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ - friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { Type nlohmann_json_default_obj; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } - -/*! -@brief macro -@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE -@since version 3.9.0 -*/ -#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ - inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } - -#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ - inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ - inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { Type nlohmann_json_default_obj; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } - - -// inspired from https://stackoverflow.com/a/26745591 -// allows to call any std function as if (e.g. with begin): -// using std::begin; begin(x); -// -// it allows using the detected idiom to retrieve the return type -// of such an expression -#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ - namespace detail { \ - using std::std_name; \ - \ - template \ - using result_of_##std_name = decltype(std_name(std::declval()...)); \ - } \ - \ - namespace detail2 { \ - struct std_name##_tag \ - { \ - }; \ - \ - template \ - std_name##_tag std_name(T&&...); \ - \ - template \ - using result_of_##std_name = decltype(std_name(std::declval()...)); \ - \ - template \ - struct would_call_std_##std_name \ - { \ - static constexpr auto const value = ::nlohmann::detail:: \ - is_detected_exact::value; \ - }; \ - } /* namespace detail2 */ \ - \ - template \ - struct would_call_std_##std_name : detail2::would_call_std_##std_name \ - { \ - } - -#ifndef JSON_USE_IMPLICIT_CONVERSIONS - #define JSON_USE_IMPLICIT_CONVERSIONS 1 -#endif - -#if JSON_USE_IMPLICIT_CONVERSIONS - #define JSON_EXPLICIT -#else - #define JSON_EXPLICIT explicit -#endif - -#ifndef JSON_DISABLE_ENUM_SERIALIZATION - #define JSON_DISABLE_ENUM_SERIALIZATION 0 -#endif - -#ifndef JSON_USE_GLOBAL_UDLS - #define JSON_USE_GLOBAL_UDLS 1 -#endif - -#if JSON_HAS_THREE_WAY_COMPARISON - #include // partial_ordering -#endif - -NLOHMANN_JSON_NAMESPACE_BEGIN -namespace detail -{ - -/////////////////////////// -// JSON type enumeration // -/////////////////////////// - -/*! -@brief the JSON type enumeration - -This enumeration collects the different JSON types. It is internally used to -distinguish the stored values, and the functions @ref basic_json::is_null(), -@ref basic_json::is_object(), @ref basic_json::is_array(), -@ref basic_json::is_string(), @ref basic_json::is_boolean(), -@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), -@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), -@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and -@ref basic_json::is_structured() rely on it. - -@note There are three enumeration entries (number_integer, number_unsigned, and -number_float), because the library distinguishes these three types for numbers: -@ref basic_json::number_unsigned_t is used for unsigned integers, -@ref basic_json::number_integer_t is used for signed integers, and -@ref basic_json::number_float_t is used for floating-point numbers or to -approximate integers which do not fit in the limits of their respective type. - -@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON -value with the default value for a given type - -@since version 1.0.0 -*/ -enum class value_t : std::uint8_t -{ - null, ///< null value - object, ///< object (unordered set of name/value pairs) - array, ///< array (ordered collection of values) - string, ///< string value - boolean, ///< boolean value - number_integer, ///< number value (signed integer) - number_unsigned, ///< number value (unsigned integer) - number_float, ///< number value (floating-point) - binary, ///< binary array (ordered collection of bytes) - discarded ///< discarded by the parser callback function -}; - -/*! -@brief comparison operator for JSON types - -Returns an ordering that is similar to Python: -- order: null < boolean < number < object < array < string < binary -- furthermore, each type is not smaller than itself -- discarded values are not comparable -- binary is represented as a b"" string in python and directly comparable to a - string; however, making a binary array directly comparable with a string would - be surprising behavior in a JSON file. - -@since version 1.0.0 -*/ -#if JSON_HAS_THREE_WAY_COMPARISON - inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD* -#else - inline bool operator<(const value_t lhs, const value_t rhs) noexcept -#endif -{ - static constexpr std::array order = {{ - 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, - 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, - 6 /* binary */ - } - }; - - const auto l_index = static_cast(lhs); - const auto r_index = static_cast(rhs); -#if JSON_HAS_THREE_WAY_COMPARISON - if (l_index < order.size() && r_index < order.size()) - { - return order[l_index] <=> order[r_index]; // *NOPAD* - } - return std::partial_ordering::unordered; -#else - return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; -#endif -} - -// GCC selects the built-in operator< over an operator rewritten from -// a user-defined spaceship operator -// Clang, MSVC, and ICC select the rewritten candidate -// (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200) -#if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__) -inline bool operator<(const value_t lhs, const value_t rhs) noexcept -{ - return std::is_lt(lhs <=> rhs); // *NOPAD* -} -#endif - -} // namespace detail -NLOHMANN_JSON_NAMESPACE_END - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -// #include - - -NLOHMANN_JSON_NAMESPACE_BEGIN -namespace detail -{ - -/*! -@brief replace all occurrences of a substring by another string - -@param[in,out] s the string to manipulate; changed so that all - occurrences of @a f are replaced with @a t -@param[in] f the substring to replace with @a t -@param[in] t the string to replace @a f - -@pre The search string @a f must not be empty. **This precondition is -enforced with an assertion.** - -@since version 2.0.0 -*/ -template -inline void replace_substring(StringType& s, const StringType& f, - const StringType& t) -{ - JSON_ASSERT(!f.empty()); - for (auto pos = s.find(f); // find first occurrence of f - pos != StringType::npos; // make sure f was found - s.replace(pos, f.size(), t), // replace with t, and - pos = s.find(f, pos + t.size())) // find next occurrence of f - {} -} - -/*! - * @brief string escaping as described in RFC 6901 (Sect. 4) - * @param[in] s string to escape - * @return escaped string - * - * Note the order of escaping "~" to "~0" and "/" to "~1" is important. - */ -template -inline StringType escape(StringType s) -{ - replace_substring(s, StringType{"~"}, StringType{"~0"}); - replace_substring(s, StringType{"/"}, StringType{"~1"}); - return s; -} - -/*! - * @brief string unescaping as described in RFC 6901 (Sect. 4) - * @param[in] s string to unescape - * @return unescaped string - * - * Note the order of escaping "~1" to "/" and "~0" to "~" is important. - */ -template -static void unescape(StringType& s) -{ - replace_substring(s, StringType{"~1"}, StringType{"/"}); - replace_substring(s, StringType{"~0"}, StringType{"~"}); -} - -} // namespace detail -NLOHMANN_JSON_NAMESPACE_END - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // size_t - -// #include - - -NLOHMANN_JSON_NAMESPACE_BEGIN -namespace detail -{ - -/// struct to capture the start position of the current token -struct position_t -{ - /// the total number of characters read - std::size_t chars_read_total = 0; - /// the number of characters read in the current line - std::size_t chars_read_current_line = 0; - /// the number of lines read - std::size_t lines_read = 0; - - /// conversion to size_t to preserve SAX interface - constexpr operator size_t() const - { - return chars_read_total; - } -}; - -} // namespace detail -NLOHMANN_JSON_NAMESPACE_END - -// #include - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-FileCopyrightText: 2018 The Abseil Authors -// SPDX-License-Identifier: MIT - - - -#include // array -#include // size_t -#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type -#include // index_sequence, make_index_sequence, index_sequence_for - -// #include - - -NLOHMANN_JSON_NAMESPACE_BEGIN -namespace detail -{ - -template -using uncvref_t = typename std::remove_cv::type>::type; - -#ifdef JSON_HAS_CPP_14 - -// the following utilities are natively available in C++14 -using std::enable_if_t; -using std::index_sequence; -using std::make_index_sequence; -using std::index_sequence_for; - -#else - -// alias templates to reduce boilerplate -template -using enable_if_t = typename std::enable_if::type; - -// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h -// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. - -//// START OF CODE FROM GOOGLE ABSEIL - -// integer_sequence -// -// Class template representing a compile-time integer sequence. An instantiation -// of `integer_sequence` has a sequence of integers encoded in its -// type through its template arguments (which is a common need when -// working with C++11 variadic templates). `absl::integer_sequence` is designed -// to be a drop-in replacement for C++14's `std::integer_sequence`. -// -// Example: -// -// template< class T, T... Ints > -// void user_function(integer_sequence); -// -// int main() -// { -// // user_function's `T` will be deduced to `int` and `Ints...` -// // will be deduced to `0, 1, 2, 3, 4`. -// user_function(make_integer_sequence()); -// } -template -struct integer_sequence -{ - using value_type = T; - static constexpr std::size_t size() noexcept - { - return sizeof...(Ints); - } -}; - -// index_sequence -// -// A helper template for an `integer_sequence` of `size_t`, -// `absl::index_sequence` is designed to be a drop-in replacement for C++14's -// `std::index_sequence`. -template -using index_sequence = integer_sequence; - -namespace utility_internal -{ - -template -struct Extend; - -// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. -template -struct Extend, SeqSize, 0> -{ - using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; -}; - -template -struct Extend, SeqSize, 1> -{ - using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; -}; - -// Recursion helper for 'make_integer_sequence'. -// 'Gen::type' is an alias for 'integer_sequence'. -template -struct Gen -{ - using type = - typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; -}; - -template -struct Gen -{ - using type = integer_sequence; -}; - -} // namespace utility_internal - -// Compile-time sequences of integers - -// make_integer_sequence -// -// This template alias is equivalent to -// `integer_sequence`, and is designed to be a drop-in -// replacement for C++14's `std::make_integer_sequence`. -template -using make_integer_sequence = typename utility_internal::Gen::type; - -// make_index_sequence -// -// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, -// and is designed to be a drop-in replacement for C++14's -// `std::make_index_sequence`. -template -using make_index_sequence = make_integer_sequence; - -// index_sequence_for -// -// Converts a typename pack into an index sequence of the same length, and -// is designed to be a drop-in replacement for C++14's -// `std::index_sequence_for()` -template -using index_sequence_for = make_index_sequence; - -//// END OF CODE FROM GOOGLE ABSEIL - -#endif - -// dispatch utility (taken from ranges-v3) -template struct priority_tag : priority_tag < N - 1 > {}; -template<> struct priority_tag<0> {}; - -// taken from ranges-v3 -template -struct static_const -{ - static JSON_INLINE_VARIABLE constexpr T value{}; -}; - -#ifndef JSON_HAS_CPP_17 - template - constexpr T static_const::value; -#endif - -template -inline constexpr std::array make_array(Args&& ... args) -{ - return std::array {{static_cast(std::forward(args))...}}; -} - -} // namespace detail -NLOHMANN_JSON_NAMESPACE_END - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // numeric_limits -#include // false_type, is_constructible, is_integral, is_same, true_type -#include // declval -#include // tuple - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -#include // random_access_iterator_tag - -// #include - -// #include - -// #include - - -NLOHMANN_JSON_NAMESPACE_BEGIN -namespace detail -{ - -template -struct iterator_types {}; - -template -struct iterator_types < - It, - void_t> -{ - using difference_type = typename It::difference_type; - using value_type = typename It::value_type; - using pointer = typename It::pointer; - using reference = typename It::reference; - using iterator_category = typename It::iterator_category; -}; - -// This is required as some compilers implement std::iterator_traits in a way that -// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. -template -struct iterator_traits -{ -}; - -template -struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> - : iterator_types -{ -}; - -template -struct iterator_traits::value>> -{ - using iterator_category = std::random_access_iterator_tag; - using value_type = T; - using difference_type = ptrdiff_t; - using pointer = T*; - using reference = T&; -}; - -} // namespace detail -NLOHMANN_JSON_NAMESPACE_END - -// #include - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -// #include - - -NLOHMANN_JSON_NAMESPACE_BEGIN - -NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); - -NLOHMANN_JSON_NAMESPACE_END - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - - - -// #include - - -NLOHMANN_JSON_NAMESPACE_BEGIN - -NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); - -NLOHMANN_JSON_NAMESPACE_END - -// #include - -// #include - -// #include -// __ _____ _____ _____ -// __| | __| | | | JSON for Modern C++ -// | | |__ | | | | | | version 3.11.2 -// |_____|_____|_____|_|___| https://github.com/nlohmann/json -// -// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann -// SPDX-License-Identifier: MIT - -#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ - #define INCLUDE_NLOHMANN_JSON_FWD_HPP_ - - #include // int64_t, uint64_t - #include // map - #include // allocator - #include // string - #include // vector - - // #include - - - /*! - @brief namespace for Niels Lohmann - @see https://github.com/nlohmann - @since version 1.0.0 - */ - NLOHMANN_JSON_NAMESPACE_BEGIN - - /*! - @brief default JSONSerializer template argument - - This serializer ignores the template arguments and uses ADL - ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) - for serialization. - */ - template - struct adl_serializer; - - /// a class to store JSON values - /// @sa https://json.nlohmann.me/api/basic_json/ - template class ObjectType = - std::map, - template class ArrayType = std::vector, - class StringType = std::string, class BooleanType = bool, - class NumberIntegerType = std::int64_t, - class NumberUnsignedType = std::uint64_t, - class NumberFloatType = double, - template class AllocatorType = std::allocator, - template class JSONSerializer = - adl_serializer, - class BinaryType = std::vector> - class basic_json; - - /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document - /// @sa https://json.nlohmann.me/api/json_pointer/ - template - class json_pointer; - - /*! - @brief default specialization - @sa https://json.nlohmann.me/api/json/ - */ - using json = basic_json<>; - - /// @brief a minimal map-like container that preserves insertion order - /// @sa https://json.nlohmann.me/api/ordered_map/ - template - struct ordered_map; - - /// @brief specialization that maintains the insertion order of object keys - /// @sa https://json.nlohmann.me/api/ordered_json/ - using ordered_json = basic_json; - - NLOHMANN_JSON_NAMESPACE_END - -#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ - - -NLOHMANN_JSON_NAMESPACE_BEGIN -/*! -@brief detail namespace with internal helper functions - -This namespace collects functions that should not be exposed, -implementations of some @ref basic_json methods, and meta-programming helpers. - -@since version 2.1.0 -*/ -namespace detail -{ - -///////////// -// helpers // -///////////// - -// Note to maintainers: -// -// Every trait in this file expects a non CV-qualified type. -// The only exceptions are in the 'aliases for detected' section -// (i.e. those of the form: decltype(T::member_function(std::declval()))) -// -// In this case, T has to be properly CV-qualified to constraint the function arguments -// (e.g. to_json(BasicJsonType&, const T&)) - -template struct is_basic_json : std::false_type {}; - -NLOHMANN_BASIC_JSON_TPL_DECLARATION -struct is_basic_json : std::true_type {}; - -// used by exceptions create() member functions -// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t -// false_type otherwise -template -struct is_basic_json_context : - std::integral_constant < bool, - is_basic_json::type>::type>::value - || std::is_same::value > -{}; - -////////////////////// -// json_ref helpers // -////////////////////// - -template -class json_ref; - -template -struct is_json_ref : std::false_type {}; - -template -struct is_json_ref> : std::true_type {}; - -////////////////////////// -// aliases for detected // -////////////////////////// - -template -using mapped_type_t = typename T::mapped_type; - -template -using key_type_t = typename T::key_type; - -template -using value_type_t = typename T::value_type; - -template -using difference_type_t = typename T::difference_type; - -template -using pointer_t = typename T::pointer; - -template -using reference_t = typename T::reference; - -template -using iterator_category_t = typename T::iterator_category; - -template -using to_json_function = decltype(T::to_json(std::declval()...)); - -template -using from_json_function = decltype(T::from_json(std::declval()...)); - -template -using get_template_function = decltype(std::declval().template get()); - -// trait checking if JSONSerializer::from_json(json const&, udt&) exists -template -struct has_from_json : std::false_type {}; - -// trait checking if j.get is valid -// use this trait instead of std::is_constructible or std::is_convertible, -// both rely on, or make use of implicit conversions, and thus fail when T -// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) -template -struct is_getable -{ - static constexpr bool value = is_detected::value; -}; - -template -struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> -{ - using serializer = typename BasicJsonType::template json_serializer; - - static constexpr bool value = - is_detected_exact::value; -}; - -// This trait checks if JSONSerializer::from_json(json const&) exists -// this overload is used for non-default-constructible user-defined-types -template -struct has_non_default_from_json : std::false_type {}; - -template -struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> -{ - using serializer = typename BasicJsonType::template json_serializer; - - static constexpr bool value = - is_detected_exact::value; -}; - -// This trait checks if BasicJsonType::json_serializer::to_json exists -// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. -template -struct has_to_json : std::false_type {}; - -template -struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> -{ - using serializer = typename BasicJsonType::template json_serializer; - - static constexpr bool value = - is_detected_exact::value; -}; - -template -using detect_key_compare = typename T::key_compare; - -template -struct has_key_compare : std::integral_constant::value> {}; - -// obtains the actual object key comparator -template -struct actual_object_comparator -{ - using object_t = typename BasicJsonType::object_t; - using object_comparator_t = typename BasicJsonType::default_object_comparator_t; - using type = typename std::conditional < has_key_compare::value, - typename object_t::key_compare, object_comparator_t>::type; -}; - -template -using actual_object_comparator_t = typename actual_object_comparator::type; - -/////////////////// -// is_ functions // -/////////////////// - -// https://en.cppreference.com/w/cpp/types/conjunction -template struct conjunction : std::true_type { }; -template struct conjunction : B { }; -template -struct conjunction -: std::conditional(B::value), conjunction, B>::type {}; - -// https://en.cppreference.com/w/cpp/types/negation -template struct negation : std::integral_constant < bool, !B::value > { }; - -// Reimplementation of is_constructible and is_default_constructible, due to them being broken for -// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). -// This causes compile errors in e.g. clang 3.5 or gcc 4.9. -template -struct is_default_constructible : std::is_default_constructible {}; - -template -struct is_default_constructible> - : conjunction, is_default_constructible> {}; - -template -struct is_default_constructible> - : conjunction, is_default_constructible> {}; - -template -struct is_default_constructible> - : conjunction...> {}; - -template -struct is_default_constructible> - : conjunction...> {}; - - -template -struct is_constructible : std::is_constructible {}; - -template -struct is_constructible> : is_default_constructible> {}; - -template -struct is_constructible> : is_default_constructible> {}; - -template -struct is_constructible> : is_default_constructible> {}; - -template -struct is_constructible> : is_default_constructible> {}; - - -template -struct is_iterator_traits : std::false_type {}; - -template -struct is_iterator_traits> -{ - private: - using traits = iterator_traits; - - public: - static constexpr auto value = - is_detected::value && - is_detected::value && - is_detected::value && - is_detected::value && - is_detected::value; -}; - -template -struct is_range -{ - private: - using t_ref = typename std::add_lvalue_reference::type; - - using iterator = detected_t; - using sentinel = detected_t; - - // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator - // and https://en.cppreference.com/w/cpp/iterator/sentinel_for - // but reimplementing these would be too much work, as a lot of other concepts are used underneath - static constexpr auto is_iterator_begin = - is_iterator_traits>::value; - - public: - static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; -}; - -template -using iterator_t = enable_if_t::value, result_of_begin())>>; - -template -using range_value_t = value_type_t>>; - -// The following implementation of is_complete_type is taken from -// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ -// and is written by Xiang Fan who agreed to using it in this library. - -template -struct is_complete_type : std::false_type {}; - -template -struct is_complete_type : std::true_type {}; - -template -struct is_compatible_object_type_impl : std::false_type {}; - -template -struct is_compatible_object_type_impl < - BasicJsonType, CompatibleObjectType, - enable_if_t < is_detected::value&& - is_detected::value >> -{ - using object_t = typename BasicJsonType::object_t; - - // macOS's is_constructible does not play well with nonesuch... - static constexpr bool value = - is_constructible::value && - is_constructible::value; -}; - -template -struct is_compatible_object_type - : is_compatible_object_type_impl {}; - -template -struct is_constructible_object_type_impl : std::false_type {}; - -template -struct is_constructible_object_type_impl < - BasicJsonType, ConstructibleObjectType, - enable_if_t < is_detected::value&& - is_detected::value >> -{ - using object_t = typename BasicJsonType::object_t; - - static constexpr bool value = - (is_default_constructible::value && - (std::is_move_assignable::value || - std::is_copy_assignable::value) && - (is_constructible::value && - std::is_same < - typename object_t::mapped_type, - typename ConstructibleObjectType::mapped_type >::value)) || - (has_from_json::value || - has_non_default_from_json < - BasicJsonType, - typename ConstructibleObjectType::mapped_type >::value); -}; - -template -struct is_constructible_object_type - : is_constructible_object_type_impl {}; - -template -struct is_compatible_string_type -{ - static constexpr auto value = - is_constructible::value; -}; - -template -struct is_constructible_string_type -{ - // launder type through decltype() to fix compilation failure on ICPC -#ifdef __INTEL_COMPILER - using laundered_type = decltype(std::declval()); -#else - using laundered_type = ConstructibleStringType; -#endif - - static constexpr auto value = - conjunction < - is_constructible, - is_detected_exact>::value; -}; - -template -struct is_compatible_array_type_impl : std::false_type {}; - -template -struct is_compatible_array_type_impl < - BasicJsonType, CompatibleArrayType, - enable_if_t < - is_detected::value&& - is_iterator_traits>>::value&& -// special case for types like std::filesystem::path whose iterator's value_type are themselves -// c.f. https://github.com/nlohmann/json/pull/3073 - !std::is_same>::value >> -{ - static constexpr bool value = - is_constructible>::value; -}; - -template -struct is_compatible_array_type - : is_compatible_array_type_impl {}; - -template -struct is_constructible_array_type_impl : std::false_type {}; - -template -struct is_constructible_array_type_impl < - BasicJsonType, ConstructibleArrayType, - enable_if_t::value >> - : std::true_type {}; - -template -struct is_constructible_array_type_impl < - BasicJsonType, ConstructibleArrayType, - enable_if_t < !std::is_same::value&& - !is_compatible_string_type::value&& - is_default_constructible::value&& -(std::is_move_assignable::value || - std::is_copy_assignable::value)&& -is_detected::value&& -is_iterator_traits>>::value&& -is_detected::value&& -// special case for types like std::filesystem::path whose iterator's value_type are themselves -// c.f. https://github.com/nlohmann/json/pull/3073 -!std::is_same>::value&& - is_complete_type < - detected_t>::value >> -{ - using value_type = range_value_t; - - static constexpr bool value = - std::is_same::value || - has_from_json::value || - has_non_default_from_json < - BasicJsonType, - value_type >::value; -}; - -template -struct is_constructible_array_type - : is_constructible_array_type_impl {}; - -template -struct is_compatible_integer_type_impl : std::false_type {}; - -template -struct is_compatible_integer_type_impl < - RealIntegerType, CompatibleNumberIntegerType, - enable_if_t < std::is_integral::value&& - std::is_integral::value&& - !std::is_same::value >> -{ - // is there an assert somewhere on overflows? - using RealLimits = std::numeric_limits; - using CompatibleLimits = std::numeric_limits; - - static constexpr auto value = - is_constructible::value && - CompatibleLimits::is_integer && - RealLimits::is_signed == CompatibleLimits::is_signed; -}; - -template -struct is_compatible_integer_type - : is_compatible_integer_type_impl {}; - -template -struct is_compatible_type_impl: std::false_type {}; - -template -struct is_compatible_type_impl < - BasicJsonType, CompatibleType, - enable_if_t::value >> -{ - static constexpr bool value = - has_to_json::value; -}; - -template -struct is_compatible_type - : is_compatible_type_impl {}; - -template -struct is_constructible_tuple : std::false_type {}; - -template -struct is_constructible_tuple> : conjunction...> {}; - -template -struct is_json_iterator_of : std::false_type {}; - -template -struct is_json_iterator_of : std::true_type {}; - -template -struct is_json_iterator_of : std::true_type -{}; - -// checks if a given type T is a template specialization of Primary -template