import gradio as gr from huggingface_hub import InferenceClient # Define available models (update with your actual model IDs) model_list = { "Safe LM": "HuggingFaceH4/zephyr-7b-beta", # Replace with your Safe LM model ID "Baseline 1": "HuggingFaceH4/zephyr-7b-beta", "Another Model": "HuggingFaceH4/zephyr-7b-beta" } def respond(message, history, system_message, max_tokens, temperature, top_p, selected_model): try: # Create an InferenceClient for the selected model client = InferenceClient(model_list.get(selected_model, "HuggingFaceH4/zephyr-7b-beta")) # Build conversation messages for the client messages = [{"role": "system", "content": system_message}] for user_msg, assistant_msg in history: if user_msg: # Only add non-empty messages messages.append({"role": "user", "content": user_msg}) if assistant_msg: # Only add non-empty messages messages.append({"role": "assistant", "content": assistant_msg}) messages.append({"role": "user", "content": message}) response = "" # Stream the response from the client for token_message in client.chat_completion( messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p, ): # Safe extraction of token with error handling try: token = token_message.choices[0].delta.content if token is not None: # Handle potential None values response += token yield response except (AttributeError, IndexError) as e: # Handle cases where token structure might be different print(f"Error extracting token: {e}") continue except Exception as e: # Return error message if the model call fails print(f"Error calling model API: {e}") yield f"Sorry, there was an error: {str(e)}" # Custom CSS for branding with consistent styling and hiding footer css = """ body { background-color: #f0f5fb !important; /* Light pastel blue background */ } /* Gold button styling */ .gold-button { background: white !important; color: #333 !important; border: 2px solid #e6c200 !important; } .gold-button:hover { background: #fff9e6 !important; box-shadow: 0 2px 5px rgba(230, 194, 0, 0.2) !important; } /* Message styling - no backgrounds */ .message { background-color: transparent !important; } .message p { background-color: transparent !important; } .message-wrap { background-color: transparent !important; } /* Emoji for messages */ .user .message::before { content: "👤 "; font-size: 16px; margin-right: 5px; } .bot .message::before { content: "🛡️ "; font-size: 16px; margin-right: 5px; } /* Hide footer */ footer { display: none !important; } """ with gr.Blocks(theme=gr.themes.Default( primary_hue="blue", secondary_hue="yellow", # Using yellow instead of gold which isn't available font=["Crimson Pro", "Palatino", "serif"] ), css=css) as demo: # Custom header with branding - removed the hr element gr.HTML("""
Responsible AI for everyone