Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import os | |
| import anthropic | |
| # Initialisation de l'API de Anthropic avec la clé API | |
| api_key = os.getenv("ANTHROPIC_API_KEY", "my_api_key") | |
| client = anthropic.Anthropic(api_key=api_key) | |
| st.title("💬 Chatbot avec Claude 3") | |
| # Initialisation de l'état de la session pour stocker les messages s'il n'existe pas déjà | |
| if "messages" not in st.session_state: | |
| st.session_state["messages"] = [] | |
| # Affichage de tous les messages précédents | |
| for msg in st.session_state.messages: | |
| # Utiliser st.container pour mieux organiser l'affichage des messages | |
| with st.container(): | |
| if msg["role"] == "user": | |
| st.text(f"User: {msg['content']}") | |
| else: | |
| st.text(f"Assistant: {msg['content']}") | |
| # Entrée pour les nouvelles questions avec un container en bas | |
| with st.container(): | |
| prompt = st.text_input("Posez votre question :", key="chat") | |
| if prompt: | |
| if not api_key: | |
| st.error("Clé API de Anthropic non trouvée. Veuillez définir la variable d'environnement ANTHROPIC_API_KEY.") | |
| st.stop() | |
| # Ajouter le nouveau message utilisateur à l'état de la session | |
| st.session_state.messages.append({"role": "user", "content": prompt}) | |
| # Utiliser un indicateur pour montrer que le modèle génère une réponse | |
| with st.spinner('Thinking...'): | |
| response = client.messages.create( | |
| model="claude-3-opus-20240229", | |
| max_tokens=1024, | |
| messages=[{"role": msg["role"], "content": msg["content"]} for msg in st.session_state.messages] | |
| ) | |
| # Récupérer et traiter le contenu de la réponse | |
| if isinstance(response.content, list): | |
| msg = " ".join(block.text for block in response.content) | |
| elif isinstance(response.content, dict) and 'text' in response.content: | |
| msg = response.content['text'] | |
| else: | |
| msg = str(response.content) | |
| # Ajouter et afficher la réponse de l'assistant | |
| st.session_state.messages.append({"role": "assistant", "content": msg}) | |
| st.text(f"Assistant: {msg}") |