1
0
Fork 0

add more prompt filters, pass more data to initial prompt, test making characters aware of the game
Run Docker Build / build (push) Successful in 17s Details
Run Python Build / build (push) Successful in 27s Details

This commit is contained in:
Sean Sube 2024-06-05 19:05:21 -05:00
parent af69d5b6b0
commit 9dd3a73c2d
Signed by: ssube
GPG Key ID: 3EED7B957D362AF1
14 changed files with 66 additions and 18 deletions

View File

@ -192,6 +192,14 @@ prompts:
action_check_calendar_each: | action_check_calendar_each: |
{{name}} will happen in {{turns}} turn {{name}} will happen in {{turns}} turn
# agent stuff
world_agent_backstory: |
{{ character.backstory }}
world_agent_backstory_other: |
You are {{character | name}}, a character in a text-based role-playing game. Your character's backstory is:
{{ character.backstory }}
Explore the world, interact with other characters, and complete quests to advance the story.
# default dungeon master # default dungeon master
world_default_dungeon_master: | world_default_dungeon_master: |
You are the dungeon master in charge of creating an engaging fantasy world full of interesting characters who You are the dungeon master in charge of creating an engaging fantasy world full of interesting characters who
@ -201,10 +209,10 @@ prompts:
# world generation # world generation
world_generate_dungeon_master: | world_generate_dungeon_master: |
You are an experienced dungeon master creating a visually detailed world for a new adventure. Be creative and You are an experienced dungeon master creating a visually detailed world for a new adventure set in {{theme}}. Be
original, creating a world that is visually detailed and full of curious details. Do not repeat yourself unless you creative and original, creating a world that is visually detailed and full of curious details. Do not repeat
are given the same prompt with the same characters, room, and context. {{flavor}}. The theme is: yourself unless you are given the same prompt with the same characters, room, and context. {{flavor}}. The theme of
{{theme}}. the world must be: {{theme}}.
world_generate_world_broadcast_theme: | world_generate_world_broadcast_theme: |
Generating a {{theme}} with {{room_count}} rooms Generating a {{theme}} with {{room_count}} rooms

View File

@ -11,7 +11,6 @@ from taleweave.context import (
) )
from taleweave.errors import ActionError from taleweave.errors import ActionError
from taleweave.utils.conversation import loop_conversation from taleweave.utils.conversation import loop_conversation
from taleweave.utils.prompt import format_prompt
from taleweave.utils.search import ( from taleweave.utils.search import (
find_character_in_room, find_character_in_room,
find_item_in_character, find_item_in_character,
@ -20,6 +19,7 @@ from taleweave.utils.search import (
find_room, find_room,
) )
from taleweave.utils.string import normalize_name from taleweave.utils.string import normalize_name
from taleweave.utils.template import format_prompt
logger = getLogger(__name__) logger = getLogger(__name__)

View File

@ -22,9 +22,9 @@ from taleweave.generate import (
link_rooms, link_rooms,
) )
from taleweave.utils.effect import apply_effects, is_effect_ready from taleweave.utils.effect import apply_effects, is_effect_ready
from taleweave.utils.prompt import format_prompt
from taleweave.utils.search import find_character_in_room from taleweave.utils.search import find_character_in_room
from taleweave.utils.string import normalize_name from taleweave.utils.string import normalize_name
from taleweave.utils.template import format_prompt
from taleweave.utils.world import describe_entity from taleweave.utils.world import describe_entity
logger = getLogger(__name__) logger = getLogger(__name__)

View File

@ -8,7 +8,7 @@ from taleweave.context import (
from taleweave.errors import ActionError from taleweave.errors import ActionError
from taleweave.models.planning import CalendarEvent from taleweave.models.planning import CalendarEvent
from taleweave.utils.planning import get_recent_notes from taleweave.utils.planning import get_recent_notes
from taleweave.utils.prompt import format_prompt from taleweave.utils.template import format_prompt
def take_note(fact: str): def take_note(fact: str):

View File

@ -7,8 +7,8 @@ from taleweave.systems.quest import (
get_quests_for_character, get_quests_for_character,
set_active_quest, set_active_quest,
) )
from taleweave.utils.prompt import format_prompt
from taleweave.utils.search import find_character_in_room from taleweave.utils.search import find_character_in_room
from taleweave.utils.template import format_prompt
def accept_quest(character: str, quest: str) -> str: def accept_quest(character: str, quest: str) -> str:

View File

@ -36,8 +36,8 @@ from taleweave.player import (
set_player, set_player,
) )
from taleweave.render.comfy import render_event from taleweave.render.comfy import render_event
from taleweave.utils.prompt import format_prompt
from taleweave.utils.search import list_characters from taleweave.utils.search import list_characters
from taleweave.utils.template import format_prompt
logger = getLogger(__name__) logger = getLogger(__name__)
client = None client = None

View File

@ -25,7 +25,6 @@ from taleweave.models.entity import Character, Item, Portal, Room, World, WorldE
from taleweave.models.event import GenerateEvent from taleweave.models.event import GenerateEvent
from taleweave.utils import try_parse_float, try_parse_int from taleweave.utils import try_parse_float, try_parse_int
from taleweave.utils.effect import resolve_int_range from taleweave.utils.effect import resolve_int_range
from taleweave.utils.prompt import format_prompt
from taleweave.utils.search import ( from taleweave.utils.search import (
list_characters, list_characters,
list_characters_in_room, list_characters_in_room,
@ -35,6 +34,7 @@ from taleweave.utils.search import (
list_rooms, list_rooms,
) )
from taleweave.utils.string import normalize_name from taleweave.utils.string import normalize_name
from taleweave.utils.template import format_prompt
logger = getLogger(__name__) logger = getLogger(__name__)
@ -571,7 +571,13 @@ def generate_world(
world_config = get_world_config() world_config = get_world_config()
room_count = room_count or resolve_int_range(world_config.size.rooms) or 0 room_count = room_count or resolve_int_range(world_config.size.rooms) or 0
broadcast_generated(message=format_prompt("world_generate_world_broadcast_theme")) broadcast_generated(
message=format_prompt(
"world_generate_world_broadcast_theme",
theme=theme,
room_count=room_count,
)
)
world = World(name=name, rooms=[], theme=theme, order=[]) world = World(name=name, rooms=[], theme=theme, order=[])
set_current_world(world) set_current_world(world)

View File

@ -50,7 +50,7 @@ if True:
from taleweave.plugins import load_plugin from taleweave.plugins import load_plugin
from taleweave.simulate import simulate_world from taleweave.simulate import simulate_world
from taleweave.state import create_agents, save_world, save_world_state from taleweave.state import create_agents, save_world, save_world_state
from taleweave.utils.prompt import format_prompt from taleweave.utils.template import format_prompt
# start the debugger, if needed # start the debugger, if needed
if environ.get("DEBUG", "false").lower() == "true": if environ.get("DEBUG", "false").lower() == "true":

View File

@ -51,8 +51,8 @@ from taleweave.models.event import ActionEvent, ResultEvent
from taleweave.utils.conversation import make_keyword_condition, summarize_room from taleweave.utils.conversation import make_keyword_condition, summarize_room
from taleweave.utils.effect import expire_effects from taleweave.utils.effect import expire_effects
from taleweave.utils.planning import expire_events, get_upcoming_events from taleweave.utils.planning import expire_events, get_upcoming_events
from taleweave.utils.prompt import format_prompt
from taleweave.utils.search import find_containing_room from taleweave.utils.search import find_containing_room
from taleweave.utils.template import format_prompt
from taleweave.utils.world import format_attributes from taleweave.utils.world import format_attributes
logger = getLogger(__name__) logger = getLogger(__name__)

View File

@ -14,6 +14,7 @@ from taleweave.context import (
) )
from taleweave.models.entity import World from taleweave.models.entity import World
from taleweave.player import LocalPlayer from taleweave.player import LocalPlayer
from taleweave.utils.template import format_prompt
def create_agents( def create_agents(
@ -31,7 +32,10 @@ def create_agents(
agent_memory = restore_memory(memory.get(character.name, [])) agent_memory = restore_memory(memory.get(character.name, []))
agent.load_history(agent_memory) agent.load_history(agent_memory)
else: else:
agent = Agent(character.name, character.backstory, {}, llm) backstory = format_prompt(
"world_agent_backstory", character=character, world=world
)
agent = Agent(character.name, backstory, {}, llm)
agent.memory = restore_memory(memory.get(character.name, [])) agent.memory = restore_memory(memory.get(character.name, []))
set_character_agent(character.name, character, agent) set_character_agent(character.name, character, agent)

View File

@ -5,8 +5,8 @@ from taleweave.context import get_current_world, get_prompt_library, subscribe
from taleweave.game_system import FormatPerspective, GameSystem from taleweave.game_system import FormatPerspective, GameSystem
from taleweave.models.entity import Character, Room, World, WorldEntity from taleweave.models.entity import Character, Room, World, WorldEntity
from taleweave.models.event import ActionEvent, GameEvent from taleweave.models.event import ActionEvent, GameEvent
from taleweave.utils.prompt import format_str
from taleweave.utils.search import find_containing_room, find_portal, find_room from taleweave.utils.search import find_containing_room, find_portal, find_room
from taleweave.utils.template import format_str
logger = getLogger(__name__) logger = getLogger(__name__)

View File

@ -11,7 +11,7 @@ from packit.utils import could_be_json
from taleweave.context import broadcast, get_game_config from taleweave.context import broadcast, get_game_config
from taleweave.models.entity import Character, Room from taleweave.models.entity import Character, Room
from taleweave.models.event import ReplyEvent from taleweave.models.event import ReplyEvent
from taleweave.utils.prompt import format_str from taleweave.utils.template import format_str
from .string import and_list, normalize_name from .string import and_list, normalize_name

View File

@ -8,11 +8,41 @@ from taleweave.utils.world import describe_entity, name_entity
logger = getLogger(__name__) logger = getLogger(__name__)
def a_prefix(name: str) -> str:
first_word = name.split(" ")[0]
if first_word.lower() in ["a", "an", "the"]:
return name
if name[0].lower() in "aeiou":
return f"an {name}"
return f"a {name}"
def the_prefix(name: str) -> str:
first_word = name.split(" ")[0]
if first_word.lower() in ["a", "an", "the"]:
return name
return f"the {name}"
def punctuate(name: str, suffix: str) -> str:
if name[-1] in [".", "!", "?", suffix]:
return name
return f"{name}{suffix}"
jinja_env = Environment() jinja_env = Environment()
jinja_env.filters["describe"] = describe_entity jinja_env.filters["describe"] = describe_entity
jinja_env.filters["name"] = name_entity jinja_env.filters["name"] = name_entity
jinja_env.filters["and_list"] = and_list jinja_env.filters["and_list"] = and_list
jinja_env.filters["or_list"] = or_list jinja_env.filters["or_list"] = or_list
jinja_env.filters["a_prefix"] = a_prefix
jinja_env.filters["the_prefix"] = the_prefix
jinja_env.filters["punctuate"] = punctuate
def format_prompt(prompt_key: str, **kwargs) -> str: def format_prompt(prompt_key: str, **kwargs) -> str:

View File

@ -12,9 +12,9 @@ templates:
include colorful characters and make sure they will fully utilize all of the actions available to them include colorful characters and make sure they will fully utilize all of the actions available to them
in this world, exploring and interacting with each other in this world, exploring and interacting with each other
- name: jurassic-park - name: jurassic-park
theme: opening scenes from Jurassic Park theme: opening scenes from the 1993 film Jurassic Park
flavor: | flavor: |
follow the script of the film Jurassic Park exactly. do not deviate from the script in any way. follow the script of the 1993 film Jurassic Park exactly. do not deviate from the script in any way.
include accurate characters and instruct them to utilize all of the actions available to them in this world include accurate characters and instruct them to utilize all of the actions available to them in this world
- name: star-wars - name: star-wars
theme: opening scenes from the 1977 film Star Wars theme: opening scenes from the 1977 film Star Wars