- Add comprehensive AI plans implementation documentation - Add LiteLLM gateway Kubernetes manifests - Update PostgreSQL and Forgejo deployment configs - Add build-from-binaries script
186 lines
7.3 KiB
Markdown
186 lines
7.3 KiB
Markdown
# Project Status Summary - Nxtgauge Infrastructure
|
|
|
|
## Last Updated
|
|
2026-06-15
|
|
|
|
---
|
|
|
|
## What Has Been Completed
|
|
|
|
### 1. LiteLLM AI Gateway Deployment ✅
|
|
- **Status**: Fully deployed and working
|
|
- **Namespace**: `nxtgauge-ai`
|
|
- **Service**: `litellm.nxtgauge-ai.svc.cluster.local:4000`
|
|
- **Ingress**: `https://llm.nxtgauge.com` (TLS via cert-manager)
|
|
- **Models configured**:
|
|
- `askash-fast` → `qwen3:4b` (fast, 2.5GB)
|
|
- `askash-main` → `qwen3:8b` (powerful, 5.2GB)
|
|
- Plus 10 specialized model aliases for different use cases
|
|
- **Security**: API key required via `LITELLM_MASTER_KEY`
|
|
- **Ollama**: Remains internal-only, NOT exposed publicly
|
|
- **Files created**:
|
|
- `apps/litellm/base/configmap.yaml`
|
|
- `apps/litellm/base/deployment.yaml`
|
|
- `apps/litellm/base/service.yaml`
|
|
- `apps/litellm/base/ingress.yaml`
|
|
- `apps/litellm/base/secret.yaml`
|
|
- `apps/litellm/base/ratelimit.yaml`
|
|
- `apps/litellm/base/kustomization.yaml`
|
|
- `apps/litellm/README.md`
|
|
- `apps/litellm/OPENCODE_CONNECT.md`
|
|
|
|
### 2. Kubernetes Cluster Expansion ✅
|
|
- Added 4th worker node: **nxtgauge-4 / Ramaris** (89.167.0.148)
|
|
- All nodes labeled with character names:
|
|
- `nxtgauge-1` → **Rimuru** (control plane)
|
|
- `nxtgauge-2` → **Veldora** (worker)
|
|
- `nxtgauge-3` → **Diablo** (worker)
|
|
- `nxtgauge-4` → **Ramaris** (worker)
|
|
- All nodes Ready and schedulable
|
|
|
|
### 3. GHCR Registry Authentication ✅
|
|
- Created `ghcr-regcred` secret in `nxtgauge` and `nxtgauge-ai` namespaces
|
|
- Updated `registries.yaml` on all K3s nodes to authenticate with GHCR
|
|
- Restarted K3s services on all nodes
|
|
- All deployments now pulling images successfully from GitHub Container Registry
|
|
|
|
### 4. Latest Code Deployed via GitHub Actions + Flux ✅
|
|
All four repositories are live with their latest commits:
|
|
|
|
| Repository | Branch | Commit | Status |
|
|
|------------|--------|--------|--------|
|
|
| nxtgauge-frontend-solid | high-performance | `3b8f75d` feat: add AI usage widget to user dashboard | ✅ Deployed |
|
|
| nxtgauge-admin-solid | high-performance | `f511a3c` feat: add AI management page to admin panel | ✅ Deployed |
|
|
| nxtgauge-ai-assistant | main | `4505d89` feat: add Ask Ash AI assistant implementation | ✅ Deployed |
|
|
| nxtgauge-backend-rust | high-performance | `ba63736` feat: add AI management endpoints and LiteLLM support | ✅ Deployed |
|
|
|
|
- Flux synced to latest gitops commit `c5b32538`
|
|
- 22/22 deployments ready
|
|
|
|
### 5. Ollama Models Downloaded ✅
|
|
- `gemma3:270m` (291 MB) - original model
|
|
- `qwen3:4b` (2.5 GB) - fast/general use
|
|
- `qwen3:8b` (5.2 GB) - powerful/long-form generation
|
|
|
|
### 6. OpenCode Configuration ✅
|
|
- Updated OpenCode binary from `1.14.20` → `1.17.7`
|
|
- Reverted config back to use **Ollama Cloud** with **Kimi K2.7**
|
|
- Config file: `~/.config/opencode/opencode.jsonc`
|
|
|
|
### 7. AI Plans Implementation Plan ✅
|
|
- Created detailed implementation plan:
|
|
- `docs/AI_PLANS_IMPLEMENTATION_PLAN.md`
|
|
- `docs/AI_PLANS_FINAL_PLAN.md`
|
|
- Plan covers:
|
|
- Database schema
|
|
- Plan tiers (Free/Pro/Business/Enterprise)
|
|
- API key generation
|
|
- Usage tracking
|
|
- Rate limiting
|
|
- Model access control
|
|
- Backend services architecture
|
|
- API endpoints
|
|
- Frontend integration
|
|
- Deployment steps
|
|
|
|
---
|
|
|
|
## What We Are Stuck At / Blocked On
|
|
|
|
### 1. PostgreSQL for LiteLLM (Optional Advanced Tracking)
|
|
- **Status**: Attempted but not critical
|
|
- **Issue**: Tried to deploy PostgreSQL in `nxtgauge-ai` namespace for LiteLLM's built-in virtual key tracking, but it failed to schedule on the new node due to Longhorn CSI driver not being available on `nxtgauge-4`
|
|
- **Impact**: LOW - This is not required. We are building our own API key/usage tracking system instead.
|
|
- **Decision**: Skip LiteLLM-native virtual keys. Use custom backend implementation.
|
|
|
|
### 2. AI Plans Implementation ✅
|
|
- **Status**: Core backend implementation complete
|
|
- **Completed**: Database migration, models, repositories, core services, LiteLLM integration, endpoint wiring, admin endpoints, cron jobs, AI credit packages, auto-apply/auto-request log endpoints
|
|
- **Remaining**: Kubernetes env-var wiring (`AI_CREDIT_ADMIN_TOKEN`), real payment gateway integration, automated integration tests
|
|
- **Next step**: Apply migrations in target environment and configure Kubernetes secrets
|
|
|
|
---
|
|
|
|
## Current System Health
|
|
|
|
| Component | Status |
|
|
|-----------|--------|
|
|
| Kubernetes cluster | ✅ 4 nodes Ready |
|
|
| Flux GitOps | ✅ Synced |
|
|
| All 22 deployments | ✅ Running |
|
|
| LiteLLM gateway | ✅ Running |
|
|
| Ollama | ✅ Running |
|
|
| AI Assistant | ✅ Running |
|
|
| Frontend | ✅ Running |
|
|
| Admin panel | ✅ Running |
|
|
| 19 backend rust services | ✅ Running |
|
|
|
|
---
|
|
|
|
## Decisions Made
|
|
|
|
1. ✅ Using **GitHub Container Registry (GHCR)** instead of `registry.nxtgauge.com`
|
|
2. ✅ Using **GitHub Actions + Flux** instead of Forgejo/Gitea
|
|
3. ✅ Using **custom API key/usage tracking** instead of LiteLLM Enterprise
|
|
4. ✅ Using **qwen3:4b** as main fast model and **qwen3:8b** for long-form/power tasks
|
|
5. ✅ Keeping **Ollama internal-only**, exposing only LiteLLM
|
|
6. ✅ OpenCode using **Ollama Cloud Kimi K2.7**
|
|
|
|
---
|
|
|
|
## Next Recommended Actions
|
|
|
|
1. **Run database migrations** for AI plans and credit packages (`cargo run -p db-migrate` or `sqlx migrate run`)
|
|
2. **Configure `AI_CREDIT_ADMIN_TOKEN`** secret for payments service to credit AI credits via users admin endpoint
|
|
3. **Add `LITELLM_BASE_URL` env var** for users service (default already points to cluster local service)
|
|
4. **Credit purchase flow** — integrate real payment gateway with `/api/admin/ai/users/{id}/credits`
|
|
5. **Add monitoring/alerting** for AI usage and credit thresholds
|
|
|
|
---
|
|
|
|
## Key Files and Commands
|
|
|
|
### Useful Commands
|
|
```bash
|
|
# Check cluster nodes
|
|
kubectl get nodes -o custom-columns='NAME:.metadata.name,CHARACTER:.metadata.labels.node-name,ROLE:.metadata.labels.node-role\.kubernetes\.io/worker,STATUS:.status.conditions[-1].type,IP:.status.addresses[0].address'
|
|
|
|
# Check deployments
|
|
kubectl get deployments -n nxtgauge
|
|
|
|
# Check AI namespace
|
|
kubectl get pods -n nxtgauge-ai
|
|
|
|
# Check LiteLLM models
|
|
curl http://litellm.nxtgauge-ai.svc.cluster.local:4000/v1/models \
|
|
-H "Authorization: Bearer sk-litellm-prod-1c66d63e701c32cd85922a62fd2e087469486a9b7a34d950423a8726d0aceec9"
|
|
|
|
# Check Flux status
|
|
flux get kustomizations --all-namespaces
|
|
|
|
# Get LiteLLM master key
|
|
kubectl get secret litellm-secrets -n nxtgauge-ai -o jsonpath='{.data.LITELLM_MASTER_KEY}' | base64 -d
|
|
```
|
|
|
|
### Important Paths
|
|
- GitOps repo: `/home/ashwin/nxtgauge-gitops`
|
|
- Frontend repo: `/home/ashwin/nxtgauge-projects/nxtgauge-frontend-solid`
|
|
- Backend repo: `/home/ashwin/nxtgauge-projects/nxtgauge-backend-rust`
|
|
- Admin repo: `/home/ashwin/nxtgauge-projects/nxtgauge-admin-solid`
|
|
- AI Assistant repo: `/home/ashwin/nxtgauge-projects/nxtgauge-ai-assistant`
|
|
- AI plans plan: `/home/ashwin/nxtgauge-gitops/docs/AI_PLANS_FINAL_IMPLEMENTATION.md`
|
|
|
|
---
|
|
|
|
## Blockers Requiring User Input
|
|
|
|
None currently. Core AI plans implementation is complete on the backend.
|
|
|
|
---
|
|
|
|
## Notes
|
|
|
|
- The PostgreSQL deployment attempt left a `postgres-pvc` in `nxtgauge-ai` namespace. It can be cleaned up safely since we are not using it.
|
|
- No git commits have been made during recent infrastructure changes unless explicitly requested.
|
|
- All changes were applied directly to Kubernetes and config files.
|
|
- Local `.opencode` plugin was updated, but OpenCode binary upgrade was done via built-in `opencode upgrade` command.
|