From a5b14ecdda5892f9135b916dd7cae0a38795b5ff Mon Sep 17 00:00:00 2001 From: raphaelDkhn <113879115+raphaelDkhn@users.noreply.github.com> Date: Sat, 1 Mar 2025 10:43:30 +0200 Subject: [PATCH] update readme --- README.md | 6 ++++-- docs/images/gh-banner.png | Bin 0 -> 15740 bytes 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 docs/images/gh-banner.png diff --git a/README.md b/README.md index a7a136b..e02ace4 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ -# LuminAIR +# LuminAIR - Unlock ML Integrity
- + +
+
LuminAIR is a Machine Learning framework that leverages [Circle STARK Proofs](https://eprint.iacr.org/2024/278) to ensure the integrity of computational graphs. diff --git a/docs/images/gh-banner.png b/docs/images/gh-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..f339810e814d27ee627e6a6b8e0ecad63b0521f4 GIT binary patch literal 15740 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