add option to generate new rooms
This commit is contained in:
parent
1fea9e9aa4
commit
bd42c115b4
|
@ -7,7 +7,6 @@ from dotenv import load_dotenv
|
||||||
from packit.agent import Agent, agent_easy_connect
|
from packit.agent import Agent, agent_easy_connect
|
||||||
from packit.utils import logger_with_colors
|
from packit.utils import logger_with_colors
|
||||||
|
|
||||||
from adventure.context import get_system_data, set_system_data
|
|
||||||
from adventure.utils.file import load_yaml
|
from adventure.utils.file import load_yaml
|
||||||
|
|
||||||
# configure logging
|
# configure logging
|
||||||
|
@ -29,9 +28,15 @@ logger = logger_with_colors(__name__) # , level="DEBUG")
|
||||||
load_dotenv(environ.get("ADVENTURE_ENV", ".env"), override=True)
|
load_dotenv(environ.get("ADVENTURE_ENV", ".env"), override=True)
|
||||||
|
|
||||||
if True:
|
if True:
|
||||||
from adventure.context import set_current_step, set_dungeon_master, subscribe
|
from adventure.context import (
|
||||||
|
get_system_data,
|
||||||
|
set_current_step,
|
||||||
|
set_dungeon_master,
|
||||||
|
set_system_data,
|
||||||
|
subscribe,
|
||||||
|
)
|
||||||
from adventure.game_system import GameSystem
|
from adventure.game_system import GameSystem
|
||||||
from adventure.generate import generate_world
|
from adventure.generate import generate_room, generate_world, link_rooms
|
||||||
from adventure.models.config import DEFAULT_CONFIG, Config
|
from adventure.models.config import DEFAULT_CONFIG, Config
|
||||||
from adventure.models.entity import World, WorldState
|
from adventure.models.entity import World, WorldState
|
||||||
from adventure.models.event import GenerateEvent
|
from adventure.models.event import GenerateEvent
|
||||||
|
@ -70,6 +75,12 @@ def parse_args():
|
||||||
nargs="*",
|
nargs="*",
|
||||||
help="Extra actions to include in the simulation",
|
help="Extra actions to include in the simulation",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--add-rooms",
|
||||||
|
default=0,
|
||||||
|
type=int,
|
||||||
|
help="The number of new rooms to generate before starting the simulation",
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--config",
|
"--config",
|
||||||
type=str,
|
type=str,
|
||||||
|
@ -200,10 +211,21 @@ def load_or_generate_world(
|
||||||
):
|
):
|
||||||
world_file = args.world + ".json"
|
world_file = args.world + ".json"
|
||||||
world_state_file = args.state or (args.world + ".state.json")
|
world_state_file = args.state or (args.world + ".state.json")
|
||||||
|
add_rooms = args.add_rooms
|
||||||
|
|
||||||
memory = {}
|
memory = {}
|
||||||
step = 0
|
step = 0
|
||||||
|
|
||||||
|
# prepare an agent for the world builder
|
||||||
|
llm = agent_easy_connect()
|
||||||
|
world_builder = Agent(
|
||||||
|
"World Builder",
|
||||||
|
f"You are an experienced game master creating a visually detailed world for a new adventure. "
|
||||||
|
f"{world_prompt.flavor}. The theme is: {world_prompt.theme}.",
|
||||||
|
{},
|
||||||
|
llm,
|
||||||
|
)
|
||||||
|
|
||||||
if path.exists(world_state_file):
|
if path.exists(world_state_file):
|
||||||
logger.info(f"loading world state from {world_state_file}")
|
logger.info(f"loading world state from {world_state_file}")
|
||||||
with open(world_state_file, "r") as f:
|
with open(world_state_file, "r") as f:
|
||||||
|
@ -223,15 +245,6 @@ def load_or_generate_world(
|
||||||
load_or_initialize_system_data(args, systems, world)
|
load_or_initialize_system_data(args, systems, world)
|
||||||
else:
|
else:
|
||||||
logger.info(f"generating a new world using theme: {world_prompt.theme}")
|
logger.info(f"generating a new world using theme: {world_prompt.theme}")
|
||||||
llm = agent_easy_connect()
|
|
||||||
world_builder = Agent(
|
|
||||||
"World Builder",
|
|
||||||
f"You are an experienced game master creating a visually detailed world for a new adventure. "
|
|
||||||
f"{world_prompt.flavor}. The theme is: {world_prompt.theme}.",
|
|
||||||
{},
|
|
||||||
llm,
|
|
||||||
)
|
|
||||||
|
|
||||||
world = generate_world(
|
world = generate_world(
|
||||||
world_builder,
|
world_builder,
|
||||||
args.world,
|
args.world,
|
||||||
|
@ -242,6 +255,16 @@ def load_or_generate_world(
|
||||||
save_world(world, world_file)
|
save_world(world, world_file)
|
||||||
save_system_data(args, systems)
|
save_system_data(args, systems)
|
||||||
|
|
||||||
|
new_rooms = []
|
||||||
|
for i in range(add_rooms):
|
||||||
|
logger.info(f"generating room {i + 1} of {add_rooms}")
|
||||||
|
room = generate_room(world_builder, world, systems)
|
||||||
|
new_rooms.append(room)
|
||||||
|
world.rooms.append(room)
|
||||||
|
|
||||||
|
if new_rooms:
|
||||||
|
link_rooms(world_builder, world, systems, new_rooms)
|
||||||
|
|
||||||
create_agents(world, memory=memory, players=players)
|
create_agents(world, memory=memory, players=players)
|
||||||
return (world, world_state_file, step)
|
return (world, world_state_file, step)
|
||||||
|
|
||||||
|
|
|
@ -20,11 +20,6 @@ class BotConfig:
|
||||||
discord: DiscordBotConfig
|
discord: DiscordBotConfig
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class PromptConfig:
|
|
||||||
prompts: Dict[str, str]
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class RenderConfig:
|
class RenderConfig:
|
||||||
cfg: int | IntRange
|
cfg: int | IntRange
|
||||||
|
@ -79,7 +74,6 @@ class WorldConfig:
|
||||||
@dataclass
|
@dataclass
|
||||||
class Config:
|
class Config:
|
||||||
bot: BotConfig
|
bot: BotConfig
|
||||||
prompt: PromptConfig
|
|
||||||
render: RenderConfig
|
render: RenderConfig
|
||||||
server: ServerConfig
|
server: ServerConfig
|
||||||
world: WorldConfig
|
world: WorldConfig
|
||||||
|
@ -87,9 +81,6 @@ class Config:
|
||||||
|
|
||||||
DEFAULT_CONFIG = Config(
|
DEFAULT_CONFIG = Config(
|
||||||
bot=BotConfig(discord=DiscordBotConfig(channels=["adventure"])),
|
bot=BotConfig(discord=DiscordBotConfig(channels=["adventure"])),
|
||||||
prompt=PromptConfig(
|
|
||||||
prompts={},
|
|
||||||
),
|
|
||||||
render=RenderConfig(
|
render=RenderConfig(
|
||||||
cfg=IntRange(min=5, max=8),
|
cfg=IntRange(min=5, max=8),
|
||||||
checkpoints=[
|
checkpoints=[
|
||||||
|
|
Loading…
Reference in New Issue