pdd-cli 0.0.90__py3-none-any.whl → 0.0.118__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.
- pdd/__init__.py +38 -6
- pdd/agentic_bug.py +323 -0
- pdd/agentic_bug_orchestrator.py +497 -0
- pdd/agentic_change.py +231 -0
- pdd/agentic_change_orchestrator.py +526 -0
- pdd/agentic_common.py +521 -786
- pdd/agentic_e2e_fix.py +319 -0
- pdd/agentic_e2e_fix_orchestrator.py +426 -0
- pdd/agentic_fix.py +118 -3
- pdd/agentic_update.py +25 -8
- pdd/architecture_sync.py +565 -0
- pdd/auth_service.py +210 -0
- pdd/auto_deps_main.py +63 -53
- pdd/auto_include.py +185 -3
- pdd/auto_update.py +125 -47
- pdd/bug_main.py +195 -23
- pdd/cmd_test_main.py +345 -197
- pdd/code_generator.py +4 -2
- pdd/code_generator_main.py +118 -32
- pdd/commands/__init__.py +6 -0
- pdd/commands/analysis.py +87 -29
- pdd/commands/auth.py +309 -0
- pdd/commands/connect.py +290 -0
- pdd/commands/fix.py +136 -113
- pdd/commands/maintenance.py +3 -2
- pdd/commands/misc.py +8 -0
- pdd/commands/modify.py +190 -164
- pdd/commands/sessions.py +284 -0
- pdd/construct_paths.py +334 -32
- pdd/context_generator_main.py +167 -170
- pdd/continue_generation.py +6 -3
- pdd/core/__init__.py +33 -0
- pdd/core/cli.py +27 -3
- pdd/core/cloud.py +237 -0
- pdd/core/errors.py +4 -0
- pdd/core/remote_session.py +61 -0
- pdd/crash_main.py +219 -23
- pdd/data/llm_model.csv +4 -4
- pdd/docs/prompting_guide.md +864 -0
- pdd/docs/whitepaper_with_benchmarks/data_and_functions/benchmark_analysis.py +495 -0
- pdd/docs/whitepaper_with_benchmarks/data_and_functions/creation_compare.py +528 -0
- pdd/fix_code_loop.py +208 -34
- pdd/fix_code_module_errors.py +6 -2
- pdd/fix_error_loop.py +291 -38
- pdd/fix_main.py +204 -4
- pdd/fix_verification_errors_loop.py +235 -26
- pdd/fix_verification_main.py +269 -83
- pdd/frontend/dist/assets/index-B5DZHykP.css +1 -0
- pdd/frontend/dist/assets/index-DQ3wkeQ2.js +449 -0
- pdd/frontend/dist/index.html +376 -0
- pdd/frontend/dist/logo.svg +33 -0
- pdd/generate_output_paths.py +46 -5
- pdd/generate_test.py +212 -151
- pdd/get_comment.py +19 -44
- pdd/get_extension.py +8 -9
- pdd/get_jwt_token.py +309 -20
- pdd/get_language.py +8 -7
- pdd/get_run_command.py +7 -5
- pdd/insert_includes.py +2 -1
- pdd/llm_invoke.py +459 -95
- pdd/load_prompt_template.py +15 -34
- pdd/path_resolution.py +140 -0
- pdd/postprocess.py +4 -1
- pdd/preprocess.py +68 -12
- pdd/preprocess_main.py +33 -1
- pdd/prompts/agentic_bug_step10_pr_LLM.prompt +182 -0
- pdd/prompts/agentic_bug_step1_duplicate_LLM.prompt +73 -0
- pdd/prompts/agentic_bug_step2_docs_LLM.prompt +129 -0
- pdd/prompts/agentic_bug_step3_triage_LLM.prompt +95 -0
- pdd/prompts/agentic_bug_step4_reproduce_LLM.prompt +97 -0
- pdd/prompts/agentic_bug_step5_root_cause_LLM.prompt +123 -0
- pdd/prompts/agentic_bug_step6_test_plan_LLM.prompt +107 -0
- pdd/prompts/agentic_bug_step7_generate_LLM.prompt +172 -0
- pdd/prompts/agentic_bug_step8_verify_LLM.prompt +119 -0
- pdd/prompts/agentic_bug_step9_e2e_test_LLM.prompt +289 -0
- pdd/prompts/agentic_change_step10_identify_issues_LLM.prompt +1006 -0
- pdd/prompts/agentic_change_step11_fix_issues_LLM.prompt +984 -0
- pdd/prompts/agentic_change_step12_create_pr_LLM.prompt +131 -0
- pdd/prompts/agentic_change_step1_duplicate_LLM.prompt +73 -0
- pdd/prompts/agentic_change_step2_docs_LLM.prompt +101 -0
- pdd/prompts/agentic_change_step3_research_LLM.prompt +126 -0
- pdd/prompts/agentic_change_step4_clarify_LLM.prompt +164 -0
- pdd/prompts/agentic_change_step5_docs_change_LLM.prompt +981 -0
- pdd/prompts/agentic_change_step6_devunits_LLM.prompt +1005 -0
- pdd/prompts/agentic_change_step7_architecture_LLM.prompt +1044 -0
- pdd/prompts/agentic_change_step8_analyze_LLM.prompt +1027 -0
- pdd/prompts/agentic_change_step9_implement_LLM.prompt +1077 -0
- pdd/prompts/agentic_e2e_fix_step1_unit_tests_LLM.prompt +90 -0
- pdd/prompts/agentic_e2e_fix_step2_e2e_tests_LLM.prompt +91 -0
- pdd/prompts/agentic_e2e_fix_step3_root_cause_LLM.prompt +89 -0
- pdd/prompts/agentic_e2e_fix_step4_fix_e2e_tests_LLM.prompt +96 -0
- pdd/prompts/agentic_e2e_fix_step5_identify_devunits_LLM.prompt +91 -0
- pdd/prompts/agentic_e2e_fix_step6_create_unit_tests_LLM.prompt +106 -0
- pdd/prompts/agentic_e2e_fix_step7_verify_tests_LLM.prompt +116 -0
- pdd/prompts/agentic_e2e_fix_step8_run_pdd_fix_LLM.prompt +120 -0
- pdd/prompts/agentic_e2e_fix_step9_verify_all_LLM.prompt +146 -0
- pdd/prompts/agentic_fix_primary_LLM.prompt +2 -2
- pdd/prompts/agentic_update_LLM.prompt +192 -338
- pdd/prompts/auto_include_LLM.prompt +22 -0
- pdd/prompts/change_LLM.prompt +3093 -1
- pdd/prompts/detect_change_LLM.prompt +571 -14
- pdd/prompts/fix_code_module_errors_LLM.prompt +8 -0
- pdd/prompts/fix_errors_from_unit_tests_LLM.prompt +1 -0
- pdd/prompts/generate_test_LLM.prompt +20 -1
- pdd/prompts/generate_test_from_example_LLM.prompt +115 -0
- pdd/prompts/insert_includes_LLM.prompt +262 -252
- pdd/prompts/prompt_code_diff_LLM.prompt +119 -0
- pdd/prompts/prompt_diff_LLM.prompt +82 -0
- pdd/remote_session.py +876 -0
- pdd/server/__init__.py +52 -0
- pdd/server/app.py +335 -0
- pdd/server/click_executor.py +587 -0
- pdd/server/executor.py +338 -0
- pdd/server/jobs.py +661 -0
- pdd/server/models.py +241 -0
- pdd/server/routes/__init__.py +31 -0
- pdd/server/routes/architecture.py +451 -0
- pdd/server/routes/auth.py +364 -0
- pdd/server/routes/commands.py +929 -0
- pdd/server/routes/config.py +42 -0
- pdd/server/routes/files.py +603 -0
- pdd/server/routes/prompts.py +1322 -0
- pdd/server/routes/websocket.py +473 -0
- pdd/server/security.py +243 -0
- pdd/server/terminal_spawner.py +209 -0
- pdd/server/token_counter.py +222 -0
- pdd/summarize_directory.py +236 -237
- pdd/sync_animation.py +8 -4
- pdd/sync_determine_operation.py +329 -47
- pdd/sync_main.py +272 -28
- pdd/sync_orchestration.py +136 -75
- pdd/template_expander.py +161 -0
- pdd/templates/architecture/architecture_json.prompt +41 -46
- pdd/trace.py +1 -1
- pdd/track_cost.py +0 -13
- pdd/unfinished_prompt.py +2 -1
- pdd/update_main.py +23 -5
- {pdd_cli-0.0.90.dist-info → pdd_cli-0.0.118.dist-info}/METADATA +15 -10
- pdd_cli-0.0.118.dist-info/RECORD +227 -0
- pdd_cli-0.0.90.dist-info/RECORD +0 -153
- {pdd_cli-0.0.90.dist-info → pdd_cli-0.0.118.dist-info}/WHEEL +0 -0
- {pdd_cli-0.0.90.dist-info → pdd_cli-0.0.118.dist-info}/entry_points.txt +0 -0
- {pdd_cli-0.0.90.dist-info → pdd_cli-0.0.118.dist-info}/licenses/LICENSE +0 -0
- {pdd_cli-0.0.90.dist-info → pdd_cli-0.0.118.dist-info}/top_level.txt +0 -0
pdd/commands/fix.py
CHANGED
|
@@ -1,82 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
4
|
import click
|
|
5
|
-
from typing import
|
|
5
|
+
from typing import Optional, Tuple, Any
|
|
6
|
+
from rich.console import Console
|
|
6
7
|
|
|
8
|
+
# Relative imports for internal modules
|
|
7
9
|
from ..fix_main import fix_main
|
|
10
|
+
from ..agentic_e2e_fix import run_agentic_e2e_fix
|
|
8
11
|
from ..track_cost import track_cost
|
|
9
12
|
from ..core.errors import handle_error
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
@click.
|
|
14
|
-
@click.argument("
|
|
15
|
-
@click.
|
|
16
|
-
@click.option(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
)
|
|
22
|
-
@click.option(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
)
|
|
28
|
-
@click.option(
|
|
29
|
-
|
|
30
|
-
type=click.Path(writable=True),
|
|
31
|
-
default=None,
|
|
32
|
-
help="Specify where to save the results log (file or directory).",
|
|
33
|
-
)
|
|
34
|
-
@click.option(
|
|
35
|
-
"--loop",
|
|
36
|
-
is_flag=True,
|
|
37
|
-
default=False,
|
|
38
|
-
help="Enable iterative fixing process."
|
|
39
|
-
)
|
|
40
|
-
@click.option(
|
|
41
|
-
"--verification-program",
|
|
42
|
-
type=click.Path(exists=True, dir_okay=False),
|
|
43
|
-
default=None,
|
|
44
|
-
help="Path to a Python program that verifies the fix.",
|
|
45
|
-
)
|
|
46
|
-
@click.option(
|
|
47
|
-
"--max-attempts",
|
|
48
|
-
type=int,
|
|
49
|
-
default=3,
|
|
50
|
-
show_default=True,
|
|
51
|
-
help="Maximum number of fix attempts.",
|
|
52
|
-
)
|
|
53
|
-
@click.option(
|
|
54
|
-
"--budget",
|
|
55
|
-
type=float,
|
|
56
|
-
default=5.0,
|
|
57
|
-
show_default=True,
|
|
58
|
-
help="Maximum cost allowed for the fixing process.",
|
|
59
|
-
)
|
|
60
|
-
@click.option(
|
|
61
|
-
"--auto-submit",
|
|
62
|
-
is_flag=True,
|
|
63
|
-
default=False,
|
|
64
|
-
help="Automatically submit the example if all unit tests pass.",
|
|
65
|
-
)
|
|
66
|
-
@click.option(
|
|
67
|
-
"--agentic-fallback/--no-agentic-fallback",
|
|
68
|
-
is_flag=True,
|
|
69
|
-
default=True,
|
|
70
|
-
help="Enable agentic fallback if the primary fix mechanism fails.",
|
|
71
|
-
)
|
|
14
|
+
console = Console()
|
|
15
|
+
|
|
16
|
+
@click.command(name="fix")
|
|
17
|
+
@click.argument("args", nargs=-1)
|
|
18
|
+
@click.option("--manual", is_flag=True, help="Use manual mode with explicit file arguments.")
|
|
19
|
+
@click.option("--timeout-adder", type=float, default=0.0, help="Additional seconds to add to each step's timeout (Agentic mode).")
|
|
20
|
+
@click.option("--max-cycles", type=int, default=5, help="Maximum number of outer loop cycles (Agentic mode).")
|
|
21
|
+
@click.option("--resume/--no-resume", default=True, help="Resume from saved state if available (Agentic mode).")
|
|
22
|
+
@click.option("--force", is_flag=True, help="Override branch mismatch safety check (Agentic mode).")
|
|
23
|
+
@click.option("--no-github-state", is_flag=True, help="Disable GitHub issue comment-based state persistence (Agentic mode).")
|
|
24
|
+
@click.option("--output-test", type=click.Path(), help="Specify where to save the fixed unit test file.")
|
|
25
|
+
@click.option("--output-code", type=click.Path(), help="Specify where to save the fixed code file.")
|
|
26
|
+
@click.option("--output-results", type=click.Path(), help="Specify where to save the results log.")
|
|
27
|
+
@click.option("--loop", is_flag=True, help="Enable iterative fixing process.")
|
|
28
|
+
@click.option("--verification-program", type=click.Path(), help="Path to verification program (required for --loop).")
|
|
29
|
+
@click.option("--max-attempts", type=int, default=3, help="Maximum number of fix attempts.")
|
|
30
|
+
@click.option("--budget", type=float, default=5.0, help="Maximum cost allowed for the fixing process.")
|
|
31
|
+
@click.option("--auto-submit", is_flag=True, help="Automatically submit example if tests pass.")
|
|
32
|
+
@click.option("--agentic-fallback/--no-agentic-fallback", default=True, help="Enable agentic fallback in loop mode.")
|
|
72
33
|
@click.pass_context
|
|
73
34
|
@track_cost
|
|
74
35
|
def fix(
|
|
75
36
|
ctx: click.Context,
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
37
|
+
args: Tuple[str, ...],
|
|
38
|
+
manual: bool,
|
|
39
|
+
timeout_adder: float,
|
|
40
|
+
max_cycles: int,
|
|
41
|
+
resume: bool,
|
|
42
|
+
force: bool,
|
|
43
|
+
no_github_state: bool,
|
|
80
44
|
output_test: Optional[str],
|
|
81
45
|
output_code: Optional[str],
|
|
82
46
|
output_results: Optional[str],
|
|
@@ -86,55 +50,114 @@ def fix(
|
|
|
86
50
|
budget: float,
|
|
87
51
|
auto_submit: bool,
|
|
88
52
|
agentic_fallback: bool,
|
|
89
|
-
) -> Optional[Tuple[
|
|
90
|
-
"""
|
|
53
|
+
) -> Optional[Tuple[Any, float, str]]:
|
|
54
|
+
"""
|
|
55
|
+
Fix errors in code and unit tests.
|
|
91
56
|
|
|
92
|
-
|
|
93
|
-
|
|
57
|
+
Supports two modes:
|
|
58
|
+
1. Agentic E2E Fix: pdd fix <GITHUB_ISSUE_URL>
|
|
59
|
+
2. Manual Mode: pdd fix --manual PROMPT_FILE CODE_FILE UNIT_TEST_FILE... ERROR_FILE
|
|
94
60
|
"""
|
|
95
61
|
try:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
model_name = ""
|
|
62
|
+
if not args:
|
|
63
|
+
raise click.UsageError("Missing arguments. See 'pdd fix --help'.")
|
|
99
64
|
|
|
100
|
-
#
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
65
|
+
# Determine mode based on first argument
|
|
66
|
+
# If it looks like a URL and --manual is not set, use Agentic mode
|
|
67
|
+
is_url = args[0].startswith("http") or "github.com" in args[0]
|
|
68
|
+
|
|
69
|
+
# --- Agentic E2E Fix Mode ---
|
|
70
|
+
if is_url and not manual:
|
|
71
|
+
if len(args) > 1:
|
|
72
|
+
console.print("[yellow]Warning: Extra arguments ignored in Agentic E2E Fix mode.[/yellow]")
|
|
73
|
+
|
|
74
|
+
issue_url = args[0]
|
|
75
|
+
verbose = ctx.obj.get("verbose", False)
|
|
76
|
+
quiet = ctx.obj.get("quiet", False)
|
|
77
|
+
|
|
78
|
+
# Call the agentic fix workflow
|
|
79
|
+
success, message, cost, model, _ = run_agentic_e2e_fix(
|
|
80
|
+
issue_url=issue_url,
|
|
81
|
+
timeout_adder=timeout_adder,
|
|
82
|
+
max_cycles=max_cycles,
|
|
83
|
+
resume=resume,
|
|
84
|
+
force=force,
|
|
85
|
+
verbose=verbose,
|
|
86
|
+
quiet=quiet,
|
|
87
|
+
use_github_state=not no_github_state
|
|
117
88
|
)
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
"
|
|
121
|
-
|
|
122
|
-
"
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
89
|
+
|
|
90
|
+
if not success:
|
|
91
|
+
console.print(f"[bold red]Agentic fix failed:[/bold red] {message}")
|
|
92
|
+
else:
|
|
93
|
+
console.print(f"[bold green]Agentic fix completed:[/bold green] {message}")
|
|
94
|
+
|
|
95
|
+
return message, cost, model
|
|
96
|
+
|
|
97
|
+
# --- Manual Mode ---
|
|
98
|
+
else:
|
|
99
|
+
# Validate arguments for manual mode
|
|
100
|
+
# Expected structure: PROMPT_FILE CODE_FILE UNIT_TEST_FILE [UNIT_TEST_FILE...] ERROR_FILE
|
|
101
|
+
if len(args) < 4:
|
|
102
|
+
raise click.UsageError(
|
|
103
|
+
"Manual mode requires at least 4 arguments: PROMPT_FILE CODE_FILE UNIT_TEST_FILE... ERROR_FILE"
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
prompt_file = args[0]
|
|
107
|
+
code_file = args[1]
|
|
108
|
+
error_file = args[-1]
|
|
109
|
+
# All arguments between code file and error file are treated as unit test files
|
|
110
|
+
unit_test_files = args[2:-1]
|
|
111
|
+
|
|
112
|
+
total_cost = 0.0
|
|
113
|
+
last_model = "unknown"
|
|
114
|
+
all_success = True
|
|
115
|
+
results_summary = []
|
|
116
|
+
|
|
117
|
+
# Process each unit test file
|
|
118
|
+
for i, test_file in enumerate(unit_test_files):
|
|
119
|
+
if len(unit_test_files) > 1:
|
|
120
|
+
console.print(f"[bold blue]Processing test file {i+1}/{len(unit_test_files)}: {test_file}[/bold blue]")
|
|
121
|
+
|
|
122
|
+
# Call the core fix logic
|
|
123
|
+
# Note: If multiple test files are processed, output_test will overwrite
|
|
124
|
+
# the same location if specified, as per documentation warning.
|
|
125
|
+
success, _, _, _, cost, model = fix_main(
|
|
126
|
+
ctx=ctx,
|
|
127
|
+
prompt_file=prompt_file,
|
|
128
|
+
code_file=code_file,
|
|
129
|
+
unit_test_file=test_file,
|
|
130
|
+
error_file=error_file,
|
|
131
|
+
output_test=output_test,
|
|
132
|
+
output_code=output_code,
|
|
133
|
+
output_results=output_results,
|
|
134
|
+
loop=loop,
|
|
135
|
+
verification_program=verification_program,
|
|
136
|
+
max_attempts=max_attempts,
|
|
137
|
+
budget=budget,
|
|
138
|
+
auto_submit=auto_submit,
|
|
139
|
+
agentic_fallback=agentic_fallback,
|
|
140
|
+
strength=None, # Use context defaults inside fix_main
|
|
141
|
+
temperature=None # Use context defaults inside fix_main
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
total_cost += cost
|
|
145
|
+
last_model = model
|
|
146
|
+
if not success:
|
|
147
|
+
all_success = False
|
|
148
|
+
|
|
149
|
+
status = "Fixed" if success else "Failed"
|
|
150
|
+
results_summary.append(f"{test_file}: {status}")
|
|
151
|
+
|
|
152
|
+
# Construct return message
|
|
153
|
+
summary_str = "\n".join(results_summary)
|
|
154
|
+
if all_success:
|
|
155
|
+
return f"All files processed successfully.\n{summary_str}", total_cost, last_model
|
|
156
|
+
else:
|
|
157
|
+
return f"Some files failed to fix.\n{summary_str}", total_cost, last_model
|
|
127
158
|
|
|
128
|
-
# Aggregate results
|
|
129
|
-
overall_success = all(r["success"] for r in all_results)
|
|
130
|
-
result = {
|
|
131
|
-
"success": overall_success,
|
|
132
|
-
"results": all_results,
|
|
133
|
-
"total_attempts": sum(r["attempts"] for r in all_results),
|
|
134
|
-
}
|
|
135
|
-
return result, total_cost, model_name
|
|
136
159
|
except click.Abort:
|
|
137
160
|
raise
|
|
138
|
-
except Exception as
|
|
139
|
-
handle_error(
|
|
140
|
-
|
|
161
|
+
except Exception as e:
|
|
162
|
+
handle_error(e)
|
|
163
|
+
return None
|
pdd/commands/maintenance.py
CHANGED
|
@@ -39,8 +39,9 @@ from ..core.utils import _run_setup_utility
|
|
|
39
39
|
)
|
|
40
40
|
@click.option(
|
|
41
41
|
"--target-coverage",
|
|
42
|
+
type=float,
|
|
42
43
|
default=None,
|
|
43
|
-
help="Desired code coverage percentage. Default:
|
|
44
|
+
help="Desired code coverage percentage. Default: 90.0 or .pddrc value.",
|
|
44
45
|
)
|
|
45
46
|
@click.option(
|
|
46
47
|
"--dry-run",
|
|
@@ -64,7 +65,7 @@ def sync(
|
|
|
64
65
|
budget: Optional[float],
|
|
65
66
|
skip_verify: bool,
|
|
66
67
|
skip_tests: bool,
|
|
67
|
-
target_coverage: float,
|
|
68
|
+
target_coverage: Optional[float],
|
|
68
69
|
dry_run: bool,
|
|
69
70
|
log: bool,
|
|
70
71
|
) -> Optional[Tuple[str, float, str]]:
|
pdd/commands/misc.py
CHANGED
|
@@ -39,6 +39,12 @@ from ..core.errors import handle_error
|
|
|
39
39
|
default=None,
|
|
40
40
|
help="List of keys to exclude from curly bracket doubling.",
|
|
41
41
|
)
|
|
42
|
+
@click.option(
|
|
43
|
+
"--pdd-tags",
|
|
44
|
+
is_flag=True,
|
|
45
|
+
default=False,
|
|
46
|
+
help="Inject PDD metadata tags (<pdd-reason>, <pdd-interface>, <pdd-dependency>) from architecture.json.",
|
|
47
|
+
)
|
|
42
48
|
@click.pass_context
|
|
43
49
|
# No @track_cost as preprocessing is local, but return dummy tuple for callback
|
|
44
50
|
def preprocess(
|
|
@@ -49,6 +55,7 @@ def preprocess(
|
|
|
49
55
|
recursive: bool,
|
|
50
56
|
double: bool,
|
|
51
57
|
exclude: Optional[Tuple[str, ...]],
|
|
58
|
+
pdd_tags: bool,
|
|
52
59
|
) -> Optional[Tuple[str, float, str]]:
|
|
53
60
|
"""Preprocess a prompt file to prepare it for LLM use."""
|
|
54
61
|
try:
|
|
@@ -62,6 +69,7 @@ def preprocess(
|
|
|
62
69
|
recursive=recursive,
|
|
63
70
|
double=double,
|
|
64
71
|
exclude=list(exclude) if exclude else [],
|
|
72
|
+
pdd_tags=pdd_tags,
|
|
65
73
|
)
|
|
66
74
|
|
|
67
75
|
# Handle the result from preprocess_main
|