Fss-Rag-Mini/tests/test_context_retrieval.py
BobAi 4166d0a362 Initial release: FSS-Mini-RAG - Lightweight semantic code search system
🎯 Complete transformation from 5.9GB bloated system to 70MB optimized solution

 Key Features:
- Hybrid embedding system (Ollama + ML fallback + hash backup)
- Intelligent chunking with language-aware parsing
- Semantic + BM25 hybrid search with rich context
- Zero-config portable design with graceful degradation
- Beautiful TUI for beginners + powerful CLI for experts
- Comprehensive documentation with 8+ Mermaid diagrams
- Professional animated demo (183KB optimized GIF)

🏗️ Architecture Highlights:
- LanceDB vector storage with streaming indexing
- Smart file tracking (size/mtime) to avoid expensive rehashing
- Progressive chunking: Markdown headers → Python functions → fixed-size
- Quality filtering: 200+ chars, 20+ words, 30% alphanumeric content
- Concurrent batch processing with error recovery

📦 Package Contents:
- Core engine: claude_rag/ (11 modules, 2,847 lines)
- Entry points: rag-mini (unified), rag-tui (beginner interface)
- Documentation: README + 6 guides with visual diagrams
- Assets: 3D icon, optimized demo GIF, recording tools
- Tests: 8 comprehensive integration and validation tests
- Examples: Usage patterns, config templates, dependency analysis

🎥 Demo System:
- Scripted demonstration showing 12 files → 58 chunks indexing
- Semantic search with multi-line result previews
- Complete workflow from TUI startup to CLI mastery
- Professional recording pipeline with asciinema + GIF conversion

🛡️ Security & Quality:
- Complete .gitignore with personal data protection
- Dependency optimization (removed python-dotenv)
- Code quality validation and educational test suite
- Agent-reviewed architecture and documentation

Ready for production use - copy folder, run ./rag-mini, start searching\!
2025-08-12 16:38:28 +10:00

75 lines
3.3 KiB
Python

#!/usr/bin/env python3
"""
Test script for adjacent chunk retrieval functionality.
"""
from pathlib import Path
from claude_rag.search import CodeSearcher
from claude_rag.embeddings import CodeEmbedder
def test_context_retrieval():
"""Test the new context retrieval functionality."""
# Initialize searcher
project_path = Path(__file__).parent
try:
embedder = CodeEmbedder()
searcher = CodeSearcher(project_path, embedder)
print("Testing search with context...")
# Test 1: Search without context
print("\n1. Search WITHOUT context:")
results = searcher.search("chunk metadata", limit=3, include_context=False)
for i, result in enumerate(results, 1):
print(f" Result {i}: {result.file_path}:{result.start_line}-{result.end_line}")
print(f" Type: {result.chunk_type}, Name: {result.name}")
print(f" Has context_before: {result.context_before is not None}")
print(f" Has context_after: {result.context_after is not None}")
print(f" Has parent_chunk: {result.parent_chunk is not None}")
# Test 2: Search with context
print("\n2. Search WITH context:")
results = searcher.search("chunk metadata", limit=3, include_context=True)
for i, result in enumerate(results, 1):
print(f" Result {i}: {result.file_path}:{result.start_line}-{result.end_line}")
print(f" Type: {result.chunk_type}, Name: {result.name}")
print(f" Has context_before: {result.context_before is not None}")
print(f" Has context_after: {result.context_after is not None}")
print(f" Has parent_chunk: {result.parent_chunk is not None}")
if result.context_before:
print(f" Context before preview: {result.context_before[:50]}...")
if result.context_after:
print(f" Context after preview: {result.context_after[:50]}...")
if result.parent_chunk:
print(f" Parent chunk: {result.parent_chunk.name} ({result.parent_chunk.chunk_type})")
# Test 3: get_chunk_context method
print("\n3. Testing get_chunk_context method:")
# Get a sample chunk_id from the first result
df = searcher.table.to_pandas()
if not df.empty:
sample_chunk_id = df.iloc[0]['chunk_id']
print(f" Getting context for chunk_id: {sample_chunk_id}")
context = searcher.get_chunk_context(sample_chunk_id)
if context['chunk']:
print(f" Main chunk: {context['chunk'].file_path}:{context['chunk'].start_line}")
if context['prev']:
print(f" Previous chunk: lines {context['prev'].start_line}-{context['prev'].end_line}")
if context['next']:
print(f" Next chunk: lines {context['next'].start_line}-{context['next'].end_line}")
if context['parent']:
print(f" Parent chunk: {context['parent'].name} ({context['parent'].chunk_type})")
print("\nAll tests completed successfully!")
except Exception as e:
print(f"Error during testing: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
test_context_retrieval()