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 = [] |