import gradio as gr
from langchain_core.messages import HumanMessage
import src.passage_finder as pf
# Initialize PassageFinder
passage_finder = pf.PassageFinder()
def respond(message):
config = passage_finder.get_configurable()
results = passage_finder.graph.invoke({"messages": [HumanMessage(content=message)]}, config)
documents = results.get('documents', [])
output = []
for doc in documents:
quotes = doc.metadata.get('matched_quotes', [])
publication = doc.metadata.get('publication_name', 'Unknown Publication')
chapter = doc.metadata.get('chapter_name', 'Unknown Chapter')
full_passage = doc.metadata.get('highlighted_content', '')
quote_text = "\n".join([f"• \"{q.quote}\"" for q in quotes])
output.append({
"quotes": quote_text,
"reference": f"{publication}: {chapter}",
"full_passage": full_passage
})
return output
def process_input(message):
results = respond(message)
html_output = "
"
for result in results:
html_output += f"""
{result['reference']}
{result['quotes'].replace("• ", "
• ")}
Show full passage
{result['full_passage']}
"""
html_output += "
"
return html_output
with gr.Blocks(css="""
body { background-color: #f0f0f0; }
.gradio-container { background-color: #ffffff; }
.response-container { border: 1px solid #e0e0e0; border-radius: 8px; padding: 20px; background-color: #f9f9f9; }
.result-item { margin-bottom: 20px; background-color: white; padding: 15px; border-radius: 5px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); }
.reference { color: #2c3e50; margin-bottom: 10px; }
.quotes { font-style: italic; margin-bottom: 10px; }
.full-passage { margin-top: 10px; padding: 10px; background-color: #f0f0f0; border-radius: 5px; }
details summary { cursor: pointer; color: #3498db; font-weight: bold; }
details summary:hover { text-decoration: underline; }
""") as demo:
gr.Markdown("# SRF Teachings Chatbot")
gr.Markdown("Ask questions about Self-Realization Fellowship teachings and receive responses with relevant quotes.")
with gr.Row():
input_text = gr.Textbox(
placeholder="Ask about the meaning of life, spirituality, or any other topic...",
label="Your Question"
)
submit_btn = gr.Button("Submit", variant="primary")
output_area = gr.HTML()
gr.Markdown("### Sources")
gr.Textbox(value="Journey to Self Realization, Second Coming of Christ, and Autobiography of a Yogi",
label="Available Sources", interactive=False)
submit_btn.click(process_input, inputs=input_text, outputs=output_area)
gr.Examples(
examples=[
"What is the meaning of life?",
"Importance of good posture",
"How can I find inner peace?",
"What does Paramahansa Yogananda say about meditation?",
],
inputs=input_text,
)
demo.launch()