Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from openai import OpenAI | |
| import os | |
| from datetime import datetime | |
| import uuid | |
| api_key = os.environ.get("KEY_SECRET") | |
| if not api_key: | |
| raise ValueError("Variable d'environnement KEY_SECRET introuvable.") | |
| client = OpenAI( | |
| api_key=api_key, | |
| base_url="https://api.together.xyz/v1", | |
| ) | |
| conversation_history = {} | |
| current_conversation_id = None | |
| def generate_conversation_title(message): | |
| return message[:50] + "..." if len(message) > 50 else message | |
| def create_new_conversation(): | |
| global current_conversation_id | |
| current_conversation_id = str(uuid.uuid4()) | |
| timestamp = datetime.now().strftime("%Y-%m-%d %H:%M") | |
| conversation_history[current_conversation_id] = { | |
| "title": "Nouvelle conversation", | |
| "timestamp": timestamp, | |
| "messages": [], | |
| "system_prompt": "Tu es un assistant IA utile, honnête et inoffensif." | |
| } | |
| return current_conversation_id | |
| # --- AJOUT DU PARAMÈTRE TEMPERATURE ICI --- | |
| def chat(message, history, system_prompt, temperature): | |
| api_messages = [{"role": "system", "content": system_prompt}] | |
| for entry in history: | |
| api_messages.append({"role": entry["role"], "content": entry["content"]}) | |
| api_messages.append({"role": "user", "content": message}) | |
| try: | |
| stream = client.chat.completions.create( | |
| model="meta-llama/Llama-3.3-70B-Instruct-Turbo", | |
| messages=api_messages, | |
| stream=True, | |
| temperature=temperature, # Utilise maintenant la valeur du slider | |
| max_tokens=1024 | |
| ) | |
| partial_text = "" | |
| for chunk in stream: | |
| if chunk.choices[0].delta.content: | |
| partial_text += chunk.choices[0].delta.content | |
| yield partial_text | |
| except Exception as e: | |
| yield f"❌ Erreur: {str(e)}" | |
| # --- AJOUT DU PARAMÈTRE TEMPERATURE ICI --- | |
| def respond(message, history, system_prompt, temperature): | |
| global current_conversation_id | |
| if not current_conversation_id: | |
| current_conversation_id = create_new_conversation() | |
| if not conversation_history[current_conversation_id]["messages"]: | |
| conversation_history[current_conversation_id]["title"] = generate_conversation_title(message) | |
| history.append({"role": "user", "content": message}) | |
| history.append({"role": "assistant", "content": ""}) | |
| # On passe la température à la fonction chat | |
| for partial_response in chat(message, history[:-2], system_prompt, temperature): | |
| history[-1]["content"] = partial_response | |
| yield "", history | |
| conversation_history[current_conversation_id]["messages"] = history | |
| conversation_history[current_conversation_id]["system_prompt"] = system_prompt | |
| def get_conversation_list(): | |
| if not conversation_history: | |
| return "Aucune conversation" | |
| items = [] | |
| for conv_id, conv_data in sorted( | |
| conversation_history.items(), | |
| key=lambda x: x[1]["timestamp"], | |
| reverse=True | |
| ): | |
| items.append(f"{conv_data['title']}\n{conv_data['timestamp']}") | |
| return "\n\n".join(items) | |
| def new_conversation(): | |
| create_new_conversation() | |
| return ( | |
| [], | |
| "Tu es un assistant IA utile et honnête. Réponds de manière claire et concise.", | |
| get_conversation_list() | |
| ) | |
| def delete_conv(): | |
| global current_conversation_id | |
| if current_conversation_id and current_conversation_id in conversation_history: | |
| del conversation_history[current_conversation_id] | |
| current_conversation_id = None | |
| return [], "Tu es un assistant IA utile.", get_conversation_list() | |
| with gr.Blocks(title="Chatbot Mentorat") as demo: | |
| gr.Markdown("# 🤖 Chatbot Mentorat") | |
| gr.Markdown("Votre assistant IA personnel avec historique et personnalisation") | |
| with gr.Row(): | |
| with gr.Column(scale=1, min_width=280): | |
| gr.Markdown("### Historique") | |
| history_display = gr.Textbox( | |
| label="Conversations", | |
| interactive=False, | |
| lines=15, | |
| placeholder="Aucune conversation" | |
| ) | |
| with gr.Row(): | |
| btn_new = gr.Button("Nouvelle Conversation", size="sm") | |
| btn_delete = gr.Button("Supprimer", size="sm") | |
| gr.Markdown("### Configuration") | |
| system_prompt = gr.Textbox( | |
| value="Tu es un assistant IA utile et honnête. Répondsmanière claire et concise.", | |
| label="Prompt système", | |
| lines=4 | |
| ) | |
| # --- ON ASSIGNE LE SLIDER À UNE VARIABLE --- | |
| temp_slider = gr.Slider( | |
| minimum=0.0, maximum=1.0, value=0.6, step=0.1, | |
| label="Température (créativité)", | |
| info="Plus bas = plus précis, plus haut = plus créatif" | |
| ) | |
| with gr.Column(scale=3): | |
| gr.Markdown("### Conversation") | |
| chatbot = gr.Chatbot(height=600, show_label=False, avatar_images=("👤", "🤖")) | |
| with gr.Row(): | |
| msg = gr.Textbox(label="Votre message", scale=5) | |
| btn_send = gr.Button("Envoyer", scale=1) | |
| # --- MISE À JOUR DES INPUTS POUR INCLURE LE SLIDER --- | |
| btn_new.click(new_conversation, outputs=[chatbot, system_prompt, history_display]) | |
| btn_delete.click(delete_conv, outputs=[chatbot, system_prompt, history_display]) | |
| msg.submit( | |
| respond, | |
| [msg, chatbot, system_prompt, temp_slider], # Slider ajouté ici | |
| [msg, chatbot] | |
| ).then(lambda: get_conversation_list(), outputs=[history_display]) | |
| btn_send.click( | |
| respond, | |
| [msg, chatbot, system_prompt, temp_slider], # Slider ajouté ici | |
| [msg, chatbot] | |
| ).then(lambda: get_conversation_list(), outputs=[history_display]) | |
| demo.load(lambda: get_conversation_list(), outputs=[history_display]) | |
| if __name__ == "__main__": | |
| demo.launch(share=False, theme=gr.themes.Soft()) |