Add shellgen core and backends modules
This commit is contained in:
90
app/shellgen/core/prompts.py
Normal file
90
app/shellgen/core/prompts.py
Normal file
@@ -0,0 +1,90 @@
|
||||
"""Prompt templates for command generation."""
|
||||
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class PromptTemplates:
|
||||
"""Manages prompt templates for different shells and scenarios."""
|
||||
|
||||
BASE_PROMPT = """You are a shell command expert. Convert the following natural language description into a {shell} command.
|
||||
|
||||
Return ONLY the command in a code block, followed by a brief explanation.
|
||||
|
||||
Description: {description}
|
||||
{directory}
|
||||
|
||||
{shell} command:"""
|
||||
|
||||
BASH_SPECIFIC = """Generate a bash command. You can use:
|
||||
- Bash-specific syntax like [[ ]], parameter expansion ${{...}}
|
||||
- Process substitution <(), >()
|
||||
- Arrays and associative arrays
|
||||
- Extended globbing patterns
|
||||
- Here-strings <<<"""
|
||||
|
||||
ZSH_SPECIFIC = """Generate a zsh command. You can use:
|
||||
- Zsh-specific features like glob qualifiers
|
||||
- Extended globbing (**,omg, etc.)
|
||||
- Zsh arithmetic $((...))
|
||||
- Named directories and magic assignments
|
||||
- Zsh-specific builtins"""
|
||||
|
||||
GIT_CONTEXT = """Context: Git repository detected. Use git commands when appropriate."""
|
||||
|
||||
DOCKER_CONTEXT = """Context: Docker environment detected. Use docker/docker-compose when appropriate."""
|
||||
|
||||
def generate_prompt(
|
||||
self,
|
||||
description: str,
|
||||
shell: str,
|
||||
context: Optional[str] = None,
|
||||
) -> str:
|
||||
"""Generate a complete prompt for command generation.
|
||||
|
||||
Args:
|
||||
description: Natural language description of the task.
|
||||
shell: Target shell (bash or zsh).
|
||||
context: Optional context information.
|
||||
|
||||
Returns:
|
||||
Complete prompt string.
|
||||
"""
|
||||
shell_specific = self.ZSH_SPECIFIC if shell == "zsh" else self.BASH_SPECIFIC
|
||||
|
||||
directory_info = ""
|
||||
if context:
|
||||
directory_info = f"Current directory context: {context}"
|
||||
|
||||
prompt = self.BASE_PROMPT.format(
|
||||
shell=shell.upper(),
|
||||
description=description,
|
||||
directory=directory_info,
|
||||
)
|
||||
|
||||
prompt += "\n\n" + shell_specific
|
||||
|
||||
return prompt
|
||||
|
||||
def generate_feedback_prompt(
|
||||
self,
|
||||
original_description: str,
|
||||
generated_command: str,
|
||||
user_correction: str,
|
||||
) -> str:
|
||||
"""Generate a prompt to learn from user feedback.
|
||||
|
||||
Args:
|
||||
original_description: The original natural language description.
|
||||
generated_command: The command that was originally generated.
|
||||
user_correction: The user's corrected command.
|
||||
|
||||
Returns:
|
||||
Prompt for learning from feedback.
|
||||
"""
|
||||
return f"""The user wanted to: {original_description}
|
||||
|
||||
I generated: {generated_command}
|
||||
|
||||
The user corrected it to: {user_correction}
|
||||
|
||||
What was wrong with my original command, and what should I learn for similar requests?"""
|
||||
Reference in New Issue
Block a user