import os import anthropic import streamlit as st class ClaudeAPIChat: def __init__(self): 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 generate_response(self, prompt, lang_code): self.conversation_history.append(f"Human: {prompt}") full_message = "\n".join(self.conversation_history) try: 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:"] ) claude_response = response.completion.strip() self.conversation_history.append(f"Assistant: {claude_response}") if len(self.conversation_history) > 10: self.conversation_history = self.conversation_history[-10:] return claude_response except anthropic.APIError as e: st.error(f"Error al llamar a la API de Claude: {str(e)}") return "Lo siento, hubo un error al procesar tu solicitud." def initialize_chatbot(): return ClaudeAPIChat() def get_chatbot_response(chatbot, prompt, lang_code): if 'api_calls' not in st.session_state: st.session_state.api_calls = 0 if st.session_state.api_calls >= 50: # Límite de 50 llamadas por sesión yield "Lo siento, has alcanzado el límite de consultas para esta sesión." return try: st.session_state.api_calls += 1 response = chatbot.generate_response(prompt, lang_code) # Dividir la respuesta en palabras words = response.split() # Devolver las palabras una por una for word in words: yield word + " " except Exception as e: yield f"Error: {str(e)}"