File size: 1,987 Bytes
550cb8d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
Stub Haystack wrapper that routes RAG/document tasks through Brain._call_llm().
"""

from typing import Dict, Any, Tuple, Optional

def _build_messages(brain, query, context, system_prefix=""):
    """Build messages and call LLM directly, bypassing orchestrator to avoid loops."""
    history = (context or {}).get("history", [])
    user_profile = (context or {}).get("profile", {})
    user_model = (context or {}).get("user_model")

    profile_context = brain._format_profile(user_profile) if hasattr(brain, '_format_profile') else ""
    context_snippets, sources, topic = brain._assemble_context(query) if hasattr(brain, '_assemble_context') else ([], [], query)
    system_content = brain._build_system(profile_context, context_snippets, user_model) if hasattr(brain, '_build_system') else ""

    if system_prefix:
        system_content = system_prefix + "\n\n" + system_content

    messages = [{"role": "system", "content": system_content}]
    if history:
        formatted = brain._format_history(history) if hasattr(brain, '_format_history') else []
        messages.extend(formatted)
    messages.append({"role": "user", "content": str(query)})

    return messages


class HaystackWrapper:
    """Stub: routes RAG/document tasks through Brain._call_llm()."""

    def __init__(self, brain=None):
        self.brain = brain

    def run(self, query: str, context: Dict[str, Any] = None) -> Optional[str]:
        if not self.brain:
            return f"[Haystack stub] RAG query: {query[:100]}..."
        prefix = (
            "You are a document analysis expert. Answer based on the provided context. "
            "If the answer isn't in the context, say so clearly.\n\n"
        )
        messages = _build_messages(self.brain, query, context, prefix)
        try:
            response = self.brain._call_llm(messages, stream=False)
            return response.choices[0].message.content
        except Exception as e:
            return f"[Haystack error: {e}]"