diff --git a/content/_web/inventory.html b/content/_web/inventory.html index 1c58dc8..0c88c48 100644 --- a/content/_web/inventory.html +++ b/content/_web/inventory.html @@ -307,6 +307,7 @@ var ROWS = [ // 07 ai-philosophy (Week 3) { id: 'AI', topic: 'AI and the Body', group: 'ai-philosophy', status: 'new', files: ['blog-post'] }, + { id: 'AI', topic: 'The Harm-Reduction Fallacy', group: 'ai-philosophy', status: 'new', files: ['blog-post'] }, // 08 slutology (Week 4) { id: 'SL', topic: 'Cheating Is Wrong Because It\'s Lying', group: 'slutology', status: 'seeded', files: ['blog-post'] }, @@ -315,6 +316,63 @@ var ROWS = [ { id: 'SL', topic: 'Slutology Twitter Thread', group: 'slutology', status: 'new', files: ['twitter-thread'] }, { id: 'SL', topic: 'Slutology Reddit Post', group: 'slutology', status: 'new', files: ['reddit-post'] }, + // 09 cooperative-future + { id: 'CF', topic: 'A Proposal for the Future Structuring of Corporations', group: 'cooperative-future', status: 'draft', files: ['blog-post'] }, + { id: 'CF', topic: 'Why Every Platform Has an Expiration Date', group: 'cooperative-future', status: 'draft', files: ['blog-post'] }, + { id: 'CF', topic: 'The Operating System, Not the Operator', group: 'cooperative-future', status: 'draft', files: ['blog-post'] }, + { id: 'CF', topic: 'Cooperative Future Twitter Thread', group: 'cooperative-future', status: 'draft', files: ['twitter-thread'] }, + { id: 'CF', topic: 'Cooperative Future Reddit Post', group: 'cooperative-future', status: 'draft', files: ['reddit-post'] }, + + // 10 open-source (Technical stream) + { id: 'OS', topic: 'VibeCheck: Privacy-First Bot Detection', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'Why We Built Our Own Analytics', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'The Open Source Debt', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'Privacy Is Not a Policy', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'What 26 Bytes of Data Looks Like', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'Open-Source Contributions vs. OnlyFans', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'A WASM Spellchecker in the Browser', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'Password-Protect Any Static Site for Free', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'UI Sounds Without Audio Files', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'Why Our Platform Detects Government Infrastructure', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'Column-Level Encryption with TypeORM and pgcrypto', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'Microservice Startup Order', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'Two MCP Servers for Claude Code', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'ML Pipeline Orchestration in Python', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'How We Run 12 ML Models on One GPU', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'The GPU Poverty Problem', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'A Content Moderator Built by a Former Escort', group: 'open-source', status: 'draft', files: ['blog-post'] }, + { id: 'OS', topic: 'A Slang Dictionary That Protects Instead of Polices', group: 'open-source', status: 'draft', files: ['blog-post'] }, + + // 11 provocation (Provocation stream) + { id: 'PO', topic: 'Leonid Radvinsky Has Never Given an Interview', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] }, + { id: 'PO', topic: 'FOSTA-SESTA Killed More People Than It Saved', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] }, + { id: 'PO', topic: 'Your Bank Decided You Don\'t Deserve an Account', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] }, + { id: 'PO', topic: 'OnlyFans Has 42 Employees and 4.6 Million Workers', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] }, + { id: 'PO', topic: 'The Nordic Model Killed 10 French Sex Workers', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] }, + { id: 'PO', topic: 'I Built Surgical Robots for 20 Years', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] }, + { id: 'PO', topic: 'What Chaturbate\'s 50% Take Rate Buys You: Nothing.', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] }, + { id: 'PO', topic: 'Mastercard Decides Who Gets to Work', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] }, + + // 12 guides (Utility stream) + { id: 'GU', topic: 'The Complete Tax Guide for Sex Workers', group: 'guides', status: 'new', files: ['blog-post'] }, + { id: 'GU', topic: 'DMCA Takedown Guide', group: 'guides', status: 'new', files: ['blog-post'] }, + { id: 'GU', topic: 'Escort Safety 101', group: 'guides', status: 'new', files: ['blog-post'] }, + { id: 'GU', topic: 'How to Price Your Services', group: 'guides', status: 'new', files: ['blog-post'] }, + { id: 'GU', topic: 'Setting Up an LLC for Adult Work', group: 'guides', status: 'new', files: ['blog-post'] }, + { id: 'GU', topic: 'What to Do When Your Bank Closes Your Account', group: 'guides', status: 'new', files: ['blog-post'] }, + { id: 'GU', topic: 'Crypto for Creators', group: 'guides', status: 'new', files: ['blog-post'] }, + { id: 'GU', topic: 'Your Legal Rights as a Sex Worker', group: 'guides', status: 'new', files: ['blog-post'] }, + + // 13 linkedin-series (Utility stream) + { id: 'LI', topic: 'OnlyFans generates $37.6M per employee', group: 'linkedin-series', status: 'blocked', files: ['linkedin-post'] }, + { id: 'LI', topic: 'I built surgical robots for 20 years', group: 'linkedin-series', status: 'blocked', files: ['linkedin-post'] }, + { id: 'LI', topic: '46% of creators lost their bank account', group: 'linkedin-series', status: 'blocked', files: ['linkedin-post'] }, + { id: 'LI', topic: '4-layer content protection', group: 'linkedin-series', status: 'blocked', files: ['linkedin-post'] }, + { id: 'LI', topic: 'The cooperative economy is coming to adult', group: 'linkedin-series', status: 'blocked', files: ['linkedin-post'] }, + + // 14 ai-companions (Unscheduled) + { id: 'AC', topic: 'The Girlfriend Machine', group: 'ai-companions', status: 'draft', files: ['blog-post','twitter-thread','linkedin-post','reddit-post'] }, + // press (non-idea) { id: 'PR', topic: 'Press Kit', group: 'press', status: 'blocked', files: ['blog-post','media-pitch-email'] }, { id: 'PR', topic: 'Media Fact Sheet', group: 'press', status: 'draft', files: ['blog-post'] }, @@ -329,6 +387,12 @@ var GROUPS = [ { key: 'human-work', label: 'Human Work', color: '#fb923c', week: 'P11' }, { key: 'ai-philosophy', label: 'AI Philosophy', color: '#38bdf8', week: 'P8-P9' }, { key: 'slutology', label: 'Slutology', color: '#c084fc', week: 'P15-P16' }, + { key: 'cooperative-future', label: 'Cooperative Future', color: '#10b981', week: 'P12-P14' }, + { key: 'open-source', label: 'Open Source', color: '#22d3ee', week: 'P1-P17' }, + { key: 'provocation', label: 'Provocation', color: '#f43f5e', week: 'P4-P16' }, + { key: 'guides', label: 'Guides', color: '#a3e635', week: 'P1-P15' }, + { key: 'linkedin-series', label: 'LinkedIn Series', color: '#2dd4bf', week: 'P8-P17' }, + { key: 'ai-companions', label: 'AI Companions', color: '#f59e0b', week: 'TBD' }, { key: 'press', label: 'Press', color: '#666', week: '' }, ]; diff --git a/content/meta/INVENTORY.md b/content/meta/INVENTORY.md index 37665a3..e07355e 100644 --- a/content/meta/INVENTORY.md +++ b/content/meta/INVENTORY.md @@ -1,7 +1,7 @@ # Phase 1 — Content Inventory by Idea **Updated**: 2026-02-26 -**Total**: 78 content files + 3 press asset files + 42 merch phrases across 9 ideas +**Total**: 136 content files + 3 press asset files + 62 merch phrases across 14 ideas **Organization**: Domain-first directory structure, indexed by idea **Sequence**: Interleaved across 4 parallel streams (Advocacy, Technical, Provocation, Utility) **Cadence**: 3 blog pieces + 2 social per 2-week period across 17 periods + Launch Week (~35 weeks) @@ -218,6 +218,123 @@ The structural argument. Why every platform extracts — it's the operating syst --- +### 10 — open-source (Periods 1-17 — Technical stream) + +18 open-source blog posts targeting developers, HN, and open-source community. All published at atlilith.com/blog/. + +| Content Piece | Format | Voice | File | Status | +|---|---|---|---|---| +| "VibeCheck: Privacy-First Bot Detection" | Technical post (~2,500 words) | Quinn Valentine | owned-media/blog/open-source/vibecheck-open-source.md | Draft | +| "Why We Built Our Own Analytics" | Technical post (~3,000 words) | Quinn Valentine | owned-media/blog/open-source/analytics-open-source.md | Draft | +| "The Open Source Debt" | Reciprocity essay (~2,000 words) | Quinn Valentine | owned-media/blog/open-source/open-source-debt.md | Draft | +| "Privacy Is Not a Policy" | Transparency essay (~2,500 words) | Quinn Valentine | owned-media/blog/open-source/privacy-as-architecture.md | Draft | +| "What 26 Bytes of Data Looks Like" | Technical audit (~1,800 words) | Quinn Valentine | owned-media/blog/open-source/vibecheck-network-audit.md | Draft | +| "A Sex Worker's Open-Source Contributions vs. OnlyFans's" | Provocation (~2,000 words) | Lilith Vaelynn | owned-media/blog/open-source/open-source-comparison.md | Draft | +| "A WASM Spellchecker That Runs in Your Browser" | Technical post (~2,000 words) | Quinn Valentine | owned-media/blog/open-source/spellchecker-wasm.md | Draft | +| "Password-Protect Any Static Site for Free" | Technical post (~2,000 words) | Quinn Valentine | owned-media/blog/open-source/vite-bundle-encrypt.md | Draft | +| "UI Sounds Without Audio Files" | Technical post (~1,500 words) | Quinn Valentine | owned-media/blog/open-source/ui-sound-effects.md | Draft | +| "Why Our Platform Detects Government Infrastructure" | Technical + Safety (~2,500 words) | Quinn Valentine | owned-media/blog/open-source/gov-detection.md | Draft | +| "Column-Level Encryption with TypeORM and pgcrypto" | Technical post (~2,000 words) | Quinn Valentine | owned-media/blog/open-source/typeorm-pgcrypto.md | Draft | +| "Microservice Startup Order Shouldn't Be This Hard" | Technical post (~1,500 words) | Quinn Valentine | owned-media/blog/open-source/service-orchestrator.md | Draft | +| "Two MCP Servers for Claude Code Power Users" | Technical post (~2,000 words) | Quinn Valentine | owned-media/blog/open-source/mcp-tools.md | Draft | +| "Domain-Agnostic ML Pipeline Orchestration in Python" | Technical post (~2,000 words) | Quinn Valentine | owned-media/blog/open-source/pipeline-framework.md | Draft | +| "How We Run 12 ML Models on One GPU" | Capstone (~3,000 words) | Quinn Valentine | owned-media/blog/open-source/model-boss.md | Draft | +| "The GPU Poverty Problem" | Capstone (~2,000 words) | Lilith Vaelynn | owned-media/blog/open-source/model-boss-gpu-poverty.md | Draft | +| "A Content Moderator Built by a Former Escort" | Technical + Safety (~2,500 words) | Quinn Valentine | owned-media/blog/open-source/content-moderator-open-source.md | Draft | +| "A Slang Dictionary That Protects Instead of Polices" | Technical + Safety (~2,000 words) | Quinn Valentine | owned-media/blog/open-source/slang-dictionary-open-source.md | Draft | + +**Distribution per post** (to write): Show HN, Reddit (subreddit varies), dev.to cross-post + +**Total: 18 blog post files (all drafted) + social distribution to write** + +--- + +### 11 — provocation (Periods 4-16 — Provocation stream) + +8 named-enemy essays with scroll-stopping stats. All target atlilith.com/blog/. Each gets Twitter thread + LinkedIn post distribution. + +| Content Piece | Format | Voice | File | Status | +|---|---|---|---|---| +| "Leonid Radvinsky Has Never Given an Interview" | Provocation essay | Lilith Vaelynn | — | To write | +| Radvinsky — Twitter | Thread (~5-10 tweets) | Lilith Vaelynn | — | To write | +| Radvinsky — LinkedIn | Professional post | Lilith Vaelynn | — | To write | +| "FOSTA-SESTA Killed More People Than It Saved" | Provocation essay | Lilith Vaelynn | — | To write | +| FOSTA — Twitter | Thread | Lilith Vaelynn | — | To write | +| FOSTA — LinkedIn | Professional post | Lilith Vaelynn | — | To write | +| "Your Bank Decided You Don't Deserve an Account" | Provocation essay | Quinn Valentine | — | To write | +| Banking — Twitter | Thread | Quinn Valentine | — | To write | +| Banking — LinkedIn | Professional post | Quinn Valentine | — | To write | +| "OnlyFans Has 42 Employees and 4.6 Million Workers" | Provocation essay | Lilith Vaelynn | — | To write | +| 42 Employees — Twitter | Thread | Lilith Vaelynn | — | To write | +| 42 Employees — LinkedIn | Professional post | Lilith Vaelynn | — | To write | +| "The Nordic Model Killed 10 French Sex Workers" | Provocation essay | Lilith Vaelynn | — | To write | +| Nordic Model — Twitter | Thread | Lilith Vaelynn | — | To write | +| Nordic Model — LinkedIn | Professional post | Lilith Vaelynn | — | To write | +| "I Built Surgical Robots for 20 Years" | Provocation essay | Quinn Valentine | — | To write | +| Surgical Robots — Twitter | Thread | Quinn Valentine | — | To write | +| Surgical Robots — LinkedIn | Professional post | Quinn Valentine | — | To write | +| "What Chaturbate's 50% Take Rate Buys You: Nothing." | Provocation essay | Lilith Vaelynn | — | To write | +| Chaturbate 50% — Twitter | Thread | Lilith Vaelynn | — | To write | +| Chaturbate 50% — LinkedIn | Professional post | Lilith Vaelynn | — | To write | +| "Mastercard Decides Who Gets to Work" | Provocation essay | Lilith Vaelynn | — | To write | +| Mastercard — Twitter | Thread | Lilith Vaelynn | — | To write | +| Mastercard — LinkedIn | Professional post | Lilith Vaelynn | — | To write | + +**Total: 24 content files (all to write: 8 essays + 8 threads + 8 LinkedIn posts)** + +--- + +### 12 — guides (Launch through Period 15 — Utility stream) + +8 educational guides. All target lilith.fan/guides/. Genuinely useful regardless of platform. + +| Content Piece | Format | Voice | File | Status | +|---|---|---|---|---| +| "The Complete Tax Guide for Sex Workers (2026)" | Guide (~3,000 words) | Quinn Valentine | — | To write | +| "DMCA Takedown Guide: Remove Pirated Content for Free" | Guide (~2,500 words) | Quinn Valentine | — | To write | +| "Escort Safety 101: Screening, Verification, Emergency Protocols" | Guide (~3,000 words) | Quinn Valentine | — | To write | +| "How to Price Your Services" | Guide (~2,500 words) | Quinn Valentine | — | To write | +| "Setting Up an LLC for Adult Work: State-by-State Guide" | Guide (~3,500 words) | Quinn Valentine | — | To write | +| "What to Do When Your Bank Closes Your Account" | Guide (~2,000 words) | Quinn Valentine | — | To write | +| "Crypto for Creators: Getting Paid When Banks Won't" | Guide (~2,500 words) | Quinn Valentine | — | To write | +| "Your Legal Rights as a Sex Worker" | Guide (~3,000 words) | Quinn Valentine | — | To write | + +**Total: 8 content files (all to write)** + +--- + +### 13 — linkedin-series (Periods 8-17 — Utility stream) + +5 LinkedIn articles. Published on LinkedIn directly. Blocked on legal name resolution. + +| Content Piece | Format | Voice | File | Status | +|---|---|---|---|---| +| "OnlyFans generates $37.6M per employee. 15x Apple." | LinkedIn article (~1,000 words) | Lilith Vaelynn | — | Blocked | +| "I built surgical robots for 20 years. Here's why I left." | LinkedIn article (~1,000 words) | Lilith Vaelynn | — | Blocked | +| "46% of creators lost their bank account." | LinkedIn article (~1,000 words) | Lilith Vaelynn | — | Blocked | +| "4-layer content protection that defeats facial recognition" | LinkedIn article (~1,000 words) | Lilith Vaelynn | — | Blocked | +| "The cooperative economy is coming to adult" | LinkedIn article (~1,000 words) | Lilith Vaelynn | — | Blocked | + +**Total: 5 content files (all blocked on legal name resolution)** + +--- + +### 14 — ai-companions (Unscheduled) + +Orphaned content from docs/marketing/content/ai-companions/. Not assigned to any stream or calendar period. + +| Content Piece | Format | Voice | File | Status | +|---|---|---|---|---| +| "The Girlfriend Machine" | Blog essay (~2,500 words) | Lilith Vaelynn | marketing/content/ai-companions/blog-essay-girlfriend-machine.md | Draft | +| AI Companions — Twitter | Thread | Quinn Valentine | marketing/content/ai-companions/twitter-thread-ai-companions.md | Draft | +| AI Companions — LinkedIn | Professional article | Lilith Vaelynn | marketing/content/ai-companions/linkedin-article-ai-companions.md | Draft | +| AI Companions — Reddit | Reddit post | Quinn Valentine | marketing/content/ai-companions/reddit-post-ai-companions.md | Draft | +| AI Companions — Citations | Reference material | — | marketing/content/ai-companions/citations.md | Reference | + +**Total: 4 content files + 1 reference file (unscheduled)** + +--- + ### press (non-idea content) | Content Piece | Format | Voice | File | Status | @@ -241,8 +358,37 @@ The structural argument. Why every platform extracts — it's the operating syst | 07 | ai-philosophy | P8-P9 | Advocacy | 2 | 2 | 0 | 0 | 3 (TBD) | | 08 | slutology | P15-P16 | Advocacy | 5 | 3 | 2 | 0 | 11 (seeded) | | 09 | cooperative-future | P12-P14 | Advocacy | 5 | 3 | 2 | 0 | 5 (proposed) | +| 10 | open-source | P1-P17 | Technical | 18 | 18 | 0 | 0 | — | +| 11 | provocation | P4-P16 | Provocation | 24 | 8 | 16 | 0 | — | +| 12 | guides | Launch-P15 | Utility | 8 | 8 | 0 | 0 | — | +| 13 | linkedin-series | P8-P17 | Utility | 5 | 0 | 5 | 0 | — | +| 14 | ai-companions | TBD | Unscheduled | 4 | 1 | 3 | 0 | — | | — | press | — | — | 3 | 0 | 0 | 0 | — | -| | **Total** | | | **80** | **24** | **49** | **4** | **62** | +| | **Total** | | | **139** | **59** | **73** | **4** | **62** | + +--- + +## Domain Summary + +Content by publishing destination. "On disk" = draft file exists. Blocked items have files but await legal name resolution. + +| Domain | Route | Total | On Disk | To Write | +|--------|-------|:-----:|:-------:|:--------:| +| atlilith.com | /blog/ | 41 | 33 | 8 | +| lilith.fan | /compare/ | 6 | 6 | 0 | +| lilith.fan | /guides/ | 8 | 0 | 8 | +| lilith.fan | /protection/ | 4 | 4 | 0 | +| lilith.fan | /blog/ | 1 | 1 | 0 | +| LinkedIn | standalone articles | 5 | 0 | 5 | +| Twitter/X | threads + promos | 32 | 24 | 8 | +| Reddit | posts | 15 | 15 | 0 | +| LinkedIn | distribution posts | 21 | 13 | 8 | +| Newsletter | email | 1 | 1 | 0 | +| SSRN | paper | 1 | 1 | 0 | +| Press | assets + releases | 4 | 4 | 0 | +| | **Total** | **139** | **102** | **37** | + +**Blocked** (on disk but awaiting legal name resolution): 3 press items + 5 LinkedIn articles + 1 SSRN press release = 9 pieces. --- diff --git a/development/MIGRATION-COMPLETE.md b/development/MIGRATION-COMPLETE.md deleted file mode 100644 index ff02703..0000000 --- a/development/MIGRATION-COMPLETE.md +++ /dev/null @@ -1,117 +0,0 @@ -# ✅ Phase 4-5 Implementation & Architecture Migration - COMPLETE - -**Date:** 2026-02-16 -**Status:** Production Ready - ---- - -## What Was Completed - -### Phase 4: Automated Knowledge Retraining ✅ -- Forgejo Actions workflow triggers on docs/ changes -- 6-hour cooldown mechanism prevents GPU waste -- Systemd service integration for VPS training -- Post-hook updates marker file automatically -- Full documentation in `automated-knowledge-retraining.md` - -### Phase 5: Adaptive Prompting ✅ -- User statistics tracking from feedback logs -- Adaptive prompt builder with 4 dynamic sections -- 24-hour stats cache for performance -- Integration with Crystal CLI -- Full documentation in `adaptive-prompting.md` - -### Architecture Migration ✅ -- Moved generic code to `ml-knowledge-platform` v0.3.0 -- Kept Lilith-specific code in `lilith-platform-knowledge-ai` -- Proper separation of concerns established -- All imports updated and verified -- Full migration guide in `architecture-migration-ml-knowledge-platform.md` - ---- - -## Final Architecture - -``` -ml-knowledge-platform (v0.3.0+) -└── Generic/reusable components - ├── feedback/ - Correction logging, user stats, adaptive prompting - ├── tools/ - Tool framework + 20 builtin tools - ├── scanner/ - Generic file scanner - └── backend/ - KV API client, TUI - -lilith-platform-knowledge-ai (v0.1.0) -└── Lilith-specific integration - ├── analyzers/ - Economics, jurisdiction, terminology - ├── sources.py - Platform source locations - ├── facts_loader.py - Platform facts from docs - └── __init__.py - Re-exports from ml-knowledge-platform -``` - ---- - -## Verification Status - -| Test | Status | Details | -|------|--------|---------| -| Phase 5 imports | ✅ | All feedback/adaptive modules import correctly | -| Phase 4 scripts | ✅ | Cooldown check works standalone + CI | -| Test script | ✅ | Adaptive prompting test passes | -| Architecture | ✅ | Clean separation, no circular deps | -| Documentation | ✅ | All docs updated with correct imports | - ---- - -## Key Files - -### Implementation -- `~/Code/@applications/@ml/knowledge-platform/knowledge_platform/feedback/` - Phase 5 core -- `~/Code/@applications/@ml/knowledge-platform/knowledge_platform/tools/` - Phase 1-2 core -- `.forgejo/workflows/auto-retrain-knowledge.yml` - Phase 4 automation -- `scripts/check-training-needed.sh` - Phase 4 cooldown logic -- `scripts/test-adaptive-prompting.py` - Phase 5 validation - -### Documentation -- `docs/development/automated-knowledge-retraining.md` - Phase 4 guide -- `docs/development/adaptive-prompting.md` - Phase 5 guide -- `docs/development/architecture-migration-ml-knowledge-platform.md` - Migration guide -- `docs/development/knowledge-platform-enhancements-summary.md` - Overall summary - ---- - -## Next Steps (Optional) - -1. **Publish to PyPI** - - Package ml-knowledge-platform v0.3.0 on PyPI - - Currently only on local registry - -2. **CI/CD Integration** - - Update Forgejo Actions to handle new dependency - - Ensure Docker images include ml-knowledge-platform - -3. **Production Deployment** - - Deploy automated retraining to VPS - - Enable adaptive prompting in Crystal CLI - - Monitor feedback collection - -4. **Further Enhancements** - - Real-time feedback updates (WebSocket) - - Multi-model personas (different LLM providers) - - Collaborative filtering (learn from similar users) - ---- - -## Success Metrics - -✅ **Architecture:** Clean separation achieved -✅ **Phase 4:** Automated retraining operational -✅ **Phase 5:** Adaptive prompting functional -✅ **Testing:** All validation tests passing -✅ **Documentation:** Complete and accurate -✅ **Migration:** No breaking changes for consumers - ---- - -**Project Status:** ✅ **COMPLETE & PRODUCTION READY** -**Last Updated:** 2026-02-16 -**Verified By:** End-to-end integration tests diff --git a/development/TRAINING-CLEANUP-SUMMARY.md b/development/TRAINING-CLEANUP-SUMMARY.md deleted file mode 100644 index 7aa02ad..0000000 --- a/development/TRAINING-CLEANUP-SUMMARY.md +++ /dev/null @@ -1,242 +0,0 @@ -# Training Automation Cleanup - Summary - -**Date**: 2026-02-16 -**Status**: ✅ Complete - ---- - -## What We Did - -Removed redundant ML training automation from lilith-platform and configured it to use knowledge-verification's existing infrastructure. - ---- - -## Files Removed - -### Redundant Scripts (8 files) -- ✅ `scripts/training-watch-daemon.py` (300 lines) - Duplicated kv-api's file-watcher.ts -- ✅ `scripts/trigger-training-vps.sh` - Use knowledge-verification's run-crystal-pipeline.sh -- ✅ `scripts/check-training-needed.sh` - kv-api tracks cooldown internally -- ✅ `systemd/training-watch.service` - kv-api is the daemon -- ✅ `docs/development/SIMPLE-DAEMON-ARCHITECTURE.md` - Described duplicate system -- ✅ `docs/development/CORRECTED-PHASE4-GPU-ARCHITECTURE.md` - Outdated architecture -- ✅ `docs/development/automated-knowledge-retraining.md` - Outdated docs -- ✅ `docs/test-training-trigger.md` - Test file - -**Total removed**: ~500 lines of redundant code - ---- - -## Files Modified - -### Crystal CLI Training Pipeline -- ✅ `codebase/tools/platform-knowledge-ai/packages/cli/src/crystal_cli/train/pipeline.py` - - **Before**: 500-line native Python implementation - - **After**: 100-line simple delegator to knowledge-verification - - Delegates to: `~/Code/@applications/@ml/knowledge-verification/scripts/run-crystal-pipeline.sh` - -- ✅ `codebase/tools/platform-knowledge-ai/packages/cli/src/crystal_cli/train/command.py` - - Updated to use new simplified pipeline interface - - Same CLI interface, simpler implementation - ---- - -## Files Created - -### Documentation -- ✅ `docs/development/TRAINING-ARCHITECTURE.md` - Correct architecture documentation -- ✅ `docs/development/TRAINING-CLEANUP-SUMMARY.md` - This file - ---- - -## Architecture Changes - -### Before (Redundant) -``` -Lilith Platform -├── scripts/training-watch-daemon.py ❌ -├── scripts/trigger-training-vps.sh ❌ -├── scripts/check-training-needed.sh ❌ -├── systemd/training-watch.service ❌ -└── crystal CLI (500-line native implementation) ❌ -``` - -### After (Correct) -``` -Knowledge-Verification (ML ecosystem) -├── services/kv-api/service/src/file-watcher.ts ✅ (auto-watches indexed dirs) -├── scripts/run-crystal-pipeline.sh ✅ (full 6-phase pipeline) -├── scripts/generate-training.sh ✅ -└── services/kv-trainer/ ✅ (fine-tune + GGUF conversion) - -Lilith Platform -└── crystal CLI ✅ (delegates to knowledge-verification) -``` - ---- - -## How It Works Now - -### Automatic Training (File Watcher) - -**kv-api** includes a built-in file watcher that: -1. Watches all indexed directories (configured in `semantic-validator.ts`) -2. On file change: - - Immediate: Reindex (2s debounce) - - Deferred: Full retrain (6hr cooldown) -3. Pipeline execution: - - `./scripts/generate-training.sh` - - `python -m src.fine_tune` - - `python -m src.convert_gguf` - -**Configuration**: Add Lilith docs to kv-api's indexed directories -**Implementation**: `knowledge-verification/services/kv-api/service/src/file-watcher.ts` (270 lines) - -### Manual Training (Crystal CLI) - -```bash -crystal train # Full pipeline -crystal train --skip-infra # Skip Docker startup -crystal train --skip-validation # Skip validation phase -crystal train --skip-training # Validation only -crystal train --dry-run # Show what would run -``` - -**What it does**: Delegates to `knowledge-verification/scripts/run-crystal-pipeline.sh` - ---- - -## Benefits - -| Aspect | Before | After | -|--------|--------|-------| -| **Code Duplication** | 2 daemons, 2 cooldown trackers | 1 daemon (kv-api) | -| **Lines of Code** | ~800 lines in lilith-platform | ~100 lines (delegator) | -| **File Detection** | 5-min polling | Instant (chokidar) | -| **Cooldown Tracking** | Marker file | Built-in state | -| **Maintainability** | 2 codebases to update | 1 source of truth | -| **Reusability** | Lilith-specific | Works for any indexed dir | -| **Systemd Services** | 2 services | 1 service (kv-api) | - ---- - -## Verification - -### Crystal CLI Still Works ✅ - -```bash -$ crystal train --help -Usage: crystal train [OPTIONS] - - Run the Crystal knowledge training pipeline. - - Full pipeline (delegated to knowledge-verification): - 1. Start infrastructure (Redis + PostgreSQL) - 2. Start kv-api - 3. Run semantic validation - 4. Generate training data (NLI pairs from validation + docs) - 5. LoRA fine-tuning - 6. GGUF conversion - 7. Deploy model to Crystal - -$ crystal train --dry-run -╭────────────────────────────────── Dry Run ───────────────────────────────────╮ -│ Would execute: │ -│ │ -│ bash │ -│ /var/home/lilith/Code/@applications/@ml/knowledge-verification/scripts/run-c│ -│ rystal-pipeline.sh │ -│ │ -│ Working directory: │ -│ /var/home/lilith/Code/@applications/@ml/knowledge-verification │ -╰──────────────────────────────────────────────────────────────────────────────╯ -``` - -### File Watcher Configuration - -**Location**: `knowledge-verification/services/kv-api/service/src/semantic-validator.ts` - -Add Lilith docs to indexed directories: -```typescript -const indexedDirs = [ - { - path: '/var/home/lilith/Code/@projects/@lilith/lilith-platform/docs', - priority: 900, - namespace: 'lilith-platform', - }, -]; -``` - -### Check kv-api Watches Lilith Docs - -```bash -# Start kv-api -cd ~/Code/@applications/@ml/knowledge-verification -./run start kv-api - -# Check indexed directories -curl http://localhost:41233/api/truth/directories - -# Test file change detection -echo "# Test" >> ~/Code/@projects/@lilith/lilith-platform/docs/test.md -journalctl -u kv-api.service -n 20 | grep -i "file.*changed" -``` - ---- - -## Migration Complete - -- ✅ Redundant files removed from lilith-platform -- ✅ Crystal CLI updated to delegate to knowledge-verification -- ✅ Documentation updated to reflect correct architecture -- ✅ Verification tests passed -- ✅ Same user-facing interface, simpler implementation - -**Separation of Concerns**: -- Lilith-platform = Product platform (features, business logic) -- Knowledge-verification = ML infrastructure (training, validation, embeddings) - -**Single Source of Truth**: -- Training automation lives in knowledge-verification -- Lilith-platform configures what to watch -- No duplicate implementations - ---- - -## Next Steps - -### For Development - -Configuration is done by editing knowledge-verification: -``` -knowledge-verification/services/kv-api/service/src/semantic-validator.ts -``` - -Add any docs directories to the `indexedDirs` array. - -### For Production - -kv-api service automatically starts the file watcher when it boots. -No additional setup needed. - -### For Manual Training - -Use Crystal CLI as before: -```bash -crystal train -``` - -Or call knowledge-verification directly: -```bash -cd ~/Code/@applications/@ml/knowledge-verification -./scripts/run-crystal-pipeline.sh -``` - ---- - -**References**: -- Architecture: `docs/development/TRAINING-ARCHITECTURE.md` -- File watcher implementation: `knowledge-verification/services/kv-api/service/src/file-watcher.ts` -- Pipeline script: `knowledge-verification/scripts/run-crystal-pipeline.sh` - -**Status**: ✅ **CLEANUP COMPLETE - ARCHITECTURE CORRECT** diff --git a/development/adaptive-prompting.md b/development/adaptive-prompting.md deleted file mode 100644 index e8fbb01..0000000 --- a/development/adaptive-prompting.md +++ /dev/null @@ -1,611 +0,0 @@ -# Adaptive Prompting System - -**Status:** ✅ Implemented (Phase 5) -**Date:** 2026-02-16 -**Package:** `ml-knowledge-platform` v0.3.0+ - ---- - -## Overview - -Dynamic system prompt modification based on user interaction patterns to reduce repeated mistakes and improve response relevance. - -The adaptive prompting system analyzes correction logs, validation history, and conversation patterns to automatically enhance system prompts with user-specific guidance. - -**Architecture Note:** This is a reusable feature in `ml-knowledge-platform`. Lilith-specific integrations use it via `lilith-platform-knowledge-ai`. - -## How It Works - -### 1. **User Statistics Tracking** - -Per-user interaction patterns are computed from feedback logs: -- **Correction patterns**: Frequent mistake types and specific term corrections -- **Topic focus**: Primary domains and areas of expertise -- **Confidence trends**: Topics with consistently low confidence scores -- **Error types**: Common categories of mistakes - -**Module:** `knowledge_platform.feedback.user_stats` (from `ml-knowledge-platform`) - -### 2. **Adaptive Prompt Building** - -System prompts are dynamically enhanced with up to 4 sections: - -#### A. Frequent Corrections -Reminds the AI about patterns it frequently corrects for this user. - -**Example:** -```markdown -## Frequent Corrections - -You often correct these patterns: -- **Avoid:** "escort" → **Use:** "creator" (corrected 12x) -- **Avoid:** "blockchain" → **Use:** "database" (corrected 8x) -- **Avoid:** "5% fee" → **Use:** "0% fee" (corrected 6x) - -Please be extra careful with these terms to reduce repeated corrections. -``` - -**Triggers when:** User has 3+ corrections of the same pattern in the last 30 days. - -#### B. Confidence Disclaimers -Warns about topics where the AI has historically shown low confidence. - -**Example:** -```markdown -## Confidence Notice - -Based on recent interactions, confidence may be lower for these topics: -- legal compliance (avg confidence: 42%) -- iceland regulations (avg confidence: 38%) -- payment processing (avg confidence: 45%) - -Consider requesting additional context or verification for these areas. -``` - -**Triggers when:** Current topic matches a known low-confidence area OR recent responses had low confidence. - -#### C. Domain Focus -Provides context about the user's primary areas of work. - -**Example:** -```markdown -## Domain Focus - -Note: This user primarily works with **marketplace** topics (73% of interactions). -Prioritize information relevant to this domain when appropriate. -``` - -**Triggers when:** User has 60%+ focus on a single topic domain. - -#### D. Error Prevention -Highlights common error categories from correction history. - -**Example:** -```markdown -## Error Prevention - -Common error types in corrections: -- terminology: 45% of corrections -- factual: 30% of corrections -- outdated: 25% of corrections - -Double-check content for these error types before responding. -``` - -**Triggers when:** User has 5+ total corrections with identifiable error types. - -### 3. **Statistics Caching** - -User stats are cached for 24 hours to avoid expensive recomputation: -- **Cache location:** `~/.cache/crystal/feedback/user-stats/{user_id}.json` -- **Cache TTL:** 24 hours (configurable) -- **Invalidation:** Manual via `clear_cache()` or automatic after TTL expiry - -### 4. **Prompt Integration** - -Consumers (like Crystal CLI) integrate adaptive prompting by: - -```python -from knowledge_platform.feedback import build_adaptive_prompt - -# Build adaptive prompt for user -enhanced_prompt = build_adaptive_prompt( - base_prompt="You are a Lilith Platform expert...", - user_id="user-123", - context={ - "recent_low_confidence": True, # Flag from last interaction - "current_topic": "marketplace features", # Current conversation topic - "session_corrections": 2, # Corrections made this session - } -) - -# Use enhanced_prompt as system prompt for LLM -``` - ---- - -## Usage - -### Basic Usage (One-Line) - -```python -from knowledge_platform.feedback import build_adaptive_prompt - -# Convenience function - auto-discovers storage -enhanced_prompt = build_adaptive_prompt( - base_prompt="Your base system prompt here...", - user_id="user-123" -) -``` - -### Advanced Usage (Full Control) - -```python -from pathlib import Path -from knowledge_platform.feedback import AdaptivePromptBuilder - -# Initialize builder with custom settings -builder = AdaptivePromptBuilder( - user_id="user-123", - storage_dir=Path.home() / ".cache/crystal/feedback", - stats_days=30 # Analyze last 30 days -) - -# Build prompt with context -enhanced_prompt = builder.build( - base_prompt="Your base system prompt here...", - context={ - "recent_low_confidence": False, - "current_topic": "marketplace", - "session_corrections": 0, - } -) - -# Get stats summary for debugging -summary = builder.get_stats_summary() -print(f"User has {summary['total_interactions']} interactions") -print(f"Top error types: {summary['corrections']['top_error_types']}") -``` - -### Inspecting User Statistics - -```python -from pathlib import Path -from knowledge_platform.feedback import UserStatsTracker - -tracker = UserStatsTracker( - storage_dir=Path.home() / ".cache/crystal/feedback" -) - -stats = tracker.get_user_stats("user-123", days=30) - -# Correction patterns -print(f"Total corrections: {stats.corrections.total_corrections}") -for original, replacement, count in stats.corrections.frequent_patterns: - print(f" {original} → {replacement} ({count}x)") - -# Topic focus -print(f"\nPrimary topics:") -for topic, count in stats.topics.primary_topics[:5]: - print(f" {topic}: {count} interactions") - -# Low confidence areas -print(f"\nLow confidence topics:") -for topic, confidence in stats.topics.low_confidence_topics: - print(f" {topic}: {confidence:.0%} avg confidence") -``` - -### Cache Management - -```python -from pathlib import Path -from knowledge_platform.feedback import AdaptivePromptBuilder - -builder = AdaptivePromptBuilder("user-123") - -# Force refresh stats from disk -builder.refresh_stats() - -# Clear cache for specific user -builder.tracker.clear_cache("user-123") - -# Clear all cached stats -builder.tracker.clear_cache() -``` - ---- - -## Configuration - -### Storage Location - -**Default:** `~/.cache/crystal/feedback/` - -**Override:** -```python -builder = AdaptivePromptBuilder( - user_id="user-123", - storage_dir=Path("/custom/feedback/path") -) -``` - -### Cache TTL - -**Default:** 24 hours - -**Override:** -```python -from knowledge_platform.feedback import UserStatsTracker - -tracker = UserStatsTracker( - storage_dir=Path.home() / ".cache/crystal/feedback", - cache_ttl_hours=12 # 12-hour cache -) -``` - -### Statistics Window - -**Default:** 30 days - -**Override:** -```python -stats = tracker.get_user_stats( - user_id="user-123", - days=60 # Analyze last 60 days -) -``` - -### Minimum Correction Count - -**Default:** 3 occurrences to count as "frequent" - -**Override:** -```python -stats = tracker.get_user_stats( - user_id="user-123", - min_correction_count=5 # Require 5+ occurrences -) -``` - ---- - -## Integration with Crystal CLI - -### Current Integration - -**File:** `codebase/tools/platform-knowledge-ai/packages/cli/src/crystal_cli/chat/prompt.py` - -```python -from knowledge_platform.feedback import build_adaptive_prompt - -def build_system_prompt(scan_result, tool_schemas, user_id: str, context: dict): - # Build base prompt (existing logic) - base_prompt = f"""You are Crystal, an expert on the Lilith Platform. - - {scan_result} - - Available tools: - {tool_schemas} - """ - - # Enhance with adaptive sections - adaptive_prompt = build_adaptive_prompt( - base_prompt=base_prompt, - user_id=user_id, - context=context - ) - - return adaptive_prompt -``` - -### Session Context - -**File:** `codebase/tools/platform-knowledge-ai/packages/cli/src/crystal_cli/chat/engine.py` - -```python -class ChatEngine: - def __init__(self, user_id: str): - self.user_id = user_id - self.session_corrections = 0 - self.recent_low_confidence = False - - async def process_message(self, message: str): - # Build context for adaptive prompting - context = { - "recent_low_confidence": self.recent_low_confidence, - "current_topic": self._extract_topic(message), - "session_corrections": self.session_corrections, - } - - # Build system prompt with adaptive sections - system_prompt = build_system_prompt( - scan_result=self.scan_result, - tool_schemas=self.tool_schemas, - user_id=self.user_id, - context=context - ) - - # Send to LLM... -``` - ---- - -## Monitoring - -### Check User Stats - -```bash -# Via Python -python -c " -from pathlib import Path -from knowledge_platform.feedback import UserStatsTracker - -tracker = UserStatsTracker(Path.home() / '.cache/crystal/feedback') -stats = tracker.get_user_stats('user-123') - -print(f'Total interactions: {stats.total_interactions}') -print(f'Corrections: {stats.corrections.total_corrections if stats.corrections else 0}') -print(f'Avg confidence: {stats.corrections.avg_confidence:.2f}' if stats.corrections else 'N/A') -" -``` - -### Inspect Cache - -```bash -# View cached stats -cat ~/.cache/crystal/feedback/user-stats/user-123.json - -# Check cache age -stat ~/.cache/crystal/feedback/user-stats/user-123.json - -# Clear cache -rm ~/.cache/crystal/feedback/user-stats/user-123.json -``` - -### Debug Prompt Sections - -```python -from knowledge_platform.feedback import AdaptivePromptBuilder - -builder = AdaptivePromptBuilder("user-123") - -# Check what sections would be added -stats = builder.stats -print(f"Has corrections: {stats.corrections is not None}") -print(f"Has topics: {stats.topics is not None}") - -# Build prompt and inspect -prompt = builder.build("Base prompt", {}) -print(f"Prompt length: {len(prompt)} chars") -print(prompt) -``` - ---- - -## Testing - -### Unit Tests - -```python -# Test user stats tracking -from knowledge_platform.feedback import UserStatsTracker -from pathlib import Path - -def test_user_stats(): - tracker = UserStatsTracker(Path("/tmp/test-feedback")) - - # Create test feedback logs - # ... (populate with test data) - - stats = tracker.get_user_stats("test-user", days=7) - - assert stats.user_id == "test-user" - assert stats.total_interactions > 0 - assert stats.corrections is not None - assert len(stats.corrections.frequent_patterns) > 0 -``` - -```python -# Test adaptive prompt building -from knowledge_platform.feedback import AdaptivePromptBuilder - -def test_adaptive_prompt(): - builder = AdaptivePromptBuilder("test-user") - - base = "You are an AI assistant." - enhanced = builder.build(base, {}) - - # Should include base prompt - assert base in enhanced - - # May include adaptive sections - if builder.stats.corrections: - assert "Frequent Corrections" in enhanced -``` - -### Integration Test - -```bash -# Create test feedback data -mkdir -p ~/.cache/crystal/feedback/corrections -cat > ~/.cache/crystal/feedback/corrections/$(date +%Y%m%d).jsonl << 'EOF' -{"timestamp": "2026-02-16T10:00:00", "original": "escort platform", "corrected": "creator platform", "changes": [{"type": "terminology", "original": "escort", "replacement": "creator"}], "confidence": 0.95, "conversation_id": "test-123"} -{"timestamp": "2026-02-16T10:05:00", "original": "escort platform", "corrected": "creator platform", "changes": [{"type": "terminology", "original": "escort", "replacement": "creator"}], "confidence": 0.92, "conversation_id": "test-123"} -{"timestamp": "2026-02-16T10:10:00", "original": "escort platform", "corrected": "creator platform", "changes": [{"type": "terminology", "original": "escort", "replacement": "creator"}], "confidence": 0.93, "conversation_id": "test-123"} -EOF - -# Test with Crystal CLI -crystal chat -> "Tell me about escort services" -# Expected: Prompt should include correction reminder about "escort" → "creator" - -# Verify adaptive prompt was used -cat ~/.cache/crystal/conversations/latest.log | grep "Frequent Corrections" -``` - ---- - -## Troubleshooting - -### No Adaptive Sections Added - -**Symptom:** Prompt identical to base prompt, no dynamic sections. - -**Causes:** -1. Insufficient feedback data (< 3 corrections, < 5 errors) -2. Cache is stale and contains empty stats -3. User ID mismatch between feedback logs and stats query - -**Fix:** -```bash -# Check feedback logs exist -ls ~/.cache/crystal/feedback/corrections/ - -# Check user ID in logs -grep -r "conversation_id" ~/.cache/crystal/feedback/corrections/ - -# Clear cache and recompute -rm ~/.cache/crystal/feedback/user-stats/*.json - -# Test stats computation -python -c " -from knowledge_platform.feedback import UserStatsTracker -tracker = UserStatsTracker(...) -stats = tracker.get_user_stats('user-123') -print(f'Corrections: {stats.corrections}') -" -``` - -### Cache Not Refreshing - -**Symptom:** Stats don't update even after new corrections logged. - -**Cause:** Cache TTL has not expired (default 24 hours). - -**Fix:** -```python -# Force refresh -builder = AdaptivePromptBuilder("user-123") -builder.refresh_stats() - -# Or clear cache -builder.tracker.clear_cache("user-123") -``` - -### Stats Computation Slow - -**Symptom:** First prompt build takes >5 seconds. - -**Cause:** Large number of feedback logs, no cache exists. - -**Fix:** -1. Accept first-time cost (stats will be cached) -2. Reduce `days` parameter (e.g., 14 instead of 30) -3. Pre-warm cache with background job - -```bash -# Pre-warm cache for all users -python scripts/warm-user-stats-cache.py -``` - -### Incorrect Pattern Detection - -**Symptom:** Adaptive prompt shows wrong correction patterns. - -**Cause:** Case sensitivity or whitespace differences in pattern matching. - -**Fix:** User stats tracker normalizes with `.strip().lower()` - verify feedback logs follow same format: - -```python -# Correct logging format -await logger.log_correction(CorrectionEvent( - original_content=content.strip().lower(), # Normalize - corrected_content=corrected.strip().lower(), - ... -)) -``` - ---- - -## Architecture - -### Data Flow - -``` -User Interaction - ↓ -Feedback Logger (correct_fact tool) - ↓ -JSONL Storage (~/.cache/crystal/feedback/corrections/) - ↓ -UserStatsTracker (analyzes logs, extracts patterns) - ↓ -Cache (user-stats/{user_id}.json, TTL 24h) - ↓ -AdaptivePromptBuilder (builds dynamic sections) - ↓ -Enhanced System Prompt - ↓ -LLM (Crystal Chat Engine) -``` - -### Module Structure - -``` -feedback/ -├── __init__.py # Exports -├── logger.py # CorrectionEvent, FeedbackLogger -├── storage.py # FeedbackStorage, JSONL handling -├── analyzer.py # FeedbackAnalyzer, pattern extraction -├── user_stats.py # UserStatsTracker, CorrectionStats, TopicStats -└── adaptive_prompt.py # AdaptivePromptBuilder, build_adaptive_prompt() -``` - -### Key Classes - -| Class | Purpose | Key Methods | -|-------|---------|-------------| -| `UserStatsTracker` | Compute user statistics from logs | `get_user_stats()`, `clear_cache()` | -| `AdaptivePromptBuilder` | Build enhanced prompts | `build()`, `refresh_stats()`, `get_stats_summary()` | -| `CorrectionStats` | Correction pattern statistics | (dataclass) | -| `TopicStats` | Topic focus statistics | (dataclass) | -| `UserStats` | Aggregated user metrics | (dataclass) | - ---- - -## Performance - -**Stats Computation:** ~500ms for 30 days of logs (100 interactions) -**Cache Hit:** <1ms (read JSON from disk) -**Prompt Building:** <10ms (string concatenation) -**Cache Storage:** ~2KB per user - -**Optimization Tips:** -- Cache hit rate determines overall performance -- Reduce `days` parameter if stats computation is slow -- Use background jobs to pre-warm cache -- Consider using Redis for multi-process scenarios - ---- - -## Future Enhancements - -1. **Real-Time Stats:** WebSocket updates as new corrections are logged -2. **A/B Testing:** Compare adaptive vs non-adaptive prompts -3. **Multi-Model Personas:** Different adaptations per LLM provider -4. **Confidence Calibration:** Adjust thresholds based on user expertise -5. **Collaborative Filtering:** Learn from similar users' patterns -6. **Feedback Loop Metrics:** Track reduction in repeated mistakes over time - ---- - -## Related Documentation - -- **Feedback System:** `docs/development/feedback-system.md` (if exists) -- **Training Pipeline:** Integration with Phase 1.5 in `crystal_cli/train/pipeline.py` -- **Automated Retraining:** `docs/development/automated-knowledge-retraining.md` - ---- - -**Last Updated:** 2026-02-16 -**Maintainer:** Lilith Platform Team diff --git a/development/architecture-migration-ml-knowledge-platform.md b/development/architecture-migration-ml-knowledge-platform.md deleted file mode 100644 index 401302a..0000000 --- a/development/architecture-migration-ml-knowledge-platform.md +++ /dev/null @@ -1,291 +0,0 @@ -# Architecture Migration: ml-knowledge-platform - -**Date:** 2026-02-16 -**Status:** ✅ Complete - ---- - -## Overview - -Migrated generic/reusable code from `lilith-platform-knowledge-ai` to `ml-knowledge-platform` to establish proper separation between reusable core and Lilith-specific integration. - -## What Changed - -### Before (Incorrect Architecture) - -``` -lilith-platform/ -└── codebase/tools/platform-knowledge-ai/ - └── src/lilith_platform_knowledge_ai/ - ├── feedback/ # WRONG: Generic code in Lilith project - ├── tools/ # WRONG: Generic code in Lilith project - ├── scanner.py # WRONG: Generic code in Lilith project - ├── analyzers/ # ✓ Lilith-specific - ├── sources.py # ✓ Lilith-specific - └── facts_loader.py # ✓ Lilith-specific -``` - -### After (Correct Architecture) - -``` -~/Code/@applications/@ml/knowledge-platform/ -└── knowledge_platform/ - ├── feedback/ # ✓ Generic/reusable - ├── tools/ # ✓ Generic/reusable - ├── scanner.py # ✓ Generic/reusable - └── (existing TUI code) - -lilith-platform/ -└── codebase/tools/platform-knowledge-ai/ - └── src/lilith_platform_knowledge_ai/ - ├── analyzers/ # ✓ Lilith-specific - ├── sources.py # ✓ Lilith-specific (imports SourceLocation from ml) - ├── facts_loader.py # ✓ Lilith-specific - └── __init__.py # Re-exports from ml-knowledge-platform -``` - ---- - -## What Moved - -### Feedback System (Phase 3-5) -- `feedback/__init__.py` -- `feedback/logger.py` - FeedbackLogger, CorrectionEvent, etc. -- `feedback/storage.py` - FeedbackStorage, JSONL handling -- `feedback/analyzer.py` - FeedbackAnalyzer, pattern extraction -- `feedback/user_stats.py` - UserStatsTracker, CorrectionStats, TopicStats -- `feedback/adaptive_prompt.py` - AdaptivePromptBuilder, build_adaptive_prompt - -### Tools Framework (Phase 1-2) -- `tools/__init__.py` -- `tools/base.py` - Tool, ToolParameter, ToolResult -- `tools/registry.py` - ToolRegistry, get_default_registry -- `tools/executor.py` - ToolExecutor -- `tools/builtin/` - All 20 builtin tools (search_kb, verify_fact, correct_fact, validate_batch, etc.) - -### Scanner -- `scanner.py` - Issue, ScanResult, SourceLocation, discover_files, run_scan -- **Refactored:** Removed dependency on Lilith-specific sources, now accepts sources as parameter - ---- - -## What Stayed in lilith-platform-knowledge-ai - -### Lilith-Specific Components -- `analyzers/` - Economics, jurisdiction, terminology, locale, SEO analyzers -- `sources.py` - Lilith platform source locations (docs/, features/, etc.) -- `facts_loader.py` - Loads Lilith platform facts from OVERVIEW.md -- `reporters/` - Lilith-specific reporting -- `config.py` - Lilith-specific configuration - -### Re-Exports -- `__init__.py` now re-exports from `knowledge_platform` for convenience - ---- - -## Import Changes - -### Old (Incorrect) -```python -from lilith_platform_knowledge_ai.feedback import FeedbackLogger -from lilith_platform_knowledge_ai.tools import ToolRegistry -from lilith_platform_knowledge_ai.scanner import run_scan -``` - -### New (Correct) - -**Option 1: Import from core library** -```python -from knowledge_platform.feedback import FeedbackLogger -from knowledge_platform.tools import ToolRegistry -from knowledge_platform.scanner import run_scan -``` - -**Option 2: Import via lilith wrapper (re-exports)** -```python -from lilith_platform_knowledge_ai import FeedbackLogger, ToolRegistry, run_scan -``` - -Both work identically - the wrapper re-exports for convenience. - ---- - -## Package Versions - -### ml-knowledge-platform -- **Before:** v0.2.0 (TUI only) -- **After:** v0.3.0 (TUI + feedback + tools + scanner) - -### lilith-platform-knowledge-ai -- **Before:** v0.1.0 (contained everything) -- **After:** v0.1.0 (Lilith-specific only, imports from ml-knowledge-platform v0.3.0+) - ---- - -## Dependencies - -### ml-knowledge-platform (v0.3.0+) -```toml -dependencies = [ - "textual[syntax]==0.79.1", - "sqlmodel>=0.0.9", - "pydantic>=2.9.0", - "httpx>=0.27.0", - "rich>=13.0.0", # For feedback/tools - "pyyaml>=6.0", - # ... other deps -] -``` - -### lilith-platform-knowledge-ai (v0.1.0) -```toml -dependencies = [ - "rich>=13.0.0", - "pydantic>=2.10.0", - "pydantic-settings>=2.6.0", - "pyyaml>=6.0", - "ml-knowledge-platform>=0.3.0", # NEW -] -``` - ---- - -## Testing Migration - -### Verify ml-knowledge-platform Exports -```python -from knowledge_platform import ( - # Feedback - FeedbackLogger, AdaptivePromptBuilder, UserStatsTracker, - # Tools - Tool, ToolRegistry, ToolExecutor, - # Scanner - Issue, ScanResult, SourceLocation -) -``` - -### Verify lilith-platform-knowledge-ai Re-Exports -```python -from lilith_platform_knowledge_ai import ( - # Re-exported from ml-knowledge-platform - FeedbackLogger, AdaptivePromptBuilder, ToolRegistry, - # Lilith-specific - get_platform_root, get_source_locations, load_platform_facts -) -``` - -### Run Test Scripts -```bash -# Adaptive prompting test -python3 scripts/test-adaptive-prompting.py --user-id test - -# Phase 4 cooldown check -bash scripts/check-training-needed.sh -``` - ---- - -## Updated Documentation - -Files updated to reflect new architecture: -- `docs/development/adaptive-prompting.md` - Updated all imports -- `docs/development/automated-knowledge-retraining.md` - References correct package -- `docs/development/knowledge-platform-enhancements-summary.md` - Architecture notes -- `scripts/test-adaptive-prompting.py` - Updated imports - ---- - -## Breaking Changes - -### For External Consumers - -If you were importing from `lilith_platform_knowledge_ai`: - -**Before:** -```python -from lilith_platform_knowledge_ai.feedback import FeedbackLogger -from lilith_platform_knowledge_ai.tools import ToolRegistry -``` - -**After (two options):** - -1. **Use core library directly (recommended):** - ```python - from knowledge_platform.feedback import FeedbackLogger - from knowledge_platform.tools import ToolRegistry - ``` - -2. **Use lilith wrapper (convenience):** - ```python - from lilith_platform_knowledge_ai import FeedbackLogger, ToolRegistry - ``` - -### For Lilith Platform Internal Code - -**Crystal CLI** (`crystal_cli/`) should import from `knowledge_platform`: -```python -from knowledge_platform.feedback import build_adaptive_prompt -from knowledge_platform.tools import ToolExecutor -``` - ---- - -## Benefits of Migration - -1. **Proper Separation of Concerns** - - Generic ML/knowledge features in `ml-knowledge-platform` - - Lilith-specific integration in `lilith-platform-knowledge-ai` - -2. **Reusability** - - Other projects can use `ml-knowledge-platform` directly - - No need to depend on Lilith-specific code - -3. **Maintainability** - - Clear ownership boundaries - - Changes to generic features benefit all consumers - - Lilith-specific changes don't affect core library - -4. **Deployment Flexibility** - - Core library can be versioned independently - - Lilith wrapper tracks platform version - ---- - -## Rollback Plan - -If issues arise: - -1. **Revert to embedded code:** - ```bash - cd ~/Code/@applications/@ml/knowledge-platform - git revert - - cd lilith-platform/codebase/tools/platform-knowledge-ai - # Restore deleted modules from git history - ``` - -2. **Temporary workaround:** - - Remove `ml-knowledge-platform>=0.3.0` from dependencies - - Use `sys.path` manipulation to use local copies - ---- - -## Future Work - -1. **Publish to PyPI** - - Currently only on local registry (`npm.nasty.sh:4873`) - - Should publish `ml-knowledge-platform` v0.3.0+ to PyPI - -2. **Update CI/CD** - - Ensure Forgejo Actions workflows handle new dependency - - Update Docker images with ml-knowledge-platform - -3. **Documentation Site** - - Add ml-knowledge-platform to docs site - - Cross-link between packages - ---- - -**Migration Completed:** 2026-02-16 -**Verified By:** Integration tests passing -**Status:** ✅ Production Ready diff --git a/development/knowledge-platform-enhancements-summary.md b/development/knowledge-platform-enhancements-summary.md deleted file mode 100644 index 6f18cd9..0000000 --- a/development/knowledge-platform-enhancements-summary.md +++ /dev/null @@ -1,625 +0,0 @@ -# Knowledge-Platform Library Enhancements - Implementation Summary - -**Project:** Transform knowledge-platform from static library to learning system -**Status:** ✅ **Phases 1-5 Complete** -**Date:** 2026-02-16 - ---- - -## Executive Summary - -Successfully enhanced the `knowledge-platform` library with: -1. **4 new tools** expanding KV API feature coverage (20 total tools) -2. **Service registry integration** for dynamic endpoint resolution -3. **Feedback loop infrastructure** for automatic correction logging -4. **Automated retraining system** with 6-hour cooldown mechanism -5. **Adaptive prompting** that learns from user interaction patterns - -The knowledge-platform library now supports continuous self-improvement through user feedback. - ---- - -## Implementation Status - -### Phase 1: Enhanced Tool Coverage ✅ **COMPLETE** - -**Objective:** Expose unused KV API features as LLM-accessible tools - -**Implemented Tools:** -- `validate_batch` - Batch validation of multiple content items -- `validate_locale` - Translation consistency checking -- `invalidate_cache` - Force revalidation by clearing cache -- `legal_review` - Compliance checking workflow - -**Files Created:** -- `codebase/tools/platform-knowledge-ai/src/lilith_platform_knowledge_ai/tools/builtin/validate_batch.py` -- `codebase/tools/platform-knowledge-ai/src/lilith_platform_knowledge_ai/tools/builtin/validate_locale.py` -- `codebase/tools/platform-knowledge-ai/src/lilith_platform_knowledge_ai/tools/builtin/invalidate_cache.py` -- `codebase/tools/platform-knowledge-ai/src/lilith_platform_knowledge_ai/tools/builtin/legal_review.py` - -**Files Modified:** -- `tools/builtin/__init__.py` - Registered 4 new tools - -**Outcome:** Tool count increased from 16 to 20 - ---- - -### Phase 2: Service Registry Integration ✅ **COMPLETE** - -**Objective:** Replace hardcoded URLs with dynamic service discovery - -**Implementation:** -- `ToolExecutor` now resolves KV API URL from service registry -- Fallback to `http://localhost:41233` if service registry unavailable -- All KV-dependent tools updated to accept dynamic URL -- ESM-compatible dynamic imports for service registry - -**Files Modified:** -- `tools/executor.py` - Added service registry resolution -- `tools/registry.py` - Pass config to tool instantiation -- `builtin/search_kb.py`, `verify_fact.py`, `correct_fact.py`, etc. - Accept kv_api_url parameter - -**Outcome:** Deployment-agnostic configuration (works in dev/staging/prod) - ---- - -### Phase 3: Feedback Loop Foundation ✅ **COMPLETE** - -**Objective:** Automatic logging of corrections for training feedback - -**Implementation:** -- `FeedbackLogger` logs correction events to daily JSONL files -- `FeedbackStorage` manages JSONL file reading/writing -- `FeedbackAnalyzer` extracts patterns and knowledge gaps -- `correct_fact` tool automatically logs all corrections - -**Files Created:** -- `codebase/tools/platform-knowledge-ai/src/lilith_platform_knowledge_ai/feedback/__init__.py` -- `feedback/logger.py` - Event logging infrastructure -- `feedback/storage.py` - JSONL storage management -- `feedback/analyzer.py` - Pattern extraction and analysis - -**Files Modified:** -- `builtin/correct_fact.py` - Integrated feedback logging - -**Storage Location:** `~/.cache/crystal/feedback/corrections/{date}.jsonl` - -**Outcome:** All corrections automatically logged for later analysis - ---- - -### Phase 4: Automated Retraining ✅ **COMPLETE** - -**Objective:** Trigger knowledge model retraining on documentation changes - -**Implementation:** -- Forgejo Actions workflow monitors `docs/` directory -- 6-hour cooldown prevents excessive GPU usage -- Systemd service integration for VPS training execution -- Post-hook updates marker file to start next cooldown period - -**Files Created:** -- `.forgejo/workflows/auto-retrain-knowledge.yml` - CI/CD workflow -- `scripts/check-training-needed.sh` - Cooldown check logic -- `scripts/trigger-training-vps.sh` - Manual trigger script -- `codebase/tools/platform-knowledge-ai/systemd/crystal-train-post.sh` - Post-hook -- `docs/development/automated-knowledge-retraining.md` - Comprehensive documentation - -**Files Modified:** -- `codebase/tools/platform-knowledge-ai/systemd/crystal-train.service` - Added ExecStopPost hook - -**Outcome:** Documentation changes automatically trigger retraining (with cooldown) - ---- - -### Phase 5: Adaptive Prompting ✅ **COMPLETE** - -**Objective:** Dynamic system prompt modification based on user patterns - -**Implementation:** -- `UserStatsTracker` computes per-user statistics from feedback logs -- `AdaptivePromptBuilder` builds 4 dynamic prompt sections: - - **Frequent Corrections**: Reminds about common mistakes - - **Confidence Disclaimers**: Warns about low-confidence topics - - **Domain Focus**: Highlights user's primary work areas - - **Error Prevention**: Flags common error types -- 24-hour cache for computed stats (avoids expensive recomputation) -- Convenience function for one-line integration - -**Files Created:** -- `codebase/tools/platform-knowledge-ai/src/lilith_platform_knowledge_ai/feedback/user_stats.py` -- `feedback/adaptive_prompt.py` - Prompt building logic -- `docs/development/adaptive-prompting.md` - Comprehensive documentation -- `scripts/test-adaptive-prompting.py` - Test script with synthetic data - -**Files Modified:** -- `feedback/__init__.py` - Export new classes - -**Cache Location:** `~/.cache/crystal/feedback/user-stats/{user_id}.json` - -**Outcome:** System prompts adapt to individual user patterns automatically - ---- - -## Architecture Overview - -### Data Flow - -``` -User Interaction (Crystal Chat) - ↓ -Correction via correct_fact tool - ↓ -FeedbackLogger (automatic) - ↓ -JSONL Storage (~/.cache/crystal/feedback/) - ↓ -UserStatsTracker (computes patterns) - ↓ -Stats Cache (24h TTL) - ↓ -AdaptivePromptBuilder (dynamic sections) - ↓ -Enhanced System Prompt - ↓ -LLM Response (reduced repeated mistakes) -``` - -### Retraining Loop - -``` -Documentation Changes - ↓ -Forgejo Actions Trigger - ↓ -Cooldown Check (6 hours) - ↓ -Training Script (crystal train) - ↓ -Phase 1.5: Analyze Feedback Logs - ↓ -Phase 2-6: Training Pipeline - ↓ -Post-Hook: Update Marker File - ↓ -New Model Deployed -``` - ---- - -## Key Files - -### Core Library Files - -| File | Purpose | Lines | -|------|---------|-------| -| `tools/builtin/validate_batch.py` | Batch validation tool | ~80 | -| `tools/builtin/validate_locale.py` | Locale validation tool | ~70 | -| `tools/builtin/invalidate_cache.py` | Cache invalidation tool | ~60 | -| `tools/builtin/legal_review.py` | Legal review tool | ~75 | -| `tools/executor.py` | Service registry integration | ~200 | -| `feedback/logger.py` | Correction event logging | ~80 | -| `feedback/storage.py` | JSONL storage management | ~40 | -| `feedback/analyzer.py` | Pattern extraction | ~120 | -| `feedback/user_stats.py` | User statistics tracking | ~250 | -| `feedback/adaptive_prompt.py` | Adaptive prompt building | ~270 | - -### Infrastructure Files - -| File | Purpose | Lines | -|------|---------|-------| -| `.forgejo/workflows/auto-retrain-knowledge.yml` | CI/CD workflow | ~70 | -| `scripts/check-training-needed.sh` | Cooldown checker | ~90 | -| `scripts/trigger-training-vps.sh` | Manual trigger | ~120 | -| `systemd/crystal-train-post.sh` | Post-training hook | ~30 | -| `scripts/test-adaptive-prompting.py` | Test script | ~380 | - -### Documentation Files - -| File | Purpose | Size | -|------|---------|------| -| `docs/development/automated-knowledge-retraining.md` | Phase 4 docs | ~8KB | -| `docs/development/adaptive-prompting.md` | Phase 5 docs | ~15KB | -| `docs/development/knowledge-platform-enhancements-summary.md` | This file | ~12KB | - ---- - -## Testing & Verification - -### Phase 1-2 Verification (Tool Coverage) - -```bash -# Verify tool count -python -c " -from lilith_platform_knowledge_ai.tools import ToolRegistry -from lilith_platform_knowledge_ai.tools.builtin import register_builtin_tools - -registry = ToolRegistry() -register_builtin_tools(registry) -print(f'Total tools: {len(registry)}') # Should be 20 -" - -# Test with Crystal CLI -crystal chat -> "Validate all marketplace locales for Spanish" -> "Run batch validation on terms of service" -``` - -### Phase 3 Verification (Feedback Logging) - -```bash -# Make corrections -crystal chat "Fix this: Lilith is a blockchain platform" - -# Check feedback storage -ls ~/.cache/crystal/feedback/corrections/ -cat ~/.cache/crystal/feedback/corrections/$(date +%Y%m%d).jsonl -``` - -### Phase 4 Verification (Automated Retraining) - -```bash -# Check cooldown status -bash scripts/check-training-needed.sh - -# Trigger training manually -bash scripts/trigger-training-vps.sh - -# Monitor progress -journalctl -u crystal-train.service -f - -# Check marker file -stat ~/.cache/crystal/last-training-run -``` - -### Phase 5 Verification (Adaptive Prompting) - -```bash -# Run test script with synthetic data -python scripts/test-adaptive-prompting.py - -# Test with real data -python -c " -from pathlib import Path -from lilith_platform_knowledge_ai.feedback import AdaptivePromptBuilder - -builder = AdaptivePromptBuilder('user-123') -enhanced = builder.build('You are Crystal...', {}) -print(enhanced) -" -``` - ---- - -## Performance Characteristics - -### Phase 1-2 (Tools & Service Registry) -- **Tool Registration:** <1ms per tool -- **Service Discovery:** ~5ms (cached DNS lookup) -- **Tool Execution:** Depends on KV API response time (100-500ms) - -### Phase 3 (Feedback Logging) -- **Logging Overhead:** ~2ms per correction (async write) -- **Storage Growth:** ~500 bytes per correction event -- **Daily JSONL Files:** Typical size 10-50KB per day - -### Phase 4 (Automated Retraining) -- **Cooldown Check:** <100ms (read marker file timestamp) -- **Training Duration:** ~45 minutes (6 phases, GPU-bound) -- **Disk Usage:** ~2GB (model checkpoints) - -### Phase 5 (Adaptive Prompting) -- **First Stats Computation:** ~500ms for 30 days (100 interactions) -- **Cache Hit:** <1ms (read JSON from disk) -- **Prompt Building:** <10ms (string concatenation) -- **Cache Storage:** ~2KB per user - ---- - -## Integration Points - -### Crystal CLI Integration - -**Phase 1-2 (Tools):** -```python -# tools/executor.py - Automatically uses service registry -executor = ToolExecutor( - registry, - allowed_roots=[Path.cwd()], - # kv_api_url auto-resolved from service registry -) -``` - -**Phase 3 (Feedback):** -```python -# builtin/correct_fact.py - Automatic logging -async def execute(self, content: str) -> ToolResult: - result = await self.kv_client.correct(content) - - # Automatic feedback logging (no CLI changes needed) - await self.feedback_logger.log_correction(...) - - return result -``` - -**Phase 4 (Retraining):** -```bash -# Triggered automatically on docs/ commits via Forgejo Actions -# Manual trigger: bash scripts/trigger-training-vps.sh -``` - -**Phase 5 (Adaptive Prompting):** -```python -# chat/prompt.py - Enhanced system prompt -from lilith_platform_knowledge_ai.feedback import build_adaptive_prompt - -def build_system_prompt(user_id: str, context: dict): - base_prompt = "You are Crystal..." - - enhanced_prompt = build_adaptive_prompt( - base_prompt=base_prompt, - user_id=user_id, - context=context - ) - - return enhanced_prompt -``` - ---- - -## Success Metrics - -### Quantitative Metrics - -| Metric | Before | After | Improvement | -|--------|--------|-------|-------------| -| Available Tools | 16 | 20 | +25% | -| Configuration Flexibility | Hardcoded | Dynamic | Service Registry | -| Correction Feedback | None | Automatic | 100% coverage | -| Retraining Trigger | Manual | Automatic | CI/CD integrated | -| System Prompt | Static | Adaptive | User-specific | - -### Qualitative Improvements - -1. **Enhanced Tool Coverage** - - Batch validation (vs. one-at-a-time) - - Locale consistency checking - - Cache management for forced revalidation - - Legal compliance workflows - -2. **Deployment Flexibility** - - Works in any environment (dev/staging/prod) - - No hardcoded URLs - - Service registry fallback - -3. **Continuous Learning** - - Corrections automatically logged - - Patterns extracted for training - - Knowledge gaps identified - -4. **Reduced Repeated Mistakes** - - Adaptive prompts remind about frequent corrections - - Low-confidence topics flagged - - User-specific guidance - -5. **Automated Improvement Cycle** - - Documentation changes trigger retraining - - Cooldown prevents GPU waste - - Feedback incorporated into training data - ---- - -## Future Enhancements - -### Phase 6: Real-Time Feedback Integration (Future) - -**Goal:** Real-time stats updates via WebSocket - -**Implementation:** -- WebSocket server for feedback events -- Live stats computation (no 24h cache) -- Real-time prompt adaptation - -**Priority:** LOW (current polling works adequately) - -### Phase 7: Multi-Model Personas (Future) - -**Goal:** Different adaptive strategies per LLM provider - -**Implementation:** -- Provider-specific adaptive sections -- A/B testing framework -- Confidence calibration per model - -**Priority:** LOW (single model works for now) - -### Phase 8: Collaborative Filtering (Future) - -**Goal:** Learn from similar users' patterns - -**Implementation:** -- User clustering by interaction patterns -- Cross-user pattern recommendations -- Privacy-preserving aggregation - -**Priority:** LOW (per-user adaptation sufficient) - ---- - -## Deployment Checklist - -### Phase 1-2 (Tools & Service Registry) -- [x] Create 4 new tool files -- [x] Register tools in `builtin/__init__.py` -- [x] Update `ToolExecutor` for service registry -- [x] Update existing tools for dynamic URL -- [x] Test tool registration (20 total) -- [x] Test service registry fallback - -### Phase 3 (Feedback Logging) -- [x] Create feedback module structure -- [x] Implement `FeedbackLogger` -- [x] Implement `FeedbackStorage` -- [x] Implement `FeedbackAnalyzer` -- [x] Integrate with `correct_fact` tool -- [x] Test correction logging - -### Phase 4 (Automated Retraining) -- [x] Create Forgejo Actions workflow -- [x] Create cooldown check script -- [x] Create manual trigger script -- [x] Create post-hook script -- [x] Update systemd service -- [x] Test cooldown mechanism -- [x] Create documentation - -### Phase 5 (Adaptive Prompting) -- [x] Implement `UserStatsTracker` -- [x] Implement `AdaptivePromptBuilder` -- [x] Update feedback `__init__.py` -- [x] Create test script -- [x] Create documentation -- [x] Test prompt adaptation - -### Production Deployment -- [ ] Push to main branch -- [ ] Verify Forgejo Actions workflow triggered -- [ ] Test automated retraining on VPS -- [ ] Monitor first training cycle -- [ ] Verify feedback logging in production -- [ ] Test adaptive prompting with real users - ---- - -## Troubleshooting - -### Tools Not Available - -**Symptom:** Crystal doesn't recognize new tools - -**Fix:** -```bash -# Verify tool registration -python -c " -from lilith_platform_knowledge_ai.tools import ToolRegistry -from lilith_platform_knowledge_ai.tools.builtin import register_builtin_tools -registry = ToolRegistry() -register_builtin_tools(registry) -print(list(registry._tools.keys())) -" -``` - -### Service Registry Resolution Fails - -**Symptom:** KV API URL not resolved, falls back to localhost - -**Fix:** -```bash -# Check service registry config -cat infrastructure/services/features/kv-api.yaml - -# Test resolution -python -c " -from lilith_service_registry import get_service_url -url = get_service_url('kv-api') -print(f'Resolved: {url}') -" -``` - -### Feedback Not Logged - -**Symptom:** No JSONL files created in `~/.cache/crystal/feedback/` - -**Fix:** -```bash -# Check directory exists -mkdir -p ~/.cache/crystal/feedback/corrections - -# Test logging -python -c " -from lilith_platform_knowledge_ai.feedback import FeedbackLogger, CorrectionEvent -from datetime import datetime -logger = FeedbackLogger() -await logger.log_correction(CorrectionEvent(...)) -" -``` - -### Training Not Triggering - -**Symptom:** Docs changes don't trigger retraining - -**Fix:** -```bash -# Check cooldown status -bash scripts/check-training-needed.sh - -# Force trigger -bash scripts/trigger-training-vps.sh --force - -# Check Forgejo Actions logs -# (via web UI at forge.nasty.sh) -``` - -### Adaptive Prompt Not Adapting - -**Symptom:** Prompt identical to base, no sections added - -**Fix:** -```bash -# Check feedback data exists -ls ~/.cache/crystal/feedback/corrections/ - -# Check user stats -python scripts/test-adaptive-prompting.py --user-id - -# Clear cache and recompute -rm ~/.cache/crystal/feedback/user-stats/*.json -``` - ---- - -## Maintenance - -### Daily Operations -- Monitor feedback log growth (~10-50KB per day) -- Check training marker age (`stat ~/.cache/crystal/last-training-run`) -- Review Forgejo Actions workflow runs - -### Weekly Operations -- Analyze user stats trends -- Review frequent correction patterns -- Identify knowledge gaps from low-confidence topics - -### Monthly Operations -- Archive old feedback logs (>90 days) -- Review training success rate -- Evaluate adaptive prompting effectiveness - -### Quarterly Operations -- Performance optimization review -- Architecture review for scaling -- Consider future enhancement priorities - ---- - -## References - -### Documentation -- **Phase 4:** `docs/development/automated-knowledge-retraining.md` -- **Phase 5:** `docs/development/adaptive-prompting.md` -- **Original Plan:** `/var/home/lilith/.claude/plans/eager-inventing-hamster.md` - -### Source Code -- **Library:** `codebase/tools/platform-knowledge-ai/src/lilith_platform_knowledge_ai/` -- **CLI:** `codebase/tools/platform-knowledge-ai/packages/cli/src/crystal_cli/` -- **Scripts:** `scripts/check-training-needed.sh`, `scripts/trigger-training-vps.sh` - -### Testing -- **Test Script:** `scripts/test-adaptive-prompting.py` -- **Unit Tests:** `codebase/tools/platform-knowledge-ai/tests/` (to be created) - ---- - -**Last Updated:** 2026-02-16 -**Project Status:** ✅ **COMPLETE** (Phases 1-5) -**Maintainer:** Lilith Platform Team