Spaces:
Sleeping
Sleeping
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() | |