No description
  • Python 85%
  • Just 10.6%
  • Jinja 2.9%
  • Shell 0.8%
  • Dockerfile 0.4%
  • Other 0.3%
Find a file
2026-05-21 23:16:22 +02:00
audio Implement model unloading in ModelManager to free memory resources 2026-04-28 18:38:38 +02:00
code-server Update .gitignore, Dockerfile, docker-compose.yaml, and set-zsh.sh 2026-04-27 23:20:34 +02:00
glances Add restart command 2026-04-16 20:28:27 +02:00
homebrew Replace logdy with ttyd, tmux and lnav 2026-04-20 21:31:27 +02:00
llamactl Update llamactl 2026-04-29 21:54:11 +02:00
logview Replace logdy with ttyd, tmux and lnav 2026-04-20 21:31:27 +02:00
mikoshi Rework workout tool and agent 2026-05-21 23:16:22 +02:00
nginx Add connection close header to nginx auth proxy 2026-04-17 15:07:47 +02:00
qdrant Add restart command 2026-04-16 20:28:27 +02:00
.gitignore Update .gitignore, Dockerfile, docker-compose.yaml, and set-zsh.sh 2026-04-27 23:20:34 +02:00
AGENTS.md Rename to mikoshi 2026-04-17 22:59:31 +02:00
justfile Deploy code server 2026-04-22 22:58:27 +02:00
LICENSE Create LICENSE 2025-10-06 13:10:41 +02:00
README.md Replace logdy with ttyd, tmux and lnav 2026-04-20 21:31:27 +02:00

Homelab

Local AI services (LLM inference, chat, audio) and infrastructure on Mac Mini M4 Pro.

Services

Service Runtime Purpose
llamactl launchd LLM model management / routing (llama.cpp, MLX, vLLM)
mikoshi Docker (Colima) Chat UI with tools and skills
glances launchd System monitoring dashboard
logview launchd Log viewer UI (ttyd + tmux + lnav)
audio launchd OpenAI-compatible STT + TTS API

Nginx reverse-proxies all services with optional authentication. Audio is internal only.

Setup

Install all system dependencies:

cd homebrew
brew bundle install

Secrets go in .env files (gitignored). Never commit them. Python projects use uv with pyproject.toml.

Llamactl

Llamactl provides unified management and routing for llama.cpp, MLX and vLLM models with web dashboard. Config is generated from config.template.yaml via setup.sh (uses envsubst).

cd llamactl
./setup.sh    # Initial setup (generates config from template)
./start.sh    # Start service
./stop.sh     # Stop service

Mikoshi

A flexible chat client with Web UI that integrates multiple AI providers, tools, and agent frameworks through a unified plugin architecture.

cd mikoshi
docker compose up -d --build   # Build and start
docker compose down            # Stop

Plugins live in mikoshi/plugins/ and are volume-mounted into the container:

plugins/
  tools/<name>/     # Toolset plugin (extends ToolSetHandler, auto-discovered on startup)
  skills/<name>/    # Agent skill (SKILL.md, auto-discovered on startup)

Mikoshi connects to the audio service via host.docker.internal:9100.

Audio Service

OpenAI-compatible audio API using mlx-audio. Models are lazy-loaded and auto-unloaded after 60 minutes of inactivity.

Endpoint Method Description
/v1/audio/transcriptions POST STT via Whisper (mlx-community/whisper-large-v3-turbo-asr-fp16)
/v1/audio/speech POST TTS via Chatterbox (mlx-community/chatterbox-fp16, 23 languages)
cd audio
./start.sh    # Start service
./stop.sh     # Stop service

Test scripts: test_stt.py (file → transcript) and test_tts.py (text/file → WAV, supports -l for language).

Proxy

Nginx reverse proxy with optional Authelia authentication. Routes are declared in nginx/config.yaml and rendered via nginx/setup.py (Jinja2 template).

python nginx/setup.py          # Regenerate config, test, and reload Nginx
brew services stop nginx       # Stop Nginx

Monitoring

Real-time system monitoring dashboard using Glances. Web-based UI for CPU, memory, disk, and network stats.

cd glances
./start.sh    # Start service
./stop.sh     # Stop service

Logview

Web-based log viewer using ttyd + tmux + lnav. Each service gets its own tmux window with lnav following logs. Accessible on port 9011.

cd logview
./start.sh    # Start service
./stop.sh     # Stop service