GPU scheduler, 14-tool architecture, plugin deployment, event dispatcher
GPU Scheduler (gpu.sethpc.xyz): - Live dashboard with 4 GPUs, training monitor, loss sparklines - Preset-based job scheduler with 3 triggers (time, finish_training, cost) - Model selection per GPU, pipeline configuration - Tool self-play and training pipeline types - Behind Google OAuth, live-refresh without page reload Tool Architecture (14 tools): - 3 new tools: world.nearby_entities, memory.read, memory.write - 7 script.* tools: write, validate, execute, read, list, delete, schedule - ScriptManager: full mcfunction datapack CRUD with RCON validation - Training data: 1,430 tool examples (up from 1,159) Plugin Deployment (paper-ai-25567): - WorldGuard 7.0.12, CoreProtect CE 23.1, EssentialsX 2.21.2, Vault 1.7.3 - Fresh greenfield world reset - 104 RCON-validated plugin training examples Event Dispatcher: - Watches server log for deaths, joins, advancements, PvP kills - Configurable trigger probability and cooldowns per event type - Deployed to dev server, fires god_system prompts on events - 21 event-response training examples Training Infrastructure: - train_lora.py: --save-steps 50, --resume from checkpoint - run_training.sh: stops Ollama, activates conda, restarts after - Passwordless sudo for ollama services on steel141 - Dev server added to MCSManager with autoStart Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -127,6 +127,339 @@ TOOL_SCHEMAS: List[Dict[str, Any]] = [
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "world.nearby_entities",
|
||||
"description": (
|
||||
"Scan for entities near a player within a given radius. "
|
||||
"Returns a list of entity types, counts, and distances. "
|
||||
"Use this before kill/target commands to know what's around the player."
|
||||
),
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"player": {
|
||||
"type": "string",
|
||||
"description": "The player to scan around (case-sensitive)."
|
||||
},
|
||||
"radius": {
|
||||
"type": "integer",
|
||||
"description": "Search radius in blocks (default 32, max 128)."
|
||||
}
|
||||
},
|
||||
"required": ["player"],
|
||||
"additionalProperties": False
|
||||
},
|
||||
"returns": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"entities": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {"type": "string"},
|
||||
"count": {"type": "integer"},
|
||||
"nearest_distance": {"type": "number"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"total": {"type": "integer"}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "memory.read",
|
||||
"description": (
|
||||
"Read saved memories for a player — locations, preferences, and facts. "
|
||||
"Use this when a player references a saved location (e.g. 'tp me home') "
|
||||
"or asks what you know about them."
|
||||
),
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"player": {
|
||||
"type": "string",
|
||||
"description": "Player whose memories to read (omit for requesting player)."
|
||||
},
|
||||
"key": {
|
||||
"type": "string",
|
||||
"description": "Specific memory key to look up (e.g. 'home', 'base'). Omit to get all."
|
||||
}
|
||||
},
|
||||
"additionalProperties": False
|
||||
},
|
||||
"returns": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"memories": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"key": {"type": "string"},
|
||||
"type": {"type": "string"},
|
||||
"value": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "memory.write",
|
||||
"description": (
|
||||
"Save a memory for a player — a named location, preference, or fact. "
|
||||
"Use this when a player asks you to remember something."
|
||||
),
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"player": {
|
||||
"type": "string",
|
||||
"description": "Player who owns this memory."
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": ["location", "preference", "fact"],
|
||||
"description": "Memory type."
|
||||
},
|
||||
"key": {
|
||||
"type": "string",
|
||||
"description": "Memory name (e.g. 'home', 'base', 'favorite_tool')."
|
||||
},
|
||||
"value": {
|
||||
"description": "Memory data — {x,y,z} for locations, string for others."
|
||||
}
|
||||
},
|
||||
"required": ["player", "type", "key", "value"],
|
||||
"additionalProperties": False
|
||||
},
|
||||
"returns": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"ok": {"type": "boolean"},
|
||||
"key": {"type": "string"}
|
||||
}
|
||||
}
|
||||
},
|
||||
# ── Script environment tools ──────────────────────────────────────────
|
||||
{
|
||||
"name": "script.write",
|
||||
"description": (
|
||||
"Write a mcfunction script to the Mortdecai datapack. Each line is one "
|
||||
"Minecraft command (no leading slash). Use relative coordinates (~) for "
|
||||
"position-relative builds. Scripts are stored at "
|
||||
"mortdecai:functions/<name>.mcfunction. Overwrites if the script already exists."
|
||||
),
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Script name (e.g. 'build_house', 'arena_setup'). Lowercase, underscores."
|
||||
},
|
||||
"commands": {
|
||||
"type": "array",
|
||||
"items": {"type": "string"},
|
||||
"description": "List of Minecraft commands, one per line. No leading slash."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Comment at the top of the file describing what this script does."
|
||||
}
|
||||
},
|
||||
"required": ["name", "commands"],
|
||||
"additionalProperties": False
|
||||
},
|
||||
"returns": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"ok": {"type": "boolean"},
|
||||
"path": {"type": "string"},
|
||||
"lines": {"type": "integer"}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "script.validate",
|
||||
"description": (
|
||||
"Validate a list of commands without writing or executing. Dry-runs each "
|
||||
"command through RCON and reports errors. Use this before script.write to "
|
||||
"catch mistakes. Returns per-line pass/fail results."
|
||||
),
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"commands": {
|
||||
"type": "array",
|
||||
"items": {"type": "string"},
|
||||
"description": "List of Minecraft commands to validate."
|
||||
}
|
||||
},
|
||||
"required": ["commands"],
|
||||
"additionalProperties": False
|
||||
},
|
||||
"returns": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"valid": {"type": "boolean"},
|
||||
"total": {"type": "integer"},
|
||||
"passed": {"type": "integer"},
|
||||
"errors": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"line": {"type": "integer"},
|
||||
"command": {"type": "string"},
|
||||
"error": {"type": "string"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "script.execute",
|
||||
"description": (
|
||||
"Execute a previously written mcfunction script. Optionally run it as/at "
|
||||
"a specific player for correct relative coordinates."
|
||||
),
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Script name to execute (e.g. 'build_house')."
|
||||
},
|
||||
"as_player": {
|
||||
"type": "string",
|
||||
"description": "Run the script as this player (for ~ coordinates). Optional."
|
||||
}
|
||||
},
|
||||
"required": ["name"],
|
||||
"additionalProperties": False
|
||||
},
|
||||
"returns": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"ok": {"type": "boolean"},
|
||||
"result": {"type": "string"}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "script.read",
|
||||
"description": (
|
||||
"Read the contents of an existing mcfunction script. "
|
||||
"Use this to review or debug a script before modifying it."
|
||||
),
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Script name to read."
|
||||
}
|
||||
},
|
||||
"required": ["name"],
|
||||
"additionalProperties": False
|
||||
},
|
||||
"returns": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"ok": {"type": "boolean"},
|
||||
"commands": {
|
||||
"type": "array",
|
||||
"items": {"type": "string"}
|
||||
},
|
||||
"lines": {"type": "integer"}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "script.list",
|
||||
"description": (
|
||||
"List all scripts in the Mortdecai datapack. Returns script names, "
|
||||
"line counts, and whether they are scheduled (tick/load)."
|
||||
),
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {},
|
||||
"additionalProperties": False
|
||||
},
|
||||
"returns": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"scripts": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {"type": "string"},
|
||||
"lines": {"type": "integer"},
|
||||
"scheduled": {"type": "string", "description": "tick, load, or none"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "script.delete",
|
||||
"description": (
|
||||
"Delete a mcfunction script from the datapack. Also removes it from "
|
||||
"tick/load schedules if applicable."
|
||||
),
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Script name to delete."
|
||||
}
|
||||
},
|
||||
"required": ["name"],
|
||||
"additionalProperties": False
|
||||
},
|
||||
"returns": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"ok": {"type": "boolean"}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "script.schedule",
|
||||
"description": (
|
||||
"Schedule a script to run automatically on tick (every game tick = 50ms) "
|
||||
"or on load (when server starts/reloads). Use tick for continuous effects, "
|
||||
"load for initialization. WARNING: tick functions run 20x/second — keep them "
|
||||
"lightweight or they will lag the server."
|
||||
),
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Script name to schedule."
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": ["tick", "load"],
|
||||
"description": "Schedule type."
|
||||
}
|
||||
},
|
||||
"required": ["name", "type"],
|
||||
"additionalProperties": False
|
||||
},
|
||||
"returns": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"ok": {"type": "boolean"}
|
||||
}
|
||||
}
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user