add more prompt filters, pass more data to initial prompt, test making characters aware of the game
This commit is contained in:
parent
af69d5b6b0
commit
9dd3a73c2d
|
@ -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
|
||||||
|
|
|
@ -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__)
|
||||||
|
|
||||||
|
|
|
@ -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__)
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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":
|
||||||
|
|
|
@ -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__)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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__)
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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:
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue