A weekend vibe coding project for chatting with your recipes using local LLMs.
CookWise is a recipe OCR and RAG system that lets you upload recipe images/PDFs and have natural conversations with them using local AI models. Built with a focus on privacy and local processing.
- OCR Processing: Extract text from recipe images and PDFs
- Vector Storage: Store recipe embeddings for semantic search
- AI Chat: Ask questions about your recipes using local LLMs (Ollama)
- Web Interface: Clean Streamlit UI for easy interaction
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β Recipe Files β β OCR Pipeline β β Vector Store β
β (Images/PDFs) βββββΆβ (Text Extract) βββββΆβ (ChromaDB) β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β User Query β β RAG System β β Local LLM β
β (Web Interface)ββββββ (Retrieval) ββββββ (Ollama) β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Streamlit Web App β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β Upload β β Chat β β Recipe Info β β
β β Section β β Section β β Section β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Core Processing β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β OCR β β Text β β Vector β β
β β Processor ββββΆβ Chunker ββββΆβ Store β β
β β β β β β β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β β β
β βΌ βΌ β
β βββββββββββββββ βββββββββββββββ β
β β Image β β Recipe β β
β β Processor β β Retriever β β
β βββββββββββββββ βββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI Layer β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β LLM β β Context β β Response β β
β β Client ββββΆβ Formatter ββββΆβ Generator β β
β β (Ollama) β β β β β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
1. Upload Recipe
βββββββββββββββ
β Recipe File β
β (Image/PDF) β
βββββββββββββββ
β
βΌ
βββββββββββββββ
β OCR Extract β
β Text β
βββββββββββββββ
β
βΌ
βββββββββββββββ
β Text Chunk β
β (800 chars) β
βββββββββββββββ
β
βΌ
βββββββββββββββ
β Vector DB β
β (ChromaDB) β
βββββββββββββββ
2. Chat with Recipe
βββββββββββββββ
β User Query β
βββββββββββββββ
β
βΌ
βββββββββββββββ
β Semantic β
β Search β
βββββββββββββββ
β
βΌ
βββββββββββββββ
β Context + β
β Query β
βββββββββββββββ
β
βΌ
βββββββββββββββ
β Local LLM β
β (Mistral) β
βββββββββββββββ
β
βΌ
βββββββββββββββ
β AI Response β
βββββββββββββββ
- Python 3.11+
- Poetry (for dependency management)
- Ollama (for local LLMs)
- Tesseract (for OCR)
-
Clone and setup:
git clone <your-repo> cd cookwise poetry install
-
Install Ollama:
# macOS brew install ollama # Start Ollama ollama serve # Pull model ollama pull mistral:7b-instruct
-
Install Tesseract:
# macOS brew install tesseract -
Run the app:
streamlit run app/main.py
- Python 3.11 - Main language
- Streamlit - Web interface
- Poetry - Dependency management
- Loguru - Logging
- Tesseract - OCR engine
- PyPDF2 - PDF text extraction
- Pillow - Image processing
- pdf2image - PDF to image conversion
- Ollama - Local LLM server
- Mistral 7B Instruct - Language model
- Sentence Transformers - Text embeddings
- ChromaDB - Vector database
- Ruff - Code formatting & linting
- Pytest - Testing
- Black - Code formatting
cookwise/
βββ app/ # Streamlit web application
β βββ main.py # Main app entry point
β βββ ui/ # UI components
βββ cookwise/ # Core library
β βββ ocr/ # OCR processing
β β βββ image_processor.py
β β βββ pdf_processor.py
β βββ embeddings/ # Text processing & storage
β β βββ text_chunker.py
β β βββ vector_store.py
β βββ rag/ # RAG system
β β βββ retriever.py
β β βββ llm_client.py
β βββ utils/ # Utilities
β βββ file_utils.py
βββ data/ # Data storage
βββ tests/ # Test files
βββ pyproject.toml # Poetry configuration
βββ README.md # This file
- Image Support: JPG, PNG, TIFF, BMP
- PDF Support: Direct text extraction + OCR fallback
- Multi-page: Handles multi-page documents
- Error Handling: Graceful fallbacks for different formats
- Context-Aware: Uses retrieved recipe context
- Local Processing: No data sent to external APIs
- Multiple Models: Support for any Ollama model
- Conversation History: Maintains chat context
- Semantic Search: Find recipes by meaning, not just keywords
- Metadata Storage: File info, chunk indexing
- Scalable: ChromaDB handles large recipe collections
Environment variables (optional, all have defaults):
# Ollama Configuration
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=mistral:7b-instruct
# Vector Store Configuration
VECTOR_STORE_PATH=./data/vector_store
EMBEDDING_MODEL=all-MiniLM-L6-v2
# OCR Configuration
TESSERACT_CMD=/usr/local/bin/tesseractBuilt with β€οΈ during a weekend vibe coding session