Note: This project is experimental and primarily a hobby endeavor.
obsidian-assist
aims to make Zettelkasten-style note-taking the foundation of interactions with Large Language Models (LLMs). By using an Obsidian vault as the backend, users retain full control over the relationships between notes, enabling them to explicitly define, edit, and guide context-building for LLM responses.
Obsidian is often used as a "second brain"—this tool aspires to be a way to interact with that second brain, allowing for intelligent and personalized dialogue grounded in the user’s own knowledge graph.
This tool supports two primary use cases:
Automatically convert PDFs, PowerPoint presentations, and Markdown files into structured, connected notes within Obsidian. This process leverages Docling and Large Language Models (LLMs):
- Docling is used to convert PDFs and PPTs into Markdown format.
- The resulting Markdown files are then segmented and analyzed using LLMs and Vector Databases.
- Each segment is transformed into an individual, interlinked note to support a connected note-taking workflow in Obsidian.
Interact with and analyze the contents of an Obsidian vault through two distinct methods:
-
Cosine Similarity Search
A generic semantic search method using cosine distance to retrieve contextually relevant notes. -
Graph-Based Contextual Search
Utilizes user-defined relationships (graph edges) between notes to build contextual understanding. This method offers three interaction modes:-
Auto Node Traversal
Start chatting directly — the system identifies the most relevant node to your query and traverses its neighboring nodes to build context. -
Fixed Start Node
Specify a starting node — responses are centered around this predefined note. -
Start-to-End Path Search
Specify both a start and end node — the shortest path between them is used to build the context for the response.
-
- Ollama
- Gemini
- Huggingface
CHROMA_DB_PATH=/app/ChromaDB
HF_TOKEN=your_actual_token
markdown_chunk_collection_vdb=md_chunk_vdb
markdown_notes_collection_vdb=md_notes_vdb
GEMINI_KEY=your_gemini_api_key
OLLAMA_HOST=http://host.docker.internal:11434
NVIDIA_VISIBLE_DEVICES=all
NVIDIA_DRIVER_CAPABILITIES=compute,utility
Make sure you have the NVIDIA Container Toolkit installed on your host machine. You can verify this by checking if the nvidia-smi
command works in your terminal.
### build:
docker compose build --no-cache
### start:
docker compose up
### build:
docker compose -f docker-compose.cpu.yml build --no-cache
### start:
docker compose -f docker-compose.cpu.yml up
${HOME:-/home}/Downloads:/home/Downloads
For windows, the image is mounted to the Downloads folder
${USERPROFILE:-C:\Users}/Downloads:/windows/Downloads
You provide the source file like
/windows/Downloads/some.md OR some.pdf OR some.pptx
Or you can provide a directory full of PDFs/PPTs/MDs
/windows/Downloads/some_dir
Your vault path would be like
/windows/Downloads/obsidian__vault_dir
${HOME}/Downloads:/mac/Downloads
Make sure to set the environment variables.
Create an environment
$ conda create -n obsdidian python=3.11
Install requirements.txt
$ conda activate obsdidian
$ pip install --no-cache-dir --no-deps -r requirements.txt
Run the app
$ python app.py