# Ollama はshadowで稼働・arcanaからTailscale経由で利用

## 事実
- 2026-04-19: Ollamaはshadowで稼働、arcanaには未インストール(構成上そのまま)
- shadow側設定: `/etc/systemd/system/ollama.service.d/override.conf` で `Environment="OLLAMA_HOST=0.0.0.0:11434"` 指定しLAN公開
- arcana側: `tools/embed_videos.py` / `tools/semantic_alert.py` の `OLLAMA_URL` は `http://shadow:11434/api/embeddings` を使用
- pull済みモデル: `gemma3:1b` (999M, fallback用), `gemma3:4b` (4.3B, メモリ不足で起動不可のことあり), `nomic-embed-text` (768次元)
- cron は復活済み(`embed_videos`毎4時間、`semantic_alert`毎4時間)
- **2026-04-19 追加**: `lib/llm_client.py` に shadow Ollama フォールバック実装(NVIDIA全モデル失敗時に gemma3:1b へ自動切替)
- `vvv-bots/.env` と `vvv/.env` に `OLLAMA_HOST=shadow:11434` / `OLLAMA_FALLBACK_MODEL=gemma3:1b` 設定済み
- **shadow の RAM 制約**: gemma3:4b は 4GiB 必要だが shadow は 3.7GiB のためロード不可。フォールバックは **gemma3:1b 必須**

**Why:** arcana側ではOllamaを動かさない運用方針。LLM推論はshadow集中・arcanaは収集/API/ダッシュボード担当の分離アーキテクチャ。

**How to apply:**
- 新規スクリプトで embedding/LLM 推論が必要 → `http://shadow:11434` を使う(`localhost:11434` は不可)
- shadow側でモデル追加が必要 → `ssh shadow "ollama pull "`
- shadow接続不可時はTailscale経路障害を疑う(`tailscale ping -c 1 shadow`)
- `tagger.py` / `manage.py` にも旧 `localhost:11434` 参照が残るがフォールバック用(`--engine ollama` 指定時のみ動作)、使用時は同様に書き換え要