Spaces:
Running
on
Zero
Running
on
Zero
import gradio as gr | |
# Custom CSS for gradient background and styling | |
custom_css = """ | |
.gradio-container { | |
background: linear-gradient(135deg, #667eea 0%, #764ba2 25%, #f093fb 50%, #4facfe 75%, #00f2fe 100%); | |
background-size: 400% 400%; | |
animation: gradient-animation 15s ease infinite; | |
min-height: 100vh; | |
} | |
@keyframes gradient-animation { | |
0% { background-position: 0% 50%; } | |
50% { background-position: 100% 50%; } | |
100% { background-position: 0% 50%; } | |
} | |
.dark .gradio-container { | |
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 25%, #0f3460 50%, #533483 75%, #e94560 100%); | |
background-size: 400% 400%; | |
animation: gradient-animation 15s ease infinite; | |
} | |
/* Style for the main content area */ | |
.main-container { | |
background-color: rgba(255, 255, 255, 0.95); | |
backdrop-filter: blur(10px); | |
border-radius: 20px; | |
padding: 20px; | |
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37); | |
border: 1px solid rgba(255, 255, 255, 0.18); | |
} | |
.dark .main-container { | |
background-color: rgba(30, 30, 30, 0.95); | |
border: 1px solid rgba(255, 255, 255, 0.1); | |
} | |
/* Sidebar styling */ | |
.sidebar { | |
background-color: rgba(255, 255, 255, 0.9); | |
backdrop-filter: blur(10px); | |
border-radius: 15px; | |
padding: 20px; | |
margin: 10px; | |
} | |
.dark .sidebar { | |
background-color: rgba(40, 40, 40, 0.9); | |
} | |
/* Chat interface styling */ | |
.chat-container { | |
height: 600px; | |
} | |
""" | |
def create_chat_interface(model_name): | |
"""Create a chat interface for the selected model""" | |
# This creates the actual chat interface | |
return gr.load( | |
f"models/{model_name}", | |
provider="fireworks-ai" | |
) | |
with gr.Blocks(fill_height=True, theme="Nymbo/Nymbo_Theme", css=custom_css) as demo: | |
# State to track login status | |
is_logged_in = gr.State(False) | |
with gr.Row(): | |
with gr.Column(scale=1): | |
with gr.Group(elem_classes="sidebar"): | |
gr.Markdown("# π Inference Provider") | |
gr.Markdown( | |
"This Space showcases OpenAI GPT-OSS models, served by the Cerebras API. " | |
"Sign in with your Hugging Face account to use this API." | |
) | |
# Model selection dropdown | |
model_dropdown = gr.Dropdown( | |
choices=[ | |
"openai/gpt-oss-120b", | |
"openai/gpt-oss-20b" | |
], | |
value="openai/gpt-oss-120b", | |
label="Select Model", | |
info="Choose between different model sizes" | |
) | |
# Login button | |
login_button = gr.LoginButton("Sign in with Hugging Face", size="lg") | |
# Status display | |
status_text = gr.Markdown("β Not logged in", visible=True) | |
# Additional options | |
with gr.Accordion("βοΈ Advanced Options", open=False): | |
temperature = gr.Slider( | |
minimum=0, | |
maximum=2, | |
value=0.7, | |
step=0.1, | |
label="Temperature" | |
) | |
max_tokens = gr.Slider( | |
minimum=1, | |
maximum=4096, | |
value=512, | |
step=1, | |
label="Max Tokens" | |
) | |
# Load model button | |
load_button = gr.Button("π Load Selected Model", variant="primary", size="lg") | |
with gr.Column(scale=3): | |
with gr.Group(elem_classes="main-container"): | |
gr.Markdown("## π¬ Chat Interface") | |
# Chat interface placeholder | |
chat_interface = gr.ChatInterface( | |
fn=lambda message, history: "Please sign in and load a model to start chatting.", | |
examples=["Hello! How are you?", "What can you help me with?", "Tell me a joke"], | |
retry_btn=None, | |
undo_btn="Delete Previous", | |
clear_btn="Clear", | |
elem_classes="chat-container" | |
) | |
# Handle login status | |
def update_login_status(profile): | |
if profile: | |
return gr.update(value="β Logged in", visible=True), True | |
return gr.update(value="β Not logged in", visible=True), False | |
# Load the selected model | |
def load_selected_model(model_name, logged_in): | |
if not logged_in: | |
gr.Warning("Please sign in first to use the models!") | |
return | |
gr.Info(f"Loading {model_name}... This may take a moment.") | |
# Here you would implement the actual model loading | |
# For now, we'll update the chat interface | |
try: | |
# Load the model-specific interface | |
loaded_interface = gr.load( | |
f"models/{model_name}", | |
accept_token=True, | |
provider="fireworks-ai" | |
) | |
gr.Success(f"Successfully loaded {model_name}!") | |
return loaded_interface | |
except Exception as e: | |
gr.Error(f"Failed to load model: {str(e)}") | |
return None | |
# Connect the login button to status update | |
login_button.click( | |
fn=update_login_status, | |
inputs=[login_button], | |
outputs=[status_text, is_logged_in] | |
) | |
# Connect the load button | |
load_button.click( | |
fn=load_selected_model, | |
inputs=[model_dropdown, is_logged_in], | |
outputs=[] | |
) | |
# Alternative approach: Direct loading with model selection | |
# Uncomment this if you want to use the original approach with modifications | |
""" | |
with gr.Blocks(fill_height=True, theme="Nymbo/Nymbo_Theme", css=custom_css) as demo: | |
with gr.Row(): | |
with gr.Column(scale=1): | |
with gr.Group(elem_classes="sidebar"): | |
gr.Markdown("# π Inference Provider") | |
gr.Markdown("This Space showcases OpenAI GPT-OSS models. Sign in to use.") | |
model_choice = gr.Radio( | |
choices=["openai/gpt-oss-120b", "openai/gpt-oss-20b"], | |
value="openai/gpt-oss-120b", | |
label="Select Model" | |
) | |
button = gr.LoginButton("Sign in") | |
with gr.Column(scale=3): | |
with gr.Group(elem_classes="main-container"): | |
# Default to 120b model | |
gr.load("models/openai/gpt-oss-120b", accept_token=button, provider="fireworks-ai") | |
""" | |
demo.launch() |