vizsum-pro / rag_ui_template.py
Vartex39's picture
🔥 Yeni UI entegrasyonu: RAG + geçmiş + özetleme
4c198b1
import gradio as gr
import os
from rag_engine import SimpleRAG
from summarizer import generate_answer
def process_uploaded_files(files):
docs = []
for file in files:
with open(file.name, "r", encoding="utf-8") as f:
content = f.read()
docs.append((os.path.basename(file.name), content))
return docs
def answer_with_rag(query, files, user_api_key):
if not query or not files:
return "⚠️ Soru ya da dosya eksik.", "Hata"
docs = process_uploaded_files(files)
rag = SimpleRAG()
rag.docs = docs
rag.build_index()
results = rag.search(query, top_k=3)
contexts = [r[1] for r in results]
try:
answer = generate_answer(query, contexts, model_name="anthropic/claude-3-haiku", api_key=user_api_key)
sources = "\n\n---\n".join([f"Kaynak: {r[0]}" for r in results])
return answer, sources
except Exception as e:
return f"Hata: {str(e)}", "Hata"
with gr.Blocks() as demo:
gr.Markdown("## VizSum Pro - RAG Demo")
api_key_input = gr.Textbox(label="OpenRouter API Key", type="password")
file_input = gr.File(file_types=[".txt"], file_count="multiple", label="Metin Dosyası Yükle (.txt)")
query_input = gr.Textbox(label="Soru", placeholder="Claude'a sor...")
submit_btn = gr.Button("Yanıtla")
answer_output = gr.Textbox(label="Claude Yanıtı", lines=10)
source_output = gr.Textbox(label="Kullanılan Kaynaklar", lines=4, visible=True)
submit_btn.click(fn=answer_with_rag, inputs=[query_input, file_input, api_key_input], outputs=[answer_output, source_output])
if __name__ == "__main__":
demo.launch()