import gradio as gr from huggingface_hub import InferenceClient # Hugging Face model client = InferenceClient("microsoft/phi-4") # ------------------------- # Chatbot Response Function # ------------------------- def respond(message, history): style_prompt = "Answer briefly unless the user asks for more details." messages = [{"role": "system", "content": f"You are a friendly Kpop expert chatbot. {style_prompt}"}] if history: messages.extend([{"role": "user", "content": h[0]} if isinstance(h, tuple) else h for h in history]) messages.append({"role": "user", "content": message}) response = client.chat_completion(messages, max_tokens=500) return response['choices'][0]['message']['content'].strip() # ------------------------- # Information Page Content with Clickable Spotify Links # ------------------------- intro_text = """ # 🎀 Welcome to Your Ultimate Kpop Chatbot 🎢 Whether you’re new to the fandom or a longtime stan, I’m here to spill all the tea β˜•, share trivia 🧠, and drop facts πŸ“š about your favorite groups and idols! 🌟 **Why you'll love me:** - πŸ’œ Discover your perfect bias - 🎧 Find songs and artists you'll adore - πŸ“’ Learn about Kpop culture & fan life - 🌎 Explore the ever-growing Kpop universe --- ## πŸ“Š Top 10 Popular Kpop Groups (2025) 1. [BTS](https://open.spotify.com/artist/3Nrfpe0tUJi4K4DXYWgMUX) 2. [BLACKPINK](https://open.spotify.com/artist/41MozSoPIsD1dJM0CLPjZF) 3. [SEVENTEEN](https://open.spotify.com/artist/7n2Ycct7Beij7Dj7meI4X0) 4. [Stray Kids](https://open.spotify.com/artist/2dIgFjalVxs4ThymZ67YCE) 5. [TWICE](https://open.spotify.com/artist/7n2Ycct7Beij7Dj7meI4X0) 6. [NewJeans](https://open.spotify.com/artist/6HvZYsbFfjnjFrWF950C9d) 7. [ATEEZ](https://open.spotify.com/artist/68KmkJeZGfwe1OUaivBa2L) 8. [(G)I-DLE](https://open.spotify.com/artist/6OwKE9Ez6ALxpTaKcT5ayv) 9. [ENHYPEN](https://open.spotify.com/artist/5t5FqBwTcgKTaWmfEbwQY9) 10. [IVE](https://open.spotify.com/artist/6RHTUrRF63xao58xh9FXYJ) --- ## πŸ’‘ How to Use the Chatbot 1. Click on one of the preset questions below in the **Chat** tab or type your own question. 2. If you want **song recommendations**, just ask! 3. I’ll give **short answers** unless you ask for more detail. 4. You can explore idols, history, and Kpop trends anytime. """ # ------------------------- # Preset Questions # ------------------------- preset_questions = [ "What is Kpop?", "How to find your bias?", "Who are the most popular Kpop groups?", "How can I start listening to Kpop?", "What are Kpop fan chants?", "Can you recommend me some Kpop songs?", "What is a Kpop comeback?" ] # ------------------------- # Theme # ------------------------- chat_theme = gr.themes.Soft( primary_hue="pink", secondary_hue="rose", neutral_hue="gray", spacing_size="lg", radius_size="lg" ).set( input_background_fill="*neutral_50", input_border_color_focus="*primary_300", button_primary_background_fill="*primary_500", button_primary_background_fill_hover="*primary_400" ) # ------------------------- # Gradio Interface # ------------------------- with gr.Blocks(theme=chat_theme) as demo: with gr.Tab("ℹ️ Information"): gr.Markdown(intro_text) with gr.Tab("πŸ’¬ Chat"): chatbot_ui = gr.Chatbot() user_input = gr.Textbox(placeholder="Type your message here...") send_btn = gr.Button("Send") # Row of preset question buttons with gr.Row(): for q in preset_questions: gr.Button(q).click( lambda x=q, h=[]: (x, respond(x, h)), inputs=[], outputs=[user_input, chatbot_ui] ) send_btn.click(fn=respond, inputs=[user_input, chatbot_ui], outputs=chatbot_ui) user_input.submit(fn=respond, inputs=[user_input, chatbot_ui], outputs=chatbot_ui) demo.launch()