File size: 3,412 Bytes
b75809a
aafe73b
f832c91
748baf0
b75809a
f832c91
b75809a
748baf0
 
 
 
b568946
 
 
 
748baf0
198483c
f5bac91
b75809a
4d48a61
 
b568946
 
aafe73b
b568946
 
 
112973e
 
4d48a61
b568946
 
 
112973e
 
4d48a61
b568946
 
4d48a61
 
 
 
 
71f7c83
4d48a61
 
f690e4f
4d48a61
 
 
 
0bbbe3f
4d48a61
 
 
5fc9d52
4d48a61
 
 
 
b568946
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4d48a61
2ce8295
496acc7
2ce8295
 
496acc7
c343d9f
 
 
 
 
 
 
 
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
87
88
89
90
import streamlit as st
from pdfminer.high_level import extract_text
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("databricks/dolly-v2-3b", trust_remote_code=True)

# Dokumentumfeldolgozó függvény
def process_document(document_file):
    document_text = ""
    if document_file.type == "application/pdf":
        document_text = extract_text(document_file)
    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, truncation=True)

    # 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

# Dokumentumfeltöltés feldolgozása
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})

        # Input text megjelenítése
        st.subheader("Input Text:")
        st.write(input_text)

        # Response megjelenítése
        st.subheader("Response:")
        st.write(response)