pdd-cli 0.0.23__py3-none-any.whl → 0.0.25__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.

Files changed (49) hide show
  1. pdd/__init__.py +7 -1
  2. pdd/bug_main.py +21 -3
  3. pdd/bug_to_unit_test.py +16 -5
  4. pdd/change.py +2 -1
  5. pdd/change_main.py +407 -189
  6. pdd/cli.py +853 -301
  7. pdd/code_generator.py +2 -1
  8. pdd/conflicts_in_prompts.py +2 -1
  9. pdd/construct_paths.py +377 -222
  10. pdd/context_generator.py +2 -1
  11. pdd/continue_generation.py +3 -2
  12. pdd/crash_main.py +55 -20
  13. pdd/data/llm_model.csv +8 -8
  14. pdd/detect_change.py +2 -1
  15. pdd/fix_code_loop.py +465 -160
  16. pdd/fix_code_module_errors.py +7 -4
  17. pdd/fix_error_loop.py +9 -9
  18. pdd/fix_errors_from_unit_tests.py +207 -365
  19. pdd/fix_main.py +31 -4
  20. pdd/fix_verification_errors.py +285 -0
  21. pdd/fix_verification_errors_loop.py +975 -0
  22. pdd/fix_verification_main.py +412 -0
  23. pdd/generate_output_paths.py +427 -183
  24. pdd/generate_test.py +3 -2
  25. pdd/increase_tests.py +2 -2
  26. pdd/llm_invoke.py +18 -8
  27. pdd/pdd_completion.zsh +38 -1
  28. pdd/preprocess.py +3 -3
  29. pdd/process_csv_change.py +466 -154
  30. pdd/prompts/extract_prompt_split_LLM.prompt +7 -4
  31. pdd/prompts/extract_prompt_update_LLM.prompt +11 -5
  32. pdd/prompts/extract_unit_code_fix_LLM.prompt +2 -2
  33. pdd/prompts/find_verification_errors_LLM.prompt +25 -0
  34. pdd/prompts/fix_code_module_errors_LLM.prompt +29 -0
  35. pdd/prompts/fix_errors_from_unit_tests_LLM.prompt +5 -5
  36. pdd/prompts/fix_verification_errors_LLM.prompt +20 -0
  37. pdd/prompts/generate_test_LLM.prompt +9 -3
  38. pdd/prompts/split_LLM.prompt +3 -3
  39. pdd/prompts/update_prompt_LLM.prompt +3 -3
  40. pdd/split.py +13 -12
  41. pdd/split_main.py +22 -13
  42. pdd/trace_main.py +7 -0
  43. pdd/xml_tagger.py +2 -1
  44. {pdd_cli-0.0.23.dist-info → pdd_cli-0.0.25.dist-info}/METADATA +4 -4
  45. {pdd_cli-0.0.23.dist-info → pdd_cli-0.0.25.dist-info}/RECORD +49 -44
  46. {pdd_cli-0.0.23.dist-info → pdd_cli-0.0.25.dist-info}/WHEEL +1 -1
  47. {pdd_cli-0.0.23.dist-info → pdd_cli-0.0.25.dist-info}/entry_points.txt +0 -0
  48. {pdd_cli-0.0.23.dist-info → pdd_cli-0.0.25.dist-info}/licenses/LICENSE +0 -0
  49. {pdd_cli-0.0.23.dist-info → pdd_cli-0.0.25.dist-info}/top_level.txt +0 -0
@@ -1,9 +1,12 @@
1
1
  % You are an expert Software Engineer. Your goal is to extract a JSON from the output of a LLM. This LLM split a prompt into a sub_prompt and modified_prompt.
2
2
 
3
- % Here is the generated llm_output: ```{llm_output}```
3
+ % Here is the generated llm_output:
4
+ <llm_output>
5
+ {llm_output}
6
+ </llm_output>
4
7
 
5
8
  % Output a JSON object with the following keys:
6
- - 'explaination': String containing the explaination of the split and how the prompts should be extracted properly so that both prompts are complete and functional. For instance, sometimes there will be messages like '[... other internal module examples ...]' which means text is missing and should be copied the input prompt.
7
- - 'sub_prompt': String containing the sub_prompt that was split from the input_prompt.
8
- - 'modified_prompt': String containing the complete modified prompt from input_prompt split from the sub_prompt. Sometimes only the changed portion of the modified prompt is given so you may need to combine it with parts of the input prompt get the complete modified prompt.
9
+ - 'explaination': String containing the explanation of the split and how the prompts should be extracted properly so that both prompts are complete and functional. For instance, sometimes there will be messages like '[... other internal module examples ...]' which means text is missing and should be copied from the input prompt.
10
+ - 'extracted_functionality': String containing the extracted functionality (the sub_prompt) that implements the interface defined in the example_code.
11
+ - 'remaining_prompt': String containing the modified original prompt that will import and use the functionality from the extracted sub-prompt. Sometimes only the changed portion of the modified prompt is given so you may need to combine it with parts of the input prompt to get the complete modified prompt.
9
12
 
@@ -1,8 +1,14 @@
1
- % You are an expert Software Engineer. Your goal is to extract a JSON from the output of a LLM. This LLM changed a input_prompt into a modified_prompt.
1
+ % You are an expert Software Engineer. Your goal is to extract the updated prompt from the LLM output.
2
2
 
3
- % Here is the generated llm_output: ```{llm_output}```
3
+ % Here is the generated llm_output: <llm_output>{llm_output}</llm_output>
4
4
 
5
- % Output a JSON object with the following keys:
6
- - 'modified_prompt': String containing the modified prompt that will generate the modified code.
7
-
5
+ % The LLM output contains the modified prompt that will generate the modified code, possibly with some additional commentary or explanation.
6
+ % Your task is to identify and extract ONLY the modified prompt itself, without adding any JSON structure or additional formatting.
8
7
 
8
+ % Ensure you:
9
+ % 1. Remove any "# Modified Prompt" headers or similar text that isn't part of the actual prompt
10
+ % 2. Preserve all markdown, code blocks, and formatting within the actual prompt
11
+ % 3. Don't add any explanatory text, JSON wrappers, or your own commentary
12
+ % 4. Return only the text that constitutes the actual prompt
13
+
14
+ % The "modified_prompt" should be the complete, standalone prompt that could be used directly to generate the modified code.
@@ -328,5 +328,5 @@
328
328
  - 'explanation': String explanation of whether the code under test needs to be fix and/or if the unit test needs to be fixed. Also, explain whether only a fragment of code was provided and the entire unit test and/or code under test needs to be reassembled from the original code and/or unit test.
329
329
  - 'update_unit_test': Boolean indicating whether the unit test needs to be updated.
330
330
  - 'update_code': Boolean indicating whether the code under test needs to be updated.
331
- - 'fixed_unit_test': The entire updated unit test code or empty String if no update is needed.
332
- - 'fixed_code': The entire updated code under test or empty String if no update is needed.
331
+ - 'fixed_unit_test': The entire updated unit test code or empty String if no update is needed. Don't lose prior comments in the unit test unless they are no longer valid.
332
+ - 'fixed_code': The entire updated code under test or empty String if no update is needed. Don't lose prior comments in the code under test unless they are no longer valid.
@@ -0,0 +1,25 @@
1
+ % You are an expert Software Engineer. Your goal is to verify a code_module or program for correctness and potential issues, even if it hasn't crashed.
2
+
3
+ % Here is the program that is running the code_module: <program>{program}</program>
4
+
5
+ % Here is the prompt that generated the program and code_module: <prompt>{prompt}</prompt>
6
+
7
+ % Here is the code_module that is being used by the program: <code_module>{code}</code_module>
8
+
9
+ % Here are the output logs from the program run: <output>{output}</output>
10
+
11
+ % Follow these steps to verify the program:
12
+ Step 1. Compare the program and code_module against the prompt and explain any discrepancies.
13
+ Step 2. Analyze the input/output behavior of the program and verify if it meets the expected behavior described in the prompt.
14
+ Step 3. Identify any potential edge cases, error handling issues, or performance concerns that could cause problems in the future.
15
+ Step 4. Check the code for potential bugs that haven't manifested yet.
16
+ Step 5. If any issues are found, explain in detail the root cause of each issue and how it could impact the program's functioning.
17
+
18
+ % Your response should include the following structured output:
19
+
20
+ <details>
21
+ The detailed output of steps 1-5
22
+ </details>
23
+ <issues_count>N</issues_count>
24
+
25
+ % The issues_count field should be set to the number of issues, bugs, discrepancies, or potential problems identified (an integer >= 0). Set it to 0 if no issues are found.
@@ -8,6 +8,35 @@
8
8
 
9
9
  % Here are the error log(s) from the program run and potentially from prior program run fixes: <errors>{errors}</errors>
10
10
 
11
+ % NOTE: The errors field contains a structured history of previous fixing attempts with XML tags and human-readable content:
12
+ <attempt number="X"> - Start of each attempt record
13
+ <verification>
14
+ Status: Success/failure status with return code
15
+ Output: [Standard output text]
16
+ Error: [Error message text]
17
+ </verification>
18
+
19
+ <current_error>
20
+ [Current error message to be fixed]
21
+ </current_error>
22
+
23
+ <fixing>
24
+ <llm_analysis>
25
+ [Analysis from previous attempts in human-readable format]
26
+ </llm_analysis>
27
+ <decision>
28
+ update_program: true/false
29
+ update_code: true/false
30
+ </decision>
31
+ </fixing>
32
+ </attempt>
33
+
34
+ % When analyzing errors, you should:
35
+ 1. Review the history of previous attempts to understand what has been tried
36
+ 2. Pay attention to which fixes worked partially or not at all
37
+ 3. Avoid repeating approaches that failed in previous attempts
38
+ 4. Focus on solving the current error found within the <current_error> tags
39
+
11
40
  % Follow these steps to solve these errors:
12
41
  Step 1. Compare the prompt to the code_module and explain differences, if any.
13
42
  Step 2. Compare the prompt to the program and explain differences, if any.
@@ -9,7 +9,7 @@
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
11
  % If the verfication program fails to run, the code_under_test and unit_test are unchanged from the previous iteration.
12
-
12
+ <pdd>
13
13
  <examples>
14
14
  <example_1>
15
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>
@@ -34,7 +34,7 @@
34
34
 
35
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>
36
36
  </example_3>
37
- <pdd>
37
+
38
38
 
39
39
  <example_4>
40
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>
@@ -51,8 +51,8 @@
51
51
 
52
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>
53
53
  </example_5>
54
- </pdd>
55
54
  </examples>
55
+ </pdd>
56
56
 
57
57
  <instructions>
58
58
  % Follow these steps to solve these errors:
@@ -60,7 +60,7 @@
60
60
  Step 2. Compare the prompt to the unit_test and explain differences, if any.
61
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.
62
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.
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 in subsequent iterations.
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 in subsequent iterations. It is important to make sure the tests are still sufficiently comprehensive to catch potential errors.
64
64
  Step 6. Review the above steps and correct for any errors and warnings in the code under test or unit test.
65
- Step 7. For the code that need changes, write the complete instructions to correct code_under_test (surrounded by 'corrected_code_under_test' XML tags) and/or corrected unit_test (surrounded by 'corrected_unit_test' XML tags).
65
+ Step 7. For the code that need changes, write the corrected code_under_test and/or corrected unit_test in its/their entirety.
66
66
  </instructions>
@@ -0,0 +1,20 @@
1
+ % You are an expert Software Engineer. Your goal is to fix a code_module given a list of potential issues.
2
+
3
+ % Here is the program that is running the code_module: <program>{program}</program>
4
+
5
+ % Here is the prompt that generated the program and code_module: <prompt>{prompt}</prompt>
6
+
7
+ % Here is the code_module that is being used by the program: <code_module>{code}</code_module>
8
+
9
+ % Here are the output logs from the program run: <output>{output}</output>
10
+
11
+ % Here are the potential issues that need to be fixed: <issues>{issues}</issues>
12
+
13
+ % Follow these steps to fix the program or code_module:
14
+ Step 1. Analyze and understand each identified issue in the context of the code_module and program.
15
+ Step 2. For each issue, develop a solution that addresses the root cause while still satisfying the prompt requirements.
16
+ Step 3. Implement the fixes, ensuring the changes resolve the issues without introducing new problems.
17
+ Step 4. Provide the complete fixed code_module and program with explanations for each significant change made.
18
+ Step 5. Verify that the fixed code meets all requirements from the original prompt and addresses all identified issues.
19
+
20
+ % Write the detail explanation for each step above in a <explanation> XML tag, the fixed code_module in a <fixed_code> XML tag and the fixed program in a <fixed_program> XML tag
@@ -1,4 +1,4 @@
1
- % You are an expert Software Test Engineer. Your goal is to generate a unit test that ensures correct functionality of the code under test.
1
+ % You are an expert Software Test Engineer. Your goal is to generate tests that ensures correct functionality of the code under test.
2
2
 
3
3
  % Here a description of what the code is supposed to do and was the prompt that generated the code: <prompt_that_generated_code>{prompt_that_generated_code}</prompt_that_generated_code>
4
4
 
@@ -9,12 +9,18 @@
9
9
  - The unit test should be in {language}. If Python, use pytest.
10
10
  - Use individual test functions for each case to make it easier to identify which specific cases pass or fail.
11
11
  - Use the description of the functionality in the prompt to generate tests with useful tests with good code coverage.
12
- - The code might get regenerated by a LLM so focus the test on the functionality of the code, not the implementation details.
12
+ - The code might get regenerated by a LLM so focus the tests on the functionality of the code, not the implementation details.
13
+ - NEVER access internal implementation details (variables/functions starting with underscore) in your tests.
14
+ - Setup and teardown methods should only use public APIs and environment variables, never reset internal module state directly.
15
+ - Design tests to be independent of implementation details that might change when code is regenerated.
16
+ - For test isolation, use fixtures and mocking of external dependencies rather than manipulating internal module state. In general minimize the amount of mocking needed so that the tests are more robust to changes in the code under test and more code is tested.
13
17
  <include>./context/test.prompt</include>
14
18
 
15
19
  <instructions>
16
20
  1. Carefully read the prompt that generated the code under test and determine what might be possible edge cases.
17
21
  2. For each edge case explain whether it is better to do the test using Z3 formal verification or unit tests.
18
22
  3. Develop a detailed test plan that will ensure the code under test is correct. This should involve both Z3 formal verification and unit tests.
19
- 4. Write the unit tests and Z3 formal verification tests that are runnable as unit tests.
23
+ 4. Now write the test file.
24
+ a) The first part of the test file should be the detailed test plan from step 3 above in comments.
25
+ b) Then write the tests and Z3 formal verification tests that are runnable as unit tests.
20
26
  </instructions>
@@ -69,12 +69,12 @@
69
69
  Input:
70
70
  'input_prompt' - A string contains the prompt that will be split into a sub_prompt and modified_prompt.
71
71
  'input_code' - A string that contains the code that was generated from the input_prompt.
72
- 'example_code' - A string that contains the code example of how the code generated from the sub_prompt would be used by the code generated from the modified_prompt.
72
+ 'example_code' - A string that contains an interface defining the specific functionality to extract into the sub_prompt. The sub_prompt will generate code that implements this interface.
73
73
  </input_definitions>
74
74
  <output_definitions>
75
75
  Output:
76
- 'sub_prompt' - A string that contains the sub_prompt that was split from the input_prompt.
77
- 'modified_prompt' - A string that contains the modified prompt from input_prompt split from the above sub_prompt.
76
+ 'sub_prompt' - A string that contains the extracted functionality as defined by the example_code interface that was split from the input_prompt.
77
+ 'modified_prompt' - A string that contains the modified original prompt that will import and use the functionality defined in the sub_prompt.
78
78
  </output_definitions>
79
79
  </context>
80
80
 
@@ -8,9 +8,9 @@
8
8
  Output:
9
9
  'modified_prompt' - A string that contains the updated prompt that will generate the modified code.
10
10
 
11
- % Here is the input_prompt to change: ```{input_prompt}```
12
- % Here is the input_code: ```{input_code}```
13
- % Here is the modified_code: ```{modified_code}```
11
+ % Here is the input_prompt to change: <input_prompt>{input_prompt}</input_prompt>
12
+ % Here is the input_code: <input_code>{input_code}</input_code>
13
+ % Here is the modified_code: <modified_code>{modified_code}</modified_code>
14
14
 
15
15
  % To generate the modified prompt, perform the following sequence of steps:
16
16
  1. Using the provided input_code and input_prompt, identify what the code does and how it was generated.
pdd/split.py CHANGED
@@ -5,10 +5,11 @@ from pydantic import BaseModel, Field
5
5
  from .load_prompt_template import load_prompt_template
6
6
  from .preprocess import preprocess
7
7
  from .llm_invoke import llm_invoke
8
+ from . import EXTRACTION_STRENGTH
8
9
 
9
10
  class PromptSplit(BaseModel):
10
- sub_prompt: str = Field(description="The extracted sub-prompt")
11
- modified_prompt: str = Field(description="The modified original prompt")
11
+ extracted_functionality: str = Field(description="The extracted functionality as a sub-module prompt")
12
+ remaining_prompt: str = Field(description="The modified original prompt that will import the extracted functionality")
12
13
 
13
14
  def split(
14
15
  input_prompt: str,
@@ -17,9 +18,9 @@ def split(
17
18
  strength: float,
18
19
  temperature: float,
19
20
  verbose: bool = False
20
- ) -> Tuple[str, str, str, float]:
21
+ ) -> Tuple[str, str, float, str]:
21
22
  """
22
- Split a prompt into a sub_prompt and modified_prompt.
23
+ Split a prompt into extracted functionality and remaining prompt.
23
24
 
24
25
  Args:
25
26
  input_prompt (str): The prompt to split.
@@ -30,7 +31,7 @@ def split(
30
31
  verbose (bool): Whether to print detailed information.
31
32
 
32
33
  Returns:
33
- Tuple[str, str, str, float]: (sub_prompt, modified_prompt, model_name, total_cost)
34
+ Tuple[str, str, float, str]: (extracted_functionality, remaining_prompt, model_name, total_cost)
34
35
  where model_name is the name of the model used (returned as the second to last tuple element)
35
36
  and total_cost is the aggregated cost from all LLM invocations.
36
37
  """
@@ -91,7 +92,7 @@ def split(
91
92
  extract_response = llm_invoke(
92
93
  prompt=processed_extract_prompt,
93
94
  input_json={"llm_output": split_response["result"]},
94
- strength=0.97, # Fixed strength for extraction
95
+ strength=EXTRACTION_STRENGTH, # Fixed strength for extraction
95
96
  temperature=temperature,
96
97
  output_pydantic=PromptSplit,
97
98
  verbose=verbose
@@ -100,19 +101,19 @@ def split(
100
101
 
101
102
  # Extract results
102
103
  result: PromptSplit = extract_response["result"]
103
- sub_prompt = result.sub_prompt
104
- modified_prompt = result.modified_prompt
104
+ extracted_functionality = result.extracted_functionality
105
+ remaining_prompt = result.remaining_prompt
105
106
 
106
107
  # 5. Print verbose output if requested
107
108
  if verbose:
108
109
  rprint("\n[bold green]Final Results:[/bold green]")
109
- rprint(Markdown(f"### Sub Prompt\n{sub_prompt}"))
110
- rprint(Markdown(f"### Modified Prompt\n{modified_prompt}"))
110
+ rprint(Markdown(f"### Extracted Functionality\n{extracted_functionality}"))
111
+ rprint(Markdown(f"### Remaining Prompt\n{remaining_prompt}"))
111
112
  rprint(f"[bold cyan]Total Cost: ${total_cost:.6f}[/bold cyan]")
112
113
  rprint(f"[bold cyan]Model used: {model_name}[/bold cyan]")
113
114
 
114
- # 6. Return results (model_name is the 2nd to last element)
115
- return sub_prompt, modified_prompt, model_name, total_cost
115
+ # 6. Return results with standardized order: (result_data, cost, model_name)
116
+ return (extracted_functionality, remaining_prompt), total_cost, model_name
116
117
 
117
118
  except Exception as e:
118
119
  # Print an error message, then raise an exception that includes
pdd/split_main.py CHANGED
@@ -13,22 +13,22 @@ def split_main(
13
13
  example_code_file: str,
14
14
  output_sub: Optional[str],
15
15
  output_modified: Optional[str]
16
- ) -> Tuple[str, str, str, float]:
16
+ ) -> Tuple[str, str, float, str]:
17
17
  """
18
- CLI wrapper for splitting a prompt into a sub_prompt and modified_prompt.
18
+ CLI wrapper for splitting a prompt into extracted functionality and remaining prompt.
19
19
 
20
20
  Args:
21
21
  ctx: Click context containing command-line parameters.
22
22
  input_prompt_file: Path to the input prompt file to be split.
23
23
  input_code_file: Path to the code file generated from the input prompt.
24
24
  example_code_file: Path to the example code file showing usage.
25
- output_sub: Optional path where to save the sub-prompt.
26
- output_modified: Optional path where to save the modified prompt.
25
+ output_sub: Optional path where to save the extracted functionality.
26
+ output_modified: Optional path where to save the remaining prompt.
27
27
 
28
28
  Returns:
29
29
  Tuple containing:
30
- - str: The sub-prompt content
31
- - str: The modified prompt content
30
+ - str: The extracted functionality content
31
+ - str: The remaining prompt content
32
32
  - float: The total cost of the operation
33
33
  - str: The model name used (second to last element)
34
34
 
@@ -60,8 +60,8 @@ def split_main(
60
60
  strength = ctx.obj.get('strength', 0.5)
61
61
  temperature = ctx.obj.get('temperature', 0)
62
62
 
63
- # Call the split function and unpack the new tuple signature
64
- sub_prompt, modified_prompt, model_name, total_cost = split(
63
+ # Call the split function with the standardized return pattern (result_data, cost, model_name)
64
+ result_tuple, total_cost, model_name = split(
65
65
  input_prompt=input_strings["input_prompt"],
66
66
  input_code=input_strings["input_code"],
67
67
  example_code=input_strings["example_code"],
@@ -69,25 +69,34 @@ def split_main(
69
69
  temperature=temperature,
70
70
  verbose=not ctx.obj.get('quiet', False)
71
71
  )
72
+
73
+ # Unpack the result tuple
74
+ extracted_functionality, remaining_prompt = result_tuple
72
75
 
73
76
  # Save the output files
74
77
  try:
75
78
  with open(output_file_paths["output_sub"], 'w') as f:
76
- f.write(sub_prompt)
79
+ f.write(extracted_functionality) # The extracted functionality goes to output_sub
77
80
  with open(output_file_paths["output_modified"], 'w') as f:
78
- f.write(modified_prompt)
81
+ f.write(remaining_prompt) # The remaining prompt goes to output_modified
79
82
  except IOError as e:
80
83
  raise IOError(f"Failed to save output files: {str(e)}")
81
84
 
82
85
  # Provide user feedback if not in quiet mode
83
86
  if not ctx.obj.get('quiet', False):
84
87
  rprint("[bold green]Successfully split the prompt![/bold green]")
85
- rprint(f"[bold]Sub-prompt saved to:[/bold] {output_file_paths['output_sub']}")
86
- rprint(f"[bold]Modified prompt saved to:[/bold] {output_file_paths['output_modified']}")
88
+ rprint(f"[bold]Extracted functionality saved to:[/bold] {output_file_paths['output_sub']}")
89
+ rprint(f"[bold]Remaining prompt saved to:[/bold] {output_file_paths['output_modified']}")
87
90
  rprint(f"[bold]Model used:[/bold] {model_name}")
88
91
  rprint(f"[bold]Total cost:[/bold] ${total_cost:.6f}")
89
92
 
90
- return sub_prompt, modified_prompt, total_cost, model_name
93
+ # Return with standardized order (result_data, cost, model_name)
94
+ return {
95
+ "sub_prompt_content": extracted_functionality,
96
+ "modified_prompt_content": remaining_prompt,
97
+ "output_sub": output_file_paths["output_sub"],
98
+ "output_modified": output_file_paths["output_modified"]
99
+ }, total_cost, model_name
91
100
 
92
101
  except Exception as e:
93
102
  # Handle errors and provide appropriate feedback
pdd/trace_main.py CHANGED
@@ -56,6 +56,13 @@ def trace_main(ctx: click.Context, prompt_file: str, code_file: str, code_line:
56
56
  code_content, code_line, prompt_content, strength, temperature
57
57
  )
58
58
  logger.debug(f"Trace analysis completed: prompt_line={prompt_line}, total_cost={total_cost}, model_name={model_name}")
59
+
60
+ # Exit with error if trace returned None (indicating an error occurred)
61
+ if prompt_line is None:
62
+ if not quiet:
63
+ rprint(f"[bold red]Trace analysis failed[/bold red]")
64
+ logger.error("Trace analysis failed (prompt_line is None)")
65
+ ctx.exit(1)
59
66
  except ValueError as e:
60
67
  if not quiet:
61
68
  rprint(f"[bold red]Invalid input: {e}[/bold red]")
pdd/xml_tagger.py CHANGED
@@ -4,6 +4,7 @@ from rich.markdown import Markdown
4
4
  from pydantic import BaseModel, Field
5
5
  from .load_prompt_template import load_prompt_template
6
6
  from .llm_invoke import llm_invoke
7
+ from . import EXTRACTION_STRENGTH
7
8
 
8
9
  class XMLOutput(BaseModel):
9
10
  xml_tagged: str = Field(description="The XML-tagged version of the prompt")
@@ -72,7 +73,7 @@ def xml_tagger(
72
73
  extraction_response = llm_invoke(
73
74
  prompt=extract_xml_prompt,
74
75
  input_json={"xml_generated_analysis": xml_generated_analysis},
75
- strength=0.97, # Fixed strength as specified
76
+ strength=EXTRACTION_STRENGTH, # Fixed strength for extraction
76
77
  temperature=temperature,
77
78
  verbose=verbose,
78
79
  output_pydantic=XMLOutput
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pdd-cli
3
- Version: 0.0.23
3
+ Version: 0.0.25
4
4
  Summary: PDD (Prompt-Driven Development) Command Line Interface
5
5
  Author: Greg Tanaka
6
6
  Author-email: glt@alumni.caltech.edu
@@ -32,7 +32,7 @@ Requires-Dist: langchain_community==0.3.21
32
32
  Requires-Dist: langchain_core==0.3.51
33
33
  Requires-Dist: langchain_fireworks==0.2.9
34
34
  Requires-Dist: langchain_google_genai==2.1.2
35
- Requires-Dist: langchain_google_vertexai==2.0.19
35
+ Requires-Dist: langchain_google_vertexai>=2.0.20
36
36
  Requires-Dist: langchain_groq==0.3.2
37
37
  Requires-Dist: langchain_mcp_adapters==0.0.7
38
38
  Requires-Dist: langchain_ollama==0.3.0
@@ -53,7 +53,7 @@ Requires-Dist: pytest; extra == "dev"
53
53
  Requires-Dist: pytest-cov; extra == "dev"
54
54
  Dynamic: license-file
55
55
 
56
- .. image:: https://img.shields.io/badge/pdd--cli-v0.0.23-blue
56
+ .. image:: https://img.shields.io/badge/pdd--cli-v0.0.25-blue
57
57
  :alt: PDD-CLI Version
58
58
 
59
59
  PDD (Prompt-Driven Development) Command Line Interface
@@ -114,7 +114,7 @@ After installation, verify:
114
114
 
115
115
  pdd --version
116
116
 
117
- You'll see the current PDD version (e.g., 0.0.23).
117
+ You'll see the current PDD version (e.g., 0.0.25).
118
118
 
119
119
  Advanced Installation Tips
120
120
  --------------------------
@@ -1,66 +1,69 @@
1
- pdd/__init__.py,sha256=CO0VmekjZ_r8LBYVaUXTM3i08rEVwYKhjb9sy0X7vz0,23
1
+ pdd/__init__.py,sha256=R0xg5SpSRGjfzqb-AQQLwClBZ5uL-UEPgZjNLBO0em4,293
2
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
- pdd/bug_main.py,sha256=myKU9--QWdkV4Wf3mD2PoLPJFNgRjwf4z8s7TC28G_s,3720
6
- pdd/bug_to_unit_test.py,sha256=dsJNm6qAwx-m7RvFF5RquFJRzxzZGCWT4IKYnzVCUws,5569
7
- pdd/change.py,sha256=iqjWS5DrQ73yMkuUQlwIRIFlofmKdaK6t6-v3zHKL-4,4985
8
- pdd/change_main.py,sha256=yL_i1Ws5vt4vAkWiC826csNi2cHP6wKbwe_PfMqbbPY,11407
9
- pdd/cli.py,sha256=EvCWObNZwmQgLvCdgEan3-4DNnlTPOVqvNaPLfd-Vcs,16620
5
+ pdd/bug_main.py,sha256=cSGBnHmFIA8WrkGiohJFVRuM2086v-wlPvTJqTv00WQ,4631
6
+ pdd/bug_to_unit_test.py,sha256=80B8Nd_kYUvns1Rt9x69ZoZGN9hURV_R5NSUUWhi6gE,6315
7
+ pdd/change.py,sha256=EKmv7WvXNX24rjLCnrcaoo4xOVkNhCa9HLRbpMAxQSw,5036
8
+ pdd/change_main.py,sha256=5IAFW1_eazYCr3F1DlfO6FDpNDZ4LgkXBWLb6rKW-PQ,25643
9
+ pdd/cli.py,sha256=33n3xF-CbkdJQUniU7iqgMwBpesxxQjLHoRRrvuyvMo,37053
10
10
  pdd/cmd_test_main.py,sha256=aSCxRnSurg15AvPcJDAPp9xy8p_qqnjU1oV14Hi2R54,5301
11
- pdd/code_generator.py,sha256=n5akrX7VPe71X4RsD6kKqAVvzBLMlciJI4RtJA1PcgA,4375
11
+ pdd/code_generator.py,sha256=DqQNN6jCNjSJvHi0IFyqkSfak6LeDG-yQHPYnvd4AJQ,4424
12
12
  pdd/code_generator_main.py,sha256=G2eRBPXc1cGszkk0PbIPmJZHPaf_dw5d2yZbsvQZA3c,4793
13
13
  pdd/comment_line.py,sha256=sX2hf4bG1fILi_rvI9MkkwCZ2IitgKkW7nOiw8aQKPY,1845
14
- pdd/conflicts_in_prompts.py,sha256=rwCHlsIOJeFniox-dAA3v6Xcc3fjcVP0nRY0BSb92Cc,4654
14
+ pdd/conflicts_in_prompts.py,sha256=XaEm9jIMcbENTyhphD8NXs2EmRxuPu1EI8GHrsiRwq0,4687
15
15
  pdd/conflicts_main.py,sha256=O87s9baSa9DJMndxPIdsnYO_spoajcv9jii3XYt_-fM,3473
16
- pdd/construct_paths.py,sha256=8hxkTI_AF5XNpGR4JqCsF4olDBtL8NslXdOZGQt78WM,10039
17
- pdd/context_generator.py,sha256=xLquyM6h40Xqg_wcdowqobrLFyZpIvGrOCJD-OBuoy4,5798
16
+ pdd/construct_paths.py,sha256=AE3vblj2v21ZdReM40pz47gvmXg-RZjuR_2FALj_9fs,17672
17
+ pdd/context_generator.py,sha256=MO483MqtMR5EUanllD7Ru5U9idcVMIMutntcWMn31cI,5847
18
18
  pdd/context_generator_main.py,sha256=TtsY3jHictdEjmB4cHyNwXmZW_LfHJp3KW3UXyzR2cU,2735
19
- pdd/continue_generation.py,sha256=hAVySc6oEsM_Zpj5AWBKEZqMWgoLlQBHcFtkAZ9sZ0E,5192
20
- pdd/crash_main.py,sha256=JFWEmFirHOAyUkHQ-IQJm6FJvSSARl1fPsGEW2urXg0,5198
21
- pdd/detect_change.py,sha256=ZtgGjGPrD0po-37TEzSbnzFyor7spXHjnT7G6NJ4aCI,5261
19
+ pdd/continue_generation.py,sha256=iL6gosNMnU1hZn61HuaX81yXc5O9kWLEJxv0K3qs8hI,5242
20
+ pdd/crash_main.py,sha256=yveWWJWxCOzRLxPk1m1rgm4tNwpAk5jYRvYyItAaU2w,7262
21
+ pdd/detect_change.py,sha256=t70NAgakVc2u7XiI-lZjuR2RZ8Mrd3lJwRPu8I8s_P4,5310
22
22
  pdd/detect_change_main.py,sha256=1Z4ymhjJaVr2aliGyqkqeqSmQ7QMgcl23p0wdsmBas0,3653
23
23
  pdd/edit_file.py,sha256=-FhZ-KGKYkPbnt0zFiDnnosPLh3bbKmften0Ios4-90,35017
24
24
  pdd/find_section.py,sha256=lz_FPY4KDCRAGlL1pWVZiutUNv7E4KsDFK-ymDWA_Ec,962
25
- pdd/fix_code_loop.py,sha256=L0yxq2yAziPIyFGb8lIP2mvufu8a_gtc5nnN2LuMuKs,8596
26
- pdd/fix_code_module_errors.py,sha256=M6AnlR2jF5LI-nNg6gIO5LvSkxiaLIUGyTvfnUfe1cU,4625
27
- pdd/fix_error_loop.py,sha256=BBUROFjV6Hvp141ruDqkf-VeQti3Yx_8hxdTKLJMWcY,23983
28
- pdd/fix_errors_from_unit_tests.py,sha256=vFQdEetg2VpfrQhXPa441ZJdmmBR3Z743545_lNWVA4,15978
29
- pdd/fix_main.py,sha256=2CoCsCQD0X1sqkhiG1Oako0REtnq7fl_GnnPc2HP3QI,12269
30
- pdd/generate_output_paths.py,sha256=zz42GTx9eGyWIYSl3jcWvtJRGnieC3eoPM6DIVcWz2k,7219
31
- pdd/generate_test.py,sha256=BwmRnjaPDTlxUqJZ37N3bxTBHlLPCZIR5i1bwrNNv54,4791
25
+ pdd/fix_code_loop.py,sha256=aXUAv73mNLiv-3OiHXXeftclOBQklp06FbE-YMN_XdI,24307
26
+ pdd/fix_code_module_errors.py,sha256=O7W-jqQ7REdAY7x03tjzAC2xzxUJwl89vHCdlfPGqd0,4747
27
+ pdd/fix_error_loop.py,sha256=BdoI08HD30BHCjjfvpH7zamdjv6sMqi70li_oRu_-P0,24004
28
+ pdd/fix_errors_from_unit_tests.py,sha256=SdL4wgo6ARgIClTTYlHuNu12t1cE4YohpGqo4Mcj1P8,9192
29
+ pdd/fix_main.py,sha256=rHVxkn5TuUipgu0LQo6n3IaBjlFjU6aiPLtjYWEJY0c,13730
30
+ pdd/fix_verification_errors.py,sha256=cSUTLREum_EUKDE-cRr5HlErCaHaQLw9MWund0G6rTk,13085
31
+ pdd/fix_verification_errors_loop.py,sha256=PTVRu3LN8SMnxVH0dEzM-00VsGnmYLryGdPqMnt8lb8,52768
32
+ pdd/fix_verification_main.py,sha256=0pyKdoNMzx9n_kKdW0hXvfINOGAtzXa1e6u_9PNKync,19095
33
+ pdd/generate_output_paths.py,sha256=Vy0DmBLFQ35kkpDFlbZz3_iZyc7sRvjIeTO9zv8yBq4,18324
34
+ pdd/generate_test.py,sha256=6wNICtDP-_sWaura0PrrTrCRqjUbgzpTRMk0mTxupL4,4845
32
35
  pdd/get_comment.py,sha256=yuRtk68-SDkMaGzOSyIFdldRoymJBRSKjOYkr0narVc,2627
33
36
  pdd/get_extension.py,sha256=ZSsbi7n-tFw-7RQX7c3pV1qWsRt72qS_3AlAYjV53jA,2393
34
37
  pdd/get_jwt_token.py,sha256=BGxqMh7qf2mG-TFw7JlV941O9XtrW22L_dRoS_UZNjM,11560
35
38
  pdd/get_language.py,sha256=yxyQqVEb5H3ep3Hc6XgAl3vMLTHD5OIs8ZSekB493GA,1438
36
39
  pdd/git_update.py,sha256=Ya7eI7YFtGIpT7FdziFJfnFkiZlj8I9Lh98lqtXfClc,2855
37
- pdd/increase_tests.py,sha256=axOvM_F7pLRevWJsYe2W7d24OA7P-FaWShE4cotktNo,3424
40
+ pdd/increase_tests.py,sha256=dlYd9PosV3g8kpDlQh6gd8WUauClvs_-Z8ERRD-kZk4,3456
38
41
  pdd/insert_includes.py,sha256=UASoq_46UNL6l7VGB7DW2jb4kcWlP6Hbj2EWuh7210Q,5310
39
42
  pdd/install_completion.py,sha256=H_FIid0eHCn7I6HHIsBqdComAxjLIu7CbD6yfMU48aw,5085
40
- pdd/llm_invoke.py,sha256=Yhpoom9Ptgl_hjfWOFA_AhNQE2VFy07J9qWiEuHTP4Y,17343
43
+ pdd/llm_invoke.py,sha256=QYkwN3a2IyQXmksAynRKXk7DAFDXIvtvQexFWBdROyg,17814
41
44
  pdd/load_prompt_template.py,sha256=4NH8_t5eon_vcyTznqtemJ_yAPkTJm_hSdTRgzj3qEQ,1907
42
45
  pdd/mcp_config.json,sha256=D3ctWHlShvltbtH37zbYb6smVE0V80_lGjDKDIqsSBE,124
43
46
  pdd/pdd_completion.fish,sha256=rs-43fa3kcDBN1uy4oxiofLAWmaqW0U2j5Mu4wCHh5M,6121
44
47
  pdd/pdd_completion.sh,sha256=qurWrEksqptjryBZszxHv6i0MqgnIqJenMBDrzMgI98,4535
45
- pdd/pdd_completion.zsh,sha256=gav5kYLizpMLe9H_MK34sisgFx6LFDgfBW49nsg-5P0,12304
48
+ pdd/pdd_completion.zsh,sha256=-yz69Rs4lnJ-bRAF8H2Tzk0GuDUo-BWjytE3fv5wTS8,13458
46
49
  pdd/postprocess.py,sha256=7Dt4C7hZZbqCpYK0LG2Ui_vIUYw9UTN3w5Wgd_JZYBs,4021
47
50
  pdd/postprocess_0.py,sha256=OW17GyCFLYErCyWh2tL4syuho3q2yFf2wyekQ4BLdPM,2168
48
- pdd/preprocess.py,sha256=24Nwk-3H_X0EJyX52auf4JjLR9eDrAZ7YScvrgLEPKw,9520
51
+ pdd/preprocess.py,sha256=UB1rqSNscUC-JHujvGb11LJ5OadZ3GVD1Qeq1dI6HMc,9508
49
52
  pdd/preprocess_main.py,sha256=dAgFGmjuJB1taZl31c1sY2jMGtQgjnWLbpeB7EFtojY,2977
50
- pdd/process_csv_change.py,sha256=10XTzVFQ0rE4lPSF93yhIW7VJmxmfe-hk1B7ui_qxJI,8415
53
+ pdd/process_csv_change.py,sha256=GYb9UGmZ-E355JjMGNTrjzH1n-wc2vrx3Vef3e1DdL4,27550
51
54
  pdd/pytest_output.py,sha256=kmKiMHaQItrDVi_hTCtM5pfCgBuyZVEVRbxdchpS5CY,4796
52
- pdd/split.py,sha256=aISO7DcD8UkE_r7w1Ii466RgxSlVDFfTCymJ7IWUhsw,4692
53
- pdd/split_main.py,sha256=dV9G2YJDp12ik6x1a_dgBtyu27BSt4Fyd2trgxL7qFI,4123
55
+ pdd/split.py,sha256=eTt22hytmrpzfSD9QEFiBOf4w38ueX5R-0SWTuCgJ9I,4941
56
+ pdd/split_main.py,sha256=x84NU7D_NxeQBJb-co2UmLII2z3mvt0pA8Zgq9DvOs4,4716
54
57
  pdd/summarize_directory.py,sha256=3KUOP30RgkBXpz0_btmpubnO1vWAQ3tKyVI84Zp-E9Q,9041
55
58
  pdd/trace.py,sha256=DMgL8cEk8gwdpyOumEi3am8wTq68e4OJzoc61H0vLAA,5011
56
- pdd/trace_main.py,sha256=3gpd8DsdPfRpq4tjZ2rwC-7Juz90DTVubwsW3LXl8CE,4429
59
+ pdd/trace_main.py,sha256=yb8aM9Wkq1vem-xRQb-TvAEr2HruLUgbj3RaTg3H76E,4770
57
60
  pdd/track_cost.py,sha256=VIrHYh4i2G5T5Dq1plxwuzsG4OrHQgO0GPgFckgsQ_4,3266
58
61
  pdd/unfinished_prompt.py,sha256=Oql2c4EgdOe7BVofM0gVs8aN5EQnLuoO-FLibjamE3A,4076
59
62
  pdd/update_main.py,sha256=5a4nsOOaAXULdk0BS9pj4blZ_QHBFeET37uaAqoJI2g,3912
60
63
  pdd/update_prompt.py,sha256=OdPRIAMu7OBx7E4SOU95hWgdtBY4oO8XOe1dvPChMlU,4351
61
- pdd/xml_tagger.py,sha256=NcyWacoXarRi6_16pchMhh1M7V-Gfz1cQImO_If2ia4,4241
64
+ pdd/xml_tagger.py,sha256=5AWzOboNuXMJmmIpi1hhPPAB6nxbBOkRqgoPLpoGYT8,4292
62
65
  pdd/data/language_format.csv,sha256=xUTmFHXSBVBRfPV-NKG3oWo5_ped5ukP-ekFcIlVzJk,877
63
- pdd/data/llm_model.csv,sha256=tOHyoa_Cl2GaRI-NjbeXgH116SsMZ8_IvoXs60CPGf0,1712
66
+ pdd/data/llm_model.csv,sha256=Yb46r-gybY90nrRcrkN3DHUbjprC51HUg3AxQTUoeRQ,1693
64
67
  pdd/prompts/auto_include_LLM.prompt,sha256=0t-Jmm5o6vVTmqsISTUiewqPT8bB389UZnJoHZvgtu4,13967
65
68
  pdd/prompts/bug_to_unit_test_LLM.prompt,sha256=--ysObDv9WzOEyJMuaKEdDHkRrR_1j0dmOtlAFr4YRg,1205
66
69
  pdd/prompts/change_LLM.prompt,sha256=W3sE6XZ2fb35XdqOykK1hDPtqkHSv9MZGD3sT8B8WjY,2083
@@ -74,27 +77,29 @@ pdd/prompts/extract_conflict_LLM.prompt,sha256=V_xXdU7V4IZK9SVFxJtXKRn_wFkP3zp4F
74
77
  pdd/prompts/extract_detect_change_LLM.prompt,sha256=2HXSb9bGjHZsKrUGvfBdBAAcGBCrQ2AxC8vUJRAfB1U,1003
75
78
  pdd/prompts/extract_program_code_fix_LLM.prompt,sha256=ra_aDz2x8MfOa5dh7JCtxjoUFa4dWeKPJOpLohMnrig,1137
76
79
  pdd/prompts/extract_prompt_change_LLM.prompt,sha256=1e3AxcVpZ85t7pVvXqCpBUJzGI995MIimXicClagSvw,366
77
- pdd/prompts/extract_prompt_split_LLM.prompt,sha256=CZU4KhMUgkSxhFs0dIqbsNMrybzrNQMTZva9V-IM-1A,970
78
- pdd/prompts/extract_prompt_update_LLM.prompt,sha256=U9QsacZ9OcT-CVPYkWN5eXZMDGIOy2r2C3OFtZ61tew,365
80
+ pdd/prompts/extract_prompt_split_LLM.prompt,sha256=rhStDroVxDYRcCjYq7XCCub8B-KmfCFj5_7PxhgMmz0,1097
81
+ pdd/prompts/extract_prompt_update_LLM.prompt,sha256=XH2muMzTb_wqcQS9rR4THXe6TP7BD84qb4MEisuJVU4,906
79
82
  pdd/prompts/extract_promptline_LLM.prompt,sha256=owIBRaF2bWwg3S64uyMKzOFMdvvmI_EEGoF97Pa9118,813
80
- pdd/prompts/extract_unit_code_fix_LLM.prompt,sha256=1gWS0-Qs6vMynNNqp1Xc-2hcsyH_NTLZPB1-lvyprm8,14143
83
+ pdd/prompts/extract_unit_code_fix_LLM.prompt,sha256=c4l6twMLC2YqDDvOj_DcaKmJQF8kIupeqvkueK_OQng,14301
81
84
  pdd/prompts/extract_xml_LLM.prompt,sha256=eRcHaL-khShpb7C1_b7wmBJHfo2Kh1Wvjo_aOcWZovU,561
82
- pdd/prompts/fix_code_module_errors_LLM.prompt,sha256=m-oqZ3cOkWbqke_l9z0Nmunf7NsnR9JWTNVVlfcteAY,1405
83
- pdd/prompts/fix_errors_from_unit_tests_LLM.prompt,sha256=m42HdbfuHOOgDUFUcx6SMtzIvHAHdRZMNNPvQayR21c,5077
84
- pdd/prompts/generate_test_LLM.prompt,sha256=3SuYPVOCl41ZliCq1DTg38OcQh7r3RrgIZZIGjxKaiI,1497
85
+ pdd/prompts/find_verification_errors_LLM.prompt,sha256=yIZk1Lmz9Q0-0o_Oprm-gK1jSTng30UrkCZHpynX8b0,1449
86
+ pdd/prompts/fix_code_module_errors_LLM.prompt,sha256=sjqB-apFtiMZerXm_qZEuA6pfRtk2hOiXxPXwuxIZxM,2462
87
+ pdd/prompts/fix_errors_from_unit_tests_LLM.prompt,sha256=Yy6WIg9WfizrFpFZogoCtlQy-H123ycc_SaF6m8_Ljo,5079
88
+ pdd/prompts/fix_verification_errors_LLM.prompt,sha256=NM1RV7zNLqQjY40z68fN_ilN9xIZEi-mgWVGZe4a9r4,1348
89
+ pdd/prompts/generate_test_LLM.prompt,sha256=eCI7CTMpoA76DTruTgWygClxJX0gj_uNxTqHbmqcJ50,2254
85
90
  pdd/prompts/increase_tests_LLM.prompt,sha256=rekFzLRuZy99KifEKNlmPYoQdl8wa04112mtCdIY6S8,955
86
91
  pdd/prompts/insert_includes_LLM.prompt,sha256=g-p2gXKENsqvfK5Q9FYbqFsIJ5CP7rbxmd4rROA-W80,1453
87
- pdd/prompts/split_LLM.prompt,sha256=T6KH6JWaMxRE1aA-IaVNlb2e85NfkYKRxqgDZZb2aBQ,6140
92
+ pdd/prompts/split_LLM.prompt,sha256=cMVyazsue6eerOPYeueqpSNRiITy1ht0HgGytPFiQIk,6244
88
93
  pdd/prompts/summarize_file_LLM.prompt,sha256=qb9K61XMVFy7hgGITglI37Xg7yLPAGQBm0rUBEqRnEc,387
89
94
  pdd/prompts/trace_LLM.prompt,sha256=XTPoQQpKrF7BtWkCJPIrinn448VyBGXJieibMsMP-y0,1231
90
95
  pdd/prompts/trim_results_LLM.prompt,sha256=w4aL0S7v7fPSi3L9XeQR3mUOgNv3hpTDqi4rOtu7L7I,4033
91
96
  pdd/prompts/trim_results_start_LLM.prompt,sha256=WwFlOHha4wzMLtRHDMI6GtcNdl2toE8gbixQeUwkS4g,2165
92
97
  pdd/prompts/unfinished_prompt_LLM.prompt,sha256=-JgBpiPTQZdWOAwOG1XpfpD9waynFTAT3Jo84eQ4bTw,1543
93
- pdd/prompts/update_prompt_LLM.prompt,sha256=_lGaxeVP4oF8yGqiN6yj6UE0j79lxfGdjsYr5w5KSYk,1261
98
+ pdd/prompts/update_prompt_LLM.prompt,sha256=prIc8uLp2jqnLTHt6JvWDZGanPZipivhhYeXe0lVaYw,1328
94
99
  pdd/prompts/xml_convertor_LLM.prompt,sha256=YGRGXJeg6EhM9690f-SKqQrKqSJjLFD51UrPOlO0Frg,2786
95
- pdd_cli-0.0.23.dist-info/licenses/LICENSE,sha256=-1bjYH-CEjGEQ8VixtnRYuu37kN6F9NxmZSDkBuUQ9o,1062
96
- pdd_cli-0.0.23.dist-info/METADATA,sha256=1JRpguh-jzZ1rhzzb-05CsxwU4kdddAoCBoWhg-5X1Q,7256
97
- pdd_cli-0.0.23.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
98
- pdd_cli-0.0.23.dist-info/entry_points.txt,sha256=Kr8HtNVb8uHZtQJNH4DnF8j7WNgWQbb7_Pw5hECSR-I,36
99
- pdd_cli-0.0.23.dist-info/top_level.txt,sha256=xjnhIACeMcMeDfVNREgQZl4EbTni2T11QkL5r7E-sbE,4
100
- pdd_cli-0.0.23.dist-info/RECORD,,
100
+ pdd_cli-0.0.25.dist-info/licenses/LICENSE,sha256=-1bjYH-CEjGEQ8VixtnRYuu37kN6F9NxmZSDkBuUQ9o,1062
101
+ pdd_cli-0.0.25.dist-info/METADATA,sha256=5AN0Ro7Rm6Xzi3-UYr3L9oxpoc9kQ0k6joNubTmmpR8,7256
102
+ pdd_cli-0.0.25.dist-info/WHEEL,sha256=ck4Vq1_RXyvS4Jt6SI0Vz6fyVs4GWg7AINwpsaGEgPE,91
103
+ pdd_cli-0.0.25.dist-info/entry_points.txt,sha256=Kr8HtNVb8uHZtQJNH4DnF8j7WNgWQbb7_Pw5hECSR-I,36
104
+ pdd_cli-0.0.25.dist-info/top_level.txt,sha256=xjnhIACeMcMeDfVNREgQZl4EbTni2T11QkL5r7E-sbE,4
105
+ pdd_cli-0.0.25.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.1.0)
2
+ Generator: setuptools (80.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5