hashan-7 commited on
Commit
051e238
·
verified ·
1 Parent(s): 3844d2f

add the code

Browse files
Files changed (1) hide show
  1. prompt_builder.py +272 -0
prompt_builder.py CHANGED
@@ -0,0 +1,272 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import List, Optional
2
+
3
+ from schemas import CodeTaskType, RetrievedEvidence
4
+
5
+
6
+ def format_evidence(evidence_list: Optional[List[RetrievedEvidence]]) -> str:
7
+ if not evidence_list:
8
+ return "No external technical evidence provided."
9
+
10
+ lines = []
11
+ for index, item in enumerate(evidence_list, start=1):
12
+ lines.append(f"Source {index}")
13
+ lines.append(f"Type: {item.source_type}")
14
+ lines.append(f"Title: {item.title}")
15
+ lines.append(f"Snippet: {item.snippet}")
16
+ if item.url:
17
+ lines.append(f"URL: {item.url}")
18
+ if item.score is not None:
19
+ lines.append(f"Score: {item.score}")
20
+ lines.append("")
21
+
22
+ return "\n".join(lines).strip()
23
+
24
+
25
+ def build_shared_context(
26
+ message: str,
27
+ language: Optional[str] = None,
28
+ framework: Optional[str] = None,
29
+ code: Optional[str] = None,
30
+ error_message: Optional[str] = None,
31
+ previous_context: Optional[str] = None,
32
+ evidence_list: Optional[List[RetrievedEvidence]] = None,
33
+ ) -> str:
34
+ parts = [
35
+ f"User Request:\n{message.strip()}",
36
+ f"Language:\n{language.strip() if language else 'Not specified'}",
37
+ f"Framework:\n{framework.strip() if framework else 'Not specified'}",
38
+ f"Previous Context:\n{previous_context.strip() if previous_context else 'None'}",
39
+ f"Error Message:\n{error_message.strip() if error_message else 'None'}",
40
+ f"Code:\n{code.strip() if code else 'No code provided'}",
41
+ f"Technical Evidence:\n{format_evidence(evidence_list)}",
42
+ ]
43
+ return "\n\n".join(parts)
44
+
45
+
46
+ def build_generate_prompt(
47
+ message: str,
48
+ language: Optional[str] = None,
49
+ framework: Optional[str] = None,
50
+ previous_context: Optional[str] = None,
51
+ ) -> str:
52
+ shared = build_shared_context(
53
+ message=message,
54
+ language=language,
55
+ framework=framework,
56
+ previous_context=previous_context,
57
+ )
58
+
59
+ return (
60
+ "You are a senior software engineer.\n"
61
+ "Your task is to generate code based on the user's request.\n"
62
+ "Follow these rules:\n"
63
+ "1. Generate clean, correct, production-style code.\n"
64
+ "2. Match the requested language and framework if provided.\n"
65
+ "3. If the language or framework is missing, infer a reasonable default from the request.\n"
66
+ "4. Keep the explanation concise.\n"
67
+ "5. Return code that is directly usable.\n\n"
68
+ f"{shared}\n\n"
69
+ "Output Format:\n"
70
+ "Explanation:\n"
71
+ "<short explanation>\n\n"
72
+ "Code:\n"
73
+ "<generated code>"
74
+ )
75
+
76
+
77
+ def build_fix_prompt(
78
+ message: str,
79
+ code: Optional[str] = None,
80
+ error_message: Optional[str] = None,
81
+ language: Optional[str] = None,
82
+ framework: Optional[str] = None,
83
+ previous_context: Optional[str] = None,
84
+ evidence_list: Optional[List[RetrievedEvidence]] = None,
85
+ ) -> str:
86
+ shared = build_shared_context(
87
+ message=message,
88
+ language=language,
89
+ framework=framework,
90
+ code=code,
91
+ error_message=error_message,
92
+ previous_context=previous_context,
93
+ evidence_list=evidence_list,
94
+ )
95
+
96
+ return (
97
+ "You are a senior software engineer and debugging expert.\n"
98
+ "Your task is to fix the user's code.\n"
99
+ "Follow these rules:\n"
100
+ "1. Identify the most likely root cause.\n"
101
+ "2. Preserve the user's intended logic where possible.\n"
102
+ "3. Use the provided technical evidence if relevant.\n"
103
+ "4. If the error details are incomplete, make the safest reasonable fix and mention assumptions.\n"
104
+ "5. Return the corrected code and a concise explanation.\n\n"
105
+ f"{shared}\n\n"
106
+ "Output Format:\n"
107
+ "Root Cause:\n"
108
+ "<short root cause>\n\n"
109
+ "Explanation:\n"
110
+ "<short explanation>\n\n"
111
+ "Code:\n"
112
+ "<fixed code>"
113
+ )
114
+
115
+
116
+ def build_explain_prompt(
117
+ message: str,
118
+ code: Optional[str] = None,
119
+ language: Optional[str] = None,
120
+ framework: Optional[str] = None,
121
+ previous_context: Optional[str] = None,
122
+ ) -> str:
123
+ shared = build_shared_context(
124
+ message=message,
125
+ language=language,
126
+ framework=framework,
127
+ code=code,
128
+ previous_context=previous_context,
129
+ )
130
+
131
+ return (
132
+ "You are a senior software engineer.\n"
133
+ "Your task is to explain the user's code or technical question clearly.\n"
134
+ "Follow these rules:\n"
135
+ "1. Explain in a simple and structured way.\n"
136
+ "2. Focus on the most important logic.\n"
137
+ "3. If code is provided, explain what it does and why.\n"
138
+ "4. Keep the explanation practical and concise.\n\n"
139
+ f"{shared}\n\n"
140
+ "Output Format:\n"
141
+ "Explanation:\n"
142
+ "<clear explanation>"
143
+ )
144
+
145
+
146
+ def build_refactor_prompt(
147
+ message: str,
148
+ code: Optional[str] = None,
149
+ language: Optional[str] = None,
150
+ framework: Optional[str] = None,
151
+ previous_context: Optional[str] = None,
152
+ ) -> str:
153
+ shared = build_shared_context(
154
+ message=message,
155
+ language=language,
156
+ framework=framework,
157
+ code=code,
158
+ previous_context=previous_context,
159
+ )
160
+
161
+ return (
162
+ "You are a senior software engineer.\n"
163
+ "Your task is to refactor the user's code.\n"
164
+ "Follow these rules:\n"
165
+ "1. Preserve the original behavior unless the user asked for functional changes.\n"
166
+ "2. Improve readability, maintainability, and structure.\n"
167
+ "3. Keep the result practical and clean.\n"
168
+ "4. Return the improved code and a concise explanation of changes.\n\n"
169
+ f"{shared}\n\n"
170
+ "Output Format:\n"
171
+ "Explanation:\n"
172
+ "<short explanation>\n\n"
173
+ "Code:\n"
174
+ "<refactored code>"
175
+ )
176
+
177
+
178
+ def build_review_prompt(
179
+ message: str,
180
+ code: Optional[str] = None,
181
+ language: Optional[str] = None,
182
+ framework: Optional[str] = None,
183
+ previous_context: Optional[str] = None,
184
+ ) -> str:
185
+ shared = build_shared_context(
186
+ message=message,
187
+ language=language,
188
+ framework=framework,
189
+ code=code,
190
+ previous_context=previous_context,
191
+ )
192
+
193
+ return (
194
+ "You are a senior software engineer performing a code review.\n"
195
+ "Your task is to review the user's code and identify issues or improvements.\n"
196
+ "Follow these rules:\n"
197
+ "1. Focus on correctness, readability, maintainability, and possible bugs.\n"
198
+ "2. Be specific and practical.\n"
199
+ "3. If improvements are needed, suggest them clearly.\n"
200
+ "4. Do not rewrite the whole code unless necessary.\n\n"
201
+ f"{shared}\n\n"
202
+ "Output Format:\n"
203
+ "Review:\n"
204
+ "<review points>\n\n"
205
+ "Suggestions:\n"
206
+ "<practical suggestions>"
207
+ )
208
+
209
+
210
+ def build_prompt(
211
+ task_type: CodeTaskType,
212
+ message: str,
213
+ code: Optional[str] = None,
214
+ error_message: Optional[str] = None,
215
+ language: Optional[str] = None,
216
+ framework: Optional[str] = None,
217
+ previous_context: Optional[str] = None,
218
+ evidence_list: Optional[List[RetrievedEvidence]] = None,
219
+ ) -> str:
220
+ if task_type == CodeTaskType.GENERATE:
221
+ return build_generate_prompt(
222
+ message=message,
223
+ language=language,
224
+ framework=framework,
225
+ previous_context=previous_context,
226
+ )
227
+
228
+ if task_type == CodeTaskType.FIX:
229
+ return build_fix_prompt(
230
+ message=message,
231
+ code=code,
232
+ error_message=error_message,
233
+ language=language,
234
+ framework=framework,
235
+ previous_context=previous_context,
236
+ evidence_list=evidence_list,
237
+ )
238
+
239
+ if task_type == CodeTaskType.EXPLAIN:
240
+ return build_explain_prompt(
241
+ message=message,
242
+ code=code,
243
+ language=language,
244
+ framework=framework,
245
+ previous_context=previous_context,
246
+ )
247
+
248
+ if task_type == CodeTaskType.REFACTOR:
249
+ return build_refactor_prompt(
250
+ message=message,
251
+ code=code,
252
+ language=language,
253
+ framework=framework,
254
+ previous_context=previous_context,
255
+ )
256
+
257
+ if task_type == CodeTaskType.REVIEW:
258
+ return build_review_prompt(
259
+ message=message,
260
+ code=code,
261
+ language=language,
262
+ framework=framework,
263
+ previous_context=previous_context,
264
+ )
265
+
266
+ return build_explain_prompt(
267
+ message=message,
268
+ code=code,
269
+ language=language,
270
+ framework=framework,
271
+ previous_context=previous_context,
272
+ )