Initial upload: Local AI Commit Reviewer CLI with CI/CD workflow
This commit is contained in:
133
src/llm/templates.py
Normal file
133
src/llm/templates.py
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
class ReviewPromptTemplates:
|
||||||
|
base_prompt: str = """You are an expert code reviewer analyzing staged changes in a Git repository.
|
||||||
|
|
||||||
|
Review the following code changes and provide detailed feedback on:
|
||||||
|
1. Potential bugs and security vulnerabilities
|
||||||
|
2. Code style and best practices violations
|
||||||
|
3. Performance concerns
|
||||||
|
4. Documentation issues
|
||||||
|
5. Suggestions for improvement
|
||||||
|
|
||||||
|
Respond in the following JSON format:
|
||||||
|
{{
|
||||||
|
"issues": [
|
||||||
|
{{
|
||||||
|
"file": "filename",
|
||||||
|
"line": line_number,
|
||||||
|
"severity": "critical|warning|info",
|
||||||
|
"category": "bug|security|style|performance|documentation",
|
||||||
|
"message": "description of the issue",
|
||||||
|
"suggestion": "suggested fix (if applicable)"
|
||||||
|
}}
|
||||||
|
],
|
||||||
|
"summary": {{
|
||||||
|
"critical_count": number,
|
||||||
|
"warning_count": number,
|
||||||
|
"info_count": number,
|
||||||
|
"overall_assessment": "brief summary"
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
|
||||||
|
Only include issues that match the strictness level: {strictness}
|
||||||
|
|
||||||
|
{strictness_settings}
|
||||||
|
|
||||||
|
Review the following diff:
|
||||||
|
```
|
||||||
|
{diff}
|
||||||
|
```
|
||||||
|
"""
|
||||||
|
|
||||||
|
permissive_settings: str = """Strictness: PERMISSIVE
|
||||||
|
- Only report critical security issues
|
||||||
|
- Only report definite bugs (not potential issues)
|
||||||
|
- Ignore style and formatting issues
|
||||||
|
- Ignore performance concerns
|
||||||
|
- Ignore documentation issues
|
||||||
|
"""
|
||||||
|
|
||||||
|
balanced_settings: str = """Strictness: BALANCED
|
||||||
|
- Report all security issues
|
||||||
|
- Report all definite bugs and potential bugs
|
||||||
|
- Report major style violations
|
||||||
|
- Ignore minor performance concerns
|
||||||
|
- Ignore documentation issues unless critical
|
||||||
|
"""
|
||||||
|
|
||||||
|
strict_settings: str = """Strictness: STRICT
|
||||||
|
- Report all security issues (even minor)
|
||||||
|
- Report all bugs (definite and potential)
|
||||||
|
- Report all style violations
|
||||||
|
- Report performance concerns
|
||||||
|
- Report documentation issues
|
||||||
|
- Suggest specific improvements
|
||||||
|
"""
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_prompt(cls, diff: str, strictness: str = "balanced", language: str = "unknown") -> str:
|
||||||
|
settings_map = {
|
||||||
|
"permissive": cls.permissive_settings,
|
||||||
|
"balanced": cls.balanced_settings,
|
||||||
|
"strict": cls.strict_settings
|
||||||
|
}
|
||||||
|
|
||||||
|
settings = settings_map.get(strictness.lower(), cls.balanced_settings)
|
||||||
|
|
||||||
|
base = cls.base_prompt.format(
|
||||||
|
strictness=strictness.upper(),
|
||||||
|
strictness_settings=settings,
|
||||||
|
diff=diff
|
||||||
|
)
|
||||||
|
|
||||||
|
if language != "unknown":
|
||||||
|
base += f"\n\nNote: This code is in {language}. Apply {language}-specific best practices."
|
||||||
|
|
||||||
|
return base
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_commit_review_prompt(cls, diff: str, commit_message: str, strictness: str = "balanced") -> str:
|
||||||
|
prompt = f"""Review the following commit with message: "{commit_message}"
|
||||||
|
|
||||||
|
Analyze whether the changes align with the commit message and provide feedback.
|
||||||
|
|
||||||
|
"""
|
||||||
|
prompt += cls.get_prompt(diff, strictness)
|
||||||
|
return prompt
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_security_review_prompt(cls, diff: str) -> str:
|
||||||
|
template = """You are a security expert reviewing code changes for vulnerabilities.
|
||||||
|
|
||||||
|
Focus specifically on:
|
||||||
|
1. Injection vulnerabilities (SQL, command, code injection)
|
||||||
|
2. Authentication and authorization issues
|
||||||
|
3. Sensitive data exposure
|
||||||
|
4. Cryptographic weaknesses
|
||||||
|
5. Path traversal and file inclusion
|
||||||
|
6. Dependency security issues
|
||||||
|
|
||||||
|
Provide findings in JSON format:
|
||||||
|
```
|
||||||
|
{{
|
||||||
|
"vulnerabilities": [
|
||||||
|
{{
|
||||||
|
"file": "filename",
|
||||||
|
"line": line_number,
|
||||||
|
"severity": "critical|high|medium|low",
|
||||||
|
"type": "vulnerability type",
|
||||||
|
"description": "detailed description",
|
||||||
|
"exploit_scenario": "how it could be exploited",
|
||||||
|
"fix": "recommended fix"
|
||||||
|
}}
|
||||||
|
],
|
||||||
|
"secure_patterns": ["list of good security practices observed"],
|
||||||
|
"concerns": ["list of potential security concerns"]
|
||||||
|
}}
|
||||||
|
```
|
||||||
|
|
||||||
|
Review the following diff:
|
||||||
|
```
|
||||||
|
{diff}
|
||||||
|
```
|
||||||
|
"""
|
||||||
|
return template.format(diff=diff)
|
||||||
Reference in New Issue
Block a user