French-Tutor / app.py
CCockrum's picture
Update app.py
a875c04 verified
raw
history blame
3.77 kB
import gradio as gr
from huggingface_hub import InferenceClient
# Custom background CSS with semi-transparent panel
css = """
body {
background-image: url('https://cdn-uploads.huggingface.co/production/uploads/67351c643fe51cb1aa28f2e5/vcVnxPZhCXRVL2fn3rG6B.jpeg');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}
.gradio-container {
display: flex;
flex-direction: column;
justify-content: center;
min-height: 100vh;
padding-top: 2rem;
padding-bottom: 2rem;
}
#chat-panel {
background-color: rgba(255, 255, 255, 0.85);
padding: 2rem;
border-radius: 12px;
justify-content: center;
width: 100%;
max-width: 700px;
height: 70vh;
box-shadow: 0 0 12px rgba(0, 0, 0, 0.3);
overflow-y: auto;
}
/* Improved title styling */
.gradio-container .chatbot h1 {
color: var(--custom-title-color) !important;
font-family: 'Noto Sans', serif !important;
font-size: 5rem !important; /* Increased font size */
font-weight: bold !important;
text-align: center !important;
margin-bottom: 1.5rem !important;
width: 100%; /* Ensure full width for centering */
}
"""
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
def respond(
message,
history,
system_message,
max_tokens,
temperature,
top_p,
):
messages = [{"role": "system", "content": system_message}]
# Handle history based on its format (tuple format or messages format)
if history and isinstance(history[0], tuple):
# Old tuple format
for user_msg, assistant_msg in history:
if user_msg:
messages.append({"role": "user", "content": user_msg})
if assistant_msg:
messages.append({"role": "assistant", "content": assistant_msg})
else:
# New messages format
messages.extend(history)
messages.append({"role": "user", "content": message})
response = ""
for msg in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
token = msg.choices[0].delta.content
response += token
yield response
with gr.Blocks(css=css) as demo:
# Title Markdown block
gr.Markdown("French Instructor", elem_id="custom-title")
with gr.Column(elem_id="chat-panel"):
with gr.Accordion("Advanced Settings", open=False):
system_message = gr.Textbox(
value="You are a helpful French language tutor. You help users learn French vocabulary, grammar, and cultural contexts. When appropriate, include both the French writing and pronunciation. For beginners, focus on simple phrases and gradually increase difficulty based on user proficiency.",
label="System Message"
)
max_tokens = gr.Slider(
minimum=1,
maximum=2048,
value=512,
step=1,
label="Response Length"
)
temperature = gr.Slider(
minimum=0.1,
maximum=4.0,
value=0.7,
step=0.1,
label="Creativity"
)
top_p = gr.Slider(
minimum=0.1,
maximum=1.0,
value=0.95,
step=0.05,
label="Dynamic Text"
)
gr.ChatInterface(
respond,
additional_inputs=[
system_message,
max_tokens,
temperature,
top_p
],
type="messages" # Set to new message format
)
if __name__ == "__main__":
demo.launch()