Files
portainer-core/STATUS.md
T
jpmschweitzer e3b451b7b0 feat(ai): complete ADK migration and optimize system health checks
Major architectural changes and improvements:

## ADK Framework Migration (v0.10.0)
- Migrated from LangChain/LangGraph to Google ADK 1.3.0 with LiteLLM 1.80.5
- Improved tool calling reliability with local Ollama models
- Converted all 10 tools to ADK async generator format
- Updated streaming pipeline for ADK event system
- Enhanced error handling and agent initialization

## Model Optimization
- Switched from gemma3:12b (10GB VRAM) to gemma3:4b (4.8GB VRAM)
- Reduced VRAM usage from 91% to 43% (5.4GB freed)
- Optimized for production stability with memory headroom

## Health Check System Overhaul
- Optimized /health/full: 6ms response (was 30s+)
- Added model verification: confirms configured model is available
- New /health/diagnostics endpoint with optional deep testing
- Added currently loaded models tracking
- Clear emoji status indicators (//⚠️)
- Fixed AGENT_AVAILABLE flag export for proper health reporting

## Ollama Client Enhancements
- Added list_models() method for model inventory
- Enhanced model verification in health checks
- Better error handling and reporting

## Documentation Updates
- Updated STATUS.md to v0.10.0-adk-migration
- Comprehensive CHANGELOG.md entry with migration details
- Updated PLANS.md showing Phase 4 complete
- Updated ai-orchestrator-plan.md with ADK status
- Added MIGRATION_PLAN_LANGCHAIN_TO_ADK.md
- Added ADK_Ollama_Research.md with implementation analysis

## Technical Details
- 10 tools: 7 infrastructure + 2 research + 1 response tool
- Framework: Google ADK with UnifiedAgent pattern
- System prompt: v7_adk_best_practice
- Container health: Now passing Docker healthchecks
- Response times: Simple queries ~0.3-1s, Research ~4-7s
2025-11-26 08:36:50 +01:00

210 lines
10 KiB
Markdown

# Project Status
> **Last Updated:** 2025-11-26
> **Version:** 0.10.0-adk-migration
## Current Phase
**Active Work:** AI Infrastructure Optimization & System Hardening
**Status:****STABLE** - ADK Migration Complete, All Systems Operational
See [PLANS.md](PLANS.md) for complete implementation roadmap and [CHANGELOG.md](CHANGELOG.md) for version history.
## In Progress
### Priority 1: Security & SSO Implementation (Authentik)
- [x] **Milestone 1: Authentik Deployment**
- [x] Deploy Authentik server and worker containers
- [x] Configure shared PostgreSQL database (authentik_user, authentik database)
- [x] Configure shared Redis (DB 0)
- [x] Fix health checks (Python urllib instead of wget/curl)
- [x] Create NPM proxy host for auth.schweitz.net
- [x] Generate admin recovery key and set password
- [x] Memory optimization: 563MB total (80-90% reduction vs previous attempt)
- [x] **Milestone 2: Google OAuth Integration**
- [x] Create Google OAuth credentials (Client ID/Secret)
- [x] Configure Authentik Google source via API
- [x] Configure identification stage to show social login
- [x] Test Google OAuth login (successful)
- [x] Verify user creation (jpmschweitzer@gmail.com - external type)
- [x] **Milestone 3: Forward Auth for Organizr** ✅ COMPLETE (2025-11-21)
- [x] Create Authentik Proxy Provider (Organizr Proxy) via API
- [x] Create Authentik Application (Organizr) via API
- [x] ~~Assign provider to embedded outpost~~ (embedded outpost failed)
- [x] **Deploy standalone outpost container** (authentik-proxy on port 9443)
- [x] Configure Redis connection for standalone outpost
- [x] Verify outpost endpoints operational
- [x] **Configure NPM forward auth for home.schweitz.net**
- [x] Test SSO access to Organizr (Google OAuth login working)
- [x] Verify no redirect loops
- [x] Fix Organizr auto-login (moved headers to location / block)
**Resolution:** Embedded outpost has version-specific issues in 2024.8.4. Deployed standalone `authentik-proxy` container successfully. Forward auth fully operational with Organizr auto-login working.
**Standalone Outpost Details:**
- Container: `authentik-proxy` (port 9445:9443)
- Status: ✅ Healthy (websocket connected, ping endpoint responding)
- Memory: ~150MB
- Provider: Organizr Proxy (forward_single mode)
- Token: `9blMGz71CFMJszs7AedQefgydpTnwvybjmMn0AlYilIKBV5LIq7snqnCodwX`
**NPM Configuration:**
- Applied to: home.schweitz.net (Organizr) ONLY
- Forward auth: https://localhost:9445/outpost.goauthentik.io (NPM on host network)
- WebSocket support: Enabled
- Headers: X-authentik-username, X-authentik-email, X-authentik-groups, X-authentik-name, X-authentik-uid
- Status: ✅ Fully operational, tested in incognito
**Critical Fix:** Authentication headers must be set inside `location /` block, not at server level, for proper forwarding to backend applications.
### Priority 2: Core-API Refactoring & Infrastructure Management ✅ COMPLETE
- [x] **Code Cleanup:** Restructure Core API into function-specific controller files
- [x] Create `/controllers` directory structure
- [x] Create `/clients` directory structure
- [x] Create `base.py` controller base class
- [x] Add infrastructure settings to `config.py`
- [x] Create credentials management system
- [x] Update `main.py` routing to include infrastructure controller
- [x] Separate AI Orchestrator logic into `ai_controller.py`
- [x] Extract webscraper to `tools_controller.py`
- [x] Create `health_controller.py` for monitoring endpoints
- [x] **Infrastructure Management Controller:** Build automation API for service management
- [x] Portainer Integration (HTTP client with access token)
- [x] NPM Integration (HTTP client with JWT bearer token + auto-refresh)
- [x] Read/List Endpoints (all implemented & tested)
- [x] Write Endpoints (POST/PUT/DELETE all implemented & tested)
- [x] Portainer API Token generated programmatically
- [ ] Uptime Kuma Integration (deferred - complex Socket.IO)
- [ ] Replace ad-hoc shell scripts in `/stacks` with API endpoints
- [ ] Add CLI wrapper for common operations
### Priority 3: AI Orchestrator Phase 2 (Memory Systems) ✅ COMPLETE
- [x] Implement Tier 1: ConversationBufferMemory (in-memory, last 10 turns)
- [x] Implement Tier 2/3: Unified Qdrant storage (persistent + semantic search)
- [x] Create Qdrant collection (core_api_conversations with 768d nomic-embed-text)
- [x] Implement auto-consolidation service (triggers at 10 turns)
- [x] Add memory persistence across container restarts
- [x] Implement dual-retrieval (buffer + Qdrant)
- [x] **Phase 2.5: Multi-Tenancy** (user_id isolation with default "llm-testuser")
**Implementation Details:**
- **Tier 1 (Buffer):** In-memory storage for last 10 turns (< 1ms access)
- **Tier 2/3 (Qdrant):** Unified persistent storage + semantic search (768d embeddings)
- **Auto-Consolidation:** Automatically moves buffer → Qdrant at 10 turns
- **Multi-Tenancy:** Single collection with user_id filtering (default: "llm-testuser")
- **Embedding Model:** nomic-embed-text (768 dimensions, via Ollama)
- **Memory Retrieval:** Dual-check buffer + Qdrant for cross-restart persistence
- **Status:** 32 points stored, tested with multiple users, recall working after restarts
### Priority 4: AI Orchestrator - Framework Migration ✅ COMPLETE (2025-11-26)
- [x] **Phase 3:** Research Capabilities (DuckDuckGo, web scraping) - COMPLETE (2025-11-24)
- [x] **Framework Migration:** LangChain/LangGraph → Google ADK - COMPLETE (2025-11-26)
- [x] Migrate agent orchestrator to Google ADK with LiteLLM
- [x] Convert all 9 tools to ADK async generator format
- [x] Update streaming pipeline for ADK event format
- [x] Switch model to gemma3:12b with ADK-optimized prompts
- [x] Implement comprehensive agent health checks
- [x] Update requirements.txt (remove langchain*, add google-adk)
- [x] Production testing and validation
**Current Implementation (as of 2025-11-26):**
- **Framework:** Google ADK 1.3.0 with LiteLLM 1.80.5 (migrated from LangChain)
- **Model:** gemma3:12b (upgraded from mistral:7b)
- **System Prompt:** v7_adk_best_practice (optimized for ADK)
- **Total Tool Count:** 9 tools (7 infrastructure + 2 research)
- **Tools Format:** ADK async generators with proper streaming support
- **Architecture:** UnifiedAgent with stateless sessions
**Tools Available:**
- **Infrastructure (7):** get_current_time, list_services, get_service_details, list_stacks, get_stack_details, list_npm_hosts, get_npm_host_details
- **Research (2):** web_search (DuckDuckGo + auto-scrape), web_scrape (targeted extraction)
**Migration Benefits Achieved:**
- ✅ Improved tool calling reliability with Ollama models
- ✅ Better streaming support with ADK event system
- ✅ Model flexibility (works with Gemma, Mistral, Qwen families)
- ✅ Cleaner architecture with unified agent pattern
- ✅ Production-ready health monitoring
**Performance Metrics (Post-Migration):**
- **Simple queries:** ~0.3-1s response time
- **Tool-using queries:** ~2-5s response time
- **Research queries:** ~4-7s response time
- **Tool calling success rate:** Monitoring in progress
- **VRAM usage:** ~8GB with gemma3:12b
**Optional Future Enhancements (deferred):**
- Multi-agent routing patterns (Phase 4+)
- Code specialist agent with codestral (Phase 4+)
- Time-based memory consolidation
- User filtering in Qdrant queries
- User management API endpoints
## Current Blockers
**None** - SSO implementation complete for critical services. Remaining service rollout deferred in favor of other priorities.
## Key Metrics
| Metric | Target | Current | Status |
|--------|--------|---------|--------|
| **Containers Running** | 15+ | 22 | 🟢 All Services Operational |
| **GPU Accessible** | Yes | Yes | 🟢 Working (RTX 2080 Ti) |
| **Storage Used** | <80% | 58% HDD (3.6TB/3.7TB) | 🟢 Healthy |
| **Services Accessible** | All | 21/21 | 🟢 Complete |
| **Remote Access** | Working | Ready | 🟢 Headscale + NPM |
| **Firewall Active** | Yes | Yes | 🟢 UFW Configured |
| **Backups Configured** | Yes | Yes | 🟢 Daily @ 3 AM |
| **AI Orchestrator** | Phase 6 | Phase 4 ✅ | 🟢 ADK Migration Complete |
| **SSO (Authentik)** | Phase 5 | Core Complete ✅ | 🟢 Organizr + Core API Protected |
## Quick Reference
### Documentation
- [Implementation Plans](PLANS.md) - Master plan tracker and roadmap
- [Changelog](CHANGELOG.md) - Version history
- [Container Reference](docs/reference/CONTAINERS.md) - All deployed services
- [System Specifications](docs/reference/SYSTEM.md) - Hardware and software details
- [Agent Guidelines](AGENTS.md) - Development conventions
### Key Paths
- **SSD configs:** `/home/jpmschweitzer/docker-data/`
- **HDD content:** `/mnt/media/`
- **Stacks:** Managed in Portainer web UI
- **Scripts:** `/mnt/media/Projects/portainer-core/scripts/`
### Active Services & URLs
**Infrastructure:**
- **Portainer:** http://192.168.86.149:8080 (container management)
- **Nginx Proxy Manager:** http://192.168.86.149:8000 (reverse proxy admin)
- **Authentik:** https://auth.schweitz.net (SSO identity provider - Google OAuth enabled)
- **Ollama:** http://192.168.86.149:11434 (ML models API)
**Networking:**
- **Headscale:** http://192.168.86.149:8085 (mesh VPN control)
**Monitoring:**
- **Uptime Kuma:** http://192.168.86.149:3001 (service monitoring)
- **Netdata:** http://192.168.86.149:19999 (system metrics)
- **Organizr:** http://192.168.86.149:8084 OR https://home.schweitz.net (unified dashboard)
**Applications:**
- **Open WebUI:** http://192.168.86.149:8081 (LLM chat interface)
- **Core API:** http://192.168.86.149:8083 (infrastructure management & AI orchestration)
- **Jellyfin:** http://192.168.86.149:8096 OR https://media.schweitz.net (GPU media server)
- **Nextcloud:** http://192.168.86.149:8082 OR https://cloud.schweitz.net (cloud storage)
- **Gitea:** http://192.168.86.149:3002 OR https://git.schweitz.net (Git hosting, SSH: 2222)
- **Samba:** \\\\192.168.86.149 or \\\\tower-of-joy (file shares: Media, Downloads, Backups)
**Background Services:**
- **Watchtower:** Automatic updates daily @ 4 AM
- **Maintenance:** Automated backups daily @ 3 AM
---
*For detailed implementation history and completed work, see [CHANGELOG.md](CHANGELOG.md)*