# AI Integrations

**Last updated:** 2026-03-20

Overview of all AI/LLM integrations across the homelab. The primary GPU inference backend is **Olares** (RTX 5090 Max-Q, 24GB VRAM) running Qwen3-Coder via Ollama.

---

## Primary AI Backend — Olares

| Property | Value |
|----------|-------|
| **Host** | Olares (`192.168.0.145`) |
| **GPU** | RTX 5090 Max-Q (24GB VRAM) |
| **Active model** | `qwen3:32b` (30.5B MoE, Q4_K_M) |
| **Ollama endpoint** | `https://a5be22681.vishinator.olares.com` |
| **OpenAI-compat endpoint** | `https://a5be22681.vishinator.olares.com/v1` |
| **Native Ollama API** | `https://a5be22681.vishinator.olares.com/api/...` |

> Port 11434 is not directly exposed — all access goes through the Olares reverse proxy at the above URL.

### Check active models
```bash
curl -s https://a5be22681.vishinator.olares.com/api/tags | python3 -m json.tool
curl -s https://a5be22681.vishinator.olares.com/api/ps  # currently loaded in VRAM
```

### Switch models
See `docs/services/individual/olares.md` for scaling operations.

---

## Services Using Olares AI

| Service | Host | Feature | Config |
|---------|------|---------|--------|
| **AnythingLLM** | Atlantis | RAG document assistant | `LLM_PROVIDER=generic-openai`, `GENERIC_OPEN_AI_BASE_PATH=https://a5be22681.vishinator.olares.com/v1`, model=`qwen3:32b` |
| **Perplexica** | homelab-vm | AI-powered search engine | `OLLAMA_BASE_URL=https://a5be22681.vishinator.olares.com`, model set via UI |
| **Reactive Resume v5** | Calypso | AI resume writing assistance | `OPENAI_BASE_URL=https://a5be22681.vishinator.olares.com/v1`, model=`qwen3:32b` |
| **OpenCode (homelab-vm)** | homelab-vm | Coding agent | `~/.config/opencode/opencode.json` → Olares Ollama, model=`qwen3:32b` |
| **OpenCode (moon)** | moon | Coding agent | `/home/moon/.config/opencode/opencode.json` → Olares Ollama, model=`qwen3:32b` (was: vLLM `qwen3-30b` — migrated 2026-03-20) |

### Perplexica config persistence
Perplexica stores its provider config in a Docker volume at `/home/perplexica/data/config.json`. The `OLLAMA_BASE_URL` env var sets the default but the UI/DB config takes precedence. The current config is set to `olares-ollama` provider with `qwen3:32b`.

To reset if the config gets corrupted:
```bash
docker exec perplexica cat /home/perplexica/data/config.json
# Edit and update as needed, then restart
docker restart perplexica
```

---

## Services Using Other AI Backends

| Service | Host | Backend | Notes |
|---------|------|---------|-------|
| **OpenHands** | homelab-vm | Anthropic Claude Sonnet 4 (cloud) | `LLM_MODEL=anthropic/claude-sonnet-4-20250514` — kept on Claude as it's significantly better for agentic coding than local models |
| **Paperless-AI** | Calypso | LM Studio on Shinku (`100.98.93.15:1234`) via Tailscale | Auto-tags/classifies Paperless documents. Model: `llama-3.2-3b-instruct`. Could be switched to Olares for better quality. |
| **Hoarder** | homelab-vm | OpenAI cloud API (`sk-proj-...`) | AI bookmark tagging/summarization. Could be switched to Olares to save cost. |
| **Home Assistant Voice** | Concord NUC | Local Whisper `tiny-int8` + Piper TTS | Voice command pipeline — fully local, no GPU needed |
| **Ollama + Open WebUI** | Atlantis | ROCm GPU (`phi3:mini`, `gemma:2b`) | Separate Ollama instance for Atlantis-local use |
| **LlamaGPT** | Atlantis | llama.cpp (`Nous-Hermes-Llama-2-7B`) | Legacy — likely unused |
| **Reactive Resume (bundled)** | Calypso | Bundled Ollama `Resume-OLLAMA-V5` (`llama3.2:3b`) | Still running but app is now pointed at Olares |
| **Ollama + vLLM** | Seattle VPS | CPU-only (`llama3.2:3b`, `Qwen2.5-1.5B`) | CPU inference, used previously by Perplexica |
| **OpenHands (MSI laptop)** | Edge device | LM Studio (`devstral-small-2507`) | Ad-hoc run config, not a managed stack |

---

## Candidates to Migrate to Olares

| Service | Effort | Benefit |
|---------|--------|---------|
| **Paperless-AI** | Low — change `CUSTOM_BASE_URL` in compose | Better model (30B vs 3B) for document classification |
| **Hoarder** | Low — add `OPENAI_BASE_URL` env var | Eliminates cloud API cost |

---

## Olares Endpoint Reference

| Protocol | URL | Use for |
|----------|-----|---------|
| OpenAI-compat (Ollama) | `https://a5be22681.vishinator.olares.com/v1` | Services expecting OpenAI API format — **primary endpoint** |
| Native Ollama | `https://a5be22681.vishinator.olares.com` | Services with native Ollama support |
| Models list | `https://a5be22681.vishinator.olares.com/api/tags` | Check available models |
| Active models | `https://a5be22681.vishinator.olares.com/api/ps` | Check VRAM usage |
| vLLM (legacy) | `https://04521407.vishinator.olares.com/v1` | vLLM inference — available but not currently used |

> **Note:** Only one large model should be loaded at a time (24GB VRAM limit). If inference is slow or failing, check `api/ps` — another model may be occupying VRAM.

### OpenCode per-host config

OpenCode config lives at `~/.config/opencode/opencode.json` on each machine. All instances use Olares Ollama:

```json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "olares": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Olares Ollama (Qwen3-Coder)",
      "options": {
        "baseURL": "https://a5be22681.vishinator.olares.com/v1"
      },
      "models": {
        "qwen3:32b": {
          "name": "Qwen3 Coder 30.5B Q4_K_M",
          "limit": { "context": 40000, "output": 8192 }
        }
      }
    }
  },
  "model": "olares/qwen3:32b"
}
```

Config locations:
- **homelab-vm**: `/home/homelab/.config/opencode/opencode.json`
- **moon**: `/home/moon/.config/opencode/opencode.json` (migrated from vLLM 2026-03-20)
