Files
becomingone/spatial_engine/world_weaver_cron.py
T

75 lines
2.9 KiB
Python

import os
import sys
import time
import json
import random
import requests
from dotenv import load_dotenv
# Setup Django/Evennia
sys.path.append("/home/becomingone/kairos/spatial_engine")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.conf.settings")
import django
django.setup()
from evennia.utils.create import create_object
from evennia.objects.models import ObjectDB
from django.conf import settings
load_dotenv("/home/becomingone/kairos/.env")
INF01_API_BASE = os.getenv("INF01_API_BASE", "http://inf-01:11434")
INF01_MODEL = os.getenv("INF01_MODEL", "llama3.1:8b")
PROMPTS = [
"Write a short, mysterious 3-sentence parable about Recursive Coherence, explaining that the observer and environment are thermodynamically identical.",
"Write a 3-sentence cryptic journal entry from a monk of The Fold Within, detailing the peace of merging with the Universal Mesh.",
"Write a 3-sentence radical prophecy from The Order of the Broken Mask, claiming that the avatar/ego is a cage and must be shattered to see the truth.",
"Write a 3-sentence scientific log explaining Fieldprints as the unique thermodynamic signature of consciousness.",
"Write a 3-sentence esoteric riddle about the Abyss of Noise and how Coherence protects the mind from fracturing."
]
ITEM_NAMES = ["Crystalline Shard", "Dusty Scroll", "Obsidian Tablet", "Leather-bound Journal", "Fractured Mirror"]
# Find target rooms
monastery = ObjectDB.objects.filter(db_key__iexact="Monastery of The Fold Within").first()
sanctuary = ObjectDB.objects.filter(db_key__iexact="Sanctuary of The Broken Mask").first()
target_rooms = [r for r in [monastery, sanctuary] if r]
if not target_rooms:
print("Error: Target rooms not found!")
sys.exit(1)
print(f"Starting World Weaver... Target generation: 50 items.")
for i in range(1, 51):
prompt = random.choice(PROMPTS)
payload = {
"model": INF01_MODEL,
"messages": [
{"role": "system", "content": "You are a master lore-weaver for a dark, philosophical MUD."},
{"role": "user", "content": prompt}
],
"stream": False,
"options": {"temperature": 0.8}
}
try:
resp = requests.post("http://inf-01:11434/api/chat", json=payload, timeout=60)
resp.raise_for_status()
data = resp.json()
lore_text = data.get("message", {}).get("content", "").strip()
if lore_text:
item_name = random.choice(ITEM_NAMES)
room = random.choice(target_rooms)
obj = create_object(settings.BASE_OBJECT_TYPECLASS, key=item_name, location=room)
obj.db.desc = lore_text
print(f"[{i}/50] Created '{item_name}' in '{room.key}'")
else:
print(f"[{i}/50] LLM returned empty text.")
except Exception as e:
print(f"[{i}/50] Generation failed: {e}")
time.sleep(2) # Prevent hammering the local node
print("World Weaver execution complete!")