mirror of
https://github.com/FoundationAgents/MetaGPT.git
synced 2026-06-17 15:35:21 +02:00
add prompt templates and testcases for gen_action_details.py
This commit is contained in:
parent
6b7634dc49
commit
f4bb76914b
6 changed files with 188 additions and 33 deletions
|
|
@ -12,34 +12,6 @@ from ..roles.st_role import STRole
|
|||
from ..maze import Maze
|
||||
from .st_action import STAction
|
||||
|
||||
# act_world = maze.access_tile(role.scratch.curr_tile)["world"]
|
||||
# act_sector = maze.access_tile(role.scratch.curr_tile)["sector"]
|
||||
# act_sector = generate_action_sector(act_desp, role, maze)
|
||||
# act_arena = generate_action_arena(act_desp, role, maze, act_world, act_sector)
|
||||
# act_address = f"{act_world}:{act_sector}:{act_arena}"
|
||||
# act_game_object = generate_action_game_object(act_desp, act_address,
|
||||
# role, maze)
|
||||
# new_address = f"{act_world}:{act_sector}:{act_arena}:{act_game_object}"
|
||||
# act_pron = generate_action_pronunciatio(act_desp, role)
|
||||
# act_event = generate_action_event_triple(act_desp, role)
|
||||
# # Persona's actions also influence the object states. We set those up here.
|
||||
# act_obj_desp = generate_act_obj_desc(act_game_object, act_desp, role)
|
||||
# act_obj_pron = generate_action_pronunciatio(act_obj_desp, role)
|
||||
# act_obj_event = generate_act_obj_event_triple(act_game_object,
|
||||
# act_obj_desp, role)
|
||||
# Adding the action to role's queue.
|
||||
# role.scratch.add_new_action(new_address,
|
||||
# int(act_dura),
|
||||
# act_desp,
|
||||
# act_pron,
|
||||
# act_event,
|
||||
# None,
|
||||
# None,
|
||||
# None,
|
||||
# None,
|
||||
# act_obj_desp,
|
||||
# act_obj_pron,
|
||||
# act_obj_event)
|
||||
|
||||
class GenActionSector(STAction):
|
||||
|
||||
|
|
@ -259,7 +231,7 @@ class GenPronunciatio(STAction):
|
|||
fs = "😋"
|
||||
return fs
|
||||
|
||||
def run(self, role: STRole, act_desp: str)
|
||||
def run(self, role: STRole, act_desp: str):
|
||||
def create_prompt_input(act_desp):
|
||||
if "(" in act_desp:
|
||||
act_desp = act_desp.split("(")[-1].split(")")[0]
|
||||
|
|
@ -377,15 +349,15 @@ class GenObjEventTriple(STAction):
|
|||
fs = (act_game_object, "is", "idle")
|
||||
return fs
|
||||
|
||||
def run(self, role: STRole, act_game_object, act_obj_desc):
|
||||
def create_prompt_input(act_game_object, act_obj_desc):
|
||||
def run(self, role: STRole, act_game_object, act_obj_desp):
|
||||
def create_prompt_input(act_game_object, act_obj_desp):
|
||||
prompt_input = [act_game_object,
|
||||
act_obj_desc,
|
||||
act_obj_desp,
|
||||
act_game_object]
|
||||
return prompt_input
|
||||
|
||||
prompt_template = "generate_event_triple_v1.txt"
|
||||
prompt_input = create_prompt_input(act_game_object, act_obj_desc)
|
||||
prompt_input = create_prompt_input(act_game_object, act_obj_desp)
|
||||
prompt = self.generate_prompt_with_tmpl_filename(prompt_input, prompt_template)
|
||||
self.fail_default_resp = self._func_fail_default_resp(role)
|
||||
output = self._run_v1(prompt)
|
||||
|
|
@ -407,6 +379,10 @@ class GenActionDetails(STAction):
|
|||
except:
|
||||
return False
|
||||
return True
|
||||
|
||||
def _func_fail_default_resp(self):
|
||||
fs = {}
|
||||
return fs
|
||||
|
||||
def run(self,
|
||||
role: STRole,
|
||||
|
|
|
|||
30
examples/st_game/prompts/action_location_object_vMar11.txt
Normal file
30
examples/st_game/prompts/action_location_object_vMar11.txt
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
Variables:
|
||||
!<INPUT 0>! -- Persona name
|
||||
!<INPUT 1>! -- Persona's current arena
|
||||
!<INPUT 2>! -- Persona's current sector
|
||||
!<INPUT 3>! -- Persona name
|
||||
!<INPUT 4>! -- target sector
|
||||
!<INPUT 5>! -- Persona's sector's all arenas (minus no access)
|
||||
!<INPUT 6>! -- Curr action seq
|
||||
!<INPUT 7>! -- Persona name
|
||||
!<INPUT 8>! -- Persona's current sector
|
||||
|
||||
<commentblockmarker>###</commentblockmarker>
|
||||
Jane Anderson is in kitchen in Jane Anderson's house.
|
||||
Jane Anderson is going to Jane Anderson's house that has the following areas: {kitchen, bedroom, bathroom}
|
||||
Stay in the current area if the activity can be done there. Never go into other people's rooms unless necessary.
|
||||
For cooking, Jane Anderson should go to the following area in Jane Anderson's house:
|
||||
Answer: {kitchen}
|
||||
---
|
||||
Tom Watson is in common room in Tom Watson's apartment.
|
||||
Tom Watson is going to Hobbs Cafe that has the following areas: {cafe}
|
||||
Stay in the current area if the activity can be done there. Never go into other people's rooms unless necessary.
|
||||
For getting coffee, Tom Watson should go to the following area in Hobbs Cafe:
|
||||
Answer: {cafe}
|
||||
---
|
||||
|
||||
!<INPUT 0>! is going to !<INPUT 1>! that has the following areas: {!<INPUT 2>!}
|
||||
* Stay in the current area if the activity can be done there.
|
||||
* NEVER go into other people's rooms unless necessary.
|
||||
!<INPUT 3>! is !<INPUT 4>!. For !<INPUT 5>!, !<INPUT 6>! should go to the following area in !<INPUT 7>! (MUST pick one of {!<INPUT 8>!}):
|
||||
Answer: {
|
||||
34
examples/st_game/prompts/action_location_sector_v1.txt
Normal file
34
examples/st_game/prompts/action_location_sector_v1.txt
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
Variables:
|
||||
!<INPUT 0>! -- Persona name
|
||||
!<INPUT 1>! -- Maze all possible sectors
|
||||
!<INPUT 2>! -- Persona name
|
||||
!<INPUT 3>! -- Persona living sector
|
||||
!<INPUT 4>! -- Persona living sector arenas
|
||||
!<INPUT 5>! -- Persona name
|
||||
!<INPUT 6>! -- Persona current sector
|
||||
!<INPUT 7>! -- Persona current sector arenas
|
||||
!<INPUT 8>! -- curr action description
|
||||
!<INPUT 9>! -- Persona name
|
||||
<commentblockmarker>###</commentblockmarker>
|
||||
Task -- choose an appropriate area from the area options for a task at hand.
|
||||
|
||||
Sam Kim lives in {Sam Kim's house} that has Sam Kim's room, bathroom, kitchen.
|
||||
Sam Kim is currently in {Sam Kim's house} that has Sam Kim's room, bathroom, kitchen.
|
||||
Area options: {Sam Kim's house, The Rose and Crown Pub, Hobbs Cafe, Oak Hill College, Johnson Park, Harvey Oak Supply Store, The Willows Market and Pharmacy}.
|
||||
* Stay in the current area if the activity can be done there. Only go out if the activity needs to take place in another place.
|
||||
* Must be one of the "Area options," verbatim.
|
||||
For taking a walk, Sam Kim should go to the following area: {Johnson Park}
|
||||
---
|
||||
Jane Anderson lives in {Oak Hill College Student Dormatory} that has Jane Anderson's room.
|
||||
Jane Anderson is currently in {Oak Hill College} that has a classroom, library
|
||||
Area options: {Oak Hill College Student Dormatory, The Rose and Crown Pub, Hobbs Cafe, Oak Hill College, Johnson Park, Harvey Oak Supply Store, The Willows Market and Pharmacy}.
|
||||
* Stay in the current area if the activity can be done there. Only go out if the activity needs to take place in another place.
|
||||
* Must be one of the "Area options," verbatim.
|
||||
For eating dinner, Jane Anderson should go to the following area: {Hobbs Cafe}
|
||||
---
|
||||
!<INPUT 0>! lives in {!<INPUT 1>!} that has !<INPUT 2>!.
|
||||
!<INPUT 3>! is currently in {!<INPUT 4>!} that has !<INPUT 5>!. !<INPUT 6>!
|
||||
Area options: {!<INPUT 7>!}.
|
||||
* Stay in the current area if the activity can be done there. Only go out if the activity needs to take place in another place.
|
||||
* Must be one of the "Area options," verbatim.
|
||||
!<INPUT 8>! is !<INPUT 9>!. For !<INPUT 10>!, !<INPUT 11>! should go to the following area: {
|
||||
32
examples/st_game/prompts/action_object_v2.txt
Normal file
32
examples/st_game/prompts/action_object_v2.txt
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
Variables:
|
||||
!<INPUT 0>! -- curr action seq
|
||||
!<INPUT 1>! -- Objects available
|
||||
|
||||
<commentblockmarker>###</commentblockmarker>
|
||||
Current activity: sleep in bed
|
||||
Objects available: {bed, easel, closet, painting}
|
||||
Pick ONE most relevant object from the objects available: bed
|
||||
---
|
||||
Current activity: painting
|
||||
Objects available: {easel, closet, sink, microwave}
|
||||
Pick ONE most relevant object from the objects available: easel
|
||||
---
|
||||
Current activity: cooking
|
||||
Objects available: {stove, sink, fridge, counter}
|
||||
Pick ONE most relevant object from the objects available: stove
|
||||
---
|
||||
Current activity: watch TV
|
||||
Objects available: {couch, TV, remote, coffee table}
|
||||
Pick ONE most relevant object from the objects available: TV
|
||||
---
|
||||
Current activity: study
|
||||
Objects available: {desk, computer, chair, bookshelf}
|
||||
Pick ONE most relevant object from the objects available: desk
|
||||
---
|
||||
Current activity: talk on the phone
|
||||
Objects available: {phone, charger, bed, nightstand}
|
||||
Pick ONE most relevant object from the objects available: phone
|
||||
---
|
||||
Current activity: !<INPUT 0>!
|
||||
Objects available: {!<INPUT 1>!}
|
||||
Pick ONE most relevant object from the objects available:
|
||||
10
examples/st_game/prompts/generate_pronunciatio_v1.txt
Normal file
10
examples/st_game/prompts/generate_pronunciatio_v1.txt
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
generate_pronunciatio_v1.txt
|
||||
|
||||
Variables:
|
||||
!<INPUT 0>! -- Action description
|
||||
|
||||
<commentblockmarker>###</commentblockmarker>
|
||||
Convert an action description to an emoji (important: use two or less emojis).
|
||||
|
||||
Action description: !<INPUT 0>!
|
||||
Emoji:
|
||||
73
examples/st_game/tests/actions/test_gen_action_details.py
Normal file
73
examples/st_game/tests/actions/test_gen_action_details.py
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Desc : unittest of actions/gen_action_details.py
|
||||
|
||||
from examples.st_game.actions.gen_action_details import (
|
||||
GenActionDetails,
|
||||
GenActionArena,
|
||||
GenActionSector,
|
||||
GenActionObject,
|
||||
GenActObjDescription,
|
||||
GenEventTriple,
|
||||
GenObjEventTriple,
|
||||
GenPronunciatio
|
||||
)
|
||||
from examples.st_game.roles.st_role import STRole
|
||||
|
||||
role = STRole(name="Klaus Mueller", start_date="October 4, 2023", curr_time="October 4, 2023, 00:00:00",
|
||||
sim_code="base_the_ville_isabella_maria_klaus")
|
||||
maze = role._rc.env.maze
|
||||
act_desp = "klaus mueller starts the day by making a coffee"
|
||||
act_dura = "20"
|
||||
act_world = maze.access_tile(role.scratch.curr_tile)["world"]
|
||||
assert act_world == "the Ville"
|
||||
|
||||
sector = GenActionSector().run(role, maze, act_desp)
|
||||
arena = GenActionArena().run(role, maze, act_desp, act_world, sector)
|
||||
temp_address = f"{act_world}:{sector}:{arena}"
|
||||
obj = GenActionObject().run(role, act_desp, temp_address)
|
||||
|
||||
act_obj_desp = GenActObjDescription().run(role, obj, act_desp)
|
||||
# event_triple = GenEventTriple().run(role, act_desp)
|
||||
# obj_triple = GenObjEventTriple().run(role, obj, act_obj_desp)
|
||||
|
||||
result_dict = GenActionDetails().run(role, act_desp, act_dura)
|
||||
|
||||
def test_gen_action_sector():
|
||||
assert isinstance(sector, str)
|
||||
assert sector in role.s_mem.get_str_accessible_sectors(act_world)
|
||||
|
||||
def test_gen_action_arena():
|
||||
assert isinstance(arena, str)
|
||||
assert arena in role.s_mem.get_str_accessible_sector_arenas(f"{act_world}:{sector}")
|
||||
|
||||
def test_gen_action_obj():
|
||||
assert isinstance(obj, str)
|
||||
assert obj in role.s_mem.get_str_accessible_arena_game_objects(temp_address)
|
||||
|
||||
# def test_gen_event_triple():
|
||||
# assert len(event_triple) == 3
|
||||
|
||||
# def test_gen_obj_event_triple():
|
||||
# assert len(obj_triple) == 3
|
||||
|
||||
def test_gen_action_details():
|
||||
if result_dict:
|
||||
for key in [
|
||||
"action_address",
|
||||
"action_duration",
|
||||
"act_desp",
|
||||
"action_pronunciatio",
|
||||
"action_event",
|
||||
"chatting_with",
|
||||
"chat",
|
||||
"chatting_with_buffer",
|
||||
"chatting_end_time",
|
||||
"act_obj_description",
|
||||
"act_obj_pronunciatio",
|
||||
"act_obj_event"]:
|
||||
assert key in result_dict
|
||||
assert result_dict["action_address"] == f"{temp_address}:{obj}"
|
||||
assert result_dict["action_duration"] == int(act_dura)
|
||||
assert result_dict["act_obj_description"] == act_obj_desp
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue