cmsc_319_final_project/README.md

2.4 KiB

CMSC 319-001: Software Engineering Concepts Final Project - Steven McCaw

  • Ollama + Cloudflare + Obsidian BMO Chatbot

  • A self-hosted AI server running Ollama, tunneled through Cloudflare, and connected to Obsidian via the BMO Chatbot plugin.


What It Is

  • This system is an Obsidian plugin that integrates with the self hosted Ollama REST API to assist users in writing, organizing, summarizing, and generating notes. The system enables secure API communication using a Cloudflared tunnel, and maintains a structured local database within Obsidian for storing AI generated data and metadata. The goal of the system is to enhance productivity while maintaining strong security standards.

How It Works

Obsidian BMO Plugin → Cloudflare Tunnel → Ollama

Your prompts go from Obsidian through a secure Cloudflare tunnel to Ollama running on your local machine. No cloud AI provider needed.


Dependencies

Tool Purpose
Ollama Runs the local AI model
cloudflared Exposes Ollama over a public HTTPS URL
Obsidian Note-taking app
BMO Chatbot Plugin Connects Obsidian to the Ollama API

Setup

1. Start Ollama

ollama pull llama3.1
ollama serve

2. Create a Cloudflare Tunnel

cloudflared tunnel login
cloudflared tunnel create ollama-tunnel

Edit ~/.cloudflared/config.yml:

tunnel: <YOUR_TUNNEL_ID>
credentials-file: /home/<USER>/.cloudflared/<YOUR_TUNNEL_ID>.json

ingress:
  - hostname: ai.yourdomain.com
  - service: http://localhost:11434
  - service: http_status:404
cloudflared tunnel route dns ollama-tunnel ollama.yourdomain.com
cloudflared tunnel run ollama-tunnel

3. Configure BMO Plugin

  1. Obsidian → Settings → Community Plugins → install BMO Chatbot
  2. Set REST API URL to https://ai-api.fortis-scientia.com
  3. Set Model to llama3.1
  4. Leave API Key blank

Project Structure

|
├── README.md
├── config/
│   └── cloudflared-config.yml
├── docs/
│   ├── part1
│   │   ├── 01-requirements.docx
│   │   └── CMSC_319-API_project_diagram.png
│   └── part2
│       └── architecture.docx
└── requirements.md