pdd-cli 0.0.45__py3-none-any.whl → 0.0.90__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 +4 -4
- pdd/agentic_common.py +863 -0
- pdd/agentic_crash.py +534 -0
- pdd/agentic_fix.py +1179 -0
- pdd/agentic_langtest.py +162 -0
- pdd/agentic_update.py +370 -0
- pdd/agentic_verify.py +183 -0
- pdd/auto_deps_main.py +15 -5
- pdd/auto_include.py +63 -5
- pdd/bug_main.py +3 -2
- pdd/bug_to_unit_test.py +2 -0
- pdd/change_main.py +11 -4
- pdd/cli.py +22 -1181
- pdd/cmd_test_main.py +73 -21
- pdd/code_generator.py +58 -18
- pdd/code_generator_main.py +672 -25
- pdd/commands/__init__.py +42 -0
- pdd/commands/analysis.py +248 -0
- pdd/commands/fix.py +140 -0
- pdd/commands/generate.py +257 -0
- pdd/commands/maintenance.py +174 -0
- pdd/commands/misc.py +79 -0
- pdd/commands/modify.py +230 -0
- pdd/commands/report.py +144 -0
- pdd/commands/templates.py +215 -0
- pdd/commands/utility.py +110 -0
- pdd/config_resolution.py +58 -0
- pdd/conflicts_main.py +8 -3
- pdd/construct_paths.py +258 -82
- pdd/context_generator.py +10 -2
- pdd/context_generator_main.py +113 -11
- pdd/continue_generation.py +47 -7
- pdd/core/__init__.py +0 -0
- pdd/core/cli.py +503 -0
- pdd/core/dump.py +554 -0
- pdd/core/errors.py +63 -0
- pdd/core/utils.py +90 -0
- pdd/crash_main.py +44 -11
- pdd/data/language_format.csv +71 -63
- pdd/data/llm_model.csv +20 -18
- pdd/detect_change_main.py +5 -4
- pdd/fix_code_loop.py +330 -76
- pdd/fix_error_loop.py +207 -61
- pdd/fix_errors_from_unit_tests.py +4 -3
- pdd/fix_main.py +75 -18
- pdd/fix_verification_errors.py +12 -100
- pdd/fix_verification_errors_loop.py +306 -272
- pdd/fix_verification_main.py +28 -9
- pdd/generate_output_paths.py +93 -10
- pdd/generate_test.py +16 -5
- pdd/get_jwt_token.py +9 -2
- pdd/get_run_command.py +73 -0
- pdd/get_test_command.py +68 -0
- pdd/git_update.py +70 -19
- pdd/incremental_code_generator.py +2 -2
- pdd/insert_includes.py +11 -3
- pdd/llm_invoke.py +1269 -103
- pdd/load_prompt_template.py +36 -10
- pdd/pdd_completion.fish +25 -2
- pdd/pdd_completion.sh +30 -4
- pdd/pdd_completion.zsh +79 -4
- pdd/postprocess.py +10 -3
- pdd/preprocess.py +228 -15
- pdd/preprocess_main.py +8 -5
- pdd/prompts/agentic_crash_explore_LLM.prompt +49 -0
- pdd/prompts/agentic_fix_explore_LLM.prompt +45 -0
- pdd/prompts/agentic_fix_harvest_only_LLM.prompt +48 -0
- pdd/prompts/agentic_fix_primary_LLM.prompt +85 -0
- pdd/prompts/agentic_update_LLM.prompt +1071 -0
- pdd/prompts/agentic_verify_explore_LLM.prompt +45 -0
- pdd/prompts/auto_include_LLM.prompt +100 -905
- pdd/prompts/detect_change_LLM.prompt +122 -20
- pdd/prompts/example_generator_LLM.prompt +22 -1
- pdd/prompts/extract_code_LLM.prompt +5 -1
- pdd/prompts/extract_program_code_fix_LLM.prompt +7 -1
- pdd/prompts/extract_prompt_update_LLM.prompt +7 -8
- pdd/prompts/extract_promptline_LLM.prompt +17 -11
- pdd/prompts/find_verification_errors_LLM.prompt +6 -0
- pdd/prompts/fix_code_module_errors_LLM.prompt +4 -2
- pdd/prompts/fix_errors_from_unit_tests_LLM.prompt +8 -0
- pdd/prompts/fix_verification_errors_LLM.prompt +22 -0
- pdd/prompts/generate_test_LLM.prompt +21 -6
- pdd/prompts/increase_tests_LLM.prompt +1 -5
- pdd/prompts/insert_includes_LLM.prompt +228 -108
- pdd/prompts/trace_LLM.prompt +25 -22
- pdd/prompts/unfinished_prompt_LLM.prompt +85 -1
- pdd/prompts/update_prompt_LLM.prompt +22 -1
- pdd/pytest_output.py +127 -12
- pdd/render_mermaid.py +236 -0
- pdd/setup_tool.py +648 -0
- pdd/simple_math.py +2 -0
- pdd/split_main.py +3 -2
- pdd/summarize_directory.py +49 -6
- pdd/sync_determine_operation.py +543 -98
- pdd/sync_main.py +81 -31
- pdd/sync_orchestration.py +1334 -751
- pdd/sync_tui.py +848 -0
- pdd/template_registry.py +264 -0
- pdd/templates/architecture/architecture_json.prompt +242 -0
- pdd/templates/generic/generate_prompt.prompt +174 -0
- pdd/trace.py +168 -12
- pdd/trace_main.py +4 -3
- pdd/track_cost.py +151 -61
- pdd/unfinished_prompt.py +49 -3
- pdd/update_main.py +549 -67
- pdd/update_model_costs.py +2 -2
- pdd/update_prompt.py +19 -4
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.90.dist-info}/METADATA +19 -6
- pdd_cli-0.0.90.dist-info/RECORD +153 -0
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.90.dist-info}/licenses/LICENSE +1 -1
- pdd_cli-0.0.45.dist-info/RECORD +0 -116
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.90.dist-info}/WHEEL +0 -0
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.90.dist-info}/entry_points.txt +0 -0
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.90.dist-info}/top_level.txt +0 -0
pdd/core/utils.py
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Helper functions for the PDD CLI.
|
|
3
|
+
"""
|
|
4
|
+
import os
|
|
5
|
+
import sys
|
|
6
|
+
import subprocess
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Optional
|
|
9
|
+
import click
|
|
10
|
+
|
|
11
|
+
from ..install_completion import (
|
|
12
|
+
get_current_shell,
|
|
13
|
+
get_shell_rc_path,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
def _first_pending_command(ctx: click.Context) -> Optional[str]:
|
|
17
|
+
"""Return the first subcommand scheduled for this invocation."""
|
|
18
|
+
for arg in ctx.protected_args:
|
|
19
|
+
if not arg.startswith("-"):
|
|
20
|
+
return arg
|
|
21
|
+
return None
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _api_env_exists() -> bool:
|
|
25
|
+
"""Check whether the ~/.pdd/api-env file exists."""
|
|
26
|
+
return (Path.home() / ".pdd" / "api-env").exists()
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _completion_installed() -> bool:
|
|
30
|
+
"""Check if the shell RC file already sources the PDD completion script."""
|
|
31
|
+
shell = get_current_shell()
|
|
32
|
+
rc_path = get_shell_rc_path(shell) if shell else None
|
|
33
|
+
if not rc_path:
|
|
34
|
+
return False
|
|
35
|
+
|
|
36
|
+
try:
|
|
37
|
+
content = Path(rc_path).read_text(encoding="utf-8")
|
|
38
|
+
except (OSError, UnicodeDecodeError):
|
|
39
|
+
return False
|
|
40
|
+
|
|
41
|
+
return "PDD CLI completion" in content or "pdd_completion" in content
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _project_has_local_configuration() -> bool:
|
|
45
|
+
"""Detect project-level env configuration that should suppress reminders."""
|
|
46
|
+
cwd = Path.cwd()
|
|
47
|
+
|
|
48
|
+
env_file = cwd / ".env"
|
|
49
|
+
if env_file.exists():
|
|
50
|
+
try:
|
|
51
|
+
env_content = env_file.read_text(encoding="utf-8")
|
|
52
|
+
except (OSError, UnicodeDecodeError):
|
|
53
|
+
env_content = ""
|
|
54
|
+
if any(token in env_content for token in ("OPENAI_API_KEY=", "GOOGLE_API_KEY=", "ANTHROPIC_API_KEY=")):
|
|
55
|
+
return True
|
|
56
|
+
|
|
57
|
+
project_pdd_dir = cwd / ".pdd"
|
|
58
|
+
if project_pdd_dir.exists():
|
|
59
|
+
return True
|
|
60
|
+
|
|
61
|
+
return False
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _should_show_onboarding_reminder(ctx: click.Context) -> bool:
|
|
65
|
+
"""Determine whether to display the onboarding reminder banner."""
|
|
66
|
+
suppress = os.getenv("PDD_SUPPRESS_SETUP_REMINDER", "").lower()
|
|
67
|
+
if suppress in {"1", "true", "yes"}:
|
|
68
|
+
return False
|
|
69
|
+
|
|
70
|
+
first_command = _first_pending_command(ctx)
|
|
71
|
+
if first_command == "setup":
|
|
72
|
+
return False
|
|
73
|
+
|
|
74
|
+
if _api_env_exists():
|
|
75
|
+
return False
|
|
76
|
+
|
|
77
|
+
if _project_has_local_configuration():
|
|
78
|
+
return False
|
|
79
|
+
|
|
80
|
+
if _completion_installed():
|
|
81
|
+
return False
|
|
82
|
+
|
|
83
|
+
return True
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _run_setup_utility() -> None:
|
|
87
|
+
"""Execute the interactive setup utility script."""
|
|
88
|
+
result = subprocess.run([sys.executable, "-m", "pdd.setup_tool"])
|
|
89
|
+
if result.returncode not in (0, None):
|
|
90
|
+
raise RuntimeError(f"Setup utility exited with status {result.returncode}")
|
pdd/crash_main.py
CHANGED
|
@@ -2,9 +2,9 @@ import sys
|
|
|
2
2
|
from typing import Tuple, Optional, Dict, Any
|
|
3
3
|
import click
|
|
4
4
|
from rich import print as rprint
|
|
5
|
-
from . import DEFAULT_STRENGTH, DEFAULT_TIME
|
|
6
5
|
from pathlib import Path
|
|
7
6
|
|
|
7
|
+
from .config_resolution import resolve_effective_config
|
|
8
8
|
from .construct_paths import construct_paths
|
|
9
9
|
from .fix_code_loop import fix_code_loop
|
|
10
10
|
# Import fix_code_module_errors conditionally or ensure it's always available
|
|
@@ -24,7 +24,10 @@ def crash_main(
|
|
|
24
24
|
output_program: Optional[str] = None,
|
|
25
25
|
loop: bool = False,
|
|
26
26
|
max_attempts: Optional[int] = None,
|
|
27
|
-
budget: Optional[float] = None
|
|
27
|
+
budget: Optional[float] = None,
|
|
28
|
+
agentic_fallback: bool = True,
|
|
29
|
+
strength: Optional[float] = None,
|
|
30
|
+
temperature: Optional[float] = None,
|
|
28
31
|
) -> Tuple[bool, str, str, int, float, str]:
|
|
29
32
|
"""
|
|
30
33
|
Main function to fix errors in a code module and its calling program that caused a crash.
|
|
@@ -39,6 +42,7 @@ def crash_main(
|
|
|
39
42
|
:param loop: Enable iterative fixing process.
|
|
40
43
|
:param max_attempts: Maximum number of fix attempts before giving up.
|
|
41
44
|
:param budget: Maximum cost allowed for the fixing process.
|
|
45
|
+
:param agentic_fallback: Enable agentic fallback if the primary fix mechanism fails.
|
|
42
46
|
:return: A tuple containing:
|
|
43
47
|
- bool: Success status
|
|
44
48
|
- str: The final fixed code module
|
|
@@ -54,9 +58,9 @@ def crash_main(
|
|
|
54
58
|
quiet = ctx.params.get("quiet", ctx.obj.get("quiet", False))
|
|
55
59
|
verbose = ctx.params.get("verbose", ctx.obj.get("verbose", False))
|
|
56
60
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
61
|
+
# Store parameter values for later resolution
|
|
62
|
+
param_strength = strength
|
|
63
|
+
param_temperature = temperature
|
|
60
64
|
|
|
61
65
|
try:
|
|
62
66
|
input_file_paths = {
|
|
@@ -77,8 +81,20 @@ def crash_main(
|
|
|
77
81
|
force=force,
|
|
78
82
|
quiet=quiet,
|
|
79
83
|
command="crash",
|
|
80
|
-
command_options=command_options
|
|
84
|
+
command_options=command_options,
|
|
85
|
+
context_override=ctx.obj.get('context'),
|
|
86
|
+
confirm_callback=ctx.obj.get('confirm_callback')
|
|
81
87
|
)
|
|
88
|
+
# Use centralized config resolution with proper priority:
|
|
89
|
+
# CLI > pddrc > defaults
|
|
90
|
+
effective_config = resolve_effective_config(
|
|
91
|
+
ctx,
|
|
92
|
+
resolved_config,
|
|
93
|
+
param_overrides={"strength": param_strength, "temperature": param_temperature}
|
|
94
|
+
)
|
|
95
|
+
strength = effective_config["strength"]
|
|
96
|
+
temperature = effective_config["temperature"]
|
|
97
|
+
time_param = effective_config["time"]
|
|
82
98
|
|
|
83
99
|
prompt_content = input_strings["prompt_file"]
|
|
84
100
|
code_content = input_strings["code_file"]
|
|
@@ -94,7 +110,8 @@ def crash_main(
|
|
|
94
110
|
if loop:
|
|
95
111
|
success, final_program, final_code, attempts, cost, model = fix_code_loop(
|
|
96
112
|
code_file, prompt_content, program_file, strength, temperature,
|
|
97
|
-
max_attempts
|
|
113
|
+
max_attempts if max_attempts is not None else 3, budget or 5.0, error_file, verbose, time_param,
|
|
114
|
+
prompt_file=prompt_file, agentic_fallback=agentic_fallback
|
|
98
115
|
)
|
|
99
116
|
# Always set final_code/final_program to something non-empty
|
|
100
117
|
if not final_code:
|
|
@@ -161,20 +178,36 @@ def crash_main(
|
|
|
161
178
|
if code_updated:
|
|
162
179
|
rprint(f"[bold]Fixed code saved to:[/bold] {output_code_path_str}")
|
|
163
180
|
else:
|
|
164
|
-
rprint(f"[
|
|
181
|
+
rprint(f"[bold]Code saved to:[/bold] {output_code_path_str} [dim](not modified)[/dim]")
|
|
165
182
|
if output_program_path_str:
|
|
166
183
|
if program_updated:
|
|
167
184
|
rprint(f"[bold]Fixed program saved to:[/bold] {output_program_path_str}")
|
|
168
185
|
else:
|
|
169
|
-
rprint(f"[
|
|
186
|
+
rprint(f"[bold]Program saved to:[/bold] {output_program_path_str} [dim](not modified)[/dim]")
|
|
187
|
+
|
|
188
|
+
if verbose:
|
|
189
|
+
rprint("\n[bold]Verbose diagnostics:[/bold]")
|
|
190
|
+
rprint(f" Code file: {code_file}")
|
|
191
|
+
rprint(f" Program file: {program_file}")
|
|
192
|
+
rprint(f" Code updated: {code_updated}")
|
|
193
|
+
rprint(f" Program updated: {program_updated}")
|
|
194
|
+
rprint(f" Original code length: {len(original_code_content)} chars")
|
|
195
|
+
rprint(f" Final code length: {len(final_code)} chars")
|
|
196
|
+
rprint(f" Original program length: {len(original_program_content)} chars")
|
|
197
|
+
rprint(f" Final program length: {len(final_program)} chars")
|
|
170
198
|
|
|
171
199
|
return success, final_code, final_program, attempts, cost, model
|
|
172
200
|
|
|
173
201
|
except FileNotFoundError as e:
|
|
174
202
|
if not quiet:
|
|
175
203
|
rprint(f"[bold red]Error:[/bold red] Input file not found: {e}")
|
|
176
|
-
sys.exit(1)
|
|
204
|
+
# Return error result instead of sys.exit(1) to allow orchestrator to handle gracefully
|
|
205
|
+
return False, "", "", 0, 0.0, f"FileNotFoundError: {e}"
|
|
206
|
+
except click.Abort:
|
|
207
|
+
# User cancelled - re-raise to stop the sync loop
|
|
208
|
+
raise
|
|
177
209
|
except Exception as e:
|
|
178
210
|
if not quiet:
|
|
179
211
|
rprint(f"[bold red]An unexpected error occurred:[/bold red] {str(e)}")
|
|
180
|
-
sys.exit(1)
|
|
212
|
+
# Return error result instead of sys.exit(1) to allow orchestrator to handle gracefully
|
|
213
|
+
return False, "", "", 0, 0.0, f"Error: {e}"
|
pdd/data/language_format.csv
CHANGED
|
@@ -1,63 +1,71 @@
|
|
|
1
|
-
language,comment,extension
|
|
2
|
-
Python,#,.py
|
|
3
|
-
Java,//,.java
|
|
4
|
-
C++,//,.cpp
|
|
5
|
-
JavaScript,//,.js
|
|
6
|
-
HTML,"<!-- -->",.html
|
|
7
|
-
CSS,"/**/",.css
|
|
8
|
-
Ruby,#,.rb
|
|
9
|
-
PHP,//,.php
|
|
10
|
-
Swift,//,.swift
|
|
11
|
-
Go,//,.go
|
|
12
|
-
Rust,//,.rs
|
|
13
|
-
Kotlin,//,.kt
|
|
14
|
-
TypeScript,//,.ts
|
|
15
|
-
TypeScriptReact,//,.tsx
|
|
16
|
-
C#,//,.cs
|
|
17
|
-
SQL,--,.sql
|
|
18
|
-
Shell,#,.sh
|
|
19
|
-
Bash,#,.sh
|
|
20
|
-
Fish,#,.fish
|
|
21
|
-
Zsh,#,.zsh
|
|
22
|
-
PowerShell,#,.ps1
|
|
23
|
-
Perl,#,.pl
|
|
24
|
-
R,#,.R
|
|
25
|
-
MATLAB,%,.m
|
|
26
|
-
Lua,--,.lua
|
|
27
|
-
Haskell,--,.hs
|
|
28
|
-
Scala,//,.scala
|
|
29
|
-
Groovy,//,.groovy
|
|
30
|
-
Dart,//,.dart
|
|
31
|
-
F#,//,.fs
|
|
32
|
-
YAML,#,.yml
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
1
|
+
language,comment,extension,run_command,run_test_command
|
|
2
|
+
Python,#,.py,python {file},python -m pytest {file} -v
|
|
3
|
+
Java,//,.java,java {file},
|
|
4
|
+
C++,//,.cpp,,
|
|
5
|
+
JavaScript,//,.js,node {file},
|
|
6
|
+
HTML,"<!-- -->",.html,,
|
|
7
|
+
CSS,"/**/",.css,,
|
|
8
|
+
Ruby,#,.rb,ruby {file},
|
|
9
|
+
PHP,//,.php,php {file},
|
|
10
|
+
Swift,//,.swift,swift {file},swift test
|
|
11
|
+
Go,//,.go,go run {file},go test -v {file}
|
|
12
|
+
Rust,//,.rs,,cargo test
|
|
13
|
+
Kotlin,//,.kt,kotlin {file},
|
|
14
|
+
TypeScript,//,.ts,npx tsx {file},
|
|
15
|
+
TypeScriptReact,//,.tsx,npx tsx {file},
|
|
16
|
+
C#,//,.cs,dotnet run {file},dotnet test
|
|
17
|
+
SQL,--,.sql,,
|
|
18
|
+
Shell,#,.sh,sh {file},
|
|
19
|
+
Bash,#,.sh,bash {file},
|
|
20
|
+
Fish,#,.fish,fish {file},
|
|
21
|
+
Zsh,#,.zsh,zsh {file},
|
|
22
|
+
PowerShell,#,.ps1,pwsh {file},
|
|
23
|
+
Perl,#,.pl,perl {file},
|
|
24
|
+
R,#,.R,Rscript {file},
|
|
25
|
+
MATLAB,%,.m,,
|
|
26
|
+
Lua,--,.lua,lua {file},
|
|
27
|
+
Haskell,--,.hs,runhaskell {file},
|
|
28
|
+
Scala,//,.scala,scala {file},
|
|
29
|
+
Groovy,//,.groovy,groovy {file},
|
|
30
|
+
Dart,//,.dart,dart run {file},
|
|
31
|
+
F#,//,.fs,dotnet fsi {file},
|
|
32
|
+
YAML,#,.yml,,
|
|
33
|
+
YAML,#,.yaml,,
|
|
34
|
+
JSON,del,.json,,
|
|
35
|
+
JSONL,del,.jsonl,,
|
|
36
|
+
XML,"<!-- -->",.xml,,
|
|
37
|
+
Makefile,#,,,
|
|
38
|
+
CSV,del,.csv,,
|
|
39
|
+
Markdown,del,.md,,
|
|
40
|
+
LaTeX,%,.tex,,
|
|
41
|
+
Assembly,;,.asm,,
|
|
42
|
+
Fortran,!,.f90,gfortran -o {file}.out {file} && ./{file}.out,
|
|
43
|
+
COBOL,*>,.cob,,
|
|
44
|
+
Lisp,;,.lisp,sbcl --script {file},
|
|
45
|
+
Prolog,%,.pl,swipl -s {file},
|
|
46
|
+
Erlang,%,.erl,escript {file},
|
|
47
|
+
Clojure,;,.clj,clojure {file},
|
|
48
|
+
Julia,#,.jl,julia {file},
|
|
49
|
+
Elixir,#,.ex,elixir {file},
|
|
50
|
+
Pascal,//,.pas,fpc {file} && ./{file},
|
|
51
|
+
VBScript,"'",.vbs,cscript {file},
|
|
52
|
+
CoffeeScript,#,.coffee,coffee {file},
|
|
53
|
+
Objective-C,//,.m,,
|
|
54
|
+
Scheme,;,.scm,scheme --script {file},
|
|
55
|
+
Tcl,#,.tcl,tclsh {file},
|
|
56
|
+
D,//,.d,rdmd {file},
|
|
57
|
+
Ada,--,.ada,,
|
|
58
|
+
Nim,#,.nim,nim r {file},
|
|
59
|
+
OCaml,"(**)",.ml,ocaml {file},
|
|
60
|
+
LLM,del,.prompt,,
|
|
61
|
+
prompt,del,.prompt,,
|
|
62
|
+
TOML,#,.toml,,
|
|
63
|
+
Log,del,.log,,
|
|
64
|
+
reStructuredText,del,.rst,,
|
|
65
|
+
Text,del,.txt,,
|
|
66
|
+
INI,;,.ini,,
|
|
67
|
+
Verilog,//,.v,,
|
|
68
|
+
Systemverilog,//,.sv,,
|
|
69
|
+
Prisma,///,.prisma,,
|
|
70
|
+
Lean,--,.lean,lean {file},
|
|
71
|
+
Agda,--,.agda,,
|
pdd/data/llm_model.csv
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
provider,model,input,output,coding_arena_elo,base_url,api_key,max_reasoning_tokens,structured_output,reasoning_type
|
|
2
|
-
OpenAI,gpt-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Google,vertex_ai/gemini-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
OpenAI,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
OpenAI,
|
|
18
|
-
|
|
1
|
+
provider,model,input,output,coding_arena_elo,base_url,api_key,max_reasoning_tokens,structured_output,reasoning_type,location
|
|
2
|
+
OpenAI,gpt-5-nano,0.05,0.4,1249,,OPENAI_API_KEY,0,True,none,
|
|
3
|
+
Google,vertex_ai/gemini-3-flash-preview,0.5,3.0,1430,,VERTEX_CREDENTIALS,0,True,effort,
|
|
4
|
+
Google,gemini/gemini-3-pro-preview,1.25,10.0,1487,,GEMINI_API_KEY,0,True,effort,
|
|
5
|
+
Google,vertex_ai/claude-sonnet-4-5,3.0,15.0,1370,,VERTEX_CREDENTIALS,128000,True,budget,
|
|
6
|
+
Google,vertex_ai/gemini-3-pro-preview,1.25,10.0,1487,,VERTEX_CREDENTIALS,0,True,effort,
|
|
7
|
+
OpenAI,gpt-5.1-codex-mini,0.25,2.0,1325,,OPENAI_API_KEY,0,True,effort,
|
|
8
|
+
OpenAI,gpt-5.2,1.75,14.0,1486,,OPENAI_API_KEY,0,True,effort,
|
|
9
|
+
OpenAI,gpt-5.1-codex,1.25,10.0,1478,,OPENAI_API_KEY,0,True,effort,
|
|
10
|
+
OpenAI,gpt-5.1-codex-max,1.25,10.0,1480,,OPENAI_API_KEY,0,True,effort,
|
|
11
|
+
Google,vertex_ai/deepseek-ai/deepseek-v3.2-maas,0.28,0.42,1450,,VERTEX_CREDENTIALS,0,False,effort,global
|
|
12
|
+
Fireworks,fireworks_ai/accounts/fireworks/models/qwen3-coder-480b-a35b-instruct,0.45,1.80,1363,,FIREWORKS_API_KEY,0,False,none,
|
|
13
|
+
Google,vertex_ai/claude-opus-4-5,5.0,25.0,1465,,VERTEX_CREDENTIALS,128000,True,budget,
|
|
14
|
+
OpenAI,openai/mlx-community/Qwen3-30B-A3B-4bit,0,0,1040,http://localhost:8080,,0,False,none,
|
|
15
|
+
lm_studio,lm_studio/openai-gpt-oss-120b-mlx-6,0.0001,0,1082,http://localhost:1234/v1,,0,True,effort,
|
|
16
|
+
Fireworks,fireworks_ai/accounts/fireworks/models/glm-4p6,0.55,2.19,1442,,FIREWORKS_API_KEY,0,False,none,
|
|
17
|
+
OpenAI,groq/moonshotai/kimi-k2-instruct-0905,1.0,3.0,1330,,GROQ_API_KEY,0,True,none,
|
|
18
|
+
Anthropic,anthropic/claude-sonnet-4-5-20250929,3.0,15.0,1370,,ANTHROPIC_API_KEY,128000,True,budget,
|
|
19
|
+
Anthropic,anthropic/claude-opus-4-5-20251101,5.0,25.0,1474,,ANTHROPIC_API_KEY,128000,True,budget,
|
|
20
|
+
Anthropic,anthropic/claude-haiku-4-5-20251001,1.0,5.0,1270,,ANTHROPIC_API_KEY,128000,True,budget,
|
pdd/detect_change_main.py
CHANGED
|
@@ -6,7 +6,7 @@ from rich import print as rprint
|
|
|
6
6
|
|
|
7
7
|
from .construct_paths import construct_paths
|
|
8
8
|
from .detect_change import detect_change
|
|
9
|
-
from . import DEFAULT_TIME
|
|
9
|
+
from . import DEFAULT_TIME, DEFAULT_STRENGTH
|
|
10
10
|
|
|
11
11
|
def detect_change_main(
|
|
12
12
|
ctx: click.Context,
|
|
@@ -44,7 +44,8 @@ def detect_change_main(
|
|
|
44
44
|
force=ctx.obj.get('force', False),
|
|
45
45
|
quiet=ctx.obj.get('quiet', False),
|
|
46
46
|
command="detect",
|
|
47
|
-
command_options=command_options
|
|
47
|
+
command_options=command_options,
|
|
48
|
+
context_override=ctx.obj.get('context')
|
|
48
49
|
)
|
|
49
50
|
|
|
50
51
|
# Get change description content
|
|
@@ -54,7 +55,7 @@ def detect_change_main(
|
|
|
54
55
|
prompt_contents = [input_strings[f"prompt_file_{i}"] for i in range(len(prompt_files))]
|
|
55
56
|
|
|
56
57
|
# Get model parameters from context
|
|
57
|
-
strength = ctx.obj.get('strength',
|
|
58
|
+
strength = ctx.obj.get('strength', DEFAULT_STRENGTH)
|
|
58
59
|
temperature = ctx.obj.get('temperature', 0)
|
|
59
60
|
time_budget = ctx.obj.get('time', DEFAULT_TIME)
|
|
60
61
|
|
|
@@ -100,4 +101,4 @@ def detect_change_main(
|
|
|
100
101
|
except Exception as e:
|
|
101
102
|
if not ctx.obj.get('quiet', False):
|
|
102
103
|
rprint(f"[bold red]Error:[/bold red] {str(e)}")
|
|
103
|
-
sys.exit(1)
|
|
104
|
+
sys.exit(1)
|