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:
+15
-13
@@ -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(() => {
|
||||
|
||||
Reference in New Issue
Block a user