Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
9c39b848f0 | |||
|
6b6735e07f | ||
4b99f2e816 | |||
|
c38f8f2ef8 | ||
478dc3a8a1 | |||
|
2d4bc5fa2f | ||
291bf9473a |
@@ -23,7 +23,6 @@ COPY pyproject.toml uv.lock ./
|
||||
|
||||
# Copy source code (needed for editable install)
|
||||
COPY src/ src/
|
||||
COPY assets/ assets/
|
||||
|
||||
# Change ownership of source files before building (lighter I/O)
|
||||
RUN chown -R appuser:appuser /app
|
||||
@@ -56,7 +55,6 @@ RUN chown appuser:appuser /app
|
||||
# Copy files from builder with correct ownership
|
||||
COPY --from=builder --chown=appuser:appuser /app/.venv /app/.venv
|
||||
COPY --from=builder --chown=appuser:appuser /app/src /app/src
|
||||
COPY --from=builder --chown=appuser:appuser /app/assets /app/assets
|
||||
|
||||
# Switch to non-root user
|
||||
USER appuser
|
||||
|
12
README.md
12
README.md
@@ -68,6 +68,18 @@ docker run -p 8050:8050 ghcr.io/godber/embedding-buddy:latest
|
||||
|
||||
The application will be available at <http://127.0.0.1:8050>
|
||||
|
||||
### macOS Installation Notes
|
||||
|
||||
If installation fails with C++ compiler or library errors (common with `opentsne`), install Xcode Command Line Tools:
|
||||
|
||||
```bash
|
||||
# Install or update Command Line Tools
|
||||
xcode-select --install
|
||||
|
||||
# Or reset existing installation
|
||||
sudo xcode-select --reset
|
||||
```
|
||||
|
||||
### Using the Application
|
||||
|
||||
1. **Open your browser** to <http://127.0.0.1:8050>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "embeddingbuddy"
|
||||
version = "0.8.0"
|
||||
version = "0.8.3"
|
||||
description = "A Python Dash application for interactive exploration and visualization of embedding vectors through dimensionality reduction techniques."
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.11"
|
||||
@@ -54,3 +54,6 @@ where = ["src"]
|
||||
|
||||
[tool.setuptools.package-dir]
|
||||
"" = "src"
|
||||
|
||||
[tool.setuptools.package-data]
|
||||
embeddingbuddy = ["assets/**/*"]
|
||||
|
@@ -16,9 +16,9 @@ def create_app():
|
||||
from .ui.callbacks.visualization import VisualizationCallbacks
|
||||
from .ui.callbacks.interactions import InteractionCallbacks
|
||||
|
||||
# Get the project root directory (two levels up from this file)
|
||||
project_root = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
|
||||
assets_path = os.path.join(project_root, "assets")
|
||||
# Get the assets directory relative to this module
|
||||
module_dir = os.path.dirname(__file__)
|
||||
assets_path = os.path.join(module_dir, "assets")
|
||||
|
||||
app = dash.Dash(
|
||||
__name__,
|
||||
@@ -167,8 +167,15 @@ def serve(host=None, port=None, dev=False, debug=False):
|
||||
|
||||
# Only print startup messages in main process (not in Flask reloader)
|
||||
if not os.environ.get("WERKZEUG_RUN_MAIN"):
|
||||
from importlib.metadata import version
|
||||
|
||||
try:
|
||||
pkg_version = version("embeddingbuddy")
|
||||
except Exception:
|
||||
pkg_version = "unknown"
|
||||
|
||||
mode = "development" if dev else ("debug" if debug else "production")
|
||||
print(f"Starting EmbeddingBuddy in {mode} mode...")
|
||||
print(f"Starting EmbeddingBuddy v{pkg_version} in {mode} mode...")
|
||||
print("Loading dependencies (this may take a few seconds)...")
|
||||
print(f"Server will start at http://{actual_host}:{actual_port}")
|
||||
if use_reloader:
|
||||
|
@@ -660,14 +660,12 @@ class DataProcessingCallbacks:
|
||||
import os
|
||||
|
||||
try:
|
||||
# Get the project root directory (four levels up from this file)
|
||||
# Get the embeddingbuddy package directory (three levels up from this file)
|
||||
current_file = os.path.abspath(__file__)
|
||||
project_root = os.path.dirname(
|
||||
os.path.dirname(
|
||||
os.path.dirname(os.path.dirname(os.path.dirname(current_file)))
|
||||
package_dir = os.path.dirname(
|
||||
os.path.dirname(os.path.dirname(current_file))
|
||||
)
|
||||
)
|
||||
sample_file_path = os.path.join(project_root, "assets", "sample-txt.md")
|
||||
sample_file_path = os.path.join(package_dir, "assets", "sample-txt.md")
|
||||
|
||||
if os.path.exists(sample_file_path):
|
||||
with open(sample_file_path, "r", encoding="utf-8") as file:
|
||||
|
Reference in New Issue
Block a user