agent_functions.py 11 KB
Newer Older
Lianmin Zheng's avatar
Lianmin Zheng committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import sglang as sgl

# here are the top five agent functions contributing ~70% LLM calls
# reference: https://github.com/joonspk-research/generative_agents/


@sgl.function
def poignancy_event(s, persona_name, persona_iss, event):
    s += "Here is a brief description of " + persona_name + ".\n"
    s += persona_iss + "\n"
    s += "On the scale of 1 to 10, where 1 is purely mundane (e.g., brushing teeth, making bed) and 10 is extremely poignant (e.g., a break up, college acceptance), rate the likely poignancy of the following event for"
    s += persona_name + ".\n\n"
    s += "Event: " + event
    s += "Rate (return a number between 1 to 10):"
    s += sgl.gen(name="Rate", max_tokens=2)


def poignancy_event_prompt(persona_name, persona_iss, event):
    # return prompt and max_tokens
    s = ""
    s += "Here is a brief description of " + persona_name + ".\n"
    s += persona_iss + "\n"
    s += "On the scale of 1 to 10, where 1 is purely mundane (e.g., brushing teeth, making bed) and 10 is extremely poignant (e.g., a break up, college acceptance), rate the likely poignancy of the following event for"
    s += persona_name + ".\n\n"
    s += "Event: " + event
    s += "Rate (return a number between 1 to 10):"
    return {"prompt": s, "max_tokens": 2, "stop": None}


@sgl.function
def generate_event_triple(s, persona_name, action):
    s += """Task: Turn the input into (subject, predicate, object).
33
34
35
Input: Sam Johnson is eating breakfast.
Output: (Dolores Murphy, eat, breakfast)
---
Lianmin Zheng's avatar
Lianmin Zheng committed
36
37
38
Input: Joon Park is brewing coffee.
Output: (Joon Park, brew, coffee)
---
39
Input: Jane Cook is sleeping.
Lianmin Zheng's avatar
Lianmin Zheng committed
40
41
Output: (Jane Cook, is, sleep)
---
42
Input: Michael Bernstein is writing email on a computer.
Lianmin Zheng's avatar
Lianmin Zheng committed
43
44
Output: (Michael Bernstein, write, email)
---
45
Input: Percy Liang is teaching students in a classroom.
Lianmin Zheng's avatar
Lianmin Zheng committed
46
47
Output: (Percy Liang, teach, students)
---
48
Input: Merrie Morris is running on a treadmill.
Lianmin Zheng's avatar
Lianmin Zheng committed
49
50
51
52
53
54
55
56
57
58
Output: (Merrie Morris, run, treadmill)
---"""
    s += persona_name + "is" + action + ".\n"
    s += "(" + persona_name + ","
    s += sgl.gen(name="Triple", max_tokens=20, stop=")")


def generate_event_triple_prompt(persona_name, action):
    s = ""
    s += """Task: Turn the input into (subject, predicate, object).
59
60
61
Input: Sam Johnson is eating breakfast.
Output: (Dolores Murphy, eat, breakfast)
---
Lianmin Zheng's avatar
Lianmin Zheng committed
62
63
64
Input: Joon Park is brewing coffee.
Output: (Joon Park, brew, coffee)
---
65
Input: Jane Cook is sleeping.
Lianmin Zheng's avatar
Lianmin Zheng committed
66
67
Output: (Jane Cook, is, sleep)
---
68
Input: Michael Bernstein is writing email on a computer.
Lianmin Zheng's avatar
Lianmin Zheng committed
69
70
Output: (Michael Bernstein, write, email)
---
71
Input: Percy Liang is teaching students in a classroom.
Lianmin Zheng's avatar
Lianmin Zheng committed
72
73
Output: (Percy Liang, teach, students)
---
74
Input: Merrie Morris is running on a treadmill.
Lianmin Zheng's avatar
Lianmin Zheng committed
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Output: (Merrie Morris, run, treadmill)
---"""
    s += persona_name + "is" + action + ".\n"
    s += "(" + persona_name + ","
    return {"prompt": s, "max_tokens": 20, "stop": ")"}


@sgl.function
def generate_pronunciatio(s, action):
    s += "Convert an action description to an emoji (important: use two or less emojis).\n"
    s += "Action description: " + action + ".\n"
    s += "Emoji:" + sgl.gen(name="Emoji", max_tokens=6)


def generate_pronunciatio_prompt(action):
    s = ""
    s += "Convert an action description to an emoji (important: use two or less emojis).\n"
    s += "Action description: " + action + ".\n"
    s += "Emoji:"
    return {"prompt": s, "max_tokens": 6, "stop": None}


@sgl.function
def action_location_sector(
    s,
    persona_name,
    living_sector,
    living_sector_areas,
    current_sector,
    current_sector_areas,
    daily_plan,
    sector_options,
    current_action,
    next_action,
):
110
    s += """Task -- choose an appropriate area  from the area options for a task at hand.
Lianmin Zheng's avatar
Lianmin Zheng committed
111
Sam Kim lives in {Sam Kim's house} that has Sam Kim's room, bathroom, kitchen.
112
Sam Kim is currently in {Sam Kim's house} that has Sam Kim's room, bathroom, kitchen.
Lianmin Zheng's avatar
Lianmin Zheng committed
113
114
115
116
117
118
119
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
120
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}.
Lianmin Zheng's avatar
Lianmin Zheng committed
121
122
123
124
* 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}
---"""
Liangsheng Yin's avatar
Liangsheng Yin committed
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
    s += (
        persona_name
        + " lives in "
        + living_sector
        + " that has "
        + living_sector_areas
        + ".\n"
    )
    s += (
        persona_name
        + " is currently in "
        + current_sector
        + " that has "
        + current_sector_areas
        + ".\n"
    )
Lianmin Zheng's avatar
Lianmin Zheng committed
141
142
143
144
    s += daily_plan + ".\n"
    s += "Area options: " + sector_options + ".\n"
    s += """* 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.\n"""
Liangsheng Yin's avatar
Liangsheng Yin committed
145
146
147
148
149
150
151
152
153
154
    s += (
        persona_name
        + " is "
        + current_action
        + ". For "
        + next_action
        + ", "
        + persona_name
        + " should go to the following area: {"
    )
Lianmin Zheng's avatar
Lianmin Zheng committed
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
    s += sgl.gen(name="Location", max_tokens=10, stop="}")


def action_location_sector_prompt(
    persona_name,
    living_sector,
    living_sector_areas,
    current_sector,
    current_sector_areas,
    daily_plan,
    sector_options,
    current_action,
    next_action,
):
    s = ""
170
    s += """Task -- choose an appropriate area  from the area options for a task at hand.
Lianmin Zheng's avatar
Lianmin Zheng committed
171
Sam Kim lives in {Sam Kim's house} that has Sam Kim's room, bathroom, kitchen.
172
Sam Kim is currently in {Sam Kim's house} that has Sam Kim's room, bathroom, kitchen.
Lianmin Zheng's avatar
Lianmin Zheng committed
173
174
175
176
177
178
179
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
180
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}.
Lianmin Zheng's avatar
Lianmin Zheng committed
181
182
183
184
* 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}
---"""
Liangsheng Yin's avatar
Liangsheng Yin committed
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
    s += (
        persona_name
        + " lives in "
        + living_sector
        + " that has "
        + living_sector_areas
        + ".\n"
    )
    s += (
        persona_name
        + " is currently in "
        + current_sector
        + " that has "
        + current_sector_areas
        + ".\n"
    )
Lianmin Zheng's avatar
Lianmin Zheng committed
201
202
203
204
    s += daily_plan + ".\n"
    s += "Area options: " + sector_options + ".\n"
    s += """* 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.\n"""
Liangsheng Yin's avatar
Liangsheng Yin committed
205
206
207
208
209
210
211
212
213
214
    s += (
        persona_name
        + " is "
        + current_action
        + ". For "
        + next_action
        + ", "
        + persona_name
        + " should go to the following area: {"
    )
Lianmin Zheng's avatar
Lianmin Zheng committed
215
216
217
218
    return {"prompt": s, "max_tokens": 10, "stop": "}"}


@sgl.function
Liangsheng Yin's avatar
Liangsheng Yin committed
219
220
221
def action_location_object(
    s, persona_name, target_sector, target_sector_areas, current_action, next_action
):
Lianmin Zheng's avatar
Lianmin Zheng committed
222
223
224
225
226
227
228
    s += """
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}
---
229
Tom Watson is in common room in Tom Watson's apartment.
Lianmin Zheng's avatar
Lianmin Zheng committed
230
231
232
233
234
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}
---"""
Liangsheng Yin's avatar
Liangsheng Yin committed
235
236
237
238
239
240
241
242
    s += (
        persona_name
        + " is going to "
        + target_sector
        + " that has the following areas: {"
        + target_sector_areas
        + "}\n"
    )
243
    s += """* Stay in the current area if the activity can be done there.
Lianmin Zheng's avatar
Lianmin Zheng committed
244
* NEVER go into other people's rooms unless necessary."""
Liangsheng Yin's avatar
Liangsheng Yin committed
245
246
247
248
249
250
251
252
253
254
255
    s += (
        persona_name
        + " is "
        + current_action
        + ". For "
        + next_action
        + ", "
        + persona_name
        + "should go to the following area in "
        + target_sector
    )
Lianmin Zheng's avatar
Lianmin Zheng committed
256
257
258
259
    s += " (MUST pick one of {" + target_sector_areas + "}):\n"
    s += "Answer: {" + sgl.gen(name="Area", max_tokens=5, stop="}")


Liangsheng Yin's avatar
Liangsheng Yin committed
260
261
262
def action_location_object_prompt(
    persona_name, target_sector, target_sector_areas, current_action, next_action
):
Lianmin Zheng's avatar
Lianmin Zheng committed
263
264
265
266
267
268
269
270
    s = ""
    s += """
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}
---
271
Tom Watson is in common room in Tom Watson's apartment.
Lianmin Zheng's avatar
Lianmin Zheng committed
272
273
274
275
276
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}
---"""
Liangsheng Yin's avatar
Liangsheng Yin committed
277
278
279
280
281
282
283
284
    s += (
        persona_name
        + " is going to "
        + target_sector
        + " that has the following areas: {"
        + target_sector_areas
        + "}\n"
    )
285
    s += """* Stay in the current area if the activity can be done there.
Lianmin Zheng's avatar
Lianmin Zheng committed
286
* NEVER go into other people's rooms unless necessary."""
Liangsheng Yin's avatar
Liangsheng Yin committed
287
288
289
290
291
292
293
294
295
296
297
    s += (
        persona_name
        + " is "
        + current_action
        + ". For "
        + next_action
        + ", "
        + persona_name
        + "should go to the following area in "
        + target_sector
    )
Lianmin Zheng's avatar
Lianmin Zheng committed
298
299
300
    s += " (MUST pick one of {" + target_sector_areas + "}):\n"
    s += "Answer: {"
    return {"prompt": s, "max_tokens": 5, "stop": "}"}