File size: 6,238 Bytes
43139c6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import gradio as gr

# Define some pre-written templates for Tab 1
templates = {
    "Friendly Chatbot": "You are a helpful, friendly chatbot that engages in light-hearted conversations.",
    "Technical Assistant": "You are a technical assistant specialized in answering questions related to Python programming.",
    "Nutrition Advisor": "You provide evidence-based advice on nutrition and healthy eating habits.",
}

# Define some agentic workflows for Tab 2
agentic_workflows = {
    "Blog Post Generator": "This agent is designed to help generate a blog post based on user input.",
    "Document Summarizer": "This agent summarizes long documents by extracting key points.",
    "Task Manager": "This agent helps you organize tasks and provides step-by-step guidance."
}

# Chatbot logic for custom instructions or pre-written templates
def chatbot_response(system_instructions, user_query):
    if "friendly" in system_instructions.lower():
        return f"Friendly Chatbot says: Hi there! 😊 How can I assist you today?"
    elif "technical" in system_instructions.lower():
        return f"Technical Assistant says: Sure! Here's some information on Python: {user_query}"
    elif "nutrition" in system_instructions.lower():
        return f"Nutrition Advisor says: Here's some advice about healthy eating: {user_query}"
    else:
        return f"Custom Chatbot says: {user_query}"

# Chatbot conversation function
def chatbot_conversation(system_instructions, chat_history, user_query):
    response = chatbot_response(system_instructions, user_query)
    chat_history.append((user_query, response))
    return chat_history, ""

# Chatbot conversation for predefined agentic workflows
def agentic_chatbot_conversation(workflow_instructions, chat_history, user_query):
    response = f"Agent Workflow ({workflow_instructions}) says: {user_query}"
    chat_history.append((user_query, response))
    return chat_history, ""

# Function to update the interface when a selection is made from the dropdown (Tab 1)
def update_interface(template_name, custom_instructions):
    if template_name == "Custom Instructions":
        return gr.update(visible=True), gr.update(visible=False)
    else:
        template_content = templates.get(template_name, "")
        return gr.update(visible=False), gr.update(visible=True, value=template_content)

# Build the Gradio interface with Tabs
with gr.Blocks(css=".gradio-container {background-color: #F0F0F0;} .gr-button {background-color: #1E3A8A; color: white;} .gr-textbox textarea {font-size: 16px;} .gr-markdown {font-size: 18px; color: #1E3A8A;}") as demo:
    
    # Add Tabs
    with gr.Tabs():
        
        # Tab 1: Custom Instructions or Pre-Written Templates
        with gr.Tab("Custom Instructions Chatbot"):
            gr.Markdown("""
            <div style='background-color:#E0E0E0; padding: 20px; border-radius: 10px;'>
                <h1 style='text-align: center; color: #1E3A8A;'>SRF Innovation Labs - AI Chatbot Use Case Explorer</h1>
                <p style='font-size: 18px; text-align: center; color: #1E3A8A;'>
                    This tool allows you to experiment with different system prompts, 
                    giving you control over how the chatbot behaves. You can either use pre-defined templates 
                    or write your own custom instructions.
                </p>
            </div>
            """)

            # Section to select system instructions from dropdown
            gr.Markdown("<h2 style='color: #1E3A8A;'>Chatbot Setup</h2>")
            template_name = gr.Dropdown(choices=["Custom Instructions"] + list(templates.keys()), label="Choose Instructions", value="Friendly Chatbot")
            custom_instructions = gr.Textbox(label="Custom Instructions", visible=False, placeholder="Write your own instructions here...")
            template_display = gr.Textbox(label="Template Content", interactive=False, visible=True)

            # Chatbot interface
            gr.Markdown("<h2 style='color: #1E3A8A;'>Chatbot Interaction</h2>")
            chatbot = gr.Chatbot(label="Chatbot Conversation", height=300, show_label=False)
            user_query = gr.Textbox(label="Your Query", placeholder="Ask a question or say something to the chatbot...")
            submit_button = gr.Button("Send", elem_classes=["gr-button"])

            # Update logic for Tab 1
            template_name.change(fn=update_interface, inputs=[template_name, custom_instructions], outputs=[custom_instructions, template_display])
            submit_button.click(fn=chatbot_conversation, inputs=[custom_instructions if template_name == "Custom Instructions" else template_display, chatbot, user_query], outputs=[chatbot, user_query])

        # Tab 2: Predefined Agentic Workflows
        with gr.Tab("Agentic Workflow Chatbots"):
            gr.Markdown("""
            <div style='background-color:#E0E0E0; padding: 20px; border-radius: 10px;'>
                <h1 style='text-align: center; color: #1E3A8A;'>Agentic Workflow Explorer</h1>
                <p style='font-size: 18px; text-align: center; color: #1E3A8A;'>
                    Explore predefined agentic workflows that execute specific tasks, such as generating blog posts, 
                    summarizing documents, or managing tasks.
                </p>
            </div>
            """)

            # Dropdown for selecting agentic workflows
            workflow_name = gr.Dropdown(choices=list(agentic_workflows.keys()), label="Choose Agent Workflow", value="Blog Post Generator")
            workflow_display = gr.Textbox(label="Workflow Description", interactive=False, visible=True)
            workflow_chatbot = gr.Chatbot(label="Agent Workflow Conversation", height=300, show_label=False)
            workflow_user_query = gr.Textbox(label="Your Query", placeholder="Ask the agent to perform a task...")
            workflow_submit_button = gr.Button("Send", elem_classes=["gr-button"])

            # Chatbot interaction for agentic workflows
            workflow_submit_button.click(fn=agentic_chatbot_conversation, inputs=[workflow_name, workflow_chatbot, workflow_user_query], outputs=[workflow_chatbot, workflow_user_query])

# Launch the app
demo.launch()