Dead Simple Self-Learning
A lightweight Python library that allows any LLM agent to self-improve through feedback, without retraining models.
📋 Overview
Problem: LLM agents struggle to consistently learn from user feedback without requiring costly model retraining or complex infrastructure.
Solution: This library provides a simple system for capturing, storing, and reusing feedback for LLM tasks. It works by:
- Collecting feedback on LLM outputs
- Storing this feedback with embeddings of the original task
- Retrieving relevant feedback for similar future tasks (feedback selection layer: only openai right now)
- Enhancing prompts with the feedback to improve results
All of this happens without any model retraining - just by enhancing prompts with contextual feedback.
✨ Features
- Simple API: Just a few methods to enhance prompts and save feedback
- Multiple Embedding Models: Support for OpenAI and HuggingFace models (MiniLM, BGE-small)
- Local-First: Uses JSON files for storage with no external DB requirements
- Smart Feedback Selection: Uses OpenAI to choose the most relevant feedback for a task
- Async Support: Both synchronous and asynchronous APIs for better performance
- Customizable: Configurable thresholds, formatters, and memory handling
- Zero Infrastructure: Works out of the box with minimal setup
- Framework Agnostic: Works with any LLM provider (OpenAI, Anthropic, etc.)
- Integration Examples: Ready-to-use examples with LangChain, Agno, and more
🔧 Installation
You can install the package via pip:
pip install dead_simple_self_learning
Dependencies
-
Required:
- Python 3.7+
- numpy >=1.20.0
- sentence-transformers >=2.2.0
-
Optional:
- openai >=1.0.0 (for OpenAI embeddings and LLM feedback selection)
- langchain, agno (for specific integration examples)
Install with optional OpenAI dependency:
pip install "dead_simple_self_learning[openai]"
Install for development:
pip install "dead_simple_self_learning[dev]"
🚀 Quick Start
from openai import OpenAI
from dead_simple_self_learning import SelfLearner
# Initialize OpenAI client (you need your own API key)
client = OpenAI(api_key="YOUR_OPENAI_API_KEY")
# Initialize a self-learner (no API key needed for miniLM)
learner = SelfLearner(embedding_model="miniLM")
# Define our task and original prompt
task = "Write a product description for a smartphone"
base_prompt = "You are a copywriter."
# Generate text without feedback
def generate_text(prompt, task):
return client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "system", "content": prompt}, {"role": "user", "content": task}]
).choices[0].message.content
# Generate original text
original = generate_text(base_prompt, task)
print("#######################Original output:", original)
# Save feedback for the task
feedback = "Keep it under 100 words and focus on benefits not features"
learner.save_feedback(task, feedback)
# Apply feedback to the prompt
enhanced_prompt = learner.apply_feedback(task, base_prompt)
enhanced = generate_text(enhanced_prompt, task)
print("######################Improved output:", enhanced)
📊 Package Structure
dead_simple_self_learning/
├── __init__.py # Package exports
├── __main__.py # CLI entrypoint
├── embedder.py # Handles embedding generation
├── memory.py # Manages storage and retrieval
└── learner.py # Core functionality
📖 Detailed Guide
Core Components
Embedder
The Embedder class generates vector embeddings for tasks:
from dead_simple_self_learning import Embedder
# Use a HuggingFace model (no API key required)
embedder = Embedder(model_name="miniLM")
# Use OpenAI (requires API key in env var OPENAI_API_KEY)
embedder = Embedder(model_name="openai")
# Generate an embedding
vector = embedder.embed("your text here")
Release files for dead-simple-self-learning 1.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dead_simple_self_learning-1.1.4.tar.gz | 21.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dead_simple_self_learning-1.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 41.8 kB
Release files / dead_simple_self_learning-1.1.4.tar.gz
| Download URL | dead_simple_self_learning-1.1.4.tar.gz |
|---|---|
| Size | 21.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
06a66dfe8e4a826802f74d94fa9dc049dee256f58f39679ba3854297a71c47e7
|
|
BLAKE2b-256 checksum How to use checksums |
59cb923d450a7b01b9510e06a45466ef7981b3209eae9bdbce2934792eb1ae3b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.11.12
|
Release files / dead_simple_self_learning-1.1.4-py3-none-any.whl
| Download URL | dead_simple_self_learning-1.1.4-py3-none-any.whl |
|---|---|
| Size | 20.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ff5204a6c908c04c366d9a80b6490b67ceb889279912e8f716dcc67c1c6c6745
|
|
BLAKE2b-256 checksum How to use checksums |
fc2bcfa991ce04cd6c59c9b067f9ed3ecf1c423bb7d56de1c7cf4c6e9df34da5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.11.12
|