fabric_to_espanso / README.md
Hopsakee's picture
Upload folder using huggingface_hub
5b40ec9 verified
---
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.