OpenAI-gpt-oss / app.py
openfree's picture
Update app.py
94fe1c6 verified
raw
history blame
5.69 kB
import gradio as gr
# Custom CSS for gradient background and styling
custom_css = """
.gradio-container {
background: linear-gradient(135deg, #ffecd2 0%, #fcb69f 25%, #fbc2eb 50%, #a6c1ee 75%, #c2e9fb 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, #2a2a3e 0%, #3a3a5e 25%, #4a4a6e 50%, #5a5a7e 75%, #6a6a8e 100%);
background-size: 400% 400%;
animation: gradient-animation 15s ease infinite;
}
/* Style for content areas */
.main-container {
background-color: rgba(255, 255, 255, 0.92);
backdrop-filter: blur(10px);
border-radius: 20px;
padding: 20px;
box-shadow: 0 4px 20px 0 rgba(31, 38, 135, 0.15);
border: 1px solid rgba(255, 255, 255, 0.3);
margin: 10px;
}
.dark .main-container {
background-color: rgba(40, 40, 40, 0.95);
border: 1px solid rgba(255, 255, 255, 0.1);
}
"""
def chat_fn(message, history, model_choice):
"""Placeholder chat function"""
return f"Response from {model_choice}: {message}"
with gr.Blocks(fill_height=True, theme="soft", css=custom_css) as demo:
# State variable to track current model
current_model = gr.State("openai/gpt-oss-120b")
with gr.Row():
# Sidebar
with gr.Column(scale=1):
with gr.Group(elem_classes="main-container"):
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
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")
# Additional options
with gr.Accordion("โš™๏ธ Advanced Options", open=False):
gr.Markdown("*These options will be available after model implementation*")
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"
)
# Main chat area
with gr.Column(scale=3):
with gr.Group(elem_classes="main-container"):
gr.Markdown("## ๐Ÿ’ฌ Chat Interface")
# Display current model
model_display = gr.Markdown(f"### Model: openai/gpt-oss-120b")
# Single chat interface that works with both models
chatbot = gr.Chatbot(
height=400,
show_label=False,
elem_classes="main-container"
)
with gr.Row():
msg = gr.Textbox(
placeholder="Type your message here...",
show_label=False,
scale=9
)
submit_btn = gr.Button("Send", variant="primary", scale=1)
clear_btn = gr.Button("๐Ÿ—‘๏ธ Clear Chat", variant="secondary")
# Update model display when dropdown changes
def update_model_display(model_choice):
return f"### Model: {model_choice}", model_choice
model_dropdown.change(
fn=update_model_display,
inputs=[model_dropdown],
outputs=[model_display, current_model]
)
# Chat functionality
def respond(message, chat_history, model):
if not message:
return "", chat_history
# Add user message to history
chat_history = chat_history + [[message, None]]
# Generate bot response (placeholder - replace with actual model call)
bot_response = f"[{model.split('/')[-1]}]: This is a placeholder response. In production, this would connect to the {model} via Fireworks AI API."
# Update the last message with bot response
chat_history[-1][1] = bot_response
return "", chat_history
# Submit message on button click or enter
submit_btn.click(
fn=respond,
inputs=[msg, chatbot, current_model],
outputs=[msg, chatbot]
)
msg.submit(
fn=respond,
inputs=[msg, chatbot, current_model],
outputs=[msg, chatbot]
)
# Clear chat
clear_btn.click(
fn=lambda: (None, ""),
inputs=[],
outputs=[chatbot, msg]
)
# Show info message on login
login_button.click(
fn=lambda: gr.Info("Please authenticate with Hugging Face to access the models"),
inputs=[],
outputs=[]
)
demo.launch()