File size: 3,468 Bytes
b75809a
748baf0
b75809a
b568946
b75809a
748baf0
 
 
 
b568946
 
 
 
748baf0
17220dc
20e0aad
748baf0
 
6be2107
b75809a
4cad79c
 
 
b5a0f4f
4cad79c
 
252acf6
4cad79c
 
 
 
 
ba036f9
 
b75809a
ba036f9
b568946
b75809a
b568946
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
496acc7
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
import streamlit as st
from transformers import AutoTokenizer, AutoModelForCausalLM

st.title("Jogi Dokumentumok AI Válaszgenerálás")

# 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_name = "pile-of-law/legalbert-large-1.7M-2"
model_name = "apple/OpenELM-3B-Instruct"

tokenizer = AutoTokenizer.from_pretrained(tokenizer_name)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)

# Definiáljuk a válaszgeneráló függvényt
def generate_response(input_text, tokenizer, model):
    # Tokenizálás
    input_ids = tokenizer.encode(input_text, return_tensors="pt", max_length=tokenizer.model_max_length, truncation=True)

    # Modell használata a válasz generálásához
    output = model.generate(input_ids, num_return_sequences=1, pad_token_id=tokenizer.eos_token_id)

    # Decoding és válasz visszaadása
    response = tokenizer.decode(output[0], skip_special_tokens=True)
    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 = ""

    if document_file.type == "application/pdf":
        with pdfplumber.open(document_file) as pdf:
            for page in pdf.pages:
                document_text += page.extract_text()
                # Ha bekezdésekre bontjuk, hozzáadhatunk például egy sortörést a bekezdések közé:
                document_text += "\n\n"
    elif document_file.type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
        docx_file = docx.Document(document_file)
        for paragraph in docx_file.paragraphs:
            document_text += paragraph.text
            # Hasonlóan, itt is adhatunk hozzá sortörést a bekezdések közé:
            document_text += "\n\n"
    elif document_file.type == "application/msword":
        doc_file = docx.Document(document_file)
        for paragraph in doc_file.paragraphs:
            document_text += paragraph.text
            document_text += "\n\n"
    else:
        st.error("A fájltípus nem támogatott. Kérlek válassz ki egy PDF, DOCX vagy DOC fájlt!")

    # 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, tokenizer, model)
        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})