Spaces:
Sleeping
Sleeping
from indexer import ( | |
create_vector_database, | |
get_llm, | |
get_prompt_template, | |
) | |
import gradio as gr | |
def format_contexts(contexts): | |
return "\n".join( | |
[ | |
f"Reference {i+1}:\n{doc.metadata['question']}\n{doc.metadata['answer']}" | |
for i, doc in enumerate(contexts) | |
] | |
) | |
class CustomRAG: | |
def __init__(self, vector_db, llm, prompt_template): | |
self.vector_db = vector_db | |
self.llm = llm | |
self.prompt_template = prompt_template | |
def run(self, query): | |
retriever = self.vector_db.as_retriever(search_kwargs={"k": 3}) | |
contexts = retriever.invoke(query) | |
formatted_context = format_contexts(contexts) | |
prompt = self.prompt_template.format(context=formatted_context, question=query) | |
return self.llm.invoke(prompt), contexts | |
def answer_question(query): | |
llm = get_llm("google/flan-t5-base") | |
# llm = get_llm("FreedomIntelligence/HuatuoGPT-o1-7B") | |
vector_database = create_vector_database("sentence-transformers/all-MiniLM-L6-v2") | |
prompt_template = get_prompt_template() | |
rag = CustomRAG( | |
vector_database, | |
llm, | |
prompt_template, | |
) | |
response, _ = rag.run(query) | |
return response | |
demo = gr.Interface( | |
fn=answer_question, | |
inputs=[ | |
gr.Textbox( | |
label="Describe your medical concern", | |
placeholder="e.g. I've been feeling tired and dizzy lately.", | |
lines=3, | |
), | |
], | |
outputs="text", | |
title="Medical Assistant β RAG", | |
description=( | |
"Get helpful insights based on your described symptoms. " | |
"This assistant uses medical reference data to provide informative responses. " | |
"Note: This is not a substitute for professional medical advice." | |
), | |
) | |
demo.launch() | |