File size: 1,658 Bytes
4c198b1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

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