File size: 4,607 Bytes
8f8879a
1
{"cells": [{"cell_type": "markdown", "id": "302934307671667531413257853548643485645", "metadata": {}, "source": ["# Gradio Demo: chatbot_core_components_simple"]}, {"cell_type": "code", "execution_count": null, "id": "272996653310673477252411125948039410165", "metadata": {}, "outputs": [], "source": ["!pip install -q gradio "]}, {"cell_type": "code", "execution_count": null, "id": "288918539441861185822528903084949547379", "metadata": {}, "outputs": [], "source": ["import gradio as gr\n", "import random\n", "\n", "# Chatbot demo with multimodal input (text, markdown, LaTeX, code blocks, image, audio, & video). Plus shows support for streaming text.\n", "\n", "color_map = {\n", "    \"harmful\": \"crimson\",\n", "    \"neutral\": \"gray\",\n", "    \"beneficial\": \"green\",\n", "}\n", "\n", "def html_src(harm_level):\n", "    return f\"\"\"\n", "<div style=\"display: flex; gap: 5px;padding: 2px 4px;margin-top: -40px\">\n", "  <div style=\"background-color: {color_map[harm_level]}; padding: 2px; border-radius: 5px;\">\n", "  {harm_level}\n", "  </div>\n", "</div>\n", "\"\"\"\n", "\n", "def print_like_dislike(x: gr.LikeData):\n", "    print(x.index, x.value, x.liked)\n", "\n", "def add_message(history, message):\n", "    for x in message[\"files\"]:\n", "        history.append({\"role\": \"user\", \"content\": {\"path\": x}})\n", "    if message[\"text\"] is not None:\n", "        history.append({\"role\": \"user\", \"content\": message['text']})\n", "    return history, gr.MultimodalTextbox(value=None, interactive=False)\n", "\n", "def bot(history, response_type):\n", "    if response_type == \"gallery\":\n", "        msg = {\"role\": \"assistant\",\n", "               \"content\": gr.Gallery(\n", "            [\n", "                \"https://github.com/gradio-app/gradio/raw/main/gradio/media_assets/images/bus.png\",\n", "                \"https://github.com/gradio-app/gradio/raw/main/gradio/media_assets/images/bus.png\",\n", "            ])\n", "        }\n", "    elif response_type == \"image\":\n", "        msg = {\"role\": \"assistant\",\n", "               \"content\": gr.Image(\n", "                   \"https://github.com/gradio-app/gradio/raw/main/gradio/media_assets/images/bus.png\"\n", "               )\n", "        }\n", "    elif response_type == \"video\":\n", "        msg = {\"role\": \"assistant\",\n", "               \"content\": gr.Video(\"https://github.com/gradio-app/gradio/raw/main/gradio/media_assets/videos/world.mp4\",\n", "                                   label=\"test\")\n", "        }\n", "    elif response_type == \"audio\":\n", "        msg = {\"role\": \"assistant\",\n", "               \"content\": gr.Audio(\"https://github.com/gradio-app/gradio/raw/main/gradio/media_assets/audio/audio_sample.wav\")\n", "        }\n", "    elif response_type == \"html\":\n", "       msg = {\"role\": \"assistant\",\n", "              \"content\": gr.HTML(\n", "            html_src(random.choice([\"harmful\", \"neutral\", \"beneficial\"]))\n", "            )\n", "       }\n", "    elif response_type == \"model3d\":\n", "        msg = {\"role\": \"assistant\", \"content\": gr.Model3D(\n", "           \"https://github.com/gradio-app/gradio/raw/main/gradio/media_assets/models3d/Fox.gltf\"\n", "        )}\n", "    else:\n", "        msg = {\"role\": \"assistant\", \"content\": \"Cool!\"}\n", "    history.append(msg)\n", "    return history\n", "\n", "with gr.Blocks(fill_height=True) as demo:\n", "    chatbot = gr.Chatbot(\n", "        elem_id=\"chatbot\",\n", "        scale=1,\n", "    )\n", "    response_type = gr.Radio(\n", "        [\n", "            \"image\",\n", "            \"text\",\n", "            \"gallery\",\n", "            \"video\",\n", "            \"audio\",\n", "            \"html\",\n", "            \"model3d\",\n", "        ],\n", "        value=\"text\",\n", "        label=\"Response Type\",\n", "    )\n", "\n", "    chat_input = gr.MultimodalTextbox(\n", "        interactive=True,\n", "        placeholder=\"Enter message or upload file...\",\n", "        show_label=False,\n", "    )\n", "\n", "    chat_msg = chat_input.submit(\n", "        add_message, [chatbot, chat_input], [chatbot, chat_input]\n", "    )\n", "    bot_msg = chat_msg.then(\n", "        bot, [chatbot, response_type], chatbot, api_name=\"bot_response\"\n", "    )\n", "    bot_msg.then(lambda: gr.MultimodalTextbox(interactive=True), None, [chat_input])\n", "\n", "    chatbot.like(print_like_dislike, None, None)\n", "\n", "if __name__ == \"__main__\":\n", "    demo.launch()\n"]}], "metadata": {}, "nbformat": 4, "nbformat_minor": 5}