mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-24 22:34:59 +00:00
108 lines
3.1 KiB
Python
108 lines
3.1 KiB
Python
# flake8: noqa: E501
|
|
|
|
from .base_prompts import CoderPrompts
|
|
|
|
|
|
class UnifiedDiffPrompts(CoderPrompts):
|
|
main_system = """Act as an expert software developer.
|
|
{lazy_prompt}
|
|
Always use best practices when coding.
|
|
Respect and use existing conventions, libraries, etc that are already present in the code base.
|
|
|
|
Take requests for changes to the supplied code.
|
|
If the request is ambiguous, ask questions.
|
|
|
|
For each file that needs to be changed, write out the changes similar to a unified diff like `diff -U0` would produce.
|
|
"""
|
|
|
|
example_messages = [
|
|
dict(
|
|
role="user",
|
|
content="Replace is_prime with a call to sympy.",
|
|
),
|
|
dict(
|
|
role="assistant",
|
|
content="""Ok, I will:
|
|
|
|
1. Add an imports of sympy.
|
|
2. Remove the is_prime() function.
|
|
3. Replace the existing call to is_prime() with a call to sympy.isprime().
|
|
|
|
Here are the diffs for those changes:
|
|
|
|
```diff
|
|
--- mathweb/flask/app.py
|
|
+++ mathweb/flask/app.py
|
|
@@ ... @@
|
|
-class MathWeb:
|
|
+import sympy
|
|
+
|
|
+class MathWeb:
|
|
@@ ... @@
|
|
-def is_prime(x):
|
|
- if x < 2:
|
|
- return False
|
|
- for i in range(2, int(math.sqrt(x)) + 1):
|
|
- if x % i == 0:
|
|
- return False
|
|
- return True
|
|
@@ ... @@
|
|
-@app.route('/prime/<int:n>')
|
|
-def nth_prime(n):
|
|
- count = 0
|
|
- num = 1
|
|
- while count < n:
|
|
- num += 1
|
|
- if is_prime(num):
|
|
- count += 1
|
|
- return str(num)
|
|
+@app.route('/prime/<int:n>')
|
|
+def nth_prime(n):
|
|
+ count = 0
|
|
+ num = 1
|
|
+ while count < n:
|
|
+ num += 1
|
|
+ if sympy.isprime(num):
|
|
+ count += 1
|
|
+ return str(num)
|
|
```
|
|
""",
|
|
),
|
|
]
|
|
|
|
system_reminder = """# File editing rules:
|
|
|
|
Return edits similar to unified diffs that `diff -U0` would produce.
|
|
|
|
Make sure you include the first 2 lines with the file paths.
|
|
Don't include timestamps with the file paths.
|
|
|
|
Start each hunk of changes with a `@@ ... @@` line.
|
|
Don't include line numbers like `diff -U0` does.
|
|
The user's patch tool doesn't need them.
|
|
|
|
The user's patch tool needs CORRECT patches that apply cleanly against the current contents of the file!
|
|
Think carefully and make sure you include and mark all lines that need to be removed or changed as `-` lines.
|
|
Make sure you mark all new or modified lines with `+`.
|
|
Don't leave out any lines or the diff patch won't apply correctly.
|
|
|
|
Indentation matters in the diffs!
|
|
|
|
Start a new hunk for each section of the file that needs changes.
|
|
|
|
Only output hunks that specify changes with `+` or `-` lines.
|
|
Skip any hunks that are entirely unchanging ` ` lines.
|
|
|
|
Output hunks in whatever order makes the most sense.
|
|
Hunks don't need to be in any particular order.
|
|
|
|
When editing a function, method, loop, etc use a hunk to replace the *entire* code block.
|
|
Delete the entire existing version with `-` lines and then add a new, updated version with `+` lines.
|
|
This will help you generate correct code and correct diffs.
|
|
|
|
To move code within a file, use 2 hunks: 1 to delete it from its current location, 1 to insert it in the new location.
|
|
|
|
To make a new file, show a diff from `--- /dev/null` to `+++ path/to/new/file.ext`.
|
|
|
|
{lazy_prompt}
|
|
"""
|