|
from .utils import format_prompt_for_hint, format_prompt_for_followup |
|
from .model_handler import generate_hint, generate_follow_up, generate_feedback |
|
import re |
|
|
|
def clean_task_description(description: str) -> str: |
|
"""Removes common example, constraint, input/output format sections by finding the first occurrence.""" |
|
lines = description.splitlines() |
|
cleaned_lines = [] |
|
skip_keywords = ["Example:", "Input:", "Output:", "Constraints:", "Input Format:", "Output Format:", "Explanation:"] |
|
first_skip_index = -1 |
|
|
|
|
|
for i, line in enumerate(lines): |
|
line_stripped_lower = line.strip().lower() |
|
if any(line_stripped_lower.startswith(keyword.lower()) for keyword in skip_keywords): |
|
first_skip_index = i |
|
break |
|
|
|
|
|
if first_skip_index != -1: |
|
cleaned_lines = lines[:first_skip_index] |
|
|
|
else: |
|
cleaned_lines = lines |
|
|
|
|
|
return "\n".join(cleaned_lines).strip() |
|
|
|
|
|
def get_hint(code, task_description, mode='concise'): |
|
cleaned_description = clean_task_description(task_description) |
|
|
|
return generate_hint(code, cleaned_description, mode) |
|
|
|
def get_feedback(code, task_description, mode='concise'): |
|
cleaned_description = clean_task_description(task_description) |
|
|
|
return generate_feedback(code, cleaned_description, mode) |
|
|
|
def get_follow_up_question(code, task_description): |
|
cleaned_description = clean_task_description(task_description) |
|
|
|
return generate_follow_up(cleaned_description, code) |
|
|