File size: 3,200 Bytes
64c0a70
 
 
 
 
163cb0f
35afe03
ce8e249
64c0a70
163cb0f
 
 
 
35afe03
163cb0f
 
 
 
ce8e249
 
 
8d65670
ce8e249
 
a332ad5
 
ce8e249
64c0a70
 
 
 
 
 
 
 
 
 
 
d5cafb1
6ce83a3
 
560beaa
 
 
 
 
 
d460d4c
560beaa
6ce83a3
 
 
 
 
560beaa
 
 
6ce83a3
0304d73
6ce83a3
 
 
0304d73
33b63e4
6ce83a3
64c0a70
 
 
 
 
 
f330131
 
 
 
 
 
 
 
 
 
 
 
 
 
64c0a70
 
 
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
import gradio as gr
from transformers import AutoTokenizer, AutoModelForQuestionAnswering
import torch
import transformers
from transformers import pipeline
import re
# import HTML
from pypdf import PdfReader

def remove_references(text):
    text = re.sub(r'\[\d+\]', '', text) ##[ref]
    text = re.sub(r'\[https?://[^\[\]]+\s[^\[\]]+\]', '', text) ##hyperlink with text
    text = re.sub(r'\[https?://[^\[\]]+\]', '', text) ##just the hyperlink
    # text = html.unescape(text)
    text = re.sub(r'\s+', ' ', text).strip() ##clear out the white spaces
    return text

    
def extract_text_from_pdf(file_path):
  reader = PdfReader(file_path)
  text = ""
  for page in reader.pages[2:]:
      text += page.extract_text() + "\n"

  return text  

      
def model(model_name):
  tokenizer = AutoTokenizer.from_pretrained(model_name)
  model = AutoModelForQuestionAnswering.from_pretrained(model_name,return_dict = False)
  model_pipeline = pipeline(
    "question-answering",
    model = model,
    tokenizer = tokenizer
    )

  return model_pipeline

def qa_result(context, question, file_path):
    model_name = "timpal0l/mdeberta-v3-base-squad2"
    pipe = model(model_name)
    if file_path is not None:
        context = extract_text_from_pdf(file_path)
        result = pipe(question=question, context=context)
        answered = result['answer']
        text = remove_references(answered)
        
    elif len(context) == 0 and len(question) == 0:
            text = "Որպեսզի ես կարողանամ քեզ օգնել, ինձ պիտի տրամադրես համապատասխան տեքստն ու հարցերը։"
    elif len(context) == 0:
        text = "Ես չեմ կարողանամ քեզ օգնել եթե ինձ չտրամադրես տեքստը"
    elif len(question) == 0:
        text = "Ես չեմ կարողանամ քեզ օգնել եթե ինձ չտաս հարցդ"
    else:
        # if file_path is not None:
        #     # File was uploaded, extract text from the file
        #     context = extract_text_from_pdf(file_path)
        # else: No file uploaded, use the provided context as is
        
        result = pipe(question=question, context=context)
        answered = result['answer']
        text = remove_references(answered)
        text = text.replace('(', '', 1)
        text = text.replace(',', '', len(text)-1)
    return text.capitalize()

theme = gr.themes.Soft().set(
    body_background_fill='*background_fill_secondary',
    body_text_color_subdued='*body_text_color',
    body_text_color_subdued_dark='*chatbot_code_background_color'
)
def add_file(history, file):
    history = history + [((file.name,), None)]
    return history


app = gr.Interface(
    fn=qa_result,
    btn=gr.UploadButton("📁", file_types=[".pdf", ".csv", ".doc"], ),
    inputs=['textbox', 'text', 'file'],
    outputs='textbox',
    title='Ողջու՛յն։ Ես քո արհեստական բանականությամբ օգնականն եմ',
    theme=theme,
    description='Տու՛ր ինձ տեքստ, ու տեքստին վերաբերող հարցեր, ու ես կօգնեմ քեզ պատասխանել հարցերին'
)


app.launch(inline=False)