File size: 3,351 Bytes
b75809a
f832c91
 
748baf0
b75809a
f832c91
b75809a
748baf0
 
 
 
b568946
 
 
 
748baf0
198483c
 
b75809a
4d48a61
 
b568946
 
 
 
112973e
 
4d48a61
b568946
 
 
112973e
 
4d48a61
b568946
 
 
112973e
 
4d48a61
b568946
 
4d48a61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b568946
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4d48a61
2ce8295
496acc7
2ce8295
 
496acc7
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import streamlit as st
import pdfplumber
import docx
from transformers import AutoTokenizer, AutoModelForCausalLM

st.title("JAI")

# Előző beszélgetések tárolása session state-ben
if "previous_conversations" not in st.session_state:
    st.session_state.previous_conversations = []

# Korábbi beszélgetések törlése
if st.checkbox("Korábbi Beszélgetések Törlése"):
    st.session_state.previous_conversations = []

# Tokenizáló modell és válaszgeneráló modell választása
tokenizer = AutoTokenizer.from_pretrained("pile-of-law/legalbert-large-1.7M-2")
model = AutoModelForCausalLM.from_pretrained("apple/OpenELM-3B-Instruct", trust_remote_code=True)

# Dokumentumfeldolgozó függvény
def process_document(document_file):
    document_text = ""
    if document_file.type == "application/pdf":
        with pdfplumber.open(document_file) as pdf:
            for page in pdf.pages:
                text = page.extract_text()
                if text:
                    document_text += text.strip() + "\n\n"
    elif document_file.type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
        docx_file = docx.Document(document_file)
        for paragraph in docx_file.paragraphs:
            text = paragraph.text
            if text:
                document_text += text.strip() + "\n\n"
    elif document_file.type == "application/msword":
        doc_file = docx.Document(document_file)
        for paragraph in doc_file.paragraphs:
            text = paragraph.text
            if text:
                document_text += text.strip() + "\n\n"
    else:
        st.error("A fájltípus nem támogatott. Kérlek válassz ki egy PDF, DOCX vagy DOC fájlt!")
    return document_text

# Válaszgeneráló függvény
def generate_response(input_text):
    # Bemeneti szöveg tisztítása
    cleaned_input = input_text.strip()  

    # Tokenizálás
    inputs = tokenizer(cleaned_input, return_tensors="pt", max_length=1024)

    # Modell használata a válasz generálásához
    outputs = model(**inputs)

    # Válasz visszaadása
    response = tokenizer.decode(outputs.logits.argmax(dim=1)[0])
    return response

# Dokumentum feltöltése drag and drop segítségével
document_file = st.file_uploader("Húzd ide a dokumentumot vagy kattints a feltöltéshez", type=["pdf", "docx", "doc"])

if document_file is not None:
    document_text = process_document(document_file)

    # Előző beszélgetésekhez csatolható kontextus
    context = st.text_area("Korábbi Beszélgetéshez Tartozó Kontextus", "")

    # Kérdés mező hozzáadása
    question = st.text_input("Kérdés a Dokumentumból", "")

    # Ha van kérdés, azt is hozzáadjuk a bemenethez
    if question:
        input_text = f"{context} {document_text} {question}" if context else f"{document_text} {question}"
    else:
        input_text = f"{context} {document_text}" if context else document_text

    # Válasz generálása csak akkor, ha a felhasználó elküldi a promptot
    if input_text.strip() != "":
        response = generate_response(input_text)
        st.subheader("Generált Válasz:")
        st.write(response)

        # Aktuális beszélgetés hozzáadása az előző beszélgetésekhez
        st.session_state.previous_conversations.append({"input_text": input_text, "response": response})