| |
| 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: |
| 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) |
| |
| |
| words = response.split() |
| |
| |
| for word in words: |
| yield word + " " |
| except Exception as e: |
| yield f"Error: {str(e)}" |