#!/usr/bin/env python3
"""
Simple standalone test for sqlite-vec functionality.
"""
import asyncio
import os
import tempfile
import sys
import sqlite3
async def test_sqlite_vec_basic():
"""Test basic sqlite-vec functionality."""
print("🔧 Testing basic SQLite-vec functionality...")
print("=" * 50)
try:
# Test sqlite-vec import
print("1. Testing sqlite-vec import...")
import sqlite_vec
from sqlite_vec import serialize_float32
print(" ✅ sqlite-vec imported successfully")
# Test basic database operations
print("\n2. Testing database creation...")
temp_dir = tempfile.mkdtemp()
db_path = os.path.join(temp_dir, "test.db")
conn = sqlite3.connect(db_path)
conn.enable_load_extension(True)
sqlite_vec.load(conn)
print(" ✅ Database created and sqlite-vec loaded")
# Create test table
print("\n3. Creating test table...")
conn.execute('''
CREATE TABLE test_vectors (
id INTEGER PRIMARY KEY,
content TEXT,
embedding BLOB
)
''')
print(" ✅ Test table created")
# Test vector operations
print("\n4. Testing vector operations...")
test_vector = [0.1, 0.2, 0.3, 0.4, 0.5]
serialized = serialize_float32(test_vector)
conn.execute('''
INSERT INTO test_vectors (content, embedding)
VALUES (?, ?)
''', ("Test content", serialized))
conn.commit()
print(" ✅ Vector stored successfully")
# Test retrieval
print("\n5. Testing retrieval...")
cursor = conn.execute('''
SELECT content, embedding FROM test_vectors WHERE id = 1
''')
row = cursor.fetchone()
if row:
content, stored_embedding = row
print(f" Retrieved content: {content}")
print(" ✅ Retrieval successful")
# Cleanup
conn.close()
os.remove(db_path)
os.rmdir(temp_dir)
print("\n✅ Basic sqlite-vec test passed!")
print("\n🚀 SQLite-vec is working correctly on your Ubuntu system!")
return True
except Exception as e:
print(f" ❌ Test failed: {e}")
import traceback
traceback.print_exc()
return False
async def show_next_steps():
"""Show next steps for integration."""
print("\n" + "=" * 60)
print("🎯 Next Steps for Claude Code + VS Code Integration")
print("=" * 60)
print("\n1. 📦 Complete MCP Memory Service Setup:")
print(" # Stay in your virtual environment")
print(" source venv/bin/activate")
print()
print(" # Set the backend")
print(" export MCP_MEMORY_STORAGE_BACKEND=sqlite_vec")
print()
print(" # Install remaining MCP dependencies")
print(" pip install mcp")
print("\n2. 🔧 Configure Claude Code Integration:")
print(" The sqlite-vec backend is now ready!")
print(" Your memory database will be stored at:")
home = os.path.expanduser("~")
print(f" {home}/.local/share/mcp-memory/sqlite_vec.db")
print("\n3. 💻 For VS Code Integration:")
print(" # Install VS Code MCP extension (if available)")
print(" # Or use Claude Code directly in VS Code terminal")
print("\n4. 🧪 Test the Setup:")
print(" # Test that MCP Memory Service works with sqlite-vec")
print(" python -c \"")
print(" import os")
print(" os.environ['MCP_MEMORY_STORAGE_BACKEND'] = 'sqlite_vec'")
print(" # Your memory operations will now use sqlite-vec!")
print(" \"")
print("\n5. 🔄 Migration (if you have existing ChromaDB data):")
print(" python migrate_to_sqlite_vec.py")
print("\n✨ Benefits of SQLite-vec:")
print(" • 75% less memory usage")
print(" • Single file database (easy backup)")
print(" • Faster startup times")
print(" • Better for <100K memories")
async def main():
"""Main test function."""
success = await test_sqlite_vec_basic()
if success:
await show_next_steps()
return 0
else:
print("\n❌ sqlite-vec test failed. Please install sqlite-vec:")
print(" pip install sqlite-vec")
return 1
if __name__ == "__main__":
sys.exit(asyncio.run(main()))