Endee vector database integration for CrewAI agent memory
Project description
crewai-endee
Endee vector database integration for CrewAI agent memory
crewai-endee connects Endee to CrewAI, giving your agents persistent memory with dense, hybrid, and filtered retrieval.
Installation
Requires Python 3.9+.
pip install crewai-endee
This installs endee, endee_model, crewai, and fastembed automatically.
Add your embedding provider (only install the one you use):
pip install cohere # Cohere
pip install openai # OpenAI
pip install google-genai # Google Gemini
Quick Start
from crewai_endee import EndeeVectorStore
store = EndeeVectorStore(
type="my_index",
embedder_config={"provider": "cohere", "config": {"model_name": "embed-english-light-v3.0"}},
)
store.save(value="Go is a statically typed language by Google.", metadata={"lang": "Go"})
results = store.search("static typing", limit=3)
Connect to Endee
First, configure your embedding provider:
embedder_config = {
"provider": "cohere",
"config": {"model_name": "embed-english-light-v3.0", "api_key": "YOUR_COHERE_API_KEY"},
}
With API token
Sign up at endee.io and get your token. See the Endee docs for details.
from crewai_endee import EndeeVectorStore
store = EndeeVectorStore(
type="my_index",
embedder_config=embedder_config,
api_token="YOUR_ENDEE_API_TOKEN",
)
Without API token (local)
Run the open-source Endee server locally. See github.com/endee-io/endee for setup instructions. Then omit api_token:
store = EndeeVectorStore(
type="my_index",
embedder_config=embedder_config,
)
Dense Mode
from crewai_endee import EndeeVectorStore
store = EndeeVectorStore(
type="demo_dense",
embedder_config=embedder_config,
api_token=ENDEE_API_TOKEN,
space_type="cosine",
precision="int8",
)
store.ensure_index()
store.save(value="Python is a dynamic language.", metadata={"lang": "Python"})
results = store.search("dynamic typing", limit=3)
Hybrid Mode
Add sparse_model_name to enable dense + sparse (BM25):
hybrid_store = EndeeVectorStore(
type="demo_hybrid",
embedder_config=embedder_config,
api_token=ENDEE_API_TOKEN,
sparse_model_name="endee/bm25",
)
hybrid_store.ensure_index()
hybrid_store.save(value="Go has native concurrency.", metadata={"lang": "Go"})
# Hybrid search — combines dense similarity with BM25 keyword matching
results = hybrid_store.search("concurrency", limit=3)
# Tune fusion weights (hybrid only)
results = hybrid_store.search("concurrency", limit=3, dense_rrf_weight=0.8, rrf_rank_constant=60)
Search with Filters
Endee uses MongoDB-style operator syntax for query filters:
# Filter by exact match
results = store.search("web language", limit=3, filter=[{"typing": {"$eq": "dynamic"}}])
# Filter with score threshold
results = store.search("systems programming", limit=3, filter=[{"typing": {"$eq": "static"}}], score_threshold=0.2)
# Include raw vectors in results
results = store.search("interpreted language", limit=1, include_vectors=True)
Supported operators: $eq, $ne, $gt, $gte, $lt, $lte, $in
Index Operations
# Describe index metadata (count, dimension, precision, etc.)
info = store.describe()
# Retrieve a single vector by ID
vec = store.get_vector("some_vector_id")
# Update filter metadata without re-embedding
store.update_filters([{"id": "some_vector_id", "filter": {"reviewed": "true"}}])
# Delete a single vector by ID
store.delete_vector("some_vector_id")
# Delete all vectors matching a filter
store.delete(filter=[{"category": {"$eq": "outdated"}}])
# Delete the entire index
store.reset()
CrewAI Integration
EndeeVectorStore extends CrewAI's RAGStorage. Wire it into a Crew via ShortTermMemory and EntityMemory:
from crewai import LLM, Agent, Crew, Process, Task
from crewai.memory.short_term.short_term_memory import ShortTermMemory
from crewai.memory.entity.entity_memory import EntityMemory
from crewai_endee import EndeeVectorStore
# Create Endee-backed stores for crew memory
stm_store = EndeeVectorStore(
type="crew_short_term",
embedder_config=embedder_config,
api_token=ENDEE_API_TOKEN,
)
entity_store = EndeeVectorStore(
type="crew_entity",
embedder_config=embedder_config,
api_token=ENDEE_API_TOKEN,
)
# Wrap as CrewAI memory objects
short_term_memory = ShortTermMemory(storage=stm_store)
entity_memory = EntityMemory(storage=entity_store)
# LLM + Agents
llm = LLM(model="gemini/gemini-2.5-flash", api_key=GOOGLE_API_KEY)
analyst = Agent(
role="Software Analyst",
goal="Extract programming language characteristics",
backstory="You study programming language design and typing systems.",
llm=llm,
)
# Tasks
analysis_task = Task(
description="Analyse key characteristics of Python, Java, Go, Rust, and C++.",
expected_output="Structured summary of each language.",
agent=analyst,
)
# Crew with Endee-backed memory
crew = Crew(
agents=[analyst],
tasks=[analysis_task],
process=Process.sequential,
memory=True,
short_term_memory=short_term_memory,
entity_memory=entity_memory,
embedder=embedder_config,
verbose=True,
)
result = crew.kickoff()
print(result)
Supported Sparse Models
from crewai_endee import list_supported_models
for name, config in list_supported_models().items():
print(f" {name} — {config['description']}")
| Model | Description |
|---|---|
endee/bm25 |
BM25 sparse embeddings via endee_model |
splade_pp |
SPLADE++ for English — semantic + keyword hybrid search |
API Reference
Constructor Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
type |
str |
(required) | Unique Endee index name |
embedder_config |
dict |
None |
Dense embedder config (provider, config) |
api_token |
str |
None |
Endee API token (omit for local mode) |
space_type |
str |
"cosine" |
Distance metric: cosine, l2, or ip |
precision |
str |
server default | float32, float16, int16, int8, or binary |
sparse_model_name |
str |
None |
Set to enable hybrid mode (e.g. "endee/bm25") |
ef_con |
int |
None |
HNSW ef_construction for index build quality |
text_key |
str |
"value" |
Metadata key under which document text is stored |
endee_index |
Index |
None |
Pre-existing endee.Index object |
allow_reset |
bool |
True |
Whether reset() is permitted |
Methods
| Method | Description |
|---|---|
save(value, metadata) |
Embed text and upsert into the index |
search(query, limit, filter, score_threshold, ...) |
Semantic search with optional filters |
ensure_index() |
Create / verify the index and print status |
describe() |
Return index metadata (count, dimension, precision, etc.) |
get_vector(id) |
Retrieve a single vector by ID |
delete_vector(id) |
Delete a single vector by ID |
delete(filter) |
Delete all vectors matching a metadata filter |
update_filters(updates) |
Update filter metadata without re-embedding |
reset() |
Delete the entire index and reset state |
Search Parameters
| Parameter | Default | Description |
|---|---|---|
query |
(required) | Natural-language search query |
limit |
3 |
Max results (max 512) |
filter |
None |
MongoDB-style filters: [{"field": {"$op": value}}] |
score_threshold |
0 |
Minimum similarity score to include |
ef_search |
None |
HNSW ef parameter (default 128, max 1024) |
include_vectors |
False |
Include raw vector data in results |
dense_rrf_weight |
None |
Dense score weight in hybrid RRF fusion (0.0–1.0) |
rrf_rank_constant |
None |
RRF constant k (default 60) |
Interactive Demo
Full Endee documentation: docs.endee.io | GitHub: endee-io/endee | CrewAI docs: docs.crewai.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file crewai_endee-0.1.1b7.tar.gz.
File metadata
- Download URL: crewai_endee-0.1.1b7.tar.gz
- Upload date:
- Size: 21.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60652c891f21fb29e9b504d12ee2b01c41d91b2778228f3bec339283ac5650f8
|
|
| MD5 |
b9d9aa538eda1e75baaf4c905bc9571b
|
|
| BLAKE2b-256 |
a4ecff97cd4ae5608498758461ae40ea30a7ec90b19c67f2da20f919881bee4d
|
File details
Details for the file crewai_endee-0.1.1b7-py3-none-any.whl.
File metadata
- Download URL: crewai_endee-0.1.1b7-py3-none-any.whl
- Upload date:
- Size: 11.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f57f4afcffe2b3f3d8815eeeb2401eeb474870a8b7fdd0c720b648034ae27464
|
|
| MD5 |
aa80c61aed72c04f18521d8d61832f34
|
|
| BLAKE2b-256 |
b6101d1129c4a6241c722ab80cd4376abd7ff0b36ebdd41b3bbcc0508d39355a
|