File size: 3,425 Bytes
67cc066
ec80e4b
 
67cc066
 
2167be3
488c650
67cc066
a7f165e
037f971
ec80e4b
037f971
2167be3
 
037f971
724a384
ec80e4b
037f971
 
724a384
 
e7addaf
724a384
037f971
ec80e4b
 
724a384
ec80e4b
037f971
 
ec80e4b
037f971
2167be3
 
037f971
2167be3
 
037f971
 
2167be3
 
037f971
2167be3
 
 
037f971
ec80e4b
037f971
 
 
 
 
 
 
2167be3
724a384
2167be3
 
 
037f971
2167be3
 
 
 
724a384
 
 
037f971
2167be3
037f971
2167be3
 
 
 
037f971
 
2167be3
 
9c2fd74
724a384
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
"""
Flare – Prompt Builder  (v4-fix Β· detection_prompt + examples)
==============================================================
"""

from typing import List, Dict
from utils import log


# ─────────────────────────────────────────────────────────────────────────────
# INTENT PROMPT
# ─────────────────────────────────────────────────────────────────────────────
def build_intent_prompt(general_prompt: str,
                        conversation: List[Dict[str, str]],
                        user_input: str,
                        intents: List) -> str:
    # === INTENT INDEX ===
    lines = ["### INTENT INDEX ###"]
    for it in intents:
        # IntentConfig object attribute access
        det = it.detection_prompt.strip() if it.detection_prompt else ""
        det_part = f'  β€’ detection_prompt β†’ "{det}"' if det else ""
        exs = " | ".join(it.examples) if it.examples else ""
        ex_part = f"  β€’ examples β†’ {exs}" if exs else ""

        newline_between = "\n" if det_part and ex_part else ""
        lines.append(f"{it.name}:{det_part}{newline_between}{ex_part}")

    intent_index = "\n".join(lines)

    # === HISTORY ===
    history_block = "\n".join(
        f"{m['role'].upper()}: {m['content']}" for m in conversation[-10:]
    )

    prompt = (
        f"{general_prompt}\n\n"
        f"{intent_index}\n\n"
        f"Conversation so far:\n{history_block}\n\n"
        f"USER: {user_input.strip()}"
    )
    log("βœ… Intent prompt built (index with detection_prompt)")
    return prompt


# ─────────────────────────────────────────────────────────────────────────────
# PARAMETER PROMPT (değişmedi)
# ─────────────────────────────────────────────────────────────────────────────
_FMT = (
    "Return exactly ONE line in the format:\n"
    "#PARAMETERS:{"
    "\"extracted\":[{\"name\":\"<param>\",\"value\":\"<val>\"},...],"
    "\"missing\":[\"<param>\",...]}"
)

def build_parameter_prompt(intent_cfg,
                           missing_params: List[str],
                           user_input: str,
                           conversation: List[Dict[str, str]]) -> str:
    parts: List[str] = [
        "You will extract ONLY the parameters listed below.",
        "If a parameter cannot be found OR fails validation, keep it in the "
        "\"missing\" list. Never guess values."
    ]
    for p in intent_cfg.parameters:
        if p.name in missing_params:
            parts.append(f"* {p.name}: {p.extraction_prompt}")
    parts.append(_FMT)

    history_block = "\n".join(
        f"{m['role'].upper()}: {m['content']}" for m in conversation[-10:]
    )

    prompt = (
        "\n".join(parts) +
        "\n\nConversation so far:\n" + history_block +
        "\n\nUSER: " + user_input.strip()
    )
    log("βœ… Parameter prompt built")
    return prompt