75 lines
2.9 KiB
Python
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!")
|