RPG-RAG / agent /src /ui /tab_vector_store.py
jeffersonpojunior
changing to uv run for vllm
5f511f1
import gradio as gr
from agent.src.vector_store.configs import INDEX_DIR
def _index_exists() -> bool:
return (INDEX_DIR / "index.faiss").exists()
def _status_message() -> str:
if _index_exists():
return "Index found at: " + str(INDEX_DIR)
return "No index found. Click 'Build Index' to create one."
def build_index_action():
try:
from src.vector_store.builder import get_data, build_index
except ImportError as e:
yield f"Missing dependency: {e}"
return
yield "Loading files...\n"
docs = get_data()
yield f"Loaded {len(docs)} files.\n\nChunking and embedding (this may take a while)...\n"
build_index()
yield f"Done! Index saved to:\n{INDEX_DIR}"
def test_search_action(query: str):
if not query.strip():
return "Type a query above first."
if not _index_exists():
return "Index not found. Build it first."
try:
from src.vector_store.builder import load_index
except ImportError as e:
return f"Missing dependency: {e}"
vs = load_index()
results = vs.similarity_search(query, k=5)
lines = []
for i, doc in enumerate(results, 1):
source = doc.metadata.get("source", "?")
context = doc.metadata.get("context", "")
lines.append(f"### Result {i} — `{context}/{source}`\n{doc.page_content}")
return "\n\n---\n\n".join(lines)
def create_tab():
with gr.Tab("Vector Store"):
gr.Markdown("## Vector Store\nBuild the FAISS index from your lore files, then test retrieval.")
status = gr.Textbox(
label="Status",
value=_status_message,
interactive=False,
lines=1,
)
build_btn = gr.Button("Build Index", variant="primary")
log = gr.Textbox(label="Log", lines=8, interactive=False)
build_btn.click(fn=build_index_action, outputs=log)
gr.Markdown("---\n### Test Retrieval")
query_box = gr.Textbox(label="Query", placeholder="e.g. Quais guildas existem em Ploya?")
search_btn = gr.Button("Search")
results_box = gr.Markdown()
search_btn.click(fn=test_search_action, inputs=query_box, outputs=results_box)