
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
embeddingbuddy
Advanced tools
A Python Dash application for interactive exploration and visualization of embedding vectors through dimensionality reduction techniques.
A modular Python Dash web application for interactive exploration and visualization of embedding vectors through dimensionality reduction techniques. Compare documents and prompts in the same embedding space to understand semantic relationships.

EmbeddingBuddy provides an intuitive web interface for analyzing high-dimensional embedding vectors by applying various dimensionality reduction algorithms and visualizing the results in interactive 2D and 3D plots. The application features a clean, modular architecture that makes it easy to test, maintain, and extend with new features. It supports dual dataset visualization, allowing you to compare documents and prompts to understand how queries relate to your content.
Note: The application loads the Transformers.js library (v3.0.0) from cdn.jsdelivr.net for client-side embedding generation. This requires an active internet connection and sends requests to a third-party CDN. The application will function without internet if you only use the file upload features for pre-computed embeddings.
Option 1: Install with uv (recommended)
# Install as a CLI tool (no need to clone the repo)
uv tool install embeddingbuddy
# Run the application
embeddingbuddy serve
Option 2: Install with pip/pipx
# Install with pipx (isolated environment)
pipx install embeddingbuddy
# Or install with pip
pip install embeddingbuddy
# Run the application
embeddingbuddy
Option 3: Run with Docker
# Pull and run the Docker image
docker run -p 8050:8050 ghcr.io/godber/embedding-buddy:latest
The application will be available at http://127.0.0.1:8050
EmbeddingBuddy accepts newline-delimited JSON (NDJSON) files for both documents and prompts. Each line contains an embedding with the following structure:
Documents:
{"id": "doc_001", "embedding": [0.1, -0.3, 0.7, ...], "text": "Sample text content", "category": "news", "subcategory": "politics", "tags": ["election", "politics"]}
{"id": "doc_002", "embedding": [0.2, -0.1, 0.9, ...], "text": "Another example", "category": "review", "subcategory": "product", "tags": ["tech", "gadget"]}
Prompts:
{"id": "prompt_001", "embedding": [0.15, -0.28, 0.65, ...], "text": "Find articles about machine learning applications", "category": "search", "subcategory": "technology", "tags": ["AI", "research"]}
{"id": "prompt_002", "embedding": [0.72, 0.18, -0.35, ...], "text": "Show me product reviews for smartphones", "category": "search", "subcategory": "product", "tags": ["mobile", "reviews"]}
Required Fields:
embedding: Array of floating-point numbers representing the vector (must be same dimensionality for both documents and prompts)text: String content associated with the embeddingOptional Fields:
id: Unique identifier (auto-generated if missing)category: Primary classificationsubcategory: Secondary classificationtags: Array of string tags for flexible labelingImportant: Document and prompt embeddings must have the same number of dimensions to be visualized together.
This project uses uv for dependency management.
uv sync
# Production mode (no debug, no auto-reload)
embeddingbuddy serve
# Development mode (debug + auto-reload on code changes)
embeddingbuddy serve --dev
# Debug logging only (no auto-reload)
embeddingbuddy serve --debug
# Custom host/port
embeddingbuddy serve --host 0.0.0.0 --port 8080
Open your browser to http://127.0.0.1:8050
Test with sample data:
sample_data.ndjson (documents)sample_prompts.ndjson (prompts) to see dual visualizationYou can also run EmbeddingBuddy using Docker:
# Run in the background
docker compose up -d
The application will be available at http://127.0.0.1:8050
To run with OpenSearch for enhanced search capabilities:
# Run in the background with OpenSearch
docker compose --profile opensearch up -d
This will start both the EmbeddingBuddy application and an OpenSearch instance. OpenSearch will be available at http://127.0.0.1:9200
# Stop all services
docker compose down
# Stop and remove volumes
docker compose down -v
# View logs
docker compose logs embeddingbuddy
docker compose logs opensearch
# Rebuild containers
docker compose build
The application follows a modular architecture for improved maintainability and testability:
src/embeddingbuddy/
├── app.py # Main application entry point and factory
├── config/ # Configuration management
│ └── settings.py # Centralized app settings
├── data/ # Data parsing and processing
│ ├── parser.py # NDJSON parsing logic
│ ├── processor.py # Data transformation utilities
│ └── sources/ # Data source integrations
│ └── opensearch.py # OpenSearch data source
├── models/ # Data schemas and algorithms
│ ├── schemas.py # Pydantic data models
│ ├── reducers.py # Dimensionality reduction algorithms
│ └── field_mapper.py # Field mapping utilities
├── visualization/ # Plot creation and styling
│ ├── plots.py # Plot factory and creation logic
│ └── colors.py # Color mapping utilities
├── ui/ # User interface components
│ ├── layout.py # Main application layout
│ ├── components/ # Reusable UI components
│ │ ├── sidebar.py # Sidebar component
│ │ ├── upload.py # Upload components
│ │ ├── textinput.py # Text input components
│ │ └── datasource.py # Data source components
│ └── callbacks/ # Organized callback functions
│ ├── data_processing.py # Data upload/processing callbacks
│ ├── visualization.py # Plot update callbacks
│ └── interactions.py # User interaction callbacks
└── utils/ # Utility functions
# CLI entry point
embeddingbuddy serve # Main CLI command to start the server
Run the test suite to verify functionality:
# Install test dependencies
uv sync --extra test
# Run all tests
uv run pytest tests/ -v
# Run specific test file
uv run pytest tests/test_data_processing.py -v
# Run with coverage
uv run pytest tests/ --cov=src/embeddingbuddy
Install development dependencies for linting, type checking, and security:
# Install all dev dependencies
uv sync --extra dev
# Or install specific groups
uv sync --extra test # Testing tools
uv sync --extra lint # Linting and formatting
uv sync --extra security # Security scanning tools
# Run linting
uv run ruff check src/ tests/
uv run ruff format src/ tests/
# Run type checking
uv run mypy src/embeddingbuddy/
# Run security scans
uv run bandit -r src/
uv run safety check
The modular architecture makes it easy to extend functionality:
models/reducers.pyvisualization/plots.pyui/components/config/settings.pyFAQs
A Python Dash application for interactive exploration and visualization of embedding vectors through dimensionality reduction techniques.
We found that embeddingbuddy demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.