File size: 4,060 Bytes
a2b450c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import re


PIDGIN_MARKER_PATTERN = re.compile(
    r"\b(wetin|dey|una|abi|sabi|chop|waka|pikin|dem|wey|na)\b"
    r"|make we|no dey|no be|e go|i no|you no",
    re.IGNORECASE,
)

STANDARD_ENGLISH_PATTERN = re.compile(
    r"\b(what|why|where|when|how|please|because|cannot|can't|don't|doesn't|should|would|could|will|are|is|am|have|has)\b",
    re.IGNORECASE,
)


def _normalize_label(label):
    return str(label or "").strip().lower()


def is_nigerian_pidgin_label(label):
    value = _normalize_label(label)
    return "naija" in value or ("nigerian" in value and "pidgin" in value)


def is_nigerian_english_label(label):
    value = _normalize_label(label)
    return "nigerian english" in value and not is_nigerian_pidgin_label(value)


def nigerian_variety_instruction(source_dialect="", target_dialect=""):
    source_is_relevant = is_nigerian_pidgin_label(source_dialect) or is_nigerian_english_label(source_dialect)
    target_is_relevant = is_nigerian_pidgin_label(target_dialect) or is_nigerian_english_label(target_dialect)
    if not source_is_relevant and not target_is_relevant:
        return ""

    return (
        "NIGERIAN VARIETY BOUNDARY:\n"
        "- Nigerian English and Nigerian Pidgin English / Naija Pidgin are separate varieties, not interchangeable labels.\n"
        "- Nigerian English is a recognized World English variety. Use Nigerian English lexical, pragmatic, and cultural flavor while keeping English grammar; do not use core Naija Pidgin grammar markers such as 'wetin', 'dey', 'una', 'abi', 'na', 'abeg', or 'make we' unless the source is quoting them.\n"
        "- Nigerian Pidgin English / Naija Pidgin is an English-lexifier pidgin/creole continuum. Use Naija Pidgin grammar and discourse markers naturally; do not normalize it into Nigerian English or Standard English.\n"
        "- If the target is Nigerian English, avoid Naija Pidgin grammar. If the target is Nigerian Pidgin English, do not output polished Nigerian English."
    )


def nigerian_variety_retry_reason(translated, target_dialect):
    text = str(translated or "").strip()
    if not text:
        return ""

    if is_nigerian_english_label(target_dialect) and PIDGIN_MARKER_PATTERN.search(text):
        return "Target is Nigerian English, but the output contains Naija Pidgin markers."

    word_count = len(re.findall(r"[A-Za-z']+", text))
    if (
        is_nigerian_pidgin_label(target_dialect)
        and word_count >= 4
        and not PIDGIN_MARKER_PATTERN.search(text)
        and STANDARD_ENGLISH_PATTERN.search(text)
    ):
        return "Target is Nigerian Pidgin English, but the output looks like Nigerian/Standard English without Naija Pidgin grammar."

    return ""


def nigerian_variety_retry_prompt(text, source_dialect, target_dialect, translated, reason):
    return f"""
The previous output crossed a Nigerian variety boundary.
Reason: {reason}

Source variety: {source_dialect}
Target variety: {target_dialect}
Source utterance: "{text}"
Previous output: "{translated}"

Rewrite the output ONLY in the requested target variety.
{nigerian_variety_instruction(source_dialect, target_dialect)}
"""


def hausa_variety_instruction(source_dialect="", target_dialect=""):
    labels = f"{source_dialect} {target_dialect}".lower()
    if not any(token in labels for token in ("hausa", "kano", "katsina", "sokoto", "zaria")):
        return ""

    return (
        "HAUSA LEXICAL AND HONORIFIC GUARDRAIL:\n"
        "- Preserve Hausa honorific gender and social role carefully.\n"
        "- 'malama' or 'mallama' means ma'am, madam, or female teacher; never translate it as sir, friend, bro, or guy.\n"
        "- 'malam' means sir, male teacher, or learned man; do not confuse it with 'malama'.\n"
        "- 'ina kwana?' is a morning greeting close to 'good morning' or 'how did you wake/sleep?'; keep the greeting natural for the target dialect.\n"
        "- When translating into English or Nigerian English, prefer respectful forms such as 'Good morning, ma'am' when the source says 'ina kwana, malama?'."
    )