Files changed (1) hide show
  1. new.py +118 -0
new.py ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # FINAL COMBINE GRADIO INTERFACE ,WITH THR DEFAULT VALUES and STOP FACILITIES
2
+
3
+ import PIL.Image as Image
4
+ import gradio as gr
5
+ from ultralytics import YOLO
6
+ import os
7
+ import time
8
+ from langchain_groq import ChatGroq
9
+ from langchain_community.embeddings import HuggingFaceEmbeddings
10
+ from langchain.text_splitter import CharacterTextSplitter
11
+ from langchain.chains.combine_documents import create_stuff_documents_chain
12
+ from langchain_core.prompts import ChatPromptTemplate
13
+ from langchain.chains import create_retrieval_chain
14
+ from langchain_community.vectorstores import FAISS
15
+ from langchain_community.document_loaders import PyPDFLoader
16
+ from dotenv import load_dotenv
17
+
18
+ load_dotenv()
19
+ groq_api_key = os.getenv('GROQ_API_KEY')
20
+
21
+ # Initialize object detection model
22
+ model = YOLO("version4c.pt")
23
+
24
+ # Set default confidence and IoU thresholds
25
+ CONF_THRESHOLD = 0.25
26
+ IOU_THRESHOLD = 0.45
27
+
28
+ def predict_image(img):
29
+ # Perform object detection
30
+ results = model.predict(source=img, conf=CONF_THRESHOLD, iou=IOU_THRESHOLD, show_labels=True, show_conf=True, imgsz=640)
31
+ # Plot the result
32
+ for r in results:
33
+ im_array = r.plot()
34
+ im = Image.fromarray(im_array[..., ::-1])
35
+ return im
36
+
37
+ # Initialize chatbot components
38
+ llm = ChatGroq(groq_api_key=groq_api_key, model_name="Llama3-8b-8192")
39
+ prompt = ChatPromptTemplate.from_template(
40
+ """ Answer the questions based on the provided context only. Please provide the most accurate response based on the question <context> {context} <context> Questions:{input} """
41
+ )
42
+ embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
43
+ loader = PyPDFLoader("Document.pdf")
44
+ docs = loader.load()
45
+ text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
46
+ final_documents = text_splitter.split_documents(docs)
47
+ # Extract text content from the Document instances
48
+ doc_texts = [doc.page_content for doc in final_documents]
49
+ embeddings_result = embeddings.embed_documents(doc_texts)
50
+ if embeddings_result:
51
+ vectors = FAISS.from_documents(final_documents, embeddings)
52
+ else:
53
+ raise ValueError("Failed to generate embeddings. Please check your input documents or try a different embedding model.")
54
+
55
+ document_chain = create_stuff_documents_chain(llm, prompt)
56
+ retriever = vectors.as_retriever()
57
+ retrieval_chain = create_retrieval_chain(retriever, document_chain)
58
+
59
+ def print_like_dislike(x: gr.LikeData):
60
+ print(x.index, x.value, x.liked)
61
+
62
+ def add_message(history, message):
63
+ if message is not None:
64
+ history.append((message, None))
65
+ return history, gr.Textbox(value=None, interactive=False)
66
+
67
+ stop_generation = False
68
+
69
+ def bot(history):
70
+ global stop_generation
71
+ stop_generation = False
72
+ message = history[-1][0]
73
+ start_time = time.time()
74
+ response = retrieval_chain.invoke({'input': message})['answer']
75
+ response_time = time.time() - start_time
76
+ if response_time > 6:
77
+ return [(f"Sorry, I couldn't generate a response within 6 seconds. Please try again.", None)]
78
+ history[-1][1] = ""
79
+ for character in response:
80
+ if stop_generation:
81
+ break
82
+ history[-1][1] += character
83
+ time.sleep(0.05)
84
+ yield history
85
+
86
+ def stop_response(dummy_placeholder):
87
+ global stop_generation
88
+ stop_generation = True
89
+
90
+ with gr.Blocks() as demo:
91
+ with gr.Row():
92
+ with gr.Column(scale=2):
93
+ model_input = gr.Image(type="pil", label="Upload Image")
94
+ model_output = gr.Image(type="pil", label="Result")
95
+
96
+ model_btn = gr.Button("Detect Objects")
97
+ model_btn.click(predict_image, inputs=model_input, outputs=model_output)
98
+
99
+ with gr.Column(scale=1):
100
+ chatbot = gr.Chatbot(
101
+ [],
102
+ elem_id="chatbot",
103
+ bubble_full_width=False
104
+ )
105
+
106
+ chat_input = gr.Textbox(interactive=True, placeholder="Enter message...", show_label=False)
107
+ chat_msg = chat_input.submit(add_message, [chatbot, chat_input], [chatbot, chat_input])
108
+ bot_msg = chat_msg.then(bot, chatbot, chatbot, api_name="bot_response")
109
+ bot_msg.then(lambda: gr.Textbox(interactive=True), None, [chat_input])
110
+ chatbot.like(print_like_dislike, None, None)
111
+
112
+ stop_btn = gr.Button("Stop Generation")
113
+ stop_btn.click(stop_response, None, None)
114
+
115
+ demo.queue()
116
+
117
+ if __name__ == "__main__":
118
+ demo.launch()