0.6.0 training session: Oracle Bot, RL combat, Mind's Eye, multilingual pipeline

Major changes from this session:

Training:
- 0.6.0 training running: 9B on steel141 3090 Ti, 27B on rented H100 NVL
- 7,256 merged training examples (up from 3,183)
- New training data: failure modes (85), midloop messaging (27),
  prompt injection defense (29), personality (32), gold from quarantine
  bank (232), new tool examples (30), claude's own experience (10)
- All training data RCON-validated at 100% pass rate
- Bake-off: gemma3:27b 66%, qwen3.5:27b 61%, translategemma:27b 56%

Oracle Bot (Mind's Eye):
- Invisible spectator bot (mineflayer) streams world state via WebSocket
- HTML5 Canvas frontend at mind.mortdec.ai
- Real-time tool trace visualization with expandable entries
- Streaming model tokens during inference
- Gateway integration: fire-and-forget POST /trace on every tool call

Reinforcement Learning:
- Gymnasium environment wrapping mineflayer bot (minecraft_env.py)
- PPO training via Stable Baselines3 (10K param policy network)
- Behavioral cloning pretraining (97.5% accuracy on expert policy)
- Infinite training loop with auto-restart and checkpoint resume
- Bot learns combat, survival, navigation from raw experience

Bot Army:
- 8-soldier marching formation with autonomous combat
- Combat bots using mineflayer-pvp, pathfinder, armor-manager
- Multilingual prayer bots via translategemma:27b (18 languages)
- Frame-based AI architecture: LLM planner + reactive micro-scripts

Infrastructure:
- Fixed mattpc.sethpc.xyz billing gateway (API key + player list parser)
- Billing gateway now tracks all LAN traffic (LAN auto-auth)
- Gateway fallback for empty god-mode responses
- Updated mortdec.ai landing page

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Seth
2026-03-22 20:22:50 -04:00
parent baab24f8b1
commit 5b28002001
44 changed files with 20873 additions and 4352 deletions
+15 -13
View File
@@ -221,11 +221,9 @@ class OracleBot extends EventEmitter {
`gamemode=${bot.game.gameMode}`
);
// If not already spectator, become spectator via server command
if (bot.game.gameMode !== 'spectator') {
console.log('[OracleBot] Not in spectator mode — requesting /gamemode spectator');
bot.chat('/gamemode spectator');
}
// Note: Don't try to change gamemode — Paper kicks offline-mode bots on gamemode change.
// Bot operates in whatever mode the server assigns. Spectator can be set via
// essentials auto-gamemode config or a join-event plugin if needed.
this.emit('spawned', {
position: bot.entity.position,
@@ -249,13 +247,16 @@ class OracleBot extends EventEmitter {
});
bot.on('kicked', (reason) => {
let reasonText = reason;
try {
// reason may be a JSON chat component
const parsed = JSON.parse(reason);
reasonText = parsed.text || reason;
} catch (_) {
// use raw string
let reasonText;
if (typeof reason === 'object') {
reasonText = JSON.stringify(reason);
} else {
try {
const parsed = JSON.parse(reason);
reasonText = parsed.text || parsed.translate || JSON.stringify(parsed);
} catch (_) {
reasonText = String(reason);
}
}
console.warn(`[OracleBot] Kicked: ${reasonText}`);
this.emit('disconnected', { reason: 'kicked', message: reasonText });
@@ -273,7 +274,8 @@ class OracleBot extends EventEmitter {
_scheduleReconnect() {
if (this._destroyed) return;
const delay = this._reconnectDelay;
// Minimum 5s delay to let server fully drop old session (avoids duplicate_login kick)
const delay = Math.max(this._reconnectDelay, 5000);
console.log(`[OracleBot] Reconnecting in ${delay}ms ...`);
this._reconnectTimer = setTimeout(() => {