From 2baaa4549b5846c5951c68509d79ee69f4477949 Mon Sep 17 00:00:00 2001 From: Andy Lee Date: Fri, 25 Jul 2025 16:09:53 -0700 Subject: [PATCH] fix: handle relative paths in HNSW embedding server metadata - Convert relative paths to absolute paths based on metadata file location - Fixes FileNotFoundError when starting embedding server - Resolves issue with passages file not found in different working directories --- .../hnsw_embedding_server.py | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/leann-backend-hnsw/leann_backend_hnsw/hnsw_embedding_server.py b/packages/leann-backend-hnsw/leann_backend_hnsw/hnsw_embedding_server.py index 87b89ed..ca9741f 100644 --- a/packages/leann-backend-hnsw/leann_backend_hnsw/hnsw_embedding_server.py +++ b/packages/leann-backend-hnsw/leann_backend_hnsw/hnsw_embedding_server.py @@ -81,7 +81,21 @@ def create_hnsw_embedding_server( with open(passages_file, "r") as f: meta = json.load(f) - passages = PassageManager(meta["passage_sources"]) + # Convert relative paths to absolute paths based on metadata file location + metadata_dir = Path( + passages_file + ).parent.parent # Go up one level from the metadata file + passage_sources = [] + for source in meta["passage_sources"]: + source_copy = source.copy() + # Convert relative paths to absolute paths + if not Path(source_copy["path"]).is_absolute(): + source_copy["path"] = str(metadata_dir / source_copy["path"]) + if not Path(source_copy["index_path"]).is_absolute(): + source_copy["index_path"] = str(metadata_dir / source_copy["index_path"]) + passage_sources.append(source_copy) + + passages = PassageManager(passage_sources) logger.info( f"Loaded PassageManager with {len(passages.global_offset_map)} passages from metadata" ) @@ -270,15 +284,15 @@ def create_hnsw_embedding_server( if __name__ == "__main__": import signal import sys - + def signal_handler(sig, frame): logger.info(f"Received signal {sig}, shutting down gracefully...") sys.exit(0) - + # Register signal handlers for graceful shutdown signal.signal(signal.SIGTERM, signal_handler) signal.signal(signal.SIGINT, signal_handler) - + parser = argparse.ArgumentParser(description="HNSW Embedding service") parser.add_argument("--zmq-port", type=int, default=5555, help="ZMQ port to run on") parser.add_argument(