name: storage-adapters
description: "Use ChatterBot SQL, MongoDB, Redis vector, and custom storage
adapters, including database_uri, filters, tags, and optional backend
troubleshooting."
disable-model-invocation: true
metadata:
disco-role: operating
license: BSD 3-Clause
Storage Adapters
Use this sub-skill when a task asks how ChatterBot stores statements, chooses SQL vs MongoDB vs Redis vector storage, configures database_uri, writes or filters statement records, debugs service backends, or implements a custom storage adapter.
Quick route
- Read references/storage-api.md for storage adapter classes, methods, filter kwargs, and backend-specific configuration.
- Read references/workflows.md for SQL, MongoDB, Redis vector, tag filtering, custom adapter, and service setup recipes.
- Read references/troubleshooting.md for SQLite file confusion, MongoDB service timeouts, Redis vector dependencies, missing optional packages, and search mismatch issues.
- Run scripts/sql_storage_smoke.py for a deterministic SQL storage CRUD/filter smoke test.
- Run scripts/storage_dependency_check.py before selecting MongoDB or Redis vector storage.
Built-in storage choices
| Adapter | Best for | Prerequisites |
|---|
SQLStorageAdapter | default storage, SQLite, SQLAlchemy-supported databases, exact/indexed text matching | base package; database driver for non-SQLite URIs |
MongoDatabaseAdapter | flexible NoSQL statement documents | pymongo, reachable MongoDB service |
RedisVectorStorageAdapter | experimental semantic vector search with embeddings | chatterbot[redis], Redis Stack/vector search service, embedding model/provider |
DjangoStorageAdapter | Django ORM integration | route to django-integration |
Default SQL behavior
from chatterbot import ChatBot
bot = ChatBot(
"SQL Bot",
storage_adapter="chatterbot.storage.SQLStorageAdapter",
database_uri=None, # in-memory sqlite smoke
)
For a persistent SQLite file:
bot = ChatBot("SQL Bot", database_uri="sqlite:///db.sqlite3")
For non-SQLite databases, pass a SQLAlchemy URI and any supported pool kwargs such as pool_size, max_overflow, pool_timeout, pool_recycle, and pool_pre_ping.
Statement filtering
Storage adapters expose common filter(**kwargs) options such as text, in_response_to, conversation, tags, exclude_text, exclude_text_words, persona_not_startswith, search_text_contains, search_in_response_to_contains, order_by, and page_size. See the API reference before assuming a filter works identically across SQL, MongoDB, and Redis vector storage.
Boundaries
- For
ChatBot response lifecycle, route to core-chatbot.
- For training data that creates storage records, route to training.
- For logic/search behavior that consumes storage, route to logic-adapters.
- For Django ORM setup and migrations, route to django-integration.