pdd-cli 0.0.18__py3-none-any.whl → 0.0.20__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pdd-cli might be problematic. Click here for more details.
- pdd/auto_deps_main.py +1 -2
- pdd/cli.py +1 -1
- pdd/context_generator.py +1 -1
- pdd/crash_main.py +36 -42
- pdd/data/llm_model.csv +3 -3
- pdd/fix_error_loop.py +28 -40
- pdd/fix_errors_from_unit_tests.py +8 -2
- pdd/fix_main.py +107 -0
- pdd/insert_includes.py +2 -1
- pdd/llm_invoke.py +10 -1
- pdd/preprocess copy.py +234 -0
- pdd/preprocess.py +220 -177
- pdd/preprocess_copy_bahrat.py +287 -0
- pdd/prompts/fix_errors_from_unit_tests_LLM.prompt +5 -1
- pdd/prompts/split_LLM.prompt +5 -4
- {pdd_cli-0.0.18.dist-info → pdd_cli-0.0.20.dist-info}/METADATA +5 -4
- {pdd_cli-0.0.18.dist-info → pdd_cli-0.0.20.dist-info}/RECORD +21 -19
- {pdd_cli-0.0.18.dist-info → pdd_cli-0.0.20.dist-info}/WHEEL +1 -1
- {pdd_cli-0.0.18.dist-info → pdd_cli-0.0.20.dist-info}/entry_points.txt +0 -0
- {pdd_cli-0.0.18.dist-info → pdd_cli-0.0.20.dist-info/licenses}/LICENSE +0 -0
- {pdd_cli-0.0.18.dist-info → pdd_cli-0.0.20.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
from rich import print as rprint
|
|
2
|
+
import re
|
|
3
|
+
import os
|
|
4
|
+
import subprocess
|
|
5
|
+
import requests
|
|
6
|
+
from bs4 import BeautifulSoup
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import List, Optional
|
|
9
|
+
|
|
10
|
+
def get_file_path(file_name: str) -> str:
|
|
11
|
+
"""
|
|
12
|
+
Resolves a file path using the current directory as the base path.
|
|
13
|
+
|
|
14
|
+
Args:
|
|
15
|
+
file_name: The name of the file to resolve
|
|
16
|
+
|
|
17
|
+
Returns:
|
|
18
|
+
The full path to the file
|
|
19
|
+
"""
|
|
20
|
+
path = Path(file_name)
|
|
21
|
+
|
|
22
|
+
# If it's an absolute path, return it as is
|
|
23
|
+
if path.is_absolute():
|
|
24
|
+
return str(path)
|
|
25
|
+
|
|
26
|
+
# If path already exists relative to cwd, use it directly
|
|
27
|
+
if path.exists():
|
|
28
|
+
return str(path.resolve())
|
|
29
|
+
|
|
30
|
+
# Check if the path exists relative to PDD_PATH
|
|
31
|
+
if 'PDD_PATH' in os.environ:
|
|
32
|
+
pdd_path = Path(os.environ['PDD_PATH'])
|
|
33
|
+
if (pdd_path / path).exists():
|
|
34
|
+
return str(pdd_path / path)
|
|
35
|
+
|
|
36
|
+
# If the path has pdd in it, try removing one level
|
|
37
|
+
parts = list(path.parts)
|
|
38
|
+
if 'pdd' in parts:
|
|
39
|
+
if len(parts) > 1 and parts[0] == 'pdd':
|
|
40
|
+
adjusted_path = Path(*parts[1:])
|
|
41
|
+
if adjusted_path.exists():
|
|
42
|
+
return str(adjusted_path.resolve())
|
|
43
|
+
|
|
44
|
+
# If we got here, use the original path resolution logic
|
|
45
|
+
if 'PDD_PATH' in os.environ:
|
|
46
|
+
base_path = Path(os.environ['PDD_PATH'])
|
|
47
|
+
else:
|
|
48
|
+
base_path = Path.cwd()
|
|
49
|
+
|
|
50
|
+
# Get the project root - if we're in a directory named 'pdd' and we're including a file that might also have 'pdd' in its path
|
|
51
|
+
# Make sure we don't add 'pdd' twice
|
|
52
|
+
full_path = base_path / file_name
|
|
53
|
+
|
|
54
|
+
# Check if base_path already ends with 'pdd' and file_name starts with 'pdd/'
|
|
55
|
+
if base_path.name == 'pdd' and isinstance(file_name, str) and file_name.startswith('pdd/'):
|
|
56
|
+
# Remove the 'pdd/' prefix from file_name to avoid duplication
|
|
57
|
+
file_name_without_pdd = file_name[4:] # Skip 'pdd/'
|
|
58
|
+
full_path = base_path / file_name_without_pdd
|
|
59
|
+
|
|
60
|
+
return str(full_path)
|
|
61
|
+
|
|
62
|
+
def preprocess(
|
|
63
|
+
prompt: str,
|
|
64
|
+
recursive: bool = True,
|
|
65
|
+
double_curly_brackets: bool = True,
|
|
66
|
+
exclude_keys: Optional[List[str]] = None
|
|
67
|
+
) -> str:
|
|
68
|
+
"""
|
|
69
|
+
Preprocess a prompt string for an LLM by handling specific XML-like tags.
|
|
70
|
+
|
|
71
|
+
Args:
|
|
72
|
+
prompt: The prompt string to preprocess
|
|
73
|
+
recursive: Whether to recursively process includes in the prompt
|
|
74
|
+
double_curly_brackets: Whether to double curly brackets in the prompt
|
|
75
|
+
exclude_keys: List of keys to exclude from curly bracket doubling
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
The preprocessed prompt string
|
|
79
|
+
"""
|
|
80
|
+
if not prompt:
|
|
81
|
+
rprint("[bold red]Error:[/bold red] No prompt provided.")
|
|
82
|
+
return ""
|
|
83
|
+
|
|
84
|
+
if exclude_keys is None:
|
|
85
|
+
exclude_keys = []
|
|
86
|
+
|
|
87
|
+
try:
|
|
88
|
+
# Replace separate regex calls with a unified tag processing approach
|
|
89
|
+
def process_tags(prompt):
|
|
90
|
+
# Define a function to handle different tag types
|
|
91
|
+
def tag_handler(match):
|
|
92
|
+
pre_whitespace = match.group(1)
|
|
93
|
+
tag_type = match.group(2)
|
|
94
|
+
content = match.group(3) if match.group(3) else ""
|
|
95
|
+
post_whitespace = match.group(4)
|
|
96
|
+
|
|
97
|
+
# Skip processing if it looks like an example (contains backticks or is in code format)
|
|
98
|
+
if '`' in pre_whitespace or '`' in post_whitespace:
|
|
99
|
+
return match.group(0) # Return unchanged
|
|
100
|
+
|
|
101
|
+
if tag_type == 'pdd':
|
|
102
|
+
return pre_whitespace + post_whitespace # Remove pdd comments
|
|
103
|
+
elif tag_type == 'shell':
|
|
104
|
+
# Process shell commands
|
|
105
|
+
command = content.strip()
|
|
106
|
+
try:
|
|
107
|
+
result = subprocess.run(command, shell=True, check=True, text=True, capture_output=True)
|
|
108
|
+
return pre_whitespace + result.stdout + post_whitespace
|
|
109
|
+
except Exception as e:
|
|
110
|
+
# Return the original tag on error (critical for regression tests)
|
|
111
|
+
return match.group(0)
|
|
112
|
+
elif tag_type == 'web':
|
|
113
|
+
# Process web content
|
|
114
|
+
url = content.strip()
|
|
115
|
+
try:
|
|
116
|
+
response = requests.get(url)
|
|
117
|
+
response.raise_for_status()
|
|
118
|
+
soup = BeautifulSoup(response.text, 'html.parser')
|
|
119
|
+
|
|
120
|
+
# Remove scripts, styles, and navigation elements
|
|
121
|
+
for element in soup(['script', 'style', 'nav', 'header', 'footer', 'aside']):
|
|
122
|
+
element.decompose()
|
|
123
|
+
|
|
124
|
+
# Extract meaningful content
|
|
125
|
+
main_content = soup.find('main') or soup.find('article') or soup.find('div', {'id': 'content'})
|
|
126
|
+
|
|
127
|
+
if main_content:
|
|
128
|
+
result_content = main_content.get_text(strip=True)
|
|
129
|
+
else:
|
|
130
|
+
# Fallback to body content
|
|
131
|
+
result_content = soup.body.get_text(strip=True)
|
|
132
|
+
return pre_whitespace + result_content + post_whitespace
|
|
133
|
+
except Exception as e:
|
|
134
|
+
# Return the original tag on error
|
|
135
|
+
return match.group(0)
|
|
136
|
+
elif tag_type == 'include':
|
|
137
|
+
# Process file includes
|
|
138
|
+
file_name = content.strip()
|
|
139
|
+
# Skip if it contains invalid characters or looks like an example
|
|
140
|
+
if len(file_name) > 255 or any(c in file_name for c in '<>"\'|*?'):
|
|
141
|
+
return match.group(0) # Return unchanged
|
|
142
|
+
|
|
143
|
+
try:
|
|
144
|
+
file_path = get_file_path(file_name)
|
|
145
|
+
with open(file_path, 'r', encoding='utf-8') as file:
|
|
146
|
+
included_content = file.read()
|
|
147
|
+
if recursive:
|
|
148
|
+
# Recursive processing
|
|
149
|
+
included_content = preprocess(
|
|
150
|
+
included_content,
|
|
151
|
+
recursive=True,
|
|
152
|
+
double_curly_brackets=double_curly_brackets,
|
|
153
|
+
exclude_keys=exclude_keys
|
|
154
|
+
)
|
|
155
|
+
return pre_whitespace + included_content + post_whitespace
|
|
156
|
+
except Exception as e:
|
|
157
|
+
# Return the original tag on error
|
|
158
|
+
return match.group(0)
|
|
159
|
+
|
|
160
|
+
# Use a more specific regex pattern that properly handles tag structure
|
|
161
|
+
pattern = r'(\s*)<(include|pdd|shell|web)(?:\s+[^>]*)?(?:>(.*?)</\2>|/|>)(\s*)'
|
|
162
|
+
return re.sub(pattern, tag_handler, prompt, flags=re.DOTALL)
|
|
163
|
+
|
|
164
|
+
# Apply the unified tag processing approach
|
|
165
|
+
prompt = process_tags(prompt)
|
|
166
|
+
|
|
167
|
+
# Process angle brackets in triple backticks
|
|
168
|
+
def triple_backtick_include(match):
|
|
169
|
+
full_content = match.group(0) # The entire match including the backticks
|
|
170
|
+
backtick_content = match.group(1) # Just the content between backticks
|
|
171
|
+
|
|
172
|
+
# Find angle brackets within the backtick content
|
|
173
|
+
def angle_bracket_replace(inner_match):
|
|
174
|
+
file_name = inner_match.group(1)
|
|
175
|
+
try:
|
|
176
|
+
file_path = get_file_path(file_name)
|
|
177
|
+
with open(file_path, 'r', encoding='utf-8') as file:
|
|
178
|
+
content = file.read()
|
|
179
|
+
if recursive:
|
|
180
|
+
return preprocess(
|
|
181
|
+
content,
|
|
182
|
+
recursive=True,
|
|
183
|
+
double_curly_brackets=double_curly_brackets,
|
|
184
|
+
exclude_keys=exclude_keys
|
|
185
|
+
)
|
|
186
|
+
return content
|
|
187
|
+
except FileNotFoundError:
|
|
188
|
+
rprint(f"[bold red]File not found:[/bold red] {file_name}")
|
|
189
|
+
return f"<{file_name}>"
|
|
190
|
+
except Exception as e:
|
|
191
|
+
rprint(f"[bold red]Error including file {file_name}:[/bold red] {e}")
|
|
192
|
+
return f"<{file_name}>"
|
|
193
|
+
|
|
194
|
+
# Replace angle brackets in backtick content
|
|
195
|
+
processed_content = re.sub(r"<([^>]+)>", angle_bracket_replace, backtick_content)
|
|
196
|
+
return f"```{processed_content}```"
|
|
197
|
+
|
|
198
|
+
prompt = re.sub(r'```(.*?)```', triple_backtick_include, prompt, flags=re.DOTALL)
|
|
199
|
+
|
|
200
|
+
# Double curly brackets if needed
|
|
201
|
+
if double_curly_brackets:
|
|
202
|
+
# Initialize exclude_keys if it's None
|
|
203
|
+
exclude_keys = exclude_keys or []
|
|
204
|
+
|
|
205
|
+
# Handle simple cases first with character-by-character approach
|
|
206
|
+
if "\n" not in prompt and "```" not in prompt:
|
|
207
|
+
# Simple case: Character-by-character replacement
|
|
208
|
+
output = ""
|
|
209
|
+
i = 0
|
|
210
|
+
while i < len(prompt):
|
|
211
|
+
if prompt[i] == '{':
|
|
212
|
+
# Check if this is part of an excluded key
|
|
213
|
+
excluded = False
|
|
214
|
+
for key in exclude_keys:
|
|
215
|
+
if i + 1 + len(key) + 1 <= len(prompt) and prompt[i+1:i+1+len(key)] == key and prompt[i+1+len(key)] == '}':
|
|
216
|
+
output += '{' + key + '}'
|
|
217
|
+
i += 2 + len(key) # Skip the key and both braces
|
|
218
|
+
excluded = True
|
|
219
|
+
break
|
|
220
|
+
if not excluded:
|
|
221
|
+
output += '{{'
|
|
222
|
+
i += 1
|
|
223
|
+
elif prompt[i] == '}':
|
|
224
|
+
output += '}}'
|
|
225
|
+
i += 1
|
|
226
|
+
else:
|
|
227
|
+
output += prompt[i]
|
|
228
|
+
i += 1
|
|
229
|
+
return output.rstrip() if prompt.rstrip() == prompt else output
|
|
230
|
+
|
|
231
|
+
# More complex case: Use regex for structured text
|
|
232
|
+
# Step 1: Create a function to handle the pattern replacement
|
|
233
|
+
def replacer(match):
|
|
234
|
+
# Extract the content inside the curly braces
|
|
235
|
+
content = match.group(1)
|
|
236
|
+
|
|
237
|
+
# If the content is empty or in the exclude_keys list, don't double it
|
|
238
|
+
if not content: # Handle empty braces: {}
|
|
239
|
+
return "{{}}"
|
|
240
|
+
elif content in exclude_keys:
|
|
241
|
+
return f"{{{content}}}"
|
|
242
|
+
else:
|
|
243
|
+
return f"{{{{{content}}}}}"
|
|
244
|
+
|
|
245
|
+
# Step 2: Process code blocks and regular text separately
|
|
246
|
+
# Split the text into code blocks and non-code blocks
|
|
247
|
+
parts = re.split(r'(```.*?```)', prompt, flags=re.DOTALL)
|
|
248
|
+
|
|
249
|
+
for i in range(len(parts)):
|
|
250
|
+
if i % 2 == 0: # Not in a code block
|
|
251
|
+
# Handle JSON-like structures and nested braces more carefully
|
|
252
|
+
if ":" in parts[i] and "{" in parts[i] and "}" in parts[i]:
|
|
253
|
+
# For JSON-like structures, first preserve excluded keys
|
|
254
|
+
for key in exclude_keys:
|
|
255
|
+
pattern = r'\{' + re.escape(key) + r'\}'
|
|
256
|
+
# Use a unique placeholder that won't appear in normal text
|
|
257
|
+
placeholder = f"__EXCLUDED_KEY_{key}_PLACEHOLDER__"
|
|
258
|
+
parts[i] = re.sub(pattern, placeholder, parts[i])
|
|
259
|
+
|
|
260
|
+
# Then double all remaining braces
|
|
261
|
+
parts[i] = parts[i].replace("{", "{{").replace("}", "}}")
|
|
262
|
+
|
|
263
|
+
# Finally, restore the excluded keys
|
|
264
|
+
for key in exclude_keys:
|
|
265
|
+
placeholder = f"__EXCLUDED_KEY_{key}_PLACEHOLDER__"
|
|
266
|
+
parts[i] = parts[i].replace(placeholder, '{' + key + '}')
|
|
267
|
+
else:
|
|
268
|
+
# For regular text, use the replacer for simpler patterns
|
|
269
|
+
parts[i] = re.sub(r'{([^{}]*)}', replacer, parts[i])
|
|
270
|
+
else: # Inside a code block
|
|
271
|
+
# Double all curly brackets in code blocks
|
|
272
|
+
code_block = parts[i]
|
|
273
|
+
# Split the code block into the opening, content and closing
|
|
274
|
+
code_match = re.match(r'```(.*?)?\n(.*?)```', code_block, re.DOTALL)
|
|
275
|
+
if code_match:
|
|
276
|
+
language = code_match.group(1) or ""
|
|
277
|
+
content = code_match.group(2)
|
|
278
|
+
# Double all curly brackets in code blocks
|
|
279
|
+
content = content.replace("{", "{{").replace("}", "}}").replace("{{}}", "{{}}")
|
|
280
|
+
parts[i] = f"```{language}\n{content}```"
|
|
281
|
+
|
|
282
|
+
prompt = "".join(parts)
|
|
283
|
+
|
|
284
|
+
return prompt # Preserve whitespaces
|
|
285
|
+
except Exception as e:
|
|
286
|
+
rprint(f"[bold red]Error during prompt processing:[/bold red] {e}")
|
|
287
|
+
return f"Error: {str(e)}"
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
% This prompt is run iteratively. Here are the current errors and past potential fix attempts, if any, from the unit test and verification program run(s): <errors>{errors}</errors>
|
|
10
10
|
|
|
11
|
+
% If the verfication program fails to run, the code_under_test and unit_test are unchanged from the previous iteration.
|
|
12
|
+
|
|
11
13
|
<examples>
|
|
12
14
|
<example_1>
|
|
13
15
|
% Here is an example_unit_test for the example_code_under_test: <example_unit_test><include>context/fix_errors_from_unit_tests/1/test_conflicts_in_prompts.py</include></example_unit_test>
|
|
@@ -32,6 +34,7 @@
|
|
|
32
34
|
|
|
33
35
|
% Here is the prompt that generated the example_code_under_test: <example_prompt><include>context/fix_errors_from_unit_tests/3/context_generator_python.prompt</include></example_prompt>
|
|
34
36
|
</example_3>
|
|
37
|
+
<pdd>
|
|
35
38
|
|
|
36
39
|
<example_4>
|
|
37
40
|
% Here is an example_unit_test for the example_code_under_test: <example_unit_test><include>context/fix_errors_from_unit_tests/4/test_detect_change.py</include></example_unit_test>
|
|
@@ -48,13 +51,14 @@
|
|
|
48
51
|
|
|
49
52
|
% Here is an example error/fix log showing how the issues were resolved: <example_error_fix_log><include>context/fix_errors_from_unit_tests/4/error.log</include></example_error_fix_log>
|
|
50
53
|
</example_5>
|
|
54
|
+
</pdd>
|
|
51
55
|
</examples>
|
|
52
56
|
|
|
53
57
|
<instructions>
|
|
54
58
|
% Follow these steps to solve these errors:
|
|
55
59
|
Step 1. Compare the prompt to the code_under_test and explain differences, if any.
|
|
56
60
|
Step 2. Compare the prompt to the unit_test and explain differences, if any.
|
|
57
|
-
Step 3. For each prior attempted fix (if any), explain in a few paragraphs for each attempt why it might not have worked.
|
|
61
|
+
Step 3. For each prior attempted fix for the code_under_test and unit_test (if any), explain in a few paragraphs for each attempt why it might not have worked.
|
|
58
62
|
Step 4. Write several paragraphs explaining the root cause of each of the errors and each of the warnings in the code_under_test and unit_test.
|
|
59
63
|
Step 5. Explain in detail step by step how to solve each of the errors and warnings. For each error and warning, there should be several paragraphs description of the solution steps. Sometimes logging or print statements can help debug the code.
|
|
60
64
|
Step 6. Review the above steps and correct for any errors and warnings in the code under test or unit test.
|
pdd/prompts/split_LLM.prompt
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
% Here are some examples of splitting prompts:
|
|
2
|
-
<examples>
|
|
3
1
|
<pdd>
|
|
2
|
+
% Here are some examples of splitting prompts:
|
|
3
|
+
<examples>
|
|
4
|
+
|
|
4
5
|
<example_1>
|
|
5
6
|
<1_input_prompt><include>./context/split/1/initial_pdd_python.prompt</include></1_input_prompt>
|
|
6
7
|
<1_input_code><include>./context/split/1/pdd.py</include></1_input_code>
|
|
@@ -40,7 +41,7 @@
|
|
|
40
41
|
<5_sub_prompt><include>context/split/5/track_cost_python.prompt</include></5_sub_prompt>
|
|
41
42
|
<5_modified_prompt><include>context/split/5/modified_cli_python.prompt</include></5_modified_prompt>
|
|
42
43
|
</example_5>
|
|
43
|
-
|
|
44
|
+
|
|
44
45
|
|
|
45
46
|
<example_6>
|
|
46
47
|
<6_input_prompt><include>context/split/6/cli_python.prompt</include></6_input_prompt>
|
|
@@ -57,8 +58,8 @@
|
|
|
57
58
|
<7_sub_prompt><include>context/split/7/trace_main_python.prompt</include></7_sub_prompt>
|
|
58
59
|
<7_modified_prompt><include>context/split/7/modified_cli_python.prompt</include></7_modified_prompt>
|
|
59
60
|
</example_7>
|
|
60
|
-
|
|
61
61
|
</examples>
|
|
62
|
+
</pdd>
|
|
62
63
|
|
|
63
64
|
<context>
|
|
64
65
|
% You are an expert LLM Prompt Engineer. Your goal is to split the input_prompt (a larger prompt) into a sub_prompt and modified_prompt (two smaller prompts) with no loss of functionality. This is to make it easier to generate and test the modules easier.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pdd-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.20
|
|
4
4
|
Summary: PDD (Prompt-Driven Development) Command Line Interface
|
|
5
5
|
Author: Greg Tanaka
|
|
6
6
|
Author-email: glt@alumni.caltech.edu
|
|
@@ -39,8 +39,9 @@ Requires-Dist: rich==13.9.4
|
|
|
39
39
|
Requires-Dist: semver==3.0.2
|
|
40
40
|
Requires-Dist: setuptools==75.1.0
|
|
41
41
|
Requires-Dist: python-Levenshtein
|
|
42
|
+
Dynamic: license-file
|
|
42
43
|
|
|
43
|
-
.. image:: https://img.shields.io/badge/pdd--cli-v0.0.
|
|
44
|
+
.. image:: https://img.shields.io/badge/pdd--cli-v0.0.20-blue
|
|
44
45
|
:alt: PDD-CLI Version
|
|
45
46
|
|
|
46
47
|
PDD (Prompt-Driven Development) Command Line Interface
|
|
@@ -101,7 +102,7 @@ After installation, verify:
|
|
|
101
102
|
|
|
102
103
|
pdd --version
|
|
103
104
|
|
|
104
|
-
You'll see the current PDD version (e.g., 0.0.
|
|
105
|
+
You'll see the current PDD version (e.g., 0.0.20).
|
|
105
106
|
|
|
106
107
|
Advanced Installation Tips
|
|
107
108
|
--------------------------
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
pdd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
pdd/auto_deps_main.py,sha256=
|
|
2
|
+
pdd/auto_deps_main.py,sha256=NVLqL5FHxe2eorViXTuh8z2zH9Sb-b6MNN9aZ1hqevY,3552
|
|
3
3
|
pdd/auto_include.py,sha256=aCa2QXDlOdKbh4vS3uDjWptkHB_Qv3QBNCbZe6mGWoo,6074
|
|
4
4
|
pdd/auto_update.py,sha256=Pfav1hrqQIDjZIPuIvryBeM7k-Rc72feVUTJZPtigaU,2889
|
|
5
5
|
pdd/bug_main.py,sha256=myKU9--QWdkV4Wf3mD2PoLPJFNgRjwf4z8s7TC28G_s,3720
|
|
6
6
|
pdd/bug_to_unit_test.py,sha256=dsJNm6qAwx-m7RvFF5RquFJRzxzZGCWT4IKYnzVCUws,5569
|
|
7
7
|
pdd/change.py,sha256=iqjWS5DrQ73yMkuUQlwIRIFlofmKdaK6t6-v3zHKL-4,4985
|
|
8
8
|
pdd/change_main.py,sha256=yL_i1Ws5vt4vAkWiC826csNi2cHP6wKbwe_PfMqbbPY,11407
|
|
9
|
-
pdd/cli.py,sha256=
|
|
9
|
+
pdd/cli.py,sha256=QwqeSs8SXVg8V7wxLcs0Tr7b920TMarueO2mRy9BWZA,16593
|
|
10
10
|
pdd/cmd_test_main.py,sha256=aSCxRnSurg15AvPcJDAPp9xy8p_qqnjU1oV14Hi2R54,5301
|
|
11
11
|
pdd/code_generator.py,sha256=n5akrX7VPe71X4RsD6kKqAVvzBLMlciJI4RtJA1PcgA,4375
|
|
12
12
|
pdd/code_generator_main.py,sha256=G2eRBPXc1cGszkk0PbIPmJZHPaf_dw5d2yZbsvQZA3c,4793
|
|
@@ -14,18 +14,18 @@ pdd/comment_line.py,sha256=sX2hf4bG1fILi_rvI9MkkwCZ2IitgKkW7nOiw8aQKPY,1845
|
|
|
14
14
|
pdd/conflicts_in_prompts.py,sha256=rwCHlsIOJeFniox-dAA3v6Xcc3fjcVP0nRY0BSb92Cc,4654
|
|
15
15
|
pdd/conflicts_main.py,sha256=O87s9baSa9DJMndxPIdsnYO_spoajcv9jii3XYt_-fM,3473
|
|
16
16
|
pdd/construct_paths.py,sha256=8hxkTI_AF5XNpGR4JqCsF4olDBtL8NslXdOZGQt78WM,10039
|
|
17
|
-
pdd/context_generator.py,sha256=
|
|
17
|
+
pdd/context_generator.py,sha256=2J1IMD_L0oQD4PZsDxcbpZuDgUou_whlgz4EIMhhB14,5788
|
|
18
18
|
pdd/context_generator_main.py,sha256=TtsY3jHictdEjmB4cHyNwXmZW_LfHJp3KW3UXyzR2cU,2735
|
|
19
19
|
pdd/continue_generation.py,sha256=hAVySc6oEsM_Zpj5AWBKEZqMWgoLlQBHcFtkAZ9sZ0E,5192
|
|
20
|
-
pdd/crash_main.py,sha256=
|
|
20
|
+
pdd/crash_main.py,sha256=JFWEmFirHOAyUkHQ-IQJm6FJvSSARl1fPsGEW2urXg0,5198
|
|
21
21
|
pdd/detect_change.py,sha256=ZtgGjGPrD0po-37TEzSbnzFyor7spXHjnT7G6NJ4aCI,5261
|
|
22
22
|
pdd/detect_change_main.py,sha256=1Z4ymhjJaVr2aliGyqkqeqSmQ7QMgcl23p0wdsmBas0,3653
|
|
23
23
|
pdd/find_section.py,sha256=lz_FPY4KDCRAGlL1pWVZiutUNv7E4KsDFK-ymDWA_Ec,962
|
|
24
24
|
pdd/fix_code_loop.py,sha256=L0yxq2yAziPIyFGb8lIP2mvufu8a_gtc5nnN2LuMuKs,8596
|
|
25
25
|
pdd/fix_code_module_errors.py,sha256=M6AnlR2jF5LI-nNg6gIO5LvSkxiaLIUGyTvfnUfe1cU,4625
|
|
26
|
-
pdd/fix_error_loop.py,sha256=
|
|
27
|
-
pdd/fix_errors_from_unit_tests.py,sha256=
|
|
28
|
-
pdd/fix_main.py,sha256=
|
|
26
|
+
pdd/fix_error_loop.py,sha256=2DhqhIkw7YbU4UPca9CAyAOAJLuggj_BW7UV33XBDFc,16568
|
|
27
|
+
pdd/fix_errors_from_unit_tests.py,sha256=7YLBLm0Dnf7VVjHuqLh2IHig10M9Y7S04pvkQBxNTwA,9115
|
|
28
|
+
pdd/fix_main.py,sha256=VAC04KjjemhIuF2sQ_dkjKIR8v5X3rj3QSV_RsOFr4A,10848
|
|
29
29
|
pdd/generate_output_paths.py,sha256=zz42GTx9eGyWIYSl3jcWvtJRGnieC3eoPM6DIVcWz2k,7219
|
|
30
30
|
pdd/generate_test.py,sha256=BwmRnjaPDTlxUqJZ37N3bxTBHlLPCZIR5i1bwrNNv54,4791
|
|
31
31
|
pdd/get_comment.py,sha256=yuRtk68-SDkMaGzOSyIFdldRoymJBRSKjOYkr0narVc,2627
|
|
@@ -34,16 +34,18 @@ pdd/get_jwt_token.py,sha256=BGxqMh7qf2mG-TFw7JlV941O9XtrW22L_dRoS_UZNjM,11560
|
|
|
34
34
|
pdd/get_language.py,sha256=yxyQqVEb5H3ep3Hc6XgAl3vMLTHD5OIs8ZSekB493GA,1438
|
|
35
35
|
pdd/git_update.py,sha256=Ya7eI7YFtGIpT7FdziFJfnFkiZlj8I9Lh98lqtXfClc,2855
|
|
36
36
|
pdd/increase_tests.py,sha256=ZsBWkUBtZIsFfqTw3gOJLaYZMhNNRIKd-vu8Tv_AZG0,3243
|
|
37
|
-
pdd/insert_includes.py,sha256=
|
|
37
|
+
pdd/insert_includes.py,sha256=UASoq_46UNL6l7VGB7DW2jb4kcWlP6Hbj2EWuh7210Q,5310
|
|
38
38
|
pdd/install_completion.py,sha256=joTIKRkx0e6kRrXj9NXtMODnIG-G0Twt7wBmj8TirmE,5102
|
|
39
|
-
pdd/llm_invoke.py,sha256=
|
|
39
|
+
pdd/llm_invoke.py,sha256=Yhpoom9Ptgl_hjfWOFA_AhNQE2VFy07J9qWiEuHTP4Y,17343
|
|
40
40
|
pdd/load_prompt_template.py,sha256=4NH8_t5eon_vcyTznqtemJ_yAPkTJm_hSdTRgzj3qEQ,1907
|
|
41
41
|
pdd/pdd_completion.fish,sha256=rs-43fa3kcDBN1uy4oxiofLAWmaqW0U2j5Mu4wCHh5M,6121
|
|
42
42
|
pdd/pdd_completion.sh,sha256=qurWrEksqptjryBZszxHv6i0MqgnIqJenMBDrzMgI98,4535
|
|
43
43
|
pdd/pdd_completion.zsh,sha256=gav5kYLizpMLe9H_MK34sisgFx6LFDgfBW49nsg-5P0,12304
|
|
44
44
|
pdd/postprocess.py,sha256=7Dt4C7hZZbqCpYK0LG2Ui_vIUYw9UTN3w5Wgd_JZYBs,4021
|
|
45
45
|
pdd/postprocess_0.py,sha256=OW17GyCFLYErCyWh2tL4syuho3q2yFf2wyekQ4BLdPM,2168
|
|
46
|
-
pdd/preprocess.py,sha256=
|
|
46
|
+
pdd/preprocess copy.py,sha256=2XPmQRR5afUJ3xBVCO9JRRoYsYGrkb4Y0rw8VzAT8Ds,10093
|
|
47
|
+
pdd/preprocess.py,sha256=bm8C_TSyx1S6G9AG-MwVyXrF4oPOArbDtWQs79so6F0,10499
|
|
48
|
+
pdd/preprocess_copy_bahrat.py,sha256=NGfCIjodWak8wpdbThPw05qXmnDl_DDW-u9lehiKNZ4,13409
|
|
47
49
|
pdd/preprocess_main.py,sha256=dAgFGmjuJB1taZl31c1sY2jMGtQgjnWLbpeB7EFtojY,2977
|
|
48
50
|
pdd/process_csv_change.py,sha256=10XTzVFQ0rE4lPSF93yhIW7VJmxmfe-hk1B7ui_qxJI,8415
|
|
49
51
|
pdd/pytest_output.py,sha256=kmKiMHaQItrDVi_hTCtM5pfCgBuyZVEVRbxdchpS5CY,4796
|
|
@@ -58,7 +60,7 @@ pdd/update_main.py,sha256=5a4nsOOaAXULdk0BS9pj4blZ_QHBFeET37uaAqoJI2g,3912
|
|
|
58
60
|
pdd/update_prompt.py,sha256=OdPRIAMu7OBx7E4SOU95hWgdtBY4oO8XOe1dvPChMlU,4351
|
|
59
61
|
pdd/xml_tagger.py,sha256=NcyWacoXarRi6_16pchMhh1M7V-Gfz1cQImO_If2ia4,4241
|
|
60
62
|
pdd/data/language_format.csv,sha256=xUTmFHXSBVBRfPV-NKG3oWo5_ped5ukP-ekFcIlVzJk,877
|
|
61
|
-
pdd/data/llm_model.csv,sha256=
|
|
63
|
+
pdd/data/llm_model.csv,sha256=65xrg4hy6xnt-MIEKd5VP571LLY7IHrhCCa5fyXNYW4,1703
|
|
62
64
|
pdd/prompts/auto_include_LLM.prompt,sha256=0t-Jmm5o6vVTmqsISTUiewqPT8bB389UZnJoHZvgtu4,13967
|
|
63
65
|
pdd/prompts/bug_to_unit_test_LLM.prompt,sha256=--ysObDv9WzOEyJMuaKEdDHkRrR_1j0dmOtlAFr4YRg,1205
|
|
64
66
|
pdd/prompts/change_LLM.prompt,sha256=W3sE6XZ2fb35XdqOykK1hDPtqkHSv9MZGD3sT8B8WjY,2083
|
|
@@ -78,11 +80,11 @@ pdd/prompts/extract_promptline_LLM.prompt,sha256=owIBRaF2bWwg3S64uyMKzOFMdvvmI_E
|
|
|
78
80
|
pdd/prompts/extract_unit_code_fix_LLM.prompt,sha256=1gWS0-Qs6vMynNNqp1Xc-2hcsyH_NTLZPB1-lvyprm8,14143
|
|
79
81
|
pdd/prompts/extract_xml_LLM.prompt,sha256=eRcHaL-khShpb7C1_b7wmBJHfo2Kh1Wvjo_aOcWZovU,561
|
|
80
82
|
pdd/prompts/fix_code_module_errors_LLM.prompt,sha256=m-oqZ3cOkWbqke_l9z0Nmunf7NsnR9JWTNVVlfcteAY,1405
|
|
81
|
-
pdd/prompts/fix_errors_from_unit_tests_LLM.prompt,sha256=
|
|
83
|
+
pdd/prompts/fix_errors_from_unit_tests_LLM.prompt,sha256=1_nuUVr2E7DmJwHuLZ2A9KUxDFcsfLZvj9x0PcQ5FAg,4951
|
|
82
84
|
pdd/prompts/generate_test_LLM.prompt,sha256=y9SZ40zrRDOdp9DJnqq5_IMpsTORhAOphlo3QZlq7Ac,895
|
|
83
85
|
pdd/prompts/increase_tests_LLM.prompt,sha256=rekFzLRuZy99KifEKNlmPYoQdl8wa04112mtCdIY6S8,955
|
|
84
86
|
pdd/prompts/insert_includes_LLM.prompt,sha256=g-p2gXKENsqvfK5Q9FYbqFsIJ5CP7rbxmd4rROA-W80,1453
|
|
85
|
-
pdd/prompts/split_LLM.prompt,sha256=
|
|
87
|
+
pdd/prompts/split_LLM.prompt,sha256=T6KH6JWaMxRE1aA-IaVNlb2e85NfkYKRxqgDZZb2aBQ,6140
|
|
86
88
|
pdd/prompts/summarize_file_LLM.prompt,sha256=qb9K61XMVFy7hgGITglI37Xg7yLPAGQBm0rUBEqRnEc,387
|
|
87
89
|
pdd/prompts/trace_LLM.prompt,sha256=XTPoQQpKrF7BtWkCJPIrinn448VyBGXJieibMsMP-y0,1231
|
|
88
90
|
pdd/prompts/trim_results_LLM.prompt,sha256=w4aL0S7v7fPSi3L9XeQR3mUOgNv3hpTDqi4rOtu7L7I,4033
|
|
@@ -90,9 +92,9 @@ pdd/prompts/trim_results_start_LLM.prompt,sha256=WwFlOHha4wzMLtRHDMI6GtcNdl2toE8
|
|
|
90
92
|
pdd/prompts/unfinished_prompt_LLM.prompt,sha256=-JgBpiPTQZdWOAwOG1XpfpD9waynFTAT3Jo84eQ4bTw,1543
|
|
91
93
|
pdd/prompts/update_prompt_LLM.prompt,sha256=_lGaxeVP4oF8yGqiN6yj6UE0j79lxfGdjsYr5w5KSYk,1261
|
|
92
94
|
pdd/prompts/xml_convertor_LLM.prompt,sha256=YGRGXJeg6EhM9690f-SKqQrKqSJjLFD51UrPOlO0Frg,2786
|
|
93
|
-
pdd_cli-0.0.
|
|
94
|
-
pdd_cli-0.0.
|
|
95
|
-
pdd_cli-0.0.
|
|
96
|
-
pdd_cli-0.0.
|
|
97
|
-
pdd_cli-0.0.
|
|
98
|
-
pdd_cli-0.0.
|
|
95
|
+
pdd_cli-0.0.20.dist-info/licenses/LICENSE,sha256=-1bjYH-CEjGEQ8VixtnRYuu37kN6F9NxmZSDkBuUQ9o,1062
|
|
96
|
+
pdd_cli-0.0.20.dist-info/METADATA,sha256=nRERBWbeSOEDSJcAL-zsh0vvgnR9SuNBWA7SiEY1SGM,6831
|
|
97
|
+
pdd_cli-0.0.20.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
98
|
+
pdd_cli-0.0.20.dist-info/entry_points.txt,sha256=Kr8HtNVb8uHZtQJNH4DnF8j7WNgWQbb7_Pw5hECSR-I,36
|
|
99
|
+
pdd_cli-0.0.20.dist-info/top_level.txt,sha256=xjnhIACeMcMeDfVNREgQZl4EbTni2T11QkL5r7E-sbE,4
|
|
100
|
+
pdd_cli-0.0.20.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|