File size: 2,234 Bytes
776880e
 
 
 
 
 
 
 
 
 
 
 
 
bfb017b
776880e
bfb017b
776880e
bfb017b
 
 
 
 
776880e
bfb017b
 
776880e
bfb017b
 
4298cc6
bfb017b
776880e
bfb017b
 
 
776880e
bfb017b
 
 
 
776880e
bfb017b
 
d3b5651
bfb017b
 
 
 
 
 
d3b5651
bfb017b
776880e
 
bfb017b
 
 
 
 
 
 
 
801dda6
776880e
bfb017b
4298cc6
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
import os
import gradio as gr
import openai
from langchain import hub
from langchain_community.document_loaders import PyPDFLoader
from langchain_community.vectorstores import Chroma
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter


data_root = './data/pdf/'
pdf_paths = [data_root+path for path in os.listdir(data_root)]

loaders = [PyPDFLoader(path) for path in pdf_paths]

docs = []
for loader in loaders:
    docs.extend(
        loader.load()[0:] # skip first page
    )

chunk_size = 1000
chunk_overlap = 200

text_splitter = RecursiveCharacterTextSplitter(chunk_size=chunk_size, 
                                               chunk_overlap=chunk_overlap)

splits = text_splitter.split_documents(docs)

vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings())
retriever = vectorstore.as_retriever()
prompt = hub.pull("rlm/rag-prompt")

model_name = 'gpt-3.5-turbo-0125'
# model_name = 'gpt-4-1106-preview'
model_name = 'gpt-4-0125-preview'
llm = ChatOpenAI(model_name=model_name, temperature=0)

def format_docs(docs):
    return '\n\n'.join(doc.page_content for doc in docs)

rag_chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

def predict(query):
    return rag_chain.invoke(query)

examples = [
    "هل هناك غرامة للتخلف عن سداد ضريبة القيمة المضافة؟",
    "ما هي ضريبة القيمة المضافة؟",
    "ما الواجب على الخاضغين لضريبة القيمة المضافة؟",
    "من هو الشخص الخاضغ لضريبة القيمة المضافة؟",
    "متى يجب على الشخص التسجيل لضريبة القيمة المضافة؟",
    "أريد بيع منزل, هل يخضع ذلك لضريبة القيمة المضافة؟"
]

textbox = gr.Textbox(label="اكتب سؤالك هنا", placeholder="", lines=4)
iface = gr.Interface(fn=predict, inputs=textbox, outputs="text", examples=examples)
iface.launch(share=True)