Spaces:
Sleeping
Sleeping
| title: fabric_to_espanso | |
| app_file: gradio_app_query_only.py | |
| sdk: gradio | |
| sdk_version: 5.12.0 | |
| # Fabric to Espanso Converter | |
| A Python application that bridges Fabric prompts with Espanso and Obsidian Textgenerator by managing and converting prompts through a vector database. It enables semantic search and efficient management of prompts while providing a modern web interface for easy interaction. | |
| There's also a seperate gradio app that can be hosted on Hugging Face Spaces to provide a query-only interface. | |
| ## Features | |
| - **Vector Database Integration**: Store and manage Fabric prompts in a Qdrant vector database with semantic search capabilities | |
| - **Automated Conversion**: Convert stored prompts into Espanso YAML format for system-wide usage | |
| - **Change Detection**: Automatically detect and process changes in the Fabric patterns folder | |
| - **Web Interface**: Modern Gradio-based interface for easy prompt searching and management | |
| - **Semantic Search**: Find relevant prompts based on their meaning, not just exact matches | |
| - **Clipboard Integration**: Quick copying of prompts directly to clipboard | |
| - **Logging System**: Comprehensive logging for tracking operations and debugging | |
| ## Prerequisites | |
| - Python 3.11 or higher | |
| - Fabric (https://github.com/danielmiessler/fabric) | |
| - Qdrant vector database (local or cloud instance) | |
| - Obsidian with TextGenerator plugin (https://github.com/obsidianmd/obsidian-textgenerator) | |
| - Linux/WSL2 or Windows with WSL2 | |
| ## Installation | |
| 1. **Environment Setup**: | |
| ```bash | |
| # Clone the repository | |
| git clone [repository-url] | |
| cd fabric_to_espanso | |
| # Install PDM if not already installed | |
| pip install pdm | |
| # Install dependencies | |
| pdm install | |
| ``` | |
| 2. **Configuration**: | |
| - Copy `.env.example` to `.env` | |
| - Set your Qdrant API key in `.env`: | |
| ``` | |
| QDRANT_API_KEY=your_api_key_here | |
| ``` | |
| 3. **Obsidian Setup**: | |
| - Install Obsidian and the TextGenerator plugin | |
| - Create the folder structure: | |
| ``` | |
| Extra/ | |
| βββ FabricPatterns/ | |
| βββ Official/ # Official Fabric patterns | |
| βββ Own/ # Custom patterns | |
| ``` | |
| 4. **Fabric Setup**: | |
| - Install Fabric, see https://github.com/danielmiessler/fabric | |
| 5. **QDRANT Setup**: | |
| - Install Qdrant, see https://qdrant.io/en/ | |
| - Start Qdrant server | |
| 6. **Parameters**: | |
| - Set all the parameters in the file `parameters.py`. | |
| 7. **Optional**: | |
| - Create a Powershell script to run the Streamlit app | |
| ## Usage | |
| ### Starting the Application | |
| #### Linux/WSL2 | |
| ```bash | |
| # Start the Gradio interface | |
| python gradio_app_query_only.py | |
| ``` | |
| #### Windows (with WSL2) | |
| ```powershell | |
| # Use the provided PowerShell script | |
| ./start_app.ps1 | |
| ``` | |
| ### Core Operations | |
| 1. **Search Prompts**: | |
| - Enter your search query in the search box | |
| - Results are ranked by semantic similarity | |
| - Click on a result to view its contents | |
| 2. **Copy Prompts**: | |
| - Select a prompt from the results | |
| - Click "Copy to Clipboard" to copy the prompt text | |
| 3. **Update Database**: | |
| - Run `python main.py` to process changes in the Fabric patterns folder | |
| - New and modified prompts are automatically added to the database | |
| - Deleted prompts are removed from the database | |
| ## Project Structure | |
| ``` | |
| fabric_to_espanso/ | |
| βββ src/ | |
| β βββ fabrics_processor/ # Core processing logic | |
| β βββ search_qdrant/ # Search functionality | |
| βββ gradio_app_query_only.py # Web interface | |
| βββ main.py # CLI entry point | |
| βββ parameters.py # Configuration parameters | |
| ``` | |
| ## Dependencies | |
| Core dependencies are managed through PDM: | |
| - gradio >= 5.12.0 | |
| - qdrant-client >= 1.12.1 | |
| - fastembed >= 0.4.2 | |
| - python-dotenv | |
| - pyperclip >= 1.9.0 | |
| - pyyaml >= 6.0.2 | |
| - regex >= 2024.11.6 | |
| ## TODO | |
| The following items need to be addressed to improve code quality, maintainability, and functionality: | |
| ### Database Optimization | |
| - Check the database for any points with exactly the same vector or nearly the same. Remove those to reduce redundancy and improve search efficiency. | |
| ### Metadata Enhancement | |
| - If available, use the readme.md file from the fabrics folder to fill the "purpose" field in the database entries. | |
| - If readme.md is not available in the fabrics folder, create the "purpose" field from an LLM response that summarizes the goal of the fabric file. | |
| ### UI/UX Improvements | |
| - Add a compare interface to the gradio app to allow side-by-side comparison of prompts. | |
| - Remove the streamlit_only_query app as it's being replaced by the gradio interface. | |
| ### Code Refactoring | |
| - Implement proper error handling for database operations. | |
| - Add comprehensive logging throughout the application. | |
| - Create unit tests for core functionality. | |
| - Implement type hints consistently across all Python files. | |
| - Add input validation for all user-provided data. | |
| - Refactor the database operations into a dedicated class. | |
| - Implement connection pooling for better database performance. | |
| - Add docstrings to all functions and classes. | |
| - Create a configuration class to handle all settings. | |
| - Add proper cleanup of resources in error cases. | |
| ### Documentation | |
| - Add API documentation for all public interfaces. | |
| - Include examples for common use cases. | |
| - Document the database schema and vector space organization. | |
| - Add contribution guidelines. | |
| - Include troubleshooting section. | |
| ### Security | |
| - Implement proper environment variable handling. | |
| - Add input sanitization for all user inputs. | |
| - Implement rate limiting for the web interface. | |
| - Add proper authentication for the web interface. | |
| ### Performance | |
| - Implement caching for frequently accessed prompts. | |
| - Optimize vector similarity search parameters. | |
| - Add batch processing for large-scale operations. | |
| ## License | |
| This project is licensed under the MIT License. | |