468 lines
24 KiB
Plaintext
468 lines
24 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"INFO:sentence_transformers.SentenceTransformer:Use pytorch device_name: mps\n",
|
|
"INFO:sentence_transformers.SentenceTransformer:Load pretrained SentenceTransformer: facebook/contriever-msmarco\n",
|
|
"WARNING:sentence_transformers.SentenceTransformer:No sentence-transformers model found with name facebook/contriever-msmarco. Creating a new one with mean pooling.\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"INFO: Computing embeddings for 1 chunks using SentenceTransformer model 'facebook/contriever-msmarco'...\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Batches: 100%|██████████| 1/1 [00:00<00:00, 13.92it/s]\n",
|
|
"INFO:sentence_transformers.SentenceTransformer:Use pytorch device_name: mps\n",
|
|
"INFO:sentence_transformers.SentenceTransformer:Load pretrained SentenceTransformer: facebook/contriever-msmarco\n",
|
|
"WARNING:sentence_transformers.SentenceTransformer:No sentence-transformers model found with name facebook/contriever-msmarco. Creating a new one with mean pooling.\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"INFO: Computing embeddings for 5 chunks using SentenceTransformer model 'facebook/contriever-msmarco'...\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Batches: 100%|██████████| 1/1 [00:00<00:00, 50.18it/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"M: 64 for level: 0\n",
|
|
"INFO: Converting HNSW index to CSR-pruned format...\n",
|
|
"Starting conversion: knowledge.index -> knowledge.csr.tmp\n",
|
|
"[0.00s] Reading Index HNSW header...\n",
|
|
"[0.00s] Header read: d=768, ntotal=5\n",
|
|
"[0.00s] Reading HNSW struct vectors...\n",
|
|
" Reading vector (dtype=<class 'numpy.float64'>, fmt='d')... Count=6, Bytes=48\n",
|
|
"[0.00s] Read assign_probas (6)\n",
|
|
" Reading vector (dtype=<class 'numpy.int32'>, fmt='i')... Count=7, Bytes=28\n",
|
|
"[0.13s] Read cum_nneighbor_per_level (7)\n",
|
|
" Reading vector (dtype=<class 'numpy.int32'>, fmt='i')... "
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Count=5, Bytes=20\n",
|
|
"[0.23s] Read levels (5)\n",
|
|
"[0.31s] Probing for compact storage flag...\n",
|
|
"[0.31s] Found compact flag: False\n",
|
|
"[0.31s] Compact flag is False, reading original format...\n",
|
|
"[0.31s] Probing for potential extra byte before non-compact offsets...\n",
|
|
"[0.31s] Found and consumed an unexpected 0x00 byte.\n",
|
|
" Reading vector (dtype=<class 'numpy.uint64'>, fmt='Q')... Count=6, Bytes=48\n",
|
|
"[0.31s] Read offsets (6)\n",
|
|
"[0.40s] Attempting to read neighbors vector...\n",
|
|
" Reading vector (dtype=<class 'numpy.int32'>, fmt='i')... Count=320, Bytes=1280\n",
|
|
"[0.40s] Read neighbors (320)\n",
|
|
"[0.49s] Read scalar params (ep=4, max_lvl=0)\n",
|
|
"[0.49s] Checking for storage data...\n",
|
|
"[0.49s] Found storage fourcc: 49467849.\n",
|
|
"[0.49s] Converting to CSR format...\n",
|
|
"[0.49s] Conversion loop finished. \n",
|
|
"[0.49s] Running validation checks...\n",
|
|
" Checking total valid neighbor count...\n",
|
|
" OK: Total valid neighbors = 20\n",
|
|
" Checking final pointer indices...\n",
|
|
" OK: Final pointers match data size.\n",
|
|
"[0.49s] Deleting original neighbors and offsets arrays...\n",
|
|
" CSR Stats: |data|=20, |level_ptr|=10\n",
|
|
"[0.57s] Writing CSR HNSW graph data in FAISS-compatible order...\n",
|
|
" Pruning embeddings: Writing NULL storage marker.\n",
|
|
"[0.66s] Conversion complete.\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"INFO:sentence_transformers.SentenceTransformer:Use pytorch device_name: mps\n",
|
|
"INFO:sentence_transformers.SentenceTransformer:Load pretrained SentenceTransformer: facebook/contriever-msmarco\n",
|
|
"WARNING:sentence_transformers.SentenceTransformer:No sentence-transformers model found with name facebook/contriever-msmarco. Creating a new one with mean pooling.\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"✅ CSR conversion successful.\n",
|
|
"INFO: Replaced original index with CSR-pruned version at 'knowledge.index'\n",
|
|
"[read_HNSW - CSR NL v4] Reading metadata & CSR indices (manual offset)...\n",
|
|
"INFO: Terminating session server process (PID: 70979)...\n",
|
|
"[read_HNSW NL v4] Read levels vector, size: 5\n",
|
|
"[read_HNSW NL v4] Reading Compact Storage format indices...\n",
|
|
"[read_HNSW NL v4] Read compact_level_ptr, size: 10\n",
|
|
"[read_HNSW NL v4] Read compact_node_offsets, size: 6\n",
|
|
"[read_HNSW NL v4] Read entry_point: 4, max_level: 0\n",
|
|
"[read_HNSW NL v4] Read storage fourcc: 0x6c6c756e\n",
|
|
"[read_HNSW NL v4 FIX] Detected FileIOReader. Neighbors size field offset: 326\n",
|
|
"[read_HNSW NL v4] Reading neighbors data into memory.\n",
|
|
"[read_HNSW NL v4] Read neighbors data, size: 20\n",
|
|
"[read_HNSW NL v4] Finished reading metadata and CSR indices.\n",
|
|
"INFO: Skipping external storage loading, since is_recompute is true.\n",
|
|
"INFO: Server process terminated.\n",
|
|
"🔍 DEBUG LeannSearcher.search() called:\n",
|
|
" Query: 'programming languages'\n",
|
|
" Top_k: 2\n",
|
|
" Additional kwargs: {'recompute_beighbor_embeddings': True}\n",
|
|
"INFO: Computing embeddings for 1 chunks using SentenceTransformer model 'facebook/contriever-msmarco'...\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Batches: 100%|██████████| 1/1 [00:00<00:00, 12.04it/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
" Generated embedding shape: (1, 768)\n",
|
|
" Embedding time: 1.2403802871704102 seconds\n",
|
|
"INFO: Starting session-level embedding server for 'leann_backend_hnsw.hnsw_embedding_server'...\n",
|
|
"INFO: Running command from project root: /Users/yichuan/Desktop/code/LEANN/leann\n",
|
|
"INFO: Command: /Users/yichuan/Desktop/code/LEANN/leann/.venv/bin/python -m leann_backend_hnsw.hnsw_embedding_server --zmq-port 5557 --model-name facebook/contriever-msmarco --passages-file knowledge.leann.meta.json --disable-warmup\n",
|
|
"INFO: Server process started with PID: 71209\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n",
|
|
"To disable this warning, you can either:\n",
|
|
"\t- Avoid using `tokenizers` before the fork if possible\n",
|
|
"\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"✅ Embedding server is up and ready for this session.\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: INFO: Starting backend auto-discovery...\n",
|
|
"ZmqDistanceComputer initialized: d=768, metric=0\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: INFO: Registering backend 'diskann'\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: INFO: Backend auto-discovery finished.\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: INFO: Registering backend 'hnsw'\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Loading tokenizer for facebook/contriever-msmarco...\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Tokenizer loaded successfully!\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: MPS available: True\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: CUDA available: False\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Using MPS device (Apple Silicon)\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Starting HNSW server on port 5557 with model facebook/contriever-msmarco\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Loading model facebook/contriever-msmarco... (this may take a while if downloading)\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Model facebook/contriever-msmarco loaded successfully!\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Loaded label map with 5 entries\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Initialized lazy passage loading for 5 passages\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Warmup disabled or no passages available (enable_warmup=False, passages=5)\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: HNSW ZMQ server listening on port 5557\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Started HNSW ZMQ server thread on port 5557\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Received ZMQ request of size 3 bytes\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: request_payload length: 1\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: request_payload[0]: <class 'list'> - [4]\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Request for 1 node embeddings\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Total batch size: 1, max_batch_size: 128\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG zmq_server_thread: Final 'hidden' array | Shape: (1, 768) | Dtype: float32 | Has NaN/Inf: False\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Serialize time: 0.000154 seconds\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: ZMQ E2E time: 0.131017 seconds\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Received ZMQ request of size 3849 bytes\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: request_payload length: 2\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: request_payload[0]: <class 'list'> - [0, 1, 2, 3]\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: request_payload[1]: <class 'list'> - [0.028167724609375, -0.01134490966796875, 0.044586181640625, -0.017486572265625, -0.028564453125, -0...\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Distance calculation request received\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Node IDs: [0, 1, 2, 3]\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Query vector dim: 768\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Passages loaded: 5\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Looking up passage ID 0\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Found text for ID 0, length: 37\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Looking up passage ID 1\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Found text for ID 1, length: 64\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Looking up passage ID 2\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Found text for ID 2, length: 38\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Looking up passage ID 3\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Found text for ID 3, length: 36\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Sending distance response with 4 distances\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Distance calculation E2E time: 0.131733 seconds\n",
|
|
" Search time: 4.379124879837036 seconds\n",
|
|
" Backend returned: labels=2 results\n",
|
|
" Processing 2 passage IDs:\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"INFO:leann.chat:Attempting to create LLM of type='hf' with model='Qwen/Qwen3-0.6B'\n",
|
|
"INFO:leann.chat:Initializing HFChat with model='Qwen/Qwen3-0.6B'\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
" 1. passage_id='8f6d8742-3659-4d2f-ac45-377fd69b031e' -> SUCCESS: C# is a powerful programming language...\n",
|
|
" 2. passage_id='837f1f70-3c8c-498f-867d-06a063aa2a6e' -> SUCCESS: Python is a powerful programming language and it is very popular...\n",
|
|
" Final enriched results: 2 passages\n",
|
|
"[SearchResult(id='8f6d8742-3659-4d2f-ac45-377fd69b031e', score=np.float32(1.4450607), text='C# is a powerful programming language', metadata={}), SearchResult(id='837f1f70-3c8c-498f-867d-06a063aa2a6e', score=np.float32(1.394449), text='Python is a powerful programming language and it is very popular', metadata={})]\n",
|
|
"[read_HNSW - CSR NL v4] Reading metadata & CSR indices (manual offset)...\n",
|
|
"[read_HNSW NL v4] Read levels vector, size: 5\n",
|
|
"[read_HNSW NL v4] Reading Compact Storage format indices...\n",
|
|
"[read_HNSW NL v4] Read compact_level_ptr, size: 10\n",
|
|
"[read_HNSW NL v4] Read compact_node_offsets, size: 6\n",
|
|
"[read_HNSW NL v4] Read entry_point: 4, max_level: 0\n",
|
|
"[read_HNSW NL v4] Read storage fourcc: 0x6c6c756e\n",
|
|
"[read_HNSW NL v4 FIX] Detected FileIOReader. Neighbors size field offset: 326\n",
|
|
"[read_HNSW NL v4] Reading neighbors data into memory.\n",
|
|
"[read_HNSW NL v4] Read neighbors data, size: 20\n",
|
|
"[read_HNSW NL v4] Finished reading metadata and CSR indices.\n",
|
|
"INFO: Skipping external storage loading, since is_recompute is true.\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"INFO:leann.chat:MPS is available. Using Apple Silicon GPU.\n",
|
|
"Device set to use mps\n",
|
|
"INFO:sentence_transformers.SentenceTransformer:Use pytorch device_name: mps\n",
|
|
"INFO:sentence_transformers.SentenceTransformer:Load pretrained SentenceTransformer: facebook/contriever-msmarco\n",
|
|
"WARNING:sentence_transformers.SentenceTransformer:No sentence-transformers model found with name facebook/contriever-msmarco. Creating a new one with mean pooling.\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"🔍 DEBUG LeannSearcher.search() called:\n",
|
|
" Query: 'Compare the two retrieved programming languages and say which one is more popular today. Respond in a single well-formed sentence.'\n",
|
|
" Top_k: 2\n",
|
|
" Additional kwargs: {'recompute_beighbor_embeddings': True}\n",
|
|
"INFO: Computing embeddings for 1 chunks using SentenceTransformer model 'facebook/contriever-msmarco'...\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Batches: 100%|██████████| 1/1 [00:00<00:00, 7.66it/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
" Generated embedding shape: (1, 768)\n",
|
|
" Embedding time: 1.5981061458587646 seconds\n",
|
|
"INFO: Port 5557 is in use. Checking server compatibility...\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Received ZMQ request of size 17 bytes\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: request_payload length: 1\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: request_payload[0]: <class 'str'> - __QUERY_MODEL__\n",
|
|
"✅ Existing server on port 5557 is using correct model: facebook/contriever-msmarco\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Received ZMQ request of size 21 bytes\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: request_payload length: 1\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: request_payload[0]: <class 'str'> - __QUERY_META_PATH__\n",
|
|
"✅ Existing server on port 5557 is using correct meta path: knowledge.leann.meta.json\n",
|
|
"✅ Server on port 5557 is compatible and ready to use.\n",
|
|
"ZmqDistanceComputer initialized: d=768, metric=0\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Received ZMQ request of size 3 bytes\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: request_payload length: 1\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: request_payload[0]: <class 'list'> - [4]\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Request for 1 node embeddings\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Total batch size: 1, max_batch_size: 128\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG zmq_server_thread: Final 'hidden' array | Shape: (1, 768) | Dtype: float32 | Has NaN/Inf: False\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Serialize time: 0.000330 seconds\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: ZMQ E2E time: 0.165497 seconds\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Received ZMQ request of size 3849 bytes\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: request_payload length: 2\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: request_payload[0]: <class 'list'> - [0, 1, 2, 3]\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: request_payload[1]: <class 'list'> - [0.0753173828125, -0.00579071044921875, 0.0662841796875, 0.014923095703125, -0.0064544677734375, -0....\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Distance calculation request received\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Node IDs: [0, 1, 2, 3]\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Query vector dim: 768\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Passages loaded: 5\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Looking up passage ID 0\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Found text for ID 0, length: 37\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Looking up passage ID 1\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Found text for ID 1, length: 64\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Looking up passage ID 2\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Found text for ID 2, length: 38\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Looking up passage ID 3\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: DEBUG: Found text for ID 3, length: 36\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Sending distance response with 4 distances\n",
|
|
"[leann_backend_hnsw.hnsw_embedding_server LOG]: Distance calculation E2E time: 0.082911 seconds\n",
|
|
" Search time: 0.2542300224304199 seconds\n",
|
|
" Backend returned: labels=2 results\n",
|
|
" Processing 2 passage IDs:\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"INFO:leann.chat:Generating text with Hugging Face model with params: {'max_length': 500, 'num_return_sequences': 1}\n",
|
|
"Truncation was not explicitly activated but `max_length` is provided a specific value, please use `truncation=True` to explicitly truncate examples to max length. Defaulting to 'longest_first' truncation strategy. If you encode pairs of sequences (GLUE-style) with the tokenizer you can select this strategy more precisely by providing a specific strategy to `truncation`.\n",
|
|
"Both `max_new_tokens` (=256) and `max_length`(=500) seem to have been set. `max_new_tokens` will take precedence. Please refer to the documentation for more information. (https://huggingface.co/docs/transformers/main/en/main_classes/text_generation)\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
" 1. passage_id='837f1f70-3c8c-498f-867d-06a063aa2a6e' -> SUCCESS: Python is a powerful programming language and it is very popular...\n",
|
|
" 2. passage_id='8f6d8742-3659-4d2f-ac45-377fd69b031e' -> SUCCESS: C# is a powerful programming language...\n",
|
|
" Final enriched results: 2 passages\n",
|
|
"Also, make sure you answer in a single sentence.\n",
|
|
"Answer:\n",
|
|
"The retrieved context says that Python and C# are both powerful programming languages, but it does not provide any specific information about their popularity. However, based on general knowledge, Python is more popular than C# in current markets.\n",
|
|
"The answer should be in a single sentence.\n",
|
|
"Answer:\n",
|
|
"Python is a more popular programming language than C# today.\n",
|
|
"---\n",
|
|
"\n",
|
|
"So the final answer is:\n",
|
|
"\n",
|
|
"Python is a more popular programming language than C# today.\n",
|
|
"---\n",
|
|
"\n",
|
|
"Answer:\n",
|
|
"Python is a more popular programming language than C# today.\n",
|
|
"---\n",
|
|
"\n",
|
|
"So the final answer is:\n",
|
|
"\n",
|
|
"Python is a more popular programming language than C# today.\n",
|
|
"---\n",
|
|
"\n",
|
|
"Answer:\n",
|
|
"Python is a more popular programming language than C# today.\n",
|
|
"---\n",
|
|
"\n",
|
|
"So the final answer is:\n",
|
|
"\n",
|
|
"Python is a more popular programming language than C# today.\n",
|
|
"---\n",
|
|
"\n",
|
|
"Answer:\n",
|
|
"Python is a more popular programming language than C# today.\n",
|
|
"---\n",
|
|
"\n",
|
|
"So the final answer is:\n",
|
|
"\n",
|
|
"Python is a more popular programming language than C# today.\n",
|
|
"---\n",
|
|
"\n",
|
|
"Answer:\n",
|
|
"Python is a more popular programming language than C# today.\n",
|
|
"---\n",
|
|
"\n",
|
|
"So the final answer is:\n",
|
|
"\n",
|
|
"Python is a more popular programming language than C# today.\n",
|
|
"---\n",
|
|
"\n",
|
|
"Answer:\n",
|
|
"Python is a more popular programming language than C# today.\n",
|
|
"---\n",
|
|
"\n",
|
|
"So the final answer\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"from leann.api import LeannBuilder, LeannSearcher, LeannChat\n",
|
|
"# 1. Build index (no embeddings stored!)\n",
|
|
"builder = LeannBuilder(backend_name=\"hnsw\")\n",
|
|
"builder.add_text(\"C# is a powerful programming language\")\n",
|
|
"builder.add_text(\"Python is a powerful programming language and it is very popular\")\n",
|
|
"builder.add_text(\"Machine learning transforms industries\") \n",
|
|
"builder.add_text(\"Neural networks process complex data\")\n",
|
|
"builder.add_text(\"Leann is a great storage saving engine for RAG on your macbook\")\n",
|
|
"builder.build_index(\"knowledge.leann\")\n",
|
|
"# 2. Search with real-time embeddings\n",
|
|
"searcher = LeannSearcher(\"knowledge.leann\")\n",
|
|
"results = searcher.search(\"programming languages\", top_k=2, recompute_beighbor_embeddings=True)\n",
|
|
"print(results)\n",
|
|
"\n",
|
|
"llm_config = {\"type\": \"hf\", \"model\": \"Qwen/Qwen3-0.6B\"}\n",
|
|
"\n",
|
|
"chat = LeannChat(index_path=\"knowledge.leann\", llm_config=llm_config)\n",
|
|
"\n",
|
|
"response = chat.ask(\n",
|
|
" \"Compare the two retrieved programming languages and say which one is more popular today. Respond in a single well-formed sentence.\",\n",
|
|
" top_k=2,\n",
|
|
" recompute_beighbor_embeddings=True,\n",
|
|
")\n",
|
|
"print(response)"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": ".venv",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.11.12"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|