File size: 2,250 Bytes
9bbbea3
390251e
9bbbea3
bef9637
 
 
 
 
27ec158
bef9637
 
de81808
390251e
 
9bbbea3
390251e
bef9637
de81808
075d270
 
 
 
 
27ec158
075d270
 
164bc89
075d270
b0d7f21
075d270
 
 
 
 
 
27ec158
de81808
075d270
 
 
 
 
 
 
 
 
 
 
390251e
 
de81808
6f432c7
de81808
390251e
de81808
6f432c7
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
# 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,
                max_tokens=8000,  # A帽adimos este par谩metro requerido
                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 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 = []