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()