From 6027d6379d058d3cf324f0136f7017755689d39e Mon Sep 17 00:00:00 2001
From: Mohsin Ali
Date: Thu, 7 May 2026 16:07:35 +0500
Subject: [PATCH] chore(release): bump to 1.3.1 - rate limiting, fixed demo
ingestion, and documentation refresh
---
README.md | 15 ++++++++-------
assets/longtrainer-demo.gif | Bin 747640 -> 116409 bytes
demos/longtrainer.tape | 30 ++++++++++++++++++++++++++++++
demos/longtrainer_demo.py | 2 +-
4 files changed, 39 insertions(+), 8 deletions(-)
create mode 100644 demos/longtrainer.tape
diff --git a/README.md b/README.md
index 8cb9856..90144af 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-
+
LongTrainer 1.3.1 — Production-Ready RAG Framework
@@ -28,22 +28,23 @@
-
+
+
+
Documentation •
Quick Start •
Features •
- Migration from 0.3.4
+ Migration from 0.3.4 •
+ Sponsor
---
+> **"5 lines to production RAG"** — Multi-tenant bots, streaming, tools, and persistent memory.
-> [!TIP]
-> This package is part of the **[EnDevSols Long-Suite](https://github.com/ENDEVSOLS/Long-Suite)**—the definitive lifecycle for production RAG. Join our **[Central Community Hub](https://github.com/ENDEVSOLS/Long-Suite/discussions)** for architecture advice and support.
->
---
## What is LongTrainer?
@@ -111,7 +112,7 @@ brew install libmagic poppler tesseract qpdf libreoffice pandoc
### 🎬 Complete Workflow Demo
-
+
> Full RAG workflow: initialize → create bot → ingest documents → vector search → Q&A — all with live progress tracking. Run it yourself: `python demos/longtrainer_demo.py`
diff --git a/assets/longtrainer-demo.gif b/assets/longtrainer-demo.gif
index 98713e2ce4b18cc3f57efc610fdfe3e9e44dcd4d..3b220bbc55d60c853c92ce386e32fa5dc28d33f9 100644
GIT binary patch
literal 116409
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