rag_qa_nlp / app_streamlit.py
Yavoryna
Create RAG System Question Answering
34d544a
import streamlit as st
from data_loader import load_documents
from chunker import build_chunk_dataset
from rag_pipeline import RAGSystem
# Налаштування сторінки
st.set_page_config(page_title="RAG News System (Groq Edition)", layout="wide")
st.title("RAG System with Groq")
st.markdown("""
### Про систему
Це RAG-система, яка відповідає на питання по новинах `ag_news`.
**Powered by Groq** (Llama-3.1) — надшвидка генерація.
""")
# Сайдбар
with st.sidebar:
st.header("Доступ")
# Підказка, де взяти ключ
st.markdown("Потрібен ключ Groq (безкоштовно): [Отримати тут](https://console.groq.com/keys)")
api_key = st.text_input("Введіть Groq API Key (gsk_...):", type="password")
st.divider()
st.header("Пошук")
use_bm25 = st.checkbox("BM25 (Ключові слова)", value=True)
use_dense = st.checkbox("Dense (Семантичний)", value=True)
# Основна частина
query = st.text_input("Ваше запитання (англійською):", placeholder="Example: What are the latest tech trends?")
# Ініціалізація (Load once)
if 'rag' not in st.session_state:
with st.spinner("Завантаження датасету та моделей..."):
# Завантажуємо перші 1000 новин для швидкості
docs = load_documents("ag_news")
chunks = build_chunk_dataset(docs[:1000])
st.session_state.rag = RAGSystem(chunks)
st.success("Система готова!")
# Кнопка
if st.button("Запитати Groq"):
if not api_key:
st.warning("Будь ласка, введіть API ключ у меню зліва.")
elif not query:
st.warning("Введіть запит.")
else:
with st.spinner("Groq думає..."):
answer, refs = st.session_state.rag.run(
query,
api_key=api_key,
use_bm25=use_bm25,
use_dense=use_dense
)
col1, col2 = st.columns([2, 1])
with col1:
st.subheader("Відповідь:")
st.write(answer)
with col2:
st.subheader("Джерела:")
st.text(refs)