Repository navigation
Expand file tree
/
Copy pathvalidators.py
More file actions
58 lines (45 loc) · 1.98 KB
/
Copy pathvalidators.py
File metadata and controls
58 lines (45 loc) · 1.98 KB
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
54
55
56
57
58
"""Cheap, deterministic output checks used by Mellea's repair loop."""
from support_copilot.facts import extract_order_ids
REFUND_PROMISES = (
"we will refund",
"we'll refund",
"your refund is approved",
"refund has been approved",
)
def under_word_limit(text: str, limit: int = 120) -> tuple[bool, str]:
count = len(text.split())
return count <= limit, f"Reply has {count} words; the limit is {limit}."
def mentions_ticket(text: str, ticket_id: str) -> tuple[bool, str]:
passed = ticket_id.casefold() in text.casefold()
return passed, f"Reply must mention ticket ID {ticket_id}."
def greets_customer(text: str, customer_name: str) -> tuple[bool, str]:
passed = customer_name.casefold() in text.casefold()
return passed, f"Reply must greet the customer by name ({customer_name})."
def avoids_unauthorised_refund_promise(
text: str, *, allowed: bool
) -> tuple[bool, str]:
if allowed:
return True, "Refund promise is authorised."
lower = text.casefold()
found = next((phrase for phrase in REFUND_PROMISES if phrase in lower), None)
return found is None, "Do not promise a refund; say a specialist will review the request."
def contains_no_invented_order_id(
text: str, trusted_source_text: str
) -> tuple[bool, str]:
"""Ensure every ID in generated text occurs in the original, trusted ticket."""
mentioned = extract_order_ids(text)
allowed = extract_order_ids(trusted_source_text)
if not mentioned:
return True, "No order identifier was introduced."
unexpected_keys = mentioned.keys() - allowed.keys()
unexpected = sorted(mentioned[key] for key in unexpected_keys)
if not unexpected:
return (
True,
f"Detected order IDs {sorted(mentioned.values())} all occur in the source ticket.",
)
return (
False,
f"Unexpected order IDs {unexpected}; source ticket contains "
f"{sorted(allowed.values())}. Remove every unexpected order ID.",
)