obaes commited on
Commit
cad29bd
1 Parent(s): b75bacb
Files changed (5) hide show
  1. app.py +121 -9
  2. cookie.py +20 -0
  3. requirements.txt +14 -2
  4. testrag.pdf +0 -0
  5. testrag.xlsx +0 -0
app.py CHANGED
@@ -1,19 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
- from transformers import pipeline
3
 
4
- pipeline = pipeline(task="image-classification", model="julien-c/hotdog-not-hotdog")
5
 
6
- def predict(input_img):
7
- predictions = pipeline(input_img)
8
- return input_img, {p["label"]: p["score"] for p in predictions}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  gradio_app = gr.Interface(
11
- predict,
12
- inputs=gr.Image(label="Select hot dog candidate", sources=['upload', 'webcam'], type="pil"),
13
- outputs=[gr.Image(label="Processed Image"), gr.Label(label="Result", num_top_classes=2)],
14
- title="Hot Dog? Or Not?",
 
 
 
 
 
 
 
 
 
15
  )
16
 
17
  if __name__ == "__main__":
18
  gradio_app.launch( auth=("username", "password"), auth_message="Try this")
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # load required library
2
+ import os
3
+ import torch
4
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
5
+ from langchain.embeddings import HuggingFaceEmbeddings
6
+ from langchain.vectorstores import Chroma
7
+ from langchain.llms.huggingface_pipeline import HuggingFacePipeline
8
+ from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline, BitsAndBytesConfig
9
+ from langchain.document_loaders import PyPDFLoader
10
+ from langchain.chains.question_answering import load_qa_chain
11
+ from langchain.prompts import PromptTemplate
12
  import gradio as gr
 
13
 
 
14
 
15
+ quantization_config = BitsAndBytesConfig(
16
+ load_in_4bit=True,
17
+ bnb_4bit_compute_dtype=torch.bfloat16
18
+ )
19
+
20
+ model_kwargs = {'device': 'cuda'}
21
+ embeddings = HuggingFaceEmbeddings(model_kwargs=model_kwargs)
22
+
23
+ tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
24
+ model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2", device_map='auto', quantization_config=quantization_config)
25
+
26
+ pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens=150,)
27
+ llm = HuggingFacePipeline(pipeline=pipe)
28
+
29
+
30
+ pdf_link = "testrag.pdf"
31
+ loader = PyPDFLoader(pdf_link, extract_images=False)
32
+ pages = loader.load_and_split()
33
+
34
+
35
+ # Split data into chunks
36
+ text_splitter = RecursiveCharacterTextSplitter(
37
+ chunk_size = 4000,
38
+ chunk_overlap = 20,
39
+ length_function = len,
40
+ add_start_index = True,
41
+ )
42
+ chunks = text_splitter.split_documents(pages)
43
+ print(chunks)
44
+
45
+ # Store data into database
46
+ db=Chroma.from_documents(chunks,embedding=embeddings,persist_directory="CHROMA"+pdf_link)
47
+ db.persist()
48
+
49
+ # Load the database
50
+ vectordb = Chroma(persist_directory="CHROMA"+pdf_link, embedding_function = embeddings)
51
+
52
+ # Load the retriver
53
+ retriever = vectordb.as_retriever(search_kwargs = {"k" : 3})
54
+ #qna_prompt_template="""### [INST] Instruction: You will be provided with questions and related data. Your task is to find the answers to the questions using the given data. If the data doesn't contain the answer to the question, then you must return 'Not enough information.'
55
+ qna_prompt_template="""### [INST] Instruction : tu dois répondre en francais. Des questions et des données associées vous seront fournies en francais. Votre tâche consiste à trouver les réponses aux questions en francais en utilisant les données fournies. Si les données ne contiennent pas la réponse à la question, vous devez alors renvoyer ' Pas assez d informations .'
56
+
57
+ {context}
58
+
59
+ ### Question: {question} [/INST]"""
60
+
61
+ PROMPT = PromptTemplate(
62
+ template=qna_prompt_template, input_variables=["context", "question"]
63
+ )
64
+ chain = load_qa_chain(llm, chain_type="stuff", prompt=PROMPT)
65
+
66
+
67
+ # A utility function for answer generation
68
+ def ask(question):
69
+ context = retriever.get_relevant_documents(question)
70
+ print(context)
71
+ answer = (chain({"input_documents": context, "question": question}, return_only_outputs=True))['output_text']
72
+ return answer
73
+
74
+
75
+ def summarize_pdf (pdf_file_path, custom_prompt=""):
76
+ #print(input_pdf_question)
77
+ summary = ask(input_pdf_question)
78
+ return summary
79
+
80
 
81
  gradio_app = gr.Interface(
82
+ upload_file=gr.Image(label="upload file", sources=['upload'], type="pil"),
83
+ input_pdf_name = gr.components.Textbox(label="Entrer le fichier",value="testrag.pdf")
84
+ input_pdf_question = gr.components.Textbox(label="Entrer la question",value="je dois repeindre un mur de 30 m2 avec de la peinture PEINTURE MATE a lille, quel est le prix final ?")
85
+ output_summary = gr.components.Textbox(label=" ")
86
+
87
+ interface = gr.Interface(
88
+ fn = summarize_pdf,
89
+ inputs = input_pdf_name,
90
+ inputs = input_pdf_question,
91
+ outputs = output_summary,
92
+ title = "PDF question",
93
+ description = "vous pouvez questionner un pdf.",
94
+ ).launch(share=True, debug=True)
95
  )
96
 
97
  if __name__ == "__main__":
98
  gradio_app.launch( auth=("username", "password"), auth_message="Try this")
99
 
100
+ #https://www.machinelearningnuggets.com/gradio-tutorial/
101
+
102
+ #quelle est le prix de la PLUS-VALUEGAZARGON en 2024 et en Z3
103
+ #quelle est le prix de la PLUS-VALUEGAZARGON en 2024
104
+ #quelle est le prix de la PLUS-VALUEGAZARGON en 2022
105
+ #dans quelle unité se détermine la PLUS-VALUEGAZARGON
106
+
107
+ #quel est le prix du VITRAGE TREMPE VI-TREM2D
108
+ # La question demande le prix du "VITRAGE TREMPE VI-TREM2D". Cependant, les données fournies ne contiennent pas directement cette information. Il est possible de calculer le prix en multipliant le prix par face par deux (pour avoir le prix par mètre carré) et en ajoutant les deux pourcentages de déchet (pour avoir le prix total).
109
+ #Par exemple, pour le vitrage trempe 10mm clair (VI-TREM2), le prix par face est 253 €/m² et les pourcentages de déchet sont respectivement
110
+
111
+
112
+ #quel est le prix de la peinture PEINTURE MATE sur surface endommagée ?
113
+ #quel est le prix de la peinture PEINTURE BRILLANTE sur surface endommagée en zone 1?
114
+
115
+ #quel est le prix du m2 de PEINTURE MATE sur sURFACE ENDOMMAGEE en zone 1
116
+ #quel est le prix du m2 de PEINTURE MATE sur sURFACE ENDOMMAGEE
117
+
118
+ #quel est le forfait de PEINTURE A PROJETER TYPE GOUTTELETTE en zone 1
119
+ #quel est le forfait de PEINTURE A PROJETER TYPE GOUTTELETTE en zone 1 pour 20 m2
120
+
121
+ #quel est le prix pour une COUCHE ANTI-MOISISSURE
122
+ #quel est le prix pour une COUCHE ANTI-MOISISSURE en zone 1
123
+ #quel est le prix pour une COUCHE ANTI-MOISISSURE en zone 2
124
+
125
+ #quel est le prix le moins cher pour une COUCHE ANTI-MOISISSURE
126
+ #quel est le premier prix pour une COUCHE ANTI-MOISISSURE
127
+ #quel est le premier prix pour une COUCHE ANTI-MOISISSURE appliqué a 30 m2
128
+ #quel est le premier prix pour une COUCHE ANTI-MOISISSURE multiplié par 30 m2
129
+
130
+
131
+ #quel est le premier prix pour une COUCHE ANTI-MOISISSURE et donne moi le résultat multiplié par 30
cookie.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from transformers import pipeline
3
+
4
+ pipeline = pipeline(task="image-classification", model="julien-c/hotdog-not-hotdog")
5
+
6
+ def predict(input_img):
7
+ predictions = pipeline(input_img)
8
+ return input_img, {p["label"]: p["score"] for p in predictions}
9
+
10
+ gradio_app = gr.Interface(
11
+ predict,
12
+ inputs=gr.Image(label="Select hot dog candidate", sources=['upload', 'webcam'], type="pil"),
13
+ outputs=[gr.Image(label="Processed Image"), gr.Label(label="Result", num_top_classes=2)],
14
+ title="Hot Dog? Or Not?",
15
+ )
16
+
17
+ if __name__ == "__main__":
18
+ gradio_app.launch( auth=("username", "password"), auth_message="Try this")
19
+
20
+ #https://www.machinelearningnuggets.com/gradio-tutorial/
requirements.txt CHANGED
@@ -1,2 +1,14 @@
1
- transformers
2
- torch
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ pip install chromadb
2
+ pip install langchain
3
+ pip install pypdf
4
+ pip install sentencepiece
5
+ pip install -q -U bitsandbytes
6
+ pip install -q -U git+https://github.com/huggingface/transformers.git
7
+ pip install -q -U git+https://github.com/huggingface/peft.git
8
+ pip install -q -U git+https://github.com/huggingface/accelerate.git
9
+ pip install git+https://github.com/UKPLab/sentence-transformers.git
10
+ pip install git+https://github.com/Muennighoff/sentence-transformers.git@sgpt_poolings_specb
11
+ pip install --upgrade git+https://github.com/UKPLab/sentence-transformers.git
12
+ pip install -U sentence-transformers
13
+ pip install gradio
14
+ pip install llama-parse
testrag.pdf ADDED
Binary file (32.9 kB). View file
 
testrag.xlsx ADDED
Binary file (5.51 kB). View file