Skip to main content

A semantic engine that just works - offline-first semantic search for everyday laptops

Project description

JustEmbed

A semantic engine that just works.

Offline-first semantic search for everyday laptops.


⚠️ Alpha Release

This is v0.1.0a2 - Working Implementation!

Core functionality is now complete and ready for testing. Full release v0.1.0 coming soon!


What is JustEmbed?

JustEmbed is an offline-first semantic search library designed for everyday laptops. No cloud. No API keys. No telemetry. Just embed your documents and search.

Philosophy

  • One model only: e5-small (English, fast and efficient)
  • Offline-first: Zero network dependencies
  • Just works: No configuration, no choices, no surprises
  • Hardware-aware: Automatic limits based on your laptop
  • Privacy-first: Everything stays on your machine

Quick Start

import justembed as je

# Load documents from a folder
result = je.load("./documents")
print(f"Found {result['files_total']} files")

# Generate embeddings (first time only)
if not result['indexed']:
    stats = je.embed()
    print(f"Embedded {stats['files_embedded']} files in {stats['time_taken']:.2f}s")

# Search semantically
results = je.search("fruits that are red in color")
for r in results:
    print(f"Score: {r['score']:.3f} | {r['file']}")
    print(f"  {r['text'][:100]}...")

# Check status
status = je.status()
print(f"Loaded: {status['loaded']}")
print(f"Chunks: {status['chunks_used']}/{status['chunks_limit']}")

# Clear query cache
je.clear_cache()

# Unload when done
je.unload()

Core Features

  • ✅ Single model (e5-small.onnx - English)
  • ✅ Offline-first (zero network dependencies)
  • ✅ Python 3.8+ support
  • ✅ Polars-based storage (Parquet files)
  • ✅ Hardware-aware limits (2-3s soft, 10s hard)
  • ✅ Query caching for fast repeated searches
  • ✅ Simple API (5 functions + 1 utility)
  • ✅ Comprehensive error handling

Installation

pip install justembed

Current version: v0.1.0a2 - Core functionality implemented and ready for testing!


API Reference

Main Functions

load(path: str) -> dict

Load documents from a folder or file.

result = je.load("./documents")
# Returns: {"status": "loaded"|"not_indexed", "files_total": int, "indexed": bool}

embed() -> dict

Generate embeddings for loaded documents.

stats = je.embed()
# Returns: {"files_embedded": int, "chunks_created": int, "time_taken": float}

search(query: str, top_k: int = 5) -> list

Search indexed documents semantically.

results = je.search("red fruits", top_k=10)
# Returns: [{"score": float, "file": str, "text": str}, ...]

status() -> dict

Get current index status.

status = je.status()
# Returns: {"loaded": bool, "path": str, "files_indexed": int, 
#           "chunks_used": int, "chunks_limit": int, "query_cache_size": int}

unload() -> None

Unload current index and clear memory.

je.unload()

Utility Functions

clear_cache() -> None

Clear query cache to free disk space.

je.clear_cache()

Exception Classes

  • JustEmbedError - Base exception
  • NotLoadedError - No folder loaded
  • InvalidInputError - Invalid path or input
  • ChunkLimitError - Too many chunks for system
  • TimeoutError - Operation exceeded time limit

Requirements

  • Python 3.8+
  • ~100MB disk space (model + dependencies)
  • 4GB+ RAM recommended

Dependencies

  • onnxruntime - ONNX inference
  • tokenizers - Tokenization (standalone, not transformers!)
  • numpy - Array operations
  • polars - DataFrame operations
  • pyarrow - Parquet I/O
  • psutil - Hardware detection

No pandas. No transformers. No network dependencies.


Roadmap

v0.1.0a1 (December 2025) - Name Reservation

  • ✅ Package name locked on PyPI
  • ✅ Basic structure
  • ✅ Placeholder functions

v0.1.0a2 (January 2026) - Working Implementation

  • ✅ Full implementation complete
  • ✅ All core functions working
  • ✅ Property-based tests
  • ✅ Hardware-aware limits
  • ✅ Query caching
  • ✅ Comprehensive error handling

v0.1.0 (February 2026) - First Stable Release

  • ⏳ Production testing
  • ⏳ Performance optimization
  • ⏳ Complete documentation
  • ⏳ Example projects

v0.2.0 (Future)

  • ⏳ Multilingual model support (100+ languages)
  • ⏳ Advanced search filters
  • ⏳ Batch operations API
  • ⏳ Progress callbacks

Why "JustEmbed"?

Because that's all you need to do:

  1. Just embed your documents
  2. Just search with natural language
  3. Just works - no configuration needed

Design Decisions

One Model Only

We use e5-small.onnx (384 dimensions, English). Fast, efficient, and fits PyPI's 100MB limit. Multilingual support coming in v0.2.0.

Offline-First

Zero network dependencies. Everything runs locally. No telemetry. No surprises.

Hardware-Aware

Automatic limits based on your laptop's capabilities. Soft limit: 2-3s. Hard limit: 10s.

Polars, Not Pandas

We use Polars for speed and efficiency. No pandas dependency.

Tokenizers, Not Transformers

We use the standalone tokenizers library (3MB) instead of transformers (40MB). 93% smaller!


Target Users

  • Non-ML engineers learning AI for the first time
  • Business users in paranoid/restricted environments
  • Developers who need offline semantic search
  • Anyone who wants a safe sandbox to experiment

License

MIT License - see LICENSE file for details.


Author

Krishnamoorthy Sankaran


Links


Status

Core Functionality Complete!

v0.1.0a2 includes:

  • ✅ Document loading and scanning
  • ✅ Embedding generation with ONNX
  • ✅ Semantic search with cosine similarity
  • ✅ Query caching for performance
  • ✅ Status monitoring and management
  • ✅ Hardware-aware resource limits
  • ✅ Comprehensive error handling
  • ✅ Property-based testing

Ready for testing and feedback! Full v0.1.0 release coming soon.


JustEmbed - A semantic engine that just works.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

justembed-0.1.0a2.tar.gz (78.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

justembed-0.1.0a2-py3-none-any.whl (78.7 MB view details)

Uploaded Python 3

File details

Details for the file justembed-0.1.0a2.tar.gz.

File metadata

  • Download URL: justembed-0.1.0a2.tar.gz
  • Upload date:
  • Size: 78.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for justembed-0.1.0a2.tar.gz
Algorithm Hash digest
SHA256 f1cbf2c33fba8df732c04ee4b02375866945166b741f329dc9fa1cf9f645dc6a
MD5 a891a6efce17a5bf93ae21c0e8ff31c0
BLAKE2b-256 1a81cad8ff75f0f572134daad59f5acc21ee074369c9196cbd14708e5f1d3d6f

See more details on using hashes here.

File details

Details for the file justembed-0.1.0a2-py3-none-any.whl.

File metadata

  • Download URL: justembed-0.1.0a2-py3-none-any.whl
  • Upload date:
  • Size: 78.7 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for justembed-0.1.0a2-py3-none-any.whl
Algorithm Hash digest
SHA256 6b2e04ed64fca2f6f49bb4ed79a725ba239895a44a2c3acdda36a3e7dd215c46
MD5 3eef88fa61a1fb86046e30407191c734
BLAKE2b-256 e6606a5eeb5f6048eee5f8006139008435e95df3f457bd025f3f0ff2c4bf977b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page