From 8c0e722a847f34d3ebcaa451665530d94e539f90 Mon Sep 17 00:00:00 2001 From: sebasbad Date: Mon, 27 Jul 2026 17:37:01 +0200 Subject: [PATCH 1/2] fix(flutter): add plugin platform declarations and vendored iOS Llama.xcframework podspec --- ios/Llama.xcframework/Info.plist | 58 + .../Llama.framework/Headers/ggml-alloc.h | 76 + .../Llama.framework/Headers/ggml-backend.h | 372 +++ .../Llama.framework/Headers/ggml-blas.h | 25 + .../Llama.framework/Headers/ggml-cann.h | 123 + .../Llama.framework/Headers/ggml-cpp.h | 39 + .../Llama.framework/Headers/ggml-cpu.h | 145 + .../Llama.framework/Headers/ggml-cuda.h | 47 + .../Llama.framework/Headers/ggml-hexagon.h | 19 + .../Llama.framework/Headers/ggml-metal.h | 61 + .../Llama.framework/Headers/ggml-opencl.h | 26 + .../Llama.framework/Headers/ggml-opt.h | 256 ++ .../Llama.framework/Headers/ggml-rpc.h | 31 + .../Llama.framework/Headers/ggml-sycl.h | 49 + .../Llama.framework/Headers/ggml-vulkan.h | 29 + .../Llama.framework/Headers/ggml-webgpu.h | 19 + .../Llama.framework/Headers/ggml-zdnn.h | 17 + .../ios-arm64/Llama.framework/Headers/ggml.h | 2614 +++++++++++++++++ .../ios-arm64/Llama.framework/Headers/gguf.h | 202 ++ .../Llama.framework/Headers/llama-cpp.h | 30 + .../ios-arm64/Llama.framework/Headers/llama.h | 1414 +++++++++ .../ios-arm64/Llama.framework/Info.plist | 24 + .../ios-arm64/Llama.framework/Llama | Bin 0 -> 622016 bytes .../Llama.framework/Headers/ggml-alloc.h | 76 + .../Llama.framework/Headers/ggml-backend.h | 372 +++ .../Llama.framework/Headers/ggml-blas.h | 25 + .../Llama.framework/Headers/ggml-cann.h | 123 + .../Llama.framework/Headers/ggml-cpp.h | 39 + .../Llama.framework/Headers/ggml-cpu.h | 145 + .../Llama.framework/Headers/ggml-cuda.h | 47 + .../Llama.framework/Headers/ggml-hexagon.h | 19 + .../Llama.framework/Headers/ggml-metal.h | 61 + .../Llama.framework/Headers/ggml-opencl.h | 26 + .../Llama.framework/Headers/ggml-opt.h | 256 ++ .../Llama.framework/Headers/ggml-rpc.h | 31 + .../Llama.framework/Headers/ggml-sycl.h | 49 + .../Llama.framework/Headers/ggml-vulkan.h | 29 + .../Llama.framework/Headers/ggml-webgpu.h | 19 + .../Llama.framework/Headers/ggml-zdnn.h | 17 + .../Llama.framework/Headers/ggml.h | 2614 +++++++++++++++++ .../Llama.framework/Headers/gguf.h | 202 ++ .../Llama.framework/Headers/llama-cpp.h | 30 + .../Llama.framework/Headers/llama.h | 1414 +++++++++ .../Llama.framework/Info.plist | 24 + .../Llama.framework/Llama | Bin 0 -> 1277312 bytes .../Llama.framework/Headers/ggml-alloc.h | 76 + .../Llama.framework/Headers/ggml-backend.h | 372 +++ .../Llama.framework/Headers/ggml-blas.h | 25 + .../Llama.framework/Headers/ggml-cann.h | 123 + .../Llama.framework/Headers/ggml-cpp.h | 39 + .../Llama.framework/Headers/ggml-cpu.h | 145 + .../Llama.framework/Headers/ggml-cuda.h | 47 + .../Llama.framework/Headers/ggml-hexagon.h | 19 + .../Llama.framework/Headers/ggml-metal.h | 61 + .../Llama.framework/Headers/ggml-opencl.h | 26 + .../Llama.framework/Headers/ggml-opt.h | 256 ++ .../Llama.framework/Headers/ggml-rpc.h | 31 + .../Llama.framework/Headers/ggml-sycl.h | 49 + .../Llama.framework/Headers/ggml-vulkan.h | 29 + .../Llama.framework/Headers/ggml-webgpu.h | 19 + .../Llama.framework/Headers/ggml-zdnn.h | 17 + .../Llama.framework/Headers/ggml.h | 2614 +++++++++++++++++ .../Llama.framework/Headers/gguf.h | 202 ++ .../Llama.framework/Headers/llama-cpp.h | 30 + .../Llama.framework/Headers/llama.h | 1414 +++++++++ .../macos-arm64/Llama.framework/Info.plist | 24 + .../macos-arm64/Llama.framework/Llama | Bin 0 -> 617840 bytes ios/llama_cpp_dart.podspec | 18 + pubspec.yaml | 14 + 69 files changed, 16944 insertions(+) create mode 100644 ios/Llama.xcframework/Info.plist create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-alloc.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-backend.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-blas.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cann.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cpp.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cpu.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cuda.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-hexagon.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-metal.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-opencl.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-opt.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-rpc.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-sycl.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-vulkan.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-webgpu.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-zdnn.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/gguf.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/llama-cpp.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/llama.h create mode 100644 ios/Llama.xcframework/ios-arm64/Llama.framework/Info.plist create mode 100755 ios/Llama.xcframework/ios-arm64/Llama.framework/Llama create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-alloc.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-backend.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-blas.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cann.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cpp.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cpu.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cuda.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-hexagon.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-metal.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-opencl.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-opt.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-rpc.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-sycl.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-vulkan.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-webgpu.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-zdnn.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/gguf.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/llama-cpp.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/llama.h create mode 100644 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Info.plist create mode 100755 ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Llama create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-alloc.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-backend.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-blas.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cann.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cpp.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cpu.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cuda.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-hexagon.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-metal.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-opencl.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-opt.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-rpc.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-sycl.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-vulkan.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-webgpu.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-zdnn.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/gguf.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/llama-cpp.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/llama.h create mode 100644 ios/Llama.xcframework/macos-arm64/Llama.framework/Info.plist create mode 100755 ios/Llama.xcframework/macos-arm64/Llama.framework/Llama create mode 100644 ios/llama_cpp_dart.podspec diff --git a/ios/Llama.xcframework/Info.plist b/ios/Llama.xcframework/Info.plist new file mode 100644 index 00000000..181a9175 --- /dev/null +++ b/ios/Llama.xcframework/Info.plist @@ -0,0 +1,58 @@ + + + + + AvailableLibraries + + + BinaryPath + Llama.framework/Llama + LibraryIdentifier + ios-arm64_x86_64-simulator + LibraryPath + Llama.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + simulator + + + BinaryPath + Llama.framework/Llama + LibraryIdentifier + ios-arm64 + LibraryPath + Llama.framework + SupportedArchitectures + + arm64 + + SupportedPlatform + ios + + + BinaryPath + Llama.framework/Llama + LibraryIdentifier + macos-arm64 + LibraryPath + Llama.framework + SupportedArchitectures + + arm64 + + SupportedPlatform + macos + + + CFBundlePackageType + XFWK + XCFrameworkFormatVersion + 1.0 + + diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-alloc.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-alloc.h new file mode 100644 index 00000000..2cb150fd --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-alloc.h @@ -0,0 +1,76 @@ +#pragma once + +#include "ggml.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ggml_backend_buffer_type * ggml_backend_buffer_type_t; +typedef struct ggml_backend_buffer * ggml_backend_buffer_t; +typedef struct ggml_backend * ggml_backend_t; + +// Tensor allocator +struct ggml_tallocr { + ggml_backend_buffer_t buffer; + void * base; + size_t alignment; + size_t offset; +}; + +GGML_API struct ggml_tallocr ggml_tallocr_new(ggml_backend_buffer_t buffer); +GGML_API enum ggml_status ggml_tallocr_alloc(struct ggml_tallocr * talloc, struct ggml_tensor * tensor); + +// Graph allocator +/* + Example usage: + ggml_gallocr_t galloc = ggml_gallocr_new(ggml_backend_cpu_buffer_type()); + + // optional: create a worst-case graph and reserve the buffers to avoid reallocations + ggml_gallocr_reserve(galloc, build_graph(max_batch)); + + // allocate the graph + struct ggml_cgraph * graph = build_graph(batch); + ggml_gallocr_alloc_graph(galloc, graph); + + printf("compute buffer size: %zu bytes\n", ggml_gallocr_get_buffer_size(galloc, 0)); + + // evaluate the graph + ggml_backend_graph_compute(backend, graph); +*/ + +// special tensor flags for use with the graph allocator: +// ggml_set_input(): all input tensors are allocated at the beginning of the graph in non-overlapping addresses +// ggml_set_output(): output tensors are never freed and never overwritten + +typedef struct ggml_gallocr * ggml_gallocr_t; + +GGML_API ggml_gallocr_t ggml_gallocr_new(ggml_backend_buffer_type_t buft); +GGML_API ggml_gallocr_t ggml_gallocr_new_n(ggml_backend_buffer_type_t * bufts, int n_bufs); +GGML_API void ggml_gallocr_free(ggml_gallocr_t galloc); + +// pre-allocate buffers from a measure graph - does not allocate or modify the graph +// call with a worst-case graph to avoid buffer reallocations +// not strictly required for single buffer usage: ggml_gallocr_alloc_graph will reallocate the buffers automatically if needed +// returns false if the buffer allocation failed +GGML_API bool ggml_gallocr_reserve(ggml_gallocr_t galloc, struct ggml_cgraph * graph); +GGML_API bool ggml_gallocr_reserve_n( + ggml_gallocr_t galloc, + struct ggml_cgraph * graph, + const int * node_buffer_ids, + const int * leaf_buffer_ids); + +// automatic reallocation if the topology changes when using a single buffer +// returns false if using multiple buffers and a re-allocation is needed (call ggml_gallocr_reserve_n first to set the node buffers) +GGML_API bool ggml_gallocr_alloc_graph(ggml_gallocr_t galloc, struct ggml_cgraph * graph); + +GGML_API size_t ggml_gallocr_get_buffer_size(ggml_gallocr_t galloc, int buffer_id); + +// Utils +// Create a buffer and allocate all the tensors in a ggml_context +GGML_API struct ggml_backend_buffer * ggml_backend_alloc_ctx_tensors_from_buft(struct ggml_context * ctx, ggml_backend_buffer_type_t buft); +GGML_API struct ggml_backend_buffer * ggml_backend_alloc_ctx_tensors(struct ggml_context * ctx, ggml_backend_t backend); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-backend.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-backend.h new file mode 100644 index 00000000..f1b74078 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-backend.h @@ -0,0 +1,372 @@ +#pragma once + +#include "ggml.h" +#include "ggml-alloc.h" + +#ifdef GGML_BACKEND_SHARED +# if defined(_WIN32) && !defined(__MINGW32__) +# ifdef GGML_BACKEND_BUILD +# define GGML_BACKEND_API __declspec(dllexport) extern +# else +# define GGML_BACKEND_API __declspec(dllimport) extern +# endif +# else +# define GGML_BACKEND_API __attribute__ ((visibility ("default"))) extern +# endif +#else +# define GGML_BACKEND_API extern +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + typedef struct ggml_backend_buffer_type * ggml_backend_buffer_type_t; + typedef struct ggml_backend_buffer * ggml_backend_buffer_t; + typedef struct ggml_backend_event * ggml_backend_event_t; + typedef struct ggml_backend * ggml_backend_t; + typedef void * ggml_backend_graph_plan_t; + typedef struct ggml_backend_reg * ggml_backend_reg_t; + typedef struct ggml_backend_device * ggml_backend_dev_t; + + + // + // Backend buffer type + // + + GGML_API const char * ggml_backend_buft_name (ggml_backend_buffer_type_t buft); + GGML_API ggml_backend_buffer_t ggml_backend_buft_alloc_buffer (ggml_backend_buffer_type_t buft, size_t size); + GGML_API size_t ggml_backend_buft_get_alignment (ggml_backend_buffer_type_t buft); + GGML_API size_t ggml_backend_buft_get_max_size (ggml_backend_buffer_type_t buft); + GGML_API size_t ggml_backend_buft_get_alloc_size(ggml_backend_buffer_type_t buft, const struct ggml_tensor * tensor); + GGML_API bool ggml_backend_buft_is_host (ggml_backend_buffer_type_t buft); + GGML_API ggml_backend_dev_t ggml_backend_buft_get_device (ggml_backend_buffer_type_t buft); + + // + // Backend buffer + // + + enum ggml_backend_buffer_usage { + GGML_BACKEND_BUFFER_USAGE_ANY = 0, + GGML_BACKEND_BUFFER_USAGE_WEIGHTS = 1, + GGML_BACKEND_BUFFER_USAGE_COMPUTE = 2, + }; + + GGML_API const char * ggml_backend_buffer_name (ggml_backend_buffer_t buffer); + GGML_API void ggml_backend_buffer_free (ggml_backend_buffer_t buffer); + GGML_API void * ggml_backend_buffer_get_base (ggml_backend_buffer_t buffer); + GGML_API size_t ggml_backend_buffer_get_size (ggml_backend_buffer_t buffer); + GGML_API enum ggml_status ggml_backend_buffer_init_tensor (ggml_backend_buffer_t buffer, struct ggml_tensor * tensor); + GGML_API size_t ggml_backend_buffer_get_alignment (ggml_backend_buffer_t buffer); + GGML_API size_t ggml_backend_buffer_get_max_size (ggml_backend_buffer_t buffer); + GGML_API size_t ggml_backend_buffer_get_alloc_size(ggml_backend_buffer_t buffer, const struct ggml_tensor * tensor); + GGML_API void ggml_backend_buffer_clear (ggml_backend_buffer_t buffer, uint8_t value); + GGML_API bool ggml_backend_buffer_is_host (ggml_backend_buffer_t buffer); + GGML_API void ggml_backend_buffer_set_usage (ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage); + GGML_API enum ggml_backend_buffer_usage ggml_backend_buffer_get_usage (ggml_backend_buffer_t buffer); + GGML_API ggml_backend_buffer_type_t ggml_backend_buffer_get_type (ggml_backend_buffer_t buffer); + GGML_API void ggml_backend_buffer_reset (ggml_backend_buffer_t buffer); + + // tensor copy between different backends + GGML_API void ggml_backend_tensor_copy(struct ggml_tensor * src, struct ggml_tensor * dst); + + // + // Backend (stream) + // + + GGML_API ggml_guid_t ggml_backend_guid(ggml_backend_t backend); + GGML_API const char * ggml_backend_name(ggml_backend_t backend); + GGML_API void ggml_backend_free(ggml_backend_t backend); + + GGML_API ggml_backend_buffer_type_t ggml_backend_get_default_buffer_type(ggml_backend_t backend); + GGML_API ggml_backend_buffer_t ggml_backend_alloc_buffer(ggml_backend_t backend, size_t size); + GGML_API size_t ggml_backend_get_alignment(ggml_backend_t backend); + GGML_API size_t ggml_backend_get_max_size(ggml_backend_t backend); + + GGML_API void ggml_backend_tensor_set_async(ggml_backend_t backend, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size); + GGML_API void ggml_backend_tensor_get_async(ggml_backend_t backend, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size); + + // "offset" refers to the offset in tensor->data for setting/getting data + GGML_API void ggml_backend_tensor_set( struct ggml_tensor * tensor, const void * data, size_t offset, size_t size); + GGML_API void ggml_backend_tensor_get(const struct ggml_tensor * tensor, void * data, size_t offset, size_t size); + GGML_API void ggml_backend_tensor_memset( struct ggml_tensor * tensor, uint8_t value, size_t offset, size_t size); + + GGML_API void ggml_backend_synchronize(ggml_backend_t backend); + + GGML_API ggml_backend_graph_plan_t ggml_backend_graph_plan_create(ggml_backend_t backend, struct ggml_cgraph * cgraph); + GGML_API void ggml_backend_graph_plan_free (ggml_backend_t backend, ggml_backend_graph_plan_t plan); + + GGML_API enum ggml_status ggml_backend_graph_plan_compute (ggml_backend_t backend, ggml_backend_graph_plan_t plan); + GGML_API enum ggml_status ggml_backend_graph_compute (ggml_backend_t backend, struct ggml_cgraph * cgraph); + GGML_API enum ggml_status ggml_backend_graph_compute_async(ggml_backend_t backend, struct ggml_cgraph * cgraph); + + // NOTE: will be removed, use device version instead + GGML_API bool ggml_backend_supports_op(ggml_backend_t backend, const struct ggml_tensor * op); + GGML_API bool ggml_backend_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft); + GGML_API bool ggml_backend_offload_op(ggml_backend_t backend, const struct ggml_tensor * op); + + // asynchronous copy + // the copy is performed after all the currently queued operations in backend_src + // backend_dst will wait for the copy to complete before performing other operations + // automatic fallback to sync copy if async is not supported + GGML_API void ggml_backend_tensor_copy_async(ggml_backend_t backend_src, ggml_backend_t backend_dst, struct ggml_tensor * src, struct ggml_tensor * dst); + + GGML_API ggml_backend_dev_t ggml_backend_get_device(ggml_backend_t backend); + + // + // Events + // + + GGML_API ggml_backend_event_t ggml_backend_event_new(ggml_backend_dev_t device); + GGML_API void ggml_backend_event_free(ggml_backend_event_t event); + GGML_API void ggml_backend_event_record(ggml_backend_event_t event, ggml_backend_t backend); + GGML_API void ggml_backend_event_synchronize(ggml_backend_event_t event); + GGML_API void ggml_backend_event_wait(ggml_backend_t backend, ggml_backend_event_t event); + + // + // Backend device + // + + enum ggml_backend_dev_type { + // CPU device using system memory + GGML_BACKEND_DEVICE_TYPE_CPU, + // GPU device using dedicated memory + GGML_BACKEND_DEVICE_TYPE_GPU, + // integrated GPU device using host memory + GGML_BACKEND_DEVICE_TYPE_IGPU, + // accelerator devices intended to be used together with the CPU backend (e.g. BLAS or AMX) + GGML_BACKEND_DEVICE_TYPE_ACCEL + }; + + // functionality supported by the device + struct ggml_backend_dev_caps { + // asynchronous operations + bool async; + // pinned host buffer + bool host_buffer; + // creating buffers from host ptr + bool buffer_from_host_ptr; + // event synchronization + bool events; + }; + + // all the device properties + struct ggml_backend_dev_props { + // device name + const char * name; + // device description + const char * description; + // device free memory in bytes + size_t memory_free; + // device total memory in bytes + size_t memory_total; + // device type + enum ggml_backend_dev_type type; + // device id + // for PCI devices, this should be the PCI bus id formatted as "domain:bus:device.function" (e.g. "0000:01:00.0") + // if the id is unknown, this should be NULL + const char * device_id; + // device capabilities + struct ggml_backend_dev_caps caps; + }; + + GGML_API const char * ggml_backend_dev_name(ggml_backend_dev_t device); + GGML_API const char * ggml_backend_dev_description(ggml_backend_dev_t device); + GGML_API void ggml_backend_dev_memory(ggml_backend_dev_t device, size_t * free, size_t * total); + GGML_API enum ggml_backend_dev_type ggml_backend_dev_type(ggml_backend_dev_t device); + GGML_API void ggml_backend_dev_get_props(ggml_backend_dev_t device, struct ggml_backend_dev_props * props); + GGML_API ggml_backend_reg_t ggml_backend_dev_backend_reg(ggml_backend_dev_t device); + GGML_API ggml_backend_t ggml_backend_dev_init(ggml_backend_dev_t device, const char * params); + GGML_API ggml_backend_buffer_type_t ggml_backend_dev_buffer_type(ggml_backend_dev_t device); + GGML_API ggml_backend_buffer_type_t ggml_backend_dev_host_buffer_type(ggml_backend_dev_t device); + GGML_API ggml_backend_buffer_t ggml_backend_dev_buffer_from_host_ptr(ggml_backend_dev_t device, void * ptr, size_t size, size_t max_tensor_size); + + GGML_API bool ggml_backend_dev_supports_op(ggml_backend_dev_t device, const struct ggml_tensor * op); + GGML_API bool ggml_backend_dev_supports_buft(ggml_backend_dev_t device, ggml_backend_buffer_type_t buft); + GGML_API bool ggml_backend_dev_offload_op(ggml_backend_dev_t device, const struct ggml_tensor * op); + + // + // Backend (reg) + // + + GGML_API const char * ggml_backend_reg_name(ggml_backend_reg_t reg); + GGML_API size_t ggml_backend_reg_dev_count(ggml_backend_reg_t reg); + GGML_API ggml_backend_dev_t ggml_backend_reg_dev_get(ggml_backend_reg_t reg, size_t index); + GGML_API void * ggml_backend_reg_get_proc_address(ggml_backend_reg_t reg, const char * name); + + // Common functions that may be obtained using ggml_backend_reg_get_proc_address + + // Split buffer type for tensor parallelism + typedef ggml_backend_buffer_type_t (*ggml_backend_split_buffer_type_t)(int main_device, const float * tensor_split); + // Set the number of threads for the backend + typedef void (*ggml_backend_set_n_threads_t)(ggml_backend_t backend, int n_threads); + // Get additional buffer types provided by the device (returns a NULL-terminated array) + typedef ggml_backend_buffer_type_t * (*ggml_backend_dev_get_extra_bufts_t)(ggml_backend_dev_t device); + // Set the abort callback for the backend + typedef void (*ggml_backend_set_abort_callback_t)(ggml_backend_t backend, ggml_abort_callback abort_callback, void * abort_callback_data); + // Get a list of feature flags supported by the backend (returns a NULL-terminated array) + struct ggml_backend_feature { + const char * name; + const char * value; + }; + typedef struct ggml_backend_feature * (*ggml_backend_get_features_t)(ggml_backend_reg_t reg); + + // + // Backend registry + // + + GGML_API void ggml_backend_register(ggml_backend_reg_t reg); + + GGML_API void ggml_backend_device_register(ggml_backend_dev_t device); + + // Backend (reg) enumeration + GGML_API size_t ggml_backend_reg_count(void); + GGML_API ggml_backend_reg_t ggml_backend_reg_get(size_t index); + GGML_API ggml_backend_reg_t ggml_backend_reg_by_name(const char * name); + + // Device enumeration + GGML_API size_t ggml_backend_dev_count(void); + GGML_API ggml_backend_dev_t ggml_backend_dev_get(size_t index); + GGML_API ggml_backend_dev_t ggml_backend_dev_by_name(const char * name); + GGML_API ggml_backend_dev_t ggml_backend_dev_by_type(enum ggml_backend_dev_type type); + + // Direct backend (stream) initialization + // = ggml_backend_dev_init(ggml_backend_dev_by_name(name), params) + GGML_API ggml_backend_t ggml_backend_init_by_name(const char * name, const char * params); + // = ggml_backend_dev_init(ggml_backend_dev_by_type(type), params) + GGML_API ggml_backend_t ggml_backend_init_by_type(enum ggml_backend_dev_type type, const char * params); + // = ggml_backend_dev_init(ggml_backend_dev_by_type(GPU) OR ggml_backend_dev_by_type(CPU), NULL) + GGML_API ggml_backend_t ggml_backend_init_best(void); + + // Load a backend from a dynamic library and register it + GGML_API ggml_backend_reg_t ggml_backend_load(const char * path); + // Unload a backend if loaded dynamically and unregister it + GGML_API void ggml_backend_unload(ggml_backend_reg_t reg); + // Load all known backends from dynamic libraries + GGML_API void ggml_backend_load_all(void); + GGML_API void ggml_backend_load_all_from_path(const char * dir_path); + + // + // Backend scheduler + // + + // The backend scheduler allows for multiple backend devices to be used together + // Handles compute buffer allocation, assignment of tensors to backends, and copying of tensors between backends + // The backends are selected based on: + // - the backend that supports the operation + // - the location of the pre-allocated tensors (e.g. the weights) + /* + Example usage: + + // operations that use tensors allocated in a buffer with USAGE_WEIGHTS will be assigned + // preferrably to run on the same backend as the buffer + ggml_backend_buffer_set_usage(buf_weights, GGML_BACKEND_BUFFER_USAGE_WEIGHTS); + + sched = ggml_backend_sched_new({backend_gpu, backend_gpu2, backend_cpu}, NULL, num_backends, GGML_DEFAULT_GRAPH_SIZE, false, true); + + // initialize buffers from a max size graph (optional) + reserve_graph = build_graph(sched, max_batch_size); + + // manually assign nodes to a backend (optional, should not be needed in most cases) + struct ggml_tensor * node = ggml_mul_mat(ctx, ...); + ggml_backend_sched_set_tensor_backend(sched, node, backend_gpu); + + ggml_backend_sched_reserve(sched, reserve_graph); + + // compute + graph = build_graph(sched); // the graph and its tensors are single-use in terms of allocation, multi-use in terms of computation + for (int i = 0; i < 10; ++i) { + ggml_backend_sched_graph_compute(sched, graph); // on the first iteration the graph is allocated automatically + } + + // if there are graph inputs: + graph = build_graph(sched); // get a new graph that is not allocated (the metadata for the old graph is freed once ggml_free is called) + ggml_backend_sched_reset(sched); // clear the allocation of the previous graph + ggml_backend_sched_alloc_graph(sched, graph); // explicitly allocate the new graph but do not execute it + ggml_backend_tensor_set(input_tensor, ...); // copy data to the newly allocated graph tensors + ggml_backend_sched_graph_compute(sched, graph); // execute the graph + + // as an alternative to the above it is also possible to assign the inputs to a dedicated context and + // allocate them statically via ggml_backend_alloc_ctx_tensors + } + */ + + typedef struct ggml_backend_sched * ggml_backend_sched_t; + + // Evaluation callback for each node in the graph (set with ggml_backend_sched_set_eval_callback) + // when ask == true, the scheduler wants to know if the user wants to observe this node + // this allows the scheduler to batch nodes together in order to evaluate them in a single call + // + // when ask == false, the scheduler is passing the node tensor to the user for observation + // if the user returns false, the scheduler will cancel the graph compute + // + typedef bool (*ggml_backend_sched_eval_callback)(struct ggml_tensor * t, bool ask, void * user_data); + + // Initialize a backend scheduler, backends with low index are given priority over backends with high index + GGML_API ggml_backend_sched_t ggml_backend_sched_new(ggml_backend_t * backends, ggml_backend_buffer_type_t * bufts, int n_backends, size_t graph_size, bool parallel, bool op_offload); + GGML_API void ggml_backend_sched_free(ggml_backend_sched_t sched); + + // Initialize backend buffers from a measure graph + GGML_API bool ggml_backend_sched_reserve(ggml_backend_sched_t sched, struct ggml_cgraph * measure_graph); // returns success + + GGML_API int ggml_backend_sched_get_n_backends(ggml_backend_sched_t sched); + GGML_API ggml_backend_t ggml_backend_sched_get_backend(ggml_backend_sched_t sched, int i); + + // Get the number of splits of the last graph + GGML_API int ggml_backend_sched_get_n_splits(ggml_backend_sched_t sched); + GGML_API int ggml_backend_sched_get_n_copies(ggml_backend_sched_t sched); + + GGML_API ggml_backend_buffer_type_t ggml_backend_sched_get_buffer_type(ggml_backend_sched_t sched, ggml_backend_t backend); + GGML_API size_t ggml_backend_sched_get_buffer_size(ggml_backend_sched_t sched, ggml_backend_t backend); + + GGML_API void ggml_backend_sched_set_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node, ggml_backend_t backend); + GGML_API ggml_backend_t ggml_backend_sched_get_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node); + + // Split graph without allocating it + GGML_API void ggml_backend_sched_split_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph); + + // Allocate and compute graph on the backend scheduler + GGML_API bool ggml_backend_sched_alloc_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph); // returns success + GGML_API enum ggml_status ggml_backend_sched_graph_compute(ggml_backend_sched_t sched, struct ggml_cgraph * graph); + GGML_API enum ggml_status ggml_backend_sched_graph_compute_async(ggml_backend_sched_t sched, struct ggml_cgraph * graph); + GGML_API void ggml_backend_sched_synchronize(ggml_backend_sched_t sched); + + // Reset all assignments and allocators - must be called before changing the node backends or allocating a new graph. + // This in effect deallocates all tensors that were previously allocated and leaves them with dangling pointers. + // The correct way to use this API is to discard the deallocated tensors and create new ones. + GGML_API void ggml_backend_sched_reset(ggml_backend_sched_t sched); + + // Set a callback to be called for each resulting node during graph compute + GGML_API void ggml_backend_sched_set_eval_callback(ggml_backend_sched_t sched, ggml_backend_sched_eval_callback callback, void * user_data); + + // + // Utils + // + + struct ggml_backend_graph_copy { + ggml_backend_buffer_t buffer; + struct ggml_context * ctx_allocated; + struct ggml_context * ctx_unallocated; + struct ggml_cgraph * graph; + }; + + // Copy a graph to a different backend + GGML_API struct ggml_backend_graph_copy ggml_backend_graph_copy(ggml_backend_t backend, struct ggml_cgraph * graph); + GGML_API void ggml_backend_graph_copy_free(struct ggml_backend_graph_copy copy); + + typedef bool (*ggml_backend_eval_callback)(int node_index, struct ggml_tensor * t1, struct ggml_tensor * t2, void * user_data); + + // Compare the output of two backends + GGML_API bool ggml_backend_compare_graph_backend(ggml_backend_t backend1, ggml_backend_t backend2, struct ggml_cgraph * graph, ggml_backend_eval_callback callback, void * user_data, struct ggml_tensor * test_node); + + // Tensor initialization + GGML_API enum ggml_status ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, void * addr); + GGML_API enum ggml_status ggml_backend_view_init(struct ggml_tensor * tensor); + + // CPU buffer types are always available + GGML_API ggml_backend_buffer_t ggml_backend_cpu_buffer_from_ptr(void * ptr, size_t size); + GGML_API ggml_backend_buffer_type_t ggml_backend_cpu_buffer_type(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-blas.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-blas.h new file mode 100644 index 00000000..87a81b36 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-blas.h @@ -0,0 +1,25 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_blas_init(void); + +GGML_BACKEND_API bool ggml_backend_is_blas(ggml_backend_t backend); + +// number of threads used for conversion to float +// for openblas and blis, this will also set the number of threads used for blas operations +GGML_BACKEND_API void ggml_backend_blas_set_n_threads(ggml_backend_t backend_blas, int n_threads); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_blas_reg(void); + + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cann.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cann.h new file mode 100644 index 00000000..b469e228 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cann.h @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2023-2024 The ggml authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#pragma once + +#include "ggml-backend.h" +#include "ggml.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Maximum number of CANN devices supported. + */ +#define GGML_CANN_MAX_DEVICES 16 + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_cann_reg(void); + +/** + * @brief Initializes the CANN backend for a specified device. + * + * This function initializes the CANN backend for the given device. + * It verifies the device index, allocates a context, and creates a backend + * instance. + * + * @param device The index of the device to initialize. + * @return A pointer to the initialized backend instance, or nullptr on failure. + */ +GGML_BACKEND_API ggml_backend_t ggml_backend_cann_init(int32_t device); + +/** + * @brief Checks if a given backend is a CANN backend. + * + * This function verifies if the provided backend is a CANN backend by comparing + * its GUID with the CANN backend's GUID. + * + * @param backend The backend instance to check. + * @return True if the backend is a CANN backend, false otherwise. + */ +GGML_BACKEND_API bool ggml_backend_is_cann(ggml_backend_t backend); + +/** + * @brief Retrieves the CANN buffer type for a specified device. + * + * This function initializes and returns the buffer type interface associated + * with the given device. It ensures thread-safe access using a mutex. + * + * @param device The device index for which to retrieve the buffer type. + * @return A pointer to the buffer type interface for the specified device, or + * nullptr if the device index is out of range. + */ +GGML_BACKEND_API ggml_backend_buffer_type_t +ggml_backend_cann_buffer_type(int32_t device); + +/** + * @brief Retrieves the number of CANN devices available. + * + * This function returns the number of CANN devices available based on + * information obtained from `ggml_cann_info()`. + * + * @return The number of CANN devices available. + */ +GGML_BACKEND_API int32_t ggml_backend_cann_get_device_count(void); + +/** + * @brief pinned host buffer for use with the CPU backend for faster copies between CPU and NPU. + * + * @return A pointer to the host buffer type interface. + */ +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_cann_host_buffer_type(void); + +/** + * @brief Retrieves the description of a specific CANN device. + * + * This function sets the specified device, retrieves the SoC name, + * and writes it into the provided description buffer. + * + * @param device The device index to retrieve the description for. + * @param description Pointer to a buffer where the description will be written. + * @param description_size Size of the description buffer. + */ +GGML_BACKEND_API void ggml_backend_cann_get_device_description( + int32_t device, char* description, size_t description_size); + +/** + * @brief Retrieves the memory information of a specific CANN device. + * + * This function sets the specified device, retrieves the free and total + * memory information of the specified type (ACL_HBM_MEM), and stores them + * in the provided pointers. + * + * @param device The device index to retrieve memory information for. + * @param free Pointer to a variable where the free memory size will be stored. + * @param total Pointer to a variable where the total memory size will be + * stored. + */ +GGML_BACKEND_API void ggml_backend_cann_get_device_memory(int32_t device, + size_t* free, + size_t* total); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cpp.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cpp.h new file mode 100644 index 00000000..48aa7968 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cpp.h @@ -0,0 +1,39 @@ +#pragma once + +#ifndef __cplusplus +#error "This header is for C++ only" +#endif + +#include "ggml.h" +#include "ggml-alloc.h" +#include "ggml-backend.h" +#include "gguf.h" +#include + +// Smart pointers for ggml types + +// ggml + +struct ggml_context_deleter { void operator()(ggml_context * ctx) { ggml_free(ctx); } }; +struct gguf_context_deleter { void operator()(gguf_context * ctx) { gguf_free(ctx); } }; + +typedef std::unique_ptr ggml_context_ptr; +typedef std::unique_ptr gguf_context_ptr; + +// ggml-alloc + +struct ggml_gallocr_deleter { void operator()(ggml_gallocr_t galloc) { ggml_gallocr_free(galloc); } }; + +typedef std::unique_ptr ggml_gallocr_ptr; + +// ggml-backend + +struct ggml_backend_deleter { void operator()(ggml_backend_t backend) { ggml_backend_free(backend); } }; +struct ggml_backend_buffer_deleter { void operator()(ggml_backend_buffer_t buffer) { ggml_backend_buffer_free(buffer); } }; +struct ggml_backend_event_deleter { void operator()(ggml_backend_event_t event) { ggml_backend_event_free(event); } }; +struct ggml_backend_sched_deleter { void operator()(ggml_backend_sched_t sched) { ggml_backend_sched_free(sched); } }; + +typedef std::unique_ptr ggml_backend_ptr; +typedef std::unique_ptr ggml_backend_buffer_ptr; +typedef std::unique_ptr ggml_backend_event_ptr; +typedef std::unique_ptr ggml_backend_sched_ptr; diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cpu.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cpu.h new file mode 100644 index 00000000..9edd4851 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cpu.h @@ -0,0 +1,145 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + + // the compute plan that needs to be prepared for ggml_graph_compute() + // since https://github.com/ggml-org/ggml/issues/287 + struct ggml_cplan { + size_t work_size; // size of work buffer, calculated by `ggml_graph_plan()` + uint8_t * work_data; // work buffer, to be allocated by caller before calling to `ggml_graph_compute()` + + int n_threads; + struct ggml_threadpool * threadpool; + + // abort ggml_graph_compute when true + ggml_abort_callback abort_callback; + void * abort_callback_data; + }; + + // numa strategies + enum ggml_numa_strategy { + GGML_NUMA_STRATEGY_DISABLED = 0, + GGML_NUMA_STRATEGY_DISTRIBUTE = 1, + GGML_NUMA_STRATEGY_ISOLATE = 2, + GGML_NUMA_STRATEGY_NUMACTL = 3, + GGML_NUMA_STRATEGY_MIRROR = 4, + GGML_NUMA_STRATEGY_COUNT + }; + + GGML_BACKEND_API void ggml_numa_init(enum ggml_numa_strategy numa); // call once for better performance on NUMA systems + GGML_BACKEND_API bool ggml_is_numa(void); // true if init detected that system has >1 NUMA node + + GGML_BACKEND_API struct ggml_tensor * ggml_new_i32(struct ggml_context * ctx, int32_t value); + GGML_BACKEND_API struct ggml_tensor * ggml_new_f32(struct ggml_context * ctx, float value); + + GGML_BACKEND_API struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value); + GGML_BACKEND_API struct ggml_tensor * ggml_set_f32 (struct ggml_tensor * tensor, float value); + + GGML_BACKEND_API int32_t ggml_get_i32_1d(const struct ggml_tensor * tensor, int i); + GGML_BACKEND_API void ggml_set_i32_1d(const struct ggml_tensor * tensor, int i, int32_t value); + + GGML_BACKEND_API int32_t ggml_get_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3); + GGML_BACKEND_API void ggml_set_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, int32_t value); + + GGML_BACKEND_API float ggml_get_f32_1d(const struct ggml_tensor * tensor, int i); + GGML_BACKEND_API void ggml_set_f32_1d(const struct ggml_tensor * tensor, int i, float value); + + GGML_BACKEND_API float ggml_get_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3); + GGML_BACKEND_API void ggml_set_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, float value); + + GGML_BACKEND_API struct ggml_threadpool * ggml_threadpool_new (struct ggml_threadpool_params * params); + GGML_BACKEND_API void ggml_threadpool_free (struct ggml_threadpool * threadpool); + GGML_BACKEND_API int ggml_threadpool_get_n_threads (struct ggml_threadpool * threadpool); + GGML_BACKEND_API void ggml_threadpool_pause (struct ggml_threadpool * threadpool); + GGML_BACKEND_API void ggml_threadpool_resume (struct ggml_threadpool * threadpool); + + // ggml_graph_plan() has to be called before ggml_graph_compute() + // when plan.work_size > 0, caller must allocate memory for plan.work_data + GGML_BACKEND_API struct ggml_cplan ggml_graph_plan( + const struct ggml_cgraph * cgraph, + int n_threads, /* = GGML_DEFAULT_N_THREADS */ + struct ggml_threadpool * threadpool /* = NULL */ ); + GGML_BACKEND_API enum ggml_status ggml_graph_compute(struct ggml_cgraph * cgraph, struct ggml_cplan * cplan); + + // same as ggml_graph_compute() but the work data is allocated as a part of the context + // note: the drawback of this API is that you must have ensured that the context has enough memory for the work data + GGML_BACKEND_API enum ggml_status ggml_graph_compute_with_ctx(struct ggml_context * ctx, struct ggml_cgraph * cgraph, int n_threads); + + // + // system info + // + + // x86 + GGML_BACKEND_API int ggml_cpu_has_sse3 (void); + GGML_BACKEND_API int ggml_cpu_has_ssse3 (void); + GGML_BACKEND_API int ggml_cpu_has_avx (void); + GGML_BACKEND_API int ggml_cpu_has_avx_vnni (void); + GGML_BACKEND_API int ggml_cpu_has_avx2 (void); + GGML_BACKEND_API int ggml_cpu_has_bmi2 (void); + GGML_BACKEND_API int ggml_cpu_has_f16c (void); + GGML_BACKEND_API int ggml_cpu_has_fma (void); + GGML_BACKEND_API int ggml_cpu_has_avx512 (void); + GGML_BACKEND_API int ggml_cpu_has_avx512_vbmi(void); + GGML_BACKEND_API int ggml_cpu_has_avx512_vnni(void); + GGML_BACKEND_API int ggml_cpu_has_avx512_bf16(void); + GGML_BACKEND_API int ggml_cpu_has_amx_int8 (void); + // ARM + GGML_BACKEND_API int ggml_cpu_has_neon (void); + GGML_BACKEND_API int ggml_cpu_has_arm_fma (void); + GGML_BACKEND_API int ggml_cpu_has_fp16_va (void); + GGML_BACKEND_API int ggml_cpu_has_dotprod (void); + GGML_BACKEND_API int ggml_cpu_has_matmul_int8(void); + GGML_BACKEND_API int ggml_cpu_has_sve (void); + GGML_BACKEND_API int ggml_cpu_get_sve_cnt (void); // sve vector length in bytes + GGML_BACKEND_API int ggml_cpu_has_sme (void); + // other + GGML_BACKEND_API int ggml_cpu_has_riscv_v (void); + GGML_BACKEND_API int ggml_cpu_has_vsx (void); + GGML_BACKEND_API int ggml_cpu_has_vxe (void); + GGML_BACKEND_API int ggml_cpu_has_wasm_simd (void); + GGML_BACKEND_API int ggml_cpu_has_llamafile (void); + + // Internal types and functions exposed for tests and benchmarks + + typedef void (*ggml_vec_dot_t) (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT x, size_t bx, + const void * GGML_RESTRICT y, size_t by, int nrc); + + struct ggml_type_traits_cpu { + ggml_from_float_t from_float; + ggml_vec_dot_t vec_dot; + enum ggml_type vec_dot_type; + int64_t nrows; // number of rows to process simultaneously + }; + + GGML_BACKEND_API const struct ggml_type_traits_cpu * ggml_get_type_traits_cpu(enum ggml_type type); + + GGML_BACKEND_API void ggml_cpu_init(void); + + // + // CPU backend + // + + GGML_BACKEND_API ggml_backend_t ggml_backend_cpu_init(void); + + GGML_BACKEND_API bool ggml_backend_is_cpu (ggml_backend_t backend); + GGML_BACKEND_API void ggml_backend_cpu_set_n_threads (ggml_backend_t backend_cpu, int n_threads); + GGML_BACKEND_API void ggml_backend_cpu_set_threadpool (ggml_backend_t backend_cpu, ggml_threadpool_t threadpool); + GGML_BACKEND_API void ggml_backend_cpu_set_abort_callback(ggml_backend_t backend_cpu, ggml_abort_callback abort_callback, void * abort_callback_data); + + GGML_BACKEND_API ggml_backend_reg_t ggml_backend_cpu_reg(void); + + GGML_BACKEND_API void ggml_cpu_fp32_to_fp32(const float *, float *, int64_t); + GGML_BACKEND_API void ggml_cpu_fp32_to_i32 (const float *, int32_t *, int64_t); + GGML_BACKEND_API void ggml_cpu_fp32_to_fp16(const float *, ggml_fp16_t *, int64_t); + GGML_BACKEND_API void ggml_cpu_fp16_to_fp32(const ggml_fp16_t *, float *, int64_t); + GGML_BACKEND_API void ggml_cpu_fp32_to_bf16(const float *, ggml_bf16_t *, int64_t); + GGML_BACKEND_API void ggml_cpu_bf16_to_fp32(const ggml_bf16_t *, float *, int64_t); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cuda.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cuda.h new file mode 100644 index 00000000..22ad2c00 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-cuda.h @@ -0,0 +1,47 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef GGML_USE_HIP +#define GGML_CUDA_NAME "ROCm" +#define GGML_CUBLAS_NAME "hipBLAS" +#elif defined(GGML_USE_MUSA) +#define GGML_CUDA_NAME "MUSA" +#define GGML_CUBLAS_NAME "muBLAS" +#else +#define GGML_CUDA_NAME "CUDA" +#define GGML_CUBLAS_NAME "cuBLAS" +#endif +#define GGML_CUDA_MAX_DEVICES 16 + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_cuda_init(int device); + +GGML_BACKEND_API bool ggml_backend_is_cuda(ggml_backend_t backend); + +// device buffer +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_cuda_buffer_type(int device); + +// split tensor buffer that splits matrices by rows across multiple devices +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_cuda_split_buffer_type(int main_device, const float * tensor_split); + +// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_cuda_host_buffer_type(void); + +GGML_BACKEND_API int ggml_backend_cuda_get_device_count(void); +GGML_BACKEND_API void ggml_backend_cuda_get_device_description(int device, char * description, size_t description_size); +GGML_BACKEND_API void ggml_backend_cuda_get_device_memory(int device, size_t * free, size_t * total); + +GGML_BACKEND_API bool ggml_backend_cuda_register_host_buffer(void * buffer, size_t size); +GGML_BACKEND_API void ggml_backend_cuda_unregister_host_buffer(void * buffer); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_cuda_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-hexagon.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-hexagon.h new file mode 100644 index 00000000..6e079004 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-hexagon.h @@ -0,0 +1,19 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_hexagon_init(void); + +GGML_BACKEND_API bool ggml_backend_is_hexagon(ggml_backend_t backend); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_hexagon_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-metal.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-metal.h new file mode 100644 index 00000000..433838f0 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-metal.h @@ -0,0 +1,61 @@ +// Note: this description is outdated +// +// An interface allowing to compute ggml_cgraph with Metal +// +// This is a fully functional interface that extends ggml with GPU support for Apple devices. +// A similar interface can be created for other GPU backends (e.g. Vulkan, CUDA, etc.) +// +// How it works? +// +// As long as your program can create and evaluate a ggml_cgraph on the CPU, you can use this +// interface to evaluate the same graph on the GPU. Instead of using ggml_graph_compute(), you +// use ggml_metal_graph_compute() (or ggml_vulkan_graph_compute(), etc.) +// +// You only need to make sure that all memory buffers that you used during the graph creation +// are mapped to the device memory with the ggml_metal_add_buffer() function. This mapping is +// used during the graph evaluation to determine the arguments of the compute kernels. +// +// Synchronization between device and host memory (for example for input and output tensors) +// is done with the ggml_metal_set_tensor() and ggml_metal_get_tensor() functions. +// + +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#include +#include + +struct ggml_tensor; +struct ggml_cgraph; + +#ifdef __cplusplus +extern "C" { +#endif + +// +// backend API +// user-code should use only these functions +// + +// TODO: remove in the future +GGML_BACKEND_API ggml_backend_t ggml_backend_metal_init(void); + +GGML_BACKEND_API bool ggml_backend_is_metal(ggml_backend_t backend); + +GGML_BACKEND_API void ggml_backend_metal_set_abort_callback(ggml_backend_t backend, ggml_abort_callback abort_callback, void * user_data); + +// helper to check if the device supports a specific family +// ideally, the user code should be doing these checks +// ref: https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf +GGML_BACKEND_API bool ggml_backend_metal_supports_family(ggml_backend_t backend, int family); + +// capture all command buffers committed the next time `ggml_backend_graph_compute` is called +GGML_BACKEND_API void ggml_backend_metal_capture_next_compute(ggml_backend_t backend); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_metal_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-opencl.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-opencl.h new file mode 100644 index 00000000..6b617713 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-opencl.h @@ -0,0 +1,26 @@ +#ifndef GGML_OPENCL_H +#define GGML_OPENCL_H + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// +// backend API +// +GGML_BACKEND_API ggml_backend_t ggml_backend_opencl_init(void); +GGML_BACKEND_API bool ggml_backend_is_opencl(ggml_backend_t backend); + +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_opencl_buffer_type(void); +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_opencl_host_buffer_type(void); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_opencl_reg(void); + +#ifdef __cplusplus +} +#endif + +#endif // GGML_OPENCL_H diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-opt.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-opt.h new file mode 100644 index 00000000..4703a05a --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-opt.h @@ -0,0 +1,256 @@ +// This file contains functionality for training models using GGML. +// It is not strictly needed vs. just vanilla GGML but it provides a more high-level interface for common needs such as datasets. +// At the bottom of this file especially there are relatively high-level functions that are suitable use or adaptation in user code. +// +// Module maintainer: Johannes Gäßler (@JohannesGaessler, johannesg@5d6.de) + +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + struct ggml_opt_dataset; + struct ggml_opt_context; + struct ggml_opt_result; + + typedef struct ggml_opt_dataset * ggml_opt_dataset_t; + typedef struct ggml_opt_context * ggml_opt_context_t; + typedef struct ggml_opt_result * ggml_opt_result_t; + + // ====== Loss ====== + + // built-in loss types, i.e. the built-in quantities minimized by the optimizer + // custom loss types can be defined via mean or sum which simply reduce the outputs for all datapoints to a single value + enum ggml_opt_loss_type { + GGML_OPT_LOSS_TYPE_MEAN, + GGML_OPT_LOSS_TYPE_SUM, + GGML_OPT_LOSS_TYPE_CROSS_ENTROPY, + GGML_OPT_LOSS_TYPE_MEAN_SQUARED_ERROR, + }; + + // ====== Dataset ====== + + GGML_API ggml_opt_dataset_t ggml_opt_dataset_init( + enum ggml_type type_data, // the type for the internal data tensor + enum ggml_type type_label, // the type for the internal labels tensor + int64_t ne_datapoint, // number of elements per datapoint + int64_t ne_label, // number of elements per label + int64_t ndata, // total number of datapoints/labels + int64_t ndata_shard); // number of datapoints/labels per shard (unit at which the dataset is shuffled/copied) + GGML_API void ggml_opt_dataset_free(ggml_opt_dataset_t dataset); + + // get underlying tensors that store the data + GGML_API int64_t ggml_opt_dataset_ndata (ggml_opt_dataset_t dataset); + GGML_API struct ggml_tensor * ggml_opt_dataset_data (ggml_opt_dataset_t dataset); // shape = [ne_datapoint, ndata] + GGML_API struct ggml_tensor * ggml_opt_dataset_labels(ggml_opt_dataset_t dataset); // shape = [nd_label, ndata] + + // shuffle idata first datapoints from dataset with RNG from opt_ctx, shuffle all datapoints if idata is negative + GGML_API void ggml_opt_dataset_shuffle(ggml_opt_context_t opt_ctx, ggml_opt_dataset_t dataset, int64_t idata); + + // get batch at position ibatch from dataset and copy the data to data_batch and labels_batch + GGML_API void ggml_opt_dataset_get_batch( + ggml_opt_dataset_t dataset, + struct ggml_tensor * data_batch, // shape = [ne_datapoint, ndata_batch] + struct ggml_tensor * labels_batch, // shape = [ne_label, ndata_batch] + int64_t ibatch); + GGML_API void ggml_opt_dataset_get_batch_host( + ggml_opt_dataset_t dataset, + void * data_batch, + size_t nb_data_batch, + void * labels_batch, + int64_t ibatch); + + // ====== Model / Context ====== + + enum ggml_opt_build_type { + GGML_OPT_BUILD_TYPE_FORWARD = 10, + GGML_OPT_BUILD_TYPE_GRAD = 20, + GGML_OPT_BUILD_TYPE_OPT = 30, + }; + + enum ggml_opt_optimizer_type { + GGML_OPT_OPTIMIZER_TYPE_ADAMW, + GGML_OPT_OPTIMIZER_TYPE_SGD, + + GGML_OPT_OPTIMIZER_TYPE_COUNT + }; + + // parameters that control which optimizer is used and how said optimizer tries to find the minimal loss + struct ggml_opt_optimizer_params { + struct { + float alpha; // learning rate + float beta1; // first AdamW momentum + float beta2; // second AdamW momentum + float eps; // epsilon for numerical stability + float wd; // weight decay - 0.0f to disable + } adamw; + struct { + float alpha; // learning rate + float wd; // weight decay + } sgd; + }; + + // callback to calculate optimizer parameters prior to a backward pass + // userdata can be used to pass arbitrary data + typedef struct ggml_opt_optimizer_params (*ggml_opt_get_optimizer_params)(void * userdata); + + // returns the default optimizer params (constant, hard-coded values) + // userdata is not used + GGML_API struct ggml_opt_optimizer_params ggml_opt_get_default_optimizer_params(void * userdata); + + // casts userdata to ggml_opt_optimizer_params and returns it + GGML_API struct ggml_opt_optimizer_params ggml_opt_get_constant_optimizer_params(void * userdata); + + // parameters for initializing a new optimization context + struct ggml_opt_params { + ggml_backend_sched_t backend_sched; // defines which backends are used to construct the compute graphs + + // by default the forward graph needs to be reconstructed for each eval + // if ctx_compute, inputs, and outputs are set the graphs are instead allocated statically + struct ggml_context * ctx_compute; + struct ggml_tensor * inputs; + struct ggml_tensor * outputs; + + enum ggml_opt_loss_type loss_type; + enum ggml_opt_build_type build_type; + + int32_t opt_period; // after how many gradient accumulation steps an optimizer step should be done + + ggml_opt_get_optimizer_params get_opt_pars; // callback for calculating optimizer parameters + void * get_opt_pars_ud; // userdata for calculating optimizer parameters + + // only GGML_OPT_OPTIMIZER_TYPE_ADAMW needs m, v momenta per parameter tensor + enum ggml_opt_optimizer_type optimizer; + }; + + // get parameters for an optimization context with defaults set where possible + // parameters for which no sensible defaults exist are supplied as arguments to this function + GGML_API struct ggml_opt_params ggml_opt_default_params( + ggml_backend_sched_t backend_sched, + enum ggml_opt_loss_type loss_type); + + GGML_API ggml_opt_context_t ggml_opt_init(struct ggml_opt_params params); + GGML_API void ggml_opt_free(ggml_opt_context_t opt_ctx); + + // set gradients to zero, initilize loss, and optionally reset the optimizer + GGML_API void ggml_opt_reset(ggml_opt_context_t opt_ctx, bool optimizer); + + GGML_API bool ggml_opt_static_graphs(ggml_opt_context_t opt_ctx); // whether the graphs are allocated_statically + + // get underlying tensors that store data + // if not using static graphs these pointers become invalid with the next call to ggml_opt_alloc + GGML_API struct ggml_tensor * ggml_opt_inputs( ggml_opt_context_t opt_ctx); // forward graph input tensor + GGML_API struct ggml_tensor * ggml_opt_outputs( ggml_opt_context_t opt_ctx); // forward graph output tensor + GGML_API struct ggml_tensor * ggml_opt_labels( ggml_opt_context_t opt_ctx); // labels to compare outputs against + GGML_API struct ggml_tensor * ggml_opt_loss( ggml_opt_context_t opt_ctx); // scalar tensor that contains the loss + GGML_API struct ggml_tensor * ggml_opt_pred( ggml_opt_context_t opt_ctx); // predictions made by outputs + GGML_API struct ggml_tensor * ggml_opt_ncorrect(ggml_opt_context_t opt_ctx); // number of matching predictions between outputs and labels + + // get the gradient accumulator for a node from the forward graph + GGML_API struct ggml_tensor * ggml_opt_grad_acc(ggml_opt_context_t opt_ctx, struct ggml_tensor * node); + + GGML_API enum ggml_opt_optimizer_type ggml_opt_context_optimizer_type(ggml_opt_context_t); //TODO consistent naming scheme + + GGML_API const char * ggml_opt_optimizer_name(enum ggml_opt_optimizer_type); + + // ====== Optimization Result ====== + + GGML_API ggml_opt_result_t ggml_opt_result_init(void); + GGML_API void ggml_opt_result_free(ggml_opt_result_t result); + GGML_API void ggml_opt_result_reset(ggml_opt_result_t result); + + // get data from result, uncertainties are optional and can be ignored by passing NULL + GGML_API void ggml_opt_result_ndata( ggml_opt_result_t result, int64_t * ndata); // writes 1 value, number of datapoints + GGML_API void ggml_opt_result_loss( ggml_opt_result_t result, double * loss, double * unc); // writes 1 value + GGML_API void ggml_opt_result_pred( ggml_opt_result_t result, int32_t * pred); // writes ndata values + GGML_API void ggml_opt_result_accuracy(ggml_opt_result_t result, double * accuracy, double * unc); // writes 1 value + + // ====== Computation ====== + + // if not using static graphs, this function must be called prior to ggml_opt_alloc + GGML_API void ggml_opt_prepare_alloc( + ggml_opt_context_t opt_ctx, + struct ggml_context * ctx_compute, + struct ggml_cgraph * gf, + struct ggml_tensor * inputs, + struct ggml_tensor * outputs); + + // allocate the next graph for evaluation, either forward or forward + backward + // must be called exactly once prior to calling ggml_opt_eval + GGML_API void ggml_opt_alloc(ggml_opt_context_t opt_ctx, bool backward); + + // do forward pass, increment result if not NULL, do backward pass if allocated + GGML_API void ggml_opt_eval(ggml_opt_context_t opt_ctx, ggml_opt_result_t result); + + // ############################################################################ + // ## The high-level functions start here. They do not depend on any private ## + // ## functions or structs and can be copied to and adapted for user code. ## + // ############################################################################ + + // ====== Intended Usage ====== + // + // 1. Select the appropriate loss for your problem. + // 2. Create a dataset and set the data for the "data" tensor. Also set the "labels" tensor if your loss needs them. + // Setting the shard size to 1 will be fine, it's the granularity with which data is shuffled/loaded (bigger values are faster). + // 3. Create a GGML graph for your model with no_alloc == true. Use two separate contexts for the tensors. + // The first context should contain the model parameters and inputs and be allocated statically in user code. + // The second context should contain all other tensors and will be (re)allocated automatically. + // Due to this automated allocation the data of the second context is not defined when accessed in user code. + // Note that the second dimension of the inputs/outputs are interpreted as the number of datapoints in those tensors. + // 4. Call ggml_opt_fit. If you need more control you can use ggml_opt_epoch instead. + + // signature for a callback while evaluating opt_ctx on dataset, called after an evaluation + typedef void (*ggml_opt_epoch_callback)( + bool train, // true after training evaluation, false after validation evaluation + ggml_opt_context_t opt_ctx, + ggml_opt_dataset_t dataset, + ggml_opt_result_t result, // result associated with the dataset subsection + int64_t ibatch, // number of batches that have been evaluated so far + int64_t ibatch_max, // total number of batches in this dataset subsection + int64_t t_start_us); // time at which the evaluation on the dataset subsection was started + + // do training on front of dataset, do evaluation only on back of dataset + GGML_API void ggml_opt_epoch( + ggml_opt_context_t opt_ctx, + ggml_opt_dataset_t dataset, + ggml_opt_result_t result_train, // result to increment during training, ignored if NULL + ggml_opt_result_t result_eval, // result to increment during evaluation, ignored if NULL + int64_t idata_split, // data index at which to split training and evaluation + ggml_opt_epoch_callback callback_train, + ggml_opt_epoch_callback callback_eval); + + // callback that prints a progress bar on stderr + GGML_API void ggml_opt_epoch_callback_progress_bar( + bool train, + ggml_opt_context_t opt_ctx, + ggml_opt_dataset_t dataset, + ggml_opt_result_t result, + int64_t ibatch, + int64_t ibatch_max, + int64_t t_start_us); + + // fit model defined by inputs and outputs to dataset + GGML_API void ggml_opt_fit( + ggml_backend_sched_t backend_sched, // backend scheduler for constructing the compute graphs + struct ggml_context * ctx_compute, // context with temporarily allocated tensors to calculate the outputs + struct ggml_tensor * inputs, // input tensor with shape [ne_datapoint, ndata_batch] + struct ggml_tensor * outputs, // output tensor, must have shape [ne_label, ndata_batch] if labels are used + ggml_opt_dataset_t dataset, // dataset with data and optionally also labels + enum ggml_opt_loss_type loss_type, // loss to minimize + enum ggml_opt_optimizer_type optimizer, // sgd or adamw + ggml_opt_get_optimizer_params get_opt_pars, // callback to get optimizer params, userdata is pointer to epoch (of type int64_t) + int64_t nepoch, // how many times the dataset should be iterated over + int64_t nbatch_logical, // datapoints optimizer step, must be a multiple of ndata_batch in inputs/outputs + float val_split, // fraction of the dataset to use for validation, must be in [0.0f, 1.0f) + bool silent); // whether or not info prints to stderr should be suppressed + + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-rpc.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-rpc.h new file mode 100644 index 00000000..e6dca3f6 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-rpc.h @@ -0,0 +1,31 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define RPC_PROTO_MAJOR_VERSION 3 +#define RPC_PROTO_MINOR_VERSION 0 +#define RPC_PROTO_PATCH_VERSION 0 +#define GGML_RPC_MAX_SERVERS 16 + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_rpc_init(const char * endpoint, uint32_t device); +GGML_BACKEND_API bool ggml_backend_is_rpc(ggml_backend_t backend); + +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_rpc_buffer_type(const char * endpoint, uint32_t device); + +GGML_BACKEND_API void ggml_backend_rpc_get_device_memory(const char * endpoint, uint32_t device, size_t * free, size_t * total); + +GGML_BACKEND_API void ggml_backend_rpc_start_server(const char * endpoint, const char * cache_dir, + size_t n_threads, size_t n_devices, ggml_backend_dev_t * devices); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_rpc_reg(void); +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_rpc_add_server(const char * endpoint); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-sycl.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-sycl.h new file mode 100644 index 00000000..5ce349a8 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-sycl.h @@ -0,0 +1,49 @@ +// +// MIT license +// Copyright (C) 2024 Intel Corporation +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#define GGML_SYCL_NAME "SYCL" +#define GGML_SYCL_MAX_DEVICES 48 + +#ifdef __cplusplus +extern "C" { +#endif + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_sycl_init(int device); + +GGML_BACKEND_API bool ggml_backend_is_sycl(ggml_backend_t backend); + +// devide buffer +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_sycl_buffer_type(int device); + +// split tensor buffer that splits matrices by rows across multiple devices +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_sycl_split_buffer_type(const float * tensor_split); + +// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_sycl_host_buffer_type(void); + +GGML_BACKEND_API void ggml_backend_sycl_print_sycl_devices(void); +GGML_BACKEND_API void ggml_backend_sycl_get_gpu_list(int *id_list, int max_len); +GGML_BACKEND_API void ggml_backend_sycl_get_device_description(int device, + char *description, + size_t description_size); +GGML_BACKEND_API int ggml_backend_sycl_get_device_count(); +GGML_BACKEND_API void ggml_backend_sycl_get_device_memory(int device, size_t *free, size_t *total); + +// SYCL doesn't support registering host memory, keep here for reference +// GGML_BACKEND_API bool ggml_backend_sycl_register_host_buffer(void * buffer, size_t size); +// GGML_BACKEND_API void ggml_backend_sycl_unregister_host_buffer(void * buffer); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_sycl_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-vulkan.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-vulkan.h new file mode 100644 index 00000000..ed5ea5f7 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-vulkan.h @@ -0,0 +1,29 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define GGML_VK_NAME "Vulkan" +#define GGML_VK_MAX_DEVICES 16 + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_vk_init(size_t dev_num); + +GGML_BACKEND_API bool ggml_backend_is_vk(ggml_backend_t backend); +GGML_BACKEND_API int ggml_backend_vk_get_device_count(void); +GGML_BACKEND_API void ggml_backend_vk_get_device_description(int device, char * description, size_t description_size); +GGML_BACKEND_API void ggml_backend_vk_get_device_memory(int device, size_t * free, size_t * total); + +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_vk_buffer_type(size_t dev_num); +// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_vk_host_buffer_type(void); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_vk_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-webgpu.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-webgpu.h new file mode 100644 index 00000000..65b8ed9b --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-webgpu.h @@ -0,0 +1,19 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define GGML_WEBGPU_NAME "WebGPU" + +// Needed for examples in ggml +GGML_BACKEND_API ggml_backend_t ggml_backend_webgpu_init(void); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_webgpu_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-zdnn.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-zdnn.h new file mode 100644 index 00000000..fbf45b6e --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml-zdnn.h @@ -0,0 +1,17 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// device buffer +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_zdnn_buffer_type(void); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_zdnn_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml.h new file mode 100644 index 00000000..c1ed1a21 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/ggml.h @@ -0,0 +1,2614 @@ +#pragma once + +// +// GGML Tensor Library +// +// This documentation is still a work in progress. +// If you wish some specific topics to be covered, feel free to drop a comment: +// +// https://github.com/ggerganov/whisper.cpp/issues/40 +// +// ## Overview +// +// This library implements: +// +// - a set of tensor operations +// - automatic differentiation +// - basic optimization algorithms +// +// The aim of this library is to provide a minimalistic approach for various machine learning tasks. This includes, +// but is not limited to, the following: +// +// - linear regression +// - support vector machines +// - neural networks +// +// The library allows the user to define a certain function using the available tensor operations. This function +// definition is represented internally via a computation graph. Each tensor operation in the function definition +// corresponds to a node in the graph. Having the computation graph defined, the user can choose to compute the +// function's value and/or its gradient with respect to the input variables. Optionally, the function can be optimized +// using one of the available optimization algorithms. +// +// For example, here we define the function: f(x) = a*x^2 + b +// +// { +// struct ggml_init_params params = { +// .mem_size = 16*1024*1024, +// .mem_buffer = NULL, +// }; +// +// // memory allocation happens here +// struct ggml_context * ctx = ggml_init(params); +// +// struct ggml_tensor * x = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); +// +// ggml_set_param(ctx, x); // x is an input variable +// +// struct ggml_tensor * a = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); +// struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); +// struct ggml_tensor * x2 = ggml_mul(ctx, x, x); +// struct ggml_tensor * f = ggml_add(ctx, ggml_mul(ctx, a, x2), b); +// +// ... +// } +// +// Notice that the function definition above does not involve any actual computation. The computation is performed only +// when the user explicitly requests it. For example, to compute the function's value at x = 2.0: +// +// { +// ... +// +// struct ggml_cgraph * gf = ggml_new_graph(ctx); +// ggml_build_forward_expand(gf, f); +// +// // set the input variable and parameter values +// ggml_set_f32(x, 2.0f); +// ggml_set_f32(a, 3.0f); +// ggml_set_f32(b, 4.0f); +// +// ggml_graph_compute_with_ctx(ctx, &gf, n_threads); +// +// printf("f = %f\n", ggml_get_f32_1d(f, 0)); +// +// ... +// } +// +// The actual computation is performed in the ggml_graph_compute() function. +// +// The ggml_new_tensor_...() functions create new tensors. They are allocated in the memory buffer provided to the +// ggml_init() function. You have to be careful not to exceed the memory buffer size. Therefore, you have to know +// in advance how much memory you need for your computation. Alternatively, you can allocate a large enough memory +// and after defining the computation graph, call the ggml_used_mem() function to find out how much memory was +// actually needed. +// +// The ggml_set_param() function marks a tensor as an input variable. This is used by the automatic +// differentiation and optimization algorithms. +// +// The described approach allows to define the function graph once and then compute its forward or backward graphs +// multiple times. All computations will use the same memory buffer allocated in the ggml_init() function. This way +// the user can avoid the memory allocation overhead at runtime. +// +// The library supports multi-dimensional tensors - up to 4 dimensions. The FP16 and FP32 data types are first class +// citizens, but in theory the library can be extended to support FP8 and integer data types. +// +// Each tensor operation produces a new tensor. Initially the library was envisioned to support only the use of unary +// and binary operations. Most of the available operations fall into one of these two categories. With time, it became +// clear that the library needs to support more complex operations. The way to support these operations is not clear +// yet, but a few examples are demonstrated in the following operations: +// +// - ggml_permute() +// - ggml_conv_1d_1s() +// - ggml_conv_1d_2s() +// +// For each tensor operator, the library implements a forward and backward computation function. The forward function +// computes the output tensor value given the input tensor values. The backward function computes the adjoint of the +// input tensors given the adjoint of the output tensor. For a detailed explanation of what this means, take a +// calculus class, or watch the following video: +// +// What is Automatic Differentiation? +// https://www.youtube.com/watch?v=wG_nF1awSSY +// +// +// ## Tensor data (struct ggml_tensor) +// +// The tensors are stored in memory via the ggml_tensor struct. The structure provides information about the size of +// the tensor, the data type, and the memory buffer where the tensor data is stored. Additionally, it contains +// pointers to the "source" tensors - i.e. the tensors that were used to compute the current tensor. For example: +// +// { +// struct ggml_tensor * c = ggml_add(ctx, a, b); +// +// assert(c->src[0] == a); +// assert(c->src[1] == b); +// } +// +// The multi-dimensional tensors are stored in row-major order. The ggml_tensor struct contains fields for the +// number of elements in each dimension ("ne") as well as the number of bytes ("nb", a.k.a. stride). This allows +// to store tensors that are not contiguous in memory, which is useful for operations such as transposition and +// permutation. All tensor operations have to take the stride into account and not assume that the tensor is +// contiguous in memory. +// +// The data of the tensor is accessed via the "data" pointer. For example: +// +// { +// const int nx = 2; +// const int ny = 3; +// +// struct ggml_tensor * a = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, nx, ny); +// +// for (int y = 0; y < ny; y++) { +// for (int x = 0; x < nx; x++) { +// *(float *) ((char *) a->data + y*a->nb[1] + x*a->nb[0]) = x + y; +// } +// } +// +// ... +// } +// +// Alternatively, there are helper functions, such as ggml_get_f32_1d() and ggml_set_f32_1d() that can be used. +// +// ## The matrix multiplication operator (ggml_mul_mat) +// +// TODO +// +// +// ## Multi-threading +// +// TODO +// +// +// ## Overview of ggml.c +// +// TODO +// +// +// ## SIMD optimizations +// +// TODO +// +// +// ## Debugging ggml +// +// TODO +// +// + +#ifdef GGML_SHARED +# if defined(_WIN32) && !defined(__MINGW32__) +# ifdef GGML_BUILD +# define GGML_API __declspec(dllexport) extern +# else +# define GGML_API __declspec(dllimport) extern +# endif +# else +# define GGML_API __attribute__ ((visibility ("default"))) extern +# endif +#else +# define GGML_API extern +#endif + +// TODO: support for clang +#ifdef __GNUC__ +# define GGML_DEPRECATED(func, hint) func __attribute__((deprecated(hint))) +#elif defined(_MSC_VER) +# define GGML_DEPRECATED(func, hint) __declspec(deprecated(hint)) func +#else +# define GGML_DEPRECATED(func, hint) func +#endif + +#ifndef __GNUC__ +# define GGML_ATTRIBUTE_FORMAT(...) +#elif defined(__MINGW32__) && !defined(__clang__) +# define GGML_ATTRIBUTE_FORMAT(...) __attribute__((format(gnu_printf, __VA_ARGS__))) +#else +# define GGML_ATTRIBUTE_FORMAT(...) __attribute__((format(printf, __VA_ARGS__))) +#endif + +#include +#include +#include +#include + +#define GGML_FILE_MAGIC 0x67676d6c // "ggml" +#define GGML_FILE_VERSION 2 + +#define GGML_QNT_VERSION 2 // bump this on quantization format changes +#define GGML_QNT_VERSION_FACTOR 1000 // do not change this + +#define GGML_MAX_DIMS 4 +#define GGML_MAX_PARAMS 2048 +#define GGML_MAX_SRC 10 +#define GGML_MAX_N_THREADS 512 +#define GGML_MAX_OP_PARAMS 64 + +#ifndef GGML_MAX_NAME +# define GGML_MAX_NAME 64 +#endif + +#define GGML_DEFAULT_N_THREADS 4 +#define GGML_DEFAULT_GRAPH_SIZE 2048 + +#if UINTPTR_MAX == 0xFFFFFFFF + #define GGML_MEM_ALIGN 4 +#else + #define GGML_MEM_ALIGN 16 +#endif + +#define GGML_EXIT_SUCCESS 0 +#define GGML_EXIT_ABORTED 1 + +// TODO: convert to enum https://github.com/ggml-org/llama.cpp/pull/16187#discussion_r2388538726 +#define GGML_ROPE_TYPE_NORMAL 0 +#define GGML_ROPE_TYPE_NEOX 2 +#define GGML_ROPE_TYPE_MROPE 8 +#define GGML_ROPE_TYPE_VISION 24 +#define GGML_ROPE_TYPE_IMROPE 40 // binary: 101000 + +#define GGML_MROPE_SECTIONS 4 + +#define GGML_UNUSED(x) (void)(x) +#ifdef __CUDACC__ +template +__host__ __device__ constexpr inline void ggml_unused_vars_impl(Args&&...) noexcept {} +#define GGML_UNUSED_VARS(...) ggml_unused_vars_impl(__VA_ARGS__) +#else +#define GGML_UNUSED_VARS(...) do { (void)sizeof((__VA_ARGS__, 0)); } while(0) +#endif // __CUDACC__ + +#define GGML_PAD(x, n) (((x) + (n) - 1) & ~((n) - 1)) + +#ifndef NDEBUG +# define GGML_UNREACHABLE() do { fprintf(stderr, "statement should be unreachable\n"); abort(); } while(0) +#elif defined(__GNUC__) +# define GGML_UNREACHABLE() __builtin_unreachable() +#elif defined(_MSC_VER) +# define GGML_UNREACHABLE() __assume(0) +#else +# define GGML_UNREACHABLE() ((void) 0) +#endif + +#ifdef __cplusplus +# define GGML_NORETURN [[noreturn]] +#elif defined(_MSC_VER) +# define GGML_NORETURN __declspec(noreturn) +#else +# define GGML_NORETURN _Noreturn +#endif + +#define GGML_ABORT(...) ggml_abort(__FILE__, __LINE__, __VA_ARGS__) +#define GGML_ASSERT(x) if (!(x)) GGML_ABORT("GGML_ASSERT(%s) failed", #x) + +// used to copy the number of elements and stride in bytes of tensors into local variables. +// main purpose is to reduce code duplication and improve readability. +// +// example: +// +// GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne); +// GGML_TENSOR_LOCALS(size_t, nb1, src1, nb); +// +#define GGML_TENSOR_LOCALS_1(type, prefix, pointer, array) \ + const type prefix##0 = (pointer) ? (pointer)->array[0] : 0; \ + GGML_UNUSED(prefix##0); +#define GGML_TENSOR_LOCALS_2(type, prefix, pointer, array) \ + GGML_TENSOR_LOCALS_1 (type, prefix, pointer, array) \ + const type prefix##1 = (pointer) ? (pointer)->array[1] : 0; \ + GGML_UNUSED(prefix##1); +#define GGML_TENSOR_LOCALS_3(type, prefix, pointer, array) \ + GGML_TENSOR_LOCALS_2 (type, prefix, pointer, array) \ + const type prefix##2 = (pointer) ? (pointer)->array[2] : 0; \ + GGML_UNUSED(prefix##2); +#define GGML_TENSOR_LOCALS(type, prefix, pointer, array) \ + GGML_TENSOR_LOCALS_3 (type, prefix, pointer, array) \ + const type prefix##3 = (pointer) ? (pointer)->array[3] : 0; \ + GGML_UNUSED(prefix##3); + +#define GGML_TENSOR_UNARY_OP_LOCALS \ + GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \ + GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) \ + GGML_TENSOR_LOCALS(size_t, nb, dst, nb) + +#define GGML_TENSOR_BINARY_OP_LOCALS \ + GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \ + GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) \ + GGML_TENSOR_LOCALS(size_t, nb1, src1, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) \ + GGML_TENSOR_LOCALS(size_t, nb, dst, nb) + +#define GGML_TENSOR_TERNARY_OP_LOCALS \ + GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \ + GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) \ + GGML_TENSOR_LOCALS(size_t, nb1, src1, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne2, src2, ne) \ + GGML_TENSOR_LOCALS(size_t, nb2, src2, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) \ + GGML_TENSOR_LOCALS(size_t, nb, dst, nb) + +#define GGML_TENSOR_BINARY_OP_LOCALS01 \ + GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \ + GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) \ + GGML_TENSOR_LOCALS(size_t, nb1, src1, nb) + +#ifdef __cplusplus +extern "C" { +#endif + + // Function type used in fatal error callbacks + typedef void (*ggml_abort_callback_t)(const char * error_message); + + // Set the abort callback (passing null will restore original abort functionality: printing a message to stdout) + // Returns the old callback for chaining + GGML_API ggml_abort_callback_t ggml_set_abort_callback(ggml_abort_callback_t callback); + + GGML_NORETURN GGML_ATTRIBUTE_FORMAT(3, 4) + GGML_API void ggml_abort(const char * file, int line, const char * fmt, ...); + + enum ggml_status { + GGML_STATUS_ALLOC_FAILED = -2, + GGML_STATUS_FAILED = -1, + GGML_STATUS_SUCCESS = 0, + GGML_STATUS_ABORTED = 1, + }; + + // get ggml_status name string + GGML_API const char * ggml_status_to_string(enum ggml_status status); + + // ieee 754-2008 half-precision float16 + // todo: make this not an integral type + typedef uint16_t ggml_fp16_t; + GGML_API float ggml_fp16_to_fp32(ggml_fp16_t); + GGML_API ggml_fp16_t ggml_fp32_to_fp16(float); + GGML_API void ggml_fp16_to_fp32_row(const ggml_fp16_t *, float *, int64_t); + GGML_API void ggml_fp32_to_fp16_row(const float *, ggml_fp16_t *, int64_t); + + // google brain half-precision bfloat16 + typedef struct { uint16_t bits; } ggml_bf16_t; + GGML_API ggml_bf16_t ggml_fp32_to_bf16(float); + GGML_API float ggml_bf16_to_fp32(ggml_bf16_t); // consider just doing << 16 + GGML_API void ggml_bf16_to_fp32_row(const ggml_bf16_t *, float *, int64_t); + GGML_API void ggml_fp32_to_bf16_row_ref(const float *, ggml_bf16_t *, int64_t); + GGML_API void ggml_fp32_to_bf16_row(const float *, ggml_bf16_t *, int64_t); + + struct ggml_object; + struct ggml_context; + struct ggml_cgraph; + + // NOTE: always add types at the end of the enum to keep backward compatibility + enum ggml_type { + GGML_TYPE_F32 = 0, + GGML_TYPE_F16 = 1, + GGML_TYPE_Q4_0 = 2, + GGML_TYPE_Q4_1 = 3, + // GGML_TYPE_Q4_2 = 4, support has been removed + // GGML_TYPE_Q4_3 = 5, support has been removed + GGML_TYPE_Q5_0 = 6, + GGML_TYPE_Q5_1 = 7, + GGML_TYPE_Q8_0 = 8, + GGML_TYPE_Q8_1 = 9, + GGML_TYPE_Q2_K = 10, + GGML_TYPE_Q3_K = 11, + GGML_TYPE_Q4_K = 12, + GGML_TYPE_Q5_K = 13, + GGML_TYPE_Q6_K = 14, + GGML_TYPE_Q8_K = 15, + GGML_TYPE_IQ2_XXS = 16, + GGML_TYPE_IQ2_XS = 17, + GGML_TYPE_IQ3_XXS = 18, + GGML_TYPE_IQ1_S = 19, + GGML_TYPE_IQ4_NL = 20, + GGML_TYPE_IQ3_S = 21, + GGML_TYPE_IQ2_S = 22, + GGML_TYPE_IQ4_XS = 23, + GGML_TYPE_I8 = 24, + GGML_TYPE_I16 = 25, + GGML_TYPE_I32 = 26, + GGML_TYPE_I64 = 27, + GGML_TYPE_F64 = 28, + GGML_TYPE_IQ1_M = 29, + GGML_TYPE_BF16 = 30, + // GGML_TYPE_Q4_0_4_4 = 31, support has been removed from gguf files + // GGML_TYPE_Q4_0_4_8 = 32, + // GGML_TYPE_Q4_0_8_8 = 33, + GGML_TYPE_TQ1_0 = 34, + GGML_TYPE_TQ2_0 = 35, + // GGML_TYPE_IQ4_NL_4_4 = 36, + // GGML_TYPE_IQ4_NL_4_8 = 37, + // GGML_TYPE_IQ4_NL_8_8 = 38, + GGML_TYPE_MXFP4 = 39, // MXFP4 (1 block) + GGML_TYPE_COUNT = 40, + }; + + // precision + enum ggml_prec { + GGML_PREC_DEFAULT = 0, // stored as ggml_tensor.op_params, 0 by default + GGML_PREC_F32 = 10, + }; + + // model file types + enum ggml_ftype { + GGML_FTYPE_UNKNOWN = -1, + GGML_FTYPE_ALL_F32 = 0, + GGML_FTYPE_MOSTLY_F16 = 1, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_0 = 2, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_1 = 3, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_1_SOME_F16 = 4, // tok_embeddings.weight and output.weight are F16 + GGML_FTYPE_MOSTLY_Q8_0 = 7, // except 1d tensors + GGML_FTYPE_MOSTLY_Q5_0 = 8, // except 1d tensors + GGML_FTYPE_MOSTLY_Q5_1 = 9, // except 1d tensors + GGML_FTYPE_MOSTLY_Q2_K = 10, // except 1d tensors + GGML_FTYPE_MOSTLY_Q3_K = 11, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_K = 12, // except 1d tensors + GGML_FTYPE_MOSTLY_Q5_K = 13, // except 1d tensors + GGML_FTYPE_MOSTLY_Q6_K = 14, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ2_XXS = 15, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ2_XS = 16, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ3_XXS = 17, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ1_S = 18, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ4_NL = 19, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ3_S = 20, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ2_S = 21, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ4_XS = 22, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ1_M = 23, // except 1d tensors + GGML_FTYPE_MOSTLY_BF16 = 24, // except 1d tensors + GGML_FTYPE_MOSTLY_MXFP4 = 25, // except 1d tensors + }; + + // available tensor operations: + enum ggml_op { + GGML_OP_NONE = 0, + + GGML_OP_DUP, + GGML_OP_ADD, + GGML_OP_ADD_ID, + GGML_OP_ADD1, + GGML_OP_ACC, + GGML_OP_SUB, + GGML_OP_MUL, + GGML_OP_DIV, + GGML_OP_SQR, + GGML_OP_SQRT, + GGML_OP_LOG, + GGML_OP_SIN, + GGML_OP_COS, + GGML_OP_SUM, + GGML_OP_SUM_ROWS, + GGML_OP_MEAN, + GGML_OP_ARGMAX, + GGML_OP_COUNT_EQUAL, + GGML_OP_REPEAT, + GGML_OP_REPEAT_BACK, + GGML_OP_CONCAT, + GGML_OP_SILU_BACK, + GGML_OP_NORM, // normalize + GGML_OP_RMS_NORM, + GGML_OP_RMS_NORM_BACK, + GGML_OP_GROUP_NORM, + GGML_OP_L2_NORM, + + GGML_OP_MUL_MAT, + GGML_OP_MUL_MAT_ID, + GGML_OP_OUT_PROD, + + GGML_OP_SCALE, + GGML_OP_SET, + GGML_OP_CPY, + GGML_OP_CONT, + GGML_OP_RESHAPE, + GGML_OP_VIEW, + GGML_OP_PERMUTE, + GGML_OP_TRANSPOSE, + GGML_OP_GET_ROWS, + GGML_OP_GET_ROWS_BACK, + GGML_OP_SET_ROWS, + GGML_OP_DIAG, + GGML_OP_DIAG_MASK_INF, + GGML_OP_DIAG_MASK_ZERO, + GGML_OP_SOFT_MAX, + GGML_OP_SOFT_MAX_BACK, + GGML_OP_ROPE, + GGML_OP_ROPE_BACK, + GGML_OP_CLAMP, + GGML_OP_CONV_TRANSPOSE_1D, + GGML_OP_IM2COL, + GGML_OP_IM2COL_BACK, + GGML_OP_IM2COL_3D, + GGML_OP_CONV_2D, + GGML_OP_CONV_3D, + GGML_OP_CONV_2D_DW, + GGML_OP_CONV_TRANSPOSE_2D, + GGML_OP_POOL_1D, + GGML_OP_POOL_2D, + GGML_OP_POOL_2D_BACK, + GGML_OP_UPSCALE, + GGML_OP_PAD, + GGML_OP_PAD_REFLECT_1D, + GGML_OP_ROLL, + GGML_OP_ARANGE, + GGML_OP_TIMESTEP_EMBEDDING, + GGML_OP_ARGSORT, + GGML_OP_LEAKY_RELU, + + GGML_OP_FLASH_ATTN_EXT, + GGML_OP_FLASH_ATTN_BACK, + GGML_OP_SSM_CONV, + GGML_OP_SSM_SCAN, + GGML_OP_WIN_PART, + GGML_OP_WIN_UNPART, + GGML_OP_GET_REL_POS, + GGML_OP_ADD_REL_POS, + GGML_OP_RWKV_WKV6, + GGML_OP_GATED_LINEAR_ATTN, + GGML_OP_RWKV_WKV7, + + GGML_OP_UNARY, + + GGML_OP_MAP_CUSTOM1, + GGML_OP_MAP_CUSTOM2, + GGML_OP_MAP_CUSTOM3, + + GGML_OP_CUSTOM, + + GGML_OP_CROSS_ENTROPY_LOSS, + GGML_OP_CROSS_ENTROPY_LOSS_BACK, + GGML_OP_OPT_STEP_ADAMW, + GGML_OP_OPT_STEP_SGD, + + GGML_OP_GLU, + + GGML_OP_COUNT, + }; + + enum ggml_unary_op { + GGML_UNARY_OP_ABS, + GGML_UNARY_OP_SGN, + GGML_UNARY_OP_NEG, + GGML_UNARY_OP_STEP, + GGML_UNARY_OP_TANH, + GGML_UNARY_OP_ELU, + GGML_UNARY_OP_RELU, + GGML_UNARY_OP_SIGMOID, + GGML_UNARY_OP_GELU, + GGML_UNARY_OP_GELU_QUICK, + GGML_UNARY_OP_SILU, + GGML_UNARY_OP_HARDSWISH, + GGML_UNARY_OP_HARDSIGMOID, + GGML_UNARY_OP_EXP, + GGML_UNARY_OP_GELU_ERF, + GGML_UNARY_OP_XIELU, + GGML_UNARY_OP_FLOOR, + GGML_UNARY_OP_CEIL, + GGML_UNARY_OP_ROUND, + GGML_UNARY_OP_TRUNC, + + GGML_UNARY_OP_COUNT, + }; + + enum ggml_glu_op { + GGML_GLU_OP_REGLU, + GGML_GLU_OP_GEGLU, + GGML_GLU_OP_SWIGLU, + GGML_GLU_OP_SWIGLU_OAI, + GGML_GLU_OP_GEGLU_ERF, + GGML_GLU_OP_GEGLU_QUICK, + + GGML_GLU_OP_COUNT, + }; + + enum ggml_object_type { + GGML_OBJECT_TYPE_TENSOR, + GGML_OBJECT_TYPE_GRAPH, + GGML_OBJECT_TYPE_WORK_BUFFER + }; + + enum ggml_log_level { + GGML_LOG_LEVEL_NONE = 0, + GGML_LOG_LEVEL_DEBUG = 1, + GGML_LOG_LEVEL_INFO = 2, + GGML_LOG_LEVEL_WARN = 3, + GGML_LOG_LEVEL_ERROR = 4, + GGML_LOG_LEVEL_CONT = 5, // continue previous log + }; + + // this tensor... + enum ggml_tensor_flag { + GGML_TENSOR_FLAG_INPUT = 1, // ...is an input for the GGML compute graph + GGML_TENSOR_FLAG_OUTPUT = 2, // ...is an output for the GGML compute graph + GGML_TENSOR_FLAG_PARAM = 4, // ...contains trainable parameters + GGML_TENSOR_FLAG_LOSS = 8, // ...defines loss for numerical optimization (multiple loss tensors add up) + }; + + struct ggml_init_params { + // memory pool + size_t mem_size; // bytes + void * mem_buffer; // if NULL, memory will be allocated internally + bool no_alloc; // don't allocate memory for the tensor data + }; + + // n-dimensional tensor + struct ggml_tensor { + enum ggml_type type; + + struct ggml_backend_buffer * buffer; + + int64_t ne[GGML_MAX_DIMS]; // number of elements + size_t nb[GGML_MAX_DIMS]; // stride in bytes: + // nb[0] = ggml_type_size(type) + // nb[1] = nb[0] * (ne[0] / ggml_blck_size(type)) + padding + // nb[i] = nb[i-1] * ne[i-1] + + // compute data + enum ggml_op op; + + // op params - allocated as int32_t for alignment + int32_t op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)]; + + int32_t flags; + + struct ggml_tensor * src[GGML_MAX_SRC]; + + // source tensor and offset for views + struct ggml_tensor * view_src; + size_t view_offs; + + void * data; + + char name[GGML_MAX_NAME]; + + void * extra; // extra things e.g. for ggml-cuda.cu + + char padding[8]; + }; + + static const size_t GGML_TENSOR_SIZE = sizeof(struct ggml_tensor); + + // Abort callback + // If not NULL, called before ggml computation + // If it returns true, the computation is aborted + typedef bool (*ggml_abort_callback)(void * data); + + + // + // GUID + // + + // GUID types + typedef uint8_t ggml_guid[16]; + typedef ggml_guid * ggml_guid_t; + + GGML_API bool ggml_guid_matches(ggml_guid_t guid_a, ggml_guid_t guid_b); + + // misc + + GGML_API const char * ggml_version(void); + GGML_API const char * ggml_commit(void); + + GGML_API void ggml_time_init(void); // call this once at the beginning of the program + GGML_API int64_t ggml_time_ms(void); + GGML_API int64_t ggml_time_us(void); + GGML_API int64_t ggml_cycles(void); + GGML_API int64_t ggml_cycles_per_ms(void); + + // accepts a UTF-8 path, even on Windows + GGML_API FILE * ggml_fopen(const char * fname, const char * mode); + + GGML_API void ggml_print_object (const struct ggml_object * obj); + GGML_API void ggml_print_objects(const struct ggml_context * ctx); + + GGML_API int64_t ggml_nelements (const struct ggml_tensor * tensor); + GGML_API int64_t ggml_nrows (const struct ggml_tensor * tensor); + GGML_API size_t ggml_nbytes (const struct ggml_tensor * tensor); + GGML_API size_t ggml_nbytes_pad(const struct ggml_tensor * tensor); // same as ggml_nbytes() but padded to GGML_MEM_ALIGN + + GGML_API int64_t ggml_blck_size(enum ggml_type type); + GGML_API size_t ggml_type_size(enum ggml_type type); // size in bytes for all elements in a block + GGML_API size_t ggml_row_size (enum ggml_type type, int64_t ne); // size in bytes for all elements in a row + + GGML_DEPRECATED( + GGML_API double ggml_type_sizef(enum ggml_type type), // ggml_type_size()/ggml_blck_size() as float + "use ggml_row_size() instead"); + + GGML_API const char * ggml_type_name(enum ggml_type type); + GGML_API const char * ggml_op_name (enum ggml_op op); + GGML_API const char * ggml_op_symbol(enum ggml_op op); + + GGML_API const char * ggml_unary_op_name(enum ggml_unary_op op); + GGML_API const char * ggml_glu_op_name(enum ggml_glu_op op); + GGML_API const char * ggml_op_desc(const struct ggml_tensor * t); // unary or op name + + GGML_API size_t ggml_element_size(const struct ggml_tensor * tensor); + + GGML_API bool ggml_is_quantized(enum ggml_type type); + + // TODO: temporary until model loading of ggml examples is refactored + GGML_API enum ggml_type ggml_ftype_to_ggml_type(enum ggml_ftype ftype); + + GGML_API bool ggml_is_transposed(const struct ggml_tensor * tensor); + GGML_API bool ggml_is_permuted (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_empty (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_scalar (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_vector (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_matrix (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_3d (const struct ggml_tensor * tensor); + GGML_API int ggml_n_dims (const struct ggml_tensor * tensor); // returns 1 for scalars + + // returns whether the tensor elements can be iterated over with a flattened index (no gaps, no permutation) + GGML_API bool ggml_is_contiguous (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_contiguous_0(const struct ggml_tensor * tensor); // same as ggml_is_contiguous() + GGML_API bool ggml_is_contiguous_1(const struct ggml_tensor * tensor); // contiguous for dims >= 1 + GGML_API bool ggml_is_contiguous_2(const struct ggml_tensor * tensor); // contiguous for dims >= 2 + + // returns whether the tensor elements are allocated as one contiguous block of memory (no gaps, but permutation ok) + GGML_API bool ggml_is_contiguously_allocated(const struct ggml_tensor * tensor); + + // true for tensor that is stored in memory as CxWxHxN and has been permuted to WxHxCxN + GGML_API bool ggml_is_contiguous_channels(const struct ggml_tensor * tensor); + + // true if the elements in dimension 0 are contiguous, or there is just 1 block of elements + GGML_API bool ggml_is_contiguous_rows(const struct ggml_tensor * tensor); + + GGML_API bool ggml_are_same_shape (const struct ggml_tensor * t0, const struct ggml_tensor * t1); + GGML_API bool ggml_are_same_stride(const struct ggml_tensor * t0, const struct ggml_tensor * t1); + + GGML_API bool ggml_can_repeat(const struct ggml_tensor * t0, const struct ggml_tensor * t1); + + // use this to compute the memory overhead of a tensor + GGML_API size_t ggml_tensor_overhead(void); + + GGML_API bool ggml_validate_row_data(enum ggml_type type, const void * data, size_t nbytes); + + // main + + GGML_API struct ggml_context * ggml_init (struct ggml_init_params params); + GGML_API void ggml_reset(struct ggml_context * ctx); + GGML_API void ggml_free (struct ggml_context * ctx); + + GGML_API size_t ggml_used_mem(const struct ggml_context * ctx); + + GGML_API bool ggml_get_no_alloc(struct ggml_context * ctx); + GGML_API void ggml_set_no_alloc(struct ggml_context * ctx, bool no_alloc); + + GGML_API void * ggml_get_mem_buffer (const struct ggml_context * ctx); + GGML_API size_t ggml_get_mem_size (const struct ggml_context * ctx); + GGML_API size_t ggml_get_max_tensor_size(const struct ggml_context * ctx); + + GGML_API struct ggml_tensor * ggml_new_tensor( + struct ggml_context * ctx, + enum ggml_type type, + int n_dims, + const int64_t *ne); + + GGML_API struct ggml_tensor * ggml_new_tensor_1d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0); + + GGML_API struct ggml_tensor * ggml_new_tensor_2d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1); + + GGML_API struct ggml_tensor * ggml_new_tensor_3d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1, + int64_t ne2); + + GGML_API struct ggml_tensor * ggml_new_tensor_4d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3); + + GGML_API void * ggml_new_buffer(struct ggml_context * ctx, size_t nbytes); + + GGML_API struct ggml_tensor * ggml_dup_tensor (struct ggml_context * ctx, const struct ggml_tensor * src); + GGML_API struct ggml_tensor * ggml_view_tensor(struct ggml_context * ctx, struct ggml_tensor * src); + + // Context tensor enumeration and lookup + GGML_API struct ggml_tensor * ggml_get_first_tensor(const struct ggml_context * ctx); + GGML_API struct ggml_tensor * ggml_get_next_tensor (const struct ggml_context * ctx, struct ggml_tensor * tensor); + GGML_API struct ggml_tensor * ggml_get_tensor(struct ggml_context * ctx, const char * name); + + // Converts a flat index into coordinates + GGML_API void ggml_unravel_index(const struct ggml_tensor * tensor, int64_t i, int64_t * i0, int64_t * i1, int64_t * i2, int64_t * i3); + + GGML_API enum ggml_unary_op ggml_get_unary_op(const struct ggml_tensor * tensor); + GGML_API enum ggml_glu_op ggml_get_glu_op(const struct ggml_tensor * tensor); + + GGML_API void * ggml_get_data (const struct ggml_tensor * tensor); + GGML_API float * ggml_get_data_f32(const struct ggml_tensor * tensor); + + GGML_API const char * ggml_get_name (const struct ggml_tensor * tensor); + GGML_API struct ggml_tensor * ggml_set_name ( struct ggml_tensor * tensor, const char * name); + GGML_ATTRIBUTE_FORMAT(2, 3) + GGML_API struct ggml_tensor * ggml_format_name( struct ggml_tensor * tensor, const char * fmt, ...); + + // Tensor flags + GGML_API void ggml_set_input(struct ggml_tensor * tensor); + GGML_API void ggml_set_output(struct ggml_tensor * tensor); + GGML_API void ggml_set_param(struct ggml_tensor * tensor); + GGML_API void ggml_set_loss(struct ggml_tensor * tensor); + + // + // operations on tensors with backpropagation + // + + GGML_API struct ggml_tensor * ggml_dup( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_dup_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_add( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_add_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_add_cast( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + enum ggml_type type); + + // dst[i0, i1, i2] = a[i0, i1, i2] + b[i0, ids[i1, i2]] + GGML_API struct ggml_tensor * ggml_add_id( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * ids); + + GGML_API struct ggml_tensor * ggml_add1( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_add1_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // dst = a + // view(dst, nb1, nb2, nb3, offset) += b + // return dst + GGML_API struct ggml_tensor * ggml_acc( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); + + GGML_API struct ggml_tensor * ggml_acc_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); + + GGML_API struct ggml_tensor * ggml_sub( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_sub_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_mul( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_mul_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_div( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_div_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_sqr( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sqr_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sqrt( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sqrt_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_log( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_log_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sin( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sin_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_cos( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_cos_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // return scalar + GGML_API struct ggml_tensor * ggml_sum( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // sums along rows, with input shape [a,b,c,d] return shape [1,b,c,d] + GGML_API struct ggml_tensor * ggml_sum_rows( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // mean along rows + GGML_API struct ggml_tensor * ggml_mean( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // argmax along rows + GGML_API struct ggml_tensor * ggml_argmax( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // count number of equal elements in a and b + GGML_API struct ggml_tensor * ggml_count_equal( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // if a is the same shape as b, and a is not parameter, return a + // otherwise, return a new tensor: repeat(a) to fit in b + GGML_API struct ggml_tensor * ggml_repeat( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // repeat a to the specified shape + GGML_API struct ggml_tensor * ggml_repeat_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3); + + // sums repetitions in a into shape of b + GGML_API struct ggml_tensor * ggml_repeat_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); // sum up values that are adjacent in dims > 0 instead of repeated with same stride + + // concat a and b along dim + // used in stable-diffusion + GGML_API struct ggml_tensor * ggml_concat( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int dim); + + GGML_API struct ggml_tensor * ggml_abs( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_abs_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sgn( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sgn_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_neg( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_neg_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_step( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_step_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_tanh( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_tanh_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_elu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_elu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_relu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_leaky_relu( + struct ggml_context * ctx, + struct ggml_tensor * a, float negative_slope, bool inplace); + + GGML_API struct ggml_tensor * ggml_relu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sigmoid( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sigmoid_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // GELU using erf (error function) when possible + // some backends may fallback to approximation based on Abramowitz and Stegun formula + GGML_API struct ggml_tensor * ggml_gelu_erf( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu_erf_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu_quick( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu_quick_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_silu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_silu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // a - x + // b - dy + GGML_API struct ggml_tensor * ggml_silu_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // hardswish(x) = x * relu6(x + 3) / 6 + GGML_API struct ggml_tensor * ggml_hardswish( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // hardsigmoid(x) = relu6(x + 3) / 6 + GGML_API struct ggml_tensor * ggml_hardsigmoid( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_exp( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_exp_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_floor( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_floor_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_ceil( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_ceil_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_round( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_round_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + /** + * Truncates the fractional part of each element in the tensor (towards zero). + * For example: trunc(3.7) = 3.0, trunc(-2.9) = -2.0 + * Similar to std::trunc in C/C++. + */ + + GGML_API struct ggml_tensor * ggml_trunc( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_trunc_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + + + // xIELU activation function + // x = x * (c_a(alpha_n) + c_b(alpha_p, beta) * sigmoid(beta * x)) + eps * (x > 0) + // where c_a = softplus and c_b(a, b) = softplus(a) + b are constraining functions + // that constrain the positive and negative source alpha values respectively + GGML_API struct ggml_tensor * ggml_xielu( + struct ggml_context * ctx, + struct ggml_tensor * a, + float alpha_n, + float alpha_p, + float beta, + float eps); + + // gated linear unit ops + // A: n columns, r rows, + // result is n / 2 columns, r rows, + // expects gate in second half of row, unless swapped is true + GGML_API struct ggml_tensor * ggml_glu( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_glu_op op, + bool swapped); + + GGML_API struct ggml_tensor * ggml_reglu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_reglu_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_swiglu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_swiglu_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_erf( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_erf_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_quick( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_quick_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // A: n columns, r rows, + // B: n columns, r rows, + GGML_API struct ggml_tensor * ggml_glu_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + enum ggml_glu_op op); + + GGML_API struct ggml_tensor * ggml_reglu_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_geglu_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_swiglu_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_geglu_erf_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_geglu_quick_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_swiglu_oai( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + float alpha, + float limit); + + // normalize along rows + GGML_API struct ggml_tensor * ggml_norm( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + GGML_API struct ggml_tensor * ggml_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + GGML_API struct ggml_tensor * ggml_rms_norm( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + GGML_API struct ggml_tensor * ggml_rms_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + // group normalize along ne0*ne1*n_groups + // used in stable-diffusion + GGML_API struct ggml_tensor * ggml_group_norm( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_groups, + float eps); + + GGML_API struct ggml_tensor * ggml_group_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_groups, + float eps); + + // l2 normalize along rows + // used in rwkv v7 + GGML_API struct ggml_tensor * ggml_l2_norm( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + GGML_API struct ggml_tensor * ggml_l2_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + // a - x + // b - dy + GGML_API struct ggml_tensor * ggml_rms_norm_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + float eps); + + // A: k columns, n rows => [ne03, ne02, n, k] + // B: k columns, m rows (i.e. we transpose it internally) => [ne03 * x, ne02 * y, m, k] + // result is n columns, m rows => [ne03 * x, ne02 * y, m, n] + GGML_API struct ggml_tensor * ggml_mul_mat( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // change the precision of a matrix multiplication + // set to GGML_PREC_F32 for higher precision (useful for phi-2) + GGML_API void ggml_mul_mat_set_prec( + struct ggml_tensor * a, + enum ggml_prec prec); + + // indirect matrix multiplication + GGML_API struct ggml_tensor * ggml_mul_mat_id( + struct ggml_context * ctx, + struct ggml_tensor * as, + struct ggml_tensor * b, + struct ggml_tensor * ids); + + // A: m columns, n rows, + // B: p columns, n rows, + // result is m columns, p rows + GGML_API struct ggml_tensor * ggml_out_prod( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // + // operations on tensors without backpropagation + // + + GGML_API struct ggml_tensor * ggml_scale( + struct ggml_context * ctx, + struct ggml_tensor * a, + float s); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_scale_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float s); + + // x = s * a + b + GGML_API struct ggml_tensor * ggml_scale_bias( + struct ggml_context * ctx, + struct ggml_tensor * a, + float s, + float b); + + GGML_API struct ggml_tensor * ggml_scale_bias_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float s, + float b); + + // b -> view(a,offset,nb1,nb2,3), return modified a + GGML_API struct ggml_tensor * ggml_set( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); // in bytes + + // b -> view(a,offset,nb1,nb2,3), return view(a) + GGML_API struct ggml_tensor * ggml_set_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); // in bytes + + GGML_API struct ggml_tensor * ggml_set_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t offset); // in bytes + + GGML_API struct ggml_tensor * ggml_set_1d_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t offset); // in bytes + + // b -> view(a,offset,nb1,nb2,3), return modified a + GGML_API struct ggml_tensor * ggml_set_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t offset); // in bytes + + // b -> view(a,offset,nb1,nb2,3), return view(a) + GGML_API struct ggml_tensor * ggml_set_2d_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t offset); // in bytes + + // a -> b, return view(b) + GGML_API struct ggml_tensor * ggml_cpy( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // note: casting from f32 to i32 will discard the fractional part + GGML_API struct ggml_tensor * ggml_cast( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_type type); + + // make contiguous + GGML_API struct ggml_tensor * ggml_cont( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // make contiguous, with new shape + GGML_API struct ggml_tensor * ggml_cont_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0); + + GGML_API struct ggml_tensor * ggml_cont_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1); + + GGML_API struct ggml_tensor * ggml_cont_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2); + + GGML_API struct ggml_tensor * ggml_cont_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3); + + // return view(a), b specifies the new shape + // TODO: when we start computing gradient, make a copy instead of view + GGML_API struct ggml_tensor * ggml_reshape( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // return view(a) + // TODO: when we start computing gradient, make a copy instead of view + GGML_API struct ggml_tensor * ggml_reshape_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0); + + GGML_API struct ggml_tensor * ggml_reshape_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1); + + // return view(a) + // TODO: when we start computing gradient, make a copy instead of view + GGML_API struct ggml_tensor * ggml_reshape_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2); + + GGML_API struct ggml_tensor * ggml_reshape_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3); + + // offset in bytes + GGML_API struct ggml_tensor * ggml_view_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + size_t offset); + + GGML_API struct ggml_tensor * ggml_view_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + size_t nb1, // row stride in bytes + size_t offset); + + GGML_API struct ggml_tensor * ggml_view_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + size_t nb1, // row stride in bytes + size_t nb2, // slice stride in bytes + size_t offset); + + GGML_API struct ggml_tensor * ggml_view_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3, + size_t nb1, // row stride in bytes + size_t nb2, // slice stride in bytes + size_t nb3, + size_t offset); + + GGML_API struct ggml_tensor * ggml_permute( + struct ggml_context * ctx, + struct ggml_tensor * a, + int axis0, + int axis1, + int axis2, + int axis3); + + // alias for ggml_permute(ctx, a, 1, 0, 2, 3) + GGML_API struct ggml_tensor * ggml_transpose( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // supports 4D a: + // a [n_embd, ne1, ne2, ne3] + // b I32 [n_rows, ne2, ne3, 1] + // + // return [n_embd, n_rows, ne2, ne3] + GGML_API struct ggml_tensor * ggml_get_rows( + struct ggml_context * ctx, + struct ggml_tensor * a, // data + struct ggml_tensor * b); // row indices + + GGML_API struct ggml_tensor * ggml_get_rows_back( + struct ggml_context * ctx, + struct ggml_tensor * a, // gradients of ggml_get_rows result + struct ggml_tensor * b, // row indices + struct ggml_tensor * c); // data for ggml_get_rows, only used for its shape + + // a TD [n_embd, ne1, ne2, ne3] + // b TS [n_embd, n_rows, ne02, ne03] | ne02 == ne2, ne03 == ne3 + // c I64 [n_rows, ne11, ne12, 1] | c[i] in [0, ne1) + // + // undefined behavior if destination rows overlap + // + // broadcast: + // ne2 % ne11 == 0 + // ne3 % ne12 == 0 + // + // return view(a) + GGML_API struct ggml_tensor * ggml_set_rows( + struct ggml_context * ctx, + struct ggml_tensor * a, // destination + struct ggml_tensor * b, // source + struct ggml_tensor * c); // row indices + + GGML_API struct ggml_tensor * ggml_diag( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // set elements above the diagonal to -INF + GGML_API struct ggml_tensor * ggml_diag_mask_inf( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_diag_mask_inf_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + // set elements above the diagonal to 0 + GGML_API struct ggml_tensor * ggml_diag_mask_zero( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_diag_mask_zero_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + GGML_API struct ggml_tensor * ggml_soft_max( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_soft_max_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // a [ne0, ne01, ne02, ne03] + // mask [ne0, ne11, ne12, ne13] | ne11 >= ne01, F16 or F32, optional + // + // broadcast: + // ne02 % ne12 == 0 + // ne03 % ne13 == 0 + // + // fused soft_max(a*scale + mask*(ALiBi slope)) + // max_bias = 0.0f for no ALiBi + GGML_API struct ggml_tensor * ggml_soft_max_ext( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * mask, + float scale, + float max_bias); + + GGML_API struct ggml_tensor * ggml_soft_max_ext_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * mask, + float scale, + float max_bias); + + GGML_API void ggml_soft_max_add_sinks( + struct ggml_tensor * a, + struct ggml_tensor * sinks); + + GGML_API struct ggml_tensor * ggml_soft_max_ext_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + float scale, + float max_bias); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_soft_max_ext_back_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + float scale, + float max_bias); + + // rotary position embedding + // if (mode & 1) - skip n_past elements (NOT SUPPORTED) + // if (mode & GGML_ROPE_TYPE_NEOX) - GPT-NeoX style + // + // b is an int32 vector with size a->ne[2], it contains the positions + GGML_API struct ggml_tensor * ggml_rope( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int n_dims, + int mode); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_rope_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int n_dims, + int mode); + + // custom RoPE + // c is freq factors (e.g. phi3-128k), (optional) + GGML_API struct ggml_tensor * ggml_rope_ext( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + GGML_API struct ggml_tensor * ggml_rope_multi( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int sections[GGML_MROPE_SECTIONS], + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_rope_ext_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + GGML_API struct ggml_tensor * ggml_rope_multi_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int sections[GGML_MROPE_SECTIONS], + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_rope_custom( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow), + "use ggml_rope_ext instead"); + + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_rope_custom_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow), + "use ggml_rope_ext_inplace instead"); + + // compute correction dims for YaRN RoPE scaling + GGML_API void ggml_rope_yarn_corr_dims( + int n_dims, int n_ctx_orig, float freq_base, float beta_fast, float beta_slow, float dims[2]); + + // rotary position embedding backward, i.e compute dx from dy + // a - dy + GGML_API struct ggml_tensor * ggml_rope_ext_back( + struct ggml_context * ctx, + struct ggml_tensor * a, // gradients of ggml_rope result + struct ggml_tensor * b, // positions + struct ggml_tensor * c, // freq factors + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + GGML_API struct ggml_tensor * ggml_rope_multi_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int sections[4], + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + + // clamp + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_clamp( + struct ggml_context * ctx, + struct ggml_tensor * a, + float min, + float max); + + // im2col + // converts data into a format that effectively results in a convolution when combined with matrix multiplication + GGML_API struct ggml_tensor * ggml_im2col( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1, // dilation dimension 1 + bool is_2D, + enum ggml_type dst_type); + + GGML_API struct ggml_tensor * ggml_im2col_back( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // gradient of im2col output + int64_t * ne, // shape of im2col input + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1, // dilation dimension 1 + bool is_2D); + + GGML_API struct ggml_tensor * ggml_conv_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride + int p0, // padding + int d0); // dilation + + // conv_1d with padding = half + // alias for ggml_conv_1d(a, b, s, a->ne[0]/2, d) + GGML_API struct ggml_tensor* ggml_conv_1d_ph( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s, // stride + int d); // dilation + + // depthwise + // TODO: this is very likely wrong for some cases! - needs more testing + GGML_API struct ggml_tensor * ggml_conv_1d_dw( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride + int p0, // padding + int d0); // dilation + + GGML_API struct ggml_tensor * ggml_conv_1d_dw_ph( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride + int d0); // dilation + + GGML_API struct ggml_tensor * ggml_conv_transpose_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride + int p0, // padding + int d0); // dilation + + GGML_API struct ggml_tensor * ggml_conv_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1); // dilation dimension 1 + + GGML_API struct ggml_tensor * ggml_im2col_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int64_t IC, + int s0, // stride width + int s1, // stride height + int s2, // stride depth + int p0, // padding width + int p1, // padding height + int p2, // padding depth + int d0, // dilation width + int d1, // dilation height + int d2, // dilation depth + enum ggml_type dst_type); + + // a: [OC*IC, KD, KH, KW] + // b: [N*IC, ID, IH, IW] + // result: [N*OC, OD, OH, OW] + GGML_API struct ggml_tensor * ggml_conv_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int64_t IC, + int s0, // stride width + int s1, // stride height + int s2, // stride depth + int p0, // padding width + int p1, // padding height + int p2, // padding depth + int d0, // dilation width + int d1, // dilation height + int d2 // dilation depth + ); + + // kernel size is a->ne[0] x a->ne[1] + // stride is equal to kernel size + // padding is zero + // example: + // a: 16 16 3 768 + // b: 1024 1024 3 1 + // res: 64 64 768 1 + // used in sam + GGML_API struct ggml_tensor * ggml_conv_2d_sk_p0( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // kernel size is a->ne[0] x a->ne[1] + // stride is 1 + // padding is half + // example: + // a: 3 3 256 256 + // b: 64 64 256 1 + // res: 64 64 256 1 + // used in sam + GGML_API struct ggml_tensor * ggml_conv_2d_s1_ph( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // depthwise (via im2col and mul_mat) + GGML_API struct ggml_tensor * ggml_conv_2d_dw( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1); // dilation dimension 1 + + // Depthwise 2D convolution + // may be faster than ggml_conv_2d_dw, but not available in all backends + // a: KW KH 1 C convolution kernel + // b: W H C N input data + // res: W_out H_out C N + GGML_API struct ggml_tensor * ggml_conv_2d_dw_direct( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int stride0, + int stride1, + int pad0, + int pad1, + int dilation0, + int dilation1); + + GGML_API struct ggml_tensor * ggml_conv_transpose_2d_p0( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int stride); + + GGML_API struct ggml_tensor * ggml_conv_2d_direct( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel [KW, KH, IC, OC] + struct ggml_tensor * b, // input data [W, H, C, N] + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1); // dilation dimension 1 + + GGML_API struct ggml_tensor * ggml_conv_3d_direct( + struct ggml_context * ctx, + struct ggml_tensor * a, // kernel [KW, KH, KD, IC * OC] + struct ggml_tensor * b, // input [W, H, D, C * N] + int s0, // stride + int s1, + int s2, + int p0, // padding + int p1, + int p2, + int d0, // dilation + int d1, + int d2, + int n_channels, + int n_batch, + int n_channels_out); + + enum ggml_op_pool { + GGML_OP_POOL_MAX, + GGML_OP_POOL_AVG, + GGML_OP_POOL_COUNT, + }; + + GGML_API struct ggml_tensor * ggml_pool_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_op_pool op, + int k0, // kernel size + int s0, // stride + int p0); // padding + + // the result will have 2*p0 padding for the first dimension + // and 2*p1 padding for the second dimension + GGML_API struct ggml_tensor * ggml_pool_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_op_pool op, + int k0, + int k1, + int s0, + int s1, + float p0, + float p1); + + GGML_API struct ggml_tensor * ggml_pool_2d_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * af, // "a"/input used in forward pass + enum ggml_op_pool op, + int k0, + int k1, + int s0, + int s1, + float p0, + float p1); + + enum ggml_scale_mode { + GGML_SCALE_MODE_NEAREST = 0, + GGML_SCALE_MODE_BILINEAR = 1, + GGML_SCALE_MODE_BICUBIC = 2, + + GGML_SCALE_MODE_COUNT + }; + + enum ggml_scale_flag { + GGML_SCALE_FLAG_ALIGN_CORNERS = (1 << 8) + }; + + // interpolate + // multiplies ne0 and ne1 by scale factor + GGML_API struct ggml_tensor * ggml_upscale( + struct ggml_context * ctx, + struct ggml_tensor * a, + int scale_factor, + enum ggml_scale_mode mode); + + // interpolate + // interpolate scale to specified dimensions + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_upscale_ext( + struct ggml_context * ctx, + struct ggml_tensor * a, + int ne0, + int ne1, + int ne2, + int ne3, + enum ggml_scale_mode mode), + "use ggml_interpolate instead"); + + // Up- or downsamples the input to the specified size. + // 2D scale modes (eg. bilinear) are applied to the first two dimensions. + GGML_API struct ggml_tensor * ggml_interpolate( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3, + uint32_t mode); // ggml_scale_mode [ | ggml_scale_flag...] + + // pad each dimension with zeros: [x, ..., x] -> [x, ..., x, 0, ..., 0] + GGML_API struct ggml_tensor * ggml_pad( + struct ggml_context * ctx, + struct ggml_tensor * a, + int p0, + int p1, + int p2, + int p3); + + GGML_API struct ggml_tensor * ggml_pad_ext( + struct ggml_context * ctx, + struct ggml_tensor * a, + int lp0, + int rp0, + int lp1, + int rp1, + int lp2, + int rp2, + int lp3, + int rp3 + ); + + // pad each dimension with reflection: [a, b, c, d] -> [b, a, b, c, d, c] + GGML_API struct ggml_tensor * ggml_pad_reflect_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int p0, + int p1); + + // Move tensor elements by an offset given for each dimension. Elements that + // are shifted beyond the last position are wrapped around to the beginning. + GGML_API struct ggml_tensor * ggml_roll( + struct ggml_context * ctx, + struct ggml_tensor * a, + int shift0, + int shift1, + int shift2, + int shift3); + + + // Ref: https://github.com/CompVis/stable-diffusion/blob/main/ldm/modules/diffusionmodules/util.py#L151 + // timesteps: [N,] + // return: [N, dim] + GGML_API struct ggml_tensor * ggml_timestep_embedding( + struct ggml_context * ctx, + struct ggml_tensor * timesteps, + int dim, + int max_period); + + // sort rows + enum ggml_sort_order { + GGML_SORT_ORDER_ASC, + GGML_SORT_ORDER_DESC, + }; + + GGML_API struct ggml_tensor * ggml_argsort( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_sort_order order); + + GGML_API struct ggml_tensor * ggml_arange( + struct ggml_context * ctx, + float start, + float stop, + float step); + + // top k elements per row + GGML_API struct ggml_tensor * ggml_top_k( + struct ggml_context * ctx, + struct ggml_tensor * a, + int k); + +#define GGML_KQ_MASK_PAD 64 + + // q: [n_embd_k, n_batch, n_head, ne3 ] + // k: [n_embd_k, n_kv, n_head_kv, ne3 ] + // v: [n_embd_v, n_kv, n_head_kv, ne3 ] !! not transposed !! + // mask: [n_kv, n_batch_pad, ne32, ne33] !! n_batch_pad = GGML_PAD(n_batch, GGML_KQ_MASK_PAD) !! + // res: [n_embd_v, n_head, n_batch, ne3 ] !! permuted !! + // + // broadcast: + // n_head % n_head_kv == 0 + // n_head % ne32 == 0 + // ne3 % ne33 == 0 + // + GGML_API struct ggml_tensor * ggml_flash_attn_ext( + struct ggml_context * ctx, + struct ggml_tensor * q, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * mask, + float scale, + float max_bias, + float logit_softcap); + + GGML_API void ggml_flash_attn_ext_set_prec( + struct ggml_tensor * a, + enum ggml_prec prec); + + GGML_API enum ggml_prec ggml_flash_attn_ext_get_prec( + const struct ggml_tensor * a); + + GGML_API void ggml_flash_attn_ext_add_sinks( + struct ggml_tensor * a, + struct ggml_tensor * sinks); + + // TODO: needs to be adapted to ggml_flash_attn_ext + GGML_API struct ggml_tensor * ggml_flash_attn_back( + struct ggml_context * ctx, + struct ggml_tensor * q, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * d, + bool masked); + + GGML_API struct ggml_tensor * ggml_ssm_conv( + struct ggml_context * ctx, + struct ggml_tensor * sx, + struct ggml_tensor * c); + + GGML_API struct ggml_tensor * ggml_ssm_scan( + struct ggml_context * ctx, + struct ggml_tensor * s, + struct ggml_tensor * x, + struct ggml_tensor * dt, + struct ggml_tensor * A, + struct ggml_tensor * B, + struct ggml_tensor * C, + struct ggml_tensor * ids); + + // partition into non-overlapping windows with padding if needed + // example: + // a: 768 64 64 1 + // w: 14 + // res: 768 14 14 25 + // used in sam + GGML_API struct ggml_tensor * ggml_win_part( + struct ggml_context * ctx, + struct ggml_tensor * a, + int w); + + // reverse of ggml_win_part + // used in sam + GGML_API struct ggml_tensor * ggml_win_unpart( + struct ggml_context * ctx, + struct ggml_tensor * a, + int w0, + int h0, + int w); + + GGML_API struct ggml_tensor * ggml_unary( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_unary_op op); + + GGML_API struct ggml_tensor * ggml_unary_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_unary_op op); + + // used in sam + GGML_API struct ggml_tensor * ggml_get_rel_pos( + struct ggml_context * ctx, + struct ggml_tensor * a, + int qh, + int kh); + + // used in sam + GGML_API struct ggml_tensor * ggml_add_rel_pos( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * pw, + struct ggml_tensor * ph); + + GGML_API struct ggml_tensor * ggml_add_rel_pos_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * pw, + struct ggml_tensor * ph); + + GGML_API struct ggml_tensor * ggml_rwkv_wkv6( + struct ggml_context * ctx, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * r, + struct ggml_tensor * tf, + struct ggml_tensor * td, + struct ggml_tensor * state); + + GGML_API struct ggml_tensor * ggml_gated_linear_attn( + struct ggml_context * ctx, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * q, + struct ggml_tensor * g, + struct ggml_tensor * state, + float scale); + + GGML_API struct ggml_tensor * ggml_rwkv_wkv7( + struct ggml_context * ctx, + struct ggml_tensor * r, + struct ggml_tensor * w, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * state); + + // custom operators + + typedef void (*ggml_custom1_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, int ith, int nth, void * userdata); + typedef void (*ggml_custom2_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, const struct ggml_tensor * b, int ith, int nth, void * userdata); + typedef void (*ggml_custom3_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, const struct ggml_tensor * b, const struct ggml_tensor * c, int ith, int nth, void * userdata); + +#define GGML_N_TASKS_MAX (-1) + // n_tasks == GGML_N_TASKS_MAX means to use max number of tasks + + GGML_API struct ggml_tensor * ggml_map_custom1( + struct ggml_context * ctx, + struct ggml_tensor * a, + ggml_custom1_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom1_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + ggml_custom1_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom2( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + ggml_custom2_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom2_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + ggml_custom2_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom3( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + ggml_custom3_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom3_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + ggml_custom3_op_t fun, + int n_tasks, + void * userdata); + + typedef void (*ggml_custom_op_t)(struct ggml_tensor * dst , int ith, int nth, void * userdata); + + GGML_API struct ggml_tensor * ggml_custom_4d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3, + struct ggml_tensor ** args, + int n_args, + ggml_custom_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_custom_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor ** args, + int n_args, + ggml_custom_op_t fun, + int n_tasks, + void * userdata); + + // loss function + + GGML_API struct ggml_tensor * ggml_cross_entropy_loss( + struct ggml_context * ctx, + struct ggml_tensor * a, // logits + struct ggml_tensor * b); // labels + + GGML_API struct ggml_tensor * ggml_cross_entropy_loss_back( + struct ggml_context * ctx, + struct ggml_tensor * a, // logits + struct ggml_tensor * b, // labels + struct ggml_tensor * c); // gradients of cross_entropy_loss result + + // AdamW optimizer step + // Paper: https://arxiv.org/pdf/1711.05101v3.pdf + // PyTorch: https://pytorch.org/docs/stable/generated/torch.optim.AdamW.html + GGML_API struct ggml_tensor * ggml_opt_step_adamw( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * grad, + struct ggml_tensor * m, + struct ggml_tensor * v, + struct ggml_tensor * adamw_params); // parameters such as the learning rate + + // stochastic gradient descent step (with weight decay) + GGML_API struct ggml_tensor * ggml_opt_step_sgd( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * grad, + struct ggml_tensor * sgd_params); // alpha, weight decay + + // + // automatic differentiation + // + + GGML_API void ggml_build_forward_expand(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor); + GGML_API void ggml_build_backward_expand( + struct ggml_context * ctx, // context for gradient computation + struct ggml_cgraph * cgraph, + struct ggml_tensor ** grad_accs); + + // graph allocation in a context + GGML_API struct ggml_cgraph * ggml_new_graph (struct ggml_context * ctx); // size = GGML_DEFAULT_GRAPH_SIZE, grads = false + GGML_API struct ggml_cgraph * ggml_new_graph_custom(struct ggml_context * ctx, size_t size, bool grads); + GGML_API struct ggml_cgraph * ggml_graph_dup (struct ggml_context * ctx, struct ggml_cgraph * cgraph, bool force_grads); + GGML_API void ggml_graph_cpy (struct ggml_cgraph * src, struct ggml_cgraph * dst); + GGML_API void ggml_graph_reset (struct ggml_cgraph * cgraph); // set regular grads + optimizer momenta to 0, set loss grad to 1 + GGML_API void ggml_graph_clear (struct ggml_cgraph * cgraph); + + GGML_API int ggml_graph_size (struct ggml_cgraph * cgraph); + GGML_API struct ggml_tensor * ggml_graph_node (struct ggml_cgraph * cgraph, int i); // if i < 0, returns nodes[n_nodes + i] + GGML_API struct ggml_tensor ** ggml_graph_nodes (struct ggml_cgraph * cgraph); + GGML_API int ggml_graph_n_nodes(struct ggml_cgraph * cgraph); + + GGML_API void ggml_graph_add_node(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor); + + GGML_API size_t ggml_graph_overhead(void); + GGML_API size_t ggml_graph_overhead_custom(size_t size, bool grads); + + GGML_API struct ggml_tensor * ggml_graph_get_tensor (const struct ggml_cgraph * cgraph, const char * name); + GGML_API struct ggml_tensor * ggml_graph_get_grad (const struct ggml_cgraph * cgraph, const struct ggml_tensor * node); + GGML_API struct ggml_tensor * ggml_graph_get_grad_acc(const struct ggml_cgraph * cgraph, const struct ggml_tensor * node); + + // print info and performance information for the graph + GGML_API void ggml_graph_print(const struct ggml_cgraph * cgraph); + + // dump the graph into a file using the dot format + GGML_API void ggml_graph_dump_dot(const struct ggml_cgraph * gb, const struct ggml_cgraph * gf, const char * filename); + + // TODO these functions were sandwiched in the old optimization interface, is there a better place for them? + typedef void (*ggml_log_callback)(enum ggml_log_level level, const char * text, void * user_data); + + // Set callback for all future logging events. + // If this is not called, or NULL is supplied, everything is output on stderr. + GGML_API void ggml_log_set(ggml_log_callback log_callback, void * user_data); + + GGML_API struct ggml_tensor * ggml_set_zero(struct ggml_tensor * tensor); + + // + // quantization + // + + // - ggml_quantize_init can be called multiple times with the same type + // it will only initialize the quantization tables for the first call or after ggml_quantize_free + // automatically called by ggml_quantize_chunk for convenience + // + // - ggml_quantize_free will free any memory allocated by ggml_quantize_init + // call this at the end of the program to avoid memory leaks + // + // note: these are thread-safe + // + GGML_API void ggml_quantize_init(enum ggml_type type); + GGML_API void ggml_quantize_free(void); + + // some quantization type cannot be used without an importance matrix + GGML_API bool ggml_quantize_requires_imatrix(enum ggml_type type); + + // calls ggml_quantize_init internally (i.e. can allocate memory) + GGML_API size_t ggml_quantize_chunk( + enum ggml_type type, + const float * src, + void * dst, + int64_t start, + int64_t nrows, + int64_t n_per_row, + const float * imatrix); + +#ifdef __cplusplus + // restrict not standard in C++ +# if defined(__GNUC__) +# define GGML_RESTRICT __restrict__ +# elif defined(__clang__) +# define GGML_RESTRICT __restrict +# elif defined(_MSC_VER) +# define GGML_RESTRICT __restrict +# else +# define GGML_RESTRICT +# endif +#else +# if defined (_MSC_VER) && (__STDC_VERSION__ < 201112L) +# define GGML_RESTRICT __restrict +# else +# define GGML_RESTRICT restrict +# endif +#endif + typedef void (*ggml_to_float_t) (const void * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); + typedef void (*ggml_from_float_t)(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); + + struct ggml_type_traits { + const char * type_name; + int64_t blck_size; + int64_t blck_size_interleave; // interleave elements in blocks + size_t type_size; + bool is_quantized; + ggml_to_float_t to_float; + ggml_from_float_t from_float_ref; + }; + + GGML_API const struct ggml_type_traits * ggml_get_type_traits(enum ggml_type type); + + // ggml threadpool + // TODO: currently, only a few functions are in the base ggml API, while the rest are in the CPU backend + // the goal should be to create an API that other backends can use move everything to the ggml base + + // scheduling priorities + enum ggml_sched_priority { + GGML_SCHED_PRIO_LOW = -1, + GGML_SCHED_PRIO_NORMAL, + GGML_SCHED_PRIO_MEDIUM, + GGML_SCHED_PRIO_HIGH, + GGML_SCHED_PRIO_REALTIME + }; + + // threadpool params + // Use ggml_threadpool_params_default() or ggml_threadpool_params_init() to populate the defaults + struct ggml_threadpool_params { + bool cpumask[GGML_MAX_N_THREADS]; // mask of cpu cores (all-zeros means use default affinity settings) + int n_threads; // number of threads + enum ggml_sched_priority prio; // thread priority + uint32_t poll; // polling level (0 - no polling, 100 - aggressive polling) + bool strict_cpu; // strict cpu placement + bool paused; // start in paused state + }; + + struct ggml_threadpool; // forward declaration, see ggml.c + + typedef struct ggml_threadpool * ggml_threadpool_t; + + GGML_API struct ggml_threadpool_params ggml_threadpool_params_default(int n_threads); + GGML_API void ggml_threadpool_params_init (struct ggml_threadpool_params * p, int n_threads); + GGML_API bool ggml_threadpool_params_match (const struct ggml_threadpool_params * p0, const struct ggml_threadpool_params * p1); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/gguf.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/gguf.h new file mode 100644 index 00000000..79ee2020 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/gguf.h @@ -0,0 +1,202 @@ +// This file contains functionality related to "GGUF" files, the binary file format used by ggml. +// GGUF files have the following structure: +// +// 1. File magic "GGUF" (4 bytes). +// 2. File version (uint32_t). +// 3. Number of ggml tensors in file (int64_t). +// 4. Number of key-value-pairs in file (int64_t). +// 5. For each KV pair: +// 1. The key (string). +// 2. The value type (gguf_type). +// 3a. If the value type is GGUF_TYPE_ARRAY: +// 1. The type of the array (gguf_type). +// 2. The number of elements in the array (uint64_t). +// 3. The binary representation of each element in the array. +// 3b. Otherwise: +// 1. The binary representation of the value. +// 6. For each ggml tensor: +// 1. The tensor name (string). +// 2. The number of dimensions of the tensor (uint32_t). +// 3. For each dimension: +// 1. The size of the tensor in the dimension (int64_t). +// 4. The tensor data type (ggml_type). +// 5. The tensor data offset in the tensor data binary blob (uint64_t). +// 7. The tensor data binary blob (optional, aligned). +// +// Strings are serialized as the string length (uint64_t) followed by the C string without the null terminator. +// All enums are stored as int32_t. +// All bool values are stored as int8_t. +// If the special key "general.alignment" (uint32_t) is defined it is used for alignment, +// otherwise GGUF_DEFAULT_ALIGNMENT is used. +// +// Module maintainer: Johannes Gäßler (@JohannesGaessler, johannesg@5d6.de) + +#pragma once + +#include "ggml.h" + +#include +#include + +#define GGUF_MAGIC "GGUF" +#define GGUF_VERSION 3 + +#define GGUF_KEY_GENERAL_ALIGNMENT "general.alignment" + +#define GGUF_DEFAULT_ALIGNMENT 32 + +#ifdef __cplusplus +extern "C" { +#endif + + // types that can be stored as GGUF KV data + enum gguf_type { + GGUF_TYPE_UINT8 = 0, + GGUF_TYPE_INT8 = 1, + GGUF_TYPE_UINT16 = 2, + GGUF_TYPE_INT16 = 3, + GGUF_TYPE_UINT32 = 4, + GGUF_TYPE_INT32 = 5, + GGUF_TYPE_FLOAT32 = 6, + GGUF_TYPE_BOOL = 7, + GGUF_TYPE_STRING = 8, + GGUF_TYPE_ARRAY = 9, + GGUF_TYPE_UINT64 = 10, + GGUF_TYPE_INT64 = 11, + GGUF_TYPE_FLOAT64 = 12, + GGUF_TYPE_COUNT, // marks the end of the enum + }; + + struct gguf_context; + + struct gguf_init_params { + bool no_alloc; + + // if not NULL, create a ggml_context and allocate the tensor data in it + struct ggml_context ** ctx; + }; + + GGML_API struct gguf_context * gguf_init_empty(void); + GGML_API struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_params params); + //GGML_API struct gguf_context * gguf_init_from_buffer(..); + + GGML_API void gguf_free(struct gguf_context * ctx); + + GGML_API const char * gguf_type_name(enum gguf_type type); + + GGML_API uint32_t gguf_get_version (const struct gguf_context * ctx); + GGML_API size_t gguf_get_alignment (const struct gguf_context * ctx); + GGML_API size_t gguf_get_data_offset(const struct gguf_context * ctx); + + GGML_API int64_t gguf_get_n_kv(const struct gguf_context * ctx); + GGML_API int64_t gguf_find_key(const struct gguf_context * ctx, const char * key); // returns -1 if key is not found + GGML_API const char * gguf_get_key (const struct gguf_context * ctx, int64_t key_id); + + GGML_API enum gguf_type gguf_get_kv_type (const struct gguf_context * ctx, int64_t key_id); + GGML_API enum gguf_type gguf_get_arr_type(const struct gguf_context * ctx, int64_t key_id); + + // will abort if the wrong type is used for the key + GGML_API uint8_t gguf_get_val_u8 (const struct gguf_context * ctx, int64_t key_id); + GGML_API int8_t gguf_get_val_i8 (const struct gguf_context * ctx, int64_t key_id); + GGML_API uint16_t gguf_get_val_u16 (const struct gguf_context * ctx, int64_t key_id); + GGML_API int16_t gguf_get_val_i16 (const struct gguf_context * ctx, int64_t key_id); + GGML_API uint32_t gguf_get_val_u32 (const struct gguf_context * ctx, int64_t key_id); + GGML_API int32_t gguf_get_val_i32 (const struct gguf_context * ctx, int64_t key_id); + GGML_API float gguf_get_val_f32 (const struct gguf_context * ctx, int64_t key_id); + GGML_API uint64_t gguf_get_val_u64 (const struct gguf_context * ctx, int64_t key_id); + GGML_API int64_t gguf_get_val_i64 (const struct gguf_context * ctx, int64_t key_id); + GGML_API double gguf_get_val_f64 (const struct gguf_context * ctx, int64_t key_id); + GGML_API bool gguf_get_val_bool(const struct gguf_context * ctx, int64_t key_id); + GGML_API const char * gguf_get_val_str (const struct gguf_context * ctx, int64_t key_id); + GGML_API const void * gguf_get_val_data(const struct gguf_context * ctx, int64_t key_id); + GGML_API size_t gguf_get_arr_n (const struct gguf_context * ctx, int64_t key_id); + + // get raw pointer to the first element of the array with the given key_id + // for bool arrays, note that they are always stored as int8 on all platforms (usually this makes no difference) + GGML_API const void * gguf_get_arr_data(const struct gguf_context * ctx, int64_t key_id); + + // get ith C string from array with given key_id + GGML_API const char * gguf_get_arr_str (const struct gguf_context * ctx, int64_t key_id, size_t i); + + GGML_API int64_t gguf_get_n_tensors (const struct gguf_context * ctx); + GGML_API int64_t gguf_find_tensor (const struct gguf_context * ctx, const char * name); // returns -1 if the tensor is not found + GGML_API size_t gguf_get_tensor_offset(const struct gguf_context * ctx, int64_t tensor_id); + GGML_API const char * gguf_get_tensor_name (const struct gguf_context * ctx, int64_t tensor_id); + GGML_API enum ggml_type gguf_get_tensor_type (const struct gguf_context * ctx, int64_t tensor_id); + GGML_API size_t gguf_get_tensor_size (const struct gguf_context * ctx, int64_t tensor_id); + + // removes key if it exists, returns id that the key had prior to removal (-1 if it didn't exist) + GGML_API int64_t gguf_remove_key(struct gguf_context * ctx, const char * key); + + // overrides an existing KV pair or adds a new one, the new KV pair is always at the back + GGML_API void gguf_set_val_u8 (struct gguf_context * ctx, const char * key, uint8_t val); + GGML_API void gguf_set_val_i8 (struct gguf_context * ctx, const char * key, int8_t val); + GGML_API void gguf_set_val_u16 (struct gguf_context * ctx, const char * key, uint16_t val); + GGML_API void gguf_set_val_i16 (struct gguf_context * ctx, const char * key, int16_t val); + GGML_API void gguf_set_val_u32 (struct gguf_context * ctx, const char * key, uint32_t val); + GGML_API void gguf_set_val_i32 (struct gguf_context * ctx, const char * key, int32_t val); + GGML_API void gguf_set_val_f32 (struct gguf_context * ctx, const char * key, float val); + GGML_API void gguf_set_val_u64 (struct gguf_context * ctx, const char * key, uint64_t val); + GGML_API void gguf_set_val_i64 (struct gguf_context * ctx, const char * key, int64_t val); + GGML_API void gguf_set_val_f64 (struct gguf_context * ctx, const char * key, double val); + GGML_API void gguf_set_val_bool(struct gguf_context * ctx, const char * key, bool val); + GGML_API void gguf_set_val_str (struct gguf_context * ctx, const char * key, const char * val); + + // creates a new array with n elements of the given type and copies the corresponding number of bytes from data + GGML_API void gguf_set_arr_data(struct gguf_context * ctx, const char * key, enum gguf_type type, const void * data, size_t n); + + // creates a new array with n strings and copies the corresponding strings from data + GGML_API void gguf_set_arr_str (struct gguf_context * ctx, const char * key, const char ** data, size_t n); + + // set or add KV pairs from another context + GGML_API void gguf_set_kv(struct gguf_context * ctx, const struct gguf_context * src); + + // add tensor to GGUF context, tensor name must be unique + GGML_API void gguf_add_tensor(struct gguf_context * ctx, const struct ggml_tensor * tensor); + + // after changing a tensor's type, the offsets of all tensors with higher indices are immediately recalculated + // in such a way that the tensor data remains as one contiguous block (except for padding) + GGML_API void gguf_set_tensor_type(struct gguf_context * ctx, const char * name, enum ggml_type type); + + // assumes that at least gguf_get_tensor_size bytes can be read from data + GGML_API void gguf_set_tensor_data(struct gguf_context * ctx, const char * name, const void * data); + + // writing gguf files can be done in 3 ways: + // + // - write the entire gguf_context to a binary file in a single pass: + // + // gguf_write_to_file(ctx, fname, /*only_meta =*/ false); + // + // - write only the meta data to a file, then re-open the file and append the tensor data: + // + // gguf_write_to_file(ctx, fname, /*only_meta =*/ true); + // FILE * f = fopen(fname, "ab"); + // fwrite(f, ...); // write tensor data + // fclose(f); + // + // - first prepare a file with a placeholder for the meta data, write the tensor data, then write the meta data: + // + // FILE * f = fopen(fname, "wb"); + // const size_t size_meta = gguf_get_meta_size(ctx); + // fseek(f, size_meta, SEEK_SET); + // fwrite(f, ...); // write tensor data + // void * data = malloc(size_meta); + // gguf_get_meta_data(ctx, data); + // rewind(f); + // fwrite(data, 1, data, f); + // free(data); + // fclose(f); + // + + // write the entire context to a binary file + GGML_API bool gguf_write_to_file(const struct gguf_context * ctx, const char * fname, bool only_meta); + + // get the size in bytes of the meta data (header, kv pairs, tensor info) including padding + GGML_API size_t gguf_get_meta_size(const struct gguf_context * ctx); + + // writes the meta data to pointer "data" + GGML_API void gguf_get_meta_data(const struct gguf_context * ctx, void * data); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/llama-cpp.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/llama-cpp.h new file mode 100644 index 00000000..8f636817 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/llama-cpp.h @@ -0,0 +1,30 @@ +#pragma once + +#ifndef __cplusplus +#error "This header is for C++ only" +#endif + +#include + +#include "llama.h" + +struct llama_model_deleter { + void operator()(llama_model * model) { llama_model_free(model); } +}; + +struct llama_context_deleter { + void operator()(llama_context * context) { llama_free(context); } +}; + +struct llama_sampler_deleter { + void operator()(llama_sampler * sampler) { llama_sampler_free(sampler); } +}; + +struct llama_adapter_lora_deleter { + void operator()(llama_adapter_lora * adapter) { llama_adapter_lora_free(adapter); } +}; + +typedef std::unique_ptr llama_model_ptr; +typedef std::unique_ptr llama_context_ptr; +typedef std::unique_ptr llama_sampler_ptr; +typedef std::unique_ptr llama_adapter_lora_ptr; diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/llama.h b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/llama.h new file mode 100644 index 00000000..8547226f --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Headers/llama.h @@ -0,0 +1,1414 @@ +#ifndef LLAMA_H +#define LLAMA_H + +#include "ggml.h" +#include "ggml-cpu.h" +#include "ggml-backend.h" +#include "ggml-opt.h" + +#include +#include +#include +#include + +#ifdef LLAMA_SHARED +# if defined(_WIN32) && !defined(__MINGW32__) +# ifdef LLAMA_BUILD +# define LLAMA_API __declspec(dllexport) +# else +# define LLAMA_API __declspec(dllimport) +# endif +# else +# define LLAMA_API __attribute__ ((visibility ("default"))) +# endif +#else +# define LLAMA_API +#endif + +#ifdef __GNUC__ +# define DEPRECATED(func, hint) func __attribute__((deprecated(hint))) +#elif defined(_MSC_VER) +# define DEPRECATED(func, hint) __declspec(deprecated(hint)) func +#else +# define DEPRECATED(func, hint) func +#endif + +#define LLAMA_DEFAULT_SEED 0xFFFFFFFF + +#define LLAMA_TOKEN_NULL -1 + +#define LLAMA_FILE_MAGIC_GGLA 0x67676c61u // 'ggla' +#define LLAMA_FILE_MAGIC_GGSN 0x6767736eu // 'ggsn' +#define LLAMA_FILE_MAGIC_GGSQ 0x67677371u // 'ggsq' + +#define LLAMA_SESSION_MAGIC LLAMA_FILE_MAGIC_GGSN +#define LLAMA_SESSION_VERSION 9 + +#define LLAMA_STATE_SEQ_MAGIC LLAMA_FILE_MAGIC_GGSQ +#define LLAMA_STATE_SEQ_VERSION 2 + +#ifdef __cplusplus +extern "C" { +#endif + + // + // C interface + // + // TODO: show sample usage + // + + struct llama_vocab; + struct llama_model; + struct llama_context; + struct llama_sampler; + + typedef struct llama_memory_i * llama_memory_t; + + typedef int32_t llama_pos; + typedef int32_t llama_token; + typedef int32_t llama_seq_id; + + enum llama_vocab_type { + LLAMA_VOCAB_TYPE_NONE = 0, // For models without vocab + LLAMA_VOCAB_TYPE_SPM = 1, // LLaMA tokenizer based on byte-level BPE with byte fallback + LLAMA_VOCAB_TYPE_BPE = 2, // GPT-2 tokenizer based on byte-level BPE + LLAMA_VOCAB_TYPE_WPM = 3, // BERT tokenizer based on WordPiece + LLAMA_VOCAB_TYPE_UGM = 4, // T5 tokenizer based on Unigram + LLAMA_VOCAB_TYPE_RWKV = 5, // RWKV tokenizer based on greedy tokenization + LLAMA_VOCAB_TYPE_PLAMO2 = 6, // PLaMo-2 tokenizer based on Aho-Corasick with dynamic programming + }; + + enum llama_rope_type { + LLAMA_ROPE_TYPE_NONE = -1, + LLAMA_ROPE_TYPE_NORM = 0, + LLAMA_ROPE_TYPE_NEOX = GGML_ROPE_TYPE_NEOX, + LLAMA_ROPE_TYPE_MROPE = GGML_ROPE_TYPE_MROPE, + LLAMA_ROPE_TYPE_IMROPE = GGML_ROPE_TYPE_IMROPE, + LLAMA_ROPE_TYPE_VISION = GGML_ROPE_TYPE_VISION, + }; + + enum llama_token_type { //TODO: remove, required until per token attributes are available from GGUF file + LLAMA_TOKEN_TYPE_UNDEFINED = 0, + LLAMA_TOKEN_TYPE_NORMAL = 1, + LLAMA_TOKEN_TYPE_UNKNOWN = 2, + LLAMA_TOKEN_TYPE_CONTROL = 3, + LLAMA_TOKEN_TYPE_USER_DEFINED = 4, + LLAMA_TOKEN_TYPE_UNUSED = 5, + LLAMA_TOKEN_TYPE_BYTE = 6, + }; + + enum llama_token_attr { + LLAMA_TOKEN_ATTR_UNDEFINED = 0, + LLAMA_TOKEN_ATTR_UNKNOWN = 1 << 0, + LLAMA_TOKEN_ATTR_UNUSED = 1 << 1, + LLAMA_TOKEN_ATTR_NORMAL = 1 << 2, + LLAMA_TOKEN_ATTR_CONTROL = 1 << 3, // SPECIAL? + LLAMA_TOKEN_ATTR_USER_DEFINED = 1 << 4, + LLAMA_TOKEN_ATTR_BYTE = 1 << 5, + LLAMA_TOKEN_ATTR_NORMALIZED = 1 << 6, + LLAMA_TOKEN_ATTR_LSTRIP = 1 << 7, + LLAMA_TOKEN_ATTR_RSTRIP = 1 << 8, + LLAMA_TOKEN_ATTR_SINGLE_WORD = 1 << 9, + }; + + // model file types + enum llama_ftype { + LLAMA_FTYPE_ALL_F32 = 0, + LLAMA_FTYPE_MOSTLY_F16 = 1, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_0 = 2, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_1 = 3, // except 1d tensors + // LLAMA_FTYPE_MOSTLY_Q4_1_SOME_F16 = 4, // tok_embeddings.weight and output.weight are F16 + // LLAMA_FTYPE_MOSTLY_Q4_2 = 5, // support has been removed + // LLAMA_FTYPE_MOSTLY_Q4_3 = 6, // support has been removed + LLAMA_FTYPE_MOSTLY_Q8_0 = 7, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q5_0 = 8, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q5_1 = 9, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q2_K = 10, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q3_K_S = 11, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q3_K_M = 12, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q3_K_L = 13, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_K_S = 14, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_K_M = 15, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q5_K_S = 16, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q5_K_M = 17, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q6_K = 18, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ2_XXS = 19, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ2_XS = 20, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q2_K_S = 21, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ3_XS = 22, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ3_XXS = 23, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ1_S = 24, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ4_NL = 25, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ3_S = 26, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ3_M = 27, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ2_S = 28, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ2_M = 29, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ4_XS = 30, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ1_M = 31, // except 1d tensors + LLAMA_FTYPE_MOSTLY_BF16 = 32, // except 1d tensors + //LLAMA_FTYPE_MOSTLY_Q4_0_4_4 = 33, // removed from gguf files, use Q4_0 and runtime repack + //LLAMA_FTYPE_MOSTLY_Q4_0_4_8 = 34, // removed from gguf files, use Q4_0 and runtime repack + //LLAMA_FTYPE_MOSTLY_Q4_0_8_8 = 35, // removed from gguf files, use Q4_0 and runtime repack + LLAMA_FTYPE_MOSTLY_TQ1_0 = 36, // except 1d tensors + LLAMA_FTYPE_MOSTLY_TQ2_0 = 37, // except 1d tensors + LLAMA_FTYPE_MOSTLY_MXFP4_MOE = 38, // except 1d tensors + + LLAMA_FTYPE_GUESSED = 1024, // not specified in the model file + }; + + enum llama_rope_scaling_type { + LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED = -1, + LLAMA_ROPE_SCALING_TYPE_NONE = 0, + LLAMA_ROPE_SCALING_TYPE_LINEAR = 1, + LLAMA_ROPE_SCALING_TYPE_YARN = 2, + LLAMA_ROPE_SCALING_TYPE_LONGROPE = 3, + LLAMA_ROPE_SCALING_TYPE_MAX_VALUE = LLAMA_ROPE_SCALING_TYPE_LONGROPE, + }; + + enum llama_pooling_type { + LLAMA_POOLING_TYPE_UNSPECIFIED = -1, + LLAMA_POOLING_TYPE_NONE = 0, + LLAMA_POOLING_TYPE_MEAN = 1, + LLAMA_POOLING_TYPE_CLS = 2, + LLAMA_POOLING_TYPE_LAST = 3, + LLAMA_POOLING_TYPE_RANK = 4, // used by reranking models to attach the classification head to the graph + }; + + enum llama_attention_type { + LLAMA_ATTENTION_TYPE_UNSPECIFIED = -1, + LLAMA_ATTENTION_TYPE_CAUSAL = 0, + LLAMA_ATTENTION_TYPE_NON_CAUSAL = 1, + }; + + enum llama_flash_attn_type { + LLAMA_FLASH_ATTN_TYPE_AUTO = -1, + LLAMA_FLASH_ATTN_TYPE_DISABLED = 0, + LLAMA_FLASH_ATTN_TYPE_ENABLED = 1, + }; + + LLAMA_API const char * llama_flash_attn_type_name(enum llama_flash_attn_type flash_attn_type); + + enum llama_split_mode { + LLAMA_SPLIT_MODE_NONE = 0, // single GPU + LLAMA_SPLIT_MODE_LAYER = 1, // split layers and KV across GPUs + LLAMA_SPLIT_MODE_ROW = 2, // split layers and KV across GPUs, use tensor parallelism if supported + }; + + // TODO: simplify (https://github.com/ggml-org/llama.cpp/pull/9294#pullrequestreview-2286561979) + typedef struct llama_token_data { + llama_token id; // token id + float logit; // log-odds of the token + float p; // probability of the token + } llama_token_data; + + typedef struct llama_token_data_array { + // TODO: consider SoA + // NOTE: this pointer can be modified by the samplers + llama_token_data * data; + size_t size; + int64_t selected; // this is the index in the data array (i.e. not the token id) + bool sorted; // note: do not assume the data is sorted - always check this flag + } llama_token_data_array; + + typedef bool (*llama_progress_callback)(float progress, void * user_data); + + // Input data for llama_encode/llama_decode + // A llama_batch object can contain input about one or many sequences + // The provided arrays (i.e. token, embd, pos, etc.) must have size of n_tokens + // + // - token : the token ids of the input (used when embd is NULL) + // - embd : token embeddings (i.e. float vector of size n_embd) (used when token is NULL) + // - pos : the positions of the respective token in the sequence + // (if set to NULL, the token position will be tracked automatically by llama_encode/llama_decode) + // - seq_id : the sequence to which the respective token belongs + // (if set to NULL, the sequence ID will be assumed to be 0) + // - logits : if zero, the logits (and/or the embeddings) for the respective token will not be output + // (if set to NULL: + // - if embeddings: all tokens are output + // - if not: only the last token is output + // ) + // + typedef struct llama_batch { + int32_t n_tokens; + + llama_token * token; + float * embd; + llama_pos * pos; + int32_t * n_seq_id; + llama_seq_id ** seq_id; + int8_t * logits; // TODO: rename this to "output" + } llama_batch; + + enum llama_model_kv_override_type { + LLAMA_KV_OVERRIDE_TYPE_INT, + LLAMA_KV_OVERRIDE_TYPE_FLOAT, + LLAMA_KV_OVERRIDE_TYPE_BOOL, + LLAMA_KV_OVERRIDE_TYPE_STR, + }; + + struct llama_model_kv_override { + enum llama_model_kv_override_type tag; + + char key[128]; + + union { + int64_t val_i64; + double val_f64; + bool val_bool; + char val_str[128]; + }; + }; + + struct llama_model_tensor_buft_override { + const char * pattern; + ggml_backend_buffer_type_t buft; + }; + + struct llama_model_params { + // NULL-terminated list of devices to use for offloading (if NULL, all available devices are used) + ggml_backend_dev_t * devices; + + // NULL-terminated list of buffer types to use for tensors that match a pattern + const struct llama_model_tensor_buft_override * tensor_buft_overrides; + + int32_t n_gpu_layers; // number of layers to store in VRAM + enum llama_split_mode split_mode; // how to split the model across multiple GPUs + + // the GPU that is used for the entire model when split_mode is LLAMA_SPLIT_MODE_NONE + int32_t main_gpu; + + // proportion of the model (layers or rows) to offload to each GPU, size: llama_max_devices() + const float * tensor_split; + + // Called with a progress value between 0.0 and 1.0. Pass NULL to disable. + // If the provided progress_callback returns true, model loading continues. + // If it returns false, model loading is immediately aborted. + llama_progress_callback progress_callback; + + // context pointer passed to the progress callback + void * progress_callback_user_data; + + // override key-value pairs of the model meta data + const struct llama_model_kv_override * kv_overrides; + + // Keep the booleans together to avoid misalignment during copy-by-value. + bool vocab_only; // only load the vocabulary, no weights + bool use_mmap; // use mmap if possible + bool use_mlock; // force system to keep model in RAM + bool check_tensors; // validate model tensor data + bool use_extra_bufts; // use extra buffer types (used for weight repacking) + bool no_host; // bypass host buffer allowing extra buffers to be used + }; + + // NOTE: changing the default values of parameters marked as [EXPERIMENTAL] may cause crashes or incorrect results in certain configurations + // https://github.com/ggml-org/llama.cpp/pull/7544 + struct llama_context_params { + uint32_t n_ctx; // text context, 0 = from model + uint32_t n_batch; // logical maximum batch size that can be submitted to llama_decode + uint32_t n_ubatch; // physical maximum batch size + uint32_t n_seq_max; // max number of sequences (i.e. distinct states for recurrent models) + int32_t n_threads; // number of threads to use for generation + int32_t n_threads_batch; // number of threads to use for batch processing + + enum llama_rope_scaling_type rope_scaling_type; // RoPE scaling type, from `enum llama_rope_scaling_type` + enum llama_pooling_type pooling_type; // whether to pool (sum) embedding results by sequence id + enum llama_attention_type attention_type; // attention type to use for embeddings + enum llama_flash_attn_type flash_attn_type; // when to enable Flash Attention + + // ref: https://github.com/ggml-org/llama.cpp/pull/2054 + float rope_freq_base; // RoPE base frequency, 0 = from model + float rope_freq_scale; // RoPE frequency scaling factor, 0 = from model + float yarn_ext_factor; // YaRN extrapolation mix factor, negative = from model + float yarn_attn_factor; // YaRN magnitude scaling factor + float yarn_beta_fast; // YaRN low correction dim + float yarn_beta_slow; // YaRN high correction dim + uint32_t yarn_orig_ctx; // YaRN original context size + float defrag_thold; // [DEPRECATED] defragment the KV cache if holes/size > thold, <= 0 disabled (default) + + ggml_backend_sched_eval_callback cb_eval; + void * cb_eval_user_data; + + enum ggml_type type_k; // data type for K cache [EXPERIMENTAL] + enum ggml_type type_v; // data type for V cache [EXPERIMENTAL] + + // Abort callback + // if it returns true, execution of llama_decode() will be aborted + // currently works only with CPU execution + ggml_abort_callback abort_callback; + void * abort_callback_data; + + // Keep the booleans together and at the end of the struct to avoid misalignment during copy-by-value. + bool embeddings; // if true, extract embeddings (together with logits) + bool offload_kqv; // offload the KQV ops (including the KV cache) to GPU + bool no_perf; // measure performance timings + bool op_offload; // offload host tensor operations to device + bool swa_full; // use full-size SWA cache (https://github.com/ggml-org/llama.cpp/pull/13194#issuecomment-2868343055) + // NOTE: setting to false when n_seq_max > 1 can cause bad performance in some cases + // ref: https://github.com/ggml-org/llama.cpp/pull/13845#issuecomment-2924800573 + bool kv_unified; // use a unified buffer across the input sequences when computing the attention + // try to disable when n_seq_max > 1 for improved performance when the sequences do not share a large prefix + // ref: https://github.com/ggml-org/llama.cpp/pull/14363 + }; + + // model quantization parameters + typedef struct llama_model_quantize_params { + int32_t nthread; // number of threads to use for quantizing, if <=0 will use std::thread::hardware_concurrency() + enum llama_ftype ftype; // quantize to this llama_ftype + enum ggml_type output_tensor_type; // output tensor type + enum ggml_type token_embedding_type; // token embeddings tensor type + bool allow_requantize; // allow quantizing non-f32/f16 tensors + bool quantize_output_tensor; // quantize output.weight + bool only_copy; // only copy tensors - ftype, allow_requantize and quantize_output_tensor are ignored + bool pure; // quantize all tensors to the default type + bool keep_split; // quantize to the same number of shards + void * imatrix; // pointer to importance matrix data + void * kv_overrides; // pointer to vector containing overrides + void * tensor_types; // pointer to vector containing tensor types + void * prune_layers; // pointer to vector containing layer indices to prune + } llama_model_quantize_params; + + typedef struct llama_logit_bias { + llama_token token; + float bias; + } llama_logit_bias; + + typedef struct llama_sampler_chain_params { + bool no_perf; // whether to measure performance timings + } llama_sampler_chain_params; + + // used in chat template + typedef struct llama_chat_message { + const char * role; + const char * content; + } llama_chat_message; + + // lora adapter + struct llama_adapter_lora; + + // Helpers for getting default parameters + // TODO: update API to start accepting pointers to params structs (https://github.com/ggml-org/llama.cpp/discussions/9172) + LLAMA_API struct llama_model_params llama_model_default_params(void); + LLAMA_API struct llama_context_params llama_context_default_params(void); + LLAMA_API struct llama_sampler_chain_params llama_sampler_chain_default_params(void); + LLAMA_API struct llama_model_quantize_params llama_model_quantize_default_params(void); + + // Initialize the llama + ggml backend + // If numa is true, use NUMA optimizations + // Call once at the start of the program + LLAMA_API void llama_backend_init(void); + + // Call once at the end of the program - currently only used for MPI + LLAMA_API void llama_backend_free(void); + + //optional: + LLAMA_API void llama_numa_init(enum ggml_numa_strategy numa); + + // Optional: an auto threadpool gets created in ggml if not passed explicitly + LLAMA_API void llama_attach_threadpool( + struct llama_context * ctx, + ggml_threadpool_t threadpool, + ggml_threadpool_t threadpool_batch); + + LLAMA_API void llama_detach_threadpool(struct llama_context * ctx); + + DEPRECATED(LLAMA_API struct llama_model * llama_load_model_from_file( + const char * path_model, + struct llama_model_params params), + "use llama_model_load_from_file instead"); + + // Load the model from a file + // If the file is split into multiple parts, the file name must follow this pattern: -%05d-of-%05d.gguf + // If the split file name does not follow this pattern, use llama_model_load_from_splits + LLAMA_API struct llama_model * llama_model_load_from_file( + const char * path_model, + struct llama_model_params params); + + // Load the model from multiple splits (support custom naming scheme) + // The paths must be in the correct order + LLAMA_API struct llama_model * llama_model_load_from_splits( + const char ** paths, + size_t n_paths, + struct llama_model_params params); + + LLAMA_API void llama_model_save_to_file( + const struct llama_model * model, + const char * path_model); + + DEPRECATED(LLAMA_API void llama_free_model(struct llama_model * model), + "use llama_model_free instead"); + + LLAMA_API void llama_model_free(struct llama_model * model); + + LLAMA_API struct llama_context * llama_init_from_model( + struct llama_model * model, + struct llama_context_params params); + + DEPRECATED(LLAMA_API struct llama_context * llama_new_context_with_model( + struct llama_model * model, + struct llama_context_params params), + "use llama_init_from_model instead"); + + // Frees all allocated memory + LLAMA_API void llama_free(struct llama_context * ctx); + + LLAMA_API int64_t llama_time_us(void); + + LLAMA_API size_t llama_max_devices(void); + LLAMA_API size_t llama_max_parallel_sequences(void); + + LLAMA_API bool llama_supports_mmap (void); + LLAMA_API bool llama_supports_mlock (void); + LLAMA_API bool llama_supports_gpu_offload(void); + LLAMA_API bool llama_supports_rpc (void); + + // NOTE: After creating a llama_context, it is recommended to query the actual values using these functions + // In some cases the requested values via llama_context_params may differ from the actual values used by the context + // ref: https://github.com/ggml-org/llama.cpp/pull/17046#discussion_r2503085732 + LLAMA_API uint32_t llama_n_ctx (const struct llama_context * ctx); + LLAMA_API uint32_t llama_n_ctx_seq (const struct llama_context * ctx); + LLAMA_API uint32_t llama_n_batch (const struct llama_context * ctx); + LLAMA_API uint32_t llama_n_ubatch (const struct llama_context * ctx); + LLAMA_API uint32_t llama_n_seq_max (const struct llama_context * ctx); + + DEPRECATED(LLAMA_API int32_t llama_n_ctx_train(const struct llama_model * model), "use llama_model_n_ctx_train instead"); + DEPRECATED(LLAMA_API int32_t llama_n_embd (const struct llama_model * model), "use llama_model_n_embd instead"); + DEPRECATED(LLAMA_API int32_t llama_n_layer (const struct llama_model * model), "use llama_model_n_layer instead"); + DEPRECATED(LLAMA_API int32_t llama_n_head (const struct llama_model * model), "use llama_model_n_head instead"); + + DEPRECATED(LLAMA_API int32_t llama_n_vocab (const struct llama_vocab * vocab), "use llama_vocab_n_tokens instead"); + + LLAMA_API const struct llama_model * llama_get_model (const struct llama_context * ctx); + LLAMA_API llama_memory_t llama_get_memory (const struct llama_context * ctx); + LLAMA_API enum llama_pooling_type llama_pooling_type(const struct llama_context * ctx); // TODO: rename to llama_get_pooling_type + + LLAMA_API const struct llama_vocab * llama_model_get_vocab(const struct llama_model * model); + LLAMA_API enum llama_rope_type llama_model_rope_type(const struct llama_model * model); + + LLAMA_API int32_t llama_model_n_ctx_train(const struct llama_model * model); + LLAMA_API int32_t llama_model_n_embd (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_embd_inp (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_layer (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_head (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_head_kv (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_swa (const struct llama_model * model); + + // Get the model's RoPE frequency scaling factor + LLAMA_API float llama_model_rope_freq_scale_train(const struct llama_model * model); + + // Returns the number of classifier outputs (only valid for classifier models) + // Undefined behavior for non-classifier models + LLAMA_API uint32_t llama_model_n_cls_out(const struct llama_model * model); + + // Returns label of classifier output by index ( 1` + // p0 < 0 : [0, p1] + // p1 < 0 : [p0, inf) + LLAMA_API void llama_memory_seq_div( + llama_memory_t mem, + llama_seq_id seq_id, + llama_pos p0, + llama_pos p1, + int d); + + // Returns the smallest position present in the memory for the specified sequence + // This is typically non-zero only for SWA caches + // Note that all positions in the range [pos_min, pos_max] are guaranteed to be present in the memory + // Return -1 if the sequence is empty + LLAMA_API llama_pos llama_memory_seq_pos_min( + llama_memory_t mem, + llama_seq_id seq_id); + + // Returns the largest position present in the memory for the specified sequence + // Note that all positions in the range [pos_min, pos_max] are guaranteed to be present in the memory + // Return -1 if the sequence is empty + LLAMA_API llama_pos llama_memory_seq_pos_max( + llama_memory_t mem, + llama_seq_id seq_id); + + // Check if the memory supports shifting + LLAMA_API bool llama_memory_can_shift(llama_memory_t mem); + + // + // State / sessions + // + + // Returns the *actual* size in bytes of the state + // (logits, embedding and memory) + // Only use when saving the state, not when restoring it, otherwise the size may be too small. + LLAMA_API size_t llama_state_get_size(struct llama_context * ctx); + LLAMA_API DEPRECATED(size_t llama_get_state_size(struct llama_context * ctx), + "use llama_state_get_size instead"); + + // Copies the state to the specified destination address. + // Destination needs to have allocated enough memory. + // Returns the number of bytes copied + LLAMA_API size_t llama_state_get_data( + struct llama_context * ctx, + uint8_t * dst, + size_t size); + LLAMA_API DEPRECATED(size_t llama_copy_state_data( + struct llama_context * ctx, + uint8_t * dst), + "use llama_state_get_data instead"); + + // Set the state reading from the specified address + // Returns the number of bytes read + LLAMA_API size_t llama_state_set_data( + struct llama_context * ctx, + const uint8_t * src, + size_t size); + LLAMA_API DEPRECATED(size_t llama_set_state_data( + struct llama_context * ctx, + const uint8_t * src), + "use llama_state_set_data instead"); + + // Save/load session file + LLAMA_API bool llama_state_load_file( + struct llama_context * ctx, + const char * path_session, + llama_token * tokens_out, + size_t n_token_capacity, + size_t * n_token_count_out); + LLAMA_API DEPRECATED(bool llama_load_session_file( + struct llama_context * ctx, + const char * path_session, + llama_token * tokens_out, + size_t n_token_capacity, + size_t * n_token_count_out), + "use llama_state_load_file instead"); + + LLAMA_API bool llama_state_save_file( + struct llama_context * ctx, + const char * path_session, + const llama_token * tokens, + size_t n_token_count); + LLAMA_API DEPRECATED(bool llama_save_session_file( + struct llama_context * ctx, + const char * path_session, + const llama_token * tokens, + size_t n_token_count), + "use llama_state_save_file instead"); + + // Get the exact size needed to copy the state of a single sequence + LLAMA_API size_t llama_state_seq_get_size( + struct llama_context * ctx, + llama_seq_id seq_id); + + // Copy the state of a single sequence into the specified buffer + LLAMA_API size_t llama_state_seq_get_data( + struct llama_context * ctx, + uint8_t * dst, + size_t size, + llama_seq_id seq_id); + + // Copy the sequence data (originally copied with `llama_state_seq_get_data`) into the specified sequence + // Returns: + // - Positive: Ok + // - Zero: Failed to load + LLAMA_API size_t llama_state_seq_set_data( + struct llama_context * ctx, + const uint8_t * src, + size_t size, + llama_seq_id dest_seq_id); + + LLAMA_API size_t llama_state_seq_save_file( + struct llama_context * ctx, + const char * filepath, + llama_seq_id seq_id, + const llama_token * tokens, + size_t n_token_count); + + LLAMA_API size_t llama_state_seq_load_file( + struct llama_context * ctx, + const char * filepath, + llama_seq_id dest_seq_id, + llama_token * tokens_out, + size_t n_token_capacity, + size_t * n_token_count_out); + +// for backwards-compat +#define LLAMA_STATE_SEQ_FLAGS_SWA_ONLY 1 + +// work only with partial states, such as SWA KV cache or recurrent cache (e.g. Mamba) +#define LLAMA_STATE_SEQ_FLAGS_PARTIAL_ONLY 1 + + typedef uint32_t llama_state_seq_flags; + + LLAMA_API size_t llama_state_seq_get_size_ext( + struct llama_context * ctx, + llama_seq_id seq_id, + llama_state_seq_flags flags); + + LLAMA_API size_t llama_state_seq_get_data_ext( + struct llama_context * ctx, + uint8_t * dst, + size_t size, + llama_seq_id seq_id, + llama_state_seq_flags flags); + + LLAMA_API size_t llama_state_seq_set_data_ext( + struct llama_context * ctx, + const uint8_t * src, + size_t size, + llama_seq_id dest_seq_id, + llama_state_seq_flags flags); + + // + // Decoding + // + + // Return batch for single sequence of tokens + // The sequence ID will be fixed to 0 + // The position of the tokens will be tracked automatically by llama_decode + // + // NOTE: this is a helper function to facilitate transition to the new batch API - avoid using it + // + LLAMA_API struct llama_batch llama_batch_get_one( + llama_token * tokens, + int32_t n_tokens); + + // Allocates a batch of tokens on the heap that can hold a maximum of n_tokens + // Each token can be assigned up to n_seq_max sequence ids + // The batch has to be freed with llama_batch_free() + // If embd != 0, llama_batch.embd will be allocated with size of n_tokens * embd * sizeof(float) + // Otherwise, llama_batch.token will be allocated to store n_tokens llama_token + // The rest of the llama_batch members are allocated with size n_tokens + // All members are left uninitialized + LLAMA_API struct llama_batch llama_batch_init( + int32_t n_tokens, + int32_t embd, + int32_t n_seq_max); + + // Frees a batch of tokens allocated with llama_batch_init() + LLAMA_API void llama_batch_free(struct llama_batch batch); + + // Process a batch of tokens. + // In contrast to llama_decode() - this call does not use KV cache. + // For encode-decoder contexts, processes the batch using the encoder. + // Can store the encoder output internally for later use by the decoder's cross-attention layers. + // 0 - success + // < 0 - error. the memory state is restored to the state before this call + LLAMA_API int32_t llama_encode( + struct llama_context * ctx, + struct llama_batch batch); + + // Process a batch of tokens. + // Requires the context to have a memory. + // For encode-decoder contexts, processes the batch using the decoder. + // Positive return values does not mean a fatal error, but rather a warning. + // Upon fatal-error or abort, the ubatches that managed to be been processed will remain in the memory state of the context + // To handle this correctly, query the memory state using llama_memory_seq_pos_min() and llama_memory_seq_pos_max() + // Upon other return values, the memory state is restored to the state before this call + // 0 - success + // 1 - could not find a KV slot for the batch (try reducing the size of the batch or increase the context) + // 2 - aborted (processed ubatches will remain in the context's memory) + // -1 - invalid input batch + // < -1 - fatal error (processed ubatches will remain in the context's memory) + LLAMA_API int32_t llama_decode( + struct llama_context * ctx, + struct llama_batch batch); + + // Set the number of threads used for decoding + // n_threads is the number of threads used for generation (single token) + // n_threads_batch is the number of threads used for prompt and batch processing (multiple tokens) + LLAMA_API void llama_set_n_threads(struct llama_context * ctx, int32_t n_threads, int32_t n_threads_batch); + + // Get the number of threads used for generation of a single token. + LLAMA_API int32_t llama_n_threads(struct llama_context * ctx); + + // Get the number of threads used for prompt and batch processing (multiple token). + LLAMA_API int32_t llama_n_threads_batch(struct llama_context * ctx); + + // Set whether the context outputs embeddings or not + // TODO: rename to avoid confusion with llama_get_embeddings() + LLAMA_API void llama_set_embeddings(struct llama_context * ctx, bool embeddings); + + // Set whether to use causal attention or not + // If set to true, the model will only attend to the past tokens + LLAMA_API void llama_set_causal_attn(struct llama_context * ctx, bool causal_attn); + + // Set whether the model is in warmup mode or not + // If true, all model tensors are activated during llama_decode() to load and cache their weights. + LLAMA_API void llama_set_warmup(struct llama_context * ctx, bool warmup); + + // Set abort callback + LLAMA_API void llama_set_abort_callback(struct llama_context * ctx, ggml_abort_callback abort_callback, void * abort_callback_data); + + // Wait until all computations are finished + // This is automatically done when using one of the functions below to obtain the computation results + // and is not necessary to call it explicitly in most cases + LLAMA_API void llama_synchronize(struct llama_context * ctx); + + // Token logits obtained from the last call to llama_decode() + // The logits for which llama_batch.logits[i] != 0 are stored contiguously + // in the order they have appeared in the batch. + // Rows: number of tokens for which llama_batch.logits[i] != 0 + // Cols: n_vocab + // TODO: deprecate in favor of llama_get_logits_ith() (ref: https://github.com/ggml-org/llama.cpp/pull/14853#issuecomment-3113143522) + LLAMA_API float * llama_get_logits(struct llama_context * ctx); + + // Logits for the ith token. For positive indices, Equivalent to: + // llama_get_logits(ctx) + ctx->output_ids[i]*n_vocab + // Negative indicies can be used to access logits in reverse order, -1 is the last logit. + // returns NULL for invalid ids. + LLAMA_API float * llama_get_logits_ith(struct llama_context * ctx, int32_t i); + + // Get all output token embeddings. + // when pooling_type == LLAMA_POOLING_TYPE_NONE or when using a generative model, + // the embeddings for which llama_batch.logits[i] != 0 are stored contiguously + // in the order they have appeared in the batch. + // shape: [n_outputs*n_embd] + // Otherwise, returns NULL. + // TODO: deprecate in favor of llama_get_embeddings_ith() (ref: https://github.com/ggml-org/llama.cpp/pull/14853#issuecomment-3113143522) + LLAMA_API float * llama_get_embeddings(struct llama_context * ctx); + + // Get the embeddings for the ith token. For positive indices, Equivalent to: + // llama_get_embeddings(ctx) + ctx->output_ids[i]*n_embd + // Negative indicies can be used to access embeddings in reverse order, -1 is the last embedding. + // shape: [n_embd] (1-dimensional) + // returns NULL for invalid ids. + LLAMA_API float * llama_get_embeddings_ith(struct llama_context * ctx, int32_t i); + + // Get the embeddings for a sequence id + // Returns NULL if pooling_type is LLAMA_POOLING_TYPE_NONE + // when pooling_type == LLAMA_POOLING_TYPE_RANK, returns float[n_cls_out] with the rank(s) of the sequence + // otherwise: float[n_embd] (1-dimensional) + LLAMA_API float * llama_get_embeddings_seq(struct llama_context * ctx, llama_seq_id seq_id); + + // + // Vocab + // + + LLAMA_API const char * llama_vocab_get_text(const struct llama_vocab * vocab, llama_token token); + + LLAMA_API float llama_vocab_get_score(const struct llama_vocab * vocab, llama_token token); + + LLAMA_API enum llama_token_attr llama_vocab_get_attr(const struct llama_vocab * vocab, llama_token token); + + // Check if the token is supposed to end generation (end-of-generation, eg. EOS, EOT, etc.) + LLAMA_API bool llama_vocab_is_eog(const struct llama_vocab * vocab, llama_token token); + + // Identify if Token Id is a control token or a render-able token + LLAMA_API bool llama_vocab_is_control(const struct llama_vocab * vocab, llama_token token); + + // Special tokens + LLAMA_API llama_token llama_vocab_bos(const struct llama_vocab * vocab); // beginning-of-sentence + LLAMA_API llama_token llama_vocab_eos(const struct llama_vocab * vocab); // end-of-sentence + LLAMA_API llama_token llama_vocab_eot(const struct llama_vocab * vocab); // end-of-turn + LLAMA_API llama_token llama_vocab_sep(const struct llama_vocab * vocab); // sentence separator + LLAMA_API llama_token llama_vocab_nl (const struct llama_vocab * vocab); // next-line + LLAMA_API llama_token llama_vocab_pad(const struct llama_vocab * vocab); // padding + LLAMA_API llama_token llama_vocab_mask(const struct llama_vocab * vocab); // mask + + LLAMA_API bool llama_vocab_get_add_bos(const struct llama_vocab * vocab); + LLAMA_API bool llama_vocab_get_add_eos(const struct llama_vocab * vocab); + LLAMA_API bool llama_vocab_get_add_sep(const struct llama_vocab * vocab); + + LLAMA_API llama_token llama_vocab_fim_pre(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_suf(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_mid(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_pad(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_rep(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_sep(const struct llama_vocab * vocab); + + DEPRECATED(LLAMA_API const char * llama_token_get_text(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_get_text instead"); + DEPRECATED(LLAMA_API float llama_token_get_score(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_get_score instead"); + DEPRECATED(LLAMA_API enum llama_token_attr llama_token_get_attr(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_get_attr instead"); + DEPRECATED(LLAMA_API bool llama_token_is_eog(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_is_eog instead"); + DEPRECATED(LLAMA_API bool llama_token_is_control(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_is_control instead"); + DEPRECATED(LLAMA_API llama_token llama_token_bos(const struct llama_vocab * vocab), "use llama_vocab_bos instead"); + DEPRECATED(LLAMA_API llama_token llama_token_eos(const struct llama_vocab * vocab), "use llama_vocab_eos instead"); + DEPRECATED(LLAMA_API llama_token llama_token_eot(const struct llama_vocab * vocab), "use llama_vocab_eot instead"); + DEPRECATED(LLAMA_API llama_token llama_token_cls(const struct llama_vocab * vocab), "use llama_vocab_cls instead"); + DEPRECATED(LLAMA_API llama_token llama_token_sep(const struct llama_vocab * vocab), "use llama_vocab_sep instead"); + DEPRECATED(LLAMA_API llama_token llama_token_nl (const struct llama_vocab * vocab), "use llama_vocab_nl instead"); + DEPRECATED(LLAMA_API llama_token llama_token_pad(const struct llama_vocab * vocab), "use llama_vocab_pad instead"); + DEPRECATED(LLAMA_API bool llama_add_bos_token(const struct llama_vocab * vocab), "use llama_vocab_get_add_bos instead"); + DEPRECATED(LLAMA_API bool llama_add_eos_token(const struct llama_vocab * vocab), "use llama_vocab_get_add_eos instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_pre(const struct llama_vocab * vocab), "use llama_vocab_fim_pre instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_suf(const struct llama_vocab * vocab), "use llama_vocab_fim_suf instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_mid(const struct llama_vocab * vocab), "use llama_vocab_fim_mid instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_pad(const struct llama_vocab * vocab), "use llama_vocab_fim_pad instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_rep(const struct llama_vocab * vocab), "use llama_vocab_fim_rep instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_sep(const struct llama_vocab * vocab), "use llama_vocab_fim_sep instead"); + + // CLS is equivalent to BOS + DEPRECATED(LLAMA_API llama_token llama_vocab_cls(const struct llama_vocab * vocab), // classification + "use llama_vocab_bos instead"); + + // + // Tokenization + // + // The API is thread-safe. + // + + /// @details Convert the provided text into tokens. + /// @param tokens The tokens pointer must be large enough to hold the resulting tokens. + /// @return Returns the number of tokens on success, no more than n_tokens_max + /// @return Returns a negative number on failure - the number of tokens that would have been returned + /// @return Returns INT32_MIN on overflow (e.g., tokenization result size exceeds int32_t limit) + /// @param add_special Allow to add BOS and EOS tokens if model is configured to do so. + /// @param parse_special Allow tokenizing special and/or control tokens which otherwise are not exposed and treated + /// as plaintext. Does not insert a leading space. + LLAMA_API int32_t llama_tokenize( + const struct llama_vocab * vocab, + const char * text, + int32_t text_len, + llama_token * tokens, + int32_t n_tokens_max, + bool add_special, + bool parse_special); + + // Token Id -> Piece. + // Uses the vocabulary in the provided context. + // Does not write null terminator to the buffer. + // User can skip up to 'lstrip' leading spaces before copying (useful when encoding/decoding multiple tokens with 'add_space_prefix') + // @param special If true, special tokens are rendered in the output. + LLAMA_API int32_t llama_token_to_piece( + const struct llama_vocab * vocab, + llama_token token, + char * buf, + int32_t length, + int32_t lstrip, + bool special); + + /// @details Convert the provided tokens into text (inverse of llama_tokenize()). + /// @param text The char pointer must be large enough to hold the resulting text. + /// @return Returns the number of chars/bytes on success, no more than text_len_max. + /// @return Returns a negative number on failure - the number of chars/bytes that would have been returned. + /// @param remove_special Allow to remove BOS and EOS tokens if model is configured to do so. + /// @param unparse_special If true, special tokens are rendered in the output. + LLAMA_API int32_t llama_detokenize( + const struct llama_vocab * vocab, + const llama_token * tokens, + int32_t n_tokens, + char * text, + int32_t text_len_max, + bool remove_special, + bool unparse_special); + + // + // Chat templates + // + + /// Apply chat template. Inspired by hf apply_chat_template() on python. + /// Both "model" and "custom_template" are optional, but at least one is required. "custom_template" has higher precedence than "model" + /// NOTE: This function does not use a jinja parser. It only support a pre-defined list of template. See more: https://github.com/ggml-org/llama.cpp/wiki/Templates-supported-by-llama_chat_apply_template + /// @param tmpl A Jinja template to use for this chat. If this is nullptr, the model’s default chat template will be used instead. + /// @param chat Pointer to a list of multiple llama_chat_message + /// @param n_msg Number of llama_chat_message in this chat + /// @param add_ass Whether to end the prompt with the token(s) that indicate the start of an assistant message. + /// @param buf A buffer to hold the output formatted prompt. The recommended alloc size is 2 * (total number of characters of all messages) + /// @param length The size of the allocated buffer + /// @return The total number of bytes of the formatted prompt. If is it larger than the size of buffer, you may need to re-alloc it and then re-apply the template. + LLAMA_API int32_t llama_chat_apply_template( + const char * tmpl, + const struct llama_chat_message * chat, + size_t n_msg, + bool add_ass, + char * buf, + int32_t length); + + // Get list of built-in chat templates + LLAMA_API int32_t llama_chat_builtin_templates(const char ** output, size_t len); + + // + // Sampling API + // + // Sample usage: + // + // // prepare the sampling chain at the start + // auto sparams = llama_sampler_chain_default_params(); + // + // llama_sampler * smpl = llama_sampler_chain_init(sparams); + // + // llama_sampler_chain_add(smpl, llama_sampler_init_top_k(50)); + // llama_sampler_chain_add(smpl, llama_sampler_init_top_p(0.9, 1)); + // llama_sampler_chain_add(smpl, llama_sampler_init_temp (0.8)); + // + // // typically, the chain should end with a sampler such as "greedy", "dist" or "mirostat" + // // this sampler will be responsible to select the actual token + // llama_sampler_chain_add(smpl, llama_sampler_init_dist(seed)); + // + // ... + // + // // decoding loop: + // while (...) { + // ... + // + // llama_decode(ctx, batch); + // + // // sample from the logits of the last token in the batch + // const llama_token id = llama_sampler_sample(smpl, ctx, -1); + // + // ... + // } + // + // llama_sampler_free(smpl); + // + // TODO: In the future, llama_sampler will be utilized to offload the sampling to the backends (e.g. GPU). + // + + typedef void * llama_sampler_context_t; + + // user code can implement the interface below in order to create custom llama_sampler + struct llama_sampler_i { + const char * (*name) (const struct llama_sampler * smpl); // can be NULL + void (*accept)( struct llama_sampler * smpl, llama_token token); // can be NULL + void (*apply) ( struct llama_sampler * smpl, llama_token_data_array * cur_p); // required + void (*reset) ( struct llama_sampler * smpl); // can be NULL + struct llama_sampler * (*clone) (const struct llama_sampler * smpl); // can be NULL if ctx is NULL + void (*free) ( struct llama_sampler * smpl); // can be NULL if ctx is NULL + + // TODO: API for internal libllama usage for appending the sampling to an existing ggml_cgraph + //void (*apply_ggml) (struct llama_sampler * smpl, ...); + }; + + struct llama_sampler { + const struct llama_sampler_i * iface; + llama_sampler_context_t ctx; + }; + + // mirror of llama_sampler_i: + LLAMA_API struct llama_sampler * llama_sampler_init (const struct llama_sampler_i * iface, llama_sampler_context_t ctx); + LLAMA_API const char * llama_sampler_name (const struct llama_sampler * smpl); + LLAMA_API void llama_sampler_accept( struct llama_sampler * smpl, llama_token token); + LLAMA_API void llama_sampler_apply ( struct llama_sampler * smpl, llama_token_data_array * cur_p); + LLAMA_API void llama_sampler_reset ( struct llama_sampler * smpl); + LLAMA_API struct llama_sampler * llama_sampler_clone (const struct llama_sampler * smpl); + // important: do not free if the sampler has been added to a llama_sampler_chain (via llama_sampler_chain_add) + LLAMA_API void llama_sampler_free ( struct llama_sampler * smpl); + + // llama_sampler_chain + // a type of llama_sampler that can chain multiple samplers one after another + + LLAMA_API struct llama_sampler * llama_sampler_chain_init(struct llama_sampler_chain_params params); + + // important: takes ownership of the sampler object and will free it when llama_sampler_free is called + LLAMA_API void llama_sampler_chain_add( struct llama_sampler * chain, struct llama_sampler * smpl); + LLAMA_API struct llama_sampler * llama_sampler_chain_get(const struct llama_sampler * chain, int32_t i); + LLAMA_API int llama_sampler_chain_n (const struct llama_sampler * chain); + + // after removing a sampler, the chain will no longer own it, and it will not be freed when the chain is freed + LLAMA_API struct llama_sampler * llama_sampler_chain_remove( struct llama_sampler * chain, int32_t i); + + // available samplers: + + LLAMA_API struct llama_sampler * llama_sampler_init_greedy(void); + LLAMA_API struct llama_sampler * llama_sampler_init_dist (uint32_t seed); + + /// @details Top-K sampling described in academic paper "The Curious Case of Neural Text Degeneration" https://arxiv.org/abs/1904.09751 + /// Setting k <= 0 makes this a noop + LLAMA_API struct llama_sampler * llama_sampler_init_top_k (int32_t k); + + /// @details Nucleus sampling described in academic paper "The Curious Case of Neural Text Degeneration" https://arxiv.org/abs/1904.09751 + LLAMA_API struct llama_sampler * llama_sampler_init_top_p (float p, size_t min_keep); + + /// @details Minimum P sampling as described in https://github.com/ggml-org/llama.cpp/pull/3841 + LLAMA_API struct llama_sampler * llama_sampler_init_min_p (float p, size_t min_keep); + + /// @details Locally Typical Sampling implementation described in the paper https://arxiv.org/abs/2202.00666. + LLAMA_API struct llama_sampler * llama_sampler_init_typical (float p, size_t min_keep); + + /// #details Updates the logits l_i` = l_i/t. When t <= 0.0f, the maximum logit is kept at it's original value, the rest are set to -inf + LLAMA_API struct llama_sampler * llama_sampler_init_temp (float t); + + /// @details Dynamic temperature implementation (a.k.a. entropy) described in the paper https://arxiv.org/abs/2309.02772. + LLAMA_API struct llama_sampler * llama_sampler_init_temp_ext (float t, float delta, float exponent); + + /// @details XTC sampler as described in https://github.com/oobabooga/text-generation-webui/pull/6335 + LLAMA_API struct llama_sampler * llama_sampler_init_xtc (float p, float t, size_t min_keep, uint32_t seed); + + /// @details Top n sigma sampling as described in academic paper "Top-nσ: Not All Logits Are You Need" https://arxiv.org/pdf/2411.07641 + LLAMA_API struct llama_sampler * llama_sampler_init_top_n_sigma(float n); + + /// @details Mirostat 1.0 algorithm described in the paper https://arxiv.org/abs/2007.14966. Uses tokens instead of words. + /// @param candidates A vector of `llama_token_data` containing the candidate tokens, their probabilities (p), and log-odds (logit) for the current position in the generated text. + /// @param tau The target cross-entropy (or surprise) value you want to achieve for the generated text. A higher value corresponds to more surprising or less predictable text, while a lower value corresponds to less surprising or more predictable text. + /// @param eta The learning rate used to update `mu` based on the error between the target and observed surprisal of the sampled word. A larger learning rate will cause `mu` to be updated more quickly, while a smaller learning rate will result in slower updates. + /// @param m The number of tokens considered in the estimation of `s_hat`. This is an arbitrary value that is used to calculate `s_hat`, which in turn helps to calculate the value of `k`. In the paper, they use `m = 100`, but you can experiment with different values to see how it affects the performance of the algorithm. + /// @param mu Maximum cross-entropy. This value is initialized to be twice the target cross-entropy (`2 * tau`) and is updated in the algorithm based on the error between the target and observed surprisal. + LLAMA_API struct llama_sampler * llama_sampler_init_mirostat( + int32_t n_vocab, + uint32_t seed, + float tau, + float eta, + int32_t m); + + /// @details Mirostat 2.0 algorithm described in the paper https://arxiv.org/abs/2007.14966. Uses tokens instead of words. + /// @param candidates A vector of `llama_token_data` containing the candidate tokens, their probabilities (p), and log-odds (logit) for the current position in the generated text. + /// @param tau The target cross-entropy (or surprise) value you want to achieve for the generated text. A higher value corresponds to more surprising or less predictable text, while a lower value corresponds to less surprising or more predictable text. + /// @param eta The learning rate used to update `mu` based on the error between the target and observed surprisal of the sampled word. A larger learning rate will cause `mu` to be updated more quickly, while a smaller learning rate will result in slower updates. + /// @param mu Maximum cross-entropy. This value is initialized to be twice the target cross-entropy (`2 * tau`) and is updated in the algorithm based on the error between the target and observed surprisal. + LLAMA_API struct llama_sampler * llama_sampler_init_mirostat_v2( + uint32_t seed, + float tau, + float eta); + + /// @details Intializes a GBNF grammar, see grammars/README.md for details. + /// @param vocab The vocabulary that this grammar will be used with. + /// @param grammar_str The production rules for the grammar, encoded as a string. Returns an empty grammar if empty. Returns NULL if parsing of grammar_str fails. + /// @param grammar_root The name of the start symbol for the grammar. + LLAMA_API struct llama_sampler * llama_sampler_init_grammar( + const struct llama_vocab * vocab, + const char * grammar_str, + const char * grammar_root); + + DEPRECATED(LLAMA_API struct llama_sampler * llama_sampler_init_grammar_lazy( + const struct llama_vocab * vocab, + const char * grammar_str, + const char * grammar_root, + const char ** trigger_words, + size_t num_trigger_words, + const llama_token * trigger_tokens, + size_t num_trigger_tokens), + "use llama_sampler_init_grammar_lazy_patterns instead"); + + + /// @details Lazy grammar sampler, introduced in https://github.com/ggml-org/llama.cpp/pull/9639 + /// @param trigger_patterns A list of patterns that will trigger the grammar sampler. Pattern will be matched from the start of the generation output, and grammar sampler will be fed content starting from its first match group. + /// @param trigger_tokens A list of tokens that will trigger the grammar sampler. Grammar sampler will be fed content starting from the trigger token included. + LLAMA_API struct llama_sampler * llama_sampler_init_grammar_lazy_patterns( + const struct llama_vocab * vocab, + const char * grammar_str, + const char * grammar_root, + const char ** trigger_patterns, + size_t num_trigger_patterns, + const llama_token * trigger_tokens, + size_t num_trigger_tokens); + + + /// NOTE: Avoid using on the full vocabulary as searching for repeated tokens can become slow. For example, apply top-k or top-p sampling first. + LLAMA_API struct llama_sampler * llama_sampler_init_penalties( + int32_t penalty_last_n, // last n tokens to penalize (0 = disable penalty, -1 = context size) + float penalty_repeat, // 1.0 = disabled + float penalty_freq, // 0.0 = disabled + float penalty_present); // 0.0 = disabled + + /// @details DRY sampler, designed by p-e-w, as described in: https://github.com/oobabooga/text-generation-webui/pull/5677, porting Koboldcpp implementation authored by pi6am: https://github.com/LostRuins/koboldcpp/pull/982 + LLAMA_API struct llama_sampler * llama_sampler_init_dry( + const struct llama_vocab * vocab, + int32_t n_ctx_train, + float dry_multiplier, + float dry_base, + int32_t dry_allowed_length, + int32_t dry_penalty_last_n, + const char ** seq_breakers, + size_t num_breakers); + + LLAMA_API struct llama_sampler * llama_sampler_init_logit_bias( + int32_t n_vocab, + int32_t n_logit_bias, + const llama_logit_bias * logit_bias); + + // this sampler is meant to be used for fill-in-the-middle infilling + // it's supposed to be used after top_k + top_p sampling + // + // 1. if the sum of the EOG probs times the number of candidates is higher than the sum of the other probs -> pick EOG + // 2. combine probs of tokens that have the same prefix + // + // example: + // + // - before: + // "hel": 0.5 + // "hell": 0.2 + // "hello": 0.1 + // "dummy": 0.1 + // + // - after: + // "hel": 0.8 + // "dummy": 0.1 + // + // 3. discard non-EOG tokens with low prob + // 4. if no tokens are left -> pick EOT + // + LLAMA_API struct llama_sampler * llama_sampler_init_infill(const struct llama_vocab * vocab); + + // Returns the seed used by the sampler if applicable, LLAMA_DEFAULT_SEED otherwise + LLAMA_API uint32_t llama_sampler_get_seed(const struct llama_sampler * smpl); + + /// @details Sample and accept a token from the idx-th output of the last evaluation + // + // Shorthand for: + // const auto * logits = llama_get_logits_ith(ctx, idx); + // llama_token_data_array cur_p = { ... init from logits ... }; + // llama_sampler_apply(smpl, &cur_p); + // auto token = cur_p.data[cur_p.selected].id; + // llama_sampler_accept(smpl, token); + // return token; + // Returns the sampled token + LLAMA_API llama_token llama_sampler_sample(struct llama_sampler * smpl, struct llama_context * ctx, int32_t idx); + + // TODO: extend in the future + //LLAMA_API void llama_decode_with_sampler(struct llama_context * ctx, struct llama_sampler * smpl, struct llama_batch batch, ...); + + // + // Model split + // + + /// @details Build a split GGUF final path for this chunk. + /// llama_split_path(split_path, sizeof(split_path), "/models/ggml-model-q4_0", 2, 4) => split_path = "/models/ggml-model-q4_0-00002-of-00004.gguf" + // Returns the split_path length. + LLAMA_API int llama_split_path(char * split_path, size_t maxlen, const char * path_prefix, int split_no, int split_count); + + /// @details Extract the path prefix from the split_path if and only if the split_no and split_count match. + /// llama_split_prefix(split_prefix, 64, "/models/ggml-model-q4_0-00002-of-00004.gguf", 2, 4) => split_prefix = "/models/ggml-model-q4_0" + // Returns the split_prefix length. + LLAMA_API int llama_split_prefix(char * split_prefix, size_t maxlen, const char * split_path, int split_no, int split_count); + + // Print system information + LLAMA_API const char * llama_print_system_info(void); + + // Set callback for all future logging events. + // If this is not called, or NULL is supplied, everything is output on stderr. + LLAMA_API void llama_log_set(ggml_log_callback log_callback, void * user_data); + + // + // Performance utils + // + // NOTE: Used by llama.cpp examples/tools, avoid using in third-party apps. Instead, do your own performance measurements. + // + + struct llama_perf_context_data { + // ms == milliseconds + double t_start_ms; // absolute start time + double t_load_ms; // time needed for loading the model + double t_p_eval_ms; // time needed for processing the prompt + double t_eval_ms; // time needed for generating tokens + + int32_t n_p_eval; // number of prompt tokens + int32_t n_eval; // number of generated tokens + int32_t n_reused; // number of times a ggml compute graph had been reused + }; + + struct llama_perf_sampler_data { + double t_sample_ms; // time needed for sampling in ms + + int32_t n_sample; // number of sampled tokens + }; + + LLAMA_API struct llama_perf_context_data llama_perf_context (const struct llama_context * ctx); + LLAMA_API void llama_perf_context_print(const struct llama_context * ctx); + LLAMA_API void llama_perf_context_reset( struct llama_context * ctx); + + // NOTE: the following work only with samplers constructed via llama_sampler_chain_init + LLAMA_API struct llama_perf_sampler_data llama_perf_sampler (const struct llama_sampler * chain); + LLAMA_API void llama_perf_sampler_print(const struct llama_sampler * chain); + LLAMA_API void llama_perf_sampler_reset( struct llama_sampler * chain); + + // print a breakdown of per-device memory use via LLAMA_LOG: + LLAMA_API void llama_memory_breakdown_print(const struct llama_context * ctx); + + // + // training + // + + // function that returns whether or not a given tensor contains trainable parameters + typedef bool (*llama_opt_param_filter)(const struct ggml_tensor * tensor, void * userdata); + + // always returns true + LLAMA_API bool llama_opt_param_filter_all(const struct ggml_tensor * tensor, void * userdata); + + struct llama_opt_params { + uint32_t n_ctx_train; // assumed context size post training, use context size specified in llama_context if 0 + + llama_opt_param_filter param_filter; // callback for determining which tensors contain trainable parameters + void * param_filter_ud; // userdata for determining which tensors contain trainable parameters + + ggml_opt_get_optimizer_params get_opt_pars; // callback for calculating optimizer parameters + void * get_opt_pars_ud; // userdata for calculating optimizer parameters + + enum ggml_opt_optimizer_type optimizer_type; + }; + + LLAMA_API void llama_opt_init(struct llama_context * lctx, struct llama_model * model, struct llama_opt_params lopt_params); + + LLAMA_API void llama_opt_epoch( + struct llama_context * lctx, + ggml_opt_dataset_t dataset, + ggml_opt_result_t result_train, + ggml_opt_result_t result_eval, + int64_t idata_split, + ggml_opt_epoch_callback callback_train, + ggml_opt_epoch_callback callback_eval); + +#ifdef __cplusplus +} +#endif + +#endif // LLAMA_H diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Info.plist b/ios/Llama.xcframework/ios-arm64/Llama.framework/Info.plist new file mode 100644 index 00000000..45bf5fcf --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64/Llama.framework/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + Llama + CFBundleIdentifier + io.github.netdur.llama_cpp_dart + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Llama + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.1.0 + CFBundleVersion + 0.1.0 + MinimumOSVersion + 13.0 + + \ No newline at end of file diff --git a/ios/Llama.xcframework/ios-arm64/Llama.framework/Llama b/ios/Llama.xcframework/ios-arm64/Llama.framework/Llama new file mode 100755 index 0000000000000000000000000000000000000000..c57ed1b39e6ec21cc6456c8aabd802615580d253 GIT binary patch literal 622016 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

9V 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

C{s^=bTf2g7h!oivYZ^ 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%0Dq{*Aw41ZH_o}|5Ev9MX=|Hhx=m=J-9SHYUnO! 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 for setting/getting data + GGML_API void ggml_backend_tensor_set( struct ggml_tensor * tensor, const void * data, size_t offset, size_t size); + GGML_API void ggml_backend_tensor_get(const struct ggml_tensor * tensor, void * data, size_t offset, size_t size); + GGML_API void ggml_backend_tensor_memset( struct ggml_tensor * tensor, uint8_t value, size_t offset, size_t size); + + GGML_API void ggml_backend_synchronize(ggml_backend_t backend); + + GGML_API ggml_backend_graph_plan_t ggml_backend_graph_plan_create(ggml_backend_t backend, struct ggml_cgraph * cgraph); + GGML_API void ggml_backend_graph_plan_free (ggml_backend_t backend, ggml_backend_graph_plan_t plan); + + GGML_API enum ggml_status ggml_backend_graph_plan_compute (ggml_backend_t backend, ggml_backend_graph_plan_t plan); + GGML_API enum ggml_status ggml_backend_graph_compute (ggml_backend_t backend, struct ggml_cgraph * cgraph); + GGML_API enum ggml_status ggml_backend_graph_compute_async(ggml_backend_t backend, struct ggml_cgraph * cgraph); + + // NOTE: will be removed, use device version instead + GGML_API bool ggml_backend_supports_op(ggml_backend_t backend, const struct ggml_tensor * op); + GGML_API bool ggml_backend_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft); + GGML_API bool ggml_backend_offload_op(ggml_backend_t backend, const struct ggml_tensor * op); + + // asynchronous copy + // the copy is performed after all the currently queued operations in backend_src + // backend_dst will wait for the copy to complete before performing other operations + // automatic fallback to sync copy if async is not supported + GGML_API void ggml_backend_tensor_copy_async(ggml_backend_t backend_src, ggml_backend_t backend_dst, struct ggml_tensor * src, struct ggml_tensor * dst); + + GGML_API ggml_backend_dev_t ggml_backend_get_device(ggml_backend_t backend); + + // + // Events + // + + GGML_API ggml_backend_event_t ggml_backend_event_new(ggml_backend_dev_t device); + GGML_API void ggml_backend_event_free(ggml_backend_event_t event); + GGML_API void ggml_backend_event_record(ggml_backend_event_t event, ggml_backend_t backend); + GGML_API void ggml_backend_event_synchronize(ggml_backend_event_t event); + GGML_API void ggml_backend_event_wait(ggml_backend_t backend, ggml_backend_event_t event); + + // + // Backend device + // + + enum ggml_backend_dev_type { + // CPU device using system memory + GGML_BACKEND_DEVICE_TYPE_CPU, + // GPU device using dedicated memory + GGML_BACKEND_DEVICE_TYPE_GPU, + // integrated GPU device using host memory + GGML_BACKEND_DEVICE_TYPE_IGPU, + // accelerator devices intended to be used together with the CPU backend (e.g. BLAS or AMX) + GGML_BACKEND_DEVICE_TYPE_ACCEL + }; + + // functionality supported by the device + struct ggml_backend_dev_caps { + // asynchronous operations + bool async; + // pinned host buffer + bool host_buffer; + // creating buffers from host ptr + bool buffer_from_host_ptr; + // event synchronization + bool events; + }; + + // all the device properties + struct ggml_backend_dev_props { + // device name + const char * name; + // device description + const char * description; + // device free memory in bytes + size_t memory_free; + // device total memory in bytes + size_t memory_total; + // device type + enum ggml_backend_dev_type type; + // device id + // for PCI devices, this should be the PCI bus id formatted as "domain:bus:device.function" (e.g. "0000:01:00.0") + // if the id is unknown, this should be NULL + const char * device_id; + // device capabilities + struct ggml_backend_dev_caps caps; + }; + + GGML_API const char * ggml_backend_dev_name(ggml_backend_dev_t device); + GGML_API const char * ggml_backend_dev_description(ggml_backend_dev_t device); + GGML_API void ggml_backend_dev_memory(ggml_backend_dev_t device, size_t * free, size_t * total); + GGML_API enum ggml_backend_dev_type ggml_backend_dev_type(ggml_backend_dev_t device); + GGML_API void ggml_backend_dev_get_props(ggml_backend_dev_t device, struct ggml_backend_dev_props * props); + GGML_API ggml_backend_reg_t ggml_backend_dev_backend_reg(ggml_backend_dev_t device); + GGML_API ggml_backend_t ggml_backend_dev_init(ggml_backend_dev_t device, const char * params); + GGML_API ggml_backend_buffer_type_t ggml_backend_dev_buffer_type(ggml_backend_dev_t device); + GGML_API ggml_backend_buffer_type_t ggml_backend_dev_host_buffer_type(ggml_backend_dev_t device); + GGML_API ggml_backend_buffer_t ggml_backend_dev_buffer_from_host_ptr(ggml_backend_dev_t device, void * ptr, size_t size, size_t max_tensor_size); + + GGML_API bool ggml_backend_dev_supports_op(ggml_backend_dev_t device, const struct ggml_tensor * op); + GGML_API bool ggml_backend_dev_supports_buft(ggml_backend_dev_t device, ggml_backend_buffer_type_t buft); + GGML_API bool ggml_backend_dev_offload_op(ggml_backend_dev_t device, const struct ggml_tensor * op); + + // + // Backend (reg) + // + + GGML_API const char * ggml_backend_reg_name(ggml_backend_reg_t reg); + GGML_API size_t ggml_backend_reg_dev_count(ggml_backend_reg_t reg); + GGML_API ggml_backend_dev_t ggml_backend_reg_dev_get(ggml_backend_reg_t reg, size_t index); + GGML_API void * ggml_backend_reg_get_proc_address(ggml_backend_reg_t reg, const char * name); + + // Common functions that may be obtained using ggml_backend_reg_get_proc_address + + // Split buffer type for tensor parallelism + typedef ggml_backend_buffer_type_t (*ggml_backend_split_buffer_type_t)(int main_device, const float * tensor_split); + // Set the number of threads for the backend + typedef void (*ggml_backend_set_n_threads_t)(ggml_backend_t backend, int n_threads); + // Get additional buffer types provided by the device (returns a NULL-terminated array) + typedef ggml_backend_buffer_type_t * (*ggml_backend_dev_get_extra_bufts_t)(ggml_backend_dev_t device); + // Set the abort callback for the backend + typedef void (*ggml_backend_set_abort_callback_t)(ggml_backend_t backend, ggml_abort_callback abort_callback, void * abort_callback_data); + // Get a list of feature flags supported by the backend (returns a NULL-terminated array) + struct ggml_backend_feature { + const char * name; + const char * value; + }; + typedef struct ggml_backend_feature * (*ggml_backend_get_features_t)(ggml_backend_reg_t reg); + + // + // Backend registry + // + + GGML_API void ggml_backend_register(ggml_backend_reg_t reg); + + GGML_API void ggml_backend_device_register(ggml_backend_dev_t device); + + // Backend (reg) enumeration + GGML_API size_t ggml_backend_reg_count(void); + GGML_API ggml_backend_reg_t ggml_backend_reg_get(size_t index); + GGML_API ggml_backend_reg_t ggml_backend_reg_by_name(const char * name); + + // Device enumeration + GGML_API size_t ggml_backend_dev_count(void); + GGML_API ggml_backend_dev_t ggml_backend_dev_get(size_t index); + GGML_API ggml_backend_dev_t ggml_backend_dev_by_name(const char * name); + GGML_API ggml_backend_dev_t ggml_backend_dev_by_type(enum ggml_backend_dev_type type); + + // Direct backend (stream) initialization + // = ggml_backend_dev_init(ggml_backend_dev_by_name(name), params) + GGML_API ggml_backend_t ggml_backend_init_by_name(const char * name, const char * params); + // = ggml_backend_dev_init(ggml_backend_dev_by_type(type), params) + GGML_API ggml_backend_t ggml_backend_init_by_type(enum ggml_backend_dev_type type, const char * params); + // = ggml_backend_dev_init(ggml_backend_dev_by_type(GPU) OR ggml_backend_dev_by_type(CPU), NULL) + GGML_API ggml_backend_t ggml_backend_init_best(void); + + // Load a backend from a dynamic library and register it + GGML_API ggml_backend_reg_t ggml_backend_load(const char * path); + // Unload a backend if loaded dynamically and unregister it + GGML_API void ggml_backend_unload(ggml_backend_reg_t reg); + // Load all known backends from dynamic libraries + GGML_API void ggml_backend_load_all(void); + GGML_API void ggml_backend_load_all_from_path(const char * dir_path); + + // + // Backend scheduler + // + + // The backend scheduler allows for multiple backend devices to be used together + // Handles compute buffer allocation, assignment of tensors to backends, and copying of tensors between backends + // The backends are selected based on: + // - the backend that supports the operation + // - the location of the pre-allocated tensors (e.g. the weights) + /* + Example usage: + + // operations that use tensors allocated in a buffer with USAGE_WEIGHTS will be assigned + // preferrably to run on the same backend as the buffer + ggml_backend_buffer_set_usage(buf_weights, GGML_BACKEND_BUFFER_USAGE_WEIGHTS); + + sched = ggml_backend_sched_new({backend_gpu, backend_gpu2, backend_cpu}, NULL, num_backends, GGML_DEFAULT_GRAPH_SIZE, false, true); + + // initialize buffers from a max size graph (optional) + reserve_graph = build_graph(sched, max_batch_size); + + // manually assign nodes to a backend (optional, should not be needed in most cases) + struct ggml_tensor * node = ggml_mul_mat(ctx, ...); + ggml_backend_sched_set_tensor_backend(sched, node, backend_gpu); + + ggml_backend_sched_reserve(sched, reserve_graph); + + // compute + graph = build_graph(sched); // the graph and its tensors are single-use in terms of allocation, multi-use in terms of computation + for (int i = 0; i < 10; ++i) { + ggml_backend_sched_graph_compute(sched, graph); // on the first iteration the graph is allocated automatically + } + + // if there are graph inputs: + graph = build_graph(sched); // get a new graph that is not allocated (the metadata for the old graph is freed once ggml_free is called) + ggml_backend_sched_reset(sched); // clear the allocation of the previous graph + ggml_backend_sched_alloc_graph(sched, graph); // explicitly allocate the new graph but do not execute it + ggml_backend_tensor_set(input_tensor, ...); // copy data to the newly allocated graph tensors + ggml_backend_sched_graph_compute(sched, graph); // execute the graph + + // as an alternative to the above it is also possible to assign the inputs to a dedicated context and + // allocate them statically via ggml_backend_alloc_ctx_tensors + } + */ + + typedef struct ggml_backend_sched * ggml_backend_sched_t; + + // Evaluation callback for each node in the graph (set with ggml_backend_sched_set_eval_callback) + // when ask == true, the scheduler wants to know if the user wants to observe this node + // this allows the scheduler to batch nodes together in order to evaluate them in a single call + // + // when ask == false, the scheduler is passing the node tensor to the user for observation + // if the user returns false, the scheduler will cancel the graph compute + // + typedef bool (*ggml_backend_sched_eval_callback)(struct ggml_tensor * t, bool ask, void * user_data); + + // Initialize a backend scheduler, backends with low index are given priority over backends with high index + GGML_API ggml_backend_sched_t ggml_backend_sched_new(ggml_backend_t * backends, ggml_backend_buffer_type_t * bufts, int n_backends, size_t graph_size, bool parallel, bool op_offload); + GGML_API void ggml_backend_sched_free(ggml_backend_sched_t sched); + + // Initialize backend buffers from a measure graph + GGML_API bool ggml_backend_sched_reserve(ggml_backend_sched_t sched, struct ggml_cgraph * measure_graph); // returns success + + GGML_API int ggml_backend_sched_get_n_backends(ggml_backend_sched_t sched); + GGML_API ggml_backend_t ggml_backend_sched_get_backend(ggml_backend_sched_t sched, int i); + + // Get the number of splits of the last graph + GGML_API int ggml_backend_sched_get_n_splits(ggml_backend_sched_t sched); + GGML_API int ggml_backend_sched_get_n_copies(ggml_backend_sched_t sched); + + GGML_API ggml_backend_buffer_type_t ggml_backend_sched_get_buffer_type(ggml_backend_sched_t sched, ggml_backend_t backend); + GGML_API size_t ggml_backend_sched_get_buffer_size(ggml_backend_sched_t sched, ggml_backend_t backend); + + GGML_API void ggml_backend_sched_set_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node, ggml_backend_t backend); + GGML_API ggml_backend_t ggml_backend_sched_get_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node); + + // Split graph without allocating it + GGML_API void ggml_backend_sched_split_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph); + + // Allocate and compute graph on the backend scheduler + GGML_API bool ggml_backend_sched_alloc_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph); // returns success + GGML_API enum ggml_status ggml_backend_sched_graph_compute(ggml_backend_sched_t sched, struct ggml_cgraph * graph); + GGML_API enum ggml_status ggml_backend_sched_graph_compute_async(ggml_backend_sched_t sched, struct ggml_cgraph * graph); + GGML_API void ggml_backend_sched_synchronize(ggml_backend_sched_t sched); + + // Reset all assignments and allocators - must be called before changing the node backends or allocating a new graph. + // This in effect deallocates all tensors that were previously allocated and leaves them with dangling pointers. + // The correct way to use this API is to discard the deallocated tensors and create new ones. + GGML_API void ggml_backend_sched_reset(ggml_backend_sched_t sched); + + // Set a callback to be called for each resulting node during graph compute + GGML_API void ggml_backend_sched_set_eval_callback(ggml_backend_sched_t sched, ggml_backend_sched_eval_callback callback, void * user_data); + + // + // Utils + // + + struct ggml_backend_graph_copy { + ggml_backend_buffer_t buffer; + struct ggml_context * ctx_allocated; + struct ggml_context * ctx_unallocated; + struct ggml_cgraph * graph; + }; + + // Copy a graph to a different backend + GGML_API struct ggml_backend_graph_copy ggml_backend_graph_copy(ggml_backend_t backend, struct ggml_cgraph * graph); + GGML_API void ggml_backend_graph_copy_free(struct ggml_backend_graph_copy copy); + + typedef bool (*ggml_backend_eval_callback)(int node_index, struct ggml_tensor * t1, struct ggml_tensor * t2, void * user_data); + + // Compare the output of two backends + GGML_API bool ggml_backend_compare_graph_backend(ggml_backend_t backend1, ggml_backend_t backend2, struct ggml_cgraph * graph, ggml_backend_eval_callback callback, void * user_data, struct ggml_tensor * test_node); + + // Tensor initialization + GGML_API enum ggml_status ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, void * addr); + GGML_API enum ggml_status ggml_backend_view_init(struct ggml_tensor * tensor); + + // CPU buffer types are always available + GGML_API ggml_backend_buffer_t ggml_backend_cpu_buffer_from_ptr(void * ptr, size_t size); + GGML_API ggml_backend_buffer_type_t ggml_backend_cpu_buffer_type(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-blas.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-blas.h new file mode 100644 index 00000000..87a81b36 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-blas.h @@ -0,0 +1,25 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_blas_init(void); + +GGML_BACKEND_API bool ggml_backend_is_blas(ggml_backend_t backend); + +// number of threads used for conversion to float +// for openblas and blis, this will also set the number of threads used for blas operations +GGML_BACKEND_API void ggml_backend_blas_set_n_threads(ggml_backend_t backend_blas, int n_threads); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_blas_reg(void); + + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cann.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cann.h new file mode 100644 index 00000000..b469e228 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cann.h @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2023-2024 The ggml authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#pragma once + +#include "ggml-backend.h" +#include "ggml.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Maximum number of CANN devices supported. + */ +#define GGML_CANN_MAX_DEVICES 16 + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_cann_reg(void); + +/** + * @brief Initializes the CANN backend for a specified device. + * + * This function initializes the CANN backend for the given device. + * It verifies the device index, allocates a context, and creates a backend + * instance. + * + * @param device The index of the device to initialize. + * @return A pointer to the initialized backend instance, or nullptr on failure. + */ +GGML_BACKEND_API ggml_backend_t ggml_backend_cann_init(int32_t device); + +/** + * @brief Checks if a given backend is a CANN backend. + * + * This function verifies if the provided backend is a CANN backend by comparing + * its GUID with the CANN backend's GUID. + * + * @param backend The backend instance to check. + * @return True if the backend is a CANN backend, false otherwise. + */ +GGML_BACKEND_API bool ggml_backend_is_cann(ggml_backend_t backend); + +/** + * @brief Retrieves the CANN buffer type for a specified device. + * + * This function initializes and returns the buffer type interface associated + * with the given device. It ensures thread-safe access using a mutex. + * + * @param device The device index for which to retrieve the buffer type. + * @return A pointer to the buffer type interface for the specified device, or + * nullptr if the device index is out of range. + */ +GGML_BACKEND_API ggml_backend_buffer_type_t +ggml_backend_cann_buffer_type(int32_t device); + +/** + * @brief Retrieves the number of CANN devices available. + * + * This function returns the number of CANN devices available based on + * information obtained from `ggml_cann_info()`. + * + * @return The number of CANN devices available. + */ +GGML_BACKEND_API int32_t ggml_backend_cann_get_device_count(void); + +/** + * @brief pinned host buffer for use with the CPU backend for faster copies between CPU and NPU. + * + * @return A pointer to the host buffer type interface. + */ +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_cann_host_buffer_type(void); + +/** + * @brief Retrieves the description of a specific CANN device. + * + * This function sets the specified device, retrieves the SoC name, + * and writes it into the provided description buffer. + * + * @param device The device index to retrieve the description for. + * @param description Pointer to a buffer where the description will be written. + * @param description_size Size of the description buffer. + */ +GGML_BACKEND_API void ggml_backend_cann_get_device_description( + int32_t device, char* description, size_t description_size); + +/** + * @brief Retrieves the memory information of a specific CANN device. + * + * This function sets the specified device, retrieves the free and total + * memory information of the specified type (ACL_HBM_MEM), and stores them + * in the provided pointers. + * + * @param device The device index to retrieve memory information for. + * @param free Pointer to a variable where the free memory size will be stored. + * @param total Pointer to a variable where the total memory size will be + * stored. + */ +GGML_BACKEND_API void ggml_backend_cann_get_device_memory(int32_t device, + size_t* free, + size_t* total); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cpp.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cpp.h new file mode 100644 index 00000000..48aa7968 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cpp.h @@ -0,0 +1,39 @@ +#pragma once + +#ifndef __cplusplus +#error "This header is for C++ only" +#endif + +#include "ggml.h" +#include "ggml-alloc.h" +#include "ggml-backend.h" +#include "gguf.h" +#include + +// Smart pointers for ggml types + +// ggml + +struct ggml_context_deleter { void operator()(ggml_context * ctx) { ggml_free(ctx); } }; +struct gguf_context_deleter { void operator()(gguf_context * ctx) { gguf_free(ctx); } }; + +typedef std::unique_ptr ggml_context_ptr; +typedef std::unique_ptr gguf_context_ptr; + +// ggml-alloc + +struct ggml_gallocr_deleter { void operator()(ggml_gallocr_t galloc) { ggml_gallocr_free(galloc); } }; + +typedef std::unique_ptr ggml_gallocr_ptr; + +// ggml-backend + +struct ggml_backend_deleter { void operator()(ggml_backend_t backend) { ggml_backend_free(backend); } }; +struct ggml_backend_buffer_deleter { void operator()(ggml_backend_buffer_t buffer) { ggml_backend_buffer_free(buffer); } }; +struct ggml_backend_event_deleter { void operator()(ggml_backend_event_t event) { ggml_backend_event_free(event); } }; +struct ggml_backend_sched_deleter { void operator()(ggml_backend_sched_t sched) { ggml_backend_sched_free(sched); } }; + +typedef std::unique_ptr ggml_backend_ptr; +typedef std::unique_ptr ggml_backend_buffer_ptr; +typedef std::unique_ptr ggml_backend_event_ptr; +typedef std::unique_ptr ggml_backend_sched_ptr; diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cpu.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cpu.h new file mode 100644 index 00000000..9edd4851 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cpu.h @@ -0,0 +1,145 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + + // the compute plan that needs to be prepared for ggml_graph_compute() + // since https://github.com/ggml-org/ggml/issues/287 + struct ggml_cplan { + size_t work_size; // size of work buffer, calculated by `ggml_graph_plan()` + uint8_t * work_data; // work buffer, to be allocated by caller before calling to `ggml_graph_compute()` + + int n_threads; + struct ggml_threadpool * threadpool; + + // abort ggml_graph_compute when true + ggml_abort_callback abort_callback; + void * abort_callback_data; + }; + + // numa strategies + enum ggml_numa_strategy { + GGML_NUMA_STRATEGY_DISABLED = 0, + GGML_NUMA_STRATEGY_DISTRIBUTE = 1, + GGML_NUMA_STRATEGY_ISOLATE = 2, + GGML_NUMA_STRATEGY_NUMACTL = 3, + GGML_NUMA_STRATEGY_MIRROR = 4, + GGML_NUMA_STRATEGY_COUNT + }; + + GGML_BACKEND_API void ggml_numa_init(enum ggml_numa_strategy numa); // call once for better performance on NUMA systems + GGML_BACKEND_API bool ggml_is_numa(void); // true if init detected that system has >1 NUMA node + + GGML_BACKEND_API struct ggml_tensor * ggml_new_i32(struct ggml_context * ctx, int32_t value); + GGML_BACKEND_API struct ggml_tensor * ggml_new_f32(struct ggml_context * ctx, float value); + + GGML_BACKEND_API struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value); + GGML_BACKEND_API struct ggml_tensor * ggml_set_f32 (struct ggml_tensor * tensor, float value); + + GGML_BACKEND_API int32_t ggml_get_i32_1d(const struct ggml_tensor * tensor, int i); + GGML_BACKEND_API void ggml_set_i32_1d(const struct ggml_tensor * tensor, int i, int32_t value); + + GGML_BACKEND_API int32_t ggml_get_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3); + GGML_BACKEND_API void ggml_set_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, int32_t value); + + GGML_BACKEND_API float ggml_get_f32_1d(const struct ggml_tensor * tensor, int i); + GGML_BACKEND_API void ggml_set_f32_1d(const struct ggml_tensor * tensor, int i, float value); + + GGML_BACKEND_API float ggml_get_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3); + GGML_BACKEND_API void ggml_set_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, float value); + + GGML_BACKEND_API struct ggml_threadpool * ggml_threadpool_new (struct ggml_threadpool_params * params); + GGML_BACKEND_API void ggml_threadpool_free (struct ggml_threadpool * threadpool); + GGML_BACKEND_API int ggml_threadpool_get_n_threads (struct ggml_threadpool * threadpool); + GGML_BACKEND_API void ggml_threadpool_pause (struct ggml_threadpool * threadpool); + GGML_BACKEND_API void ggml_threadpool_resume (struct ggml_threadpool * threadpool); + + // ggml_graph_plan() has to be called before ggml_graph_compute() + // when plan.work_size > 0, caller must allocate memory for plan.work_data + GGML_BACKEND_API struct ggml_cplan ggml_graph_plan( + const struct ggml_cgraph * cgraph, + int n_threads, /* = GGML_DEFAULT_N_THREADS */ + struct ggml_threadpool * threadpool /* = NULL */ ); + GGML_BACKEND_API enum ggml_status ggml_graph_compute(struct ggml_cgraph * cgraph, struct ggml_cplan * cplan); + + // same as ggml_graph_compute() but the work data is allocated as a part of the context + // note: the drawback of this API is that you must have ensured that the context has enough memory for the work data + GGML_BACKEND_API enum ggml_status ggml_graph_compute_with_ctx(struct ggml_context * ctx, struct ggml_cgraph * cgraph, int n_threads); + + // + // system info + // + + // x86 + GGML_BACKEND_API int ggml_cpu_has_sse3 (void); + GGML_BACKEND_API int ggml_cpu_has_ssse3 (void); + GGML_BACKEND_API int ggml_cpu_has_avx (void); + GGML_BACKEND_API int ggml_cpu_has_avx_vnni (void); + GGML_BACKEND_API int ggml_cpu_has_avx2 (void); + GGML_BACKEND_API int ggml_cpu_has_bmi2 (void); + GGML_BACKEND_API int ggml_cpu_has_f16c (void); + GGML_BACKEND_API int ggml_cpu_has_fma (void); + GGML_BACKEND_API int ggml_cpu_has_avx512 (void); + GGML_BACKEND_API int ggml_cpu_has_avx512_vbmi(void); + GGML_BACKEND_API int ggml_cpu_has_avx512_vnni(void); + GGML_BACKEND_API int ggml_cpu_has_avx512_bf16(void); + GGML_BACKEND_API int ggml_cpu_has_amx_int8 (void); + // ARM + GGML_BACKEND_API int ggml_cpu_has_neon (void); + GGML_BACKEND_API int ggml_cpu_has_arm_fma (void); + GGML_BACKEND_API int ggml_cpu_has_fp16_va (void); + GGML_BACKEND_API int ggml_cpu_has_dotprod (void); + GGML_BACKEND_API int ggml_cpu_has_matmul_int8(void); + GGML_BACKEND_API int ggml_cpu_has_sve (void); + GGML_BACKEND_API int ggml_cpu_get_sve_cnt (void); // sve vector length in bytes + GGML_BACKEND_API int ggml_cpu_has_sme (void); + // other + GGML_BACKEND_API int ggml_cpu_has_riscv_v (void); + GGML_BACKEND_API int ggml_cpu_has_vsx (void); + GGML_BACKEND_API int ggml_cpu_has_vxe (void); + GGML_BACKEND_API int ggml_cpu_has_wasm_simd (void); + GGML_BACKEND_API int ggml_cpu_has_llamafile (void); + + // Internal types and functions exposed for tests and benchmarks + + typedef void (*ggml_vec_dot_t) (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT x, size_t bx, + const void * GGML_RESTRICT y, size_t by, int nrc); + + struct ggml_type_traits_cpu { + ggml_from_float_t from_float; + ggml_vec_dot_t vec_dot; + enum ggml_type vec_dot_type; + int64_t nrows; // number of rows to process simultaneously + }; + + GGML_BACKEND_API const struct ggml_type_traits_cpu * ggml_get_type_traits_cpu(enum ggml_type type); + + GGML_BACKEND_API void ggml_cpu_init(void); + + // + // CPU backend + // + + GGML_BACKEND_API ggml_backend_t ggml_backend_cpu_init(void); + + GGML_BACKEND_API bool ggml_backend_is_cpu (ggml_backend_t backend); + GGML_BACKEND_API void ggml_backend_cpu_set_n_threads (ggml_backend_t backend_cpu, int n_threads); + GGML_BACKEND_API void ggml_backend_cpu_set_threadpool (ggml_backend_t backend_cpu, ggml_threadpool_t threadpool); + GGML_BACKEND_API void ggml_backend_cpu_set_abort_callback(ggml_backend_t backend_cpu, ggml_abort_callback abort_callback, void * abort_callback_data); + + GGML_BACKEND_API ggml_backend_reg_t ggml_backend_cpu_reg(void); + + GGML_BACKEND_API void ggml_cpu_fp32_to_fp32(const float *, float *, int64_t); + GGML_BACKEND_API void ggml_cpu_fp32_to_i32 (const float *, int32_t *, int64_t); + GGML_BACKEND_API void ggml_cpu_fp32_to_fp16(const float *, ggml_fp16_t *, int64_t); + GGML_BACKEND_API void ggml_cpu_fp16_to_fp32(const ggml_fp16_t *, float *, int64_t); + GGML_BACKEND_API void ggml_cpu_fp32_to_bf16(const float *, ggml_bf16_t *, int64_t); + GGML_BACKEND_API void ggml_cpu_bf16_to_fp32(const ggml_bf16_t *, float *, int64_t); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cuda.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cuda.h new file mode 100644 index 00000000..22ad2c00 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-cuda.h @@ -0,0 +1,47 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef GGML_USE_HIP +#define GGML_CUDA_NAME "ROCm" +#define GGML_CUBLAS_NAME "hipBLAS" +#elif defined(GGML_USE_MUSA) +#define GGML_CUDA_NAME "MUSA" +#define GGML_CUBLAS_NAME "muBLAS" +#else +#define GGML_CUDA_NAME "CUDA" +#define GGML_CUBLAS_NAME "cuBLAS" +#endif +#define GGML_CUDA_MAX_DEVICES 16 + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_cuda_init(int device); + +GGML_BACKEND_API bool ggml_backend_is_cuda(ggml_backend_t backend); + +// device buffer +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_cuda_buffer_type(int device); + +// split tensor buffer that splits matrices by rows across multiple devices +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_cuda_split_buffer_type(int main_device, const float * tensor_split); + +// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_cuda_host_buffer_type(void); + +GGML_BACKEND_API int ggml_backend_cuda_get_device_count(void); +GGML_BACKEND_API void ggml_backend_cuda_get_device_description(int device, char * description, size_t description_size); +GGML_BACKEND_API void ggml_backend_cuda_get_device_memory(int device, size_t * free, size_t * total); + +GGML_BACKEND_API bool ggml_backend_cuda_register_host_buffer(void * buffer, size_t size); +GGML_BACKEND_API void ggml_backend_cuda_unregister_host_buffer(void * buffer); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_cuda_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-hexagon.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-hexagon.h new file mode 100644 index 00000000..6e079004 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-hexagon.h @@ -0,0 +1,19 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_hexagon_init(void); + +GGML_BACKEND_API bool ggml_backend_is_hexagon(ggml_backend_t backend); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_hexagon_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-metal.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-metal.h new file mode 100644 index 00000000..433838f0 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-metal.h @@ -0,0 +1,61 @@ +// Note: this description is outdated +// +// An interface allowing to compute ggml_cgraph with Metal +// +// This is a fully functional interface that extends ggml with GPU support for Apple devices. +// A similar interface can be created for other GPU backends (e.g. Vulkan, CUDA, etc.) +// +// How it works? +// +// As long as your program can create and evaluate a ggml_cgraph on the CPU, you can use this +// interface to evaluate the same graph on the GPU. Instead of using ggml_graph_compute(), you +// use ggml_metal_graph_compute() (or ggml_vulkan_graph_compute(), etc.) +// +// You only need to make sure that all memory buffers that you used during the graph creation +// are mapped to the device memory with the ggml_metal_add_buffer() function. This mapping is +// used during the graph evaluation to determine the arguments of the compute kernels. +// +// Synchronization between device and host memory (for example for input and output tensors) +// is done with the ggml_metal_set_tensor() and ggml_metal_get_tensor() functions. +// + +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#include +#include + +struct ggml_tensor; +struct ggml_cgraph; + +#ifdef __cplusplus +extern "C" { +#endif + +// +// backend API +// user-code should use only these functions +// + +// TODO: remove in the future +GGML_BACKEND_API ggml_backend_t ggml_backend_metal_init(void); + +GGML_BACKEND_API bool ggml_backend_is_metal(ggml_backend_t backend); + +GGML_BACKEND_API void ggml_backend_metal_set_abort_callback(ggml_backend_t backend, ggml_abort_callback abort_callback, void * user_data); + +// helper to check if the device supports a specific family +// ideally, the user code should be doing these checks +// ref: https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf +GGML_BACKEND_API bool ggml_backend_metal_supports_family(ggml_backend_t backend, int family); + +// capture all command buffers committed the next time `ggml_backend_graph_compute` is called +GGML_BACKEND_API void ggml_backend_metal_capture_next_compute(ggml_backend_t backend); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_metal_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-opencl.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-opencl.h new file mode 100644 index 00000000..6b617713 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-opencl.h @@ -0,0 +1,26 @@ +#ifndef GGML_OPENCL_H +#define GGML_OPENCL_H + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// +// backend API +// +GGML_BACKEND_API ggml_backend_t ggml_backend_opencl_init(void); +GGML_BACKEND_API bool ggml_backend_is_opencl(ggml_backend_t backend); + +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_opencl_buffer_type(void); +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_opencl_host_buffer_type(void); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_opencl_reg(void); + +#ifdef __cplusplus +} +#endif + +#endif // GGML_OPENCL_H diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-opt.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-opt.h new file mode 100644 index 00000000..4703a05a --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-opt.h @@ -0,0 +1,256 @@ +// This file contains functionality for training models using GGML. +// It is not strictly needed vs. just vanilla GGML but it provides a more high-level interface for common needs such as datasets. +// At the bottom of this file especially there are relatively high-level functions that are suitable use or adaptation in user code. +// +// Module maintainer: Johannes Gäßler (@JohannesGaessler, johannesg@5d6.de) + +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + struct ggml_opt_dataset; + struct ggml_opt_context; + struct ggml_opt_result; + + typedef struct ggml_opt_dataset * ggml_opt_dataset_t; + typedef struct ggml_opt_context * ggml_opt_context_t; + typedef struct ggml_opt_result * ggml_opt_result_t; + + // ====== Loss ====== + + // built-in loss types, i.e. the built-in quantities minimized by the optimizer + // custom loss types can be defined via mean or sum which simply reduce the outputs for all datapoints to a single value + enum ggml_opt_loss_type { + GGML_OPT_LOSS_TYPE_MEAN, + GGML_OPT_LOSS_TYPE_SUM, + GGML_OPT_LOSS_TYPE_CROSS_ENTROPY, + GGML_OPT_LOSS_TYPE_MEAN_SQUARED_ERROR, + }; + + // ====== Dataset ====== + + GGML_API ggml_opt_dataset_t ggml_opt_dataset_init( + enum ggml_type type_data, // the type for the internal data tensor + enum ggml_type type_label, // the type for the internal labels tensor + int64_t ne_datapoint, // number of elements per datapoint + int64_t ne_label, // number of elements per label + int64_t ndata, // total number of datapoints/labels + int64_t ndata_shard); // number of datapoints/labels per shard (unit at which the dataset is shuffled/copied) + GGML_API void ggml_opt_dataset_free(ggml_opt_dataset_t dataset); + + // get underlying tensors that store the data + GGML_API int64_t ggml_opt_dataset_ndata (ggml_opt_dataset_t dataset); + GGML_API struct ggml_tensor * ggml_opt_dataset_data (ggml_opt_dataset_t dataset); // shape = [ne_datapoint, ndata] + GGML_API struct ggml_tensor * ggml_opt_dataset_labels(ggml_opt_dataset_t dataset); // shape = [nd_label, ndata] + + // shuffle idata first datapoints from dataset with RNG from opt_ctx, shuffle all datapoints if idata is negative + GGML_API void ggml_opt_dataset_shuffle(ggml_opt_context_t opt_ctx, ggml_opt_dataset_t dataset, int64_t idata); + + // get batch at position ibatch from dataset and copy the data to data_batch and labels_batch + GGML_API void ggml_opt_dataset_get_batch( + ggml_opt_dataset_t dataset, + struct ggml_tensor * data_batch, // shape = [ne_datapoint, ndata_batch] + struct ggml_tensor * labels_batch, // shape = [ne_label, ndata_batch] + int64_t ibatch); + GGML_API void ggml_opt_dataset_get_batch_host( + ggml_opt_dataset_t dataset, + void * data_batch, + size_t nb_data_batch, + void * labels_batch, + int64_t ibatch); + + // ====== Model / Context ====== + + enum ggml_opt_build_type { + GGML_OPT_BUILD_TYPE_FORWARD = 10, + GGML_OPT_BUILD_TYPE_GRAD = 20, + GGML_OPT_BUILD_TYPE_OPT = 30, + }; + + enum ggml_opt_optimizer_type { + GGML_OPT_OPTIMIZER_TYPE_ADAMW, + GGML_OPT_OPTIMIZER_TYPE_SGD, + + GGML_OPT_OPTIMIZER_TYPE_COUNT + }; + + // parameters that control which optimizer is used and how said optimizer tries to find the minimal loss + struct ggml_opt_optimizer_params { + struct { + float alpha; // learning rate + float beta1; // first AdamW momentum + float beta2; // second AdamW momentum + float eps; // epsilon for numerical stability + float wd; // weight decay - 0.0f to disable + } adamw; + struct { + float alpha; // learning rate + float wd; // weight decay + } sgd; + }; + + // callback to calculate optimizer parameters prior to a backward pass + // userdata can be used to pass arbitrary data + typedef struct ggml_opt_optimizer_params (*ggml_opt_get_optimizer_params)(void * userdata); + + // returns the default optimizer params (constant, hard-coded values) + // userdata is not used + GGML_API struct ggml_opt_optimizer_params ggml_opt_get_default_optimizer_params(void * userdata); + + // casts userdata to ggml_opt_optimizer_params and returns it + GGML_API struct ggml_opt_optimizer_params ggml_opt_get_constant_optimizer_params(void * userdata); + + // parameters for initializing a new optimization context + struct ggml_opt_params { + ggml_backend_sched_t backend_sched; // defines which backends are used to construct the compute graphs + + // by default the forward graph needs to be reconstructed for each eval + // if ctx_compute, inputs, and outputs are set the graphs are instead allocated statically + struct ggml_context * ctx_compute; + struct ggml_tensor * inputs; + struct ggml_tensor * outputs; + + enum ggml_opt_loss_type loss_type; + enum ggml_opt_build_type build_type; + + int32_t opt_period; // after how many gradient accumulation steps an optimizer step should be done + + ggml_opt_get_optimizer_params get_opt_pars; // callback for calculating optimizer parameters + void * get_opt_pars_ud; // userdata for calculating optimizer parameters + + // only GGML_OPT_OPTIMIZER_TYPE_ADAMW needs m, v momenta per parameter tensor + enum ggml_opt_optimizer_type optimizer; + }; + + // get parameters for an optimization context with defaults set where possible + // parameters for which no sensible defaults exist are supplied as arguments to this function + GGML_API struct ggml_opt_params ggml_opt_default_params( + ggml_backend_sched_t backend_sched, + enum ggml_opt_loss_type loss_type); + + GGML_API ggml_opt_context_t ggml_opt_init(struct ggml_opt_params params); + GGML_API void ggml_opt_free(ggml_opt_context_t opt_ctx); + + // set gradients to zero, initilize loss, and optionally reset the optimizer + GGML_API void ggml_opt_reset(ggml_opt_context_t opt_ctx, bool optimizer); + + GGML_API bool ggml_opt_static_graphs(ggml_opt_context_t opt_ctx); // whether the graphs are allocated_statically + + // get underlying tensors that store data + // if not using static graphs these pointers become invalid with the next call to ggml_opt_alloc + GGML_API struct ggml_tensor * ggml_opt_inputs( ggml_opt_context_t opt_ctx); // forward graph input tensor + GGML_API struct ggml_tensor * ggml_opt_outputs( ggml_opt_context_t opt_ctx); // forward graph output tensor + GGML_API struct ggml_tensor * ggml_opt_labels( ggml_opt_context_t opt_ctx); // labels to compare outputs against + GGML_API struct ggml_tensor * ggml_opt_loss( ggml_opt_context_t opt_ctx); // scalar tensor that contains the loss + GGML_API struct ggml_tensor * ggml_opt_pred( ggml_opt_context_t opt_ctx); // predictions made by outputs + GGML_API struct ggml_tensor * ggml_opt_ncorrect(ggml_opt_context_t opt_ctx); // number of matching predictions between outputs and labels + + // get the gradient accumulator for a node from the forward graph + GGML_API struct ggml_tensor * ggml_opt_grad_acc(ggml_opt_context_t opt_ctx, struct ggml_tensor * node); + + GGML_API enum ggml_opt_optimizer_type ggml_opt_context_optimizer_type(ggml_opt_context_t); //TODO consistent naming scheme + + GGML_API const char * ggml_opt_optimizer_name(enum ggml_opt_optimizer_type); + + // ====== Optimization Result ====== + + GGML_API ggml_opt_result_t ggml_opt_result_init(void); + GGML_API void ggml_opt_result_free(ggml_opt_result_t result); + GGML_API void ggml_opt_result_reset(ggml_opt_result_t result); + + // get data from result, uncertainties are optional and can be ignored by passing NULL + GGML_API void ggml_opt_result_ndata( ggml_opt_result_t result, int64_t * ndata); // writes 1 value, number of datapoints + GGML_API void ggml_opt_result_loss( ggml_opt_result_t result, double * loss, double * unc); // writes 1 value + GGML_API void ggml_opt_result_pred( ggml_opt_result_t result, int32_t * pred); // writes ndata values + GGML_API void ggml_opt_result_accuracy(ggml_opt_result_t result, double * accuracy, double * unc); // writes 1 value + + // ====== Computation ====== + + // if not using static graphs, this function must be called prior to ggml_opt_alloc + GGML_API void ggml_opt_prepare_alloc( + ggml_opt_context_t opt_ctx, + struct ggml_context * ctx_compute, + struct ggml_cgraph * gf, + struct ggml_tensor * inputs, + struct ggml_tensor * outputs); + + // allocate the next graph for evaluation, either forward or forward + backward + // must be called exactly once prior to calling ggml_opt_eval + GGML_API void ggml_opt_alloc(ggml_opt_context_t opt_ctx, bool backward); + + // do forward pass, increment result if not NULL, do backward pass if allocated + GGML_API void ggml_opt_eval(ggml_opt_context_t opt_ctx, ggml_opt_result_t result); + + // ############################################################################ + // ## The high-level functions start here. They do not depend on any private ## + // ## functions or structs and can be copied to and adapted for user code. ## + // ############################################################################ + + // ====== Intended Usage ====== + // + // 1. Select the appropriate loss for your problem. + // 2. Create a dataset and set the data for the "data" tensor. Also set the "labels" tensor if your loss needs them. + // Setting the shard size to 1 will be fine, it's the granularity with which data is shuffled/loaded (bigger values are faster). + // 3. Create a GGML graph for your model with no_alloc == true. Use two separate contexts for the tensors. + // The first context should contain the model parameters and inputs and be allocated statically in user code. + // The second context should contain all other tensors and will be (re)allocated automatically. + // Due to this automated allocation the data of the second context is not defined when accessed in user code. + // Note that the second dimension of the inputs/outputs are interpreted as the number of datapoints in those tensors. + // 4. Call ggml_opt_fit. If you need more control you can use ggml_opt_epoch instead. + + // signature for a callback while evaluating opt_ctx on dataset, called after an evaluation + typedef void (*ggml_opt_epoch_callback)( + bool train, // true after training evaluation, false after validation evaluation + ggml_opt_context_t opt_ctx, + ggml_opt_dataset_t dataset, + ggml_opt_result_t result, // result associated with the dataset subsection + int64_t ibatch, // number of batches that have been evaluated so far + int64_t ibatch_max, // total number of batches in this dataset subsection + int64_t t_start_us); // time at which the evaluation on the dataset subsection was started + + // do training on front of dataset, do evaluation only on back of dataset + GGML_API void ggml_opt_epoch( + ggml_opt_context_t opt_ctx, + ggml_opt_dataset_t dataset, + ggml_opt_result_t result_train, // result to increment during training, ignored if NULL + ggml_opt_result_t result_eval, // result to increment during evaluation, ignored if NULL + int64_t idata_split, // data index at which to split training and evaluation + ggml_opt_epoch_callback callback_train, + ggml_opt_epoch_callback callback_eval); + + // callback that prints a progress bar on stderr + GGML_API void ggml_opt_epoch_callback_progress_bar( + bool train, + ggml_opt_context_t opt_ctx, + ggml_opt_dataset_t dataset, + ggml_opt_result_t result, + int64_t ibatch, + int64_t ibatch_max, + int64_t t_start_us); + + // fit model defined by inputs and outputs to dataset + GGML_API void ggml_opt_fit( + ggml_backend_sched_t backend_sched, // backend scheduler for constructing the compute graphs + struct ggml_context * ctx_compute, // context with temporarily allocated tensors to calculate the outputs + struct ggml_tensor * inputs, // input tensor with shape [ne_datapoint, ndata_batch] + struct ggml_tensor * outputs, // output tensor, must have shape [ne_label, ndata_batch] if labels are used + ggml_opt_dataset_t dataset, // dataset with data and optionally also labels + enum ggml_opt_loss_type loss_type, // loss to minimize + enum ggml_opt_optimizer_type optimizer, // sgd or adamw + ggml_opt_get_optimizer_params get_opt_pars, // callback to get optimizer params, userdata is pointer to epoch (of type int64_t) + int64_t nepoch, // how many times the dataset should be iterated over + int64_t nbatch_logical, // datapoints optimizer step, must be a multiple of ndata_batch in inputs/outputs + float val_split, // fraction of the dataset to use for validation, must be in [0.0f, 1.0f) + bool silent); // whether or not info prints to stderr should be suppressed + + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-rpc.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-rpc.h new file mode 100644 index 00000000..e6dca3f6 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-rpc.h @@ -0,0 +1,31 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define RPC_PROTO_MAJOR_VERSION 3 +#define RPC_PROTO_MINOR_VERSION 0 +#define RPC_PROTO_PATCH_VERSION 0 +#define GGML_RPC_MAX_SERVERS 16 + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_rpc_init(const char * endpoint, uint32_t device); +GGML_BACKEND_API bool ggml_backend_is_rpc(ggml_backend_t backend); + +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_rpc_buffer_type(const char * endpoint, uint32_t device); + +GGML_BACKEND_API void ggml_backend_rpc_get_device_memory(const char * endpoint, uint32_t device, size_t * free, size_t * total); + +GGML_BACKEND_API void ggml_backend_rpc_start_server(const char * endpoint, const char * cache_dir, + size_t n_threads, size_t n_devices, ggml_backend_dev_t * devices); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_rpc_reg(void); +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_rpc_add_server(const char * endpoint); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-sycl.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-sycl.h new file mode 100644 index 00000000..5ce349a8 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-sycl.h @@ -0,0 +1,49 @@ +// +// MIT license +// Copyright (C) 2024 Intel Corporation +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#define GGML_SYCL_NAME "SYCL" +#define GGML_SYCL_MAX_DEVICES 48 + +#ifdef __cplusplus +extern "C" { +#endif + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_sycl_init(int device); + +GGML_BACKEND_API bool ggml_backend_is_sycl(ggml_backend_t backend); + +// devide buffer +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_sycl_buffer_type(int device); + +// split tensor buffer that splits matrices by rows across multiple devices +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_sycl_split_buffer_type(const float * tensor_split); + +// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_sycl_host_buffer_type(void); + +GGML_BACKEND_API void ggml_backend_sycl_print_sycl_devices(void); +GGML_BACKEND_API void ggml_backend_sycl_get_gpu_list(int *id_list, int max_len); +GGML_BACKEND_API void ggml_backend_sycl_get_device_description(int device, + char *description, + size_t description_size); +GGML_BACKEND_API int ggml_backend_sycl_get_device_count(); +GGML_BACKEND_API void ggml_backend_sycl_get_device_memory(int device, size_t *free, size_t *total); + +// SYCL doesn't support registering host memory, keep here for reference +// GGML_BACKEND_API bool ggml_backend_sycl_register_host_buffer(void * buffer, size_t size); +// GGML_BACKEND_API void ggml_backend_sycl_unregister_host_buffer(void * buffer); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_sycl_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-vulkan.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-vulkan.h new file mode 100644 index 00000000..ed5ea5f7 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-vulkan.h @@ -0,0 +1,29 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define GGML_VK_NAME "Vulkan" +#define GGML_VK_MAX_DEVICES 16 + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_vk_init(size_t dev_num); + +GGML_BACKEND_API bool ggml_backend_is_vk(ggml_backend_t backend); +GGML_BACKEND_API int ggml_backend_vk_get_device_count(void); +GGML_BACKEND_API void ggml_backend_vk_get_device_description(int device, char * description, size_t description_size); +GGML_BACKEND_API void ggml_backend_vk_get_device_memory(int device, size_t * free, size_t * total); + +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_vk_buffer_type(size_t dev_num); +// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_vk_host_buffer_type(void); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_vk_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-webgpu.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-webgpu.h new file mode 100644 index 00000000..65b8ed9b --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-webgpu.h @@ -0,0 +1,19 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define GGML_WEBGPU_NAME "WebGPU" + +// Needed for examples in ggml +GGML_BACKEND_API ggml_backend_t ggml_backend_webgpu_init(void); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_webgpu_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-zdnn.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-zdnn.h new file mode 100644 index 00000000..fbf45b6e --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml-zdnn.h @@ -0,0 +1,17 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// device buffer +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_zdnn_buffer_type(void); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_zdnn_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml.h new file mode 100644 index 00000000..c1ed1a21 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/ggml.h @@ -0,0 +1,2614 @@ +#pragma once + +// +// GGML Tensor Library +// +// This documentation is still a work in progress. +// If you wish some specific topics to be covered, feel free to drop a comment: +// +// https://github.com/ggerganov/whisper.cpp/issues/40 +// +// ## Overview +// +// This library implements: +// +// - a set of tensor operations +// - automatic differentiation +// - basic optimization algorithms +// +// The aim of this library is to provide a minimalistic approach for various machine learning tasks. This includes, +// but is not limited to, the following: +// +// - linear regression +// - support vector machines +// - neural networks +// +// The library allows the user to define a certain function using the available tensor operations. This function +// definition is represented internally via a computation graph. Each tensor operation in the function definition +// corresponds to a node in the graph. Having the computation graph defined, the user can choose to compute the +// function's value and/or its gradient with respect to the input variables. Optionally, the function can be optimized +// using one of the available optimization algorithms. +// +// For example, here we define the function: f(x) = a*x^2 + b +// +// { +// struct ggml_init_params params = { +// .mem_size = 16*1024*1024, +// .mem_buffer = NULL, +// }; +// +// // memory allocation happens here +// struct ggml_context * ctx = ggml_init(params); +// +// struct ggml_tensor * x = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); +// +// ggml_set_param(ctx, x); // x is an input variable +// +// struct ggml_tensor * a = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); +// struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); +// struct ggml_tensor * x2 = ggml_mul(ctx, x, x); +// struct ggml_tensor * f = ggml_add(ctx, ggml_mul(ctx, a, x2), b); +// +// ... +// } +// +// Notice that the function definition above does not involve any actual computation. The computation is performed only +// when the user explicitly requests it. For example, to compute the function's value at x = 2.0: +// +// { +// ... +// +// struct ggml_cgraph * gf = ggml_new_graph(ctx); +// ggml_build_forward_expand(gf, f); +// +// // set the input variable and parameter values +// ggml_set_f32(x, 2.0f); +// ggml_set_f32(a, 3.0f); +// ggml_set_f32(b, 4.0f); +// +// ggml_graph_compute_with_ctx(ctx, &gf, n_threads); +// +// printf("f = %f\n", ggml_get_f32_1d(f, 0)); +// +// ... +// } +// +// The actual computation is performed in the ggml_graph_compute() function. +// +// The ggml_new_tensor_...() functions create new tensors. They are allocated in the memory buffer provided to the +// ggml_init() function. You have to be careful not to exceed the memory buffer size. Therefore, you have to know +// in advance how much memory you need for your computation. Alternatively, you can allocate a large enough memory +// and after defining the computation graph, call the ggml_used_mem() function to find out how much memory was +// actually needed. +// +// The ggml_set_param() function marks a tensor as an input variable. This is used by the automatic +// differentiation and optimization algorithms. +// +// The described approach allows to define the function graph once and then compute its forward or backward graphs +// multiple times. All computations will use the same memory buffer allocated in the ggml_init() function. This way +// the user can avoid the memory allocation overhead at runtime. +// +// The library supports multi-dimensional tensors - up to 4 dimensions. The FP16 and FP32 data types are first class +// citizens, but in theory the library can be extended to support FP8 and integer data types. +// +// Each tensor operation produces a new tensor. Initially the library was envisioned to support only the use of unary +// and binary operations. Most of the available operations fall into one of these two categories. With time, it became +// clear that the library needs to support more complex operations. The way to support these operations is not clear +// yet, but a few examples are demonstrated in the following operations: +// +// - ggml_permute() +// - ggml_conv_1d_1s() +// - ggml_conv_1d_2s() +// +// For each tensor operator, the library implements a forward and backward computation function. The forward function +// computes the output tensor value given the input tensor values. The backward function computes the adjoint of the +// input tensors given the adjoint of the output tensor. For a detailed explanation of what this means, take a +// calculus class, or watch the following video: +// +// What is Automatic Differentiation? +// https://www.youtube.com/watch?v=wG_nF1awSSY +// +// +// ## Tensor data (struct ggml_tensor) +// +// The tensors are stored in memory via the ggml_tensor struct. The structure provides information about the size of +// the tensor, the data type, and the memory buffer where the tensor data is stored. Additionally, it contains +// pointers to the "source" tensors - i.e. the tensors that were used to compute the current tensor. For example: +// +// { +// struct ggml_tensor * c = ggml_add(ctx, a, b); +// +// assert(c->src[0] == a); +// assert(c->src[1] == b); +// } +// +// The multi-dimensional tensors are stored in row-major order. The ggml_tensor struct contains fields for the +// number of elements in each dimension ("ne") as well as the number of bytes ("nb", a.k.a. stride). This allows +// to store tensors that are not contiguous in memory, which is useful for operations such as transposition and +// permutation. All tensor operations have to take the stride into account and not assume that the tensor is +// contiguous in memory. +// +// The data of the tensor is accessed via the "data" pointer. For example: +// +// { +// const int nx = 2; +// const int ny = 3; +// +// struct ggml_tensor * a = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, nx, ny); +// +// for (int y = 0; y < ny; y++) { +// for (int x = 0; x < nx; x++) { +// *(float *) ((char *) a->data + y*a->nb[1] + x*a->nb[0]) = x + y; +// } +// } +// +// ... +// } +// +// Alternatively, there are helper functions, such as ggml_get_f32_1d() and ggml_set_f32_1d() that can be used. +// +// ## The matrix multiplication operator (ggml_mul_mat) +// +// TODO +// +// +// ## Multi-threading +// +// TODO +// +// +// ## Overview of ggml.c +// +// TODO +// +// +// ## SIMD optimizations +// +// TODO +// +// +// ## Debugging ggml +// +// TODO +// +// + +#ifdef GGML_SHARED +# if defined(_WIN32) && !defined(__MINGW32__) +# ifdef GGML_BUILD +# define GGML_API __declspec(dllexport) extern +# else +# define GGML_API __declspec(dllimport) extern +# endif +# else +# define GGML_API __attribute__ ((visibility ("default"))) extern +# endif +#else +# define GGML_API extern +#endif + +// TODO: support for clang +#ifdef __GNUC__ +# define GGML_DEPRECATED(func, hint) func __attribute__((deprecated(hint))) +#elif defined(_MSC_VER) +# define GGML_DEPRECATED(func, hint) __declspec(deprecated(hint)) func +#else +# define GGML_DEPRECATED(func, hint) func +#endif + +#ifndef __GNUC__ +# define GGML_ATTRIBUTE_FORMAT(...) +#elif defined(__MINGW32__) && !defined(__clang__) +# define GGML_ATTRIBUTE_FORMAT(...) __attribute__((format(gnu_printf, __VA_ARGS__))) +#else +# define GGML_ATTRIBUTE_FORMAT(...) __attribute__((format(printf, __VA_ARGS__))) +#endif + +#include +#include +#include +#include + +#define GGML_FILE_MAGIC 0x67676d6c // "ggml" +#define GGML_FILE_VERSION 2 + +#define GGML_QNT_VERSION 2 // bump this on quantization format changes +#define GGML_QNT_VERSION_FACTOR 1000 // do not change this + +#define GGML_MAX_DIMS 4 +#define GGML_MAX_PARAMS 2048 +#define GGML_MAX_SRC 10 +#define GGML_MAX_N_THREADS 512 +#define GGML_MAX_OP_PARAMS 64 + +#ifndef GGML_MAX_NAME +# define GGML_MAX_NAME 64 +#endif + +#define GGML_DEFAULT_N_THREADS 4 +#define GGML_DEFAULT_GRAPH_SIZE 2048 + +#if UINTPTR_MAX == 0xFFFFFFFF + #define GGML_MEM_ALIGN 4 +#else + #define GGML_MEM_ALIGN 16 +#endif + +#define GGML_EXIT_SUCCESS 0 +#define GGML_EXIT_ABORTED 1 + +// TODO: convert to enum https://github.com/ggml-org/llama.cpp/pull/16187#discussion_r2388538726 +#define GGML_ROPE_TYPE_NORMAL 0 +#define GGML_ROPE_TYPE_NEOX 2 +#define GGML_ROPE_TYPE_MROPE 8 +#define GGML_ROPE_TYPE_VISION 24 +#define GGML_ROPE_TYPE_IMROPE 40 // binary: 101000 + +#define GGML_MROPE_SECTIONS 4 + +#define GGML_UNUSED(x) (void)(x) +#ifdef __CUDACC__ +template +__host__ __device__ constexpr inline void ggml_unused_vars_impl(Args&&...) noexcept {} +#define GGML_UNUSED_VARS(...) ggml_unused_vars_impl(__VA_ARGS__) +#else +#define GGML_UNUSED_VARS(...) do { (void)sizeof((__VA_ARGS__, 0)); } while(0) +#endif // __CUDACC__ + +#define GGML_PAD(x, n) (((x) + (n) - 1) & ~((n) - 1)) + +#ifndef NDEBUG +# define GGML_UNREACHABLE() do { fprintf(stderr, "statement should be unreachable\n"); abort(); } while(0) +#elif defined(__GNUC__) +# define GGML_UNREACHABLE() __builtin_unreachable() +#elif defined(_MSC_VER) +# define GGML_UNREACHABLE() __assume(0) +#else +# define GGML_UNREACHABLE() ((void) 0) +#endif + +#ifdef __cplusplus +# define GGML_NORETURN [[noreturn]] +#elif defined(_MSC_VER) +# define GGML_NORETURN __declspec(noreturn) +#else +# define GGML_NORETURN _Noreturn +#endif + +#define GGML_ABORT(...) ggml_abort(__FILE__, __LINE__, __VA_ARGS__) +#define GGML_ASSERT(x) if (!(x)) GGML_ABORT("GGML_ASSERT(%s) failed", #x) + +// used to copy the number of elements and stride in bytes of tensors into local variables. +// main purpose is to reduce code duplication and improve readability. +// +// example: +// +// GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne); +// GGML_TENSOR_LOCALS(size_t, nb1, src1, nb); +// +#define GGML_TENSOR_LOCALS_1(type, prefix, pointer, array) \ + const type prefix##0 = (pointer) ? (pointer)->array[0] : 0; \ + GGML_UNUSED(prefix##0); +#define GGML_TENSOR_LOCALS_2(type, prefix, pointer, array) \ + GGML_TENSOR_LOCALS_1 (type, prefix, pointer, array) \ + const type prefix##1 = (pointer) ? (pointer)->array[1] : 0; \ + GGML_UNUSED(prefix##1); +#define GGML_TENSOR_LOCALS_3(type, prefix, pointer, array) \ + GGML_TENSOR_LOCALS_2 (type, prefix, pointer, array) \ + const type prefix##2 = (pointer) ? (pointer)->array[2] : 0; \ + GGML_UNUSED(prefix##2); +#define GGML_TENSOR_LOCALS(type, prefix, pointer, array) \ + GGML_TENSOR_LOCALS_3 (type, prefix, pointer, array) \ + const type prefix##3 = (pointer) ? (pointer)->array[3] : 0; \ + GGML_UNUSED(prefix##3); + +#define GGML_TENSOR_UNARY_OP_LOCALS \ + GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \ + GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) \ + GGML_TENSOR_LOCALS(size_t, nb, dst, nb) + +#define GGML_TENSOR_BINARY_OP_LOCALS \ + GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \ + GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) \ + GGML_TENSOR_LOCALS(size_t, nb1, src1, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) \ + GGML_TENSOR_LOCALS(size_t, nb, dst, nb) + +#define GGML_TENSOR_TERNARY_OP_LOCALS \ + GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \ + GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) \ + GGML_TENSOR_LOCALS(size_t, nb1, src1, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne2, src2, ne) \ + GGML_TENSOR_LOCALS(size_t, nb2, src2, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) \ + GGML_TENSOR_LOCALS(size_t, nb, dst, nb) + +#define GGML_TENSOR_BINARY_OP_LOCALS01 \ + GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \ + GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) \ + GGML_TENSOR_LOCALS(size_t, nb1, src1, nb) + +#ifdef __cplusplus +extern "C" { +#endif + + // Function type used in fatal error callbacks + typedef void (*ggml_abort_callback_t)(const char * error_message); + + // Set the abort callback (passing null will restore original abort functionality: printing a message to stdout) + // Returns the old callback for chaining + GGML_API ggml_abort_callback_t ggml_set_abort_callback(ggml_abort_callback_t callback); + + GGML_NORETURN GGML_ATTRIBUTE_FORMAT(3, 4) + GGML_API void ggml_abort(const char * file, int line, const char * fmt, ...); + + enum ggml_status { + GGML_STATUS_ALLOC_FAILED = -2, + GGML_STATUS_FAILED = -1, + GGML_STATUS_SUCCESS = 0, + GGML_STATUS_ABORTED = 1, + }; + + // get ggml_status name string + GGML_API const char * ggml_status_to_string(enum ggml_status status); + + // ieee 754-2008 half-precision float16 + // todo: make this not an integral type + typedef uint16_t ggml_fp16_t; + GGML_API float ggml_fp16_to_fp32(ggml_fp16_t); + GGML_API ggml_fp16_t ggml_fp32_to_fp16(float); + GGML_API void ggml_fp16_to_fp32_row(const ggml_fp16_t *, float *, int64_t); + GGML_API void ggml_fp32_to_fp16_row(const float *, ggml_fp16_t *, int64_t); + + // google brain half-precision bfloat16 + typedef struct { uint16_t bits; } ggml_bf16_t; + GGML_API ggml_bf16_t ggml_fp32_to_bf16(float); + GGML_API float ggml_bf16_to_fp32(ggml_bf16_t); // consider just doing << 16 + GGML_API void ggml_bf16_to_fp32_row(const ggml_bf16_t *, float *, int64_t); + GGML_API void ggml_fp32_to_bf16_row_ref(const float *, ggml_bf16_t *, int64_t); + GGML_API void ggml_fp32_to_bf16_row(const float *, ggml_bf16_t *, int64_t); + + struct ggml_object; + struct ggml_context; + struct ggml_cgraph; + + // NOTE: always add types at the end of the enum to keep backward compatibility + enum ggml_type { + GGML_TYPE_F32 = 0, + GGML_TYPE_F16 = 1, + GGML_TYPE_Q4_0 = 2, + GGML_TYPE_Q4_1 = 3, + // GGML_TYPE_Q4_2 = 4, support has been removed + // GGML_TYPE_Q4_3 = 5, support has been removed + GGML_TYPE_Q5_0 = 6, + GGML_TYPE_Q5_1 = 7, + GGML_TYPE_Q8_0 = 8, + GGML_TYPE_Q8_1 = 9, + GGML_TYPE_Q2_K = 10, + GGML_TYPE_Q3_K = 11, + GGML_TYPE_Q4_K = 12, + GGML_TYPE_Q5_K = 13, + GGML_TYPE_Q6_K = 14, + GGML_TYPE_Q8_K = 15, + GGML_TYPE_IQ2_XXS = 16, + GGML_TYPE_IQ2_XS = 17, + GGML_TYPE_IQ3_XXS = 18, + GGML_TYPE_IQ1_S = 19, + GGML_TYPE_IQ4_NL = 20, + GGML_TYPE_IQ3_S = 21, + GGML_TYPE_IQ2_S = 22, + GGML_TYPE_IQ4_XS = 23, + GGML_TYPE_I8 = 24, + GGML_TYPE_I16 = 25, + GGML_TYPE_I32 = 26, + GGML_TYPE_I64 = 27, + GGML_TYPE_F64 = 28, + GGML_TYPE_IQ1_M = 29, + GGML_TYPE_BF16 = 30, + // GGML_TYPE_Q4_0_4_4 = 31, support has been removed from gguf files + // GGML_TYPE_Q4_0_4_8 = 32, + // GGML_TYPE_Q4_0_8_8 = 33, + GGML_TYPE_TQ1_0 = 34, + GGML_TYPE_TQ2_0 = 35, + // GGML_TYPE_IQ4_NL_4_4 = 36, + // GGML_TYPE_IQ4_NL_4_8 = 37, + // GGML_TYPE_IQ4_NL_8_8 = 38, + GGML_TYPE_MXFP4 = 39, // MXFP4 (1 block) + GGML_TYPE_COUNT = 40, + }; + + // precision + enum ggml_prec { + GGML_PREC_DEFAULT = 0, // stored as ggml_tensor.op_params, 0 by default + GGML_PREC_F32 = 10, + }; + + // model file types + enum ggml_ftype { + GGML_FTYPE_UNKNOWN = -1, + GGML_FTYPE_ALL_F32 = 0, + GGML_FTYPE_MOSTLY_F16 = 1, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_0 = 2, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_1 = 3, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_1_SOME_F16 = 4, // tok_embeddings.weight and output.weight are F16 + GGML_FTYPE_MOSTLY_Q8_0 = 7, // except 1d tensors + GGML_FTYPE_MOSTLY_Q5_0 = 8, // except 1d tensors + GGML_FTYPE_MOSTLY_Q5_1 = 9, // except 1d tensors + GGML_FTYPE_MOSTLY_Q2_K = 10, // except 1d tensors + GGML_FTYPE_MOSTLY_Q3_K = 11, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_K = 12, // except 1d tensors + GGML_FTYPE_MOSTLY_Q5_K = 13, // except 1d tensors + GGML_FTYPE_MOSTLY_Q6_K = 14, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ2_XXS = 15, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ2_XS = 16, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ3_XXS = 17, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ1_S = 18, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ4_NL = 19, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ3_S = 20, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ2_S = 21, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ4_XS = 22, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ1_M = 23, // except 1d tensors + GGML_FTYPE_MOSTLY_BF16 = 24, // except 1d tensors + GGML_FTYPE_MOSTLY_MXFP4 = 25, // except 1d tensors + }; + + // available tensor operations: + enum ggml_op { + GGML_OP_NONE = 0, + + GGML_OP_DUP, + GGML_OP_ADD, + GGML_OP_ADD_ID, + GGML_OP_ADD1, + GGML_OP_ACC, + GGML_OP_SUB, + GGML_OP_MUL, + GGML_OP_DIV, + GGML_OP_SQR, + GGML_OP_SQRT, + GGML_OP_LOG, + GGML_OP_SIN, + GGML_OP_COS, + GGML_OP_SUM, + GGML_OP_SUM_ROWS, + GGML_OP_MEAN, + GGML_OP_ARGMAX, + GGML_OP_COUNT_EQUAL, + GGML_OP_REPEAT, + GGML_OP_REPEAT_BACK, + GGML_OP_CONCAT, + GGML_OP_SILU_BACK, + GGML_OP_NORM, // normalize + GGML_OP_RMS_NORM, + GGML_OP_RMS_NORM_BACK, + GGML_OP_GROUP_NORM, + GGML_OP_L2_NORM, + + GGML_OP_MUL_MAT, + GGML_OP_MUL_MAT_ID, + GGML_OP_OUT_PROD, + + GGML_OP_SCALE, + GGML_OP_SET, + GGML_OP_CPY, + GGML_OP_CONT, + GGML_OP_RESHAPE, + GGML_OP_VIEW, + GGML_OP_PERMUTE, + GGML_OP_TRANSPOSE, + GGML_OP_GET_ROWS, + GGML_OP_GET_ROWS_BACK, + GGML_OP_SET_ROWS, + GGML_OP_DIAG, + GGML_OP_DIAG_MASK_INF, + GGML_OP_DIAG_MASK_ZERO, + GGML_OP_SOFT_MAX, + GGML_OP_SOFT_MAX_BACK, + GGML_OP_ROPE, + GGML_OP_ROPE_BACK, + GGML_OP_CLAMP, + GGML_OP_CONV_TRANSPOSE_1D, + GGML_OP_IM2COL, + GGML_OP_IM2COL_BACK, + GGML_OP_IM2COL_3D, + GGML_OP_CONV_2D, + GGML_OP_CONV_3D, + GGML_OP_CONV_2D_DW, + GGML_OP_CONV_TRANSPOSE_2D, + GGML_OP_POOL_1D, + GGML_OP_POOL_2D, + GGML_OP_POOL_2D_BACK, + GGML_OP_UPSCALE, + GGML_OP_PAD, + GGML_OP_PAD_REFLECT_1D, + GGML_OP_ROLL, + GGML_OP_ARANGE, + GGML_OP_TIMESTEP_EMBEDDING, + GGML_OP_ARGSORT, + GGML_OP_LEAKY_RELU, + + GGML_OP_FLASH_ATTN_EXT, + GGML_OP_FLASH_ATTN_BACK, + GGML_OP_SSM_CONV, + GGML_OP_SSM_SCAN, + GGML_OP_WIN_PART, + GGML_OP_WIN_UNPART, + GGML_OP_GET_REL_POS, + GGML_OP_ADD_REL_POS, + GGML_OP_RWKV_WKV6, + GGML_OP_GATED_LINEAR_ATTN, + GGML_OP_RWKV_WKV7, + + GGML_OP_UNARY, + + GGML_OP_MAP_CUSTOM1, + GGML_OP_MAP_CUSTOM2, + GGML_OP_MAP_CUSTOM3, + + GGML_OP_CUSTOM, + + GGML_OP_CROSS_ENTROPY_LOSS, + GGML_OP_CROSS_ENTROPY_LOSS_BACK, + GGML_OP_OPT_STEP_ADAMW, + GGML_OP_OPT_STEP_SGD, + + GGML_OP_GLU, + + GGML_OP_COUNT, + }; + + enum ggml_unary_op { + GGML_UNARY_OP_ABS, + GGML_UNARY_OP_SGN, + GGML_UNARY_OP_NEG, + GGML_UNARY_OP_STEP, + GGML_UNARY_OP_TANH, + GGML_UNARY_OP_ELU, + GGML_UNARY_OP_RELU, + GGML_UNARY_OP_SIGMOID, + GGML_UNARY_OP_GELU, + GGML_UNARY_OP_GELU_QUICK, + GGML_UNARY_OP_SILU, + GGML_UNARY_OP_HARDSWISH, + GGML_UNARY_OP_HARDSIGMOID, + GGML_UNARY_OP_EXP, + GGML_UNARY_OP_GELU_ERF, + GGML_UNARY_OP_XIELU, + GGML_UNARY_OP_FLOOR, + GGML_UNARY_OP_CEIL, + GGML_UNARY_OP_ROUND, + GGML_UNARY_OP_TRUNC, + + GGML_UNARY_OP_COUNT, + }; + + enum ggml_glu_op { + GGML_GLU_OP_REGLU, + GGML_GLU_OP_GEGLU, + GGML_GLU_OP_SWIGLU, + GGML_GLU_OP_SWIGLU_OAI, + GGML_GLU_OP_GEGLU_ERF, + GGML_GLU_OP_GEGLU_QUICK, + + GGML_GLU_OP_COUNT, + }; + + enum ggml_object_type { + GGML_OBJECT_TYPE_TENSOR, + GGML_OBJECT_TYPE_GRAPH, + GGML_OBJECT_TYPE_WORK_BUFFER + }; + + enum ggml_log_level { + GGML_LOG_LEVEL_NONE = 0, + GGML_LOG_LEVEL_DEBUG = 1, + GGML_LOG_LEVEL_INFO = 2, + GGML_LOG_LEVEL_WARN = 3, + GGML_LOG_LEVEL_ERROR = 4, + GGML_LOG_LEVEL_CONT = 5, // continue previous log + }; + + // this tensor... + enum ggml_tensor_flag { + GGML_TENSOR_FLAG_INPUT = 1, // ...is an input for the GGML compute graph + GGML_TENSOR_FLAG_OUTPUT = 2, // ...is an output for the GGML compute graph + GGML_TENSOR_FLAG_PARAM = 4, // ...contains trainable parameters + GGML_TENSOR_FLAG_LOSS = 8, // ...defines loss for numerical optimization (multiple loss tensors add up) + }; + + struct ggml_init_params { + // memory pool + size_t mem_size; // bytes + void * mem_buffer; // if NULL, memory will be allocated internally + bool no_alloc; // don't allocate memory for the tensor data + }; + + // n-dimensional tensor + struct ggml_tensor { + enum ggml_type type; + + struct ggml_backend_buffer * buffer; + + int64_t ne[GGML_MAX_DIMS]; // number of elements + size_t nb[GGML_MAX_DIMS]; // stride in bytes: + // nb[0] = ggml_type_size(type) + // nb[1] = nb[0] * (ne[0] / ggml_blck_size(type)) + padding + // nb[i] = nb[i-1] * ne[i-1] + + // compute data + enum ggml_op op; + + // op params - allocated as int32_t for alignment + int32_t op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)]; + + int32_t flags; + + struct ggml_tensor * src[GGML_MAX_SRC]; + + // source tensor and offset for views + struct ggml_tensor * view_src; + size_t view_offs; + + void * data; + + char name[GGML_MAX_NAME]; + + void * extra; // extra things e.g. for ggml-cuda.cu + + char padding[8]; + }; + + static const size_t GGML_TENSOR_SIZE = sizeof(struct ggml_tensor); + + // Abort callback + // If not NULL, called before ggml computation + // If it returns true, the computation is aborted + typedef bool (*ggml_abort_callback)(void * data); + + + // + // GUID + // + + // GUID types + typedef uint8_t ggml_guid[16]; + typedef ggml_guid * ggml_guid_t; + + GGML_API bool ggml_guid_matches(ggml_guid_t guid_a, ggml_guid_t guid_b); + + // misc + + GGML_API const char * ggml_version(void); + GGML_API const char * ggml_commit(void); + + GGML_API void ggml_time_init(void); // call this once at the beginning of the program + GGML_API int64_t ggml_time_ms(void); + GGML_API int64_t ggml_time_us(void); + GGML_API int64_t ggml_cycles(void); + GGML_API int64_t ggml_cycles_per_ms(void); + + // accepts a UTF-8 path, even on Windows + GGML_API FILE * ggml_fopen(const char * fname, const char * mode); + + GGML_API void ggml_print_object (const struct ggml_object * obj); + GGML_API void ggml_print_objects(const struct ggml_context * ctx); + + GGML_API int64_t ggml_nelements (const struct ggml_tensor * tensor); + GGML_API int64_t ggml_nrows (const struct ggml_tensor * tensor); + GGML_API size_t ggml_nbytes (const struct ggml_tensor * tensor); + GGML_API size_t ggml_nbytes_pad(const struct ggml_tensor * tensor); // same as ggml_nbytes() but padded to GGML_MEM_ALIGN + + GGML_API int64_t ggml_blck_size(enum ggml_type type); + GGML_API size_t ggml_type_size(enum ggml_type type); // size in bytes for all elements in a block + GGML_API size_t ggml_row_size (enum ggml_type type, int64_t ne); // size in bytes for all elements in a row + + GGML_DEPRECATED( + GGML_API double ggml_type_sizef(enum ggml_type type), // ggml_type_size()/ggml_blck_size() as float + "use ggml_row_size() instead"); + + GGML_API const char * ggml_type_name(enum ggml_type type); + GGML_API const char * ggml_op_name (enum ggml_op op); + GGML_API const char * ggml_op_symbol(enum ggml_op op); + + GGML_API const char * ggml_unary_op_name(enum ggml_unary_op op); + GGML_API const char * ggml_glu_op_name(enum ggml_glu_op op); + GGML_API const char * ggml_op_desc(const struct ggml_tensor * t); // unary or op name + + GGML_API size_t ggml_element_size(const struct ggml_tensor * tensor); + + GGML_API bool ggml_is_quantized(enum ggml_type type); + + // TODO: temporary until model loading of ggml examples is refactored + GGML_API enum ggml_type ggml_ftype_to_ggml_type(enum ggml_ftype ftype); + + GGML_API bool ggml_is_transposed(const struct ggml_tensor * tensor); + GGML_API bool ggml_is_permuted (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_empty (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_scalar (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_vector (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_matrix (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_3d (const struct ggml_tensor * tensor); + GGML_API int ggml_n_dims (const struct ggml_tensor * tensor); // returns 1 for scalars + + // returns whether the tensor elements can be iterated over with a flattened index (no gaps, no permutation) + GGML_API bool ggml_is_contiguous (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_contiguous_0(const struct ggml_tensor * tensor); // same as ggml_is_contiguous() + GGML_API bool ggml_is_contiguous_1(const struct ggml_tensor * tensor); // contiguous for dims >= 1 + GGML_API bool ggml_is_contiguous_2(const struct ggml_tensor * tensor); // contiguous for dims >= 2 + + // returns whether the tensor elements are allocated as one contiguous block of memory (no gaps, but permutation ok) + GGML_API bool ggml_is_contiguously_allocated(const struct ggml_tensor * tensor); + + // true for tensor that is stored in memory as CxWxHxN and has been permuted to WxHxCxN + GGML_API bool ggml_is_contiguous_channels(const struct ggml_tensor * tensor); + + // true if the elements in dimension 0 are contiguous, or there is just 1 block of elements + GGML_API bool ggml_is_contiguous_rows(const struct ggml_tensor * tensor); + + GGML_API bool ggml_are_same_shape (const struct ggml_tensor * t0, const struct ggml_tensor * t1); + GGML_API bool ggml_are_same_stride(const struct ggml_tensor * t0, const struct ggml_tensor * t1); + + GGML_API bool ggml_can_repeat(const struct ggml_tensor * t0, const struct ggml_tensor * t1); + + // use this to compute the memory overhead of a tensor + GGML_API size_t ggml_tensor_overhead(void); + + GGML_API bool ggml_validate_row_data(enum ggml_type type, const void * data, size_t nbytes); + + // main + + GGML_API struct ggml_context * ggml_init (struct ggml_init_params params); + GGML_API void ggml_reset(struct ggml_context * ctx); + GGML_API void ggml_free (struct ggml_context * ctx); + + GGML_API size_t ggml_used_mem(const struct ggml_context * ctx); + + GGML_API bool ggml_get_no_alloc(struct ggml_context * ctx); + GGML_API void ggml_set_no_alloc(struct ggml_context * ctx, bool no_alloc); + + GGML_API void * ggml_get_mem_buffer (const struct ggml_context * ctx); + GGML_API size_t ggml_get_mem_size (const struct ggml_context * ctx); + GGML_API size_t ggml_get_max_tensor_size(const struct ggml_context * ctx); + + GGML_API struct ggml_tensor * ggml_new_tensor( + struct ggml_context * ctx, + enum ggml_type type, + int n_dims, + const int64_t *ne); + + GGML_API struct ggml_tensor * ggml_new_tensor_1d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0); + + GGML_API struct ggml_tensor * ggml_new_tensor_2d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1); + + GGML_API struct ggml_tensor * ggml_new_tensor_3d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1, + int64_t ne2); + + GGML_API struct ggml_tensor * ggml_new_tensor_4d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3); + + GGML_API void * ggml_new_buffer(struct ggml_context * ctx, size_t nbytes); + + GGML_API struct ggml_tensor * ggml_dup_tensor (struct ggml_context * ctx, const struct ggml_tensor * src); + GGML_API struct ggml_tensor * ggml_view_tensor(struct ggml_context * ctx, struct ggml_tensor * src); + + // Context tensor enumeration and lookup + GGML_API struct ggml_tensor * ggml_get_first_tensor(const struct ggml_context * ctx); + GGML_API struct ggml_tensor * ggml_get_next_tensor (const struct ggml_context * ctx, struct ggml_tensor * tensor); + GGML_API struct ggml_tensor * ggml_get_tensor(struct ggml_context * ctx, const char * name); + + // Converts a flat index into coordinates + GGML_API void ggml_unravel_index(const struct ggml_tensor * tensor, int64_t i, int64_t * i0, int64_t * i1, int64_t * i2, int64_t * i3); + + GGML_API enum ggml_unary_op ggml_get_unary_op(const struct ggml_tensor * tensor); + GGML_API enum ggml_glu_op ggml_get_glu_op(const struct ggml_tensor * tensor); + + GGML_API void * ggml_get_data (const struct ggml_tensor * tensor); + GGML_API float * ggml_get_data_f32(const struct ggml_tensor * tensor); + + GGML_API const char * ggml_get_name (const struct ggml_tensor * tensor); + GGML_API struct ggml_tensor * ggml_set_name ( struct ggml_tensor * tensor, const char * name); + GGML_ATTRIBUTE_FORMAT(2, 3) + GGML_API struct ggml_tensor * ggml_format_name( struct ggml_tensor * tensor, const char * fmt, ...); + + // Tensor flags + GGML_API void ggml_set_input(struct ggml_tensor * tensor); + GGML_API void ggml_set_output(struct ggml_tensor * tensor); + GGML_API void ggml_set_param(struct ggml_tensor * tensor); + GGML_API void ggml_set_loss(struct ggml_tensor * tensor); + + // + // operations on tensors with backpropagation + // + + GGML_API struct ggml_tensor * ggml_dup( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_dup_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_add( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_add_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_add_cast( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + enum ggml_type type); + + // dst[i0, i1, i2] = a[i0, i1, i2] + b[i0, ids[i1, i2]] + GGML_API struct ggml_tensor * ggml_add_id( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * ids); + + GGML_API struct ggml_tensor * ggml_add1( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_add1_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // dst = a + // view(dst, nb1, nb2, nb3, offset) += b + // return dst + GGML_API struct ggml_tensor * ggml_acc( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); + + GGML_API struct ggml_tensor * ggml_acc_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); + + GGML_API struct ggml_tensor * ggml_sub( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_sub_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_mul( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_mul_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_div( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_div_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_sqr( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sqr_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sqrt( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sqrt_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_log( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_log_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sin( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sin_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_cos( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_cos_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // return scalar + GGML_API struct ggml_tensor * ggml_sum( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // sums along rows, with input shape [a,b,c,d] return shape [1,b,c,d] + GGML_API struct ggml_tensor * ggml_sum_rows( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // mean along rows + GGML_API struct ggml_tensor * ggml_mean( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // argmax along rows + GGML_API struct ggml_tensor * ggml_argmax( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // count number of equal elements in a and b + GGML_API struct ggml_tensor * ggml_count_equal( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // if a is the same shape as b, and a is not parameter, return a + // otherwise, return a new tensor: repeat(a) to fit in b + GGML_API struct ggml_tensor * ggml_repeat( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // repeat a to the specified shape + GGML_API struct ggml_tensor * ggml_repeat_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3); + + // sums repetitions in a into shape of b + GGML_API struct ggml_tensor * ggml_repeat_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); // sum up values that are adjacent in dims > 0 instead of repeated with same stride + + // concat a and b along dim + // used in stable-diffusion + GGML_API struct ggml_tensor * ggml_concat( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int dim); + + GGML_API struct ggml_tensor * ggml_abs( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_abs_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sgn( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sgn_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_neg( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_neg_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_step( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_step_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_tanh( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_tanh_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_elu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_elu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_relu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_leaky_relu( + struct ggml_context * ctx, + struct ggml_tensor * a, float negative_slope, bool inplace); + + GGML_API struct ggml_tensor * ggml_relu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sigmoid( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sigmoid_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // GELU using erf (error function) when possible + // some backends may fallback to approximation based on Abramowitz and Stegun formula + GGML_API struct ggml_tensor * ggml_gelu_erf( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu_erf_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu_quick( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu_quick_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_silu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_silu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // a - x + // b - dy + GGML_API struct ggml_tensor * ggml_silu_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // hardswish(x) = x * relu6(x + 3) / 6 + GGML_API struct ggml_tensor * ggml_hardswish( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // hardsigmoid(x) = relu6(x + 3) / 6 + GGML_API struct ggml_tensor * ggml_hardsigmoid( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_exp( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_exp_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_floor( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_floor_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_ceil( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_ceil_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_round( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_round_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + /** + * Truncates the fractional part of each element in the tensor (towards zero). + * For example: trunc(3.7) = 3.0, trunc(-2.9) = -2.0 + * Similar to std::trunc in C/C++. + */ + + GGML_API struct ggml_tensor * ggml_trunc( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_trunc_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + + + // xIELU activation function + // x = x * (c_a(alpha_n) + c_b(alpha_p, beta) * sigmoid(beta * x)) + eps * (x > 0) + // where c_a = softplus and c_b(a, b) = softplus(a) + b are constraining functions + // that constrain the positive and negative source alpha values respectively + GGML_API struct ggml_tensor * ggml_xielu( + struct ggml_context * ctx, + struct ggml_tensor * a, + float alpha_n, + float alpha_p, + float beta, + float eps); + + // gated linear unit ops + // A: n columns, r rows, + // result is n / 2 columns, r rows, + // expects gate in second half of row, unless swapped is true + GGML_API struct ggml_tensor * ggml_glu( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_glu_op op, + bool swapped); + + GGML_API struct ggml_tensor * ggml_reglu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_reglu_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_swiglu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_swiglu_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_erf( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_erf_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_quick( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_quick_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // A: n columns, r rows, + // B: n columns, r rows, + GGML_API struct ggml_tensor * ggml_glu_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + enum ggml_glu_op op); + + GGML_API struct ggml_tensor * ggml_reglu_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_geglu_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_swiglu_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_geglu_erf_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_geglu_quick_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_swiglu_oai( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + float alpha, + float limit); + + // normalize along rows + GGML_API struct ggml_tensor * ggml_norm( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + GGML_API struct ggml_tensor * ggml_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + GGML_API struct ggml_tensor * ggml_rms_norm( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + GGML_API struct ggml_tensor * ggml_rms_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + // group normalize along ne0*ne1*n_groups + // used in stable-diffusion + GGML_API struct ggml_tensor * ggml_group_norm( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_groups, + float eps); + + GGML_API struct ggml_tensor * ggml_group_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_groups, + float eps); + + // l2 normalize along rows + // used in rwkv v7 + GGML_API struct ggml_tensor * ggml_l2_norm( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + GGML_API struct ggml_tensor * ggml_l2_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + // a - x + // b - dy + GGML_API struct ggml_tensor * ggml_rms_norm_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + float eps); + + // A: k columns, n rows => [ne03, ne02, n, k] + // B: k columns, m rows (i.e. we transpose it internally) => [ne03 * x, ne02 * y, m, k] + // result is n columns, m rows => [ne03 * x, ne02 * y, m, n] + GGML_API struct ggml_tensor * ggml_mul_mat( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // change the precision of a matrix multiplication + // set to GGML_PREC_F32 for higher precision (useful for phi-2) + GGML_API void ggml_mul_mat_set_prec( + struct ggml_tensor * a, + enum ggml_prec prec); + + // indirect matrix multiplication + GGML_API struct ggml_tensor * ggml_mul_mat_id( + struct ggml_context * ctx, + struct ggml_tensor * as, + struct ggml_tensor * b, + struct ggml_tensor * ids); + + // A: m columns, n rows, + // B: p columns, n rows, + // result is m columns, p rows + GGML_API struct ggml_tensor * ggml_out_prod( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // + // operations on tensors without backpropagation + // + + GGML_API struct ggml_tensor * ggml_scale( + struct ggml_context * ctx, + struct ggml_tensor * a, + float s); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_scale_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float s); + + // x = s * a + b + GGML_API struct ggml_tensor * ggml_scale_bias( + struct ggml_context * ctx, + struct ggml_tensor * a, + float s, + float b); + + GGML_API struct ggml_tensor * ggml_scale_bias_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float s, + float b); + + // b -> view(a,offset,nb1,nb2,3), return modified a + GGML_API struct ggml_tensor * ggml_set( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); // in bytes + + // b -> view(a,offset,nb1,nb2,3), return view(a) + GGML_API struct ggml_tensor * ggml_set_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); // in bytes + + GGML_API struct ggml_tensor * ggml_set_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t offset); // in bytes + + GGML_API struct ggml_tensor * ggml_set_1d_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t offset); // in bytes + + // b -> view(a,offset,nb1,nb2,3), return modified a + GGML_API struct ggml_tensor * ggml_set_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t offset); // in bytes + + // b -> view(a,offset,nb1,nb2,3), return view(a) + GGML_API struct ggml_tensor * ggml_set_2d_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t offset); // in bytes + + // a -> b, return view(b) + GGML_API struct ggml_tensor * ggml_cpy( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // note: casting from f32 to i32 will discard the fractional part + GGML_API struct ggml_tensor * ggml_cast( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_type type); + + // make contiguous + GGML_API struct ggml_tensor * ggml_cont( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // make contiguous, with new shape + GGML_API struct ggml_tensor * ggml_cont_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0); + + GGML_API struct ggml_tensor * ggml_cont_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1); + + GGML_API struct ggml_tensor * ggml_cont_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2); + + GGML_API struct ggml_tensor * ggml_cont_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3); + + // return view(a), b specifies the new shape + // TODO: when we start computing gradient, make a copy instead of view + GGML_API struct ggml_tensor * ggml_reshape( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // return view(a) + // TODO: when we start computing gradient, make a copy instead of view + GGML_API struct ggml_tensor * ggml_reshape_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0); + + GGML_API struct ggml_tensor * ggml_reshape_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1); + + // return view(a) + // TODO: when we start computing gradient, make a copy instead of view + GGML_API struct ggml_tensor * ggml_reshape_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2); + + GGML_API struct ggml_tensor * ggml_reshape_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3); + + // offset in bytes + GGML_API struct ggml_tensor * ggml_view_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + size_t offset); + + GGML_API struct ggml_tensor * ggml_view_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + size_t nb1, // row stride in bytes + size_t offset); + + GGML_API struct ggml_tensor * ggml_view_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + size_t nb1, // row stride in bytes + size_t nb2, // slice stride in bytes + size_t offset); + + GGML_API struct ggml_tensor * ggml_view_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3, + size_t nb1, // row stride in bytes + size_t nb2, // slice stride in bytes + size_t nb3, + size_t offset); + + GGML_API struct ggml_tensor * ggml_permute( + struct ggml_context * ctx, + struct ggml_tensor * a, + int axis0, + int axis1, + int axis2, + int axis3); + + // alias for ggml_permute(ctx, a, 1, 0, 2, 3) + GGML_API struct ggml_tensor * ggml_transpose( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // supports 4D a: + // a [n_embd, ne1, ne2, ne3] + // b I32 [n_rows, ne2, ne3, 1] + // + // return [n_embd, n_rows, ne2, ne3] + GGML_API struct ggml_tensor * ggml_get_rows( + struct ggml_context * ctx, + struct ggml_tensor * a, // data + struct ggml_tensor * b); // row indices + + GGML_API struct ggml_tensor * ggml_get_rows_back( + struct ggml_context * ctx, + struct ggml_tensor * a, // gradients of ggml_get_rows result + struct ggml_tensor * b, // row indices + struct ggml_tensor * c); // data for ggml_get_rows, only used for its shape + + // a TD [n_embd, ne1, ne2, ne3] + // b TS [n_embd, n_rows, ne02, ne03] | ne02 == ne2, ne03 == ne3 + // c I64 [n_rows, ne11, ne12, 1] | c[i] in [0, ne1) + // + // undefined behavior if destination rows overlap + // + // broadcast: + // ne2 % ne11 == 0 + // ne3 % ne12 == 0 + // + // return view(a) + GGML_API struct ggml_tensor * ggml_set_rows( + struct ggml_context * ctx, + struct ggml_tensor * a, // destination + struct ggml_tensor * b, // source + struct ggml_tensor * c); // row indices + + GGML_API struct ggml_tensor * ggml_diag( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // set elements above the diagonal to -INF + GGML_API struct ggml_tensor * ggml_diag_mask_inf( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_diag_mask_inf_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + // set elements above the diagonal to 0 + GGML_API struct ggml_tensor * ggml_diag_mask_zero( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_diag_mask_zero_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + GGML_API struct ggml_tensor * ggml_soft_max( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_soft_max_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // a [ne0, ne01, ne02, ne03] + // mask [ne0, ne11, ne12, ne13] | ne11 >= ne01, F16 or F32, optional + // + // broadcast: + // ne02 % ne12 == 0 + // ne03 % ne13 == 0 + // + // fused soft_max(a*scale + mask*(ALiBi slope)) + // max_bias = 0.0f for no ALiBi + GGML_API struct ggml_tensor * ggml_soft_max_ext( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * mask, + float scale, + float max_bias); + + GGML_API struct ggml_tensor * ggml_soft_max_ext_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * mask, + float scale, + float max_bias); + + GGML_API void ggml_soft_max_add_sinks( + struct ggml_tensor * a, + struct ggml_tensor * sinks); + + GGML_API struct ggml_tensor * ggml_soft_max_ext_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + float scale, + float max_bias); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_soft_max_ext_back_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + float scale, + float max_bias); + + // rotary position embedding + // if (mode & 1) - skip n_past elements (NOT SUPPORTED) + // if (mode & GGML_ROPE_TYPE_NEOX) - GPT-NeoX style + // + // b is an int32 vector with size a->ne[2], it contains the positions + GGML_API struct ggml_tensor * ggml_rope( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int n_dims, + int mode); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_rope_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int n_dims, + int mode); + + // custom RoPE + // c is freq factors (e.g. phi3-128k), (optional) + GGML_API struct ggml_tensor * ggml_rope_ext( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + GGML_API struct ggml_tensor * ggml_rope_multi( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int sections[GGML_MROPE_SECTIONS], + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_rope_ext_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + GGML_API struct ggml_tensor * ggml_rope_multi_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int sections[GGML_MROPE_SECTIONS], + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_rope_custom( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow), + "use ggml_rope_ext instead"); + + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_rope_custom_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow), + "use ggml_rope_ext_inplace instead"); + + // compute correction dims for YaRN RoPE scaling + GGML_API void ggml_rope_yarn_corr_dims( + int n_dims, int n_ctx_orig, float freq_base, float beta_fast, float beta_slow, float dims[2]); + + // rotary position embedding backward, i.e compute dx from dy + // a - dy + GGML_API struct ggml_tensor * ggml_rope_ext_back( + struct ggml_context * ctx, + struct ggml_tensor * a, // gradients of ggml_rope result + struct ggml_tensor * b, // positions + struct ggml_tensor * c, // freq factors + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + GGML_API struct ggml_tensor * ggml_rope_multi_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int sections[4], + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + + // clamp + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_clamp( + struct ggml_context * ctx, + struct ggml_tensor * a, + float min, + float max); + + // im2col + // converts data into a format that effectively results in a convolution when combined with matrix multiplication + GGML_API struct ggml_tensor * ggml_im2col( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1, // dilation dimension 1 + bool is_2D, + enum ggml_type dst_type); + + GGML_API struct ggml_tensor * ggml_im2col_back( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // gradient of im2col output + int64_t * ne, // shape of im2col input + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1, // dilation dimension 1 + bool is_2D); + + GGML_API struct ggml_tensor * ggml_conv_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride + int p0, // padding + int d0); // dilation + + // conv_1d with padding = half + // alias for ggml_conv_1d(a, b, s, a->ne[0]/2, d) + GGML_API struct ggml_tensor* ggml_conv_1d_ph( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s, // stride + int d); // dilation + + // depthwise + // TODO: this is very likely wrong for some cases! - needs more testing + GGML_API struct ggml_tensor * ggml_conv_1d_dw( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride + int p0, // padding + int d0); // dilation + + GGML_API struct ggml_tensor * ggml_conv_1d_dw_ph( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride + int d0); // dilation + + GGML_API struct ggml_tensor * ggml_conv_transpose_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride + int p0, // padding + int d0); // dilation + + GGML_API struct ggml_tensor * ggml_conv_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1); // dilation dimension 1 + + GGML_API struct ggml_tensor * ggml_im2col_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int64_t IC, + int s0, // stride width + int s1, // stride height + int s2, // stride depth + int p0, // padding width + int p1, // padding height + int p2, // padding depth + int d0, // dilation width + int d1, // dilation height + int d2, // dilation depth + enum ggml_type dst_type); + + // a: [OC*IC, KD, KH, KW] + // b: [N*IC, ID, IH, IW] + // result: [N*OC, OD, OH, OW] + GGML_API struct ggml_tensor * ggml_conv_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int64_t IC, + int s0, // stride width + int s1, // stride height + int s2, // stride depth + int p0, // padding width + int p1, // padding height + int p2, // padding depth + int d0, // dilation width + int d1, // dilation height + int d2 // dilation depth + ); + + // kernel size is a->ne[0] x a->ne[1] + // stride is equal to kernel size + // padding is zero + // example: + // a: 16 16 3 768 + // b: 1024 1024 3 1 + // res: 64 64 768 1 + // used in sam + GGML_API struct ggml_tensor * ggml_conv_2d_sk_p0( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // kernel size is a->ne[0] x a->ne[1] + // stride is 1 + // padding is half + // example: + // a: 3 3 256 256 + // b: 64 64 256 1 + // res: 64 64 256 1 + // used in sam + GGML_API struct ggml_tensor * ggml_conv_2d_s1_ph( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // depthwise (via im2col and mul_mat) + GGML_API struct ggml_tensor * ggml_conv_2d_dw( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1); // dilation dimension 1 + + // Depthwise 2D convolution + // may be faster than ggml_conv_2d_dw, but not available in all backends + // a: KW KH 1 C convolution kernel + // b: W H C N input data + // res: W_out H_out C N + GGML_API struct ggml_tensor * ggml_conv_2d_dw_direct( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int stride0, + int stride1, + int pad0, + int pad1, + int dilation0, + int dilation1); + + GGML_API struct ggml_tensor * ggml_conv_transpose_2d_p0( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int stride); + + GGML_API struct ggml_tensor * ggml_conv_2d_direct( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel [KW, KH, IC, OC] + struct ggml_tensor * b, // input data [W, H, C, N] + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1); // dilation dimension 1 + + GGML_API struct ggml_tensor * ggml_conv_3d_direct( + struct ggml_context * ctx, + struct ggml_tensor * a, // kernel [KW, KH, KD, IC * OC] + struct ggml_tensor * b, // input [W, H, D, C * N] + int s0, // stride + int s1, + int s2, + int p0, // padding + int p1, + int p2, + int d0, // dilation + int d1, + int d2, + int n_channels, + int n_batch, + int n_channels_out); + + enum ggml_op_pool { + GGML_OP_POOL_MAX, + GGML_OP_POOL_AVG, + GGML_OP_POOL_COUNT, + }; + + GGML_API struct ggml_tensor * ggml_pool_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_op_pool op, + int k0, // kernel size + int s0, // stride + int p0); // padding + + // the result will have 2*p0 padding for the first dimension + // and 2*p1 padding for the second dimension + GGML_API struct ggml_tensor * ggml_pool_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_op_pool op, + int k0, + int k1, + int s0, + int s1, + float p0, + float p1); + + GGML_API struct ggml_tensor * ggml_pool_2d_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * af, // "a"/input used in forward pass + enum ggml_op_pool op, + int k0, + int k1, + int s0, + int s1, + float p0, + float p1); + + enum ggml_scale_mode { + GGML_SCALE_MODE_NEAREST = 0, + GGML_SCALE_MODE_BILINEAR = 1, + GGML_SCALE_MODE_BICUBIC = 2, + + GGML_SCALE_MODE_COUNT + }; + + enum ggml_scale_flag { + GGML_SCALE_FLAG_ALIGN_CORNERS = (1 << 8) + }; + + // interpolate + // multiplies ne0 and ne1 by scale factor + GGML_API struct ggml_tensor * ggml_upscale( + struct ggml_context * ctx, + struct ggml_tensor * a, + int scale_factor, + enum ggml_scale_mode mode); + + // interpolate + // interpolate scale to specified dimensions + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_upscale_ext( + struct ggml_context * ctx, + struct ggml_tensor * a, + int ne0, + int ne1, + int ne2, + int ne3, + enum ggml_scale_mode mode), + "use ggml_interpolate instead"); + + // Up- or downsamples the input to the specified size. + // 2D scale modes (eg. bilinear) are applied to the first two dimensions. + GGML_API struct ggml_tensor * ggml_interpolate( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3, + uint32_t mode); // ggml_scale_mode [ | ggml_scale_flag...] + + // pad each dimension with zeros: [x, ..., x] -> [x, ..., x, 0, ..., 0] + GGML_API struct ggml_tensor * ggml_pad( + struct ggml_context * ctx, + struct ggml_tensor * a, + int p0, + int p1, + int p2, + int p3); + + GGML_API struct ggml_tensor * ggml_pad_ext( + struct ggml_context * ctx, + struct ggml_tensor * a, + int lp0, + int rp0, + int lp1, + int rp1, + int lp2, + int rp2, + int lp3, + int rp3 + ); + + // pad each dimension with reflection: [a, b, c, d] -> [b, a, b, c, d, c] + GGML_API struct ggml_tensor * ggml_pad_reflect_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int p0, + int p1); + + // Move tensor elements by an offset given for each dimension. Elements that + // are shifted beyond the last position are wrapped around to the beginning. + GGML_API struct ggml_tensor * ggml_roll( + struct ggml_context * ctx, + struct ggml_tensor * a, + int shift0, + int shift1, + int shift2, + int shift3); + + + // Ref: https://github.com/CompVis/stable-diffusion/blob/main/ldm/modules/diffusionmodules/util.py#L151 + // timesteps: [N,] + // return: [N, dim] + GGML_API struct ggml_tensor * ggml_timestep_embedding( + struct ggml_context * ctx, + struct ggml_tensor * timesteps, + int dim, + int max_period); + + // sort rows + enum ggml_sort_order { + GGML_SORT_ORDER_ASC, + GGML_SORT_ORDER_DESC, + }; + + GGML_API struct ggml_tensor * ggml_argsort( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_sort_order order); + + GGML_API struct ggml_tensor * ggml_arange( + struct ggml_context * ctx, + float start, + float stop, + float step); + + // top k elements per row + GGML_API struct ggml_tensor * ggml_top_k( + struct ggml_context * ctx, + struct ggml_tensor * a, + int k); + +#define GGML_KQ_MASK_PAD 64 + + // q: [n_embd_k, n_batch, n_head, ne3 ] + // k: [n_embd_k, n_kv, n_head_kv, ne3 ] + // v: [n_embd_v, n_kv, n_head_kv, ne3 ] !! not transposed !! + // mask: [n_kv, n_batch_pad, ne32, ne33] !! n_batch_pad = GGML_PAD(n_batch, GGML_KQ_MASK_PAD) !! + // res: [n_embd_v, n_head, n_batch, ne3 ] !! permuted !! + // + // broadcast: + // n_head % n_head_kv == 0 + // n_head % ne32 == 0 + // ne3 % ne33 == 0 + // + GGML_API struct ggml_tensor * ggml_flash_attn_ext( + struct ggml_context * ctx, + struct ggml_tensor * q, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * mask, + float scale, + float max_bias, + float logit_softcap); + + GGML_API void ggml_flash_attn_ext_set_prec( + struct ggml_tensor * a, + enum ggml_prec prec); + + GGML_API enum ggml_prec ggml_flash_attn_ext_get_prec( + const struct ggml_tensor * a); + + GGML_API void ggml_flash_attn_ext_add_sinks( + struct ggml_tensor * a, + struct ggml_tensor * sinks); + + // TODO: needs to be adapted to ggml_flash_attn_ext + GGML_API struct ggml_tensor * ggml_flash_attn_back( + struct ggml_context * ctx, + struct ggml_tensor * q, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * d, + bool masked); + + GGML_API struct ggml_tensor * ggml_ssm_conv( + struct ggml_context * ctx, + struct ggml_tensor * sx, + struct ggml_tensor * c); + + GGML_API struct ggml_tensor * ggml_ssm_scan( + struct ggml_context * ctx, + struct ggml_tensor * s, + struct ggml_tensor * x, + struct ggml_tensor * dt, + struct ggml_tensor * A, + struct ggml_tensor * B, + struct ggml_tensor * C, + struct ggml_tensor * ids); + + // partition into non-overlapping windows with padding if needed + // example: + // a: 768 64 64 1 + // w: 14 + // res: 768 14 14 25 + // used in sam + GGML_API struct ggml_tensor * ggml_win_part( + struct ggml_context * ctx, + struct ggml_tensor * a, + int w); + + // reverse of ggml_win_part + // used in sam + GGML_API struct ggml_tensor * ggml_win_unpart( + struct ggml_context * ctx, + struct ggml_tensor * a, + int w0, + int h0, + int w); + + GGML_API struct ggml_tensor * ggml_unary( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_unary_op op); + + GGML_API struct ggml_tensor * ggml_unary_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_unary_op op); + + // used in sam + GGML_API struct ggml_tensor * ggml_get_rel_pos( + struct ggml_context * ctx, + struct ggml_tensor * a, + int qh, + int kh); + + // used in sam + GGML_API struct ggml_tensor * ggml_add_rel_pos( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * pw, + struct ggml_tensor * ph); + + GGML_API struct ggml_tensor * ggml_add_rel_pos_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * pw, + struct ggml_tensor * ph); + + GGML_API struct ggml_tensor * ggml_rwkv_wkv6( + struct ggml_context * ctx, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * r, + struct ggml_tensor * tf, + struct ggml_tensor * td, + struct ggml_tensor * state); + + GGML_API struct ggml_tensor * ggml_gated_linear_attn( + struct ggml_context * ctx, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * q, + struct ggml_tensor * g, + struct ggml_tensor * state, + float scale); + + GGML_API struct ggml_tensor * ggml_rwkv_wkv7( + struct ggml_context * ctx, + struct ggml_tensor * r, + struct ggml_tensor * w, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * state); + + // custom operators + + typedef void (*ggml_custom1_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, int ith, int nth, void * userdata); + typedef void (*ggml_custom2_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, const struct ggml_tensor * b, int ith, int nth, void * userdata); + typedef void (*ggml_custom3_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, const struct ggml_tensor * b, const struct ggml_tensor * c, int ith, int nth, void * userdata); + +#define GGML_N_TASKS_MAX (-1) + // n_tasks == GGML_N_TASKS_MAX means to use max number of tasks + + GGML_API struct ggml_tensor * ggml_map_custom1( + struct ggml_context * ctx, + struct ggml_tensor * a, + ggml_custom1_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom1_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + ggml_custom1_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom2( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + ggml_custom2_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom2_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + ggml_custom2_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom3( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + ggml_custom3_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom3_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + ggml_custom3_op_t fun, + int n_tasks, + void * userdata); + + typedef void (*ggml_custom_op_t)(struct ggml_tensor * dst , int ith, int nth, void * userdata); + + GGML_API struct ggml_tensor * ggml_custom_4d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3, + struct ggml_tensor ** args, + int n_args, + ggml_custom_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_custom_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor ** args, + int n_args, + ggml_custom_op_t fun, + int n_tasks, + void * userdata); + + // loss function + + GGML_API struct ggml_tensor * ggml_cross_entropy_loss( + struct ggml_context * ctx, + struct ggml_tensor * a, // logits + struct ggml_tensor * b); // labels + + GGML_API struct ggml_tensor * ggml_cross_entropy_loss_back( + struct ggml_context * ctx, + struct ggml_tensor * a, // logits + struct ggml_tensor * b, // labels + struct ggml_tensor * c); // gradients of cross_entropy_loss result + + // AdamW optimizer step + // Paper: https://arxiv.org/pdf/1711.05101v3.pdf + // PyTorch: https://pytorch.org/docs/stable/generated/torch.optim.AdamW.html + GGML_API struct ggml_tensor * ggml_opt_step_adamw( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * grad, + struct ggml_tensor * m, + struct ggml_tensor * v, + struct ggml_tensor * adamw_params); // parameters such as the learning rate + + // stochastic gradient descent step (with weight decay) + GGML_API struct ggml_tensor * ggml_opt_step_sgd( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * grad, + struct ggml_tensor * sgd_params); // alpha, weight decay + + // + // automatic differentiation + // + + GGML_API void ggml_build_forward_expand(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor); + GGML_API void ggml_build_backward_expand( + struct ggml_context * ctx, // context for gradient computation + struct ggml_cgraph * cgraph, + struct ggml_tensor ** grad_accs); + + // graph allocation in a context + GGML_API struct ggml_cgraph * ggml_new_graph (struct ggml_context * ctx); // size = GGML_DEFAULT_GRAPH_SIZE, grads = false + GGML_API struct ggml_cgraph * ggml_new_graph_custom(struct ggml_context * ctx, size_t size, bool grads); + GGML_API struct ggml_cgraph * ggml_graph_dup (struct ggml_context * ctx, struct ggml_cgraph * cgraph, bool force_grads); + GGML_API void ggml_graph_cpy (struct ggml_cgraph * src, struct ggml_cgraph * dst); + GGML_API void ggml_graph_reset (struct ggml_cgraph * cgraph); // set regular grads + optimizer momenta to 0, set loss grad to 1 + GGML_API void ggml_graph_clear (struct ggml_cgraph * cgraph); + + GGML_API int ggml_graph_size (struct ggml_cgraph * cgraph); + GGML_API struct ggml_tensor * ggml_graph_node (struct ggml_cgraph * cgraph, int i); // if i < 0, returns nodes[n_nodes + i] + GGML_API struct ggml_tensor ** ggml_graph_nodes (struct ggml_cgraph * cgraph); + GGML_API int ggml_graph_n_nodes(struct ggml_cgraph * cgraph); + + GGML_API void ggml_graph_add_node(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor); + + GGML_API size_t ggml_graph_overhead(void); + GGML_API size_t ggml_graph_overhead_custom(size_t size, bool grads); + + GGML_API struct ggml_tensor * ggml_graph_get_tensor (const struct ggml_cgraph * cgraph, const char * name); + GGML_API struct ggml_tensor * ggml_graph_get_grad (const struct ggml_cgraph * cgraph, const struct ggml_tensor * node); + GGML_API struct ggml_tensor * ggml_graph_get_grad_acc(const struct ggml_cgraph * cgraph, const struct ggml_tensor * node); + + // print info and performance information for the graph + GGML_API void ggml_graph_print(const struct ggml_cgraph * cgraph); + + // dump the graph into a file using the dot format + GGML_API void ggml_graph_dump_dot(const struct ggml_cgraph * gb, const struct ggml_cgraph * gf, const char * filename); + + // TODO these functions were sandwiched in the old optimization interface, is there a better place for them? + typedef void (*ggml_log_callback)(enum ggml_log_level level, const char * text, void * user_data); + + // Set callback for all future logging events. + // If this is not called, or NULL is supplied, everything is output on stderr. + GGML_API void ggml_log_set(ggml_log_callback log_callback, void * user_data); + + GGML_API struct ggml_tensor * ggml_set_zero(struct ggml_tensor * tensor); + + // + // quantization + // + + // - ggml_quantize_init can be called multiple times with the same type + // it will only initialize the quantization tables for the first call or after ggml_quantize_free + // automatically called by ggml_quantize_chunk for convenience + // + // - ggml_quantize_free will free any memory allocated by ggml_quantize_init + // call this at the end of the program to avoid memory leaks + // + // note: these are thread-safe + // + GGML_API void ggml_quantize_init(enum ggml_type type); + GGML_API void ggml_quantize_free(void); + + // some quantization type cannot be used without an importance matrix + GGML_API bool ggml_quantize_requires_imatrix(enum ggml_type type); + + // calls ggml_quantize_init internally (i.e. can allocate memory) + GGML_API size_t ggml_quantize_chunk( + enum ggml_type type, + const float * src, + void * dst, + int64_t start, + int64_t nrows, + int64_t n_per_row, + const float * imatrix); + +#ifdef __cplusplus + // restrict not standard in C++ +# if defined(__GNUC__) +# define GGML_RESTRICT __restrict__ +# elif defined(__clang__) +# define GGML_RESTRICT __restrict +# elif defined(_MSC_VER) +# define GGML_RESTRICT __restrict +# else +# define GGML_RESTRICT +# endif +#else +# if defined (_MSC_VER) && (__STDC_VERSION__ < 201112L) +# define GGML_RESTRICT __restrict +# else +# define GGML_RESTRICT restrict +# endif +#endif + typedef void (*ggml_to_float_t) (const void * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); + typedef void (*ggml_from_float_t)(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); + + struct ggml_type_traits { + const char * type_name; + int64_t blck_size; + int64_t blck_size_interleave; // interleave elements in blocks + size_t type_size; + bool is_quantized; + ggml_to_float_t to_float; + ggml_from_float_t from_float_ref; + }; + + GGML_API const struct ggml_type_traits * ggml_get_type_traits(enum ggml_type type); + + // ggml threadpool + // TODO: currently, only a few functions are in the base ggml API, while the rest are in the CPU backend + // the goal should be to create an API that other backends can use move everything to the ggml base + + // scheduling priorities + enum ggml_sched_priority { + GGML_SCHED_PRIO_LOW = -1, + GGML_SCHED_PRIO_NORMAL, + GGML_SCHED_PRIO_MEDIUM, + GGML_SCHED_PRIO_HIGH, + GGML_SCHED_PRIO_REALTIME + }; + + // threadpool params + // Use ggml_threadpool_params_default() or ggml_threadpool_params_init() to populate the defaults + struct ggml_threadpool_params { + bool cpumask[GGML_MAX_N_THREADS]; // mask of cpu cores (all-zeros means use default affinity settings) + int n_threads; // number of threads + enum ggml_sched_priority prio; // thread priority + uint32_t poll; // polling level (0 - no polling, 100 - aggressive polling) + bool strict_cpu; // strict cpu placement + bool paused; // start in paused state + }; + + struct ggml_threadpool; // forward declaration, see ggml.c + + typedef struct ggml_threadpool * ggml_threadpool_t; + + GGML_API struct ggml_threadpool_params ggml_threadpool_params_default(int n_threads); + GGML_API void ggml_threadpool_params_init (struct ggml_threadpool_params * p, int n_threads); + GGML_API bool ggml_threadpool_params_match (const struct ggml_threadpool_params * p0, const struct ggml_threadpool_params * p1); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/gguf.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/gguf.h new file mode 100644 index 00000000..79ee2020 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/gguf.h @@ -0,0 +1,202 @@ +// This file contains functionality related to "GGUF" files, the binary file format used by ggml. +// GGUF files have the following structure: +// +// 1. File magic "GGUF" (4 bytes). +// 2. File version (uint32_t). +// 3. Number of ggml tensors in file (int64_t). +// 4. Number of key-value-pairs in file (int64_t). +// 5. For each KV pair: +// 1. The key (string). +// 2. The value type (gguf_type). +// 3a. If the value type is GGUF_TYPE_ARRAY: +// 1. The type of the array (gguf_type). +// 2. The number of elements in the array (uint64_t). +// 3. The binary representation of each element in the array. +// 3b. Otherwise: +// 1. The binary representation of the value. +// 6. For each ggml tensor: +// 1. The tensor name (string). +// 2. The number of dimensions of the tensor (uint32_t). +// 3. For each dimension: +// 1. The size of the tensor in the dimension (int64_t). +// 4. The tensor data type (ggml_type). +// 5. The tensor data offset in the tensor data binary blob (uint64_t). +// 7. The tensor data binary blob (optional, aligned). +// +// Strings are serialized as the string length (uint64_t) followed by the C string without the null terminator. +// All enums are stored as int32_t. +// All bool values are stored as int8_t. +// If the special key "general.alignment" (uint32_t) is defined it is used for alignment, +// otherwise GGUF_DEFAULT_ALIGNMENT is used. +// +// Module maintainer: Johannes Gäßler (@JohannesGaessler, johannesg@5d6.de) + +#pragma once + +#include "ggml.h" + +#include +#include + +#define GGUF_MAGIC "GGUF" +#define GGUF_VERSION 3 + +#define GGUF_KEY_GENERAL_ALIGNMENT "general.alignment" + +#define GGUF_DEFAULT_ALIGNMENT 32 + +#ifdef __cplusplus +extern "C" { +#endif + + // types that can be stored as GGUF KV data + enum gguf_type { + GGUF_TYPE_UINT8 = 0, + GGUF_TYPE_INT8 = 1, + GGUF_TYPE_UINT16 = 2, + GGUF_TYPE_INT16 = 3, + GGUF_TYPE_UINT32 = 4, + GGUF_TYPE_INT32 = 5, + GGUF_TYPE_FLOAT32 = 6, + GGUF_TYPE_BOOL = 7, + GGUF_TYPE_STRING = 8, + GGUF_TYPE_ARRAY = 9, + GGUF_TYPE_UINT64 = 10, + GGUF_TYPE_INT64 = 11, + GGUF_TYPE_FLOAT64 = 12, + GGUF_TYPE_COUNT, // marks the end of the enum + }; + + struct gguf_context; + + struct gguf_init_params { + bool no_alloc; + + // if not NULL, create a ggml_context and allocate the tensor data in it + struct ggml_context ** ctx; + }; + + GGML_API struct gguf_context * gguf_init_empty(void); + GGML_API struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_params params); + //GGML_API struct gguf_context * gguf_init_from_buffer(..); + + GGML_API void gguf_free(struct gguf_context * ctx); + + GGML_API const char * gguf_type_name(enum gguf_type type); + + GGML_API uint32_t gguf_get_version (const struct gguf_context * ctx); + GGML_API size_t gguf_get_alignment (const struct gguf_context * ctx); + GGML_API size_t gguf_get_data_offset(const struct gguf_context * ctx); + + GGML_API int64_t gguf_get_n_kv(const struct gguf_context * ctx); + GGML_API int64_t gguf_find_key(const struct gguf_context * ctx, const char * key); // returns -1 if key is not found + GGML_API const char * gguf_get_key (const struct gguf_context * ctx, int64_t key_id); + + GGML_API enum gguf_type gguf_get_kv_type (const struct gguf_context * ctx, int64_t key_id); + GGML_API enum gguf_type gguf_get_arr_type(const struct gguf_context * ctx, int64_t key_id); + + // will abort if the wrong type is used for the key + GGML_API uint8_t gguf_get_val_u8 (const struct gguf_context * ctx, int64_t key_id); + GGML_API int8_t gguf_get_val_i8 (const struct gguf_context * ctx, int64_t key_id); + GGML_API uint16_t gguf_get_val_u16 (const struct gguf_context * ctx, int64_t key_id); + GGML_API int16_t gguf_get_val_i16 (const struct gguf_context * ctx, int64_t key_id); + GGML_API uint32_t gguf_get_val_u32 (const struct gguf_context * ctx, int64_t key_id); + GGML_API int32_t gguf_get_val_i32 (const struct gguf_context * ctx, int64_t key_id); + GGML_API float gguf_get_val_f32 (const struct gguf_context * ctx, int64_t key_id); + GGML_API uint64_t gguf_get_val_u64 (const struct gguf_context * ctx, int64_t key_id); + GGML_API int64_t gguf_get_val_i64 (const struct gguf_context * ctx, int64_t key_id); + GGML_API double gguf_get_val_f64 (const struct gguf_context * ctx, int64_t key_id); + GGML_API bool gguf_get_val_bool(const struct gguf_context * ctx, int64_t key_id); + GGML_API const char * gguf_get_val_str (const struct gguf_context * ctx, int64_t key_id); + GGML_API const void * gguf_get_val_data(const struct gguf_context * ctx, int64_t key_id); + GGML_API size_t gguf_get_arr_n (const struct gguf_context * ctx, int64_t key_id); + + // get raw pointer to the first element of the array with the given key_id + // for bool arrays, note that they are always stored as int8 on all platforms (usually this makes no difference) + GGML_API const void * gguf_get_arr_data(const struct gguf_context * ctx, int64_t key_id); + + // get ith C string from array with given key_id + GGML_API const char * gguf_get_arr_str (const struct gguf_context * ctx, int64_t key_id, size_t i); + + GGML_API int64_t gguf_get_n_tensors (const struct gguf_context * ctx); + GGML_API int64_t gguf_find_tensor (const struct gguf_context * ctx, const char * name); // returns -1 if the tensor is not found + GGML_API size_t gguf_get_tensor_offset(const struct gguf_context * ctx, int64_t tensor_id); + GGML_API const char * gguf_get_tensor_name (const struct gguf_context * ctx, int64_t tensor_id); + GGML_API enum ggml_type gguf_get_tensor_type (const struct gguf_context * ctx, int64_t tensor_id); + GGML_API size_t gguf_get_tensor_size (const struct gguf_context * ctx, int64_t tensor_id); + + // removes key if it exists, returns id that the key had prior to removal (-1 if it didn't exist) + GGML_API int64_t gguf_remove_key(struct gguf_context * ctx, const char * key); + + // overrides an existing KV pair or adds a new one, the new KV pair is always at the back + GGML_API void gguf_set_val_u8 (struct gguf_context * ctx, const char * key, uint8_t val); + GGML_API void gguf_set_val_i8 (struct gguf_context * ctx, const char * key, int8_t val); + GGML_API void gguf_set_val_u16 (struct gguf_context * ctx, const char * key, uint16_t val); + GGML_API void gguf_set_val_i16 (struct gguf_context * ctx, const char * key, int16_t val); + GGML_API void gguf_set_val_u32 (struct gguf_context * ctx, const char * key, uint32_t val); + GGML_API void gguf_set_val_i32 (struct gguf_context * ctx, const char * key, int32_t val); + GGML_API void gguf_set_val_f32 (struct gguf_context * ctx, const char * key, float val); + GGML_API void gguf_set_val_u64 (struct gguf_context * ctx, const char * key, uint64_t val); + GGML_API void gguf_set_val_i64 (struct gguf_context * ctx, const char * key, int64_t val); + GGML_API void gguf_set_val_f64 (struct gguf_context * ctx, const char * key, double val); + GGML_API void gguf_set_val_bool(struct gguf_context * ctx, const char * key, bool val); + GGML_API void gguf_set_val_str (struct gguf_context * ctx, const char * key, const char * val); + + // creates a new array with n elements of the given type and copies the corresponding number of bytes from data + GGML_API void gguf_set_arr_data(struct gguf_context * ctx, const char * key, enum gguf_type type, const void * data, size_t n); + + // creates a new array with n strings and copies the corresponding strings from data + GGML_API void gguf_set_arr_str (struct gguf_context * ctx, const char * key, const char ** data, size_t n); + + // set or add KV pairs from another context + GGML_API void gguf_set_kv(struct gguf_context * ctx, const struct gguf_context * src); + + // add tensor to GGUF context, tensor name must be unique + GGML_API void gguf_add_tensor(struct gguf_context * ctx, const struct ggml_tensor * tensor); + + // after changing a tensor's type, the offsets of all tensors with higher indices are immediately recalculated + // in such a way that the tensor data remains as one contiguous block (except for padding) + GGML_API void gguf_set_tensor_type(struct gguf_context * ctx, const char * name, enum ggml_type type); + + // assumes that at least gguf_get_tensor_size bytes can be read from data + GGML_API void gguf_set_tensor_data(struct gguf_context * ctx, const char * name, const void * data); + + // writing gguf files can be done in 3 ways: + // + // - write the entire gguf_context to a binary file in a single pass: + // + // gguf_write_to_file(ctx, fname, /*only_meta =*/ false); + // + // - write only the meta data to a file, then re-open the file and append the tensor data: + // + // gguf_write_to_file(ctx, fname, /*only_meta =*/ true); + // FILE * f = fopen(fname, "ab"); + // fwrite(f, ...); // write tensor data + // fclose(f); + // + // - first prepare a file with a placeholder for the meta data, write the tensor data, then write the meta data: + // + // FILE * f = fopen(fname, "wb"); + // const size_t size_meta = gguf_get_meta_size(ctx); + // fseek(f, size_meta, SEEK_SET); + // fwrite(f, ...); // write tensor data + // void * data = malloc(size_meta); + // gguf_get_meta_data(ctx, data); + // rewind(f); + // fwrite(data, 1, data, f); + // free(data); + // fclose(f); + // + + // write the entire context to a binary file + GGML_API bool gguf_write_to_file(const struct gguf_context * ctx, const char * fname, bool only_meta); + + // get the size in bytes of the meta data (header, kv pairs, tensor info) including padding + GGML_API size_t gguf_get_meta_size(const struct gguf_context * ctx); + + // writes the meta data to pointer "data" + GGML_API void gguf_get_meta_data(const struct gguf_context * ctx, void * data); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/llama-cpp.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/llama-cpp.h new file mode 100644 index 00000000..8f636817 --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/llama-cpp.h @@ -0,0 +1,30 @@ +#pragma once + +#ifndef __cplusplus +#error "This header is for C++ only" +#endif + +#include + +#include "llama.h" + +struct llama_model_deleter { + void operator()(llama_model * model) { llama_model_free(model); } +}; + +struct llama_context_deleter { + void operator()(llama_context * context) { llama_free(context); } +}; + +struct llama_sampler_deleter { + void operator()(llama_sampler * sampler) { llama_sampler_free(sampler); } +}; + +struct llama_adapter_lora_deleter { + void operator()(llama_adapter_lora * adapter) { llama_adapter_lora_free(adapter); } +}; + +typedef std::unique_ptr llama_model_ptr; +typedef std::unique_ptr llama_context_ptr; +typedef std::unique_ptr llama_sampler_ptr; +typedef std::unique_ptr llama_adapter_lora_ptr; diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/llama.h b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/llama.h new file mode 100644 index 00000000..8547226f --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Headers/llama.h @@ -0,0 +1,1414 @@ +#ifndef LLAMA_H +#define LLAMA_H + +#include "ggml.h" +#include "ggml-cpu.h" +#include "ggml-backend.h" +#include "ggml-opt.h" + +#include +#include +#include +#include + +#ifdef LLAMA_SHARED +# if defined(_WIN32) && !defined(__MINGW32__) +# ifdef LLAMA_BUILD +# define LLAMA_API __declspec(dllexport) +# else +# define LLAMA_API __declspec(dllimport) +# endif +# else +# define LLAMA_API __attribute__ ((visibility ("default"))) +# endif +#else +# define LLAMA_API +#endif + +#ifdef __GNUC__ +# define DEPRECATED(func, hint) func __attribute__((deprecated(hint))) +#elif defined(_MSC_VER) +# define DEPRECATED(func, hint) __declspec(deprecated(hint)) func +#else +# define DEPRECATED(func, hint) func +#endif + +#define LLAMA_DEFAULT_SEED 0xFFFFFFFF + +#define LLAMA_TOKEN_NULL -1 + +#define LLAMA_FILE_MAGIC_GGLA 0x67676c61u // 'ggla' +#define LLAMA_FILE_MAGIC_GGSN 0x6767736eu // 'ggsn' +#define LLAMA_FILE_MAGIC_GGSQ 0x67677371u // 'ggsq' + +#define LLAMA_SESSION_MAGIC LLAMA_FILE_MAGIC_GGSN +#define LLAMA_SESSION_VERSION 9 + +#define LLAMA_STATE_SEQ_MAGIC LLAMA_FILE_MAGIC_GGSQ +#define LLAMA_STATE_SEQ_VERSION 2 + +#ifdef __cplusplus +extern "C" { +#endif + + // + // C interface + // + // TODO: show sample usage + // + + struct llama_vocab; + struct llama_model; + struct llama_context; + struct llama_sampler; + + typedef struct llama_memory_i * llama_memory_t; + + typedef int32_t llama_pos; + typedef int32_t llama_token; + typedef int32_t llama_seq_id; + + enum llama_vocab_type { + LLAMA_VOCAB_TYPE_NONE = 0, // For models without vocab + LLAMA_VOCAB_TYPE_SPM = 1, // LLaMA tokenizer based on byte-level BPE with byte fallback + LLAMA_VOCAB_TYPE_BPE = 2, // GPT-2 tokenizer based on byte-level BPE + LLAMA_VOCAB_TYPE_WPM = 3, // BERT tokenizer based on WordPiece + LLAMA_VOCAB_TYPE_UGM = 4, // T5 tokenizer based on Unigram + LLAMA_VOCAB_TYPE_RWKV = 5, // RWKV tokenizer based on greedy tokenization + LLAMA_VOCAB_TYPE_PLAMO2 = 6, // PLaMo-2 tokenizer based on Aho-Corasick with dynamic programming + }; + + enum llama_rope_type { + LLAMA_ROPE_TYPE_NONE = -1, + LLAMA_ROPE_TYPE_NORM = 0, + LLAMA_ROPE_TYPE_NEOX = GGML_ROPE_TYPE_NEOX, + LLAMA_ROPE_TYPE_MROPE = GGML_ROPE_TYPE_MROPE, + LLAMA_ROPE_TYPE_IMROPE = GGML_ROPE_TYPE_IMROPE, + LLAMA_ROPE_TYPE_VISION = GGML_ROPE_TYPE_VISION, + }; + + enum llama_token_type { //TODO: remove, required until per token attributes are available from GGUF file + LLAMA_TOKEN_TYPE_UNDEFINED = 0, + LLAMA_TOKEN_TYPE_NORMAL = 1, + LLAMA_TOKEN_TYPE_UNKNOWN = 2, + LLAMA_TOKEN_TYPE_CONTROL = 3, + LLAMA_TOKEN_TYPE_USER_DEFINED = 4, + LLAMA_TOKEN_TYPE_UNUSED = 5, + LLAMA_TOKEN_TYPE_BYTE = 6, + }; + + enum llama_token_attr { + LLAMA_TOKEN_ATTR_UNDEFINED = 0, + LLAMA_TOKEN_ATTR_UNKNOWN = 1 << 0, + LLAMA_TOKEN_ATTR_UNUSED = 1 << 1, + LLAMA_TOKEN_ATTR_NORMAL = 1 << 2, + LLAMA_TOKEN_ATTR_CONTROL = 1 << 3, // SPECIAL? + LLAMA_TOKEN_ATTR_USER_DEFINED = 1 << 4, + LLAMA_TOKEN_ATTR_BYTE = 1 << 5, + LLAMA_TOKEN_ATTR_NORMALIZED = 1 << 6, + LLAMA_TOKEN_ATTR_LSTRIP = 1 << 7, + LLAMA_TOKEN_ATTR_RSTRIP = 1 << 8, + LLAMA_TOKEN_ATTR_SINGLE_WORD = 1 << 9, + }; + + // model file types + enum llama_ftype { + LLAMA_FTYPE_ALL_F32 = 0, + LLAMA_FTYPE_MOSTLY_F16 = 1, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_0 = 2, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_1 = 3, // except 1d tensors + // LLAMA_FTYPE_MOSTLY_Q4_1_SOME_F16 = 4, // tok_embeddings.weight and output.weight are F16 + // LLAMA_FTYPE_MOSTLY_Q4_2 = 5, // support has been removed + // LLAMA_FTYPE_MOSTLY_Q4_3 = 6, // support has been removed + LLAMA_FTYPE_MOSTLY_Q8_0 = 7, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q5_0 = 8, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q5_1 = 9, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q2_K = 10, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q3_K_S = 11, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q3_K_M = 12, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q3_K_L = 13, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_K_S = 14, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_K_M = 15, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q5_K_S = 16, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q5_K_M = 17, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q6_K = 18, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ2_XXS = 19, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ2_XS = 20, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q2_K_S = 21, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ3_XS = 22, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ3_XXS = 23, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ1_S = 24, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ4_NL = 25, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ3_S = 26, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ3_M = 27, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ2_S = 28, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ2_M = 29, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ4_XS = 30, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ1_M = 31, // except 1d tensors + LLAMA_FTYPE_MOSTLY_BF16 = 32, // except 1d tensors + //LLAMA_FTYPE_MOSTLY_Q4_0_4_4 = 33, // removed from gguf files, use Q4_0 and runtime repack + //LLAMA_FTYPE_MOSTLY_Q4_0_4_8 = 34, // removed from gguf files, use Q4_0 and runtime repack + //LLAMA_FTYPE_MOSTLY_Q4_0_8_8 = 35, // removed from gguf files, use Q4_0 and runtime repack + LLAMA_FTYPE_MOSTLY_TQ1_0 = 36, // except 1d tensors + LLAMA_FTYPE_MOSTLY_TQ2_0 = 37, // except 1d tensors + LLAMA_FTYPE_MOSTLY_MXFP4_MOE = 38, // except 1d tensors + + LLAMA_FTYPE_GUESSED = 1024, // not specified in the model file + }; + + enum llama_rope_scaling_type { + LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED = -1, + LLAMA_ROPE_SCALING_TYPE_NONE = 0, + LLAMA_ROPE_SCALING_TYPE_LINEAR = 1, + LLAMA_ROPE_SCALING_TYPE_YARN = 2, + LLAMA_ROPE_SCALING_TYPE_LONGROPE = 3, + LLAMA_ROPE_SCALING_TYPE_MAX_VALUE = LLAMA_ROPE_SCALING_TYPE_LONGROPE, + }; + + enum llama_pooling_type { + LLAMA_POOLING_TYPE_UNSPECIFIED = -1, + LLAMA_POOLING_TYPE_NONE = 0, + LLAMA_POOLING_TYPE_MEAN = 1, + LLAMA_POOLING_TYPE_CLS = 2, + LLAMA_POOLING_TYPE_LAST = 3, + LLAMA_POOLING_TYPE_RANK = 4, // used by reranking models to attach the classification head to the graph + }; + + enum llama_attention_type { + LLAMA_ATTENTION_TYPE_UNSPECIFIED = -1, + LLAMA_ATTENTION_TYPE_CAUSAL = 0, + LLAMA_ATTENTION_TYPE_NON_CAUSAL = 1, + }; + + enum llama_flash_attn_type { + LLAMA_FLASH_ATTN_TYPE_AUTO = -1, + LLAMA_FLASH_ATTN_TYPE_DISABLED = 0, + LLAMA_FLASH_ATTN_TYPE_ENABLED = 1, + }; + + LLAMA_API const char * llama_flash_attn_type_name(enum llama_flash_attn_type flash_attn_type); + + enum llama_split_mode { + LLAMA_SPLIT_MODE_NONE = 0, // single GPU + LLAMA_SPLIT_MODE_LAYER = 1, // split layers and KV across GPUs + LLAMA_SPLIT_MODE_ROW = 2, // split layers and KV across GPUs, use tensor parallelism if supported + }; + + // TODO: simplify (https://github.com/ggml-org/llama.cpp/pull/9294#pullrequestreview-2286561979) + typedef struct llama_token_data { + llama_token id; // token id + float logit; // log-odds of the token + float p; // probability of the token + } llama_token_data; + + typedef struct llama_token_data_array { + // TODO: consider SoA + // NOTE: this pointer can be modified by the samplers + llama_token_data * data; + size_t size; + int64_t selected; // this is the index in the data array (i.e. not the token id) + bool sorted; // note: do not assume the data is sorted - always check this flag + } llama_token_data_array; + + typedef bool (*llama_progress_callback)(float progress, void * user_data); + + // Input data for llama_encode/llama_decode + // A llama_batch object can contain input about one or many sequences + // The provided arrays (i.e. token, embd, pos, etc.) must have size of n_tokens + // + // - token : the token ids of the input (used when embd is NULL) + // - embd : token embeddings (i.e. float vector of size n_embd) (used when token is NULL) + // - pos : the positions of the respective token in the sequence + // (if set to NULL, the token position will be tracked automatically by llama_encode/llama_decode) + // - seq_id : the sequence to which the respective token belongs + // (if set to NULL, the sequence ID will be assumed to be 0) + // - logits : if zero, the logits (and/or the embeddings) for the respective token will not be output + // (if set to NULL: + // - if embeddings: all tokens are output + // - if not: only the last token is output + // ) + // + typedef struct llama_batch { + int32_t n_tokens; + + llama_token * token; + float * embd; + llama_pos * pos; + int32_t * n_seq_id; + llama_seq_id ** seq_id; + int8_t * logits; // TODO: rename this to "output" + } llama_batch; + + enum llama_model_kv_override_type { + LLAMA_KV_OVERRIDE_TYPE_INT, + LLAMA_KV_OVERRIDE_TYPE_FLOAT, + LLAMA_KV_OVERRIDE_TYPE_BOOL, + LLAMA_KV_OVERRIDE_TYPE_STR, + }; + + struct llama_model_kv_override { + enum llama_model_kv_override_type tag; + + char key[128]; + + union { + int64_t val_i64; + double val_f64; + bool val_bool; + char val_str[128]; + }; + }; + + struct llama_model_tensor_buft_override { + const char * pattern; + ggml_backend_buffer_type_t buft; + }; + + struct llama_model_params { + // NULL-terminated list of devices to use for offloading (if NULL, all available devices are used) + ggml_backend_dev_t * devices; + + // NULL-terminated list of buffer types to use for tensors that match a pattern + const struct llama_model_tensor_buft_override * tensor_buft_overrides; + + int32_t n_gpu_layers; // number of layers to store in VRAM + enum llama_split_mode split_mode; // how to split the model across multiple GPUs + + // the GPU that is used for the entire model when split_mode is LLAMA_SPLIT_MODE_NONE + int32_t main_gpu; + + // proportion of the model (layers or rows) to offload to each GPU, size: llama_max_devices() + const float * tensor_split; + + // Called with a progress value between 0.0 and 1.0. Pass NULL to disable. + // If the provided progress_callback returns true, model loading continues. + // If it returns false, model loading is immediately aborted. + llama_progress_callback progress_callback; + + // context pointer passed to the progress callback + void * progress_callback_user_data; + + // override key-value pairs of the model meta data + const struct llama_model_kv_override * kv_overrides; + + // Keep the booleans together to avoid misalignment during copy-by-value. + bool vocab_only; // only load the vocabulary, no weights + bool use_mmap; // use mmap if possible + bool use_mlock; // force system to keep model in RAM + bool check_tensors; // validate model tensor data + bool use_extra_bufts; // use extra buffer types (used for weight repacking) + bool no_host; // bypass host buffer allowing extra buffers to be used + }; + + // NOTE: changing the default values of parameters marked as [EXPERIMENTAL] may cause crashes or incorrect results in certain configurations + // https://github.com/ggml-org/llama.cpp/pull/7544 + struct llama_context_params { + uint32_t n_ctx; // text context, 0 = from model + uint32_t n_batch; // logical maximum batch size that can be submitted to llama_decode + uint32_t n_ubatch; // physical maximum batch size + uint32_t n_seq_max; // max number of sequences (i.e. distinct states for recurrent models) + int32_t n_threads; // number of threads to use for generation + int32_t n_threads_batch; // number of threads to use for batch processing + + enum llama_rope_scaling_type rope_scaling_type; // RoPE scaling type, from `enum llama_rope_scaling_type` + enum llama_pooling_type pooling_type; // whether to pool (sum) embedding results by sequence id + enum llama_attention_type attention_type; // attention type to use for embeddings + enum llama_flash_attn_type flash_attn_type; // when to enable Flash Attention + + // ref: https://github.com/ggml-org/llama.cpp/pull/2054 + float rope_freq_base; // RoPE base frequency, 0 = from model + float rope_freq_scale; // RoPE frequency scaling factor, 0 = from model + float yarn_ext_factor; // YaRN extrapolation mix factor, negative = from model + float yarn_attn_factor; // YaRN magnitude scaling factor + float yarn_beta_fast; // YaRN low correction dim + float yarn_beta_slow; // YaRN high correction dim + uint32_t yarn_orig_ctx; // YaRN original context size + float defrag_thold; // [DEPRECATED] defragment the KV cache if holes/size > thold, <= 0 disabled (default) + + ggml_backend_sched_eval_callback cb_eval; + void * cb_eval_user_data; + + enum ggml_type type_k; // data type for K cache [EXPERIMENTAL] + enum ggml_type type_v; // data type for V cache [EXPERIMENTAL] + + // Abort callback + // if it returns true, execution of llama_decode() will be aborted + // currently works only with CPU execution + ggml_abort_callback abort_callback; + void * abort_callback_data; + + // Keep the booleans together and at the end of the struct to avoid misalignment during copy-by-value. + bool embeddings; // if true, extract embeddings (together with logits) + bool offload_kqv; // offload the KQV ops (including the KV cache) to GPU + bool no_perf; // measure performance timings + bool op_offload; // offload host tensor operations to device + bool swa_full; // use full-size SWA cache (https://github.com/ggml-org/llama.cpp/pull/13194#issuecomment-2868343055) + // NOTE: setting to false when n_seq_max > 1 can cause bad performance in some cases + // ref: https://github.com/ggml-org/llama.cpp/pull/13845#issuecomment-2924800573 + bool kv_unified; // use a unified buffer across the input sequences when computing the attention + // try to disable when n_seq_max > 1 for improved performance when the sequences do not share a large prefix + // ref: https://github.com/ggml-org/llama.cpp/pull/14363 + }; + + // model quantization parameters + typedef struct llama_model_quantize_params { + int32_t nthread; // number of threads to use for quantizing, if <=0 will use std::thread::hardware_concurrency() + enum llama_ftype ftype; // quantize to this llama_ftype + enum ggml_type output_tensor_type; // output tensor type + enum ggml_type token_embedding_type; // token embeddings tensor type + bool allow_requantize; // allow quantizing non-f32/f16 tensors + bool quantize_output_tensor; // quantize output.weight + bool only_copy; // only copy tensors - ftype, allow_requantize and quantize_output_tensor are ignored + bool pure; // quantize all tensors to the default type + bool keep_split; // quantize to the same number of shards + void * imatrix; // pointer to importance matrix data + void * kv_overrides; // pointer to vector containing overrides + void * tensor_types; // pointer to vector containing tensor types + void * prune_layers; // pointer to vector containing layer indices to prune + } llama_model_quantize_params; + + typedef struct llama_logit_bias { + llama_token token; + float bias; + } llama_logit_bias; + + typedef struct llama_sampler_chain_params { + bool no_perf; // whether to measure performance timings + } llama_sampler_chain_params; + + // used in chat template + typedef struct llama_chat_message { + const char * role; + const char * content; + } llama_chat_message; + + // lora adapter + struct llama_adapter_lora; + + // Helpers for getting default parameters + // TODO: update API to start accepting pointers to params structs (https://github.com/ggml-org/llama.cpp/discussions/9172) + LLAMA_API struct llama_model_params llama_model_default_params(void); + LLAMA_API struct llama_context_params llama_context_default_params(void); + LLAMA_API struct llama_sampler_chain_params llama_sampler_chain_default_params(void); + LLAMA_API struct llama_model_quantize_params llama_model_quantize_default_params(void); + + // Initialize the llama + ggml backend + // If numa is true, use NUMA optimizations + // Call once at the start of the program + LLAMA_API void llama_backend_init(void); + + // Call once at the end of the program - currently only used for MPI + LLAMA_API void llama_backend_free(void); + + //optional: + LLAMA_API void llama_numa_init(enum ggml_numa_strategy numa); + + // Optional: an auto threadpool gets created in ggml if not passed explicitly + LLAMA_API void llama_attach_threadpool( + struct llama_context * ctx, + ggml_threadpool_t threadpool, + ggml_threadpool_t threadpool_batch); + + LLAMA_API void llama_detach_threadpool(struct llama_context * ctx); + + DEPRECATED(LLAMA_API struct llama_model * llama_load_model_from_file( + const char * path_model, + struct llama_model_params params), + "use llama_model_load_from_file instead"); + + // Load the model from a file + // If the file is split into multiple parts, the file name must follow this pattern: -%05d-of-%05d.gguf + // If the split file name does not follow this pattern, use llama_model_load_from_splits + LLAMA_API struct llama_model * llama_model_load_from_file( + const char * path_model, + struct llama_model_params params); + + // Load the model from multiple splits (support custom naming scheme) + // The paths must be in the correct order + LLAMA_API struct llama_model * llama_model_load_from_splits( + const char ** paths, + size_t n_paths, + struct llama_model_params params); + + LLAMA_API void llama_model_save_to_file( + const struct llama_model * model, + const char * path_model); + + DEPRECATED(LLAMA_API void llama_free_model(struct llama_model * model), + "use llama_model_free instead"); + + LLAMA_API void llama_model_free(struct llama_model * model); + + LLAMA_API struct llama_context * llama_init_from_model( + struct llama_model * model, + struct llama_context_params params); + + DEPRECATED(LLAMA_API struct llama_context * llama_new_context_with_model( + struct llama_model * model, + struct llama_context_params params), + "use llama_init_from_model instead"); + + // Frees all allocated memory + LLAMA_API void llama_free(struct llama_context * ctx); + + LLAMA_API int64_t llama_time_us(void); + + LLAMA_API size_t llama_max_devices(void); + LLAMA_API size_t llama_max_parallel_sequences(void); + + LLAMA_API bool llama_supports_mmap (void); + LLAMA_API bool llama_supports_mlock (void); + LLAMA_API bool llama_supports_gpu_offload(void); + LLAMA_API bool llama_supports_rpc (void); + + // NOTE: After creating a llama_context, it is recommended to query the actual values using these functions + // In some cases the requested values via llama_context_params may differ from the actual values used by the context + // ref: https://github.com/ggml-org/llama.cpp/pull/17046#discussion_r2503085732 + LLAMA_API uint32_t llama_n_ctx (const struct llama_context * ctx); + LLAMA_API uint32_t llama_n_ctx_seq (const struct llama_context * ctx); + LLAMA_API uint32_t llama_n_batch (const struct llama_context * ctx); + LLAMA_API uint32_t llama_n_ubatch (const struct llama_context * ctx); + LLAMA_API uint32_t llama_n_seq_max (const struct llama_context * ctx); + + DEPRECATED(LLAMA_API int32_t llama_n_ctx_train(const struct llama_model * model), "use llama_model_n_ctx_train instead"); + DEPRECATED(LLAMA_API int32_t llama_n_embd (const struct llama_model * model), "use llama_model_n_embd instead"); + DEPRECATED(LLAMA_API int32_t llama_n_layer (const struct llama_model * model), "use llama_model_n_layer instead"); + DEPRECATED(LLAMA_API int32_t llama_n_head (const struct llama_model * model), "use llama_model_n_head instead"); + + DEPRECATED(LLAMA_API int32_t llama_n_vocab (const struct llama_vocab * vocab), "use llama_vocab_n_tokens instead"); + + LLAMA_API const struct llama_model * llama_get_model (const struct llama_context * ctx); + LLAMA_API llama_memory_t llama_get_memory (const struct llama_context * ctx); + LLAMA_API enum llama_pooling_type llama_pooling_type(const struct llama_context * ctx); // TODO: rename to llama_get_pooling_type + + LLAMA_API const struct llama_vocab * llama_model_get_vocab(const struct llama_model * model); + LLAMA_API enum llama_rope_type llama_model_rope_type(const struct llama_model * model); + + LLAMA_API int32_t llama_model_n_ctx_train(const struct llama_model * model); + LLAMA_API int32_t llama_model_n_embd (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_embd_inp (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_layer (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_head (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_head_kv (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_swa (const struct llama_model * model); + + // Get the model's RoPE frequency scaling factor + LLAMA_API float llama_model_rope_freq_scale_train(const struct llama_model * model); + + // Returns the number of classifier outputs (only valid for classifier models) + // Undefined behavior for non-classifier models + LLAMA_API uint32_t llama_model_n_cls_out(const struct llama_model * model); + + // Returns label of classifier output by index ( 1` + // p0 < 0 : [0, p1] + // p1 < 0 : [p0, inf) + LLAMA_API void llama_memory_seq_div( + llama_memory_t mem, + llama_seq_id seq_id, + llama_pos p0, + llama_pos p1, + int d); + + // Returns the smallest position present in the memory for the specified sequence + // This is typically non-zero only for SWA caches + // Note that all positions in the range [pos_min, pos_max] are guaranteed to be present in the memory + // Return -1 if the sequence is empty + LLAMA_API llama_pos llama_memory_seq_pos_min( + llama_memory_t mem, + llama_seq_id seq_id); + + // Returns the largest position present in the memory for the specified sequence + // Note that all positions in the range [pos_min, pos_max] are guaranteed to be present in the memory + // Return -1 if the sequence is empty + LLAMA_API llama_pos llama_memory_seq_pos_max( + llama_memory_t mem, + llama_seq_id seq_id); + + // Check if the memory supports shifting + LLAMA_API bool llama_memory_can_shift(llama_memory_t mem); + + // + // State / sessions + // + + // Returns the *actual* size in bytes of the state + // (logits, embedding and memory) + // Only use when saving the state, not when restoring it, otherwise the size may be too small. + LLAMA_API size_t llama_state_get_size(struct llama_context * ctx); + LLAMA_API DEPRECATED(size_t llama_get_state_size(struct llama_context * ctx), + "use llama_state_get_size instead"); + + // Copies the state to the specified destination address. + // Destination needs to have allocated enough memory. + // Returns the number of bytes copied + LLAMA_API size_t llama_state_get_data( + struct llama_context * ctx, + uint8_t * dst, + size_t size); + LLAMA_API DEPRECATED(size_t llama_copy_state_data( + struct llama_context * ctx, + uint8_t * dst), + "use llama_state_get_data instead"); + + // Set the state reading from the specified address + // Returns the number of bytes read + LLAMA_API size_t llama_state_set_data( + struct llama_context * ctx, + const uint8_t * src, + size_t size); + LLAMA_API DEPRECATED(size_t llama_set_state_data( + struct llama_context * ctx, + const uint8_t * src), + "use llama_state_set_data instead"); + + // Save/load session file + LLAMA_API bool llama_state_load_file( + struct llama_context * ctx, + const char * path_session, + llama_token * tokens_out, + size_t n_token_capacity, + size_t * n_token_count_out); + LLAMA_API DEPRECATED(bool llama_load_session_file( + struct llama_context * ctx, + const char * path_session, + llama_token * tokens_out, + size_t n_token_capacity, + size_t * n_token_count_out), + "use llama_state_load_file instead"); + + LLAMA_API bool llama_state_save_file( + struct llama_context * ctx, + const char * path_session, + const llama_token * tokens, + size_t n_token_count); + LLAMA_API DEPRECATED(bool llama_save_session_file( + struct llama_context * ctx, + const char * path_session, + const llama_token * tokens, + size_t n_token_count), + "use llama_state_save_file instead"); + + // Get the exact size needed to copy the state of a single sequence + LLAMA_API size_t llama_state_seq_get_size( + struct llama_context * ctx, + llama_seq_id seq_id); + + // Copy the state of a single sequence into the specified buffer + LLAMA_API size_t llama_state_seq_get_data( + struct llama_context * ctx, + uint8_t * dst, + size_t size, + llama_seq_id seq_id); + + // Copy the sequence data (originally copied with `llama_state_seq_get_data`) into the specified sequence + // Returns: + // - Positive: Ok + // - Zero: Failed to load + LLAMA_API size_t llama_state_seq_set_data( + struct llama_context * ctx, + const uint8_t * src, + size_t size, + llama_seq_id dest_seq_id); + + LLAMA_API size_t llama_state_seq_save_file( + struct llama_context * ctx, + const char * filepath, + llama_seq_id seq_id, + const llama_token * tokens, + size_t n_token_count); + + LLAMA_API size_t llama_state_seq_load_file( + struct llama_context * ctx, + const char * filepath, + llama_seq_id dest_seq_id, + llama_token * tokens_out, + size_t n_token_capacity, + size_t * n_token_count_out); + +// for backwards-compat +#define LLAMA_STATE_SEQ_FLAGS_SWA_ONLY 1 + +// work only with partial states, such as SWA KV cache or recurrent cache (e.g. Mamba) +#define LLAMA_STATE_SEQ_FLAGS_PARTIAL_ONLY 1 + + typedef uint32_t llama_state_seq_flags; + + LLAMA_API size_t llama_state_seq_get_size_ext( + struct llama_context * ctx, + llama_seq_id seq_id, + llama_state_seq_flags flags); + + LLAMA_API size_t llama_state_seq_get_data_ext( + struct llama_context * ctx, + uint8_t * dst, + size_t size, + llama_seq_id seq_id, + llama_state_seq_flags flags); + + LLAMA_API size_t llama_state_seq_set_data_ext( + struct llama_context * ctx, + const uint8_t * src, + size_t size, + llama_seq_id dest_seq_id, + llama_state_seq_flags flags); + + // + // Decoding + // + + // Return batch for single sequence of tokens + // The sequence ID will be fixed to 0 + // The position of the tokens will be tracked automatically by llama_decode + // + // NOTE: this is a helper function to facilitate transition to the new batch API - avoid using it + // + LLAMA_API struct llama_batch llama_batch_get_one( + llama_token * tokens, + int32_t n_tokens); + + // Allocates a batch of tokens on the heap that can hold a maximum of n_tokens + // Each token can be assigned up to n_seq_max sequence ids + // The batch has to be freed with llama_batch_free() + // If embd != 0, llama_batch.embd will be allocated with size of n_tokens * embd * sizeof(float) + // Otherwise, llama_batch.token will be allocated to store n_tokens llama_token + // The rest of the llama_batch members are allocated with size n_tokens + // All members are left uninitialized + LLAMA_API struct llama_batch llama_batch_init( + int32_t n_tokens, + int32_t embd, + int32_t n_seq_max); + + // Frees a batch of tokens allocated with llama_batch_init() + LLAMA_API void llama_batch_free(struct llama_batch batch); + + // Process a batch of tokens. + // In contrast to llama_decode() - this call does not use KV cache. + // For encode-decoder contexts, processes the batch using the encoder. + // Can store the encoder output internally for later use by the decoder's cross-attention layers. + // 0 - success + // < 0 - error. the memory state is restored to the state before this call + LLAMA_API int32_t llama_encode( + struct llama_context * ctx, + struct llama_batch batch); + + // Process a batch of tokens. + // Requires the context to have a memory. + // For encode-decoder contexts, processes the batch using the decoder. + // Positive return values does not mean a fatal error, but rather a warning. + // Upon fatal-error or abort, the ubatches that managed to be been processed will remain in the memory state of the context + // To handle this correctly, query the memory state using llama_memory_seq_pos_min() and llama_memory_seq_pos_max() + // Upon other return values, the memory state is restored to the state before this call + // 0 - success + // 1 - could not find a KV slot for the batch (try reducing the size of the batch or increase the context) + // 2 - aborted (processed ubatches will remain in the context's memory) + // -1 - invalid input batch + // < -1 - fatal error (processed ubatches will remain in the context's memory) + LLAMA_API int32_t llama_decode( + struct llama_context * ctx, + struct llama_batch batch); + + // Set the number of threads used for decoding + // n_threads is the number of threads used for generation (single token) + // n_threads_batch is the number of threads used for prompt and batch processing (multiple tokens) + LLAMA_API void llama_set_n_threads(struct llama_context * ctx, int32_t n_threads, int32_t n_threads_batch); + + // Get the number of threads used for generation of a single token. + LLAMA_API int32_t llama_n_threads(struct llama_context * ctx); + + // Get the number of threads used for prompt and batch processing (multiple token). + LLAMA_API int32_t llama_n_threads_batch(struct llama_context * ctx); + + // Set whether the context outputs embeddings or not + // TODO: rename to avoid confusion with llama_get_embeddings() + LLAMA_API void llama_set_embeddings(struct llama_context * ctx, bool embeddings); + + // Set whether to use causal attention or not + // If set to true, the model will only attend to the past tokens + LLAMA_API void llama_set_causal_attn(struct llama_context * ctx, bool causal_attn); + + // Set whether the model is in warmup mode or not + // If true, all model tensors are activated during llama_decode() to load and cache their weights. + LLAMA_API void llama_set_warmup(struct llama_context * ctx, bool warmup); + + // Set abort callback + LLAMA_API void llama_set_abort_callback(struct llama_context * ctx, ggml_abort_callback abort_callback, void * abort_callback_data); + + // Wait until all computations are finished + // This is automatically done when using one of the functions below to obtain the computation results + // and is not necessary to call it explicitly in most cases + LLAMA_API void llama_synchronize(struct llama_context * ctx); + + // Token logits obtained from the last call to llama_decode() + // The logits for which llama_batch.logits[i] != 0 are stored contiguously + // in the order they have appeared in the batch. + // Rows: number of tokens for which llama_batch.logits[i] != 0 + // Cols: n_vocab + // TODO: deprecate in favor of llama_get_logits_ith() (ref: https://github.com/ggml-org/llama.cpp/pull/14853#issuecomment-3113143522) + LLAMA_API float * llama_get_logits(struct llama_context * ctx); + + // Logits for the ith token. For positive indices, Equivalent to: + // llama_get_logits(ctx) + ctx->output_ids[i]*n_vocab + // Negative indicies can be used to access logits in reverse order, -1 is the last logit. + // returns NULL for invalid ids. + LLAMA_API float * llama_get_logits_ith(struct llama_context * ctx, int32_t i); + + // Get all output token embeddings. + // when pooling_type == LLAMA_POOLING_TYPE_NONE or when using a generative model, + // the embeddings for which llama_batch.logits[i] != 0 are stored contiguously + // in the order they have appeared in the batch. + // shape: [n_outputs*n_embd] + // Otherwise, returns NULL. + // TODO: deprecate in favor of llama_get_embeddings_ith() (ref: https://github.com/ggml-org/llama.cpp/pull/14853#issuecomment-3113143522) + LLAMA_API float * llama_get_embeddings(struct llama_context * ctx); + + // Get the embeddings for the ith token. For positive indices, Equivalent to: + // llama_get_embeddings(ctx) + ctx->output_ids[i]*n_embd + // Negative indicies can be used to access embeddings in reverse order, -1 is the last embedding. + // shape: [n_embd] (1-dimensional) + // returns NULL for invalid ids. + LLAMA_API float * llama_get_embeddings_ith(struct llama_context * ctx, int32_t i); + + // Get the embeddings for a sequence id + // Returns NULL if pooling_type is LLAMA_POOLING_TYPE_NONE + // when pooling_type == LLAMA_POOLING_TYPE_RANK, returns float[n_cls_out] with the rank(s) of the sequence + // otherwise: float[n_embd] (1-dimensional) + LLAMA_API float * llama_get_embeddings_seq(struct llama_context * ctx, llama_seq_id seq_id); + + // + // Vocab + // + + LLAMA_API const char * llama_vocab_get_text(const struct llama_vocab * vocab, llama_token token); + + LLAMA_API float llama_vocab_get_score(const struct llama_vocab * vocab, llama_token token); + + LLAMA_API enum llama_token_attr llama_vocab_get_attr(const struct llama_vocab * vocab, llama_token token); + + // Check if the token is supposed to end generation (end-of-generation, eg. EOS, EOT, etc.) + LLAMA_API bool llama_vocab_is_eog(const struct llama_vocab * vocab, llama_token token); + + // Identify if Token Id is a control token or a render-able token + LLAMA_API bool llama_vocab_is_control(const struct llama_vocab * vocab, llama_token token); + + // Special tokens + LLAMA_API llama_token llama_vocab_bos(const struct llama_vocab * vocab); // beginning-of-sentence + LLAMA_API llama_token llama_vocab_eos(const struct llama_vocab * vocab); // end-of-sentence + LLAMA_API llama_token llama_vocab_eot(const struct llama_vocab * vocab); // end-of-turn + LLAMA_API llama_token llama_vocab_sep(const struct llama_vocab * vocab); // sentence separator + LLAMA_API llama_token llama_vocab_nl (const struct llama_vocab * vocab); // next-line + LLAMA_API llama_token llama_vocab_pad(const struct llama_vocab * vocab); // padding + LLAMA_API llama_token llama_vocab_mask(const struct llama_vocab * vocab); // mask + + LLAMA_API bool llama_vocab_get_add_bos(const struct llama_vocab * vocab); + LLAMA_API bool llama_vocab_get_add_eos(const struct llama_vocab * vocab); + LLAMA_API bool llama_vocab_get_add_sep(const struct llama_vocab * vocab); + + LLAMA_API llama_token llama_vocab_fim_pre(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_suf(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_mid(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_pad(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_rep(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_sep(const struct llama_vocab * vocab); + + DEPRECATED(LLAMA_API const char * llama_token_get_text(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_get_text instead"); + DEPRECATED(LLAMA_API float llama_token_get_score(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_get_score instead"); + DEPRECATED(LLAMA_API enum llama_token_attr llama_token_get_attr(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_get_attr instead"); + DEPRECATED(LLAMA_API bool llama_token_is_eog(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_is_eog instead"); + DEPRECATED(LLAMA_API bool llama_token_is_control(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_is_control instead"); + DEPRECATED(LLAMA_API llama_token llama_token_bos(const struct llama_vocab * vocab), "use llama_vocab_bos instead"); + DEPRECATED(LLAMA_API llama_token llama_token_eos(const struct llama_vocab * vocab), "use llama_vocab_eos instead"); + DEPRECATED(LLAMA_API llama_token llama_token_eot(const struct llama_vocab * vocab), "use llama_vocab_eot instead"); + DEPRECATED(LLAMA_API llama_token llama_token_cls(const struct llama_vocab * vocab), "use llama_vocab_cls instead"); + DEPRECATED(LLAMA_API llama_token llama_token_sep(const struct llama_vocab * vocab), "use llama_vocab_sep instead"); + DEPRECATED(LLAMA_API llama_token llama_token_nl (const struct llama_vocab * vocab), "use llama_vocab_nl instead"); + DEPRECATED(LLAMA_API llama_token llama_token_pad(const struct llama_vocab * vocab), "use llama_vocab_pad instead"); + DEPRECATED(LLAMA_API bool llama_add_bos_token(const struct llama_vocab * vocab), "use llama_vocab_get_add_bos instead"); + DEPRECATED(LLAMA_API bool llama_add_eos_token(const struct llama_vocab * vocab), "use llama_vocab_get_add_eos instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_pre(const struct llama_vocab * vocab), "use llama_vocab_fim_pre instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_suf(const struct llama_vocab * vocab), "use llama_vocab_fim_suf instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_mid(const struct llama_vocab * vocab), "use llama_vocab_fim_mid instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_pad(const struct llama_vocab * vocab), "use llama_vocab_fim_pad instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_rep(const struct llama_vocab * vocab), "use llama_vocab_fim_rep instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_sep(const struct llama_vocab * vocab), "use llama_vocab_fim_sep instead"); + + // CLS is equivalent to BOS + DEPRECATED(LLAMA_API llama_token llama_vocab_cls(const struct llama_vocab * vocab), // classification + "use llama_vocab_bos instead"); + + // + // Tokenization + // + // The API is thread-safe. + // + + /// @details Convert the provided text into tokens. + /// @param tokens The tokens pointer must be large enough to hold the resulting tokens. + /// @return Returns the number of tokens on success, no more than n_tokens_max + /// @return Returns a negative number on failure - the number of tokens that would have been returned + /// @return Returns INT32_MIN on overflow (e.g., tokenization result size exceeds int32_t limit) + /// @param add_special Allow to add BOS and EOS tokens if model is configured to do so. + /// @param parse_special Allow tokenizing special and/or control tokens which otherwise are not exposed and treated + /// as plaintext. Does not insert a leading space. + LLAMA_API int32_t llama_tokenize( + const struct llama_vocab * vocab, + const char * text, + int32_t text_len, + llama_token * tokens, + int32_t n_tokens_max, + bool add_special, + bool parse_special); + + // Token Id -> Piece. + // Uses the vocabulary in the provided context. + // Does not write null terminator to the buffer. + // User can skip up to 'lstrip' leading spaces before copying (useful when encoding/decoding multiple tokens with 'add_space_prefix') + // @param special If true, special tokens are rendered in the output. + LLAMA_API int32_t llama_token_to_piece( + const struct llama_vocab * vocab, + llama_token token, + char * buf, + int32_t length, + int32_t lstrip, + bool special); + + /// @details Convert the provided tokens into text (inverse of llama_tokenize()). + /// @param text The char pointer must be large enough to hold the resulting text. + /// @return Returns the number of chars/bytes on success, no more than text_len_max. + /// @return Returns a negative number on failure - the number of chars/bytes that would have been returned. + /// @param remove_special Allow to remove BOS and EOS tokens if model is configured to do so. + /// @param unparse_special If true, special tokens are rendered in the output. + LLAMA_API int32_t llama_detokenize( + const struct llama_vocab * vocab, + const llama_token * tokens, + int32_t n_tokens, + char * text, + int32_t text_len_max, + bool remove_special, + bool unparse_special); + + // + // Chat templates + // + + /// Apply chat template. Inspired by hf apply_chat_template() on python. + /// Both "model" and "custom_template" are optional, but at least one is required. "custom_template" has higher precedence than "model" + /// NOTE: This function does not use a jinja parser. It only support a pre-defined list of template. See more: https://github.com/ggml-org/llama.cpp/wiki/Templates-supported-by-llama_chat_apply_template + /// @param tmpl A Jinja template to use for this chat. If this is nullptr, the model’s default chat template will be used instead. + /// @param chat Pointer to a list of multiple llama_chat_message + /// @param n_msg Number of llama_chat_message in this chat + /// @param add_ass Whether to end the prompt with the token(s) that indicate the start of an assistant message. + /// @param buf A buffer to hold the output formatted prompt. The recommended alloc size is 2 * (total number of characters of all messages) + /// @param length The size of the allocated buffer + /// @return The total number of bytes of the formatted prompt. If is it larger than the size of buffer, you may need to re-alloc it and then re-apply the template. + LLAMA_API int32_t llama_chat_apply_template( + const char * tmpl, + const struct llama_chat_message * chat, + size_t n_msg, + bool add_ass, + char * buf, + int32_t length); + + // Get list of built-in chat templates + LLAMA_API int32_t llama_chat_builtin_templates(const char ** output, size_t len); + + // + // Sampling API + // + // Sample usage: + // + // // prepare the sampling chain at the start + // auto sparams = llama_sampler_chain_default_params(); + // + // llama_sampler * smpl = llama_sampler_chain_init(sparams); + // + // llama_sampler_chain_add(smpl, llama_sampler_init_top_k(50)); + // llama_sampler_chain_add(smpl, llama_sampler_init_top_p(0.9, 1)); + // llama_sampler_chain_add(smpl, llama_sampler_init_temp (0.8)); + // + // // typically, the chain should end with a sampler such as "greedy", "dist" or "mirostat" + // // this sampler will be responsible to select the actual token + // llama_sampler_chain_add(smpl, llama_sampler_init_dist(seed)); + // + // ... + // + // // decoding loop: + // while (...) { + // ... + // + // llama_decode(ctx, batch); + // + // // sample from the logits of the last token in the batch + // const llama_token id = llama_sampler_sample(smpl, ctx, -1); + // + // ... + // } + // + // llama_sampler_free(smpl); + // + // TODO: In the future, llama_sampler will be utilized to offload the sampling to the backends (e.g. GPU). + // + + typedef void * llama_sampler_context_t; + + // user code can implement the interface below in order to create custom llama_sampler + struct llama_sampler_i { + const char * (*name) (const struct llama_sampler * smpl); // can be NULL + void (*accept)( struct llama_sampler * smpl, llama_token token); // can be NULL + void (*apply) ( struct llama_sampler * smpl, llama_token_data_array * cur_p); // required + void (*reset) ( struct llama_sampler * smpl); // can be NULL + struct llama_sampler * (*clone) (const struct llama_sampler * smpl); // can be NULL if ctx is NULL + void (*free) ( struct llama_sampler * smpl); // can be NULL if ctx is NULL + + // TODO: API for internal libllama usage for appending the sampling to an existing ggml_cgraph + //void (*apply_ggml) (struct llama_sampler * smpl, ...); + }; + + struct llama_sampler { + const struct llama_sampler_i * iface; + llama_sampler_context_t ctx; + }; + + // mirror of llama_sampler_i: + LLAMA_API struct llama_sampler * llama_sampler_init (const struct llama_sampler_i * iface, llama_sampler_context_t ctx); + LLAMA_API const char * llama_sampler_name (const struct llama_sampler * smpl); + LLAMA_API void llama_sampler_accept( struct llama_sampler * smpl, llama_token token); + LLAMA_API void llama_sampler_apply ( struct llama_sampler * smpl, llama_token_data_array * cur_p); + LLAMA_API void llama_sampler_reset ( struct llama_sampler * smpl); + LLAMA_API struct llama_sampler * llama_sampler_clone (const struct llama_sampler * smpl); + // important: do not free if the sampler has been added to a llama_sampler_chain (via llama_sampler_chain_add) + LLAMA_API void llama_sampler_free ( struct llama_sampler * smpl); + + // llama_sampler_chain + // a type of llama_sampler that can chain multiple samplers one after another + + LLAMA_API struct llama_sampler * llama_sampler_chain_init(struct llama_sampler_chain_params params); + + // important: takes ownership of the sampler object and will free it when llama_sampler_free is called + LLAMA_API void llama_sampler_chain_add( struct llama_sampler * chain, struct llama_sampler * smpl); + LLAMA_API struct llama_sampler * llama_sampler_chain_get(const struct llama_sampler * chain, int32_t i); + LLAMA_API int llama_sampler_chain_n (const struct llama_sampler * chain); + + // after removing a sampler, the chain will no longer own it, and it will not be freed when the chain is freed + LLAMA_API struct llama_sampler * llama_sampler_chain_remove( struct llama_sampler * chain, int32_t i); + + // available samplers: + + LLAMA_API struct llama_sampler * llama_sampler_init_greedy(void); + LLAMA_API struct llama_sampler * llama_sampler_init_dist (uint32_t seed); + + /// @details Top-K sampling described in academic paper "The Curious Case of Neural Text Degeneration" https://arxiv.org/abs/1904.09751 + /// Setting k <= 0 makes this a noop + LLAMA_API struct llama_sampler * llama_sampler_init_top_k (int32_t k); + + /// @details Nucleus sampling described in academic paper "The Curious Case of Neural Text Degeneration" https://arxiv.org/abs/1904.09751 + LLAMA_API struct llama_sampler * llama_sampler_init_top_p (float p, size_t min_keep); + + /// @details Minimum P sampling as described in https://github.com/ggml-org/llama.cpp/pull/3841 + LLAMA_API struct llama_sampler * llama_sampler_init_min_p (float p, size_t min_keep); + + /// @details Locally Typical Sampling implementation described in the paper https://arxiv.org/abs/2202.00666. + LLAMA_API struct llama_sampler * llama_sampler_init_typical (float p, size_t min_keep); + + /// #details Updates the logits l_i` = l_i/t. When t <= 0.0f, the maximum logit is kept at it's original value, the rest are set to -inf + LLAMA_API struct llama_sampler * llama_sampler_init_temp (float t); + + /// @details Dynamic temperature implementation (a.k.a. entropy) described in the paper https://arxiv.org/abs/2309.02772. + LLAMA_API struct llama_sampler * llama_sampler_init_temp_ext (float t, float delta, float exponent); + + /// @details XTC sampler as described in https://github.com/oobabooga/text-generation-webui/pull/6335 + LLAMA_API struct llama_sampler * llama_sampler_init_xtc (float p, float t, size_t min_keep, uint32_t seed); + + /// @details Top n sigma sampling as described in academic paper "Top-nσ: Not All Logits Are You Need" https://arxiv.org/pdf/2411.07641 + LLAMA_API struct llama_sampler * llama_sampler_init_top_n_sigma(float n); + + /// @details Mirostat 1.0 algorithm described in the paper https://arxiv.org/abs/2007.14966. Uses tokens instead of words. + /// @param candidates A vector of `llama_token_data` containing the candidate tokens, their probabilities (p), and log-odds (logit) for the current position in the generated text. + /// @param tau The target cross-entropy (or surprise) value you want to achieve for the generated text. A higher value corresponds to more surprising or less predictable text, while a lower value corresponds to less surprising or more predictable text. + /// @param eta The learning rate used to update `mu` based on the error between the target and observed surprisal of the sampled word. A larger learning rate will cause `mu` to be updated more quickly, while a smaller learning rate will result in slower updates. + /// @param m The number of tokens considered in the estimation of `s_hat`. This is an arbitrary value that is used to calculate `s_hat`, which in turn helps to calculate the value of `k`. In the paper, they use `m = 100`, but you can experiment with different values to see how it affects the performance of the algorithm. + /// @param mu Maximum cross-entropy. This value is initialized to be twice the target cross-entropy (`2 * tau`) and is updated in the algorithm based on the error between the target and observed surprisal. + LLAMA_API struct llama_sampler * llama_sampler_init_mirostat( + int32_t n_vocab, + uint32_t seed, + float tau, + float eta, + int32_t m); + + /// @details Mirostat 2.0 algorithm described in the paper https://arxiv.org/abs/2007.14966. Uses tokens instead of words. + /// @param candidates A vector of `llama_token_data` containing the candidate tokens, their probabilities (p), and log-odds (logit) for the current position in the generated text. + /// @param tau The target cross-entropy (or surprise) value you want to achieve for the generated text. A higher value corresponds to more surprising or less predictable text, while a lower value corresponds to less surprising or more predictable text. + /// @param eta The learning rate used to update `mu` based on the error between the target and observed surprisal of the sampled word. A larger learning rate will cause `mu` to be updated more quickly, while a smaller learning rate will result in slower updates. + /// @param mu Maximum cross-entropy. This value is initialized to be twice the target cross-entropy (`2 * tau`) and is updated in the algorithm based on the error between the target and observed surprisal. + LLAMA_API struct llama_sampler * llama_sampler_init_mirostat_v2( + uint32_t seed, + float tau, + float eta); + + /// @details Intializes a GBNF grammar, see grammars/README.md for details. + /// @param vocab The vocabulary that this grammar will be used with. + /// @param grammar_str The production rules for the grammar, encoded as a string. Returns an empty grammar if empty. Returns NULL if parsing of grammar_str fails. + /// @param grammar_root The name of the start symbol for the grammar. + LLAMA_API struct llama_sampler * llama_sampler_init_grammar( + const struct llama_vocab * vocab, + const char * grammar_str, + const char * grammar_root); + + DEPRECATED(LLAMA_API struct llama_sampler * llama_sampler_init_grammar_lazy( + const struct llama_vocab * vocab, + const char * grammar_str, + const char * grammar_root, + const char ** trigger_words, + size_t num_trigger_words, + const llama_token * trigger_tokens, + size_t num_trigger_tokens), + "use llama_sampler_init_grammar_lazy_patterns instead"); + + + /// @details Lazy grammar sampler, introduced in https://github.com/ggml-org/llama.cpp/pull/9639 + /// @param trigger_patterns A list of patterns that will trigger the grammar sampler. Pattern will be matched from the start of the generation output, and grammar sampler will be fed content starting from its first match group. + /// @param trigger_tokens A list of tokens that will trigger the grammar sampler. Grammar sampler will be fed content starting from the trigger token included. + LLAMA_API struct llama_sampler * llama_sampler_init_grammar_lazy_patterns( + const struct llama_vocab * vocab, + const char * grammar_str, + const char * grammar_root, + const char ** trigger_patterns, + size_t num_trigger_patterns, + const llama_token * trigger_tokens, + size_t num_trigger_tokens); + + + /// NOTE: Avoid using on the full vocabulary as searching for repeated tokens can become slow. For example, apply top-k or top-p sampling first. + LLAMA_API struct llama_sampler * llama_sampler_init_penalties( + int32_t penalty_last_n, // last n tokens to penalize (0 = disable penalty, -1 = context size) + float penalty_repeat, // 1.0 = disabled + float penalty_freq, // 0.0 = disabled + float penalty_present); // 0.0 = disabled + + /// @details DRY sampler, designed by p-e-w, as described in: https://github.com/oobabooga/text-generation-webui/pull/5677, porting Koboldcpp implementation authored by pi6am: https://github.com/LostRuins/koboldcpp/pull/982 + LLAMA_API struct llama_sampler * llama_sampler_init_dry( + const struct llama_vocab * vocab, + int32_t n_ctx_train, + float dry_multiplier, + float dry_base, + int32_t dry_allowed_length, + int32_t dry_penalty_last_n, + const char ** seq_breakers, + size_t num_breakers); + + LLAMA_API struct llama_sampler * llama_sampler_init_logit_bias( + int32_t n_vocab, + int32_t n_logit_bias, + const llama_logit_bias * logit_bias); + + // this sampler is meant to be used for fill-in-the-middle infilling + // it's supposed to be used after top_k + top_p sampling + // + // 1. if the sum of the EOG probs times the number of candidates is higher than the sum of the other probs -> pick EOG + // 2. combine probs of tokens that have the same prefix + // + // example: + // + // - before: + // "hel": 0.5 + // "hell": 0.2 + // "hello": 0.1 + // "dummy": 0.1 + // + // - after: + // "hel": 0.8 + // "dummy": 0.1 + // + // 3. discard non-EOG tokens with low prob + // 4. if no tokens are left -> pick EOT + // + LLAMA_API struct llama_sampler * llama_sampler_init_infill(const struct llama_vocab * vocab); + + // Returns the seed used by the sampler if applicable, LLAMA_DEFAULT_SEED otherwise + LLAMA_API uint32_t llama_sampler_get_seed(const struct llama_sampler * smpl); + + /// @details Sample and accept a token from the idx-th output of the last evaluation + // + // Shorthand for: + // const auto * logits = llama_get_logits_ith(ctx, idx); + // llama_token_data_array cur_p = { ... init from logits ... }; + // llama_sampler_apply(smpl, &cur_p); + // auto token = cur_p.data[cur_p.selected].id; + // llama_sampler_accept(smpl, token); + // return token; + // Returns the sampled token + LLAMA_API llama_token llama_sampler_sample(struct llama_sampler * smpl, struct llama_context * ctx, int32_t idx); + + // TODO: extend in the future + //LLAMA_API void llama_decode_with_sampler(struct llama_context * ctx, struct llama_sampler * smpl, struct llama_batch batch, ...); + + // + // Model split + // + + /// @details Build a split GGUF final path for this chunk. + /// llama_split_path(split_path, sizeof(split_path), "/models/ggml-model-q4_0", 2, 4) => split_path = "/models/ggml-model-q4_0-00002-of-00004.gguf" + // Returns the split_path length. + LLAMA_API int llama_split_path(char * split_path, size_t maxlen, const char * path_prefix, int split_no, int split_count); + + /// @details Extract the path prefix from the split_path if and only if the split_no and split_count match. + /// llama_split_prefix(split_prefix, 64, "/models/ggml-model-q4_0-00002-of-00004.gguf", 2, 4) => split_prefix = "/models/ggml-model-q4_0" + // Returns the split_prefix length. + LLAMA_API int llama_split_prefix(char * split_prefix, size_t maxlen, const char * split_path, int split_no, int split_count); + + // Print system information + LLAMA_API const char * llama_print_system_info(void); + + // Set callback for all future logging events. + // If this is not called, or NULL is supplied, everything is output on stderr. + LLAMA_API void llama_log_set(ggml_log_callback log_callback, void * user_data); + + // + // Performance utils + // + // NOTE: Used by llama.cpp examples/tools, avoid using in third-party apps. Instead, do your own performance measurements. + // + + struct llama_perf_context_data { + // ms == milliseconds + double t_start_ms; // absolute start time + double t_load_ms; // time needed for loading the model + double t_p_eval_ms; // time needed for processing the prompt + double t_eval_ms; // time needed for generating tokens + + int32_t n_p_eval; // number of prompt tokens + int32_t n_eval; // number of generated tokens + int32_t n_reused; // number of times a ggml compute graph had been reused + }; + + struct llama_perf_sampler_data { + double t_sample_ms; // time needed for sampling in ms + + int32_t n_sample; // number of sampled tokens + }; + + LLAMA_API struct llama_perf_context_data llama_perf_context (const struct llama_context * ctx); + LLAMA_API void llama_perf_context_print(const struct llama_context * ctx); + LLAMA_API void llama_perf_context_reset( struct llama_context * ctx); + + // NOTE: the following work only with samplers constructed via llama_sampler_chain_init + LLAMA_API struct llama_perf_sampler_data llama_perf_sampler (const struct llama_sampler * chain); + LLAMA_API void llama_perf_sampler_print(const struct llama_sampler * chain); + LLAMA_API void llama_perf_sampler_reset( struct llama_sampler * chain); + + // print a breakdown of per-device memory use via LLAMA_LOG: + LLAMA_API void llama_memory_breakdown_print(const struct llama_context * ctx); + + // + // training + // + + // function that returns whether or not a given tensor contains trainable parameters + typedef bool (*llama_opt_param_filter)(const struct ggml_tensor * tensor, void * userdata); + + // always returns true + LLAMA_API bool llama_opt_param_filter_all(const struct ggml_tensor * tensor, void * userdata); + + struct llama_opt_params { + uint32_t n_ctx_train; // assumed context size post training, use context size specified in llama_context if 0 + + llama_opt_param_filter param_filter; // callback for determining which tensors contain trainable parameters + void * param_filter_ud; // userdata for determining which tensors contain trainable parameters + + ggml_opt_get_optimizer_params get_opt_pars; // callback for calculating optimizer parameters + void * get_opt_pars_ud; // userdata for calculating optimizer parameters + + enum ggml_opt_optimizer_type optimizer_type; + }; + + LLAMA_API void llama_opt_init(struct llama_context * lctx, struct llama_model * model, struct llama_opt_params lopt_params); + + LLAMA_API void llama_opt_epoch( + struct llama_context * lctx, + ggml_opt_dataset_t dataset, + ggml_opt_result_t result_train, + ggml_opt_result_t result_eval, + int64_t idata_split, + ggml_opt_epoch_callback callback_train, + ggml_opt_epoch_callback callback_eval); + +#ifdef __cplusplus +} +#endif + +#endif // LLAMA_H diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Info.plist b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Info.plist new file mode 100644 index 00000000..45bf5fcf --- /dev/null +++ b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + Llama + CFBundleIdentifier + io.github.netdur.llama_cpp_dart + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Llama + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.1.0 + CFBundleVersion + 0.1.0 + MinimumOSVersion + 13.0 + + \ No newline at end of file diff --git a/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Llama b/ios/Llama.xcframework/ios-arm64_x86_64-simulator/Llama.framework/Llama new file mode 100755 index 0000000000000000000000000000000000000000..2978dfc82f45b95bb3d1586b4f0367695df10b66 GIT binary patch literal 1277312 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

gn@`!#Y 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Ǣ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�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

JT@G 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 cw1@znXs4n z_FxwD%YZY0&sn_I0e=NbfiZxeHQ+|#ehvH_cCui0d= zbl~?kgd_0c1RdmP=?o6cbD2l&hyH?%Mj)V&LGh#%$5&XA{tI6fhL2eZTT+Vold$x- z`;r~REYiEPcTK@FFTcq_b9y&pLl~0O6FFl{VH|ZcXiy0QZlD`zdGqd-c{mg zt~a=}&0LyCz(WP6IWW%SS1Ai;_Ev|GXuI5s7S~VK{3QLC7R~8s%$PWC({|J|oQtVe%Cw^u z{4M&03f(WEEGUH5OXx5a+9;v2W1V(X5)}1Op~oatHfz(4N`j*At56|8i|HIfB|(v~ z7#xBp_f?Zo=9Cr7oLaHu0fJcDy1(ayG{x3Mhc?^KSZ()%hLsVkm!JjdiH5GBq0&O1 z8R2c-NzTCbtNe6n$F-CdHw4MBJPeylH*2IeuHtx z$oEOf_*8hRsUqAR*)@UKU2Ml;iT0U2BbUi(OXJj{XGj*^Ecd6)@V#w%u$3|WU!VuS zp_qR+dN9`fw)EgS`sPd96!mf}$zEqX_z=^edO%(wosYd`p+@p=Ng;nY=oK2%2ZFcC z8~rcoZ%K6w*W6Q+_>trNe^tL86gFamlr_ffbb(eavXqcnFmd?D$prG@xB z*_%*9Y)oH)+ogI*$uP#(&qV*E>+ys9#>Y>z&2=yy{26mAQKe@oMXEH7-{w_f{L&}A zCgXPxak@T5*Q%R^HpXruHrds8T8tY#q&_=26xmG|Irf_a)cyVQf{Ch|^fLET=g)3h zo?8(;pqoT{qwlNx{P_I8ZfNi+5l}D|J}Qz6JiO$Ta2eR-3C{3HKE&0s z@9PMCO4^i*UXk)m7dGRsyRb?Fe1`HNX&HcgnpL4Bt`npJmO)0YHq_& zcjbqAy>8%*1gyJ7EoO;!=ShN8^~`b_T0nLd3|kLp1=DWGm7n@_2bGdznVpimV& zD2Ivg(qaklWUu#_n>_vGIBZORn`rMMHq-L2nJ^w-(!y-^CO;>UFR=A z)cmRCUe4h6P zpqla+>bQ#E_Z2KNO8-dpeW8Icq7P6^YEd5~Jl-RWcgjb-*~`4smPuP=w`Au}k---n z)sW*iyP_nZ${Sl%9F5Y!`>|=2I&r9{atEF!p^DS0BtIiy&+iMms&jm1T9r6@`b<|< zqqwrfwO?FZB)Y1?aG{QIoGq>mIUVMp9OO+xU6)5v86Trt%Iln6PUf8QUx1u*?f}Yw z7l6fp{d;kGg|wW~iqP!jatQ?qwfzM{D<>CrYHIz{%O#7)Z0QXxQo^}I%ar&p{Id{C z*{$u7bIYeNoZ`zv76nm<-Gy$`#-qW}KfW4yINhc8sMN-x>ofx46&X>UxwlbJ<5rD2hI z#ERHvWuz~Bka;h(ODTT9vzS2nmnn0#a&MMmG40OcCI>-5r`(zt?xRl8;%6RZQOa?K zCS-aU-pcKnsMPiu?suJrd%wKGX2lBKFSTOrJ8g~ZiQ^M)$;0C=QQum^VTVJaygDV z&CSlHYS+wr9Z>|Gt^1n<{wjITgzzCd%Y^vN?T{M5;;(43TnM8`%zosM^Y9Q#EKL^5K_SEZDUlRG&fKhV18tIyfM zo}_L^$D`(EvybZUHqYqI&nukINBT_vOqc0?N3@|k&G&d8KTGe_r9agk`W)CN(w|Fd zXOQhtGfB&KMqrxiOjU2&5$=t6XYP|d+IujlIP2fPgc;A?8YxRkvK`ka-l|S;o}kJW zzh~hDr|(%{NZ@pLY~lo`H)wEMRZ{2Ss;1(LqHH*V@1N%58mb8g~8!kF8g zXqgtwg862b9d&nXbX1v>G_S>KS+rZCO-wf>j-}g#4g=LDq^jm1Uz%>rPVDWH}FCKEJuy; z*1Euf`aorOUTL`21xJ7sBT5{VrhhIyL!oFch=3>0(VLhIc#EM-Aju&Vg$a^8&63or z8`~QJFJ!OfjPqUiQXEM>lVO-|l`(=cmI!mB4MZ`f|A<&Y7BpO_9eteFX)PK_Ugtgw zSrnT_C55_oGs;e;DiMfyvhqK&KKvnzWvj{~p!q)v!<)0~T2}sZgbSnt=1@jbK$FsJ zSZ+)g_ToQZd82q(?LiDEa(kaXOGz`C6JweslN&&t3|bxU4WsBv z632@2p#mOizn_*>SJaQQ@M^ zLN?>{A~3Z!1u55`D6W#4$y(sX>P6&NSOrzMq%=w|C831VH^p73-4){QtKBQaov+>KcAPgPPrEVw zJ8wvic4J|C-jH6}jX}kELwaiW7IF8`Zj4jS8g8>mjlw-q>2B^a)lIo;q9&*2?>ydTXKT z%nlSe$nKL0+2J6#7+V!M(k)p0=H$0HVx7r`$}=Y8A&+ByY`Zh)>QO@JgYJu5toPFK zMF*)_ zElGct_&-egyNbU)>F*-`ok@Qu@rRTCO!4nY`ZL5Y5LoZ

8dwPY1$YXW0Zayd0bCCZ0)7Ns1e^_Y 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 z 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 z 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

K|(>+1K=a|QQ${k%Vh?}hNxZhQp< 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%0DLT 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

Tt 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

@(t1R5L%EXAbg18v&r0I_N+sKhwFs2W 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 OA@>yYXMCnHZgu&RaVvCP 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≈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

=W!Jd$7F|w%V!vPW{#T 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 literal 0 HcmV?d00001 diff --git a/ios/llama_cpp_dart.podspec b/ios/llama_cpp_dart.podspec new file mode 100644 index 00000000..322c9bb3 --- /dev/null +++ b/ios/llama_cpp_dart.podspec @@ -0,0 +1,18 @@ +Pod::Spec.new do |s| + s.name = 'llama_cpp_dart' + s.version = '0.9.0-dev.9' + s.summary = 'Dart / Flutter FFI binding for llama.cpp' + s.description = 'High-level Dart and Flutter bindings for llama.cpp on iOS, macOS, and Android.' + s.homepage = 'https://github.com/netdur/llama_cpp_dart' + s.license = { :type => 'MIT', :file => '../LICENSE' } + s.author = { 'Adel Abdelaty' => 'netdur@gmail.com' } + s.source = { :path => '.' } + + s.ios.deployment_target = '14.0' + s.osx.deployment_target = '11.0' + + s.vendored_frameworks = 'Llama.xcframework' + + s.frameworks = 'Metal', 'MetalKit', 'Foundation', 'Accelerate' + s.dependency 'Flutter' +end diff --git a/pubspec.yaml b/pubspec.yaml index e188144c..06f12e43 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -32,3 +32,17 @@ ffigen: - '-Isrc/llama.cpp/tools/mtmd' preamble: | // ignore_for_file: type=lint, type=warning, unused_field, unused_element, camel_case_types, non_constant_identifier_names + +flutter: + plugin: + platforms: + android: + ffiPlugin: true + ios: + ffiPlugin: true + macos: + ffiPlugin: true + windows: + ffiPlugin: true + linux: + ffiPlugin: true From 63e1e4485fef0942e441fc2b213bd238f4b53827 Mon Sep 17 00:00:00 2001 From: sebasbad Date: Mon, 27 Jul 2026 17:46:14 +0200 Subject: [PATCH 2/2] fix(flutter): restrict ffiPlugin platforms to android, ios, and macos as specified in README --- pubspec.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index 06f12e43..6e57d40f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -42,7 +42,3 @@ flutter: ffiPlugin: true macos: ffiPlugin: true - windows: - ffiPlugin: true - linux: - ffiPlugin: true

CK56!f< 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 O^d8+wXj%&j3jQBlI|-x! literal 0 HcmV?d00001 diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-alloc.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-alloc.h new file mode 100644 index 00000000..2cb150fd --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-alloc.h @@ -0,0 +1,76 @@ +#pragma once + +#include "ggml.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ggml_backend_buffer_type * ggml_backend_buffer_type_t; +typedef struct ggml_backend_buffer * ggml_backend_buffer_t; +typedef struct ggml_backend * ggml_backend_t; + +// Tensor allocator +struct ggml_tallocr { + ggml_backend_buffer_t buffer; + void * base; + size_t alignment; + size_t offset; +}; + +GGML_API struct ggml_tallocr ggml_tallocr_new(ggml_backend_buffer_t buffer); +GGML_API enum ggml_status ggml_tallocr_alloc(struct ggml_tallocr * talloc, struct ggml_tensor * tensor); + +// Graph allocator +/* + Example usage: + ggml_gallocr_t galloc = ggml_gallocr_new(ggml_backend_cpu_buffer_type()); + + // optional: create a worst-case graph and reserve the buffers to avoid reallocations + ggml_gallocr_reserve(galloc, build_graph(max_batch)); + + // allocate the graph + struct ggml_cgraph * graph = build_graph(batch); + ggml_gallocr_alloc_graph(galloc, graph); + + printf("compute buffer size: %zu bytes\n", ggml_gallocr_get_buffer_size(galloc, 0)); + + // evaluate the graph + ggml_backend_graph_compute(backend, graph); +*/ + +// special tensor flags for use with the graph allocator: +// ggml_set_input(): all input tensors are allocated at the beginning of the graph in non-overlapping addresses +// ggml_set_output(): output tensors are never freed and never overwritten + +typedef struct ggml_gallocr * ggml_gallocr_t; + +GGML_API ggml_gallocr_t ggml_gallocr_new(ggml_backend_buffer_type_t buft); +GGML_API ggml_gallocr_t ggml_gallocr_new_n(ggml_backend_buffer_type_t * bufts, int n_bufs); +GGML_API void ggml_gallocr_free(ggml_gallocr_t galloc); + +// pre-allocate buffers from a measure graph - does not allocate or modify the graph +// call with a worst-case graph to avoid buffer reallocations +// not strictly required for single buffer usage: ggml_gallocr_alloc_graph will reallocate the buffers automatically if needed +// returns false if the buffer allocation failed +GGML_API bool ggml_gallocr_reserve(ggml_gallocr_t galloc, struct ggml_cgraph * graph); +GGML_API bool ggml_gallocr_reserve_n( + ggml_gallocr_t galloc, + struct ggml_cgraph * graph, + const int * node_buffer_ids, + const int * leaf_buffer_ids); + +// automatic reallocation if the topology changes when using a single buffer +// returns false if using multiple buffers and a re-allocation is needed (call ggml_gallocr_reserve_n first to set the node buffers) +GGML_API bool ggml_gallocr_alloc_graph(ggml_gallocr_t galloc, struct ggml_cgraph * graph); + +GGML_API size_t ggml_gallocr_get_buffer_size(ggml_gallocr_t galloc, int buffer_id); + +// Utils +// Create a buffer and allocate all the tensors in a ggml_context +GGML_API struct ggml_backend_buffer * ggml_backend_alloc_ctx_tensors_from_buft(struct ggml_context * ctx, ggml_backend_buffer_type_t buft); +GGML_API struct ggml_backend_buffer * ggml_backend_alloc_ctx_tensors(struct ggml_context * ctx, ggml_backend_t backend); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-backend.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-backend.h new file mode 100644 index 00000000..f1b74078 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-backend.h @@ -0,0 +1,372 @@ +#pragma once + +#include "ggml.h" +#include "ggml-alloc.h" + +#ifdef GGML_BACKEND_SHARED +# if defined(_WIN32) && !defined(__MINGW32__) +# ifdef GGML_BACKEND_BUILD +# define GGML_BACKEND_API __declspec(dllexport) extern +# else +# define GGML_BACKEND_API __declspec(dllimport) extern +# endif +# else +# define GGML_BACKEND_API __attribute__ ((visibility ("default"))) extern +# endif +#else +# define GGML_BACKEND_API extern +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + typedef struct ggml_backend_buffer_type * ggml_backend_buffer_type_t; + typedef struct ggml_backend_buffer * ggml_backend_buffer_t; + typedef struct ggml_backend_event * ggml_backend_event_t; + typedef struct ggml_backend * ggml_backend_t; + typedef void * ggml_backend_graph_plan_t; + typedef struct ggml_backend_reg * ggml_backend_reg_t; + typedef struct ggml_backend_device * ggml_backend_dev_t; + + + // + // Backend buffer type + // + + GGML_API const char * ggml_backend_buft_name (ggml_backend_buffer_type_t buft); + GGML_API ggml_backend_buffer_t ggml_backend_buft_alloc_buffer (ggml_backend_buffer_type_t buft, size_t size); + GGML_API size_t ggml_backend_buft_get_alignment (ggml_backend_buffer_type_t buft); + GGML_API size_t ggml_backend_buft_get_max_size (ggml_backend_buffer_type_t buft); + GGML_API size_t ggml_backend_buft_get_alloc_size(ggml_backend_buffer_type_t buft, const struct ggml_tensor * tensor); + GGML_API bool ggml_backend_buft_is_host (ggml_backend_buffer_type_t buft); + GGML_API ggml_backend_dev_t ggml_backend_buft_get_device (ggml_backend_buffer_type_t buft); + + // + // Backend buffer + // + + enum ggml_backend_buffer_usage { + GGML_BACKEND_BUFFER_USAGE_ANY = 0, + GGML_BACKEND_BUFFER_USAGE_WEIGHTS = 1, + GGML_BACKEND_BUFFER_USAGE_COMPUTE = 2, + }; + + GGML_API const char * ggml_backend_buffer_name (ggml_backend_buffer_t buffer); + GGML_API void ggml_backend_buffer_free (ggml_backend_buffer_t buffer); + GGML_API void * ggml_backend_buffer_get_base (ggml_backend_buffer_t buffer); + GGML_API size_t ggml_backend_buffer_get_size (ggml_backend_buffer_t buffer); + GGML_API enum ggml_status ggml_backend_buffer_init_tensor (ggml_backend_buffer_t buffer, struct ggml_tensor * tensor); + GGML_API size_t ggml_backend_buffer_get_alignment (ggml_backend_buffer_t buffer); + GGML_API size_t ggml_backend_buffer_get_max_size (ggml_backend_buffer_t buffer); + GGML_API size_t ggml_backend_buffer_get_alloc_size(ggml_backend_buffer_t buffer, const struct ggml_tensor * tensor); + GGML_API void ggml_backend_buffer_clear (ggml_backend_buffer_t buffer, uint8_t value); + GGML_API bool ggml_backend_buffer_is_host (ggml_backend_buffer_t buffer); + GGML_API void ggml_backend_buffer_set_usage (ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage); + GGML_API enum ggml_backend_buffer_usage ggml_backend_buffer_get_usage (ggml_backend_buffer_t buffer); + GGML_API ggml_backend_buffer_type_t ggml_backend_buffer_get_type (ggml_backend_buffer_t buffer); + GGML_API void ggml_backend_buffer_reset (ggml_backend_buffer_t buffer); + + // tensor copy between different backends + GGML_API void ggml_backend_tensor_copy(struct ggml_tensor * src, struct ggml_tensor * dst); + + // + // Backend (stream) + // + + GGML_API ggml_guid_t ggml_backend_guid(ggml_backend_t backend); + GGML_API const char * ggml_backend_name(ggml_backend_t backend); + GGML_API void ggml_backend_free(ggml_backend_t backend); + + GGML_API ggml_backend_buffer_type_t ggml_backend_get_default_buffer_type(ggml_backend_t backend); + GGML_API ggml_backend_buffer_t ggml_backend_alloc_buffer(ggml_backend_t backend, size_t size); + GGML_API size_t ggml_backend_get_alignment(ggml_backend_t backend); + GGML_API size_t ggml_backend_get_max_size(ggml_backend_t backend); + + GGML_API void ggml_backend_tensor_set_async(ggml_backend_t backend, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size); + GGML_API void ggml_backend_tensor_get_async(ggml_backend_t backend, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size); + + // "offset" refers to the offset in tensor->data for setting/getting data + GGML_API void ggml_backend_tensor_set( struct ggml_tensor * tensor, const void * data, size_t offset, size_t size); + GGML_API void ggml_backend_tensor_get(const struct ggml_tensor * tensor, void * data, size_t offset, size_t size); + GGML_API void ggml_backend_tensor_memset( struct ggml_tensor * tensor, uint8_t value, size_t offset, size_t size); + + GGML_API void ggml_backend_synchronize(ggml_backend_t backend); + + GGML_API ggml_backend_graph_plan_t ggml_backend_graph_plan_create(ggml_backend_t backend, struct ggml_cgraph * cgraph); + GGML_API void ggml_backend_graph_plan_free (ggml_backend_t backend, ggml_backend_graph_plan_t plan); + + GGML_API enum ggml_status ggml_backend_graph_plan_compute (ggml_backend_t backend, ggml_backend_graph_plan_t plan); + GGML_API enum ggml_status ggml_backend_graph_compute (ggml_backend_t backend, struct ggml_cgraph * cgraph); + GGML_API enum ggml_status ggml_backend_graph_compute_async(ggml_backend_t backend, struct ggml_cgraph * cgraph); + + // NOTE: will be removed, use device version instead + GGML_API bool ggml_backend_supports_op(ggml_backend_t backend, const struct ggml_tensor * op); + GGML_API bool ggml_backend_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft); + GGML_API bool ggml_backend_offload_op(ggml_backend_t backend, const struct ggml_tensor * op); + + // asynchronous copy + // the copy is performed after all the currently queued operations in backend_src + // backend_dst will wait for the copy to complete before performing other operations + // automatic fallback to sync copy if async is not supported + GGML_API void ggml_backend_tensor_copy_async(ggml_backend_t backend_src, ggml_backend_t backend_dst, struct ggml_tensor * src, struct ggml_tensor * dst); + + GGML_API ggml_backend_dev_t ggml_backend_get_device(ggml_backend_t backend); + + // + // Events + // + + GGML_API ggml_backend_event_t ggml_backend_event_new(ggml_backend_dev_t device); + GGML_API void ggml_backend_event_free(ggml_backend_event_t event); + GGML_API void ggml_backend_event_record(ggml_backend_event_t event, ggml_backend_t backend); + GGML_API void ggml_backend_event_synchronize(ggml_backend_event_t event); + GGML_API void ggml_backend_event_wait(ggml_backend_t backend, ggml_backend_event_t event); + + // + // Backend device + // + + enum ggml_backend_dev_type { + // CPU device using system memory + GGML_BACKEND_DEVICE_TYPE_CPU, + // GPU device using dedicated memory + GGML_BACKEND_DEVICE_TYPE_GPU, + // integrated GPU device using host memory + GGML_BACKEND_DEVICE_TYPE_IGPU, + // accelerator devices intended to be used together with the CPU backend (e.g. BLAS or AMX) + GGML_BACKEND_DEVICE_TYPE_ACCEL + }; + + // functionality supported by the device + struct ggml_backend_dev_caps { + // asynchronous operations + bool async; + // pinned host buffer + bool host_buffer; + // creating buffers from host ptr + bool buffer_from_host_ptr; + // event synchronization + bool events; + }; + + // all the device properties + struct ggml_backend_dev_props { + // device name + const char * name; + // device description + const char * description; + // device free memory in bytes + size_t memory_free; + // device total memory in bytes + size_t memory_total; + // device type + enum ggml_backend_dev_type type; + // device id + // for PCI devices, this should be the PCI bus id formatted as "domain:bus:device.function" (e.g. "0000:01:00.0") + // if the id is unknown, this should be NULL + const char * device_id; + // device capabilities + struct ggml_backend_dev_caps caps; + }; + + GGML_API const char * ggml_backend_dev_name(ggml_backend_dev_t device); + GGML_API const char * ggml_backend_dev_description(ggml_backend_dev_t device); + GGML_API void ggml_backend_dev_memory(ggml_backend_dev_t device, size_t * free, size_t * total); + GGML_API enum ggml_backend_dev_type ggml_backend_dev_type(ggml_backend_dev_t device); + GGML_API void ggml_backend_dev_get_props(ggml_backend_dev_t device, struct ggml_backend_dev_props * props); + GGML_API ggml_backend_reg_t ggml_backend_dev_backend_reg(ggml_backend_dev_t device); + GGML_API ggml_backend_t ggml_backend_dev_init(ggml_backend_dev_t device, const char * params); + GGML_API ggml_backend_buffer_type_t ggml_backend_dev_buffer_type(ggml_backend_dev_t device); + GGML_API ggml_backend_buffer_type_t ggml_backend_dev_host_buffer_type(ggml_backend_dev_t device); + GGML_API ggml_backend_buffer_t ggml_backend_dev_buffer_from_host_ptr(ggml_backend_dev_t device, void * ptr, size_t size, size_t max_tensor_size); + + GGML_API bool ggml_backend_dev_supports_op(ggml_backend_dev_t device, const struct ggml_tensor * op); + GGML_API bool ggml_backend_dev_supports_buft(ggml_backend_dev_t device, ggml_backend_buffer_type_t buft); + GGML_API bool ggml_backend_dev_offload_op(ggml_backend_dev_t device, const struct ggml_tensor * op); + + // + // Backend (reg) + // + + GGML_API const char * ggml_backend_reg_name(ggml_backend_reg_t reg); + GGML_API size_t ggml_backend_reg_dev_count(ggml_backend_reg_t reg); + GGML_API ggml_backend_dev_t ggml_backend_reg_dev_get(ggml_backend_reg_t reg, size_t index); + GGML_API void * ggml_backend_reg_get_proc_address(ggml_backend_reg_t reg, const char * name); + + // Common functions that may be obtained using ggml_backend_reg_get_proc_address + + // Split buffer type for tensor parallelism + typedef ggml_backend_buffer_type_t (*ggml_backend_split_buffer_type_t)(int main_device, const float * tensor_split); + // Set the number of threads for the backend + typedef void (*ggml_backend_set_n_threads_t)(ggml_backend_t backend, int n_threads); + // Get additional buffer types provided by the device (returns a NULL-terminated array) + typedef ggml_backend_buffer_type_t * (*ggml_backend_dev_get_extra_bufts_t)(ggml_backend_dev_t device); + // Set the abort callback for the backend + typedef void (*ggml_backend_set_abort_callback_t)(ggml_backend_t backend, ggml_abort_callback abort_callback, void * abort_callback_data); + // Get a list of feature flags supported by the backend (returns a NULL-terminated array) + struct ggml_backend_feature { + const char * name; + const char * value; + }; + typedef struct ggml_backend_feature * (*ggml_backend_get_features_t)(ggml_backend_reg_t reg); + + // + // Backend registry + // + + GGML_API void ggml_backend_register(ggml_backend_reg_t reg); + + GGML_API void ggml_backend_device_register(ggml_backend_dev_t device); + + // Backend (reg) enumeration + GGML_API size_t ggml_backend_reg_count(void); + GGML_API ggml_backend_reg_t ggml_backend_reg_get(size_t index); + GGML_API ggml_backend_reg_t ggml_backend_reg_by_name(const char * name); + + // Device enumeration + GGML_API size_t ggml_backend_dev_count(void); + GGML_API ggml_backend_dev_t ggml_backend_dev_get(size_t index); + GGML_API ggml_backend_dev_t ggml_backend_dev_by_name(const char * name); + GGML_API ggml_backend_dev_t ggml_backend_dev_by_type(enum ggml_backend_dev_type type); + + // Direct backend (stream) initialization + // = ggml_backend_dev_init(ggml_backend_dev_by_name(name), params) + GGML_API ggml_backend_t ggml_backend_init_by_name(const char * name, const char * params); + // = ggml_backend_dev_init(ggml_backend_dev_by_type(type), params) + GGML_API ggml_backend_t ggml_backend_init_by_type(enum ggml_backend_dev_type type, const char * params); + // = ggml_backend_dev_init(ggml_backend_dev_by_type(GPU) OR ggml_backend_dev_by_type(CPU), NULL) + GGML_API ggml_backend_t ggml_backend_init_best(void); + + // Load a backend from a dynamic library and register it + GGML_API ggml_backend_reg_t ggml_backend_load(const char * path); + // Unload a backend if loaded dynamically and unregister it + GGML_API void ggml_backend_unload(ggml_backend_reg_t reg); + // Load all known backends from dynamic libraries + GGML_API void ggml_backend_load_all(void); + GGML_API void ggml_backend_load_all_from_path(const char * dir_path); + + // + // Backend scheduler + // + + // The backend scheduler allows for multiple backend devices to be used together + // Handles compute buffer allocation, assignment of tensors to backends, and copying of tensors between backends + // The backends are selected based on: + // - the backend that supports the operation + // - the location of the pre-allocated tensors (e.g. the weights) + /* + Example usage: + + // operations that use tensors allocated in a buffer with USAGE_WEIGHTS will be assigned + // preferrably to run on the same backend as the buffer + ggml_backend_buffer_set_usage(buf_weights, GGML_BACKEND_BUFFER_USAGE_WEIGHTS); + + sched = ggml_backend_sched_new({backend_gpu, backend_gpu2, backend_cpu}, NULL, num_backends, GGML_DEFAULT_GRAPH_SIZE, false, true); + + // initialize buffers from a max size graph (optional) + reserve_graph = build_graph(sched, max_batch_size); + + // manually assign nodes to a backend (optional, should not be needed in most cases) + struct ggml_tensor * node = ggml_mul_mat(ctx, ...); + ggml_backend_sched_set_tensor_backend(sched, node, backend_gpu); + + ggml_backend_sched_reserve(sched, reserve_graph); + + // compute + graph = build_graph(sched); // the graph and its tensors are single-use in terms of allocation, multi-use in terms of computation + for (int i = 0; i < 10; ++i) { + ggml_backend_sched_graph_compute(sched, graph); // on the first iteration the graph is allocated automatically + } + + // if there are graph inputs: + graph = build_graph(sched); // get a new graph that is not allocated (the metadata for the old graph is freed once ggml_free is called) + ggml_backend_sched_reset(sched); // clear the allocation of the previous graph + ggml_backend_sched_alloc_graph(sched, graph); // explicitly allocate the new graph but do not execute it + ggml_backend_tensor_set(input_tensor, ...); // copy data to the newly allocated graph tensors + ggml_backend_sched_graph_compute(sched, graph); // execute the graph + + // as an alternative to the above it is also possible to assign the inputs to a dedicated context and + // allocate them statically via ggml_backend_alloc_ctx_tensors + } + */ + + typedef struct ggml_backend_sched * ggml_backend_sched_t; + + // Evaluation callback for each node in the graph (set with ggml_backend_sched_set_eval_callback) + // when ask == true, the scheduler wants to know if the user wants to observe this node + // this allows the scheduler to batch nodes together in order to evaluate them in a single call + // + // when ask == false, the scheduler is passing the node tensor to the user for observation + // if the user returns false, the scheduler will cancel the graph compute + // + typedef bool (*ggml_backend_sched_eval_callback)(struct ggml_tensor * t, bool ask, void * user_data); + + // Initialize a backend scheduler, backends with low index are given priority over backends with high index + GGML_API ggml_backend_sched_t ggml_backend_sched_new(ggml_backend_t * backends, ggml_backend_buffer_type_t * bufts, int n_backends, size_t graph_size, bool parallel, bool op_offload); + GGML_API void ggml_backend_sched_free(ggml_backend_sched_t sched); + + // Initialize backend buffers from a measure graph + GGML_API bool ggml_backend_sched_reserve(ggml_backend_sched_t sched, struct ggml_cgraph * measure_graph); // returns success + + GGML_API int ggml_backend_sched_get_n_backends(ggml_backend_sched_t sched); + GGML_API ggml_backend_t ggml_backend_sched_get_backend(ggml_backend_sched_t sched, int i); + + // Get the number of splits of the last graph + GGML_API int ggml_backend_sched_get_n_splits(ggml_backend_sched_t sched); + GGML_API int ggml_backend_sched_get_n_copies(ggml_backend_sched_t sched); + + GGML_API ggml_backend_buffer_type_t ggml_backend_sched_get_buffer_type(ggml_backend_sched_t sched, ggml_backend_t backend); + GGML_API size_t ggml_backend_sched_get_buffer_size(ggml_backend_sched_t sched, ggml_backend_t backend); + + GGML_API void ggml_backend_sched_set_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node, ggml_backend_t backend); + GGML_API ggml_backend_t ggml_backend_sched_get_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node); + + // Split graph without allocating it + GGML_API void ggml_backend_sched_split_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph); + + // Allocate and compute graph on the backend scheduler + GGML_API bool ggml_backend_sched_alloc_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph); // returns success + GGML_API enum ggml_status ggml_backend_sched_graph_compute(ggml_backend_sched_t sched, struct ggml_cgraph * graph); + GGML_API enum ggml_status ggml_backend_sched_graph_compute_async(ggml_backend_sched_t sched, struct ggml_cgraph * graph); + GGML_API void ggml_backend_sched_synchronize(ggml_backend_sched_t sched); + + // Reset all assignments and allocators - must be called before changing the node backends or allocating a new graph. + // This in effect deallocates all tensors that were previously allocated and leaves them with dangling pointers. + // The correct way to use this API is to discard the deallocated tensors and create new ones. + GGML_API void ggml_backend_sched_reset(ggml_backend_sched_t sched); + + // Set a callback to be called for each resulting node during graph compute + GGML_API void ggml_backend_sched_set_eval_callback(ggml_backend_sched_t sched, ggml_backend_sched_eval_callback callback, void * user_data); + + // + // Utils + // + + struct ggml_backend_graph_copy { + ggml_backend_buffer_t buffer; + struct ggml_context * ctx_allocated; + struct ggml_context * ctx_unallocated; + struct ggml_cgraph * graph; + }; + + // Copy a graph to a different backend + GGML_API struct ggml_backend_graph_copy ggml_backend_graph_copy(ggml_backend_t backend, struct ggml_cgraph * graph); + GGML_API void ggml_backend_graph_copy_free(struct ggml_backend_graph_copy copy); + + typedef bool (*ggml_backend_eval_callback)(int node_index, struct ggml_tensor * t1, struct ggml_tensor * t2, void * user_data); + + // Compare the output of two backends + GGML_API bool ggml_backend_compare_graph_backend(ggml_backend_t backend1, ggml_backend_t backend2, struct ggml_cgraph * graph, ggml_backend_eval_callback callback, void * user_data, struct ggml_tensor * test_node); + + // Tensor initialization + GGML_API enum ggml_status ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, void * addr); + GGML_API enum ggml_status ggml_backend_view_init(struct ggml_tensor * tensor); + + // CPU buffer types are always available + GGML_API ggml_backend_buffer_t ggml_backend_cpu_buffer_from_ptr(void * ptr, size_t size); + GGML_API ggml_backend_buffer_type_t ggml_backend_cpu_buffer_type(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-blas.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-blas.h new file mode 100644 index 00000000..87a81b36 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-blas.h @@ -0,0 +1,25 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_blas_init(void); + +GGML_BACKEND_API bool ggml_backend_is_blas(ggml_backend_t backend); + +// number of threads used for conversion to float +// for openblas and blis, this will also set the number of threads used for blas operations +GGML_BACKEND_API void ggml_backend_blas_set_n_threads(ggml_backend_t backend_blas, int n_threads); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_blas_reg(void); + + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cann.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cann.h new file mode 100644 index 00000000..b469e228 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cann.h @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2023-2024 The ggml authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#pragma once + +#include "ggml-backend.h" +#include "ggml.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Maximum number of CANN devices supported. + */ +#define GGML_CANN_MAX_DEVICES 16 + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_cann_reg(void); + +/** + * @brief Initializes the CANN backend for a specified device. + * + * This function initializes the CANN backend for the given device. + * It verifies the device index, allocates a context, and creates a backend + * instance. + * + * @param device The index of the device to initialize. + * @return A pointer to the initialized backend instance, or nullptr on failure. + */ +GGML_BACKEND_API ggml_backend_t ggml_backend_cann_init(int32_t device); + +/** + * @brief Checks if a given backend is a CANN backend. + * + * This function verifies if the provided backend is a CANN backend by comparing + * its GUID with the CANN backend's GUID. + * + * @param backend The backend instance to check. + * @return True if the backend is a CANN backend, false otherwise. + */ +GGML_BACKEND_API bool ggml_backend_is_cann(ggml_backend_t backend); + +/** + * @brief Retrieves the CANN buffer type for a specified device. + * + * This function initializes and returns the buffer type interface associated + * with the given device. It ensures thread-safe access using a mutex. + * + * @param device The device index for which to retrieve the buffer type. + * @return A pointer to the buffer type interface for the specified device, or + * nullptr if the device index is out of range. + */ +GGML_BACKEND_API ggml_backend_buffer_type_t +ggml_backend_cann_buffer_type(int32_t device); + +/** + * @brief Retrieves the number of CANN devices available. + * + * This function returns the number of CANN devices available based on + * information obtained from `ggml_cann_info()`. + * + * @return The number of CANN devices available. + */ +GGML_BACKEND_API int32_t ggml_backend_cann_get_device_count(void); + +/** + * @brief pinned host buffer for use with the CPU backend for faster copies between CPU and NPU. + * + * @return A pointer to the host buffer type interface. + */ +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_cann_host_buffer_type(void); + +/** + * @brief Retrieves the description of a specific CANN device. + * + * This function sets the specified device, retrieves the SoC name, + * and writes it into the provided description buffer. + * + * @param device The device index to retrieve the description for. + * @param description Pointer to a buffer where the description will be written. + * @param description_size Size of the description buffer. + */ +GGML_BACKEND_API void ggml_backend_cann_get_device_description( + int32_t device, char* description, size_t description_size); + +/** + * @brief Retrieves the memory information of a specific CANN device. + * + * This function sets the specified device, retrieves the free and total + * memory information of the specified type (ACL_HBM_MEM), and stores them + * in the provided pointers. + * + * @param device The device index to retrieve memory information for. + * @param free Pointer to a variable where the free memory size will be stored. + * @param total Pointer to a variable where the total memory size will be + * stored. + */ +GGML_BACKEND_API void ggml_backend_cann_get_device_memory(int32_t device, + size_t* free, + size_t* total); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cpp.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cpp.h new file mode 100644 index 00000000..48aa7968 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cpp.h @@ -0,0 +1,39 @@ +#pragma once + +#ifndef __cplusplus +#error "This header is for C++ only" +#endif + +#include "ggml.h" +#include "ggml-alloc.h" +#include "ggml-backend.h" +#include "gguf.h" +#include + +// Smart pointers for ggml types + +// ggml + +struct ggml_context_deleter { void operator()(ggml_context * ctx) { ggml_free(ctx); } }; +struct gguf_context_deleter { void operator()(gguf_context * ctx) { gguf_free(ctx); } }; + +typedef std::unique_ptr ggml_context_ptr; +typedef std::unique_ptr gguf_context_ptr; + +// ggml-alloc + +struct ggml_gallocr_deleter { void operator()(ggml_gallocr_t galloc) { ggml_gallocr_free(galloc); } }; + +typedef std::unique_ptr ggml_gallocr_ptr; + +// ggml-backend + +struct ggml_backend_deleter { void operator()(ggml_backend_t backend) { ggml_backend_free(backend); } }; +struct ggml_backend_buffer_deleter { void operator()(ggml_backend_buffer_t buffer) { ggml_backend_buffer_free(buffer); } }; +struct ggml_backend_event_deleter { void operator()(ggml_backend_event_t event) { ggml_backend_event_free(event); } }; +struct ggml_backend_sched_deleter { void operator()(ggml_backend_sched_t sched) { ggml_backend_sched_free(sched); } }; + +typedef std::unique_ptr ggml_backend_ptr; +typedef std::unique_ptr ggml_backend_buffer_ptr; +typedef std::unique_ptr ggml_backend_event_ptr; +typedef std::unique_ptr ggml_backend_sched_ptr; diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cpu.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cpu.h new file mode 100644 index 00000000..9edd4851 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cpu.h @@ -0,0 +1,145 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + + // the compute plan that needs to be prepared for ggml_graph_compute() + // since https://github.com/ggml-org/ggml/issues/287 + struct ggml_cplan { + size_t work_size; // size of work buffer, calculated by `ggml_graph_plan()` + uint8_t * work_data; // work buffer, to be allocated by caller before calling to `ggml_graph_compute()` + + int n_threads; + struct ggml_threadpool * threadpool; + + // abort ggml_graph_compute when true + ggml_abort_callback abort_callback; + void * abort_callback_data; + }; + + // numa strategies + enum ggml_numa_strategy { + GGML_NUMA_STRATEGY_DISABLED = 0, + GGML_NUMA_STRATEGY_DISTRIBUTE = 1, + GGML_NUMA_STRATEGY_ISOLATE = 2, + GGML_NUMA_STRATEGY_NUMACTL = 3, + GGML_NUMA_STRATEGY_MIRROR = 4, + GGML_NUMA_STRATEGY_COUNT + }; + + GGML_BACKEND_API void ggml_numa_init(enum ggml_numa_strategy numa); // call once for better performance on NUMA systems + GGML_BACKEND_API bool ggml_is_numa(void); // true if init detected that system has >1 NUMA node + + GGML_BACKEND_API struct ggml_tensor * ggml_new_i32(struct ggml_context * ctx, int32_t value); + GGML_BACKEND_API struct ggml_tensor * ggml_new_f32(struct ggml_context * ctx, float value); + + GGML_BACKEND_API struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value); + GGML_BACKEND_API struct ggml_tensor * ggml_set_f32 (struct ggml_tensor * tensor, float value); + + GGML_BACKEND_API int32_t ggml_get_i32_1d(const struct ggml_tensor * tensor, int i); + GGML_BACKEND_API void ggml_set_i32_1d(const struct ggml_tensor * tensor, int i, int32_t value); + + GGML_BACKEND_API int32_t ggml_get_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3); + GGML_BACKEND_API void ggml_set_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, int32_t value); + + GGML_BACKEND_API float ggml_get_f32_1d(const struct ggml_tensor * tensor, int i); + GGML_BACKEND_API void ggml_set_f32_1d(const struct ggml_tensor * tensor, int i, float value); + + GGML_BACKEND_API float ggml_get_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3); + GGML_BACKEND_API void ggml_set_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, float value); + + GGML_BACKEND_API struct ggml_threadpool * ggml_threadpool_new (struct ggml_threadpool_params * params); + GGML_BACKEND_API void ggml_threadpool_free (struct ggml_threadpool * threadpool); + GGML_BACKEND_API int ggml_threadpool_get_n_threads (struct ggml_threadpool * threadpool); + GGML_BACKEND_API void ggml_threadpool_pause (struct ggml_threadpool * threadpool); + GGML_BACKEND_API void ggml_threadpool_resume (struct ggml_threadpool * threadpool); + + // ggml_graph_plan() has to be called before ggml_graph_compute() + // when plan.work_size > 0, caller must allocate memory for plan.work_data + GGML_BACKEND_API struct ggml_cplan ggml_graph_plan( + const struct ggml_cgraph * cgraph, + int n_threads, /* = GGML_DEFAULT_N_THREADS */ + struct ggml_threadpool * threadpool /* = NULL */ ); + GGML_BACKEND_API enum ggml_status ggml_graph_compute(struct ggml_cgraph * cgraph, struct ggml_cplan * cplan); + + // same as ggml_graph_compute() but the work data is allocated as a part of the context + // note: the drawback of this API is that you must have ensured that the context has enough memory for the work data + GGML_BACKEND_API enum ggml_status ggml_graph_compute_with_ctx(struct ggml_context * ctx, struct ggml_cgraph * cgraph, int n_threads); + + // + // system info + // + + // x86 + GGML_BACKEND_API int ggml_cpu_has_sse3 (void); + GGML_BACKEND_API int ggml_cpu_has_ssse3 (void); + GGML_BACKEND_API int ggml_cpu_has_avx (void); + GGML_BACKEND_API int ggml_cpu_has_avx_vnni (void); + GGML_BACKEND_API int ggml_cpu_has_avx2 (void); + GGML_BACKEND_API int ggml_cpu_has_bmi2 (void); + GGML_BACKEND_API int ggml_cpu_has_f16c (void); + GGML_BACKEND_API int ggml_cpu_has_fma (void); + GGML_BACKEND_API int ggml_cpu_has_avx512 (void); + GGML_BACKEND_API int ggml_cpu_has_avx512_vbmi(void); + GGML_BACKEND_API int ggml_cpu_has_avx512_vnni(void); + GGML_BACKEND_API int ggml_cpu_has_avx512_bf16(void); + GGML_BACKEND_API int ggml_cpu_has_amx_int8 (void); + // ARM + GGML_BACKEND_API int ggml_cpu_has_neon (void); + GGML_BACKEND_API int ggml_cpu_has_arm_fma (void); + GGML_BACKEND_API int ggml_cpu_has_fp16_va (void); + GGML_BACKEND_API int ggml_cpu_has_dotprod (void); + GGML_BACKEND_API int ggml_cpu_has_matmul_int8(void); + GGML_BACKEND_API int ggml_cpu_has_sve (void); + GGML_BACKEND_API int ggml_cpu_get_sve_cnt (void); // sve vector length in bytes + GGML_BACKEND_API int ggml_cpu_has_sme (void); + // other + GGML_BACKEND_API int ggml_cpu_has_riscv_v (void); + GGML_BACKEND_API int ggml_cpu_has_vsx (void); + GGML_BACKEND_API int ggml_cpu_has_vxe (void); + GGML_BACKEND_API int ggml_cpu_has_wasm_simd (void); + GGML_BACKEND_API int ggml_cpu_has_llamafile (void); + + // Internal types and functions exposed for tests and benchmarks + + typedef void (*ggml_vec_dot_t) (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT x, size_t bx, + const void * GGML_RESTRICT y, size_t by, int nrc); + + struct ggml_type_traits_cpu { + ggml_from_float_t from_float; + ggml_vec_dot_t vec_dot; + enum ggml_type vec_dot_type; + int64_t nrows; // number of rows to process simultaneously + }; + + GGML_BACKEND_API const struct ggml_type_traits_cpu * ggml_get_type_traits_cpu(enum ggml_type type); + + GGML_BACKEND_API void ggml_cpu_init(void); + + // + // CPU backend + // + + GGML_BACKEND_API ggml_backend_t ggml_backend_cpu_init(void); + + GGML_BACKEND_API bool ggml_backend_is_cpu (ggml_backend_t backend); + GGML_BACKEND_API void ggml_backend_cpu_set_n_threads (ggml_backend_t backend_cpu, int n_threads); + GGML_BACKEND_API void ggml_backend_cpu_set_threadpool (ggml_backend_t backend_cpu, ggml_threadpool_t threadpool); + GGML_BACKEND_API void ggml_backend_cpu_set_abort_callback(ggml_backend_t backend_cpu, ggml_abort_callback abort_callback, void * abort_callback_data); + + GGML_BACKEND_API ggml_backend_reg_t ggml_backend_cpu_reg(void); + + GGML_BACKEND_API void ggml_cpu_fp32_to_fp32(const float *, float *, int64_t); + GGML_BACKEND_API void ggml_cpu_fp32_to_i32 (const float *, int32_t *, int64_t); + GGML_BACKEND_API void ggml_cpu_fp32_to_fp16(const float *, ggml_fp16_t *, int64_t); + GGML_BACKEND_API void ggml_cpu_fp16_to_fp32(const ggml_fp16_t *, float *, int64_t); + GGML_BACKEND_API void ggml_cpu_fp32_to_bf16(const float *, ggml_bf16_t *, int64_t); + GGML_BACKEND_API void ggml_cpu_bf16_to_fp32(const ggml_bf16_t *, float *, int64_t); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cuda.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cuda.h new file mode 100644 index 00000000..22ad2c00 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-cuda.h @@ -0,0 +1,47 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef GGML_USE_HIP +#define GGML_CUDA_NAME "ROCm" +#define GGML_CUBLAS_NAME "hipBLAS" +#elif defined(GGML_USE_MUSA) +#define GGML_CUDA_NAME "MUSA" +#define GGML_CUBLAS_NAME "muBLAS" +#else +#define GGML_CUDA_NAME "CUDA" +#define GGML_CUBLAS_NAME "cuBLAS" +#endif +#define GGML_CUDA_MAX_DEVICES 16 + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_cuda_init(int device); + +GGML_BACKEND_API bool ggml_backend_is_cuda(ggml_backend_t backend); + +// device buffer +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_cuda_buffer_type(int device); + +// split tensor buffer that splits matrices by rows across multiple devices +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_cuda_split_buffer_type(int main_device, const float * tensor_split); + +// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_cuda_host_buffer_type(void); + +GGML_BACKEND_API int ggml_backend_cuda_get_device_count(void); +GGML_BACKEND_API void ggml_backend_cuda_get_device_description(int device, char * description, size_t description_size); +GGML_BACKEND_API void ggml_backend_cuda_get_device_memory(int device, size_t * free, size_t * total); + +GGML_BACKEND_API bool ggml_backend_cuda_register_host_buffer(void * buffer, size_t size); +GGML_BACKEND_API void ggml_backend_cuda_unregister_host_buffer(void * buffer); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_cuda_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-hexagon.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-hexagon.h new file mode 100644 index 00000000..6e079004 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-hexagon.h @@ -0,0 +1,19 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_hexagon_init(void); + +GGML_BACKEND_API bool ggml_backend_is_hexagon(ggml_backend_t backend); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_hexagon_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-metal.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-metal.h new file mode 100644 index 00000000..433838f0 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-metal.h @@ -0,0 +1,61 @@ +// Note: this description is outdated +// +// An interface allowing to compute ggml_cgraph with Metal +// +// This is a fully functional interface that extends ggml with GPU support for Apple devices. +// A similar interface can be created for other GPU backends (e.g. Vulkan, CUDA, etc.) +// +// How it works? +// +// As long as your program can create and evaluate a ggml_cgraph on the CPU, you can use this +// interface to evaluate the same graph on the GPU. Instead of using ggml_graph_compute(), you +// use ggml_metal_graph_compute() (or ggml_vulkan_graph_compute(), etc.) +// +// You only need to make sure that all memory buffers that you used during the graph creation +// are mapped to the device memory with the ggml_metal_add_buffer() function. This mapping is +// used during the graph evaluation to determine the arguments of the compute kernels. +// +// Synchronization between device and host memory (for example for input and output tensors) +// is done with the ggml_metal_set_tensor() and ggml_metal_get_tensor() functions. +// + +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#include +#include + +struct ggml_tensor; +struct ggml_cgraph; + +#ifdef __cplusplus +extern "C" { +#endif + +// +// backend API +// user-code should use only these functions +// + +// TODO: remove in the future +GGML_BACKEND_API ggml_backend_t ggml_backend_metal_init(void); + +GGML_BACKEND_API bool ggml_backend_is_metal(ggml_backend_t backend); + +GGML_BACKEND_API void ggml_backend_metal_set_abort_callback(ggml_backend_t backend, ggml_abort_callback abort_callback, void * user_data); + +// helper to check if the device supports a specific family +// ideally, the user code should be doing these checks +// ref: https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf +GGML_BACKEND_API bool ggml_backend_metal_supports_family(ggml_backend_t backend, int family); + +// capture all command buffers committed the next time `ggml_backend_graph_compute` is called +GGML_BACKEND_API void ggml_backend_metal_capture_next_compute(ggml_backend_t backend); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_metal_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-opencl.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-opencl.h new file mode 100644 index 00000000..6b617713 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-opencl.h @@ -0,0 +1,26 @@ +#ifndef GGML_OPENCL_H +#define GGML_OPENCL_H + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// +// backend API +// +GGML_BACKEND_API ggml_backend_t ggml_backend_opencl_init(void); +GGML_BACKEND_API bool ggml_backend_is_opencl(ggml_backend_t backend); + +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_opencl_buffer_type(void); +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_opencl_host_buffer_type(void); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_opencl_reg(void); + +#ifdef __cplusplus +} +#endif + +#endif // GGML_OPENCL_H diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-opt.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-opt.h new file mode 100644 index 00000000..4703a05a --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-opt.h @@ -0,0 +1,256 @@ +// This file contains functionality for training models using GGML. +// It is not strictly needed vs. just vanilla GGML but it provides a more high-level interface for common needs such as datasets. +// At the bottom of this file especially there are relatively high-level functions that are suitable use or adaptation in user code. +// +// Module maintainer: Johannes Gäßler (@JohannesGaessler, johannesg@5d6.de) + +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + struct ggml_opt_dataset; + struct ggml_opt_context; + struct ggml_opt_result; + + typedef struct ggml_opt_dataset * ggml_opt_dataset_t; + typedef struct ggml_opt_context * ggml_opt_context_t; + typedef struct ggml_opt_result * ggml_opt_result_t; + + // ====== Loss ====== + + // built-in loss types, i.e. the built-in quantities minimized by the optimizer + // custom loss types can be defined via mean or sum which simply reduce the outputs for all datapoints to a single value + enum ggml_opt_loss_type { + GGML_OPT_LOSS_TYPE_MEAN, + GGML_OPT_LOSS_TYPE_SUM, + GGML_OPT_LOSS_TYPE_CROSS_ENTROPY, + GGML_OPT_LOSS_TYPE_MEAN_SQUARED_ERROR, + }; + + // ====== Dataset ====== + + GGML_API ggml_opt_dataset_t ggml_opt_dataset_init( + enum ggml_type type_data, // the type for the internal data tensor + enum ggml_type type_label, // the type for the internal labels tensor + int64_t ne_datapoint, // number of elements per datapoint + int64_t ne_label, // number of elements per label + int64_t ndata, // total number of datapoints/labels + int64_t ndata_shard); // number of datapoints/labels per shard (unit at which the dataset is shuffled/copied) + GGML_API void ggml_opt_dataset_free(ggml_opt_dataset_t dataset); + + // get underlying tensors that store the data + GGML_API int64_t ggml_opt_dataset_ndata (ggml_opt_dataset_t dataset); + GGML_API struct ggml_tensor * ggml_opt_dataset_data (ggml_opt_dataset_t dataset); // shape = [ne_datapoint, ndata] + GGML_API struct ggml_tensor * ggml_opt_dataset_labels(ggml_opt_dataset_t dataset); // shape = [nd_label, ndata] + + // shuffle idata first datapoints from dataset with RNG from opt_ctx, shuffle all datapoints if idata is negative + GGML_API void ggml_opt_dataset_shuffle(ggml_opt_context_t opt_ctx, ggml_opt_dataset_t dataset, int64_t idata); + + // get batch at position ibatch from dataset and copy the data to data_batch and labels_batch + GGML_API void ggml_opt_dataset_get_batch( + ggml_opt_dataset_t dataset, + struct ggml_tensor * data_batch, // shape = [ne_datapoint, ndata_batch] + struct ggml_tensor * labels_batch, // shape = [ne_label, ndata_batch] + int64_t ibatch); + GGML_API void ggml_opt_dataset_get_batch_host( + ggml_opt_dataset_t dataset, + void * data_batch, + size_t nb_data_batch, + void * labels_batch, + int64_t ibatch); + + // ====== Model / Context ====== + + enum ggml_opt_build_type { + GGML_OPT_BUILD_TYPE_FORWARD = 10, + GGML_OPT_BUILD_TYPE_GRAD = 20, + GGML_OPT_BUILD_TYPE_OPT = 30, + }; + + enum ggml_opt_optimizer_type { + GGML_OPT_OPTIMIZER_TYPE_ADAMW, + GGML_OPT_OPTIMIZER_TYPE_SGD, + + GGML_OPT_OPTIMIZER_TYPE_COUNT + }; + + // parameters that control which optimizer is used and how said optimizer tries to find the minimal loss + struct ggml_opt_optimizer_params { + struct { + float alpha; // learning rate + float beta1; // first AdamW momentum + float beta2; // second AdamW momentum + float eps; // epsilon for numerical stability + float wd; // weight decay - 0.0f to disable + } adamw; + struct { + float alpha; // learning rate + float wd; // weight decay + } sgd; + }; + + // callback to calculate optimizer parameters prior to a backward pass + // userdata can be used to pass arbitrary data + typedef struct ggml_opt_optimizer_params (*ggml_opt_get_optimizer_params)(void * userdata); + + // returns the default optimizer params (constant, hard-coded values) + // userdata is not used + GGML_API struct ggml_opt_optimizer_params ggml_opt_get_default_optimizer_params(void * userdata); + + // casts userdata to ggml_opt_optimizer_params and returns it + GGML_API struct ggml_opt_optimizer_params ggml_opt_get_constant_optimizer_params(void * userdata); + + // parameters for initializing a new optimization context + struct ggml_opt_params { + ggml_backend_sched_t backend_sched; // defines which backends are used to construct the compute graphs + + // by default the forward graph needs to be reconstructed for each eval + // if ctx_compute, inputs, and outputs are set the graphs are instead allocated statically + struct ggml_context * ctx_compute; + struct ggml_tensor * inputs; + struct ggml_tensor * outputs; + + enum ggml_opt_loss_type loss_type; + enum ggml_opt_build_type build_type; + + int32_t opt_period; // after how many gradient accumulation steps an optimizer step should be done + + ggml_opt_get_optimizer_params get_opt_pars; // callback for calculating optimizer parameters + void * get_opt_pars_ud; // userdata for calculating optimizer parameters + + // only GGML_OPT_OPTIMIZER_TYPE_ADAMW needs m, v momenta per parameter tensor + enum ggml_opt_optimizer_type optimizer; + }; + + // get parameters for an optimization context with defaults set where possible + // parameters for which no sensible defaults exist are supplied as arguments to this function + GGML_API struct ggml_opt_params ggml_opt_default_params( + ggml_backend_sched_t backend_sched, + enum ggml_opt_loss_type loss_type); + + GGML_API ggml_opt_context_t ggml_opt_init(struct ggml_opt_params params); + GGML_API void ggml_opt_free(ggml_opt_context_t opt_ctx); + + // set gradients to zero, initilize loss, and optionally reset the optimizer + GGML_API void ggml_opt_reset(ggml_opt_context_t opt_ctx, bool optimizer); + + GGML_API bool ggml_opt_static_graphs(ggml_opt_context_t opt_ctx); // whether the graphs are allocated_statically + + // get underlying tensors that store data + // if not using static graphs these pointers become invalid with the next call to ggml_opt_alloc + GGML_API struct ggml_tensor * ggml_opt_inputs( ggml_opt_context_t opt_ctx); // forward graph input tensor + GGML_API struct ggml_tensor * ggml_opt_outputs( ggml_opt_context_t opt_ctx); // forward graph output tensor + GGML_API struct ggml_tensor * ggml_opt_labels( ggml_opt_context_t opt_ctx); // labels to compare outputs against + GGML_API struct ggml_tensor * ggml_opt_loss( ggml_opt_context_t opt_ctx); // scalar tensor that contains the loss + GGML_API struct ggml_tensor * ggml_opt_pred( ggml_opt_context_t opt_ctx); // predictions made by outputs + GGML_API struct ggml_tensor * ggml_opt_ncorrect(ggml_opt_context_t opt_ctx); // number of matching predictions between outputs and labels + + // get the gradient accumulator for a node from the forward graph + GGML_API struct ggml_tensor * ggml_opt_grad_acc(ggml_opt_context_t opt_ctx, struct ggml_tensor * node); + + GGML_API enum ggml_opt_optimizer_type ggml_opt_context_optimizer_type(ggml_opt_context_t); //TODO consistent naming scheme + + GGML_API const char * ggml_opt_optimizer_name(enum ggml_opt_optimizer_type); + + // ====== Optimization Result ====== + + GGML_API ggml_opt_result_t ggml_opt_result_init(void); + GGML_API void ggml_opt_result_free(ggml_opt_result_t result); + GGML_API void ggml_opt_result_reset(ggml_opt_result_t result); + + // get data from result, uncertainties are optional and can be ignored by passing NULL + GGML_API void ggml_opt_result_ndata( ggml_opt_result_t result, int64_t * ndata); // writes 1 value, number of datapoints + GGML_API void ggml_opt_result_loss( ggml_opt_result_t result, double * loss, double * unc); // writes 1 value + GGML_API void ggml_opt_result_pred( ggml_opt_result_t result, int32_t * pred); // writes ndata values + GGML_API void ggml_opt_result_accuracy(ggml_opt_result_t result, double * accuracy, double * unc); // writes 1 value + + // ====== Computation ====== + + // if not using static graphs, this function must be called prior to ggml_opt_alloc + GGML_API void ggml_opt_prepare_alloc( + ggml_opt_context_t opt_ctx, + struct ggml_context * ctx_compute, + struct ggml_cgraph * gf, + struct ggml_tensor * inputs, + struct ggml_tensor * outputs); + + // allocate the next graph for evaluation, either forward or forward + backward + // must be called exactly once prior to calling ggml_opt_eval + GGML_API void ggml_opt_alloc(ggml_opt_context_t opt_ctx, bool backward); + + // do forward pass, increment result if not NULL, do backward pass if allocated + GGML_API void ggml_opt_eval(ggml_opt_context_t opt_ctx, ggml_opt_result_t result); + + // ############################################################################ + // ## The high-level functions start here. They do not depend on any private ## + // ## functions or structs and can be copied to and adapted for user code. ## + // ############################################################################ + + // ====== Intended Usage ====== + // + // 1. Select the appropriate loss for your problem. + // 2. Create a dataset and set the data for the "data" tensor. Also set the "labels" tensor if your loss needs them. + // Setting the shard size to 1 will be fine, it's the granularity with which data is shuffled/loaded (bigger values are faster). + // 3. Create a GGML graph for your model with no_alloc == true. Use two separate contexts for the tensors. + // The first context should contain the model parameters and inputs and be allocated statically in user code. + // The second context should contain all other tensors and will be (re)allocated automatically. + // Due to this automated allocation the data of the second context is not defined when accessed in user code. + // Note that the second dimension of the inputs/outputs are interpreted as the number of datapoints in those tensors. + // 4. Call ggml_opt_fit. If you need more control you can use ggml_opt_epoch instead. + + // signature for a callback while evaluating opt_ctx on dataset, called after an evaluation + typedef void (*ggml_opt_epoch_callback)( + bool train, // true after training evaluation, false after validation evaluation + ggml_opt_context_t opt_ctx, + ggml_opt_dataset_t dataset, + ggml_opt_result_t result, // result associated with the dataset subsection + int64_t ibatch, // number of batches that have been evaluated so far + int64_t ibatch_max, // total number of batches in this dataset subsection + int64_t t_start_us); // time at which the evaluation on the dataset subsection was started + + // do training on front of dataset, do evaluation only on back of dataset + GGML_API void ggml_opt_epoch( + ggml_opt_context_t opt_ctx, + ggml_opt_dataset_t dataset, + ggml_opt_result_t result_train, // result to increment during training, ignored if NULL + ggml_opt_result_t result_eval, // result to increment during evaluation, ignored if NULL + int64_t idata_split, // data index at which to split training and evaluation + ggml_opt_epoch_callback callback_train, + ggml_opt_epoch_callback callback_eval); + + // callback that prints a progress bar on stderr + GGML_API void ggml_opt_epoch_callback_progress_bar( + bool train, + ggml_opt_context_t opt_ctx, + ggml_opt_dataset_t dataset, + ggml_opt_result_t result, + int64_t ibatch, + int64_t ibatch_max, + int64_t t_start_us); + + // fit model defined by inputs and outputs to dataset + GGML_API void ggml_opt_fit( + ggml_backend_sched_t backend_sched, // backend scheduler for constructing the compute graphs + struct ggml_context * ctx_compute, // context with temporarily allocated tensors to calculate the outputs + struct ggml_tensor * inputs, // input tensor with shape [ne_datapoint, ndata_batch] + struct ggml_tensor * outputs, // output tensor, must have shape [ne_label, ndata_batch] if labels are used + ggml_opt_dataset_t dataset, // dataset with data and optionally also labels + enum ggml_opt_loss_type loss_type, // loss to minimize + enum ggml_opt_optimizer_type optimizer, // sgd or adamw + ggml_opt_get_optimizer_params get_opt_pars, // callback to get optimizer params, userdata is pointer to epoch (of type int64_t) + int64_t nepoch, // how many times the dataset should be iterated over + int64_t nbatch_logical, // datapoints optimizer step, must be a multiple of ndata_batch in inputs/outputs + float val_split, // fraction of the dataset to use for validation, must be in [0.0f, 1.0f) + bool silent); // whether or not info prints to stderr should be suppressed + + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-rpc.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-rpc.h new file mode 100644 index 00000000..e6dca3f6 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-rpc.h @@ -0,0 +1,31 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define RPC_PROTO_MAJOR_VERSION 3 +#define RPC_PROTO_MINOR_VERSION 0 +#define RPC_PROTO_PATCH_VERSION 0 +#define GGML_RPC_MAX_SERVERS 16 + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_rpc_init(const char * endpoint, uint32_t device); +GGML_BACKEND_API bool ggml_backend_is_rpc(ggml_backend_t backend); + +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_rpc_buffer_type(const char * endpoint, uint32_t device); + +GGML_BACKEND_API void ggml_backend_rpc_get_device_memory(const char * endpoint, uint32_t device, size_t * free, size_t * total); + +GGML_BACKEND_API void ggml_backend_rpc_start_server(const char * endpoint, const char * cache_dir, + size_t n_threads, size_t n_devices, ggml_backend_dev_t * devices); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_rpc_reg(void); +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_rpc_add_server(const char * endpoint); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-sycl.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-sycl.h new file mode 100644 index 00000000..5ce349a8 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-sycl.h @@ -0,0 +1,49 @@ +// +// MIT license +// Copyright (C) 2024 Intel Corporation +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#define GGML_SYCL_NAME "SYCL" +#define GGML_SYCL_MAX_DEVICES 48 + +#ifdef __cplusplus +extern "C" { +#endif + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_sycl_init(int device); + +GGML_BACKEND_API bool ggml_backend_is_sycl(ggml_backend_t backend); + +// devide buffer +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_sycl_buffer_type(int device); + +// split tensor buffer that splits matrices by rows across multiple devices +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_sycl_split_buffer_type(const float * tensor_split); + +// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_sycl_host_buffer_type(void); + +GGML_BACKEND_API void ggml_backend_sycl_print_sycl_devices(void); +GGML_BACKEND_API void ggml_backend_sycl_get_gpu_list(int *id_list, int max_len); +GGML_BACKEND_API void ggml_backend_sycl_get_device_description(int device, + char *description, + size_t description_size); +GGML_BACKEND_API int ggml_backend_sycl_get_device_count(); +GGML_BACKEND_API void ggml_backend_sycl_get_device_memory(int device, size_t *free, size_t *total); + +// SYCL doesn't support registering host memory, keep here for reference +// GGML_BACKEND_API bool ggml_backend_sycl_register_host_buffer(void * buffer, size_t size); +// GGML_BACKEND_API void ggml_backend_sycl_unregister_host_buffer(void * buffer); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_sycl_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-vulkan.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-vulkan.h new file mode 100644 index 00000000..ed5ea5f7 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-vulkan.h @@ -0,0 +1,29 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define GGML_VK_NAME "Vulkan" +#define GGML_VK_MAX_DEVICES 16 + +// backend API +GGML_BACKEND_API ggml_backend_t ggml_backend_vk_init(size_t dev_num); + +GGML_BACKEND_API bool ggml_backend_is_vk(ggml_backend_t backend); +GGML_BACKEND_API int ggml_backend_vk_get_device_count(void); +GGML_BACKEND_API void ggml_backend_vk_get_device_description(int device, char * description, size_t description_size); +GGML_BACKEND_API void ggml_backend_vk_get_device_memory(int device, size_t * free, size_t * total); + +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_vk_buffer_type(size_t dev_num); +// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_vk_host_buffer_type(void); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_vk_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-webgpu.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-webgpu.h new file mode 100644 index 00000000..65b8ed9b --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-webgpu.h @@ -0,0 +1,19 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define GGML_WEBGPU_NAME "WebGPU" + +// Needed for examples in ggml +GGML_BACKEND_API ggml_backend_t ggml_backend_webgpu_init(void); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_webgpu_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-zdnn.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-zdnn.h new file mode 100644 index 00000000..fbf45b6e --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml-zdnn.h @@ -0,0 +1,17 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// device buffer +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_zdnn_buffer_type(void); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_zdnn_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml.h new file mode 100644 index 00000000..c1ed1a21 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/ggml.h @@ -0,0 +1,2614 @@ +#pragma once + +// +// GGML Tensor Library +// +// This documentation is still a work in progress. +// If you wish some specific topics to be covered, feel free to drop a comment: +// +// https://github.com/ggerganov/whisper.cpp/issues/40 +// +// ## Overview +// +// This library implements: +// +// - a set of tensor operations +// - automatic differentiation +// - basic optimization algorithms +// +// The aim of this library is to provide a minimalistic approach for various machine learning tasks. This includes, +// but is not limited to, the following: +// +// - linear regression +// - support vector machines +// - neural networks +// +// The library allows the user to define a certain function using the available tensor operations. This function +// definition is represented internally via a computation graph. Each tensor operation in the function definition +// corresponds to a node in the graph. Having the computation graph defined, the user can choose to compute the +// function's value and/or its gradient with respect to the input variables. Optionally, the function can be optimized +// using one of the available optimization algorithms. +// +// For example, here we define the function: f(x) = a*x^2 + b +// +// { +// struct ggml_init_params params = { +// .mem_size = 16*1024*1024, +// .mem_buffer = NULL, +// }; +// +// // memory allocation happens here +// struct ggml_context * ctx = ggml_init(params); +// +// struct ggml_tensor * x = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); +// +// ggml_set_param(ctx, x); // x is an input variable +// +// struct ggml_tensor * a = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); +// struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); +// struct ggml_tensor * x2 = ggml_mul(ctx, x, x); +// struct ggml_tensor * f = ggml_add(ctx, ggml_mul(ctx, a, x2), b); +// +// ... +// } +// +// Notice that the function definition above does not involve any actual computation. The computation is performed only +// when the user explicitly requests it. For example, to compute the function's value at x = 2.0: +// +// { +// ... +// +// struct ggml_cgraph * gf = ggml_new_graph(ctx); +// ggml_build_forward_expand(gf, f); +// +// // set the input variable and parameter values +// ggml_set_f32(x, 2.0f); +// ggml_set_f32(a, 3.0f); +// ggml_set_f32(b, 4.0f); +// +// ggml_graph_compute_with_ctx(ctx, &gf, n_threads); +// +// printf("f = %f\n", ggml_get_f32_1d(f, 0)); +// +// ... +// } +// +// The actual computation is performed in the ggml_graph_compute() function. +// +// The ggml_new_tensor_...() functions create new tensors. They are allocated in the memory buffer provided to the +// ggml_init() function. You have to be careful not to exceed the memory buffer size. Therefore, you have to know +// in advance how much memory you need for your computation. Alternatively, you can allocate a large enough memory +// and after defining the computation graph, call the ggml_used_mem() function to find out how much memory was +// actually needed. +// +// The ggml_set_param() function marks a tensor as an input variable. This is used by the automatic +// differentiation and optimization algorithms. +// +// The described approach allows to define the function graph once and then compute its forward or backward graphs +// multiple times. All computations will use the same memory buffer allocated in the ggml_init() function. This way +// the user can avoid the memory allocation overhead at runtime. +// +// The library supports multi-dimensional tensors - up to 4 dimensions. The FP16 and FP32 data types are first class +// citizens, but in theory the library can be extended to support FP8 and integer data types. +// +// Each tensor operation produces a new tensor. Initially the library was envisioned to support only the use of unary +// and binary operations. Most of the available operations fall into one of these two categories. With time, it became +// clear that the library needs to support more complex operations. The way to support these operations is not clear +// yet, but a few examples are demonstrated in the following operations: +// +// - ggml_permute() +// - ggml_conv_1d_1s() +// - ggml_conv_1d_2s() +// +// For each tensor operator, the library implements a forward and backward computation function. The forward function +// computes the output tensor value given the input tensor values. The backward function computes the adjoint of the +// input tensors given the adjoint of the output tensor. For a detailed explanation of what this means, take a +// calculus class, or watch the following video: +// +// What is Automatic Differentiation? +// https://www.youtube.com/watch?v=wG_nF1awSSY +// +// +// ## Tensor data (struct ggml_tensor) +// +// The tensors are stored in memory via the ggml_tensor struct. The structure provides information about the size of +// the tensor, the data type, and the memory buffer where the tensor data is stored. Additionally, it contains +// pointers to the "source" tensors - i.e. the tensors that were used to compute the current tensor. For example: +// +// { +// struct ggml_tensor * c = ggml_add(ctx, a, b); +// +// assert(c->src[0] == a); +// assert(c->src[1] == b); +// } +// +// The multi-dimensional tensors are stored in row-major order. The ggml_tensor struct contains fields for the +// number of elements in each dimension ("ne") as well as the number of bytes ("nb", a.k.a. stride). This allows +// to store tensors that are not contiguous in memory, which is useful for operations such as transposition and +// permutation. All tensor operations have to take the stride into account and not assume that the tensor is +// contiguous in memory. +// +// The data of the tensor is accessed via the "data" pointer. For example: +// +// { +// const int nx = 2; +// const int ny = 3; +// +// struct ggml_tensor * a = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, nx, ny); +// +// for (int y = 0; y < ny; y++) { +// for (int x = 0; x < nx; x++) { +// *(float *) ((char *) a->data + y*a->nb[1] + x*a->nb[0]) = x + y; +// } +// } +// +// ... +// } +// +// Alternatively, there are helper functions, such as ggml_get_f32_1d() and ggml_set_f32_1d() that can be used. +// +// ## The matrix multiplication operator (ggml_mul_mat) +// +// TODO +// +// +// ## Multi-threading +// +// TODO +// +// +// ## Overview of ggml.c +// +// TODO +// +// +// ## SIMD optimizations +// +// TODO +// +// +// ## Debugging ggml +// +// TODO +// +// + +#ifdef GGML_SHARED +# if defined(_WIN32) && !defined(__MINGW32__) +# ifdef GGML_BUILD +# define GGML_API __declspec(dllexport) extern +# else +# define GGML_API __declspec(dllimport) extern +# endif +# else +# define GGML_API __attribute__ ((visibility ("default"))) extern +# endif +#else +# define GGML_API extern +#endif + +// TODO: support for clang +#ifdef __GNUC__ +# define GGML_DEPRECATED(func, hint) func __attribute__((deprecated(hint))) +#elif defined(_MSC_VER) +# define GGML_DEPRECATED(func, hint) __declspec(deprecated(hint)) func +#else +# define GGML_DEPRECATED(func, hint) func +#endif + +#ifndef __GNUC__ +# define GGML_ATTRIBUTE_FORMAT(...) +#elif defined(__MINGW32__) && !defined(__clang__) +# define GGML_ATTRIBUTE_FORMAT(...) __attribute__((format(gnu_printf, __VA_ARGS__))) +#else +# define GGML_ATTRIBUTE_FORMAT(...) __attribute__((format(printf, __VA_ARGS__))) +#endif + +#include +#include +#include +#include + +#define GGML_FILE_MAGIC 0x67676d6c // "ggml" +#define GGML_FILE_VERSION 2 + +#define GGML_QNT_VERSION 2 // bump this on quantization format changes +#define GGML_QNT_VERSION_FACTOR 1000 // do not change this + +#define GGML_MAX_DIMS 4 +#define GGML_MAX_PARAMS 2048 +#define GGML_MAX_SRC 10 +#define GGML_MAX_N_THREADS 512 +#define GGML_MAX_OP_PARAMS 64 + +#ifndef GGML_MAX_NAME +# define GGML_MAX_NAME 64 +#endif + +#define GGML_DEFAULT_N_THREADS 4 +#define GGML_DEFAULT_GRAPH_SIZE 2048 + +#if UINTPTR_MAX == 0xFFFFFFFF + #define GGML_MEM_ALIGN 4 +#else + #define GGML_MEM_ALIGN 16 +#endif + +#define GGML_EXIT_SUCCESS 0 +#define GGML_EXIT_ABORTED 1 + +// TODO: convert to enum https://github.com/ggml-org/llama.cpp/pull/16187#discussion_r2388538726 +#define GGML_ROPE_TYPE_NORMAL 0 +#define GGML_ROPE_TYPE_NEOX 2 +#define GGML_ROPE_TYPE_MROPE 8 +#define GGML_ROPE_TYPE_VISION 24 +#define GGML_ROPE_TYPE_IMROPE 40 // binary: 101000 + +#define GGML_MROPE_SECTIONS 4 + +#define GGML_UNUSED(x) (void)(x) +#ifdef __CUDACC__ +template +__host__ __device__ constexpr inline void ggml_unused_vars_impl(Args&&...) noexcept {} +#define GGML_UNUSED_VARS(...) ggml_unused_vars_impl(__VA_ARGS__) +#else +#define GGML_UNUSED_VARS(...) do { (void)sizeof((__VA_ARGS__, 0)); } while(0) +#endif // __CUDACC__ + +#define GGML_PAD(x, n) (((x) + (n) - 1) & ~((n) - 1)) + +#ifndef NDEBUG +# define GGML_UNREACHABLE() do { fprintf(stderr, "statement should be unreachable\n"); abort(); } while(0) +#elif defined(__GNUC__) +# define GGML_UNREACHABLE() __builtin_unreachable() +#elif defined(_MSC_VER) +# define GGML_UNREACHABLE() __assume(0) +#else +# define GGML_UNREACHABLE() ((void) 0) +#endif + +#ifdef __cplusplus +# define GGML_NORETURN [[noreturn]] +#elif defined(_MSC_VER) +# define GGML_NORETURN __declspec(noreturn) +#else +# define GGML_NORETURN _Noreturn +#endif + +#define GGML_ABORT(...) ggml_abort(__FILE__, __LINE__, __VA_ARGS__) +#define GGML_ASSERT(x) if (!(x)) GGML_ABORT("GGML_ASSERT(%s) failed", #x) + +// used to copy the number of elements and stride in bytes of tensors into local variables. +// main purpose is to reduce code duplication and improve readability. +// +// example: +// +// GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne); +// GGML_TENSOR_LOCALS(size_t, nb1, src1, nb); +// +#define GGML_TENSOR_LOCALS_1(type, prefix, pointer, array) \ + const type prefix##0 = (pointer) ? (pointer)->array[0] : 0; \ + GGML_UNUSED(prefix##0); +#define GGML_TENSOR_LOCALS_2(type, prefix, pointer, array) \ + GGML_TENSOR_LOCALS_1 (type, prefix, pointer, array) \ + const type prefix##1 = (pointer) ? (pointer)->array[1] : 0; \ + GGML_UNUSED(prefix##1); +#define GGML_TENSOR_LOCALS_3(type, prefix, pointer, array) \ + GGML_TENSOR_LOCALS_2 (type, prefix, pointer, array) \ + const type prefix##2 = (pointer) ? (pointer)->array[2] : 0; \ + GGML_UNUSED(prefix##2); +#define GGML_TENSOR_LOCALS(type, prefix, pointer, array) \ + GGML_TENSOR_LOCALS_3 (type, prefix, pointer, array) \ + const type prefix##3 = (pointer) ? (pointer)->array[3] : 0; \ + GGML_UNUSED(prefix##3); + +#define GGML_TENSOR_UNARY_OP_LOCALS \ + GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \ + GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) \ + GGML_TENSOR_LOCALS(size_t, nb, dst, nb) + +#define GGML_TENSOR_BINARY_OP_LOCALS \ + GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \ + GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) \ + GGML_TENSOR_LOCALS(size_t, nb1, src1, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) \ + GGML_TENSOR_LOCALS(size_t, nb, dst, nb) + +#define GGML_TENSOR_TERNARY_OP_LOCALS \ + GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \ + GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) \ + GGML_TENSOR_LOCALS(size_t, nb1, src1, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne2, src2, ne) \ + GGML_TENSOR_LOCALS(size_t, nb2, src2, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) \ + GGML_TENSOR_LOCALS(size_t, nb, dst, nb) + +#define GGML_TENSOR_BINARY_OP_LOCALS01 \ + GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \ + GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) \ + GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) \ + GGML_TENSOR_LOCALS(size_t, nb1, src1, nb) + +#ifdef __cplusplus +extern "C" { +#endif + + // Function type used in fatal error callbacks + typedef void (*ggml_abort_callback_t)(const char * error_message); + + // Set the abort callback (passing null will restore original abort functionality: printing a message to stdout) + // Returns the old callback for chaining + GGML_API ggml_abort_callback_t ggml_set_abort_callback(ggml_abort_callback_t callback); + + GGML_NORETURN GGML_ATTRIBUTE_FORMAT(3, 4) + GGML_API void ggml_abort(const char * file, int line, const char * fmt, ...); + + enum ggml_status { + GGML_STATUS_ALLOC_FAILED = -2, + GGML_STATUS_FAILED = -1, + GGML_STATUS_SUCCESS = 0, + GGML_STATUS_ABORTED = 1, + }; + + // get ggml_status name string + GGML_API const char * ggml_status_to_string(enum ggml_status status); + + // ieee 754-2008 half-precision float16 + // todo: make this not an integral type + typedef uint16_t ggml_fp16_t; + GGML_API float ggml_fp16_to_fp32(ggml_fp16_t); + GGML_API ggml_fp16_t ggml_fp32_to_fp16(float); + GGML_API void ggml_fp16_to_fp32_row(const ggml_fp16_t *, float *, int64_t); + GGML_API void ggml_fp32_to_fp16_row(const float *, ggml_fp16_t *, int64_t); + + // google brain half-precision bfloat16 + typedef struct { uint16_t bits; } ggml_bf16_t; + GGML_API ggml_bf16_t ggml_fp32_to_bf16(float); + GGML_API float ggml_bf16_to_fp32(ggml_bf16_t); // consider just doing << 16 + GGML_API void ggml_bf16_to_fp32_row(const ggml_bf16_t *, float *, int64_t); + GGML_API void ggml_fp32_to_bf16_row_ref(const float *, ggml_bf16_t *, int64_t); + GGML_API void ggml_fp32_to_bf16_row(const float *, ggml_bf16_t *, int64_t); + + struct ggml_object; + struct ggml_context; + struct ggml_cgraph; + + // NOTE: always add types at the end of the enum to keep backward compatibility + enum ggml_type { + GGML_TYPE_F32 = 0, + GGML_TYPE_F16 = 1, + GGML_TYPE_Q4_0 = 2, + GGML_TYPE_Q4_1 = 3, + // GGML_TYPE_Q4_2 = 4, support has been removed + // GGML_TYPE_Q4_3 = 5, support has been removed + GGML_TYPE_Q5_0 = 6, + GGML_TYPE_Q5_1 = 7, + GGML_TYPE_Q8_0 = 8, + GGML_TYPE_Q8_1 = 9, + GGML_TYPE_Q2_K = 10, + GGML_TYPE_Q3_K = 11, + GGML_TYPE_Q4_K = 12, + GGML_TYPE_Q5_K = 13, + GGML_TYPE_Q6_K = 14, + GGML_TYPE_Q8_K = 15, + GGML_TYPE_IQ2_XXS = 16, + GGML_TYPE_IQ2_XS = 17, + GGML_TYPE_IQ3_XXS = 18, + GGML_TYPE_IQ1_S = 19, + GGML_TYPE_IQ4_NL = 20, + GGML_TYPE_IQ3_S = 21, + GGML_TYPE_IQ2_S = 22, + GGML_TYPE_IQ4_XS = 23, + GGML_TYPE_I8 = 24, + GGML_TYPE_I16 = 25, + GGML_TYPE_I32 = 26, + GGML_TYPE_I64 = 27, + GGML_TYPE_F64 = 28, + GGML_TYPE_IQ1_M = 29, + GGML_TYPE_BF16 = 30, + // GGML_TYPE_Q4_0_4_4 = 31, support has been removed from gguf files + // GGML_TYPE_Q4_0_4_8 = 32, + // GGML_TYPE_Q4_0_8_8 = 33, + GGML_TYPE_TQ1_0 = 34, + GGML_TYPE_TQ2_0 = 35, + // GGML_TYPE_IQ4_NL_4_4 = 36, + // GGML_TYPE_IQ4_NL_4_8 = 37, + // GGML_TYPE_IQ4_NL_8_8 = 38, + GGML_TYPE_MXFP4 = 39, // MXFP4 (1 block) + GGML_TYPE_COUNT = 40, + }; + + // precision + enum ggml_prec { + GGML_PREC_DEFAULT = 0, // stored as ggml_tensor.op_params, 0 by default + GGML_PREC_F32 = 10, + }; + + // model file types + enum ggml_ftype { + GGML_FTYPE_UNKNOWN = -1, + GGML_FTYPE_ALL_F32 = 0, + GGML_FTYPE_MOSTLY_F16 = 1, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_0 = 2, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_1 = 3, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_1_SOME_F16 = 4, // tok_embeddings.weight and output.weight are F16 + GGML_FTYPE_MOSTLY_Q8_0 = 7, // except 1d tensors + GGML_FTYPE_MOSTLY_Q5_0 = 8, // except 1d tensors + GGML_FTYPE_MOSTLY_Q5_1 = 9, // except 1d tensors + GGML_FTYPE_MOSTLY_Q2_K = 10, // except 1d tensors + GGML_FTYPE_MOSTLY_Q3_K = 11, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_K = 12, // except 1d tensors + GGML_FTYPE_MOSTLY_Q5_K = 13, // except 1d tensors + GGML_FTYPE_MOSTLY_Q6_K = 14, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ2_XXS = 15, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ2_XS = 16, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ3_XXS = 17, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ1_S = 18, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ4_NL = 19, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ3_S = 20, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ2_S = 21, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ4_XS = 22, // except 1d tensors + GGML_FTYPE_MOSTLY_IQ1_M = 23, // except 1d tensors + GGML_FTYPE_MOSTLY_BF16 = 24, // except 1d tensors + GGML_FTYPE_MOSTLY_MXFP4 = 25, // except 1d tensors + }; + + // available tensor operations: + enum ggml_op { + GGML_OP_NONE = 0, + + GGML_OP_DUP, + GGML_OP_ADD, + GGML_OP_ADD_ID, + GGML_OP_ADD1, + GGML_OP_ACC, + GGML_OP_SUB, + GGML_OP_MUL, + GGML_OP_DIV, + GGML_OP_SQR, + GGML_OP_SQRT, + GGML_OP_LOG, + GGML_OP_SIN, + GGML_OP_COS, + GGML_OP_SUM, + GGML_OP_SUM_ROWS, + GGML_OP_MEAN, + GGML_OP_ARGMAX, + GGML_OP_COUNT_EQUAL, + GGML_OP_REPEAT, + GGML_OP_REPEAT_BACK, + GGML_OP_CONCAT, + GGML_OP_SILU_BACK, + GGML_OP_NORM, // normalize + GGML_OP_RMS_NORM, + GGML_OP_RMS_NORM_BACK, + GGML_OP_GROUP_NORM, + GGML_OP_L2_NORM, + + GGML_OP_MUL_MAT, + GGML_OP_MUL_MAT_ID, + GGML_OP_OUT_PROD, + + GGML_OP_SCALE, + GGML_OP_SET, + GGML_OP_CPY, + GGML_OP_CONT, + GGML_OP_RESHAPE, + GGML_OP_VIEW, + GGML_OP_PERMUTE, + GGML_OP_TRANSPOSE, + GGML_OP_GET_ROWS, + GGML_OP_GET_ROWS_BACK, + GGML_OP_SET_ROWS, + GGML_OP_DIAG, + GGML_OP_DIAG_MASK_INF, + GGML_OP_DIAG_MASK_ZERO, + GGML_OP_SOFT_MAX, + GGML_OP_SOFT_MAX_BACK, + GGML_OP_ROPE, + GGML_OP_ROPE_BACK, + GGML_OP_CLAMP, + GGML_OP_CONV_TRANSPOSE_1D, + GGML_OP_IM2COL, + GGML_OP_IM2COL_BACK, + GGML_OP_IM2COL_3D, + GGML_OP_CONV_2D, + GGML_OP_CONV_3D, + GGML_OP_CONV_2D_DW, + GGML_OP_CONV_TRANSPOSE_2D, + GGML_OP_POOL_1D, + GGML_OP_POOL_2D, + GGML_OP_POOL_2D_BACK, + GGML_OP_UPSCALE, + GGML_OP_PAD, + GGML_OP_PAD_REFLECT_1D, + GGML_OP_ROLL, + GGML_OP_ARANGE, + GGML_OP_TIMESTEP_EMBEDDING, + GGML_OP_ARGSORT, + GGML_OP_LEAKY_RELU, + + GGML_OP_FLASH_ATTN_EXT, + GGML_OP_FLASH_ATTN_BACK, + GGML_OP_SSM_CONV, + GGML_OP_SSM_SCAN, + GGML_OP_WIN_PART, + GGML_OP_WIN_UNPART, + GGML_OP_GET_REL_POS, + GGML_OP_ADD_REL_POS, + GGML_OP_RWKV_WKV6, + GGML_OP_GATED_LINEAR_ATTN, + GGML_OP_RWKV_WKV7, + + GGML_OP_UNARY, + + GGML_OP_MAP_CUSTOM1, + GGML_OP_MAP_CUSTOM2, + GGML_OP_MAP_CUSTOM3, + + GGML_OP_CUSTOM, + + GGML_OP_CROSS_ENTROPY_LOSS, + GGML_OP_CROSS_ENTROPY_LOSS_BACK, + GGML_OP_OPT_STEP_ADAMW, + GGML_OP_OPT_STEP_SGD, + + GGML_OP_GLU, + + GGML_OP_COUNT, + }; + + enum ggml_unary_op { + GGML_UNARY_OP_ABS, + GGML_UNARY_OP_SGN, + GGML_UNARY_OP_NEG, + GGML_UNARY_OP_STEP, + GGML_UNARY_OP_TANH, + GGML_UNARY_OP_ELU, + GGML_UNARY_OP_RELU, + GGML_UNARY_OP_SIGMOID, + GGML_UNARY_OP_GELU, + GGML_UNARY_OP_GELU_QUICK, + GGML_UNARY_OP_SILU, + GGML_UNARY_OP_HARDSWISH, + GGML_UNARY_OP_HARDSIGMOID, + GGML_UNARY_OP_EXP, + GGML_UNARY_OP_GELU_ERF, + GGML_UNARY_OP_XIELU, + GGML_UNARY_OP_FLOOR, + GGML_UNARY_OP_CEIL, + GGML_UNARY_OP_ROUND, + GGML_UNARY_OP_TRUNC, + + GGML_UNARY_OP_COUNT, + }; + + enum ggml_glu_op { + GGML_GLU_OP_REGLU, + GGML_GLU_OP_GEGLU, + GGML_GLU_OP_SWIGLU, + GGML_GLU_OP_SWIGLU_OAI, + GGML_GLU_OP_GEGLU_ERF, + GGML_GLU_OP_GEGLU_QUICK, + + GGML_GLU_OP_COUNT, + }; + + enum ggml_object_type { + GGML_OBJECT_TYPE_TENSOR, + GGML_OBJECT_TYPE_GRAPH, + GGML_OBJECT_TYPE_WORK_BUFFER + }; + + enum ggml_log_level { + GGML_LOG_LEVEL_NONE = 0, + GGML_LOG_LEVEL_DEBUG = 1, + GGML_LOG_LEVEL_INFO = 2, + GGML_LOG_LEVEL_WARN = 3, + GGML_LOG_LEVEL_ERROR = 4, + GGML_LOG_LEVEL_CONT = 5, // continue previous log + }; + + // this tensor... + enum ggml_tensor_flag { + GGML_TENSOR_FLAG_INPUT = 1, // ...is an input for the GGML compute graph + GGML_TENSOR_FLAG_OUTPUT = 2, // ...is an output for the GGML compute graph + GGML_TENSOR_FLAG_PARAM = 4, // ...contains trainable parameters + GGML_TENSOR_FLAG_LOSS = 8, // ...defines loss for numerical optimization (multiple loss tensors add up) + }; + + struct ggml_init_params { + // memory pool + size_t mem_size; // bytes + void * mem_buffer; // if NULL, memory will be allocated internally + bool no_alloc; // don't allocate memory for the tensor data + }; + + // n-dimensional tensor + struct ggml_tensor { + enum ggml_type type; + + struct ggml_backend_buffer * buffer; + + int64_t ne[GGML_MAX_DIMS]; // number of elements + size_t nb[GGML_MAX_DIMS]; // stride in bytes: + // nb[0] = ggml_type_size(type) + // nb[1] = nb[0] * (ne[0] / ggml_blck_size(type)) + padding + // nb[i] = nb[i-1] * ne[i-1] + + // compute data + enum ggml_op op; + + // op params - allocated as int32_t for alignment + int32_t op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)]; + + int32_t flags; + + struct ggml_tensor * src[GGML_MAX_SRC]; + + // source tensor and offset for views + struct ggml_tensor * view_src; + size_t view_offs; + + void * data; + + char name[GGML_MAX_NAME]; + + void * extra; // extra things e.g. for ggml-cuda.cu + + char padding[8]; + }; + + static const size_t GGML_TENSOR_SIZE = sizeof(struct ggml_tensor); + + // Abort callback + // If not NULL, called before ggml computation + // If it returns true, the computation is aborted + typedef bool (*ggml_abort_callback)(void * data); + + + // + // GUID + // + + // GUID types + typedef uint8_t ggml_guid[16]; + typedef ggml_guid * ggml_guid_t; + + GGML_API bool ggml_guid_matches(ggml_guid_t guid_a, ggml_guid_t guid_b); + + // misc + + GGML_API const char * ggml_version(void); + GGML_API const char * ggml_commit(void); + + GGML_API void ggml_time_init(void); // call this once at the beginning of the program + GGML_API int64_t ggml_time_ms(void); + GGML_API int64_t ggml_time_us(void); + GGML_API int64_t ggml_cycles(void); + GGML_API int64_t ggml_cycles_per_ms(void); + + // accepts a UTF-8 path, even on Windows + GGML_API FILE * ggml_fopen(const char * fname, const char * mode); + + GGML_API void ggml_print_object (const struct ggml_object * obj); + GGML_API void ggml_print_objects(const struct ggml_context * ctx); + + GGML_API int64_t ggml_nelements (const struct ggml_tensor * tensor); + GGML_API int64_t ggml_nrows (const struct ggml_tensor * tensor); + GGML_API size_t ggml_nbytes (const struct ggml_tensor * tensor); + GGML_API size_t ggml_nbytes_pad(const struct ggml_tensor * tensor); // same as ggml_nbytes() but padded to GGML_MEM_ALIGN + + GGML_API int64_t ggml_blck_size(enum ggml_type type); + GGML_API size_t ggml_type_size(enum ggml_type type); // size in bytes for all elements in a block + GGML_API size_t ggml_row_size (enum ggml_type type, int64_t ne); // size in bytes for all elements in a row + + GGML_DEPRECATED( + GGML_API double ggml_type_sizef(enum ggml_type type), // ggml_type_size()/ggml_blck_size() as float + "use ggml_row_size() instead"); + + GGML_API const char * ggml_type_name(enum ggml_type type); + GGML_API const char * ggml_op_name (enum ggml_op op); + GGML_API const char * ggml_op_symbol(enum ggml_op op); + + GGML_API const char * ggml_unary_op_name(enum ggml_unary_op op); + GGML_API const char * ggml_glu_op_name(enum ggml_glu_op op); + GGML_API const char * ggml_op_desc(const struct ggml_tensor * t); // unary or op name + + GGML_API size_t ggml_element_size(const struct ggml_tensor * tensor); + + GGML_API bool ggml_is_quantized(enum ggml_type type); + + // TODO: temporary until model loading of ggml examples is refactored + GGML_API enum ggml_type ggml_ftype_to_ggml_type(enum ggml_ftype ftype); + + GGML_API bool ggml_is_transposed(const struct ggml_tensor * tensor); + GGML_API bool ggml_is_permuted (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_empty (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_scalar (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_vector (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_matrix (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_3d (const struct ggml_tensor * tensor); + GGML_API int ggml_n_dims (const struct ggml_tensor * tensor); // returns 1 for scalars + + // returns whether the tensor elements can be iterated over with a flattened index (no gaps, no permutation) + GGML_API bool ggml_is_contiguous (const struct ggml_tensor * tensor); + GGML_API bool ggml_is_contiguous_0(const struct ggml_tensor * tensor); // same as ggml_is_contiguous() + GGML_API bool ggml_is_contiguous_1(const struct ggml_tensor * tensor); // contiguous for dims >= 1 + GGML_API bool ggml_is_contiguous_2(const struct ggml_tensor * tensor); // contiguous for dims >= 2 + + // returns whether the tensor elements are allocated as one contiguous block of memory (no gaps, but permutation ok) + GGML_API bool ggml_is_contiguously_allocated(const struct ggml_tensor * tensor); + + // true for tensor that is stored in memory as CxWxHxN and has been permuted to WxHxCxN + GGML_API bool ggml_is_contiguous_channels(const struct ggml_tensor * tensor); + + // true if the elements in dimension 0 are contiguous, or there is just 1 block of elements + GGML_API bool ggml_is_contiguous_rows(const struct ggml_tensor * tensor); + + GGML_API bool ggml_are_same_shape (const struct ggml_tensor * t0, const struct ggml_tensor * t1); + GGML_API bool ggml_are_same_stride(const struct ggml_tensor * t0, const struct ggml_tensor * t1); + + GGML_API bool ggml_can_repeat(const struct ggml_tensor * t0, const struct ggml_tensor * t1); + + // use this to compute the memory overhead of a tensor + GGML_API size_t ggml_tensor_overhead(void); + + GGML_API bool ggml_validate_row_data(enum ggml_type type, const void * data, size_t nbytes); + + // main + + GGML_API struct ggml_context * ggml_init (struct ggml_init_params params); + GGML_API void ggml_reset(struct ggml_context * ctx); + GGML_API void ggml_free (struct ggml_context * ctx); + + GGML_API size_t ggml_used_mem(const struct ggml_context * ctx); + + GGML_API bool ggml_get_no_alloc(struct ggml_context * ctx); + GGML_API void ggml_set_no_alloc(struct ggml_context * ctx, bool no_alloc); + + GGML_API void * ggml_get_mem_buffer (const struct ggml_context * ctx); + GGML_API size_t ggml_get_mem_size (const struct ggml_context * ctx); + GGML_API size_t ggml_get_max_tensor_size(const struct ggml_context * ctx); + + GGML_API struct ggml_tensor * ggml_new_tensor( + struct ggml_context * ctx, + enum ggml_type type, + int n_dims, + const int64_t *ne); + + GGML_API struct ggml_tensor * ggml_new_tensor_1d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0); + + GGML_API struct ggml_tensor * ggml_new_tensor_2d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1); + + GGML_API struct ggml_tensor * ggml_new_tensor_3d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1, + int64_t ne2); + + GGML_API struct ggml_tensor * ggml_new_tensor_4d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3); + + GGML_API void * ggml_new_buffer(struct ggml_context * ctx, size_t nbytes); + + GGML_API struct ggml_tensor * ggml_dup_tensor (struct ggml_context * ctx, const struct ggml_tensor * src); + GGML_API struct ggml_tensor * ggml_view_tensor(struct ggml_context * ctx, struct ggml_tensor * src); + + // Context tensor enumeration and lookup + GGML_API struct ggml_tensor * ggml_get_first_tensor(const struct ggml_context * ctx); + GGML_API struct ggml_tensor * ggml_get_next_tensor (const struct ggml_context * ctx, struct ggml_tensor * tensor); + GGML_API struct ggml_tensor * ggml_get_tensor(struct ggml_context * ctx, const char * name); + + // Converts a flat index into coordinates + GGML_API void ggml_unravel_index(const struct ggml_tensor * tensor, int64_t i, int64_t * i0, int64_t * i1, int64_t * i2, int64_t * i3); + + GGML_API enum ggml_unary_op ggml_get_unary_op(const struct ggml_tensor * tensor); + GGML_API enum ggml_glu_op ggml_get_glu_op(const struct ggml_tensor * tensor); + + GGML_API void * ggml_get_data (const struct ggml_tensor * tensor); + GGML_API float * ggml_get_data_f32(const struct ggml_tensor * tensor); + + GGML_API const char * ggml_get_name (const struct ggml_tensor * tensor); + GGML_API struct ggml_tensor * ggml_set_name ( struct ggml_tensor * tensor, const char * name); + GGML_ATTRIBUTE_FORMAT(2, 3) + GGML_API struct ggml_tensor * ggml_format_name( struct ggml_tensor * tensor, const char * fmt, ...); + + // Tensor flags + GGML_API void ggml_set_input(struct ggml_tensor * tensor); + GGML_API void ggml_set_output(struct ggml_tensor * tensor); + GGML_API void ggml_set_param(struct ggml_tensor * tensor); + GGML_API void ggml_set_loss(struct ggml_tensor * tensor); + + // + // operations on tensors with backpropagation + // + + GGML_API struct ggml_tensor * ggml_dup( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_dup_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_add( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_add_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_add_cast( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + enum ggml_type type); + + // dst[i0, i1, i2] = a[i0, i1, i2] + b[i0, ids[i1, i2]] + GGML_API struct ggml_tensor * ggml_add_id( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * ids); + + GGML_API struct ggml_tensor * ggml_add1( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_add1_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // dst = a + // view(dst, nb1, nb2, nb3, offset) += b + // return dst + GGML_API struct ggml_tensor * ggml_acc( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); + + GGML_API struct ggml_tensor * ggml_acc_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); + + GGML_API struct ggml_tensor * ggml_sub( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_sub_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_mul( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_mul_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_div( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_div_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_sqr( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sqr_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sqrt( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sqrt_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_log( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_log_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sin( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sin_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_cos( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_cos_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // return scalar + GGML_API struct ggml_tensor * ggml_sum( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // sums along rows, with input shape [a,b,c,d] return shape [1,b,c,d] + GGML_API struct ggml_tensor * ggml_sum_rows( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // mean along rows + GGML_API struct ggml_tensor * ggml_mean( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // argmax along rows + GGML_API struct ggml_tensor * ggml_argmax( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // count number of equal elements in a and b + GGML_API struct ggml_tensor * ggml_count_equal( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // if a is the same shape as b, and a is not parameter, return a + // otherwise, return a new tensor: repeat(a) to fit in b + GGML_API struct ggml_tensor * ggml_repeat( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // repeat a to the specified shape + GGML_API struct ggml_tensor * ggml_repeat_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3); + + // sums repetitions in a into shape of b + GGML_API struct ggml_tensor * ggml_repeat_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); // sum up values that are adjacent in dims > 0 instead of repeated with same stride + + // concat a and b along dim + // used in stable-diffusion + GGML_API struct ggml_tensor * ggml_concat( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int dim); + + GGML_API struct ggml_tensor * ggml_abs( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_abs_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sgn( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sgn_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_neg( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_neg_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_step( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_step_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_tanh( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_tanh_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_elu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_elu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_relu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_leaky_relu( + struct ggml_context * ctx, + struct ggml_tensor * a, float negative_slope, bool inplace); + + GGML_API struct ggml_tensor * ggml_relu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sigmoid( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sigmoid_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // GELU using erf (error function) when possible + // some backends may fallback to approximation based on Abramowitz and Stegun formula + GGML_API struct ggml_tensor * ggml_gelu_erf( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu_erf_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu_quick( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_gelu_quick_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_silu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_silu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // a - x + // b - dy + GGML_API struct ggml_tensor * ggml_silu_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // hardswish(x) = x * relu6(x + 3) / 6 + GGML_API struct ggml_tensor * ggml_hardswish( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // hardsigmoid(x) = relu6(x + 3) / 6 + GGML_API struct ggml_tensor * ggml_hardsigmoid( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_exp( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_exp_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_floor( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_floor_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_ceil( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_ceil_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_round( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_round_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + /** + * Truncates the fractional part of each element in the tensor (towards zero). + * For example: trunc(3.7) = 3.0, trunc(-2.9) = -2.0 + * Similar to std::trunc in C/C++. + */ + + GGML_API struct ggml_tensor * ggml_trunc( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_trunc_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + + + // xIELU activation function + // x = x * (c_a(alpha_n) + c_b(alpha_p, beta) * sigmoid(beta * x)) + eps * (x > 0) + // where c_a = softplus and c_b(a, b) = softplus(a) + b are constraining functions + // that constrain the positive and negative source alpha values respectively + GGML_API struct ggml_tensor * ggml_xielu( + struct ggml_context * ctx, + struct ggml_tensor * a, + float alpha_n, + float alpha_p, + float beta, + float eps); + + // gated linear unit ops + // A: n columns, r rows, + // result is n / 2 columns, r rows, + // expects gate in second half of row, unless swapped is true + GGML_API struct ggml_tensor * ggml_glu( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_glu_op op, + bool swapped); + + GGML_API struct ggml_tensor * ggml_reglu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_reglu_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_swiglu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_swiglu_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_erf( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_erf_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_quick( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_geglu_quick_swapped( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // A: n columns, r rows, + // B: n columns, r rows, + GGML_API struct ggml_tensor * ggml_glu_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + enum ggml_glu_op op); + + GGML_API struct ggml_tensor * ggml_reglu_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_geglu_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_swiglu_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_geglu_erf_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_geglu_quick_split( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_swiglu_oai( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + float alpha, + float limit); + + // normalize along rows + GGML_API struct ggml_tensor * ggml_norm( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + GGML_API struct ggml_tensor * ggml_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + GGML_API struct ggml_tensor * ggml_rms_norm( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + GGML_API struct ggml_tensor * ggml_rms_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + // group normalize along ne0*ne1*n_groups + // used in stable-diffusion + GGML_API struct ggml_tensor * ggml_group_norm( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_groups, + float eps); + + GGML_API struct ggml_tensor * ggml_group_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_groups, + float eps); + + // l2 normalize along rows + // used in rwkv v7 + GGML_API struct ggml_tensor * ggml_l2_norm( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + GGML_API struct ggml_tensor * ggml_l2_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float eps); + + // a - x + // b - dy + GGML_API struct ggml_tensor * ggml_rms_norm_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + float eps); + + // A: k columns, n rows => [ne03, ne02, n, k] + // B: k columns, m rows (i.e. we transpose it internally) => [ne03 * x, ne02 * y, m, k] + // result is n columns, m rows => [ne03 * x, ne02 * y, m, n] + GGML_API struct ggml_tensor * ggml_mul_mat( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // change the precision of a matrix multiplication + // set to GGML_PREC_F32 for higher precision (useful for phi-2) + GGML_API void ggml_mul_mat_set_prec( + struct ggml_tensor * a, + enum ggml_prec prec); + + // indirect matrix multiplication + GGML_API struct ggml_tensor * ggml_mul_mat_id( + struct ggml_context * ctx, + struct ggml_tensor * as, + struct ggml_tensor * b, + struct ggml_tensor * ids); + + // A: m columns, n rows, + // B: p columns, n rows, + // result is m columns, p rows + GGML_API struct ggml_tensor * ggml_out_prod( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // + // operations on tensors without backpropagation + // + + GGML_API struct ggml_tensor * ggml_scale( + struct ggml_context * ctx, + struct ggml_tensor * a, + float s); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_scale_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float s); + + // x = s * a + b + GGML_API struct ggml_tensor * ggml_scale_bias( + struct ggml_context * ctx, + struct ggml_tensor * a, + float s, + float b); + + GGML_API struct ggml_tensor * ggml_scale_bias_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + float s, + float b); + + // b -> view(a,offset,nb1,nb2,3), return modified a + GGML_API struct ggml_tensor * ggml_set( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); // in bytes + + // b -> view(a,offset,nb1,nb2,3), return view(a) + GGML_API struct ggml_tensor * ggml_set_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); // in bytes + + GGML_API struct ggml_tensor * ggml_set_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t offset); // in bytes + + GGML_API struct ggml_tensor * ggml_set_1d_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t offset); // in bytes + + // b -> view(a,offset,nb1,nb2,3), return modified a + GGML_API struct ggml_tensor * ggml_set_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t offset); // in bytes + + // b -> view(a,offset,nb1,nb2,3), return view(a) + GGML_API struct ggml_tensor * ggml_set_2d_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t offset); // in bytes + + // a -> b, return view(b) + GGML_API struct ggml_tensor * ggml_cpy( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // note: casting from f32 to i32 will discard the fractional part + GGML_API struct ggml_tensor * ggml_cast( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_type type); + + // make contiguous + GGML_API struct ggml_tensor * ggml_cont( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // make contiguous, with new shape + GGML_API struct ggml_tensor * ggml_cont_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0); + + GGML_API struct ggml_tensor * ggml_cont_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1); + + GGML_API struct ggml_tensor * ggml_cont_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2); + + GGML_API struct ggml_tensor * ggml_cont_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3); + + // return view(a), b specifies the new shape + // TODO: when we start computing gradient, make a copy instead of view + GGML_API struct ggml_tensor * ggml_reshape( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // return view(a) + // TODO: when we start computing gradient, make a copy instead of view + GGML_API struct ggml_tensor * ggml_reshape_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0); + + GGML_API struct ggml_tensor * ggml_reshape_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1); + + // return view(a) + // TODO: when we start computing gradient, make a copy instead of view + GGML_API struct ggml_tensor * ggml_reshape_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2); + + GGML_API struct ggml_tensor * ggml_reshape_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3); + + // offset in bytes + GGML_API struct ggml_tensor * ggml_view_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + size_t offset); + + GGML_API struct ggml_tensor * ggml_view_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + size_t nb1, // row stride in bytes + size_t offset); + + GGML_API struct ggml_tensor * ggml_view_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + size_t nb1, // row stride in bytes + size_t nb2, // slice stride in bytes + size_t offset); + + GGML_API struct ggml_tensor * ggml_view_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3, + size_t nb1, // row stride in bytes + size_t nb2, // slice stride in bytes + size_t nb3, + size_t offset); + + GGML_API struct ggml_tensor * ggml_permute( + struct ggml_context * ctx, + struct ggml_tensor * a, + int axis0, + int axis1, + int axis2, + int axis3); + + // alias for ggml_permute(ctx, a, 1, 0, 2, 3) + GGML_API struct ggml_tensor * ggml_transpose( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // supports 4D a: + // a [n_embd, ne1, ne2, ne3] + // b I32 [n_rows, ne2, ne3, 1] + // + // return [n_embd, n_rows, ne2, ne3] + GGML_API struct ggml_tensor * ggml_get_rows( + struct ggml_context * ctx, + struct ggml_tensor * a, // data + struct ggml_tensor * b); // row indices + + GGML_API struct ggml_tensor * ggml_get_rows_back( + struct ggml_context * ctx, + struct ggml_tensor * a, // gradients of ggml_get_rows result + struct ggml_tensor * b, // row indices + struct ggml_tensor * c); // data for ggml_get_rows, only used for its shape + + // a TD [n_embd, ne1, ne2, ne3] + // b TS [n_embd, n_rows, ne02, ne03] | ne02 == ne2, ne03 == ne3 + // c I64 [n_rows, ne11, ne12, 1] | c[i] in [0, ne1) + // + // undefined behavior if destination rows overlap + // + // broadcast: + // ne2 % ne11 == 0 + // ne3 % ne12 == 0 + // + // return view(a) + GGML_API struct ggml_tensor * ggml_set_rows( + struct ggml_context * ctx, + struct ggml_tensor * a, // destination + struct ggml_tensor * b, // source + struct ggml_tensor * c); // row indices + + GGML_API struct ggml_tensor * ggml_diag( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // set elements above the diagonal to -INF + GGML_API struct ggml_tensor * ggml_diag_mask_inf( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_diag_mask_inf_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + // set elements above the diagonal to 0 + GGML_API struct ggml_tensor * ggml_diag_mask_zero( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_diag_mask_zero_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + GGML_API struct ggml_tensor * ggml_soft_max( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_soft_max_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // a [ne0, ne01, ne02, ne03] + // mask [ne0, ne11, ne12, ne13] | ne11 >= ne01, F16 or F32, optional + // + // broadcast: + // ne02 % ne12 == 0 + // ne03 % ne13 == 0 + // + // fused soft_max(a*scale + mask*(ALiBi slope)) + // max_bias = 0.0f for no ALiBi + GGML_API struct ggml_tensor * ggml_soft_max_ext( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * mask, + float scale, + float max_bias); + + GGML_API struct ggml_tensor * ggml_soft_max_ext_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * mask, + float scale, + float max_bias); + + GGML_API void ggml_soft_max_add_sinks( + struct ggml_tensor * a, + struct ggml_tensor * sinks); + + GGML_API struct ggml_tensor * ggml_soft_max_ext_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + float scale, + float max_bias); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_soft_max_ext_back_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + float scale, + float max_bias); + + // rotary position embedding + // if (mode & 1) - skip n_past elements (NOT SUPPORTED) + // if (mode & GGML_ROPE_TYPE_NEOX) - GPT-NeoX style + // + // b is an int32 vector with size a->ne[2], it contains the positions + GGML_API struct ggml_tensor * ggml_rope( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int n_dims, + int mode); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_rope_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int n_dims, + int mode); + + // custom RoPE + // c is freq factors (e.g. phi3-128k), (optional) + GGML_API struct ggml_tensor * ggml_rope_ext( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + GGML_API struct ggml_tensor * ggml_rope_multi( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int sections[GGML_MROPE_SECTIONS], + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_rope_ext_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + GGML_API struct ggml_tensor * ggml_rope_multi_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int sections[GGML_MROPE_SECTIONS], + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_rope_custom( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow), + "use ggml_rope_ext instead"); + + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_rope_custom_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow), + "use ggml_rope_ext_inplace instead"); + + // compute correction dims for YaRN RoPE scaling + GGML_API void ggml_rope_yarn_corr_dims( + int n_dims, int n_ctx_orig, float freq_base, float beta_fast, float beta_slow, float dims[2]); + + // rotary position embedding backward, i.e compute dx from dy + // a - dy + GGML_API struct ggml_tensor * ggml_rope_ext_back( + struct ggml_context * ctx, + struct ggml_tensor * a, // gradients of ggml_rope result + struct ggml_tensor * b, // positions + struct ggml_tensor * c, // freq factors + int n_dims, + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + GGML_API struct ggml_tensor * ggml_rope_multi_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + int n_dims, + int sections[4], + int mode, + int n_ctx_orig, + float freq_base, + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + + // clamp + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_clamp( + struct ggml_context * ctx, + struct ggml_tensor * a, + float min, + float max); + + // im2col + // converts data into a format that effectively results in a convolution when combined with matrix multiplication + GGML_API struct ggml_tensor * ggml_im2col( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1, // dilation dimension 1 + bool is_2D, + enum ggml_type dst_type); + + GGML_API struct ggml_tensor * ggml_im2col_back( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // gradient of im2col output + int64_t * ne, // shape of im2col input + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1, // dilation dimension 1 + bool is_2D); + + GGML_API struct ggml_tensor * ggml_conv_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride + int p0, // padding + int d0); // dilation + + // conv_1d with padding = half + // alias for ggml_conv_1d(a, b, s, a->ne[0]/2, d) + GGML_API struct ggml_tensor* ggml_conv_1d_ph( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s, // stride + int d); // dilation + + // depthwise + // TODO: this is very likely wrong for some cases! - needs more testing + GGML_API struct ggml_tensor * ggml_conv_1d_dw( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride + int p0, // padding + int d0); // dilation + + GGML_API struct ggml_tensor * ggml_conv_1d_dw_ph( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride + int d0); // dilation + + GGML_API struct ggml_tensor * ggml_conv_transpose_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride + int p0, // padding + int d0); // dilation + + GGML_API struct ggml_tensor * ggml_conv_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1); // dilation dimension 1 + + GGML_API struct ggml_tensor * ggml_im2col_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int64_t IC, + int s0, // stride width + int s1, // stride height + int s2, // stride depth + int p0, // padding width + int p1, // padding height + int p2, // padding depth + int d0, // dilation width + int d1, // dilation height + int d2, // dilation depth + enum ggml_type dst_type); + + // a: [OC*IC, KD, KH, KW] + // b: [N*IC, ID, IH, IW] + // result: [N*OC, OD, OH, OW] + GGML_API struct ggml_tensor * ggml_conv_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int64_t IC, + int s0, // stride width + int s1, // stride height + int s2, // stride depth + int p0, // padding width + int p1, // padding height + int p2, // padding depth + int d0, // dilation width + int d1, // dilation height + int d2 // dilation depth + ); + + // kernel size is a->ne[0] x a->ne[1] + // stride is equal to kernel size + // padding is zero + // example: + // a: 16 16 3 768 + // b: 1024 1024 3 1 + // res: 64 64 768 1 + // used in sam + GGML_API struct ggml_tensor * ggml_conv_2d_sk_p0( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // kernel size is a->ne[0] x a->ne[1] + // stride is 1 + // padding is half + // example: + // a: 3 3 256 256 + // b: 64 64 256 1 + // res: 64 64 256 1 + // used in sam + GGML_API struct ggml_tensor * ggml_conv_2d_s1_ph( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // depthwise (via im2col and mul_mat) + GGML_API struct ggml_tensor * ggml_conv_2d_dw( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel + struct ggml_tensor * b, // data + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1); // dilation dimension 1 + + // Depthwise 2D convolution + // may be faster than ggml_conv_2d_dw, but not available in all backends + // a: KW KH 1 C convolution kernel + // b: W H C N input data + // res: W_out H_out C N + GGML_API struct ggml_tensor * ggml_conv_2d_dw_direct( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int stride0, + int stride1, + int pad0, + int pad1, + int dilation0, + int dilation1); + + GGML_API struct ggml_tensor * ggml_conv_transpose_2d_p0( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int stride); + + GGML_API struct ggml_tensor * ggml_conv_2d_direct( + struct ggml_context * ctx, + struct ggml_tensor * a, // convolution kernel [KW, KH, IC, OC] + struct ggml_tensor * b, // input data [W, H, C, N] + int s0, // stride dimension 0 + int s1, // stride dimension 1 + int p0, // padding dimension 0 + int p1, // padding dimension 1 + int d0, // dilation dimension 0 + int d1); // dilation dimension 1 + + GGML_API struct ggml_tensor * ggml_conv_3d_direct( + struct ggml_context * ctx, + struct ggml_tensor * a, // kernel [KW, KH, KD, IC * OC] + struct ggml_tensor * b, // input [W, H, D, C * N] + int s0, // stride + int s1, + int s2, + int p0, // padding + int p1, + int p2, + int d0, // dilation + int d1, + int d2, + int n_channels, + int n_batch, + int n_channels_out); + + enum ggml_op_pool { + GGML_OP_POOL_MAX, + GGML_OP_POOL_AVG, + GGML_OP_POOL_COUNT, + }; + + GGML_API struct ggml_tensor * ggml_pool_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_op_pool op, + int k0, // kernel size + int s0, // stride + int p0); // padding + + // the result will have 2*p0 padding for the first dimension + // and 2*p1 padding for the second dimension + GGML_API struct ggml_tensor * ggml_pool_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_op_pool op, + int k0, + int k1, + int s0, + int s1, + float p0, + float p1); + + GGML_API struct ggml_tensor * ggml_pool_2d_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * af, // "a"/input used in forward pass + enum ggml_op_pool op, + int k0, + int k1, + int s0, + int s1, + float p0, + float p1); + + enum ggml_scale_mode { + GGML_SCALE_MODE_NEAREST = 0, + GGML_SCALE_MODE_BILINEAR = 1, + GGML_SCALE_MODE_BICUBIC = 2, + + GGML_SCALE_MODE_COUNT + }; + + enum ggml_scale_flag { + GGML_SCALE_FLAG_ALIGN_CORNERS = (1 << 8) + }; + + // interpolate + // multiplies ne0 and ne1 by scale factor + GGML_API struct ggml_tensor * ggml_upscale( + struct ggml_context * ctx, + struct ggml_tensor * a, + int scale_factor, + enum ggml_scale_mode mode); + + // interpolate + // interpolate scale to specified dimensions + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_upscale_ext( + struct ggml_context * ctx, + struct ggml_tensor * a, + int ne0, + int ne1, + int ne2, + int ne3, + enum ggml_scale_mode mode), + "use ggml_interpolate instead"); + + // Up- or downsamples the input to the specified size. + // 2D scale modes (eg. bilinear) are applied to the first two dimensions. + GGML_API struct ggml_tensor * ggml_interpolate( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3, + uint32_t mode); // ggml_scale_mode [ | ggml_scale_flag...] + + // pad each dimension with zeros: [x, ..., x] -> [x, ..., x, 0, ..., 0] + GGML_API struct ggml_tensor * ggml_pad( + struct ggml_context * ctx, + struct ggml_tensor * a, + int p0, + int p1, + int p2, + int p3); + + GGML_API struct ggml_tensor * ggml_pad_ext( + struct ggml_context * ctx, + struct ggml_tensor * a, + int lp0, + int rp0, + int lp1, + int rp1, + int lp2, + int rp2, + int lp3, + int rp3 + ); + + // pad each dimension with reflection: [a, b, c, d] -> [b, a, b, c, d, c] + GGML_API struct ggml_tensor * ggml_pad_reflect_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int p0, + int p1); + + // Move tensor elements by an offset given for each dimension. Elements that + // are shifted beyond the last position are wrapped around to the beginning. + GGML_API struct ggml_tensor * ggml_roll( + struct ggml_context * ctx, + struct ggml_tensor * a, + int shift0, + int shift1, + int shift2, + int shift3); + + + // Ref: https://github.com/CompVis/stable-diffusion/blob/main/ldm/modules/diffusionmodules/util.py#L151 + // timesteps: [N,] + // return: [N, dim] + GGML_API struct ggml_tensor * ggml_timestep_embedding( + struct ggml_context * ctx, + struct ggml_tensor * timesteps, + int dim, + int max_period); + + // sort rows + enum ggml_sort_order { + GGML_SORT_ORDER_ASC, + GGML_SORT_ORDER_DESC, + }; + + GGML_API struct ggml_tensor * ggml_argsort( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_sort_order order); + + GGML_API struct ggml_tensor * ggml_arange( + struct ggml_context * ctx, + float start, + float stop, + float step); + + // top k elements per row + GGML_API struct ggml_tensor * ggml_top_k( + struct ggml_context * ctx, + struct ggml_tensor * a, + int k); + +#define GGML_KQ_MASK_PAD 64 + + // q: [n_embd_k, n_batch, n_head, ne3 ] + // k: [n_embd_k, n_kv, n_head_kv, ne3 ] + // v: [n_embd_v, n_kv, n_head_kv, ne3 ] !! not transposed !! + // mask: [n_kv, n_batch_pad, ne32, ne33] !! n_batch_pad = GGML_PAD(n_batch, GGML_KQ_MASK_PAD) !! + // res: [n_embd_v, n_head, n_batch, ne3 ] !! permuted !! + // + // broadcast: + // n_head % n_head_kv == 0 + // n_head % ne32 == 0 + // ne3 % ne33 == 0 + // + GGML_API struct ggml_tensor * ggml_flash_attn_ext( + struct ggml_context * ctx, + struct ggml_tensor * q, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * mask, + float scale, + float max_bias, + float logit_softcap); + + GGML_API void ggml_flash_attn_ext_set_prec( + struct ggml_tensor * a, + enum ggml_prec prec); + + GGML_API enum ggml_prec ggml_flash_attn_ext_get_prec( + const struct ggml_tensor * a); + + GGML_API void ggml_flash_attn_ext_add_sinks( + struct ggml_tensor * a, + struct ggml_tensor * sinks); + + // TODO: needs to be adapted to ggml_flash_attn_ext + GGML_API struct ggml_tensor * ggml_flash_attn_back( + struct ggml_context * ctx, + struct ggml_tensor * q, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * d, + bool masked); + + GGML_API struct ggml_tensor * ggml_ssm_conv( + struct ggml_context * ctx, + struct ggml_tensor * sx, + struct ggml_tensor * c); + + GGML_API struct ggml_tensor * ggml_ssm_scan( + struct ggml_context * ctx, + struct ggml_tensor * s, + struct ggml_tensor * x, + struct ggml_tensor * dt, + struct ggml_tensor * A, + struct ggml_tensor * B, + struct ggml_tensor * C, + struct ggml_tensor * ids); + + // partition into non-overlapping windows with padding if needed + // example: + // a: 768 64 64 1 + // w: 14 + // res: 768 14 14 25 + // used in sam + GGML_API struct ggml_tensor * ggml_win_part( + struct ggml_context * ctx, + struct ggml_tensor * a, + int w); + + // reverse of ggml_win_part + // used in sam + GGML_API struct ggml_tensor * ggml_win_unpart( + struct ggml_context * ctx, + struct ggml_tensor * a, + int w0, + int h0, + int w); + + GGML_API struct ggml_tensor * ggml_unary( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_unary_op op); + + GGML_API struct ggml_tensor * ggml_unary_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_unary_op op); + + // used in sam + GGML_API struct ggml_tensor * ggml_get_rel_pos( + struct ggml_context * ctx, + struct ggml_tensor * a, + int qh, + int kh); + + // used in sam + GGML_API struct ggml_tensor * ggml_add_rel_pos( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * pw, + struct ggml_tensor * ph); + + GGML_API struct ggml_tensor * ggml_add_rel_pos_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * pw, + struct ggml_tensor * ph); + + GGML_API struct ggml_tensor * ggml_rwkv_wkv6( + struct ggml_context * ctx, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * r, + struct ggml_tensor * tf, + struct ggml_tensor * td, + struct ggml_tensor * state); + + GGML_API struct ggml_tensor * ggml_gated_linear_attn( + struct ggml_context * ctx, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * q, + struct ggml_tensor * g, + struct ggml_tensor * state, + float scale); + + GGML_API struct ggml_tensor * ggml_rwkv_wkv7( + struct ggml_context * ctx, + struct ggml_tensor * r, + struct ggml_tensor * w, + struct ggml_tensor * k, + struct ggml_tensor * v, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * state); + + // custom operators + + typedef void (*ggml_custom1_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, int ith, int nth, void * userdata); + typedef void (*ggml_custom2_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, const struct ggml_tensor * b, int ith, int nth, void * userdata); + typedef void (*ggml_custom3_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, const struct ggml_tensor * b, const struct ggml_tensor * c, int ith, int nth, void * userdata); + +#define GGML_N_TASKS_MAX (-1) + // n_tasks == GGML_N_TASKS_MAX means to use max number of tasks + + GGML_API struct ggml_tensor * ggml_map_custom1( + struct ggml_context * ctx, + struct ggml_tensor * a, + ggml_custom1_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom1_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + ggml_custom1_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom2( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + ggml_custom2_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom2_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + ggml_custom2_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom3( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + ggml_custom3_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom3_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + ggml_custom3_op_t fun, + int n_tasks, + void * userdata); + + typedef void (*ggml_custom_op_t)(struct ggml_tensor * dst , int ith, int nth, void * userdata); + + GGML_API struct ggml_tensor * ggml_custom_4d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3, + struct ggml_tensor ** args, + int n_args, + ggml_custom_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_custom_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor ** args, + int n_args, + ggml_custom_op_t fun, + int n_tasks, + void * userdata); + + // loss function + + GGML_API struct ggml_tensor * ggml_cross_entropy_loss( + struct ggml_context * ctx, + struct ggml_tensor * a, // logits + struct ggml_tensor * b); // labels + + GGML_API struct ggml_tensor * ggml_cross_entropy_loss_back( + struct ggml_context * ctx, + struct ggml_tensor * a, // logits + struct ggml_tensor * b, // labels + struct ggml_tensor * c); // gradients of cross_entropy_loss result + + // AdamW optimizer step + // Paper: https://arxiv.org/pdf/1711.05101v3.pdf + // PyTorch: https://pytorch.org/docs/stable/generated/torch.optim.AdamW.html + GGML_API struct ggml_tensor * ggml_opt_step_adamw( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * grad, + struct ggml_tensor * m, + struct ggml_tensor * v, + struct ggml_tensor * adamw_params); // parameters such as the learning rate + + // stochastic gradient descent step (with weight decay) + GGML_API struct ggml_tensor * ggml_opt_step_sgd( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * grad, + struct ggml_tensor * sgd_params); // alpha, weight decay + + // + // automatic differentiation + // + + GGML_API void ggml_build_forward_expand(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor); + GGML_API void ggml_build_backward_expand( + struct ggml_context * ctx, // context for gradient computation + struct ggml_cgraph * cgraph, + struct ggml_tensor ** grad_accs); + + // graph allocation in a context + GGML_API struct ggml_cgraph * ggml_new_graph (struct ggml_context * ctx); // size = GGML_DEFAULT_GRAPH_SIZE, grads = false + GGML_API struct ggml_cgraph * ggml_new_graph_custom(struct ggml_context * ctx, size_t size, bool grads); + GGML_API struct ggml_cgraph * ggml_graph_dup (struct ggml_context * ctx, struct ggml_cgraph * cgraph, bool force_grads); + GGML_API void ggml_graph_cpy (struct ggml_cgraph * src, struct ggml_cgraph * dst); + GGML_API void ggml_graph_reset (struct ggml_cgraph * cgraph); // set regular grads + optimizer momenta to 0, set loss grad to 1 + GGML_API void ggml_graph_clear (struct ggml_cgraph * cgraph); + + GGML_API int ggml_graph_size (struct ggml_cgraph * cgraph); + GGML_API struct ggml_tensor * ggml_graph_node (struct ggml_cgraph * cgraph, int i); // if i < 0, returns nodes[n_nodes + i] + GGML_API struct ggml_tensor ** ggml_graph_nodes (struct ggml_cgraph * cgraph); + GGML_API int ggml_graph_n_nodes(struct ggml_cgraph * cgraph); + + GGML_API void ggml_graph_add_node(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor); + + GGML_API size_t ggml_graph_overhead(void); + GGML_API size_t ggml_graph_overhead_custom(size_t size, bool grads); + + GGML_API struct ggml_tensor * ggml_graph_get_tensor (const struct ggml_cgraph * cgraph, const char * name); + GGML_API struct ggml_tensor * ggml_graph_get_grad (const struct ggml_cgraph * cgraph, const struct ggml_tensor * node); + GGML_API struct ggml_tensor * ggml_graph_get_grad_acc(const struct ggml_cgraph * cgraph, const struct ggml_tensor * node); + + // print info and performance information for the graph + GGML_API void ggml_graph_print(const struct ggml_cgraph * cgraph); + + // dump the graph into a file using the dot format + GGML_API void ggml_graph_dump_dot(const struct ggml_cgraph * gb, const struct ggml_cgraph * gf, const char * filename); + + // TODO these functions were sandwiched in the old optimization interface, is there a better place for them? + typedef void (*ggml_log_callback)(enum ggml_log_level level, const char * text, void * user_data); + + // Set callback for all future logging events. + // If this is not called, or NULL is supplied, everything is output on stderr. + GGML_API void ggml_log_set(ggml_log_callback log_callback, void * user_data); + + GGML_API struct ggml_tensor * ggml_set_zero(struct ggml_tensor * tensor); + + // + // quantization + // + + // - ggml_quantize_init can be called multiple times with the same type + // it will only initialize the quantization tables for the first call or after ggml_quantize_free + // automatically called by ggml_quantize_chunk for convenience + // + // - ggml_quantize_free will free any memory allocated by ggml_quantize_init + // call this at the end of the program to avoid memory leaks + // + // note: these are thread-safe + // + GGML_API void ggml_quantize_init(enum ggml_type type); + GGML_API void ggml_quantize_free(void); + + // some quantization type cannot be used without an importance matrix + GGML_API bool ggml_quantize_requires_imatrix(enum ggml_type type); + + // calls ggml_quantize_init internally (i.e. can allocate memory) + GGML_API size_t ggml_quantize_chunk( + enum ggml_type type, + const float * src, + void * dst, + int64_t start, + int64_t nrows, + int64_t n_per_row, + const float * imatrix); + +#ifdef __cplusplus + // restrict not standard in C++ +# if defined(__GNUC__) +# define GGML_RESTRICT __restrict__ +# elif defined(__clang__) +# define GGML_RESTRICT __restrict +# elif defined(_MSC_VER) +# define GGML_RESTRICT __restrict +# else +# define GGML_RESTRICT +# endif +#else +# if defined (_MSC_VER) && (__STDC_VERSION__ < 201112L) +# define GGML_RESTRICT __restrict +# else +# define GGML_RESTRICT restrict +# endif +#endif + typedef void (*ggml_to_float_t) (const void * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); + typedef void (*ggml_from_float_t)(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); + + struct ggml_type_traits { + const char * type_name; + int64_t blck_size; + int64_t blck_size_interleave; // interleave elements in blocks + size_t type_size; + bool is_quantized; + ggml_to_float_t to_float; + ggml_from_float_t from_float_ref; + }; + + GGML_API const struct ggml_type_traits * ggml_get_type_traits(enum ggml_type type); + + // ggml threadpool + // TODO: currently, only a few functions are in the base ggml API, while the rest are in the CPU backend + // the goal should be to create an API that other backends can use move everything to the ggml base + + // scheduling priorities + enum ggml_sched_priority { + GGML_SCHED_PRIO_LOW = -1, + GGML_SCHED_PRIO_NORMAL, + GGML_SCHED_PRIO_MEDIUM, + GGML_SCHED_PRIO_HIGH, + GGML_SCHED_PRIO_REALTIME + }; + + // threadpool params + // Use ggml_threadpool_params_default() or ggml_threadpool_params_init() to populate the defaults + struct ggml_threadpool_params { + bool cpumask[GGML_MAX_N_THREADS]; // mask of cpu cores (all-zeros means use default affinity settings) + int n_threads; // number of threads + enum ggml_sched_priority prio; // thread priority + uint32_t poll; // polling level (0 - no polling, 100 - aggressive polling) + bool strict_cpu; // strict cpu placement + bool paused; // start in paused state + }; + + struct ggml_threadpool; // forward declaration, see ggml.c + + typedef struct ggml_threadpool * ggml_threadpool_t; + + GGML_API struct ggml_threadpool_params ggml_threadpool_params_default(int n_threads); + GGML_API void ggml_threadpool_params_init (struct ggml_threadpool_params * p, int n_threads); + GGML_API bool ggml_threadpool_params_match (const struct ggml_threadpool_params * p0, const struct ggml_threadpool_params * p1); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/gguf.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/gguf.h new file mode 100644 index 00000000..79ee2020 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/gguf.h @@ -0,0 +1,202 @@ +// This file contains functionality related to "GGUF" files, the binary file format used by ggml. +// GGUF files have the following structure: +// +// 1. File magic "GGUF" (4 bytes). +// 2. File version (uint32_t). +// 3. Number of ggml tensors in file (int64_t). +// 4. Number of key-value-pairs in file (int64_t). +// 5. For each KV pair: +// 1. The key (string). +// 2. The value type (gguf_type). +// 3a. If the value type is GGUF_TYPE_ARRAY: +// 1. The type of the array (gguf_type). +// 2. The number of elements in the array (uint64_t). +// 3. The binary representation of each element in the array. +// 3b. Otherwise: +// 1. The binary representation of the value. +// 6. For each ggml tensor: +// 1. The tensor name (string). +// 2. The number of dimensions of the tensor (uint32_t). +// 3. For each dimension: +// 1. The size of the tensor in the dimension (int64_t). +// 4. The tensor data type (ggml_type). +// 5. The tensor data offset in the tensor data binary blob (uint64_t). +// 7. The tensor data binary blob (optional, aligned). +// +// Strings are serialized as the string length (uint64_t) followed by the C string without the null terminator. +// All enums are stored as int32_t. +// All bool values are stored as int8_t. +// If the special key "general.alignment" (uint32_t) is defined it is used for alignment, +// otherwise GGUF_DEFAULT_ALIGNMENT is used. +// +// Module maintainer: Johannes Gäßler (@JohannesGaessler, johannesg@5d6.de) + +#pragma once + +#include "ggml.h" + +#include +#include + +#define GGUF_MAGIC "GGUF" +#define GGUF_VERSION 3 + +#define GGUF_KEY_GENERAL_ALIGNMENT "general.alignment" + +#define GGUF_DEFAULT_ALIGNMENT 32 + +#ifdef __cplusplus +extern "C" { +#endif + + // types that can be stored as GGUF KV data + enum gguf_type { + GGUF_TYPE_UINT8 = 0, + GGUF_TYPE_INT8 = 1, + GGUF_TYPE_UINT16 = 2, + GGUF_TYPE_INT16 = 3, + GGUF_TYPE_UINT32 = 4, + GGUF_TYPE_INT32 = 5, + GGUF_TYPE_FLOAT32 = 6, + GGUF_TYPE_BOOL = 7, + GGUF_TYPE_STRING = 8, + GGUF_TYPE_ARRAY = 9, + GGUF_TYPE_UINT64 = 10, + GGUF_TYPE_INT64 = 11, + GGUF_TYPE_FLOAT64 = 12, + GGUF_TYPE_COUNT, // marks the end of the enum + }; + + struct gguf_context; + + struct gguf_init_params { + bool no_alloc; + + // if not NULL, create a ggml_context and allocate the tensor data in it + struct ggml_context ** ctx; + }; + + GGML_API struct gguf_context * gguf_init_empty(void); + GGML_API struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_params params); + //GGML_API struct gguf_context * gguf_init_from_buffer(..); + + GGML_API void gguf_free(struct gguf_context * ctx); + + GGML_API const char * gguf_type_name(enum gguf_type type); + + GGML_API uint32_t gguf_get_version (const struct gguf_context * ctx); + GGML_API size_t gguf_get_alignment (const struct gguf_context * ctx); + GGML_API size_t gguf_get_data_offset(const struct gguf_context * ctx); + + GGML_API int64_t gguf_get_n_kv(const struct gguf_context * ctx); + GGML_API int64_t gguf_find_key(const struct gguf_context * ctx, const char * key); // returns -1 if key is not found + GGML_API const char * gguf_get_key (const struct gguf_context * ctx, int64_t key_id); + + GGML_API enum gguf_type gguf_get_kv_type (const struct gguf_context * ctx, int64_t key_id); + GGML_API enum gguf_type gguf_get_arr_type(const struct gguf_context * ctx, int64_t key_id); + + // will abort if the wrong type is used for the key + GGML_API uint8_t gguf_get_val_u8 (const struct gguf_context * ctx, int64_t key_id); + GGML_API int8_t gguf_get_val_i8 (const struct gguf_context * ctx, int64_t key_id); + GGML_API uint16_t gguf_get_val_u16 (const struct gguf_context * ctx, int64_t key_id); + GGML_API int16_t gguf_get_val_i16 (const struct gguf_context * ctx, int64_t key_id); + GGML_API uint32_t gguf_get_val_u32 (const struct gguf_context * ctx, int64_t key_id); + GGML_API int32_t gguf_get_val_i32 (const struct gguf_context * ctx, int64_t key_id); + GGML_API float gguf_get_val_f32 (const struct gguf_context * ctx, int64_t key_id); + GGML_API uint64_t gguf_get_val_u64 (const struct gguf_context * ctx, int64_t key_id); + GGML_API int64_t gguf_get_val_i64 (const struct gguf_context * ctx, int64_t key_id); + GGML_API double gguf_get_val_f64 (const struct gguf_context * ctx, int64_t key_id); + GGML_API bool gguf_get_val_bool(const struct gguf_context * ctx, int64_t key_id); + GGML_API const char * gguf_get_val_str (const struct gguf_context * ctx, int64_t key_id); + GGML_API const void * gguf_get_val_data(const struct gguf_context * ctx, int64_t key_id); + GGML_API size_t gguf_get_arr_n (const struct gguf_context * ctx, int64_t key_id); + + // get raw pointer to the first element of the array with the given key_id + // for bool arrays, note that they are always stored as int8 on all platforms (usually this makes no difference) + GGML_API const void * gguf_get_arr_data(const struct gguf_context * ctx, int64_t key_id); + + // get ith C string from array with given key_id + GGML_API const char * gguf_get_arr_str (const struct gguf_context * ctx, int64_t key_id, size_t i); + + GGML_API int64_t gguf_get_n_tensors (const struct gguf_context * ctx); + GGML_API int64_t gguf_find_tensor (const struct gguf_context * ctx, const char * name); // returns -1 if the tensor is not found + GGML_API size_t gguf_get_tensor_offset(const struct gguf_context * ctx, int64_t tensor_id); + GGML_API const char * gguf_get_tensor_name (const struct gguf_context * ctx, int64_t tensor_id); + GGML_API enum ggml_type gguf_get_tensor_type (const struct gguf_context * ctx, int64_t tensor_id); + GGML_API size_t gguf_get_tensor_size (const struct gguf_context * ctx, int64_t tensor_id); + + // removes key if it exists, returns id that the key had prior to removal (-1 if it didn't exist) + GGML_API int64_t gguf_remove_key(struct gguf_context * ctx, const char * key); + + // overrides an existing KV pair or adds a new one, the new KV pair is always at the back + GGML_API void gguf_set_val_u8 (struct gguf_context * ctx, const char * key, uint8_t val); + GGML_API void gguf_set_val_i8 (struct gguf_context * ctx, const char * key, int8_t val); + GGML_API void gguf_set_val_u16 (struct gguf_context * ctx, const char * key, uint16_t val); + GGML_API void gguf_set_val_i16 (struct gguf_context * ctx, const char * key, int16_t val); + GGML_API void gguf_set_val_u32 (struct gguf_context * ctx, const char * key, uint32_t val); + GGML_API void gguf_set_val_i32 (struct gguf_context * ctx, const char * key, int32_t val); + GGML_API void gguf_set_val_f32 (struct gguf_context * ctx, const char * key, float val); + GGML_API void gguf_set_val_u64 (struct gguf_context * ctx, const char * key, uint64_t val); + GGML_API void gguf_set_val_i64 (struct gguf_context * ctx, const char * key, int64_t val); + GGML_API void gguf_set_val_f64 (struct gguf_context * ctx, const char * key, double val); + GGML_API void gguf_set_val_bool(struct gguf_context * ctx, const char * key, bool val); + GGML_API void gguf_set_val_str (struct gguf_context * ctx, const char * key, const char * val); + + // creates a new array with n elements of the given type and copies the corresponding number of bytes from data + GGML_API void gguf_set_arr_data(struct gguf_context * ctx, const char * key, enum gguf_type type, const void * data, size_t n); + + // creates a new array with n strings and copies the corresponding strings from data + GGML_API void gguf_set_arr_str (struct gguf_context * ctx, const char * key, const char ** data, size_t n); + + // set or add KV pairs from another context + GGML_API void gguf_set_kv(struct gguf_context * ctx, const struct gguf_context * src); + + // add tensor to GGUF context, tensor name must be unique + GGML_API void gguf_add_tensor(struct gguf_context * ctx, const struct ggml_tensor * tensor); + + // after changing a tensor's type, the offsets of all tensors with higher indices are immediately recalculated + // in such a way that the tensor data remains as one contiguous block (except for padding) + GGML_API void gguf_set_tensor_type(struct gguf_context * ctx, const char * name, enum ggml_type type); + + // assumes that at least gguf_get_tensor_size bytes can be read from data + GGML_API void gguf_set_tensor_data(struct gguf_context * ctx, const char * name, const void * data); + + // writing gguf files can be done in 3 ways: + // + // - write the entire gguf_context to a binary file in a single pass: + // + // gguf_write_to_file(ctx, fname, /*only_meta =*/ false); + // + // - write only the meta data to a file, then re-open the file and append the tensor data: + // + // gguf_write_to_file(ctx, fname, /*only_meta =*/ true); + // FILE * f = fopen(fname, "ab"); + // fwrite(f, ...); // write tensor data + // fclose(f); + // + // - first prepare a file with a placeholder for the meta data, write the tensor data, then write the meta data: + // + // FILE * f = fopen(fname, "wb"); + // const size_t size_meta = gguf_get_meta_size(ctx); + // fseek(f, size_meta, SEEK_SET); + // fwrite(f, ...); // write tensor data + // void * data = malloc(size_meta); + // gguf_get_meta_data(ctx, data); + // rewind(f); + // fwrite(data, 1, data, f); + // free(data); + // fclose(f); + // + + // write the entire context to a binary file + GGML_API bool gguf_write_to_file(const struct gguf_context * ctx, const char * fname, bool only_meta); + + // get the size in bytes of the meta data (header, kv pairs, tensor info) including padding + GGML_API size_t gguf_get_meta_size(const struct gguf_context * ctx); + + // writes the meta data to pointer "data" + GGML_API void gguf_get_meta_data(const struct gguf_context * ctx, void * data); + +#ifdef __cplusplus +} +#endif diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/llama-cpp.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/llama-cpp.h new file mode 100644 index 00000000..8f636817 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/llama-cpp.h @@ -0,0 +1,30 @@ +#pragma once + +#ifndef __cplusplus +#error "This header is for C++ only" +#endif + +#include + +#include "llama.h" + +struct llama_model_deleter { + void operator()(llama_model * model) { llama_model_free(model); } +}; + +struct llama_context_deleter { + void operator()(llama_context * context) { llama_free(context); } +}; + +struct llama_sampler_deleter { + void operator()(llama_sampler * sampler) { llama_sampler_free(sampler); } +}; + +struct llama_adapter_lora_deleter { + void operator()(llama_adapter_lora * adapter) { llama_adapter_lora_free(adapter); } +}; + +typedef std::unique_ptr llama_model_ptr; +typedef std::unique_ptr llama_context_ptr; +typedef std::unique_ptr llama_sampler_ptr; +typedef std::unique_ptr llama_adapter_lora_ptr; diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/llama.h b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/llama.h new file mode 100644 index 00000000..8547226f --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Headers/llama.h @@ -0,0 +1,1414 @@ +#ifndef LLAMA_H +#define LLAMA_H + +#include "ggml.h" +#include "ggml-cpu.h" +#include "ggml-backend.h" +#include "ggml-opt.h" + +#include +#include +#include +#include + +#ifdef LLAMA_SHARED +# if defined(_WIN32) && !defined(__MINGW32__) +# ifdef LLAMA_BUILD +# define LLAMA_API __declspec(dllexport) +# else +# define LLAMA_API __declspec(dllimport) +# endif +# else +# define LLAMA_API __attribute__ ((visibility ("default"))) +# endif +#else +# define LLAMA_API +#endif + +#ifdef __GNUC__ +# define DEPRECATED(func, hint) func __attribute__((deprecated(hint))) +#elif defined(_MSC_VER) +# define DEPRECATED(func, hint) __declspec(deprecated(hint)) func +#else +# define DEPRECATED(func, hint) func +#endif + +#define LLAMA_DEFAULT_SEED 0xFFFFFFFF + +#define LLAMA_TOKEN_NULL -1 + +#define LLAMA_FILE_MAGIC_GGLA 0x67676c61u // 'ggla' +#define LLAMA_FILE_MAGIC_GGSN 0x6767736eu // 'ggsn' +#define LLAMA_FILE_MAGIC_GGSQ 0x67677371u // 'ggsq' + +#define LLAMA_SESSION_MAGIC LLAMA_FILE_MAGIC_GGSN +#define LLAMA_SESSION_VERSION 9 + +#define LLAMA_STATE_SEQ_MAGIC LLAMA_FILE_MAGIC_GGSQ +#define LLAMA_STATE_SEQ_VERSION 2 + +#ifdef __cplusplus +extern "C" { +#endif + + // + // C interface + // + // TODO: show sample usage + // + + struct llama_vocab; + struct llama_model; + struct llama_context; + struct llama_sampler; + + typedef struct llama_memory_i * llama_memory_t; + + typedef int32_t llama_pos; + typedef int32_t llama_token; + typedef int32_t llama_seq_id; + + enum llama_vocab_type { + LLAMA_VOCAB_TYPE_NONE = 0, // For models without vocab + LLAMA_VOCAB_TYPE_SPM = 1, // LLaMA tokenizer based on byte-level BPE with byte fallback + LLAMA_VOCAB_TYPE_BPE = 2, // GPT-2 tokenizer based on byte-level BPE + LLAMA_VOCAB_TYPE_WPM = 3, // BERT tokenizer based on WordPiece + LLAMA_VOCAB_TYPE_UGM = 4, // T5 tokenizer based on Unigram + LLAMA_VOCAB_TYPE_RWKV = 5, // RWKV tokenizer based on greedy tokenization + LLAMA_VOCAB_TYPE_PLAMO2 = 6, // PLaMo-2 tokenizer based on Aho-Corasick with dynamic programming + }; + + enum llama_rope_type { + LLAMA_ROPE_TYPE_NONE = -1, + LLAMA_ROPE_TYPE_NORM = 0, + LLAMA_ROPE_TYPE_NEOX = GGML_ROPE_TYPE_NEOX, + LLAMA_ROPE_TYPE_MROPE = GGML_ROPE_TYPE_MROPE, + LLAMA_ROPE_TYPE_IMROPE = GGML_ROPE_TYPE_IMROPE, + LLAMA_ROPE_TYPE_VISION = GGML_ROPE_TYPE_VISION, + }; + + enum llama_token_type { //TODO: remove, required until per token attributes are available from GGUF file + LLAMA_TOKEN_TYPE_UNDEFINED = 0, + LLAMA_TOKEN_TYPE_NORMAL = 1, + LLAMA_TOKEN_TYPE_UNKNOWN = 2, + LLAMA_TOKEN_TYPE_CONTROL = 3, + LLAMA_TOKEN_TYPE_USER_DEFINED = 4, + LLAMA_TOKEN_TYPE_UNUSED = 5, + LLAMA_TOKEN_TYPE_BYTE = 6, + }; + + enum llama_token_attr { + LLAMA_TOKEN_ATTR_UNDEFINED = 0, + LLAMA_TOKEN_ATTR_UNKNOWN = 1 << 0, + LLAMA_TOKEN_ATTR_UNUSED = 1 << 1, + LLAMA_TOKEN_ATTR_NORMAL = 1 << 2, + LLAMA_TOKEN_ATTR_CONTROL = 1 << 3, // SPECIAL? + LLAMA_TOKEN_ATTR_USER_DEFINED = 1 << 4, + LLAMA_TOKEN_ATTR_BYTE = 1 << 5, + LLAMA_TOKEN_ATTR_NORMALIZED = 1 << 6, + LLAMA_TOKEN_ATTR_LSTRIP = 1 << 7, + LLAMA_TOKEN_ATTR_RSTRIP = 1 << 8, + LLAMA_TOKEN_ATTR_SINGLE_WORD = 1 << 9, + }; + + // model file types + enum llama_ftype { + LLAMA_FTYPE_ALL_F32 = 0, + LLAMA_FTYPE_MOSTLY_F16 = 1, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_0 = 2, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_1 = 3, // except 1d tensors + // LLAMA_FTYPE_MOSTLY_Q4_1_SOME_F16 = 4, // tok_embeddings.weight and output.weight are F16 + // LLAMA_FTYPE_MOSTLY_Q4_2 = 5, // support has been removed + // LLAMA_FTYPE_MOSTLY_Q4_3 = 6, // support has been removed + LLAMA_FTYPE_MOSTLY_Q8_0 = 7, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q5_0 = 8, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q5_1 = 9, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q2_K = 10, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q3_K_S = 11, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q3_K_M = 12, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q3_K_L = 13, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_K_S = 14, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_K_M = 15, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q5_K_S = 16, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q5_K_M = 17, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q6_K = 18, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ2_XXS = 19, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ2_XS = 20, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q2_K_S = 21, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ3_XS = 22, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ3_XXS = 23, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ1_S = 24, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ4_NL = 25, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ3_S = 26, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ3_M = 27, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ2_S = 28, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ2_M = 29, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ4_XS = 30, // except 1d tensors + LLAMA_FTYPE_MOSTLY_IQ1_M = 31, // except 1d tensors + LLAMA_FTYPE_MOSTLY_BF16 = 32, // except 1d tensors + //LLAMA_FTYPE_MOSTLY_Q4_0_4_4 = 33, // removed from gguf files, use Q4_0 and runtime repack + //LLAMA_FTYPE_MOSTLY_Q4_0_4_8 = 34, // removed from gguf files, use Q4_0 and runtime repack + //LLAMA_FTYPE_MOSTLY_Q4_0_8_8 = 35, // removed from gguf files, use Q4_0 and runtime repack + LLAMA_FTYPE_MOSTLY_TQ1_0 = 36, // except 1d tensors + LLAMA_FTYPE_MOSTLY_TQ2_0 = 37, // except 1d tensors + LLAMA_FTYPE_MOSTLY_MXFP4_MOE = 38, // except 1d tensors + + LLAMA_FTYPE_GUESSED = 1024, // not specified in the model file + }; + + enum llama_rope_scaling_type { + LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED = -1, + LLAMA_ROPE_SCALING_TYPE_NONE = 0, + LLAMA_ROPE_SCALING_TYPE_LINEAR = 1, + LLAMA_ROPE_SCALING_TYPE_YARN = 2, + LLAMA_ROPE_SCALING_TYPE_LONGROPE = 3, + LLAMA_ROPE_SCALING_TYPE_MAX_VALUE = LLAMA_ROPE_SCALING_TYPE_LONGROPE, + }; + + enum llama_pooling_type { + LLAMA_POOLING_TYPE_UNSPECIFIED = -1, + LLAMA_POOLING_TYPE_NONE = 0, + LLAMA_POOLING_TYPE_MEAN = 1, + LLAMA_POOLING_TYPE_CLS = 2, + LLAMA_POOLING_TYPE_LAST = 3, + LLAMA_POOLING_TYPE_RANK = 4, // used by reranking models to attach the classification head to the graph + }; + + enum llama_attention_type { + LLAMA_ATTENTION_TYPE_UNSPECIFIED = -1, + LLAMA_ATTENTION_TYPE_CAUSAL = 0, + LLAMA_ATTENTION_TYPE_NON_CAUSAL = 1, + }; + + enum llama_flash_attn_type { + LLAMA_FLASH_ATTN_TYPE_AUTO = -1, + LLAMA_FLASH_ATTN_TYPE_DISABLED = 0, + LLAMA_FLASH_ATTN_TYPE_ENABLED = 1, + }; + + LLAMA_API const char * llama_flash_attn_type_name(enum llama_flash_attn_type flash_attn_type); + + enum llama_split_mode { + LLAMA_SPLIT_MODE_NONE = 0, // single GPU + LLAMA_SPLIT_MODE_LAYER = 1, // split layers and KV across GPUs + LLAMA_SPLIT_MODE_ROW = 2, // split layers and KV across GPUs, use tensor parallelism if supported + }; + + // TODO: simplify (https://github.com/ggml-org/llama.cpp/pull/9294#pullrequestreview-2286561979) + typedef struct llama_token_data { + llama_token id; // token id + float logit; // log-odds of the token + float p; // probability of the token + } llama_token_data; + + typedef struct llama_token_data_array { + // TODO: consider SoA + // NOTE: this pointer can be modified by the samplers + llama_token_data * data; + size_t size; + int64_t selected; // this is the index in the data array (i.e. not the token id) + bool sorted; // note: do not assume the data is sorted - always check this flag + } llama_token_data_array; + + typedef bool (*llama_progress_callback)(float progress, void * user_data); + + // Input data for llama_encode/llama_decode + // A llama_batch object can contain input about one or many sequences + // The provided arrays (i.e. token, embd, pos, etc.) must have size of n_tokens + // + // - token : the token ids of the input (used when embd is NULL) + // - embd : token embeddings (i.e. float vector of size n_embd) (used when token is NULL) + // - pos : the positions of the respective token in the sequence + // (if set to NULL, the token position will be tracked automatically by llama_encode/llama_decode) + // - seq_id : the sequence to which the respective token belongs + // (if set to NULL, the sequence ID will be assumed to be 0) + // - logits : if zero, the logits (and/or the embeddings) for the respective token will not be output + // (if set to NULL: + // - if embeddings: all tokens are output + // - if not: only the last token is output + // ) + // + typedef struct llama_batch { + int32_t n_tokens; + + llama_token * token; + float * embd; + llama_pos * pos; + int32_t * n_seq_id; + llama_seq_id ** seq_id; + int8_t * logits; // TODO: rename this to "output" + } llama_batch; + + enum llama_model_kv_override_type { + LLAMA_KV_OVERRIDE_TYPE_INT, + LLAMA_KV_OVERRIDE_TYPE_FLOAT, + LLAMA_KV_OVERRIDE_TYPE_BOOL, + LLAMA_KV_OVERRIDE_TYPE_STR, + }; + + struct llama_model_kv_override { + enum llama_model_kv_override_type tag; + + char key[128]; + + union { + int64_t val_i64; + double val_f64; + bool val_bool; + char val_str[128]; + }; + }; + + struct llama_model_tensor_buft_override { + const char * pattern; + ggml_backend_buffer_type_t buft; + }; + + struct llama_model_params { + // NULL-terminated list of devices to use for offloading (if NULL, all available devices are used) + ggml_backend_dev_t * devices; + + // NULL-terminated list of buffer types to use for tensors that match a pattern + const struct llama_model_tensor_buft_override * tensor_buft_overrides; + + int32_t n_gpu_layers; // number of layers to store in VRAM + enum llama_split_mode split_mode; // how to split the model across multiple GPUs + + // the GPU that is used for the entire model when split_mode is LLAMA_SPLIT_MODE_NONE + int32_t main_gpu; + + // proportion of the model (layers or rows) to offload to each GPU, size: llama_max_devices() + const float * tensor_split; + + // Called with a progress value between 0.0 and 1.0. Pass NULL to disable. + // If the provided progress_callback returns true, model loading continues. + // If it returns false, model loading is immediately aborted. + llama_progress_callback progress_callback; + + // context pointer passed to the progress callback + void * progress_callback_user_data; + + // override key-value pairs of the model meta data + const struct llama_model_kv_override * kv_overrides; + + // Keep the booleans together to avoid misalignment during copy-by-value. + bool vocab_only; // only load the vocabulary, no weights + bool use_mmap; // use mmap if possible + bool use_mlock; // force system to keep model in RAM + bool check_tensors; // validate model tensor data + bool use_extra_bufts; // use extra buffer types (used for weight repacking) + bool no_host; // bypass host buffer allowing extra buffers to be used + }; + + // NOTE: changing the default values of parameters marked as [EXPERIMENTAL] may cause crashes or incorrect results in certain configurations + // https://github.com/ggml-org/llama.cpp/pull/7544 + struct llama_context_params { + uint32_t n_ctx; // text context, 0 = from model + uint32_t n_batch; // logical maximum batch size that can be submitted to llama_decode + uint32_t n_ubatch; // physical maximum batch size + uint32_t n_seq_max; // max number of sequences (i.e. distinct states for recurrent models) + int32_t n_threads; // number of threads to use for generation + int32_t n_threads_batch; // number of threads to use for batch processing + + enum llama_rope_scaling_type rope_scaling_type; // RoPE scaling type, from `enum llama_rope_scaling_type` + enum llama_pooling_type pooling_type; // whether to pool (sum) embedding results by sequence id + enum llama_attention_type attention_type; // attention type to use for embeddings + enum llama_flash_attn_type flash_attn_type; // when to enable Flash Attention + + // ref: https://github.com/ggml-org/llama.cpp/pull/2054 + float rope_freq_base; // RoPE base frequency, 0 = from model + float rope_freq_scale; // RoPE frequency scaling factor, 0 = from model + float yarn_ext_factor; // YaRN extrapolation mix factor, negative = from model + float yarn_attn_factor; // YaRN magnitude scaling factor + float yarn_beta_fast; // YaRN low correction dim + float yarn_beta_slow; // YaRN high correction dim + uint32_t yarn_orig_ctx; // YaRN original context size + float defrag_thold; // [DEPRECATED] defragment the KV cache if holes/size > thold, <= 0 disabled (default) + + ggml_backend_sched_eval_callback cb_eval; + void * cb_eval_user_data; + + enum ggml_type type_k; // data type for K cache [EXPERIMENTAL] + enum ggml_type type_v; // data type for V cache [EXPERIMENTAL] + + // Abort callback + // if it returns true, execution of llama_decode() will be aborted + // currently works only with CPU execution + ggml_abort_callback abort_callback; + void * abort_callback_data; + + // Keep the booleans together and at the end of the struct to avoid misalignment during copy-by-value. + bool embeddings; // if true, extract embeddings (together with logits) + bool offload_kqv; // offload the KQV ops (including the KV cache) to GPU + bool no_perf; // measure performance timings + bool op_offload; // offload host tensor operations to device + bool swa_full; // use full-size SWA cache (https://github.com/ggml-org/llama.cpp/pull/13194#issuecomment-2868343055) + // NOTE: setting to false when n_seq_max > 1 can cause bad performance in some cases + // ref: https://github.com/ggml-org/llama.cpp/pull/13845#issuecomment-2924800573 + bool kv_unified; // use a unified buffer across the input sequences when computing the attention + // try to disable when n_seq_max > 1 for improved performance when the sequences do not share a large prefix + // ref: https://github.com/ggml-org/llama.cpp/pull/14363 + }; + + // model quantization parameters + typedef struct llama_model_quantize_params { + int32_t nthread; // number of threads to use for quantizing, if <=0 will use std::thread::hardware_concurrency() + enum llama_ftype ftype; // quantize to this llama_ftype + enum ggml_type output_tensor_type; // output tensor type + enum ggml_type token_embedding_type; // token embeddings tensor type + bool allow_requantize; // allow quantizing non-f32/f16 tensors + bool quantize_output_tensor; // quantize output.weight + bool only_copy; // only copy tensors - ftype, allow_requantize and quantize_output_tensor are ignored + bool pure; // quantize all tensors to the default type + bool keep_split; // quantize to the same number of shards + void * imatrix; // pointer to importance matrix data + void * kv_overrides; // pointer to vector containing overrides + void * tensor_types; // pointer to vector containing tensor types + void * prune_layers; // pointer to vector containing layer indices to prune + } llama_model_quantize_params; + + typedef struct llama_logit_bias { + llama_token token; + float bias; + } llama_logit_bias; + + typedef struct llama_sampler_chain_params { + bool no_perf; // whether to measure performance timings + } llama_sampler_chain_params; + + // used in chat template + typedef struct llama_chat_message { + const char * role; + const char * content; + } llama_chat_message; + + // lora adapter + struct llama_adapter_lora; + + // Helpers for getting default parameters + // TODO: update API to start accepting pointers to params structs (https://github.com/ggml-org/llama.cpp/discussions/9172) + LLAMA_API struct llama_model_params llama_model_default_params(void); + LLAMA_API struct llama_context_params llama_context_default_params(void); + LLAMA_API struct llama_sampler_chain_params llama_sampler_chain_default_params(void); + LLAMA_API struct llama_model_quantize_params llama_model_quantize_default_params(void); + + // Initialize the llama + ggml backend + // If numa is true, use NUMA optimizations + // Call once at the start of the program + LLAMA_API void llama_backend_init(void); + + // Call once at the end of the program - currently only used for MPI + LLAMA_API void llama_backend_free(void); + + //optional: + LLAMA_API void llama_numa_init(enum ggml_numa_strategy numa); + + // Optional: an auto threadpool gets created in ggml if not passed explicitly + LLAMA_API void llama_attach_threadpool( + struct llama_context * ctx, + ggml_threadpool_t threadpool, + ggml_threadpool_t threadpool_batch); + + LLAMA_API void llama_detach_threadpool(struct llama_context * ctx); + + DEPRECATED(LLAMA_API struct llama_model * llama_load_model_from_file( + const char * path_model, + struct llama_model_params params), + "use llama_model_load_from_file instead"); + + // Load the model from a file + // If the file is split into multiple parts, the file name must follow this pattern: -%05d-of-%05d.gguf + // If the split file name does not follow this pattern, use llama_model_load_from_splits + LLAMA_API struct llama_model * llama_model_load_from_file( + const char * path_model, + struct llama_model_params params); + + // Load the model from multiple splits (support custom naming scheme) + // The paths must be in the correct order + LLAMA_API struct llama_model * llama_model_load_from_splits( + const char ** paths, + size_t n_paths, + struct llama_model_params params); + + LLAMA_API void llama_model_save_to_file( + const struct llama_model * model, + const char * path_model); + + DEPRECATED(LLAMA_API void llama_free_model(struct llama_model * model), + "use llama_model_free instead"); + + LLAMA_API void llama_model_free(struct llama_model * model); + + LLAMA_API struct llama_context * llama_init_from_model( + struct llama_model * model, + struct llama_context_params params); + + DEPRECATED(LLAMA_API struct llama_context * llama_new_context_with_model( + struct llama_model * model, + struct llama_context_params params), + "use llama_init_from_model instead"); + + // Frees all allocated memory + LLAMA_API void llama_free(struct llama_context * ctx); + + LLAMA_API int64_t llama_time_us(void); + + LLAMA_API size_t llama_max_devices(void); + LLAMA_API size_t llama_max_parallel_sequences(void); + + LLAMA_API bool llama_supports_mmap (void); + LLAMA_API bool llama_supports_mlock (void); + LLAMA_API bool llama_supports_gpu_offload(void); + LLAMA_API bool llama_supports_rpc (void); + + // NOTE: After creating a llama_context, it is recommended to query the actual values using these functions + // In some cases the requested values via llama_context_params may differ from the actual values used by the context + // ref: https://github.com/ggml-org/llama.cpp/pull/17046#discussion_r2503085732 + LLAMA_API uint32_t llama_n_ctx (const struct llama_context * ctx); + LLAMA_API uint32_t llama_n_ctx_seq (const struct llama_context * ctx); + LLAMA_API uint32_t llama_n_batch (const struct llama_context * ctx); + LLAMA_API uint32_t llama_n_ubatch (const struct llama_context * ctx); + LLAMA_API uint32_t llama_n_seq_max (const struct llama_context * ctx); + + DEPRECATED(LLAMA_API int32_t llama_n_ctx_train(const struct llama_model * model), "use llama_model_n_ctx_train instead"); + DEPRECATED(LLAMA_API int32_t llama_n_embd (const struct llama_model * model), "use llama_model_n_embd instead"); + DEPRECATED(LLAMA_API int32_t llama_n_layer (const struct llama_model * model), "use llama_model_n_layer instead"); + DEPRECATED(LLAMA_API int32_t llama_n_head (const struct llama_model * model), "use llama_model_n_head instead"); + + DEPRECATED(LLAMA_API int32_t llama_n_vocab (const struct llama_vocab * vocab), "use llama_vocab_n_tokens instead"); + + LLAMA_API const struct llama_model * llama_get_model (const struct llama_context * ctx); + LLAMA_API llama_memory_t llama_get_memory (const struct llama_context * ctx); + LLAMA_API enum llama_pooling_type llama_pooling_type(const struct llama_context * ctx); // TODO: rename to llama_get_pooling_type + + LLAMA_API const struct llama_vocab * llama_model_get_vocab(const struct llama_model * model); + LLAMA_API enum llama_rope_type llama_model_rope_type(const struct llama_model * model); + + LLAMA_API int32_t llama_model_n_ctx_train(const struct llama_model * model); + LLAMA_API int32_t llama_model_n_embd (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_embd_inp (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_layer (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_head (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_head_kv (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_swa (const struct llama_model * model); + + // Get the model's RoPE frequency scaling factor + LLAMA_API float llama_model_rope_freq_scale_train(const struct llama_model * model); + + // Returns the number of classifier outputs (only valid for classifier models) + // Undefined behavior for non-classifier models + LLAMA_API uint32_t llama_model_n_cls_out(const struct llama_model * model); + + // Returns label of classifier output by index ( 1` + // p0 < 0 : [0, p1] + // p1 < 0 : [p0, inf) + LLAMA_API void llama_memory_seq_div( + llama_memory_t mem, + llama_seq_id seq_id, + llama_pos p0, + llama_pos p1, + int d); + + // Returns the smallest position present in the memory for the specified sequence + // This is typically non-zero only for SWA caches + // Note that all positions in the range [pos_min, pos_max] are guaranteed to be present in the memory + // Return -1 if the sequence is empty + LLAMA_API llama_pos llama_memory_seq_pos_min( + llama_memory_t mem, + llama_seq_id seq_id); + + // Returns the largest position present in the memory for the specified sequence + // Note that all positions in the range [pos_min, pos_max] are guaranteed to be present in the memory + // Return -1 if the sequence is empty + LLAMA_API llama_pos llama_memory_seq_pos_max( + llama_memory_t mem, + llama_seq_id seq_id); + + // Check if the memory supports shifting + LLAMA_API bool llama_memory_can_shift(llama_memory_t mem); + + // + // State / sessions + // + + // Returns the *actual* size in bytes of the state + // (logits, embedding and memory) + // Only use when saving the state, not when restoring it, otherwise the size may be too small. + LLAMA_API size_t llama_state_get_size(struct llama_context * ctx); + LLAMA_API DEPRECATED(size_t llama_get_state_size(struct llama_context * ctx), + "use llama_state_get_size instead"); + + // Copies the state to the specified destination address. + // Destination needs to have allocated enough memory. + // Returns the number of bytes copied + LLAMA_API size_t llama_state_get_data( + struct llama_context * ctx, + uint8_t * dst, + size_t size); + LLAMA_API DEPRECATED(size_t llama_copy_state_data( + struct llama_context * ctx, + uint8_t * dst), + "use llama_state_get_data instead"); + + // Set the state reading from the specified address + // Returns the number of bytes read + LLAMA_API size_t llama_state_set_data( + struct llama_context * ctx, + const uint8_t * src, + size_t size); + LLAMA_API DEPRECATED(size_t llama_set_state_data( + struct llama_context * ctx, + const uint8_t * src), + "use llama_state_set_data instead"); + + // Save/load session file + LLAMA_API bool llama_state_load_file( + struct llama_context * ctx, + const char * path_session, + llama_token * tokens_out, + size_t n_token_capacity, + size_t * n_token_count_out); + LLAMA_API DEPRECATED(bool llama_load_session_file( + struct llama_context * ctx, + const char * path_session, + llama_token * tokens_out, + size_t n_token_capacity, + size_t * n_token_count_out), + "use llama_state_load_file instead"); + + LLAMA_API bool llama_state_save_file( + struct llama_context * ctx, + const char * path_session, + const llama_token * tokens, + size_t n_token_count); + LLAMA_API DEPRECATED(bool llama_save_session_file( + struct llama_context * ctx, + const char * path_session, + const llama_token * tokens, + size_t n_token_count), + "use llama_state_save_file instead"); + + // Get the exact size needed to copy the state of a single sequence + LLAMA_API size_t llama_state_seq_get_size( + struct llama_context * ctx, + llama_seq_id seq_id); + + // Copy the state of a single sequence into the specified buffer + LLAMA_API size_t llama_state_seq_get_data( + struct llama_context * ctx, + uint8_t * dst, + size_t size, + llama_seq_id seq_id); + + // Copy the sequence data (originally copied with `llama_state_seq_get_data`) into the specified sequence + // Returns: + // - Positive: Ok + // - Zero: Failed to load + LLAMA_API size_t llama_state_seq_set_data( + struct llama_context * ctx, + const uint8_t * src, + size_t size, + llama_seq_id dest_seq_id); + + LLAMA_API size_t llama_state_seq_save_file( + struct llama_context * ctx, + const char * filepath, + llama_seq_id seq_id, + const llama_token * tokens, + size_t n_token_count); + + LLAMA_API size_t llama_state_seq_load_file( + struct llama_context * ctx, + const char * filepath, + llama_seq_id dest_seq_id, + llama_token * tokens_out, + size_t n_token_capacity, + size_t * n_token_count_out); + +// for backwards-compat +#define LLAMA_STATE_SEQ_FLAGS_SWA_ONLY 1 + +// work only with partial states, such as SWA KV cache or recurrent cache (e.g. Mamba) +#define LLAMA_STATE_SEQ_FLAGS_PARTIAL_ONLY 1 + + typedef uint32_t llama_state_seq_flags; + + LLAMA_API size_t llama_state_seq_get_size_ext( + struct llama_context * ctx, + llama_seq_id seq_id, + llama_state_seq_flags flags); + + LLAMA_API size_t llama_state_seq_get_data_ext( + struct llama_context * ctx, + uint8_t * dst, + size_t size, + llama_seq_id seq_id, + llama_state_seq_flags flags); + + LLAMA_API size_t llama_state_seq_set_data_ext( + struct llama_context * ctx, + const uint8_t * src, + size_t size, + llama_seq_id dest_seq_id, + llama_state_seq_flags flags); + + // + // Decoding + // + + // Return batch for single sequence of tokens + // The sequence ID will be fixed to 0 + // The position of the tokens will be tracked automatically by llama_decode + // + // NOTE: this is a helper function to facilitate transition to the new batch API - avoid using it + // + LLAMA_API struct llama_batch llama_batch_get_one( + llama_token * tokens, + int32_t n_tokens); + + // Allocates a batch of tokens on the heap that can hold a maximum of n_tokens + // Each token can be assigned up to n_seq_max sequence ids + // The batch has to be freed with llama_batch_free() + // If embd != 0, llama_batch.embd will be allocated with size of n_tokens * embd * sizeof(float) + // Otherwise, llama_batch.token will be allocated to store n_tokens llama_token + // The rest of the llama_batch members are allocated with size n_tokens + // All members are left uninitialized + LLAMA_API struct llama_batch llama_batch_init( + int32_t n_tokens, + int32_t embd, + int32_t n_seq_max); + + // Frees a batch of tokens allocated with llama_batch_init() + LLAMA_API void llama_batch_free(struct llama_batch batch); + + // Process a batch of tokens. + // In contrast to llama_decode() - this call does not use KV cache. + // For encode-decoder contexts, processes the batch using the encoder. + // Can store the encoder output internally for later use by the decoder's cross-attention layers. + // 0 - success + // < 0 - error. the memory state is restored to the state before this call + LLAMA_API int32_t llama_encode( + struct llama_context * ctx, + struct llama_batch batch); + + // Process a batch of tokens. + // Requires the context to have a memory. + // For encode-decoder contexts, processes the batch using the decoder. + // Positive return values does not mean a fatal error, but rather a warning. + // Upon fatal-error or abort, the ubatches that managed to be been processed will remain in the memory state of the context + // To handle this correctly, query the memory state using llama_memory_seq_pos_min() and llama_memory_seq_pos_max() + // Upon other return values, the memory state is restored to the state before this call + // 0 - success + // 1 - could not find a KV slot for the batch (try reducing the size of the batch or increase the context) + // 2 - aborted (processed ubatches will remain in the context's memory) + // -1 - invalid input batch + // < -1 - fatal error (processed ubatches will remain in the context's memory) + LLAMA_API int32_t llama_decode( + struct llama_context * ctx, + struct llama_batch batch); + + // Set the number of threads used for decoding + // n_threads is the number of threads used for generation (single token) + // n_threads_batch is the number of threads used for prompt and batch processing (multiple tokens) + LLAMA_API void llama_set_n_threads(struct llama_context * ctx, int32_t n_threads, int32_t n_threads_batch); + + // Get the number of threads used for generation of a single token. + LLAMA_API int32_t llama_n_threads(struct llama_context * ctx); + + // Get the number of threads used for prompt and batch processing (multiple token). + LLAMA_API int32_t llama_n_threads_batch(struct llama_context * ctx); + + // Set whether the context outputs embeddings or not + // TODO: rename to avoid confusion with llama_get_embeddings() + LLAMA_API void llama_set_embeddings(struct llama_context * ctx, bool embeddings); + + // Set whether to use causal attention or not + // If set to true, the model will only attend to the past tokens + LLAMA_API void llama_set_causal_attn(struct llama_context * ctx, bool causal_attn); + + // Set whether the model is in warmup mode or not + // If true, all model tensors are activated during llama_decode() to load and cache their weights. + LLAMA_API void llama_set_warmup(struct llama_context * ctx, bool warmup); + + // Set abort callback + LLAMA_API void llama_set_abort_callback(struct llama_context * ctx, ggml_abort_callback abort_callback, void * abort_callback_data); + + // Wait until all computations are finished + // This is automatically done when using one of the functions below to obtain the computation results + // and is not necessary to call it explicitly in most cases + LLAMA_API void llama_synchronize(struct llama_context * ctx); + + // Token logits obtained from the last call to llama_decode() + // The logits for which llama_batch.logits[i] != 0 are stored contiguously + // in the order they have appeared in the batch. + // Rows: number of tokens for which llama_batch.logits[i] != 0 + // Cols: n_vocab + // TODO: deprecate in favor of llama_get_logits_ith() (ref: https://github.com/ggml-org/llama.cpp/pull/14853#issuecomment-3113143522) + LLAMA_API float * llama_get_logits(struct llama_context * ctx); + + // Logits for the ith token. For positive indices, Equivalent to: + // llama_get_logits(ctx) + ctx->output_ids[i]*n_vocab + // Negative indicies can be used to access logits in reverse order, -1 is the last logit. + // returns NULL for invalid ids. + LLAMA_API float * llama_get_logits_ith(struct llama_context * ctx, int32_t i); + + // Get all output token embeddings. + // when pooling_type == LLAMA_POOLING_TYPE_NONE or when using a generative model, + // the embeddings for which llama_batch.logits[i] != 0 are stored contiguously + // in the order they have appeared in the batch. + // shape: [n_outputs*n_embd] + // Otherwise, returns NULL. + // TODO: deprecate in favor of llama_get_embeddings_ith() (ref: https://github.com/ggml-org/llama.cpp/pull/14853#issuecomment-3113143522) + LLAMA_API float * llama_get_embeddings(struct llama_context * ctx); + + // Get the embeddings for the ith token. For positive indices, Equivalent to: + // llama_get_embeddings(ctx) + ctx->output_ids[i]*n_embd + // Negative indicies can be used to access embeddings in reverse order, -1 is the last embedding. + // shape: [n_embd] (1-dimensional) + // returns NULL for invalid ids. + LLAMA_API float * llama_get_embeddings_ith(struct llama_context * ctx, int32_t i); + + // Get the embeddings for a sequence id + // Returns NULL if pooling_type is LLAMA_POOLING_TYPE_NONE + // when pooling_type == LLAMA_POOLING_TYPE_RANK, returns float[n_cls_out] with the rank(s) of the sequence + // otherwise: float[n_embd] (1-dimensional) + LLAMA_API float * llama_get_embeddings_seq(struct llama_context * ctx, llama_seq_id seq_id); + + // + // Vocab + // + + LLAMA_API const char * llama_vocab_get_text(const struct llama_vocab * vocab, llama_token token); + + LLAMA_API float llama_vocab_get_score(const struct llama_vocab * vocab, llama_token token); + + LLAMA_API enum llama_token_attr llama_vocab_get_attr(const struct llama_vocab * vocab, llama_token token); + + // Check if the token is supposed to end generation (end-of-generation, eg. EOS, EOT, etc.) + LLAMA_API bool llama_vocab_is_eog(const struct llama_vocab * vocab, llama_token token); + + // Identify if Token Id is a control token or a render-able token + LLAMA_API bool llama_vocab_is_control(const struct llama_vocab * vocab, llama_token token); + + // Special tokens + LLAMA_API llama_token llama_vocab_bos(const struct llama_vocab * vocab); // beginning-of-sentence + LLAMA_API llama_token llama_vocab_eos(const struct llama_vocab * vocab); // end-of-sentence + LLAMA_API llama_token llama_vocab_eot(const struct llama_vocab * vocab); // end-of-turn + LLAMA_API llama_token llama_vocab_sep(const struct llama_vocab * vocab); // sentence separator + LLAMA_API llama_token llama_vocab_nl (const struct llama_vocab * vocab); // next-line + LLAMA_API llama_token llama_vocab_pad(const struct llama_vocab * vocab); // padding + LLAMA_API llama_token llama_vocab_mask(const struct llama_vocab * vocab); // mask + + LLAMA_API bool llama_vocab_get_add_bos(const struct llama_vocab * vocab); + LLAMA_API bool llama_vocab_get_add_eos(const struct llama_vocab * vocab); + LLAMA_API bool llama_vocab_get_add_sep(const struct llama_vocab * vocab); + + LLAMA_API llama_token llama_vocab_fim_pre(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_suf(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_mid(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_pad(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_rep(const struct llama_vocab * vocab); + LLAMA_API llama_token llama_vocab_fim_sep(const struct llama_vocab * vocab); + + DEPRECATED(LLAMA_API const char * llama_token_get_text(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_get_text instead"); + DEPRECATED(LLAMA_API float llama_token_get_score(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_get_score instead"); + DEPRECATED(LLAMA_API enum llama_token_attr llama_token_get_attr(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_get_attr instead"); + DEPRECATED(LLAMA_API bool llama_token_is_eog(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_is_eog instead"); + DEPRECATED(LLAMA_API bool llama_token_is_control(const struct llama_vocab * vocab, llama_token token), "use llama_vocab_is_control instead"); + DEPRECATED(LLAMA_API llama_token llama_token_bos(const struct llama_vocab * vocab), "use llama_vocab_bos instead"); + DEPRECATED(LLAMA_API llama_token llama_token_eos(const struct llama_vocab * vocab), "use llama_vocab_eos instead"); + DEPRECATED(LLAMA_API llama_token llama_token_eot(const struct llama_vocab * vocab), "use llama_vocab_eot instead"); + DEPRECATED(LLAMA_API llama_token llama_token_cls(const struct llama_vocab * vocab), "use llama_vocab_cls instead"); + DEPRECATED(LLAMA_API llama_token llama_token_sep(const struct llama_vocab * vocab), "use llama_vocab_sep instead"); + DEPRECATED(LLAMA_API llama_token llama_token_nl (const struct llama_vocab * vocab), "use llama_vocab_nl instead"); + DEPRECATED(LLAMA_API llama_token llama_token_pad(const struct llama_vocab * vocab), "use llama_vocab_pad instead"); + DEPRECATED(LLAMA_API bool llama_add_bos_token(const struct llama_vocab * vocab), "use llama_vocab_get_add_bos instead"); + DEPRECATED(LLAMA_API bool llama_add_eos_token(const struct llama_vocab * vocab), "use llama_vocab_get_add_eos instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_pre(const struct llama_vocab * vocab), "use llama_vocab_fim_pre instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_suf(const struct llama_vocab * vocab), "use llama_vocab_fim_suf instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_mid(const struct llama_vocab * vocab), "use llama_vocab_fim_mid instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_pad(const struct llama_vocab * vocab), "use llama_vocab_fim_pad instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_rep(const struct llama_vocab * vocab), "use llama_vocab_fim_rep instead"); + DEPRECATED(LLAMA_API llama_token llama_token_fim_sep(const struct llama_vocab * vocab), "use llama_vocab_fim_sep instead"); + + // CLS is equivalent to BOS + DEPRECATED(LLAMA_API llama_token llama_vocab_cls(const struct llama_vocab * vocab), // classification + "use llama_vocab_bos instead"); + + // + // Tokenization + // + // The API is thread-safe. + // + + /// @details Convert the provided text into tokens. + /// @param tokens The tokens pointer must be large enough to hold the resulting tokens. + /// @return Returns the number of tokens on success, no more than n_tokens_max + /// @return Returns a negative number on failure - the number of tokens that would have been returned + /// @return Returns INT32_MIN on overflow (e.g., tokenization result size exceeds int32_t limit) + /// @param add_special Allow to add BOS and EOS tokens if model is configured to do so. + /// @param parse_special Allow tokenizing special and/or control tokens which otherwise are not exposed and treated + /// as plaintext. Does not insert a leading space. + LLAMA_API int32_t llama_tokenize( + const struct llama_vocab * vocab, + const char * text, + int32_t text_len, + llama_token * tokens, + int32_t n_tokens_max, + bool add_special, + bool parse_special); + + // Token Id -> Piece. + // Uses the vocabulary in the provided context. + // Does not write null terminator to the buffer. + // User can skip up to 'lstrip' leading spaces before copying (useful when encoding/decoding multiple tokens with 'add_space_prefix') + // @param special If true, special tokens are rendered in the output. + LLAMA_API int32_t llama_token_to_piece( + const struct llama_vocab * vocab, + llama_token token, + char * buf, + int32_t length, + int32_t lstrip, + bool special); + + /// @details Convert the provided tokens into text (inverse of llama_tokenize()). + /// @param text The char pointer must be large enough to hold the resulting text. + /// @return Returns the number of chars/bytes on success, no more than text_len_max. + /// @return Returns a negative number on failure - the number of chars/bytes that would have been returned. + /// @param remove_special Allow to remove BOS and EOS tokens if model is configured to do so. + /// @param unparse_special If true, special tokens are rendered in the output. + LLAMA_API int32_t llama_detokenize( + const struct llama_vocab * vocab, + const llama_token * tokens, + int32_t n_tokens, + char * text, + int32_t text_len_max, + bool remove_special, + bool unparse_special); + + // + // Chat templates + // + + /// Apply chat template. Inspired by hf apply_chat_template() on python. + /// Both "model" and "custom_template" are optional, but at least one is required. "custom_template" has higher precedence than "model" + /// NOTE: This function does not use a jinja parser. It only support a pre-defined list of template. See more: https://github.com/ggml-org/llama.cpp/wiki/Templates-supported-by-llama_chat_apply_template + /// @param tmpl A Jinja template to use for this chat. If this is nullptr, the model’s default chat template will be used instead. + /// @param chat Pointer to a list of multiple llama_chat_message + /// @param n_msg Number of llama_chat_message in this chat + /// @param add_ass Whether to end the prompt with the token(s) that indicate the start of an assistant message. + /// @param buf A buffer to hold the output formatted prompt. The recommended alloc size is 2 * (total number of characters of all messages) + /// @param length The size of the allocated buffer + /// @return The total number of bytes of the formatted prompt. If is it larger than the size of buffer, you may need to re-alloc it and then re-apply the template. + LLAMA_API int32_t llama_chat_apply_template( + const char * tmpl, + const struct llama_chat_message * chat, + size_t n_msg, + bool add_ass, + char * buf, + int32_t length); + + // Get list of built-in chat templates + LLAMA_API int32_t llama_chat_builtin_templates(const char ** output, size_t len); + + // + // Sampling API + // + // Sample usage: + // + // // prepare the sampling chain at the start + // auto sparams = llama_sampler_chain_default_params(); + // + // llama_sampler * smpl = llama_sampler_chain_init(sparams); + // + // llama_sampler_chain_add(smpl, llama_sampler_init_top_k(50)); + // llama_sampler_chain_add(smpl, llama_sampler_init_top_p(0.9, 1)); + // llama_sampler_chain_add(smpl, llama_sampler_init_temp (0.8)); + // + // // typically, the chain should end with a sampler such as "greedy", "dist" or "mirostat" + // // this sampler will be responsible to select the actual token + // llama_sampler_chain_add(smpl, llama_sampler_init_dist(seed)); + // + // ... + // + // // decoding loop: + // while (...) { + // ... + // + // llama_decode(ctx, batch); + // + // // sample from the logits of the last token in the batch + // const llama_token id = llama_sampler_sample(smpl, ctx, -1); + // + // ... + // } + // + // llama_sampler_free(smpl); + // + // TODO: In the future, llama_sampler will be utilized to offload the sampling to the backends (e.g. GPU). + // + + typedef void * llama_sampler_context_t; + + // user code can implement the interface below in order to create custom llama_sampler + struct llama_sampler_i { + const char * (*name) (const struct llama_sampler * smpl); // can be NULL + void (*accept)( struct llama_sampler * smpl, llama_token token); // can be NULL + void (*apply) ( struct llama_sampler * smpl, llama_token_data_array * cur_p); // required + void (*reset) ( struct llama_sampler * smpl); // can be NULL + struct llama_sampler * (*clone) (const struct llama_sampler * smpl); // can be NULL if ctx is NULL + void (*free) ( struct llama_sampler * smpl); // can be NULL if ctx is NULL + + // TODO: API for internal libllama usage for appending the sampling to an existing ggml_cgraph + //void (*apply_ggml) (struct llama_sampler * smpl, ...); + }; + + struct llama_sampler { + const struct llama_sampler_i * iface; + llama_sampler_context_t ctx; + }; + + // mirror of llama_sampler_i: + LLAMA_API struct llama_sampler * llama_sampler_init (const struct llama_sampler_i * iface, llama_sampler_context_t ctx); + LLAMA_API const char * llama_sampler_name (const struct llama_sampler * smpl); + LLAMA_API void llama_sampler_accept( struct llama_sampler * smpl, llama_token token); + LLAMA_API void llama_sampler_apply ( struct llama_sampler * smpl, llama_token_data_array * cur_p); + LLAMA_API void llama_sampler_reset ( struct llama_sampler * smpl); + LLAMA_API struct llama_sampler * llama_sampler_clone (const struct llama_sampler * smpl); + // important: do not free if the sampler has been added to a llama_sampler_chain (via llama_sampler_chain_add) + LLAMA_API void llama_sampler_free ( struct llama_sampler * smpl); + + // llama_sampler_chain + // a type of llama_sampler that can chain multiple samplers one after another + + LLAMA_API struct llama_sampler * llama_sampler_chain_init(struct llama_sampler_chain_params params); + + // important: takes ownership of the sampler object and will free it when llama_sampler_free is called + LLAMA_API void llama_sampler_chain_add( struct llama_sampler * chain, struct llama_sampler * smpl); + LLAMA_API struct llama_sampler * llama_sampler_chain_get(const struct llama_sampler * chain, int32_t i); + LLAMA_API int llama_sampler_chain_n (const struct llama_sampler * chain); + + // after removing a sampler, the chain will no longer own it, and it will not be freed when the chain is freed + LLAMA_API struct llama_sampler * llama_sampler_chain_remove( struct llama_sampler * chain, int32_t i); + + // available samplers: + + LLAMA_API struct llama_sampler * llama_sampler_init_greedy(void); + LLAMA_API struct llama_sampler * llama_sampler_init_dist (uint32_t seed); + + /// @details Top-K sampling described in academic paper "The Curious Case of Neural Text Degeneration" https://arxiv.org/abs/1904.09751 + /// Setting k <= 0 makes this a noop + LLAMA_API struct llama_sampler * llama_sampler_init_top_k (int32_t k); + + /// @details Nucleus sampling described in academic paper "The Curious Case of Neural Text Degeneration" https://arxiv.org/abs/1904.09751 + LLAMA_API struct llama_sampler * llama_sampler_init_top_p (float p, size_t min_keep); + + /// @details Minimum P sampling as described in https://github.com/ggml-org/llama.cpp/pull/3841 + LLAMA_API struct llama_sampler * llama_sampler_init_min_p (float p, size_t min_keep); + + /// @details Locally Typical Sampling implementation described in the paper https://arxiv.org/abs/2202.00666. + LLAMA_API struct llama_sampler * llama_sampler_init_typical (float p, size_t min_keep); + + /// #details Updates the logits l_i` = l_i/t. When t <= 0.0f, the maximum logit is kept at it's original value, the rest are set to -inf + LLAMA_API struct llama_sampler * llama_sampler_init_temp (float t); + + /// @details Dynamic temperature implementation (a.k.a. entropy) described in the paper https://arxiv.org/abs/2309.02772. + LLAMA_API struct llama_sampler * llama_sampler_init_temp_ext (float t, float delta, float exponent); + + /// @details XTC sampler as described in https://github.com/oobabooga/text-generation-webui/pull/6335 + LLAMA_API struct llama_sampler * llama_sampler_init_xtc (float p, float t, size_t min_keep, uint32_t seed); + + /// @details Top n sigma sampling as described in academic paper "Top-nσ: Not All Logits Are You Need" https://arxiv.org/pdf/2411.07641 + LLAMA_API struct llama_sampler * llama_sampler_init_top_n_sigma(float n); + + /// @details Mirostat 1.0 algorithm described in the paper https://arxiv.org/abs/2007.14966. Uses tokens instead of words. + /// @param candidates A vector of `llama_token_data` containing the candidate tokens, their probabilities (p), and log-odds (logit) for the current position in the generated text. + /// @param tau The target cross-entropy (or surprise) value you want to achieve for the generated text. A higher value corresponds to more surprising or less predictable text, while a lower value corresponds to less surprising or more predictable text. + /// @param eta The learning rate used to update `mu` based on the error between the target and observed surprisal of the sampled word. A larger learning rate will cause `mu` to be updated more quickly, while a smaller learning rate will result in slower updates. + /// @param m The number of tokens considered in the estimation of `s_hat`. This is an arbitrary value that is used to calculate `s_hat`, which in turn helps to calculate the value of `k`. In the paper, they use `m = 100`, but you can experiment with different values to see how it affects the performance of the algorithm. + /// @param mu Maximum cross-entropy. This value is initialized to be twice the target cross-entropy (`2 * tau`) and is updated in the algorithm based on the error between the target and observed surprisal. + LLAMA_API struct llama_sampler * llama_sampler_init_mirostat( + int32_t n_vocab, + uint32_t seed, + float tau, + float eta, + int32_t m); + + /// @details Mirostat 2.0 algorithm described in the paper https://arxiv.org/abs/2007.14966. Uses tokens instead of words. + /// @param candidates A vector of `llama_token_data` containing the candidate tokens, their probabilities (p), and log-odds (logit) for the current position in the generated text. + /// @param tau The target cross-entropy (or surprise) value you want to achieve for the generated text. A higher value corresponds to more surprising or less predictable text, while a lower value corresponds to less surprising or more predictable text. + /// @param eta The learning rate used to update `mu` based on the error between the target and observed surprisal of the sampled word. A larger learning rate will cause `mu` to be updated more quickly, while a smaller learning rate will result in slower updates. + /// @param mu Maximum cross-entropy. This value is initialized to be twice the target cross-entropy (`2 * tau`) and is updated in the algorithm based on the error between the target and observed surprisal. + LLAMA_API struct llama_sampler * llama_sampler_init_mirostat_v2( + uint32_t seed, + float tau, + float eta); + + /// @details Intializes a GBNF grammar, see grammars/README.md for details. + /// @param vocab The vocabulary that this grammar will be used with. + /// @param grammar_str The production rules for the grammar, encoded as a string. Returns an empty grammar if empty. Returns NULL if parsing of grammar_str fails. + /// @param grammar_root The name of the start symbol for the grammar. + LLAMA_API struct llama_sampler * llama_sampler_init_grammar( + const struct llama_vocab * vocab, + const char * grammar_str, + const char * grammar_root); + + DEPRECATED(LLAMA_API struct llama_sampler * llama_sampler_init_grammar_lazy( + const struct llama_vocab * vocab, + const char * grammar_str, + const char * grammar_root, + const char ** trigger_words, + size_t num_trigger_words, + const llama_token * trigger_tokens, + size_t num_trigger_tokens), + "use llama_sampler_init_grammar_lazy_patterns instead"); + + + /// @details Lazy grammar sampler, introduced in https://github.com/ggml-org/llama.cpp/pull/9639 + /// @param trigger_patterns A list of patterns that will trigger the grammar sampler. Pattern will be matched from the start of the generation output, and grammar sampler will be fed content starting from its first match group. + /// @param trigger_tokens A list of tokens that will trigger the grammar sampler. Grammar sampler will be fed content starting from the trigger token included. + LLAMA_API struct llama_sampler * llama_sampler_init_grammar_lazy_patterns( + const struct llama_vocab * vocab, + const char * grammar_str, + const char * grammar_root, + const char ** trigger_patterns, + size_t num_trigger_patterns, + const llama_token * trigger_tokens, + size_t num_trigger_tokens); + + + /// NOTE: Avoid using on the full vocabulary as searching for repeated tokens can become slow. For example, apply top-k or top-p sampling first. + LLAMA_API struct llama_sampler * llama_sampler_init_penalties( + int32_t penalty_last_n, // last n tokens to penalize (0 = disable penalty, -1 = context size) + float penalty_repeat, // 1.0 = disabled + float penalty_freq, // 0.0 = disabled + float penalty_present); // 0.0 = disabled + + /// @details DRY sampler, designed by p-e-w, as described in: https://github.com/oobabooga/text-generation-webui/pull/5677, porting Koboldcpp implementation authored by pi6am: https://github.com/LostRuins/koboldcpp/pull/982 + LLAMA_API struct llama_sampler * llama_sampler_init_dry( + const struct llama_vocab * vocab, + int32_t n_ctx_train, + float dry_multiplier, + float dry_base, + int32_t dry_allowed_length, + int32_t dry_penalty_last_n, + const char ** seq_breakers, + size_t num_breakers); + + LLAMA_API struct llama_sampler * llama_sampler_init_logit_bias( + int32_t n_vocab, + int32_t n_logit_bias, + const llama_logit_bias * logit_bias); + + // this sampler is meant to be used for fill-in-the-middle infilling + // it's supposed to be used after top_k + top_p sampling + // + // 1. if the sum of the EOG probs times the number of candidates is higher than the sum of the other probs -> pick EOG + // 2. combine probs of tokens that have the same prefix + // + // example: + // + // - before: + // "hel": 0.5 + // "hell": 0.2 + // "hello": 0.1 + // "dummy": 0.1 + // + // - after: + // "hel": 0.8 + // "dummy": 0.1 + // + // 3. discard non-EOG tokens with low prob + // 4. if no tokens are left -> pick EOT + // + LLAMA_API struct llama_sampler * llama_sampler_init_infill(const struct llama_vocab * vocab); + + // Returns the seed used by the sampler if applicable, LLAMA_DEFAULT_SEED otherwise + LLAMA_API uint32_t llama_sampler_get_seed(const struct llama_sampler * smpl); + + /// @details Sample and accept a token from the idx-th output of the last evaluation + // + // Shorthand for: + // const auto * logits = llama_get_logits_ith(ctx, idx); + // llama_token_data_array cur_p = { ... init from logits ... }; + // llama_sampler_apply(smpl, &cur_p); + // auto token = cur_p.data[cur_p.selected].id; + // llama_sampler_accept(smpl, token); + // return token; + // Returns the sampled token + LLAMA_API llama_token llama_sampler_sample(struct llama_sampler * smpl, struct llama_context * ctx, int32_t idx); + + // TODO: extend in the future + //LLAMA_API void llama_decode_with_sampler(struct llama_context * ctx, struct llama_sampler * smpl, struct llama_batch batch, ...); + + // + // Model split + // + + /// @details Build a split GGUF final path for this chunk. + /// llama_split_path(split_path, sizeof(split_path), "/models/ggml-model-q4_0", 2, 4) => split_path = "/models/ggml-model-q4_0-00002-of-00004.gguf" + // Returns the split_path length. + LLAMA_API int llama_split_path(char * split_path, size_t maxlen, const char * path_prefix, int split_no, int split_count); + + /// @details Extract the path prefix from the split_path if and only if the split_no and split_count match. + /// llama_split_prefix(split_prefix, 64, "/models/ggml-model-q4_0-00002-of-00004.gguf", 2, 4) => split_prefix = "/models/ggml-model-q4_0" + // Returns the split_prefix length. + LLAMA_API int llama_split_prefix(char * split_prefix, size_t maxlen, const char * split_path, int split_no, int split_count); + + // Print system information + LLAMA_API const char * llama_print_system_info(void); + + // Set callback for all future logging events. + // If this is not called, or NULL is supplied, everything is output on stderr. + LLAMA_API void llama_log_set(ggml_log_callback log_callback, void * user_data); + + // + // Performance utils + // + // NOTE: Used by llama.cpp examples/tools, avoid using in third-party apps. Instead, do your own performance measurements. + // + + struct llama_perf_context_data { + // ms == milliseconds + double t_start_ms; // absolute start time + double t_load_ms; // time needed for loading the model + double t_p_eval_ms; // time needed for processing the prompt + double t_eval_ms; // time needed for generating tokens + + int32_t n_p_eval; // number of prompt tokens + int32_t n_eval; // number of generated tokens + int32_t n_reused; // number of times a ggml compute graph had been reused + }; + + struct llama_perf_sampler_data { + double t_sample_ms; // time needed for sampling in ms + + int32_t n_sample; // number of sampled tokens + }; + + LLAMA_API struct llama_perf_context_data llama_perf_context (const struct llama_context * ctx); + LLAMA_API void llama_perf_context_print(const struct llama_context * ctx); + LLAMA_API void llama_perf_context_reset( struct llama_context * ctx); + + // NOTE: the following work only with samplers constructed via llama_sampler_chain_init + LLAMA_API struct llama_perf_sampler_data llama_perf_sampler (const struct llama_sampler * chain); + LLAMA_API void llama_perf_sampler_print(const struct llama_sampler * chain); + LLAMA_API void llama_perf_sampler_reset( struct llama_sampler * chain); + + // print a breakdown of per-device memory use via LLAMA_LOG: + LLAMA_API void llama_memory_breakdown_print(const struct llama_context * ctx); + + // + // training + // + + // function that returns whether or not a given tensor contains trainable parameters + typedef bool (*llama_opt_param_filter)(const struct ggml_tensor * tensor, void * userdata); + + // always returns true + LLAMA_API bool llama_opt_param_filter_all(const struct ggml_tensor * tensor, void * userdata); + + struct llama_opt_params { + uint32_t n_ctx_train; // assumed context size post training, use context size specified in llama_context if 0 + + llama_opt_param_filter param_filter; // callback for determining which tensors contain trainable parameters + void * param_filter_ud; // userdata for determining which tensors contain trainable parameters + + ggml_opt_get_optimizer_params get_opt_pars; // callback for calculating optimizer parameters + void * get_opt_pars_ud; // userdata for calculating optimizer parameters + + enum ggml_opt_optimizer_type optimizer_type; + }; + + LLAMA_API void llama_opt_init(struct llama_context * lctx, struct llama_model * model, struct llama_opt_params lopt_params); + + LLAMA_API void llama_opt_epoch( + struct llama_context * lctx, + ggml_opt_dataset_t dataset, + ggml_opt_result_t result_train, + ggml_opt_result_t result_eval, + int64_t idata_split, + ggml_opt_epoch_callback callback_train, + ggml_opt_epoch_callback callback_eval); + +#ifdef __cplusplus +} +#endif + +#endif // LLAMA_H diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Info.plist b/ios/Llama.xcframework/macos-arm64/Llama.framework/Info.plist new file mode 100644 index 00000000..a5e1b1d9 --- /dev/null +++ b/ios/Llama.xcframework/macos-arm64/Llama.framework/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + Llama + CFBundleIdentifier + io.github.netdur.llama_cpp_dart + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Llama + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.1.0 + CFBundleVersion + 0.1.0 + MinimumOSVersion + 12.0 + + \ No newline at end of file diff --git a/ios/Llama.xcframework/macos-arm64/Llama.framework/Llama b/ios/Llama.xcframework/macos-arm64/Llama.framework/Llama new file mode 100755 index 0000000000000000000000000000000000000000..af8f3f0a60a6a5741e758bc8a49496293a189e4b GIT binary patch literal 617840 zcmeFa33OCN_CH>)JAv0(fpqqmq(P+{WRs-6%ZZM4LG1=hBzPr)QQ3%5@pnJh5#})1Z0P9AolNb-_m*S5g6zDKj*icKRKsT zUCaH{t*TqM_Ih7lIrU2zV;sX@8<;p4tBJAa%ADlI;$i9yjOFL&4SqOJ^wR#TYulBGJE9)kORo4?2jFB73w)_RLvK9yNGh^ng@iPKmdOYhT87D-F zLT)u4FXJKa;$MFL#HkZ!=1=?WZ)ZF?6R>)`Y9{4ViBE1dUW|;RSo!%+6&B_{`E22n zPtVMsSukFYw?)QlyiKAYw;E5uQSAKu!f8`yv=pEoZ%wkqU)~Ujg4{t0aVs|PX3U&E zaq3fYm>$nNLBbo~ONu~lqY6jQYkvN$slS^zbpnd<=7X6W1k0FIf z|MT;oEXx1w^nxi*DsHX(omnm6@uK81Ms78Kp^O!&@kow6F!}j|GV(I=vqtAUAW3tb zgu?_mw$4qMWQf;xFsRpQEwylCyw_w{20S%iB$bUY%HQ?%s^#ysze+$JIiKWK<0&|b zP5Jy5aix4JzGTZSQBeG}ZY7`8X6Y|Ke?q~`0_nHpCcawS3SM@g68W3*h4x=G{mFs} z`Og$gr&g=yFWVsTQ!OV!ZgoDR)JcoZ{R@R7E#jwn?l6>X zHp+M?%6f?F%2R_~D0?T>nHS}ZvydV`F`%J*;@qjZ#Xrj34*tXsh2gBE`KNeR^=}v@ zjuM7*!{+nGIJe?Y`Co*1DQ#KFVI#|HM4f~I%W4#AQ`)nVr5wxSnc(A1f{$_O2QMsQ zu4*HzAssXI3X){;#s_2e(uYmg}xV9hN*vL7LEaIG$HzV@; zPH)IX{?4=_=Iz(mN$_m~@18>$X{Os))Cs%bOXpZg_GZV*XV5Mj!K|jnAn}*sW_c{A zEZ0qW?gUwK?;a?ocSjFr;CcltoMR|lI3ceK34cokAWjYtrM0Io=GT3EV zrkDH$_){A=0vX6h8(D+8G_@6cF366@XmZ;)!S}h}UvnJt!iNez6Wr-sToa{L?)T>% zCI3!Bt)mUAP03&-WsK#eJPvt={X!5kd$_XPi7-11ti;MW5-8s94Tw+jv9_mk32fVQ zJ)MUT-j{Q%ya>52gCE=46Ee;@zkx2J`d^sI#QN`q`hTXcw*Gsf+yZn-y+pddDsgd|2>F$^4-c;zux6s|Eqw{W3 zit$-F45n`K!|>#LDf{;c5T z&oFPwW0I^cJYooxdAy9xM@nt30eG_@bJYI!n$bJZcKO4C*K;(;%hxT; z_56{|7VEKNOFn}Xe&u%jF>pkTH~$01-7OgB(Z8s5!A4-P;IiD!uptxf`tY(`QO10| zoxH$irv?ifSrFSeu8rV3Y>amIgubm~UV9PT+_Ss$m@TIOOx<8XHqM8_YvM_tX9qEBH&WJydd)_=KDJdn{<%6E)-saTfy!| z*k4GzP6d|Z3!xVGO!_)LllqXo)E>iG365FkQJ+!=_nSs$PKjnE<0vd1dV2=?8NMvn z0UUp6kjvkd`KS!X0k1JumYEt^W=#Dc6N?5gxg1l&b^9b6gqMtiZy`nGnpj