|
import json |
|
import streamlit as st |
|
from bestrag import BestRAG |
|
import os |
|
|
|
|
|
col1, col2 = st.columns([1, 5]) |
|
with col1: |
|
st.image("https://github.com/user-attachments/assets/e23d11d5-2d7b-44e2-aa11-59ddcb66bebc", width=140) |
|
with col2: |
|
st.title("BestRAG - Hybrid Retrieval-Augmented Generation (RAG)") |
|
|
|
st.markdown(""" |
|
[![GitHub stars](https://img.shields.io/github/stars/samadpls/BestRAG?color=red&label=stars&logoColor=black&style=social)](https://github.com/samadpls/BestRAG) |
|
[![PyPI - Downloads](https://img.shields.io/pypi/dm/bestrag?style=social)](https://pypi.org/project/bestrag/) |
|
|
|
> **Note**: Qdrant offers a free tier with 4GB of storage. To generate your API key and endpoint, visit [Qdrant](https://qdrant.tech/). |
|
|
|
You can use BestRAG freely by installing it with `pip install bestrag`. For more details, visit the [GitHub repository](https://github.com/samadpls/BestRAG). |
|
|
|
Made with ❤️ by [samadpls](https://github.com/samadpls) |
|
""") |
|
|
|
|
|
url = st.text_input("Qdrant URL", "https://YOUR_QDRANT_URL") |
|
api_key = st.text_input("Qdrant API Key", "YOUR_API_KEY") |
|
collection_name = st.text_input("Collection Name", "YOUR_COLLECTION_NAME") |
|
|
|
|
|
if st.button("Initialize BestRAG"): |
|
st.session_state['rag'] = BestRAG(url=url, api_key=api_key, collection_name=collection_name) |
|
st.success("BestRAG initialized successfully!") |
|
|
|
|
|
if 'rag' in st.session_state: |
|
rag = st.session_state['rag'] |
|
|
|
|
|
tab1, tab2 = st.tabs(["Create Embeddings", "Search Embeddings"]) |
|
|
|
with tab1: |
|
st.header("Create Embeddings") |
|
|
|
|
|
pdf_file = st.file_uploader("Upload PDF", type=["pdf"]) |
|
|
|
if st.button("Create Embeddings"): |
|
if pdf_file is not None: |
|
|
|
temp_pdf_path = os.path.join("/tmp", pdf_file.name) |
|
with open(temp_pdf_path, "wb") as f: |
|
f.write(pdf_file.getbuffer()) |
|
|
|
|
|
pdf_name = pdf_file.name |
|
|
|
|
|
rag.store_pdf_embeddings(temp_pdf_path, pdf_name) |
|
st.success(f"Embeddings created for {pdf_name}") |
|
else: |
|
st.error("Please upload a PDF file.") |
|
|
|
with tab2: |
|
st.header("Search Embeddings") |
|
|
|
|
|
query = st.text_input("Search Query", "example query") |
|
limit = st.number_input("Limit", min_value=1, max_value=20, value=5) |
|
|
|
if st.button("Search"): |
|
|
|
results = rag.search(query, limit) |
|
|
|
|
|
st.subheader("Search Results") |
|
for result in results.points: |
|
st.json({ |
|
"id": result.id, |
|
"score": result.score, |
|
"payload": result.payload |
|
}) |
|
else: |
|
st.warning("Please initialize BestRAG first.") |