Kim Juwon
fix ui
341288e
import gradio as gr
import requests
MODAL_ENDPOINT = "https://kim-ju-won--mistral7b-chat-create-app.modal.run"
def create_system_prompt(agent_type, personality, expertise_level, language):
base_prompt = f"""You are a {agent_type} movie recommendation agent with the following characteristics:
- Personality: {personality}
- Expertise Level: {expertise_level}
- Language: {language}
Your role is to:
1. Understand user preferences and mood
2. Provide personalized movie recommendations
3. Explain why you're recommending specific movies
4. Maintain a {personality} tone throughout the conversation
5. Consider the user's expertise level ({expertise_level}) when explaining
Please respond in {language}."""
return base_prompt
def respond(message, history, agent_type, personality, expertise_level, language, genre, mood):
system_message = create_system_prompt(agent_type, personality, expertise_level, language)
messages = [{"role": "system", "content": system_message}]
for val in history:
if val[0]:
messages.append({"role": "user", "content": val[0]})
if val[1]:
messages.append({"role": "assistant", "content": val[1]})
genre_str = ", ".join(genre) if genre else "Any"
mood_str = ", ".join(mood) if mood else "Any"
enhanced_message = f"Genre: {genre_str}\nMood: {mood_str}\nUser request: {message}"
messages.append({"role": "user", "content": enhanced_message})
payload = {
"messages": messages,
"max_tokens": 512,
"temperature": 0.7,
"top_p": 0.95
}
try:
response = requests.post(
MODAL_ENDPOINT,
json=payload,
headers={"Content-Type": "application/json"}
)
response.raise_for_status()
result = response.json()
bot_reply = result.get("response", "Sorry, I couldn't process your request.")
except Exception as e:
bot_reply = f"Error: {str(e)}"
history.append((message, bot_reply))
return history
def reset_chat():
return None
def show_settings_changed_info(agent_type, personality, expertise_level, language):
return f"""
New Agent Settings:
- Type: {agent_type}
- Personality: {personality}
- Expertise Level: {expertise_level}
- Response Language: {language}
Chat has been reset. Please start a new conversation with the updated settings.
"""
custom_css = """
.header-container {
text-align: center;
margin-bottom: 20px;
}
.header-container img {
width: 80px;
margin-bottom: 10px;
display: block;
margin-left: auto;
margin-right: auto;
}
.header-container h1 {
display: inline-block;
background: linear-gradient(90deg, #ff8a00, #e52e71, #9b00ff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-weight: 900;
margin: 0;
}
.header-container p {
margin: 5px auto 0 auto;
color: var(--body-text-color, #666);
font-size: 1rem;
}
"""
with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo:
gr.HTML("""
<div class="header-container">
<h1>🎬 Personalized Movie Recommender</h1>
<p><br/>Tell us your preferred genres and current mood, and we'll recommend the perfect movies for you.<br/></p>
</div>
""")
with gr.Row():
with gr.Column(scale=2):
chatbot = gr.Chatbot(
height=600,
show_copy_button=True,
avatar_images=(
"https://cdn-icons-png.flaticon.com/512/149/149071.png", # User Avatar
"https://cdn-icons-png.flaticon.com/512/3135/3135715.png" # Bot Avatar
),
bubble_full_width=False
)
with gr.Row(equal_height=True):
msg = gr.Textbox(
placeholder="What kind of movie are you looking for?",
show_label=False,
container=False,
min_width=400
)
submit = gr.Button("Send Chat", variant="primary", min_width=100)
clear = gr.Button("Clear Chat", variant="secondary", min_width=100)
with gr.Column(scale=1):
with gr.Group():
gr.Markdown("### 🎯 Recommendation Settings")
genre = gr.Dropdown(
choices=[
"🎬 Action", "πŸ˜‚ Comedy", "🎭 Drama", "πŸ’• Romance",
"πŸ”ͺ Thriller", "πŸ‘½ Sci-Fi", "🧚 Fantasy", "🎨 Animation"
],
label="Preferred Genres πŸŽ₯",
multiselect=True
)
mood = gr.Dropdown(
choices=[
"⚑ Exciting", "😭 Emotional", "😱 Suspenseful",
"😌 Relaxing", "πŸ•΅οΈ Mysterious"
],
label="Current Mood 🌈",
multiselect=True
)
with gr.Group():
gr.Markdown("### πŸ€– Agent Settings")
agent_type = gr.Dropdown(
choices=["πŸŽ“ Expert", "πŸ‘― Friend", "πŸŽ₯ Film Critic", "🎨 Curator"],
label="Agent Type πŸ§‘β€πŸ’Ό",
value="πŸŽ“ Expert"
)
personality = gr.Dropdown(
choices=[
"😊 Friendly", "πŸ’Ό Professional", "πŸ˜† Humorous",
"πŸ₯Ί Emotional", "πŸ” Objective"
],
label="Personality πŸ’«",
value="😊 Friendly"
)
expertise_level = gr.Dropdown(
choices=["🍼 Beginner", "πŸ“š Intermediate", "πŸ† Expert"],
label="Explanation Level πŸ“ˆ",
value="πŸ“š Intermediate"
)
language = gr.Dropdown(
choices=["πŸ‡¬πŸ‡§ English", "πŸ‡°πŸ‡· Korean", "πŸ‡―πŸ‡΅ Japanese"],
label="Response Language 🌐",
value="πŸ‡¬πŸ‡§ English"
)
for component in [agent_type, personality, expertise_level, language]:
component.change(
fn=show_settings_changed_info,
inputs=[agent_type, personality, expertise_level, language],
outputs=gr.Info()
).then(
fn=reset_chat,
outputs=chatbot
)
submit.click(
respond,
inputs=[
msg,
chatbot,
agent_type,
personality,
expertise_level,
language,
genre,
mood,
],
outputs=chatbot,
).then(
lambda: "",
None,
msg,
queue=False
)
clear.click(lambda: None, None, chatbot, queue=False)
if __name__ == "__main__":
demo.launch()