Spaces:
Running
Running
File size: 5,401 Bytes
1b8dab4 5299cfa 1b8dab4 5299cfa 1b8dab4 5299cfa 1b8dab4 5299cfa 1b8dab4 5299cfa 1b8dab4 5299cfa 1b8dab4 5299cfa 1b8dab4 5299cfa 1b8dab4 5299cfa 1b8dab4 5299cfa 1b8dab4 5299cfa 1b8dab4 5299cfa 1b8dab4 5299cfa 1b8dab4 5299cfa 1b8dab4 5299cfa 1b8dab4 |
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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
import gradio as gr
import os
from langchain_core.messages import HumanMessage
import src.srf_bot as sb
import prompts.system_prompts as sp
# Initialize chatbot
chatbot = sb.SRFChatbot()
# Define the respond function
def respond(query, history):
formatted_query = [HumanMessage(content=query)]
# Invoke the graph with properly formatted input
result = chatbot.graph.invoke({"messages": formatted_query}, chatbot.config)
# Get the passages from the graph and append to history if documents exist
state = chatbot.graph.get_state(config=chatbot.config).values
documents = state.get("documents")
passages = ''
if documents and len(documents) > 0:
for d in documents:
passages += f'<b>{d.metadata["publication_name"]} - {d.metadata["chapter_name"]}</b>\n{d.page_content}\n\n'
history.append((f'Passages: {query}', passages))
# Extract the assistant's response and append to history
response = result["messages"][-1].content
system_message_dropdown = state.get("system_message_dropdown")
history.append((query, f"<i>[{system_message_dropdown}]</i>\n" + response))
return history
# Gradio interface with black and grey color scheme
with gr.Blocks(css="""
.gradio-container {
background-color: #F0F0F0;
font-family: 'Arial', sans-serif;
}
h1, h2, p {
color: black;
}
h1 {
font-size: 32px;
text-align: left;
}
h2 {
font-size: 24px;
}
p {
font-size: 18px;
margin-bottom: 15px;
}
.gr-button {
background-color: #333333;
color: white;
font-size: 18px;
padding: 10px;
}
.gr-textbox textarea {
font-size: 18px;
color: black;
}
.gr-dropdown {
font-size: 18px;
color: black;
}
.source-box {
background-color: white;
padding: 10px;
border-radius: 8px;
margin-top: 20px;
color: black;
border: 1px solid #D0D0D0;
}
/* Dark mode specific styles */
@media (prefers-color-scheme: dark) {
.gradio-container {
background-color: #1e1e1e; /* Dark background */
color: white; /* Light text color for contrast */
}
h1, h2, p {
color: white; /* Light text for headings */
}
.gr-textbox textarea {
background-color: #333333; /* Dark background for text area */
color: white; /* Light text color */
}
.gr-button {
background-color: #555555; /* Darker button for dark mode */
color: white;
}
.gr-dropdown {
background-color: #333333; /* Dark dropdown background */
color: white;
}
.source-box {
background-color: #333333; /* Dark background for sources box */
color: white;
border: 1px solid #555555; /* Lighter border for visibility */
}
}
@media (max-width: 600px) {
.gr-row { flex-direction: column !important; }
.gr-column { width: 100% !important; }
}
""") as demo:
# Title
gr.Markdown("# SRF Chatbot")
with gr.Row(elem_classes="gr-row"):
with gr.Column(scale=4, elem_classes="gr-column"):
# Chatbot interface
chatbot_output = gr.Chatbot(height=600) # Increased height for longer chat interface
user_input = gr.Textbox(placeholder="Type your question here...", label="Your Question", value="What is the meaning of life?")
submit_button = gr.Button("Submit")
with gr.Column(scale=1, elem_classes="gr-column"):
# Dropdown to select system prompts
system_prompt_dropdown = gr.Dropdown(
choices=list(sp.system_prompt_templates.keys()),
label="Select Chatbot Instructions",
value=list(sp.system_prompt_templates.keys())[0],
elem_classes="gr-dropdown"
)
# Display the selected system prompt
system_prompt_display = gr.Textbox(
value=sp.system_prompt_templates[list(sp.system_prompt_templates.keys())[0]],
label="Current Chatbot Instructions",
lines=5,
interactive=False
)
# Sources box (Now white, matching the other boxes)
gr.Markdown("""
<div class="source-box">
<strong>Available sources:</strong>
<ul>
<li>Journey to Self-Realization</li>
<li>The Second Coming of Christ</li>
<li>Autobiography of a Yogi</li>
</ul>
</div>
""")
# Update system prompt display when a new prompt is selected
system_prompt_dropdown.change(
fn=chatbot.reset_system_prompt,
inputs=[system_prompt_dropdown],
outputs=[system_prompt_display]
)
# Submit button logic to handle chatbot conversation
submit_button.click(
fn=respond,
inputs=[user_input, chatbot_output],
outputs=[chatbot_output]
)
# Access the secrets
username = os.getenv("USERNAME")
password = os.getenv("PASSWORD")
# Launch the interface
demo.launch(share=True, auth=(username, password), debug=True)
|