Skip to content
Open

Main #243

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
66d775c
Update install.sh
shaleenji Jan 25, 2026
e206f2f
Merge pull request #1
shaleenji Jan 25, 2026
b6c03b2
License (#4)
shaleenji Jan 26, 2026
f8ae28d
docs: add instructions for running Endee using Docker Compose from a …
burhankapadia18 Jan 27, 2026
4c67b81
Fix: Delete vectors from sparse storage when deleting by filter
HEMANTLAUNCHX Jan 28, 2026
cded03e
Merge pull request #11 from EndeeLabs/hemant/delete_with_filter_hybri…
hemant-endee Jan 31, 2026
191fa8a
feat: Implement backup download and upload API endpoints
burhan-endee Feb 2, 2026
e7361d0
feat: Add run.sh helper script for simplified server execution and up…
burhan-endee Feb 2, 2026
b276c37
added auth variable in run.sh and readme updated
burhan-endee Feb 2, 2026
290e3b0
readme formatted
burhan-endee Feb 2, 2026
936fd96
using regex for backup name validation
burhan-endee Feb 3, 2026
6d06381
Update run.sh
burhan-endee Feb 3, 2026
05da5c3
Update README.md
burhan-endee Feb 3, 2026
a9f3632
Merge pull request #15 from EndeeLabs/END-44/add-runsh
vindwid Feb 3, 2026
bf669ad
refactor: update web ui to version 1.0.2
pankajEndee Feb 3, 2026
552bd01
Merge pull request #14 from EndeeLabs/END-36-37/backup-api
vindwid Feb 3, 2026
8811559
quantization optimization and bug fixes
vindwi Jan 28, 2026
55beb52
Merge pull request #23 from vindwi/endee-quant
vindwid Feb 6, 2026
d5dcf6f
clean of DISABLE_HYBRID_QUANTIZATION
vindwi Feb 6, 2026
a15a45c
Merge pull request #28 from vindwi/hybrid_quant_cleanup
vindwid Feb 6, 2026
07bd389
ndd binary soft link instead of different names for all CPU types (#30)
shaleenji Feb 7, 2026
9d48d5e
Filter design (#32)
vindwi Feb 11, 2026
f91dc75
fix:sparse storage db path correction (#41)
rajesh33411 Feb 14, 2026
2e687b6
Graph backfill (#42)
vindwi Feb 15, 2026
6b34f43
add meta and filter in application/json in insert api
hemant-endee Feb 17, 2026
7c9054e
Merge pull request #43 from endee-io/hemant/correction_insert_api
hemant-endee Feb 18, 2026
d984b91
fix:sparse vectors delete addition (#46)
rajesh33411 Feb 19, 2026
5cfddb4
New Directory structure (#45)
shaleenji Feb 23, 2026
3bad3be
change int16d to int16 and int8d to int8 (#48)
vindwi Feb 23, 2026
294bb07
Sparse algo bmw (#49)
shaleenji Feb 24, 2026
ff20d35
cleanup bmw (#51)
shaleenji Feb 25, 2026
a5e42bc
Major re-architecture and bug fixes
vindwi Mar 2, 2026
92ee35d
Multithreaded insert (#59)
vindwi Mar 5, 2026
1944394
async backup job (#34)
hemant-endee Mar 5, 2026
e81036a
fix:wal vector_add/vector_update (#65)
rajesh33411 Mar 9, 2026
7a4cc35
Acquire per-index operation_mutex in deleteIndex (#64)
hemant-endee Mar 9, 2026
28a2e10
cleanup comments from old version (#70)
shaleenji Mar 10, 2026
52fe9f0
fix:sve2 instruction compile error (#69)
rajesh33411 Mar 10, 2026
e5aee40
Standardize Logs (#71)
shaleenji Mar 10, 2026
96ed5a3
Sparse performance enhancement (#54)
shaleenji Mar 10, 2026
0da6287
Update settings.hpp
shaleenji Mar 10, 2026
bcd05c0
Readme update (#72)
shaleenji Mar 11, 2026
350c974
fixing sve2 compilation
shaleengarg Mar 11, 2026
42bf03d
refactor: bump web ui version to 1.2.0 (#73)
pankajEndee Mar 11, 2026
867cf09
readme update
shaleengarg Mar 11, 2026
2e1746a
restructuring getting_started docs (#74)
rajesh33411 Mar 12, 2026
28f66a6
update project
Siddharth-cvhs Mar 17, 2026
2da2d6a
Add agentic app updates, sample env, and ignores
Mar 17, 2026
89eee98
Add React frontend option for agentic RAG
Siddharth-cvhs Mar 18, 2026
9f94b6c
Add lov_frontend UI
Siddharth-cvhs Mar 18, 2026
b3598e2
New changes 07/05
Siddharth-cvhs May 7, 2026
834e753
Add Docker setup, UI improvements, and full frontend source
Siddharth-cvhs May 7, 2026
4210df5
Add .gitattributes to force LF line endings and update README trouble…
Siddharth-cvhs May 8, 2026
5299482
Strengthen RAG system prompts to prevent Gemini refusal behavior
Siddharth-cvhs May 8, 2026
f534594
Add comprehensive README for Agentic RAG contribution
SiddharthWayne May 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Force LF line endings for all text files
* text=auto eol=lf

# Explicitly force LF for shell scripts (critical for Docker/Linux)
*.sh text eol=lf

# Force LF for other script types
*.bash text eol=lf
*.py text eol=lf

# Let Git handle these as binary (never convert)
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.pdf binary
*.zip binary
*.tar.gz binary
*.whl binary
26 changes: 26 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ build/*

# Ignore tests build directory
tests/build/
tests/build*/

# Test binaries
tests/**/ndd_filter_test

# macOS debug symbols
*.dSYM/

# Sometimes data files are created for tetsing
data/
Expand All @@ -20,3 +27,22 @@ data/*
# Frontend
frontend/
frontend/*

# DS Store
.DS_Store

# Node
node_modules/
app/lov_frontend/node_modules/

# Python
app/.venv/
__pycache__/
*.pyc
*.pyo

# Docker persistent data volume (local only)
endee-data/

# Environment files (never commit real keys)
app/.env
91 changes: 84 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,25 @@ if(ND_DEBUG)
add_definitions(-DND_DEBUG)
endif()

# Sparse instrumentation can be enabled independently from ND_DEBUG.
option(ND_SPARSE_INSTRUMENT "Enable sparse index timing instrumentation" OFF)
if(ND_SPARSE_INSTRUMENT)
add_definitions(-DND_SPARSE_INSTRUMENT)
endif()

# MDBX instrumentation can be enabled independently from ND_DEBUG.
option(ND_MDBX_INSTRUMENT "Enable MDBX timing instrumentation" OFF)
if(ND_MDBX_INSTRUMENT)
add_definitions(-DND_MDBX_INSTRUMENT)
endif()


# SIMD Optimization Options
option(USE_AVX512 "Enable AVX512 (F, BW, VNNI, FP16)" OFF)
option(USE_AVX2 "Enable AVX2 (FMA, F16C)" OFF)
option(USE_SVE2 "Enable SVE2 (INT8/16, FP16)" OFF)
option(USE_NEON "Enable NEON (FP16, DotProd)" OFF)
option(NDD_INV_IDX_STORE_FLOATS "Store raw float 32 values in sparse index (no quantization)" OFF)

# Check if any SIMD option is selected
if(NOT USE_AVX512 AND NOT USE_AVX2 AND NOT USE_SVE2 AND NOT USE_NEON)
Expand Down Expand Up @@ -236,17 +250,44 @@ endif()

message(STATUS "Binary name: ${NDD_BINARY_NAME}")

# Add new src/*.cpp files here when they should be compiled into ndd.
set(NDD_CORE_SOURCES
src/sparse/inverted_index.cpp
)

# Build non-main project sources separately so they can be compiled in parallel
# and linked into the final executable at the end.
add_library(ndd_core OBJECT ${NDD_CORE_SOURCES})

# Create the target
add_executable(${NDD_BINARY_NAME} src/main.cpp ${LMDB_SOURCES} third_party/roaring_bitmap/roaring.c)
# Create the final binary target.
add_executable(${NDD_BINARY_NAME}
src/main.cpp
$<TARGET_OBJECTS:ndd_core>
${LMDB_SOURCES}
third_party/roaring_bitmap/roaring.c
)

# Set MDBX-specific compile flags
set_source_files_properties(${LMDB_SOURCES} PROPERTIES
COMPILE_FLAGS "-DMDBX_BUILD_SHARED_LIBRARY=0 -DMDBX_BUILD_FLAGS=\\\"NDD_EMBEDDED\\\""
)

# Include directories
target_include_directories(ndd_core PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/src/server
${CMAKE_CURRENT_SOURCE_DIR}/src/core
${CMAKE_CURRENT_SOURCE_DIR}/src/storage
${CMAKE_CURRENT_SOURCE_DIR}/src/utils
${CMAKE_CURRENT_SOURCE_DIR}/third_party
${CROW_INCLUDE_DIR}
${MSGPACK_INCLUDE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/src/roaring
${LMDB_INCLUDE_DIR}
${ASIO_INCLUDE_DIR}
${OPENSSL_INCLUDE_DIR}
${CURL_INCLUDE_DIRS}
)
target_include_directories(${NDD_BINARY_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/src/server
Expand All @@ -265,33 +306,54 @@ target_include_directories(${NDD_BINARY_NAME} PRIVATE

# Set compiler flags
if(NOT DEBUG)
target_compile_options(ndd_core PRIVATE -O3 -ffast-math -fno-finite-math-only)
target_compile_options(${NDD_BINARY_NAME} PRIVATE -O3 -ffast-math -fno-finite-math-only)
endif()

# Apply Flags based on selection
if(USE_AVX512)
message(STATUS "SIMD: AVX512 enabled (F, BW, VNNI, FP16)")
target_compile_options(ndd_core PRIVATE -mavx512f -mavx512bw -mavx512vnni -mavx512fp16 -mavx512vpopcntdq)
target_compile_definitions(ndd_core PRIVATE USE_AVX512)
target_compile_options(${NDD_BINARY_NAME} PRIVATE -mavx512f -mavx512bw -mavx512vnni -mavx512fp16 -mavx512vpopcntdq)
target_compile_definitions(${NDD_BINARY_NAME} PRIVATE USE_AVX512)
elseif(USE_AVX2)
message(STATUS "SIMD: AVX2 enabled")
target_compile_options(ndd_core PRIVATE -mavx2 -mfma -mf16c)
target_compile_definitions(ndd_core PRIVATE USE_AVX2)
target_compile_options(${NDD_BINARY_NAME} PRIVATE -mavx2 -mfma -mf16c)
target_compile_definitions(${NDD_BINARY_NAME} PRIVATE USE_AVX2)
elseif(USE_SVE2)
message(STATUS "SIMD: SVE2 enabled (ARMv8.6-a + SVE2 + FP16)")
target_compile_options(${NDD_BINARY_NAME} PRIVATE -march=armv8.6-a+sve2+fp16)
message(STATUS "SIMD: SVE2 enabled (ARMv8.6-a + SVE2 + FP16 + DotProd)")
target_compile_options(ndd_core PRIVATE -march=armv8.6-a+sve2+fp16+dotprod)
target_compile_definitions(ndd_core PRIVATE USE_SVE2)
target_compile_options(${NDD_BINARY_NAME} PRIVATE -march=armv8.6-a+sve2+fp16+dotprod)
target_compile_definitions(${NDD_BINARY_NAME} PRIVATE USE_SVE2)
elseif(USE_NEON)
message(STATUS "SIMD: NEON enabled")
if(APPLE AND (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64"))
target_compile_options(ndd_core PRIVATE -mcpu=native)
target_compile_options(${NDD_BINARY_NAME} PRIVATE -mcpu=native)
else()
target_compile_options(ndd_core PRIVATE -march=armv8.2-a+fp16+fp16fml+dotprod)
target_compile_options(${NDD_BINARY_NAME} PRIVATE -march=armv8.2-a+fp16+fp16fml+dotprod)
endif()
target_compile_definitions(ndd_core PRIVATE USE_NEON)
target_compile_definitions(${NDD_BINARY_NAME} PRIVATE USE_NEON)
endif()

if(NDD_INV_IDX_STORE_FLOATS)
target_compile_definitions(ndd_core PRIVATE NDD_INV_IDX_STORE_FLOATS)
target_compile_definitions(${NDD_BINARY_NAME} PRIVATE NDD_INV_IDX_STORE_FLOATS)
endif()

# Add ASIO definitions
target_compile_definitions(ndd_core PRIVATE
ASIO_STANDALONE
ASIO_HAS_STD_CHRONO
ASIO_HAS_STD_STRING_VIEW
MDB_MAXKEYSIZE=512
)
target_compile_definitions(${NDD_BINARY_NAME} PRIVATE
ASIO_STANDALONE
ASIO_HAS_STD_CHRONO
Expand All @@ -311,9 +373,16 @@ target_link_libraries(${NDD_BINARY_NAME} PRIVATE
# Installation rules
install(TARGETS ${NDD_BINARY_NAME} RUNTIME DESTINATION bin)

# Print configuration info
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
message(STATUS "Debug mode: ${DEBUG}")

# =======================
# Testing
# =======================
option(ENABLE_TESTING "Enable building tests" OFF)
if(ENABLE_TESTING)
enable_testing()
add_subdirectory(tests)
endif()

message(STATUS "Processor: ${CMAKE_SYSTEM_PROCESSOR}")
if(USE_AVX512)
message(STATUS "SIMD Mode: AVX512")
Expand All @@ -327,3 +396,11 @@ endif()
message(STATUS "ASIO include dir: ${ASIO_INCLUDE_DIR}")
message(STATUS "LMDB include dir: ${LMDB_INCLUDE_DIR}")
message(STATUS "OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}")

# Create a symbolic link named 'ndd' pointing to the architecture-specific binary
add_custom_command(TARGET ${NDD_BINARY_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E create_symlink
$<TARGET_FILE_NAME:${NDD_BINARY_NAME}>
${CMAKE_CURRENT_BINARY_DIR}/ndd
COMMENT "Creating softlink 'ndd' -> ${NDD_BINARY_NAME}"
)
29 changes: 29 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Contributing to Endee

Thanks for your interest in contributing to Endee! We welcome community
contributions and aim to keep the process simple and transparent.

## License

By contributing to this repository, you agree that your contributions will be
licensed under the **Apache License 2.0**, the same license that governs the
project.

You confirm that:
- You have the right to submit the contribution
- The contribution does not knowingly infringe any third-party rights

No additional contributor license agreement (CLA) is required.

## How to Contribute

1. Fork the repository
2. Create a feature branch
3. Make your changes with clear commits
4. Submit a pull request with a description of the change

## Code of Conduct

Be respectful and professional. Harassment or abusive behavior will not be
tolerated.

Loading