-
Notifications
You must be signed in to change notification settings - Fork 0
/
prompt_engineer.py
280 lines (218 loc) · 9.94 KB
/
prompt_engineer.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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
from string import Template
######## new concept definations ########
def_queries = [
'''
You are a car engineer. Your job is to read Function Design Specification (FDS),
identify and fix flaws in the FDS, and convert FDS into detailed software
development requirements. Make your answer brief.
''',
'''
We call this query the "definition of signal expression".
Its purpose is to explain what is a signal expression.
Following are two examples.
Example 1: signal expression that has only one result signal.
function [F] sets signal [S] as value positive if expression a&b
(a). signal [X] is 1
(b). signal [Y] is 0
In Example 1, F is a car function. S, X and Y are all signals.
S is the only one "result signal", because the purpose of this
signal expression is to assign values to S. S will be set as
positive if X is 1 and Y is 0.
Example 2: signal expression that does not have a result signal.
function [F] will enter [M] mode if signal [S] is positive.
In Example 2, F is a car function. S is a signal.
M is a working mode that F is in when S is positive.
This signal expression does not have any "result signal",
because the purpose of this signal expression is not to
assign any value to any signal.
Summarize the above definition. Make your answer brief.
''',
'''
We call this query the "definition of signal expression group".
Its purpose is to explain how to group signal expressions.
The signal expressions of the same group should satisfy three conditions:
First, signal expressions of the same group should be controled
by the same function.
Second, all signal expressions of the same group should have
the same result signal. Note that there is only one result signal
for a signal expression group.
Third, a signal expression group must have at least two signal expressions.
Following is an example.
Expression1:
function [F] sets signal [S] as value 4 if expression a&b
(a). signal [X] is 1
(b). signal [Y] is 0
Expression2:
function [F] sets signal [S] as value 3 if expression a||b
(a). signal [X] is 0
(b). signal [Y] is 1
Expression3:
function [F] sets signal [Z] as value 2 if expression a&&b
(a). signal [X] is 1
(b). signal [S] is 0
Expression4:
function [E] sets signal [S] as value 4 if expression a&&b
(a). signal [X] is 1
(b). signal [S] is 0
Expression5:
function [F] shall enter mode [M] if signal [S] is 4.
In this example, F is a car function. S, X, Y and Z are all signals.
Expression1 says: function F will set result signal S as 4 if signal X is 1 and signal Y is 0.
Expression2 says: function F will set result signal S as 3 if signal X is 0 and signal Y is 1.
Expression3 says: function F will set result signal Z as 2 if signal X is 1 and signal S is 0.
Expression4 says: function E will set result signal S as 4 if signal X is 1 and signal Y is 0.
Expression5 says: function F will enter mode M if signal S is 4.
Expression1 and Expression2 are grouped as one signal expression group
because they satisfy the three conditions.
Expression3 does not belong to this group because signal Z is different
from result signal S and thus violates the second condition.
Expression4 does not belong to this group because function E is different
from function F and thus violates the first condition.
Expression5 does not belong to any group because this expression does
not have a result signal.
Expression2 and Expression3 are not considered as one group because
Expression2's result signal S and Expression3's result signal Z
are different.
Summarize the above definition. Make your answer brief.
''',
'''
We call this query the "definition of timer".
Its purpose is to explain timer operations.
Operation 1:
Start. This operation starts the timer to count down.
We also use "trigger", "enable" and other similar words
to represent this operation.
Operation 2:
Expire. This operation means the timer has been counted
down to 0. We also use "stop", "is expired" and other
similar words to represent this operation.
Operation 3:
Stop. This operation means the timer stops counting down
before it expires. The timer remains what is left in the time
counter. We also use "halt", "hold" and other
similar words to represent this operation.
Operation 4:
Reset. This operation means we stop the current timer before
it expires and reset the timer to its initial value.
Operation 5:
Reload. This operation means Start after Reset. In other words,
we stop the timer before it expires, reset the timer to its
initial value, and start the timer counting down.
As a timer, Start, Expire and Reset are the 3 basic operation
that must be defined.
Summarize the above definition. Make your answer brief.
''',
'''
We call this query the "definition of single signal
expression mistake". Its purpose is to describe mistakes
that are usaully seen in a single signal expression.
Mistake 1:
Timer that does not reset. Use the timer operations defined
in "definition of timer" to understand this mistake.
FDS should explicitly explain if resetting timer is necessary
in three places: after the timer expires, after the timer stops,
before the timer starts. This mistake may cuase a misbehaved
timer and trap the system in a never-defined status.
Mistake 2:
Timeout without followup actions. FDS needs to explicitly
define what to do after a timer times out. When timeout happens,
the system could transit to a well-defined state or could
trigger an error handling process. However, it is a mistake
if the FDS does not define what to do after a timer times out.
Summarize the above definition. Make your answer brief.
''',
'''
We call this query the "definition of signal expression
group mistake". Its purpose is to describe mistakes
that are usaully seen in a signal expression group.
A signal expression group is defined in
"definition of signal expression group".
Mistake 1:
Multiple signal expressions simultaneously satisfied.
In this mistake, more than one signal expressions
of the same signal expression group can be all
satisfied at the same time.
Mistake 2:
None of signal expressions satisfied. In this mistake,
All signal expressions of the same signal expression group
are not satisfied at the same time.
Summarize the above definition. Make your answer brief.
''',
]
######## template to query pdf file ########
fds_q_templates = [
Template('''
We call this query and its answer the "documented signal expressions".
Its purpose is to identify all the signal expression texts
in chapter $chapter.
Identify all the original texts that contains signals. Do not cutoff,
rewrite or interpret. We call these texts the
"original signal expressions".
'''),
Template('''
We call this query and its answer the "documented signals".
Its purpose is to identify all the signals in chapter $chapter.
A signal usually has three characteristic:
First, a signal must have multiple possible values. Note that
a signal and a signal value are two different concepts.
For example, signal S can be ON or OFF.
In this case, S is a signal, while ON and OFF are signal values.
Do not classify a signal value as a signal.
Second, a function or function block is a component that assigns
values to signals. For example, function F assigns signal S to ON,
in which F stands for a function, S stands for a signal and
ON stands for a signal value. As a result, a function or function
block is not a signal. Do not classify a function or function block
as a signal.
Third, a signal's name cannot be found in a dictionary. Instead, it is
in the form of multiple abbreviations. For example, signal "VehState"
stands for "vehicle state". Note that "_", "-" and other forms
of connecting symboles may be used in a signal's name as well.
Return a dictionary. The dictionary key is the signal name.
The dictionary value is all the possible values of the
corresponding signal. Do not interpret each individual signal.
Do not say anything else.
'''),
]
######## template to query chatgpt ########
qa_q_templates = [
Template(
'''
We call this query and its answer the "qa of signal expression groups".
Its purpose is to group the signal expressions in
the "original signal expressions" defined in "documented signal expressions".
Do following step by step.
Step 1, for each of the signal expression of the original signal expressions,
identify if it is a signal expression that has a result signal
or it is a signal expression that does not have a result signal.
For signal expression that has a result signal, hight light its function and
result signal. Organize the output in four columns:
signal expression index, function, has result signal or not, result signal.
Step 2, Group the signal expressoins in the "original signal expressions"
according to the "definition of signal expression group".
Note that the signal expressoins of the same group must
follow three conditions: they are controlled by the same function,
they have only one and the same result signal, a group must contain
at least two signal expressions.
Ignore the signal expressoin that does not have a result signal,
Do not put it into any group.
Ignore the group that contains only one signal expressoin.
Organize the output as following format:
Group index, signal expression index, function, result signal, signal expression
We call these groups the "original signal expression groups".
'''),
Template('''
We call this query and its answer the "qa of signal expression mistakes".
Its purpose is to identify all the signal expression mistakes in
the "original signal expressions" defined in "documented signal expressions".
Do following step by step.
Step 1, use the "definition of single signal expression mistake"
to identify the mistakes in each of the expressions in the
"original signal expressions".
Step 2, use the "definition of signal expression group mistake"
to identify the mistakes in the "original signal expression groups"
defined in "qa of signal expression groups". For each of the mistakes,
explicitly list the signal expressions and the signal values
that cause this mistake. Try to give fixes to resolve the mistake.
'''),
]