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

from typing import List, Dict
from datetime import datetime


def log(msg: str) -> None:
    print(f"[{datetime.now().strftime('%H:%M:%S')}] {msg}", flush=True)


# ─────────────────────────────────────────────────────────────────────────────
# INTENT PROMPT
# ─────────────────────────────────────────────────────────────────────────────
def build_intent_prompt(general_prompt: str,
                        conversation: List[Dict[str, str]],
                        user_input: str,
                        intents: List[Dict]) -> str:
    # === INTENT INDEX ===
    lines = ["### INTENT INDEX ###"]
    for it in intents:
        det = it.get("detection_prompt", "").strip()
        det_part = f"  β€’ detection_prompt β†’ β€œ{det}”" if det else ""
        exs = " | ".join(it.get("examples", []))
        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: Dict,
                           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