File size: 3,787 Bytes
9bbbea3
390251e
9bbbea3
bef9637
 
 
 
 
27ec158
 
bef9637
 
390251e
 
 
 
 
9bbbea3
390251e
 
bef9637
27ec158
 
075d270
 
 
 
 
27ec158
075d270
 
 
 
 
 
 
 
 
 
27ec158
075d270
 
 
 
 
 
 
 
 
 
 
 
27ec158
 
 
 
 
 
 
 
bef9637
27ec158
 
bef9637
 
9bbbea3
bef9637
 
 
 
9bbbea3
 
 
 
 
 
 
bef9637
9bbbea3
bef9637
 
9bbbea3
 
 
 
 
 
 
 
 
 
 
 
bef9637
 
 
390251e
27ec158
390251e
27ec158
390251e
 
 
 
 
075d270
390251e
 
 
 
 
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
104
105
106
107
108
109
110
111
# modules/chatbot/chat_process.py
import os
import anthropic
import logging
from typing import Dict, Generator

logger = logging.getLogger(__name__)


####################################################
class ChatProcessor:
    def __init__(self):
        """
        Inicializa el procesador de chat con la API de Claude
        """
        api_key = os.environ.get("ANTHROPIC_API_KEY")
        if not api_key:
            raise ValueError("No se encontr贸 la clave API de Anthropic. Aseg煤rate de configurarla en las variables de entorno.")
            
        self.client = anthropic.Anthropic(api_key=api_key)
        self.conversation_history = []
        
####################################################
    def process_chat_input(self, message: str, lang_code: str) -> Generator[str, None, None]:
        """Procesa el mensaje y genera una respuesta"""
        try:
            # Agregar mensaje a la historia
            self.conversation_history.append({"role": "user", "content": message})
            
            # Generar respuesta usando la API de Claude
            response = self.client.messages.create(
                model="claude-3.5-sonnet-20241022",
                messages=self.conversation_history,
                temperature=0.7,
            )
            
            # Procesar la respuesta
            claude_response = response.content[0].text
            self.conversation_history.append({"role": "assistant", "content": claude_response})
            
            # Mantener un historial limitado 
            if len(self.conversation_history) > 10:
                self.conversation_history = self.conversation_history[-10:]
                
            # Dividir la respuesta en palabras para streaming
            words = claude_response.split()
            for word in words:
                yield word + " "
                
        except Exception as e:
            logger.error(f"Error en process_chat_input: {str(e)}")
            yield f"Error: {str(e)}"









################################################################
'''    
    def process_chat_input(self, message: str, lang_code: str) -> Generator[str, None, None]:
        """
        Procesa el mensaje y genera una respuesta
        """
        try:
            # Agregar mensaje a la historia
            self.conversation_history.append(f"Human: {message}")
            full_message = "\n".join(self.conversation_history)

            # Generar respuesta usando la API de Claude
            response = self.client.completions.create(
                model="claude-2",
                prompt=f"{full_message}\n\nAssistant:",
                max_tokens_to_sample=300,
                temperature=0.7,
                stop_sequences=["Human:"]
            )

            # Procesar la respuesta
            claude_response = response.completion.strip()
            self.conversation_history.append(f"Assistant: {claude_response}")

            # Mantener un historial limitado
            if len(self.conversation_history) > 10:
                self.conversation_history = self.conversation_history[-10:]

            # Dividir la respuesta en palabras para streaming
            words = claude_response.split()
            for word in words:
                yield word + " "

        except Exception as e:
            logger.error(f"Error en process_chat_input: {str(e)}")
            yield f"Error: {str(e)}"
'''

##########################################    
    def get_conversation_history(self) -> list:
        """
        Retorna el historial de la conversaci贸n
        """
        return self.conversation_history
    
    def clear_history(self):
        """
        Limpia el historial de la conversaci贸n
        """
        self.conversation_history = []