momondi commited on
Commit
3c770ca
·
verified ·
1 Parent(s): d1008a1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +135 -43
app.py CHANGED
@@ -1,50 +1,147 @@
1
 
2
- import pandas as pd
3
 
4
 
5
- df = pd.read_json("./tourisme_chatbot.json")
6
 
7
- context_data = []
8
- for i in range(len(df)):
9
- context = ""
10
- for j in range(4):
11
- context += df.columns[j]
12
- context += ": "
13
- context += df.iloc[i][j]
14
- context += " "
15
- context_data.append(context)
16
 
17
 
18
- import os
19
 
20
- # Get the secret key from the environment
21
- groq_key = os.environ.get('groq_api_key')
22
 
23
- ## LLM used for RAG
24
- from langchain_groq import ChatGroq
25
 
26
- llm = ChatGroq(model="llama-3.1-70b-versatile",api_key=groq_key)
27
 
28
- ## Embedding model!
29
- from langchain_huggingface import HuggingFaceEmbeddings
30
- embed_model = HuggingFaceEmbeddings(model_name="mixedbread-ai/mxbai-embed-large-v1")
31
 
32
- # create vector store!
33
- from langchain_chroma import Chroma
34
 
35
- vectorstore = Chroma(
36
- collection_name="tourism_dataset_store",
37
- embedding_function=embed_model,
38
- persist_directory="./",
39
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
 
41
- # add data to vector nstore
42
- vectorstore.add_texts(context_data)
43
 
44
- retriever = vectorstore.as_retriever()
 
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  from langchain_core.prompts import PromptTemplate
 
 
47
 
 
48
  template = ("""You are a Moroccan tourism expert.
49
  Use the provided context to answer the question.
50
  If you don't know the answer, say so. Explain your answer in detail.
@@ -55,30 +152,26 @@ template = ("""You are a Moroccan tourism expert.
55
 
56
  rag_prompt = PromptTemplate.from_template(template)
57
 
58
- from langchain_core.output_parsers import StrOutputParser
59
- from langchain_core.runnables import RunnablePassthrough
60
-
61
  rag_chain = (
62
- {"context": retriever, "question": RunnablePassthrough()}
63
  | rag_prompt
64
  | llm
65
  | StrOutputParser()
66
  )
67
 
68
- import gradio as gr
69
-
70
  def rag_memory_stream(text):
 
71
  partial_text = ""
72
  for new_text in rag_chain.stream(text):
73
  partial_text += new_text
74
  yield partial_text
75
 
76
- examples = ['Tourist attraction sites in Morocco', 'What are some fun activities to do in Morocco?']
77
-
78
-
79
 
80
-
81
- title = "Real-time AI App with Groq API and LangChain to Answer Morroco Tourism questions"
82
  demo = gr.Interface(
83
  title=title,
84
  fn=rag_memory_stream,
@@ -88,6 +181,5 @@ demo = gr.Interface(
88
  allow_flagging="never",
89
  )
90
 
91
-
92
  if __name__ == "__main__":
93
- demo.launch()
 
1
 
2
+ # import pandas as pd
3
 
4
 
5
+ # df = pd.read_json("./tourisme_chatbot.json")
6
 
7
+ # context_data = []
8
+ # for i in range(len(df)):
9
+ # context = ""
10
+ # for j in range(4):
11
+ # context += df.columns[j]
12
+ # context += ": "
13
+ # context += df.iloc[i][j]
14
+ # context += " "
15
+ # context_data.append(context)
16
 
17
 
18
+ # import os
19
 
20
+ # # Get the secret key from the environment
21
+ # groq_key = os.environ.get('groq_api_key')
22
 
23
+ # ## LLM used for RAG
24
+ # from langchain_groq import ChatGroq
25
 
26
+ # llm = ChatGroq(model="llama-3.1-70b-versatile",api_key=groq_key)
27
 
28
+ # ## Embedding model!
29
+ # from langchain_huggingface import HuggingFaceEmbeddings
30
+ # embed_model = HuggingFaceEmbeddings(model_name="mixedbread-ai/mxbai-embed-large-v1")
31
 
32
+ # # create vector store!
33
+ # from langchain_chroma import Chroma
34
 
35
+ # vectorstore = Chroma(
36
+ # collection_name="tourism_dataset_store",
37
+ # embedding_function=embed_model,
38
+ # persist_directory="./",
39
+ # )
40
+
41
+ # # add data to vector nstore
42
+ # vectorstore.add_texts(context_data)
43
+
44
+ # retriever = vectorstore.as_retriever()
45
+
46
+ # from langchain_core.prompts import PromptTemplate
47
+
48
+ # template = ("""You are a Moroccan tourism expert.
49
+ # Use the provided context to answer the question.
50
+ # If you don't know the answer, say so. Explain your answer in detail.
51
+ # Do not discuss the context in your response; just provide the answer directly.
52
+ # Context: {context}
53
+ # Question: {question}
54
+ # Answer:""")
55
+
56
+ # rag_prompt = PromptTemplate.from_template(template)
57
+
58
+ # from langchain_core.output_parsers import StrOutputParser
59
+ # from langchain_core.runnables import RunnablePassthrough
60
+
61
+ # rag_chain = (
62
+ # {"context": retriever, "question": RunnablePassthrough()}
63
+ # | rag_prompt
64
+ # | llm
65
+ # | StrOutputParser()
66
+ # )
67
+
68
+ # import gradio as gr
69
+
70
+ # def rag_memory_stream(text):
71
+ # partial_text = ""
72
+ # for new_text in rag_chain.stream(text):
73
+ # partial_text += new_text
74
+ # yield partial_text
75
+
76
+ # examples = ['Tourist attraction sites in Morocco', 'What are some fun activities to do in Morocco?']
77
+
78
+
79
+
80
+
81
+ # title = "Real-time AI App with Groq API and LangChain to Answer Morroco Tourism questions"
82
+ # demo = gr.Interface(
83
+ # title=title,
84
+ # fn=rag_memory_stream,
85
+ # inputs="text",
86
+ # outputs="text",
87
+ # examples=examples,
88
+ # allow_flagging="never",
89
+ # )
90
 
 
 
91
 
92
+ # if __name__ == "__main__":
93
+ # demo.launch()
94
 
95
+ import os
96
+ import pandas as pd
97
+ import gradio as gr
98
+
99
+ # Read JSON file
100
+ df = pd.read_json("./tourisme_chatbot.json")
101
+
102
+ context_data = []
103
+ for i in range(len(df)):
104
+ context = ""
105
+ for j in range(4):
106
+ context += df.columns[j]
107
+ context += ": "
108
+ context += df.iloc[i, j] # Using iloc to avoid the deprecation warning
109
+ context += " "
110
+ context_data.append(context)
111
+
112
+ # Lazy initialization function
113
+ llm = None
114
+ embed_model = None
115
+ vectorstore = None
116
+ groq_key = os.environ.get('groq_api_key')
117
+
118
+ def initialize_model():
119
+ global llm, embed_model, vectorstore
120
+
121
+ # Only initialize the models and vector store when needed
122
+ if llm is None:
123
+ from langchain_groq import ChatGroq
124
+ llm = ChatGroq(model="llama-3.1-70b-versatile", api_key=groq_key)
125
+
126
+ if embed_model is None:
127
+ from langchain_huggingface import HuggingFaceEmbeddings
128
+ embed_model = HuggingFaceEmbeddings(model_name="mixedbread-ai/mxbai-embed-large-v1")
129
+
130
+ if vectorstore is None:
131
+ from langchain_chroma import Chroma
132
+ vectorstore = Chroma(
133
+ collection_name="tourism_dataset_store",
134
+ embedding_function=embed_model,
135
+ persist_directory="./",
136
+ )
137
+ vectorstore.add_texts(context_data) # Adding the context data to the vector store
138
+
139
+ # RAG Chain setup
140
  from langchain_core.prompts import PromptTemplate
141
+ from langchain_core.output_parsers import StrOutputParser
142
+ from langchain_core.runnables import RunnablePassthrough
143
 
144
+ # Define prompt template
145
  template = ("""You are a Moroccan tourism expert.
146
  Use the provided context to answer the question.
147
  If you don't know the answer, say so. Explain your answer in detail.
 
152
 
153
  rag_prompt = PromptTemplate.from_template(template)
154
 
155
+ # Create RAG chain
 
 
156
  rag_chain = (
157
+ {"context": vectorstore.as_retriever(), "question": RunnablePassthrough()}
158
  | rag_prompt
159
  | llm
160
  | StrOutputParser()
161
  )
162
 
163
+ # Function for real-time stream of results
 
164
  def rag_memory_stream(text):
165
+ initialize_model() # Initialize models and vector store if not done yet
166
  partial_text = ""
167
  for new_text in rag_chain.stream(text):
168
  partial_text += new_text
169
  yield partial_text
170
 
171
+ # Gradio Interface setup
172
+ examples = ['Tourist attraction sites in Morocco', 'What are some fun activities to do in Morocco?', 'What can I do in Marrakech 40000 Morocco?']
 
173
 
174
+ title = "Real-time AI App with Groq API and LangChain to Answer Morocco Tourism Questions"
 
175
  demo = gr.Interface(
176
  title=title,
177
  fn=rag_memory_stream,
 
181
  allow_flagging="never",
182
  )
183
 
 
184
  if __name__ == "__main__":
185
+ demo.launch()