acres / app.py
ak3ra's picture
modified the chatui
660cea6
raw
history blame
3.09 kB
import gradio as gr
from rag.rag_pipeline import RAGPipeline
from utils.prompts import highlight_prompt, evidence_based_prompt, sample_questions
from config import STUDY_FILES
import json
# Cache for RAG pipelines
rag_cache = {}
def get_rag_pipeline(study_name):
if study_name not in rag_cache:
study_file = STUDY_FILES.get(study_name)
if study_file:
rag_cache[study_name] = RAGPipeline(study_file)
else:
raise ValueError(f"Invalid study name: {study_name}")
return rag_cache[study_name]
def chat_function(message, history, study_name, prompt_type):
rag = get_rag_pipeline(study_name)
prompt = (
highlight_prompt
if prompt_type == "Highlight"
else evidence_based_prompt if prompt_type == "Evidence-based" else None
)
response = rag.query(message, prompt_template=prompt)
return response.response
def get_study_info(study_name):
study_file = STUDY_FILES.get(study_name)
if study_file:
with open(study_file, "r") as f:
data = json.load(f)
return f"**Number of documents:** {len(data)}\n\n**First document title:** {data[0]['title']}"
else:
return "Invalid study name"
with gr.Blocks(css="#chatbot {height: 600px; overflow-y: auto;}") as demo:
gr.Markdown("# RAG Pipeline Demo")
with gr.Row():
with gr.Column(scale=3):
chatbot = gr.Chatbot(elem_id="chatbot")
with gr.Row():
msg = gr.Textbox(
show_label=False, placeholder="Enter your message here...", scale=4
)
send_btn = gr.Button("Send", scale=1)
with gr.Column(scale=1):
study_dropdown = gr.Dropdown(
choices=list(STUDY_FILES.keys()),
label="Select Study",
value=list(STUDY_FILES.keys())[0],
)
study_info = gr.Markdown()
prompt_type = gr.Radio(
["Default", "Highlight", "Evidence-based"],
label="Prompt Type",
value="Default",
)
clear = gr.Button("Clear Chat")
gr.Examples(examples=sample_questions[list(STUDY_FILES.keys())[0]], inputs=msg)
def user(user_message, history):
return "", history + [[user_message, None]]
def bot(history, study_name, prompt_type):
user_message = history[-1][0]
bot_message = chat_function(user_message, history, study_name, prompt_type)
history[-1][1] = bot_message
return history
msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
bot, [chatbot, study_dropdown, prompt_type], chatbot
)
send_btn.click(user, [msg, chatbot], [msg, chatbot], queue=False).then(
bot, [chatbot, study_dropdown, prompt_type], chatbot
)
clear.click(lambda: None, None, chatbot, queue=False)
study_dropdown.change(
fn=get_study_info,
inputs=study_dropdown,
outputs=study_info,
)
if __name__ == "__main__":
demo.launch(share=True, debug=True)