- Fix bug where networkx import failure caused NameError
- Add stub nx class for type hints when networkx unavailable
- Document comprehensive testing status and dependency issues
- Python 3.14 too new (no tree-sitter-languages wheels)
- Python 3.13 requires build from source (Cython needed)
- Recommend Python 3.11 for immediate testing
Testing results:
✅ Module architecture verified
✅ Mock data test passes
✅ NetworkX integration works
⏸️ Awaiting tree-sitter-languages installation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Changed:
- Added exception to .gitignore for app/db/schema.sqlite
- The schema file is required for database initialization
- Other *.sqlite files are still ignored (databases)
- CI now has access to the schema needed for testing
The schema.sqlite file defines the database structure and should
be version controlled. Only actual database files (data/*.db) are
ignored.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
Replace PostgreSQL with SQLite for testing and add comprehensive test fixtures.
Update core configuration with missing attributes and getter methods.
Improve regex patterns in conversation watcher for accurate trigger detection.
Add __str__ method to AgentOSContentType enum for better string representation.
Changes:
- Rewrite conftest.py to use SQLite instead of PostgreSQL
- Add CONFIG attributes: EMBEDDING_MODEL, LLM_MODEL, MAX_CONTEXT_LENGTH, etc.
- Add getter methods with environment variable support and validation
- Implement ConfigMeta metaclass to prevent configuration modification
- Fix conversation_watcher trigger patterns with improved lookahead assertions
- Add __str__ method to AgentOSContentType enum
- Update health.py with backwards-compatible function naming
- Add test files: test_config.py, test_agent_os.py, test_conversation_watcher.py, test_health.py
All changes are backwards compatible and verified safe for production.
Test suite now has 92+ passing tests with proper SQLite integration.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
Replace generic 'Retrieved N documents' message with actual answer synthesis
from the top 3 documents when LLM synthesis fails. Extracts:
- Document previews (first 300 chars)
- Document filenames from metadata
- Creates readable answer format
This ensures users get useful information even when LLM synthesis encounters errors.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
Wrap synthesizer.synthesize() in try-catch to handle AttributeError gracefully
and fall back to returning raw documents when LLM synthesis fails.
This allows the chat feature to work even when there are Pydantic or llama-index
compatibility issues with TextNode attributes.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
The SimilarityPostprocessor tries to access node.score which isn't supported
in the current llama-index version and causes Pydantic validation errors.
Since we're already getting sorted results from vector similarity search,
disable the postprocessor and use retrieved nodes directly.
This fixes chat and search endpoints.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
TextNode doesn't support a direct score attribute in this version of llama-index.
Instead, store the similarity score in the node's metadata during creation and
retrieve it from metadata during response formatting.
This ensures full compatibility with Pydantic validation and prevents attribute errors.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
Instead of setting node.score after creation (which fails Pydantic validation),
pass the score parameter during TextNode initialization. This ensures the score
field is properly validated during object creation.
This fixes the error: 'Object has no attribute score' in chat and search endpoints.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
The similarity score was being set as a numpy.float32 from SQLite distance calculations.
Pydantic expects Python native float types for the score field, causing validation errors
when querying MCPs or using chat features.
Fix: Convert similarity score to Python float using float() conversion.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
Add comprehensive one-command setup.sh script that handles:
- Prerequisites validation (Python 3, Git)
- Virtual environment creation and dependency installation
- Ollama installation and model download (llama3.1, nomic-embed-text)
- Redis installation and startup
- Directory and database initialization
- Frontend npm dependencies
- Clear progress output and next steps
Fix critical database path issues:
- Use absolute path calculation in config.py to ensure consistency
- Export SQLITE_DB_PATH environment variable in startup scripts
- Prevents database separation between app and MCP server
Fix document metadata field naming:
- Change metadata field from 'source' to 'filename' in MCP ingest
- Ensures consistency with existing document format
- Fixes document visibility issue in API endpoints
Update startup scripts to support environment-based database configuration.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
Features:
- Fixed Ollama configuration for native (localhost) instead of Docker
- Increased LLM timeout from 30s to 120s for quality answers
- Implemented KB slug system for clean MCP endpoint URLs
- Added multiple knowledge base support with type metadata
- Integrated MCP server with FastAPI (port 8051)
- React frontend with KB management UI
- PostgreSQL + pgvector for vector embeddings
Performance:
- 33-56% faster than Docker setup with native Ollama
- Direct Metal GPU acceleration on Apple Silicon
- Optimized RAG engine with caching
- ~40s response time for comprehensive answers
Documentation:
- Complete native setup guide (README_NATIVE_SETUP.md)
- Performance benchmarking and comparison
- MCP endpoint documentation
- Slug implementation details
- Decision rationale for native vs Docker
Cleanup:
- Removed old Streamlit setup files
- Consolidated setup scripts to single setup_native.sh
- Consolidated service management scripts
- Removed test artifacts and old analysis docs
- Ready for sharing with team
🚀 Production-ready for local team deployment
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>