1
0
Fork 0

include player name and actions in discord prompt, include room count in generator prompt
Run Docker Build / build (push) Successful in 12s Details
Run Python Build / build (push) Successful in 26s Details

This commit is contained in:
Sean Sube 2024-06-05 08:58:35 -05:00
parent 5a32bd9fc4
commit af69d5b6b0
Signed by: ssube
GPG Key ID: 3EED7B957D362AF1
4 changed files with 43 additions and 9 deletions

View File

@ -427,9 +427,33 @@ def embed_from_player(event: PlayerEvent):
def embed_from_prompt(event: PromptEvent): def embed_from_prompt(event: PromptEvent):
# TODO: ping the player
prompt_embed = Embed(title=event.room.name, description=event.character.name) prompt_embed = Embed(title=event.room.name, description=event.character.name)
prompt_embed.add_field(name="Prompt", value=truncate(event.prompt)) prompt_embed.add_field(name="Prompt", value=truncate(event.prompt))
if has_player(event.character.name):
players = list_players()
user = next(
(
player
for player, character in players.items()
if character == event.character.name
),
None,
)
if user:
# TODO: use Discord user.mention to ping the user
prompt_embed.add_field(
name="Player",
value=user,
)
for action in event.actions:
# TODO: use a prompt template to summarize actions
action_name = action["function"]["name"]
action_description = action["function"]["description"]
prompt_embed.add_field(name=action_name, value=action_description)
return prompt_embed return prompt_embed

View File

@ -34,6 +34,8 @@ current_character: Character | None = None
dungeon_master: Agent | None = None dungeon_master: Agent | None = None
# game context # game context
# TODO: wrap this into a class that can be passed around
character_agents: Dict[str, Tuple[Character, Agent]] = {}
event_emitter = EventEmitter() event_emitter = EventEmitter()
game_config: Config = DEFAULT_CONFIG game_config: Config = DEFAULT_CONFIG
game_systems: List[GameSystem] = [] game_systems: List[GameSystem] = []
@ -41,9 +43,6 @@ prompt_library: PromptLibrary = PromptLibrary(prompts={})
system_data: Dict[str, Any] = {} system_data: Dict[str, Any] = {}
# TODO: where should this one go?
character_agents: Dict[str, Tuple[Character, Agent]] = {}
STRING_EVENT_TYPE = "message" STRING_EVENT_TYPE = "message"

View File

@ -38,6 +38,9 @@ from taleweave.utils.string import normalize_name
logger = getLogger(__name__) logger = getLogger(__name__)
MAX_NAME_LENGTH = 50
DISALLOWED_PUNCTUATION = ['"', ":"]
def get_world_config(): def get_world_config():
config = get_game_config() config = get_game_config()
@ -58,12 +61,12 @@ def duplicate_name_parser(existing_names: List[str]):
format_prompt("world_generate_error_name_json", name=value) format_prompt("world_generate_error_name_json", name=value)
) )
if '"' in value or ":" in value: if any(p in value for p in DISALLOWED_PUNCTUATION):
raise ValueError( raise ValueError(
format_prompt("world_generate_error_name_punctuation", name=value) format_prompt("world_generate_error_name_punctuation", name=value)
) )
if len(value) > 50: if len(value) > MAX_NAME_LENGTH:
raise ValueError( raise ValueError(
format_prompt("world_generate_error_name_length", name=value) format_prompt("world_generate_error_name_length", name=value)
) )
@ -99,6 +102,8 @@ def generate_room(
agent: Agent, agent: Agent,
world: World, world: World,
systems: List[GameSystem], systems: List[GameSystem],
current_room: int | None = None,
total_rooms: int | None = None,
) -> Room: ) -> Room:
existing_rooms = [room.name for room in list_rooms(world)] existing_rooms = [room.name for room in list_rooms(world)]
@ -108,6 +113,8 @@ def generate_room(
context={ context={
"world_theme": world.theme, "world_theme": world.theme,
"existing_rooms": existing_rooms, "existing_rooms": existing_rooms,
"current_room": current_room,
"total_rooms": total_rooms,
}, },
result_parser=duplicate_name_parser(existing_rooms), result_parser=duplicate_name_parser(existing_rooms),
toolbox=None, toolbox=None,
@ -575,9 +582,11 @@ def generate_world(
set_system_data(system.name, data) set_system_data(system.name, data)
# generate the rooms # generate the rooms
for _ in range(room_count): for i in range(room_count):
try: try:
room = generate_room(agent, world, systems) room = generate_room(
agent, world, systems, current_room=i, total_rooms=room_count
)
generate_system_attributes(agent, world, room, systems) generate_system_attributes(agent, world, room, systems)
broadcast_generated(entity=room) broadcast_generated(entity=room)
world.rooms.append(room) world.rooms.append(room)

View File

@ -299,7 +299,9 @@ def load_or_generate_world(
new_rooms = [] new_rooms = []
for i in range(add_rooms): for i in range(add_rooms):
logger.info(f"generating room {i + 1} of {add_rooms}") logger.info(f"generating room {i + 1} of {add_rooms}")
room = generate_room(world_builder, world, systems) room = generate_room(
world_builder, world, systems, current_room=i, total_rooms=add_rooms
)
new_rooms.append(room) new_rooms.append(room)
world.rooms.append(room) world.rooms.append(room)