zatca-demo / app.py
elshehawy's picture
return to v1.0.0
bfb017b
raw
history blame
2.23 kB
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)