-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprompting.py
133 lines (100 loc) · 3.13 KB
/
prompting.py
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
def select_prompter(name: str):
if name == "direct":
return DirectPrompter()
if name == "cot":
return CoTPrompter()
if name == "ps":
return PSPrompter()
if name == "extract":
return ExtractNumeralPrompter()
if name == "output2pot":
return Out2PoTPrompter()
# MATH
if name == "direct_math":
return MathDirectPrompter()
if name == "cot_math":
return MathCoTPrompter()
if name == "ps_math":
return MathPSPrompter()
if name == "output2pot_math":
return MathOut2PoTPrompter()
raise KeyError(name)
class Prompter:
def run(self, question):
raise NotImplementedError
class DirectPrompter(Prompter):
prompt = """
{question}
""".strip()
def run(self, question):
return self.prompt.format(question=question)
class CoTPrompter(Prompter):
prompt = """
Question: {question}
Answer: Let's think step by step.
""".strip()
def run(self, question):
return self.prompt.format(question=question)
class PSPrompter(Prompter):
prompt = """
Question: {question}
Answer: Let's first understand the problem and devise a plan to solve the problem. Then, let's carry out the plan to solve the problem step by step.
""".strip()
def run(self, question):
return self.prompt.format(question=question)
class ExtractNumeralPrompter(Prompter):
prompt = """
{question}
{answer}
Therefore, the answer (arabic numerals) is
""".strip()
def run(self, question, answer):
return self.prompt.format(question=question, answer=answer)
class Out2PoTPrompter(Prompter):
prompt = """
{prompt}
# Let's carry out the plan and answer this question by implementing a solution() function.
def solution():
# Let's write a Python program step by step, and then return the numeric answer
""".strip()
def run(self, prompt):
return self.prompt.format(prompt=prompt)
class MathDirectPrompter(Prompter):
prompt = """
{question}
""".strip()
def run(self, question):
return (
self.prompt.format(question=question)
+ "Present the final answer enclosed in \\boxed{}."
)
class MathCoTPrompter(Prompter):
prompt = """
Question: {question}
Answer: Let's think step by step.
""".strip()
def run(self, question):
return (
self.prompt.format(question=question)
+ "Present the final answer enclosed in \\boxed{}."
)
class MathPSPrompter(Prompter):
prompt = """
Question: {question}
Answer: Let's first understand the problem and devise a plan to solve the problem. Then, let's carry out the plan to solve the problem step by step.
""".strip()
def run(self, question):
return (
self.prompt.format(question=question)
+ "Present the final answer enclosed in \\boxed{}."
)
class MathOut2PoTPrompter(Prompter):
prompt = """
{prompt}
Convert the following plan and solution to a math problem into Python code.
""".strip()
def run(self, prompt):
return (
self.prompt.format(prompt=prompt)
+ " Print the final answer enclosed in \\boxed{}."
)