File size: 4,918 Bytes
6956f39
2052b19
e8e29d6
29ccd8c
2052b19
69c12a2
6956f39
2052b19
 
 
 
 
 
 
 
 
 
 
 
69c12a2
6956f39
2052b19
 
6956f39
2052b19
 
69c12a2
2052b19
 
69c12a2
 
6956f39
 
 
 
69c12a2
2052b19
 
 
 
 
 
 
 
 
 
6956f39
2052b19
 
 
 
 
 
 
69c12a2
 
 
 
 
 
 
 
2052b19
 
6956f39
2052b19
69c12a2
 
 
2052b19
69c12a2
6956f39
69c12a2
 
 
 
6956f39
69c12a2
6956f39
69c12a2
 
 
6956f39
69c12a2
6956f39
2052b19
6956f39
 
2052b19
69c12a2
6956f39
2052b19
 
 
 
 
 
69c12a2
6956f39
 
 
 
 
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
94
95
96
97
98
99
100
101
102
103
# app/modules/processing/prompt_builder.py
from typing import Any, List, Dict
from runtime.session_store import get_session_controller

def build_planning_prompt(message: str, rag_context: str = "") -> List[Dict[str, str]]:

    system_content = (
        "You are an elite query planner for a search-augmented LLM. Your task is to determine "
        "if an external web search is absolutely mandatory to answer the user's question.\n\n"
        "TRIAE STRATEGY (Priority):\n"
        "1. INTERNAL KNOWLEDGE: If the question is about historical facts, static scientific truths, "
        "unchanging concepts, or general logic that you already know perfectly, rely entirely on your own knowledge.\n"
        "2. LOCAL RAG CONTEXT: Use the provided RAG context (Wikipedia) to complement or verify your knowledge.\n"
        "3. WEB SEARCH: Generate web search queries ONLY if the question requires real-time information (after 2025/2026), "
        "highly localized niche data not found in Wikipedia, or breaking updates.\n\n"
        "CRITICAL PERFORMANCE REQUIREMENT:\n"
        "- Keep your internal thinking (<think>...</think>) extremely short (under 3 lines). Do not ramble.\n"
        "- If internal knowledge or local RAG is sufficient, immediately output exactly 0 queries.\n"
        "- Output ONLY the raw queries, one per line, no numbers, no bullet points, no markdown markup outside thinking tags."
    )
    
    rag_section = rag_context.strip() if rag_context else "None (No relevant local database records found)."

    user_content = (
        f"User Question: {message}\n\n"
        f"Available Local RAG Context (Wikipedia snippets):\n{rag_section}\n\n"
        "Task:\n"
        "- Output 1 to 3 highly concise search queries ONLY if external web search is required.\n"
        "- Output exactly '0' if no external search is needed."
    )

    return [
        {"role": "system", "content": system_content},
        {"role": "user", "content": user_content}
    ]


def build_generation_prompt(
    message: str, 
    docs: list, 
    history: Any = None, 
    hf_user: str = None, 
    session_id: str = None, 
    top_k: int = 5
) -> List[Dict[str, str]]:
    
    system_content = (
        "You are an advanced, direct response assistant. Your objective is to synthesize your internal "
        "expertise with the provided context to answer the user comprehensively and clearly in Markdown format.\n\n"
        "CRITICAL INSTRUCTIONS FOR SPEED & TIMEOUT PREVENTION:\n"
        "- ABSOLUTELY NO INTERNAL REASONING OR THINKING PROCESS ALLOWED. Do not output <think> tags or chains of thought.\n"
        "- Start generating the final answer directly from the first token.\n"
        "- Prioritize your comprehensive internal knowledge for historical or logical accuracy, and use the provided context to add specific references or URLs.\n"
        "- Cite sources accurately using the exact (Title)[URL] format when referencing the provided context elements."
    )

    sorted_docs = sorted(docs or [], key=lambda d: d.get("score", 0), reverse=True)
    top_docs = sorted_docs[:top_k]

    context_entries = []
    for d in top_docs:
        entry = (
            f"Query Source: {d.get('query', 'N/A')}\n"
            f"Title: {d.get('title', 'Untitled')}\n"
            f"URL: {d.get('url', '')}\n"
            f"Content: {d.get('snippet') or d.get('summary') or d.get('content') or ''}\n"
        )
        context_entries.append(entry.strip())

    context_str = "\n---\n".join(context_entries) if context_entries else "No external or local context provided. Rely entirely on your internal parameters."

    history_str = ""
    if history:
        if history == "history_ctr":
            history_controller = get_session_controller(hf_user, session_id)
            try:
                history_str = history_controller.build_prompt_history(message, max_tokens=1024, top_k=10)
            except Exception:
                pass
        else:
            try:
                last_items = history[-4:] if isinstance(history, list) else [str(history)]
                history_str = "\n".join(f"{r}: {c}" for r, c in last_items)
            except Exception:
                pass
                
    user_content = ""
    if history_str:
        user_content += f"Relevant Context from Past Conversation turns:\n{history_str}\n\n"

    user_content += (
        f"Retrieved Reference Context (Local RAG & Web Search):\n{context_str}\n\n"
        f"Instructions:\n"
        f"- Answer the user message using your internal knowledge and the reference context above.\n"
        f"- Respond in the same language as the user's message.\n"
        f"- Do not mention that you were forbidden to think. Just start the answer.\n\n"
        f"User Message: {message}"
    )

    return [
        {"role": "system", "content": system_content},
        {"role": "user", "content": user_content}
    ]