import gradio as gr import requests MODAL_ENDPOINT = "https://kim-ju-won--gemma2b-chat-chat.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]}) enhanced_message = f"Genre: {genre}\nMood: {mood}\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() return result.get("response", "Sorry, I couldn't process your request.") except Exception as e: return f"Error: {str(e)}" 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. """ # 🎨 CSS: 쀑앙 μ •λ ¬ + κ·ΈλΌλ°μ΄μ…˜ 효과 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: # 이미지 URL둜 λŒ€μ²΄! gr.HTML("""

🎬 Personalized Movie Recommender


Tell us your preferred genres and current mood, and we'll recommend the perfect movies for you.

""") with gr.Row(): with gr.Column(scale=2): chatbot = gr.Chatbot( height=600, show_copy_button=True, avatar_images=("πŸ‘€", "🎬"), 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="\nExplanation Level πŸ“ˆ\n", 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()