File size: 1,995 Bytes
5fc4ff1
 
 
1dd8a9e
5fc4ff1
 
 
56ff037
5fc4ff1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1dd8a9e
5fc4ff1
 
 
 
 
 
 
 
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
from collections import deque
import pandas as pd 
from config import Config

class ConversationMemory: 
    def __init__(self, max_history: int = Config.MAX_HISTORY):
        self.history = deque(maxlen=max_history)
        self.schema_cache = None

    def add_interaction(self, question: str, sql: str, result: str): 
        self.history.append({
            "question": question, 
            "sql": sql, 
            "result_summary": self._summarize_result(result)
        })

    def _summarize_result(self, result) -> str: 
        """Resumen ejecutivo para memoria de contexto"""
        if isinstance(result, pd.DataFrame):
            # Enfocado en datos CLAVE no en metadatos
            if len(result) == 1:
                return f"Único resultado: {result.iloc[0].to_dict()}"
            elif 'Cliente' in result.columns:
                top = result.nlargest(3, 'Neto') if 'Neto' in result.columns else result.head(3)
                return f"Top clientes: {top['Cliente'].tolist()}"
            else:
                return f"Filas: {len(result)}, Columnas: {list(result.columns)}"
        return str(result)

    def get_context(self, current_question: str) -> str: 
        if not self.history:
            return ""
        last_relevant = []
        for interaction in self.history:
            if "producto" in interaction['question'].lower() and "producto" in current_question.lower():
                last_relevant.append(interaction)
            elif "cliente" in interaction['question'].lower() and "cliente" in current_question.lower():
                last_relevant.append(interaction)
        
        context = ""
        for i, interaction in enumerate(last_relevant[-1:], 1):  # Solo la última relevante
            context += (
                f"Interacción #{i}: {interaction['question'][:50]}...\n"
                f"SQL: {interaction['sql'][:70]}...\n"
                f"Resultado: {interaction['result_summary']}\n\n"
            )
        return context