File size: 1,798 Bytes
78d2164
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
"""Strict filter on model output. Returns hint str or None."""

KNOWN_HINTS = [
    "Read the traceback file before editing.",
    "Read the file before editing it.",
    "Run the focused failing test now.",
    "Do not patch the same hypothesis again.",
    "Search the exact symbol from the error.",
    "Change strategy; this command already failed.",
    "Check the project's package manager first.",
    "Use the latest error, not the original one.",
    "Verify the change before finalizing.",
]

BANNED = ["<think>", "</think>", "because", "step 1", "first,", "second,", "plan:", "i think"]


import re
_THINK = re.compile(r"<think>.*?</think>", re.S)


def clean_hint(text):
    text = _THINK.sub("", text).strip()  # drop empty think block
    text = text.splitlines()[0].strip() if text.strip() else ""
    if text == "NO_HINT":
        return None
    if any(x in text.lower() for x in BANNED):
        return None
    if len(text.split()) > 12:
        return None
    marks = text.count(".") + text.count("!") + text.count("?")
    if marks > 1:
        return None
    if marks == 0:
        text += "."
    if text not in KNOWN_HINTS:
        return None
    return text


def demo():
    assert clean_hint("NO_HINT") is None
    assert clean_hint("Read the file before editing it.") == "Read the file before editing it."
    assert clean_hint("Read the file before editing it") == "Read the file before editing it."  # adds period
    assert clean_hint("First, I think we should because reasons.") is None  # banned + not known
    assert clean_hint("blah blah not a known hint at all here.") is None
    assert clean_hint("This is a very long sentence with way more than twelve words in it indeed yes.") is None
    print("clean_output ok")


if __name__ == "__main__":
    demo()