1
00:00:00,000 --> 00:00:01,000
Hello guys.

2
00:00:01,000 --> 00:00:06,000
So we are going to continue the discussion with respect to our end to end project, uh, gen AI project,

3
00:00:06,000 --> 00:00:10,000
which is nothing but Q&A conversation with PDF including chat history.

4
00:00:10,000 --> 00:00:15,000
Okay, now um, we will be implementing this completely step by step.

5
00:00:15,000 --> 00:00:19,000
First of all, let's go ahead and start importing all other libraries.

6
00:00:19,000 --> 00:00:26,000
Already we have discussed about this chat history, how to include that inside the chain in our previous

7
00:00:26,000 --> 00:00:27,000
module.

8
00:00:27,000 --> 00:00:28,000
And that module was nothing.

9
00:00:28,000 --> 00:00:32,000
But, uh, it was something related to conversational queue and a chat bot.

10
00:00:32,000 --> 00:00:36,000
So a detailed video in the previous module has been already uploaded.

11
00:00:36,000 --> 00:00:38,000
Now this will be completely an end to end project.

12
00:00:38,000 --> 00:00:41,000
So first of all we will go ahead and import Streamlit as St.

13
00:00:41,000 --> 00:00:44,000
Now this Streamlit that we are specifically going to use.

14
00:00:44,000 --> 00:00:48,000
Other than that I will be also importing some of the important libraries.

15
00:00:48,000 --> 00:00:52,000
So first of all, let me just go ahead and import two important libraries.

16
00:00:52,000 --> 00:00:56,000
One is called as create History aware Retriever and create retriever chain.

17
00:00:56,000 --> 00:00:57,000
Okay.

18
00:00:57,000 --> 00:01:00,000
So first of all this will basically be used to create the retriever chain.

19
00:01:00,000 --> 00:01:05,000
And uh if I want to add history along with the history prompt I'll be using this Create history aware

20
00:01:05,000 --> 00:01:06,000
retriever.

21
00:01:06,000 --> 00:01:07,000
Right.

22
00:01:07,000 --> 00:01:09,000
Uh, this is just like a retriever.

23
00:01:09,000 --> 00:01:14,000
This function will be just used to create a retriever with chat history functionalities.

24
00:01:14,000 --> 00:01:14,000
Along.

25
00:01:14,000 --> 00:01:18,000
Along with that I will be using this create stuffed document chain so that we can combine the entire

26
00:01:18,000 --> 00:01:20,000
document and send it to the context.

27
00:01:20,000 --> 00:01:23,000
Then we are importing our vector store db that is chroma.

28
00:01:23,000 --> 00:01:25,000
You can also go with files.

29
00:01:25,000 --> 00:01:26,000
It is up to you.

30
00:01:26,000 --> 00:01:32,000
Uh, then uh let's go ahead and import our chat history chat message history.

31
00:01:32,000 --> 00:01:36,000
So that will be available inside your Langton underscore community dot chat underscore message underscore

32
00:01:36,000 --> 00:01:38,000
history already.

33
00:01:38,000 --> 00:01:41,000
Uh, all these libraries has already been installed in this requirement dot requirements.txt.

34
00:01:42,000 --> 00:01:45,000
So please make sure that you have this requirement dot txt.

35
00:01:45,000 --> 00:01:47,000
And this is how the entire folder structure needs to be created.

36
00:01:47,000 --> 00:01:48,000
Like right?

37
00:01:48,000 --> 00:01:50,000
I have all the projects over here.

38
00:01:50,000 --> 00:01:53,000
This is my requirement dot txt with respect to all the files right?

39
00:01:53,000 --> 00:01:58,000
So please make sure that uh, so you don't have to even worry about any installation at arch.

40
00:01:58,000 --> 00:01:58,000
Okay.

41
00:01:58,000 --> 00:02:04,000
Then uh, you have this entire, uh, base chart message history over here.

42
00:02:04,000 --> 00:02:06,000
So I will also go ahead and import this.

43
00:02:06,000 --> 00:02:07,000
Okay.

44
00:02:07,000 --> 00:02:13,000
Then, uh, coming to the long chain underscore code or prompts, that is chat prompt template and message

45
00:02:13,000 --> 00:02:16,000
placeholder that also we will be using it okay.

46
00:02:16,000 --> 00:02:20,000
This message placeholder is to define the uh session key.

47
00:02:21,000 --> 00:02:25,000
Uh and what kind of session key I'm actually storing all the conversation hit okay.

48
00:02:25,000 --> 00:02:29,000
And this is my base chat message history, which we have already discussed.

49
00:02:29,000 --> 00:02:35,000
Then, uh, we will also be importing, uh, a couple of libraries, which is called as Chat Grok.

50
00:02:35,000 --> 00:02:40,000
So let's go ahead and uh, import this something called as chat grok over here.

51
00:02:40,000 --> 00:02:47,000
So chat grok will be specifically used uh, with respect to um, the OpenAI API key that I'm actually

52
00:02:47,000 --> 00:02:48,000
going to use.

53
00:02:48,000 --> 00:02:51,000
So sorry, not OpenAI grok API key that I'm actually going to use.

54
00:02:51,000 --> 00:02:54,000
Uh, and here I'm actually using grok.

55
00:02:54,000 --> 00:02:57,000
Uh, the model that is nothing but Google Gamma two.

56
00:02:57,000 --> 00:02:57,000
Okay.

57
00:02:57,000 --> 00:03:02,000
Along with this I will also go ahead and import Huggingface embeddings.

58
00:03:02,000 --> 00:03:07,000
So here is my Huggingface embeddings so that I will be able to import all my embeddings itself in order

59
00:03:07,000 --> 00:03:08,000
to import it.

60
00:03:08,000 --> 00:03:12,000
Uh, quickly I will go ahead and import two libraries that is import OS.

61
00:03:12,000 --> 00:03:12,000
Okay.

62
00:03:12,000 --> 00:03:19,000
And uh, I will say from dot env import load underscore dot env.

63
00:03:20,000 --> 00:03:20,000
Okay.

64
00:03:20,000 --> 00:03:23,000
And I will go ahead and initialize this load underscore dot env.

65
00:03:23,000 --> 00:03:28,000
And let me quickly go ahead and initialize this h.f underscore token which is present in my environment.

66
00:03:28,000 --> 00:03:28,000
Variable right.

67
00:03:28,000 --> 00:03:29,000
H.f underscore token.

68
00:03:29,000 --> 00:03:32,000
And this I have already shown you how to properly load it.

69
00:03:33,000 --> 00:03:37,000
Then, uh, I will go ahead and create my embeddings over here.

70
00:03:37,000 --> 00:03:40,000
So this is my embeddings that I'm actually going to use hugging face embedding.

71
00:03:40,000 --> 00:03:42,000
And the model name is this one right.

72
00:03:42,000 --> 00:03:45,000
All mini lm l6 v2 okay.

73
00:03:45,000 --> 00:03:49,000
So this is my model that we are specifically going to use.

74
00:03:49,000 --> 00:03:50,000
Perfect.

75
00:03:50,000 --> 00:03:52,000
Till here everything looks good enough.

76
00:03:52,000 --> 00:03:56,000
Uh, and now let us go ahead and see some more libraries that will be requiring.

77
00:03:56,000 --> 00:03:57,000
Okay.

78
00:03:57,000 --> 00:04:02,000
Uh, so I will be importing some three important libraries that I'm actually two important libraries

79
00:04:02,000 --> 00:04:04,000
that I'm actually going to use over here.

80
00:04:04,000 --> 00:04:08,000
One is recursive character text splitter and pi PDF loader.

81
00:04:08,000 --> 00:04:09,000
Right.

82
00:04:09,000 --> 00:04:11,000
This is basically to load the PDF itself.

83
00:04:11,000 --> 00:04:11,000
Okay.

84
00:04:11,000 --> 00:04:20,000
So uh, I think almost all the libraries has been, uh, taken place and has been, uh, imported.

85
00:04:20,000 --> 00:04:25,000
One final, uh, library that I want to import is with respect to the runnable history.

86
00:04:25,000 --> 00:04:25,000
Okay.

87
00:04:25,000 --> 00:04:29,000
So here we are going to use this runnable with his message history.

88
00:04:29,000 --> 00:04:34,000
The reason why we are using this is that we will be able to create our conversational queue and a chatbot

89
00:04:34,000 --> 00:04:37,000
with the help of, uh, the chat history that we have.

90
00:04:37,000 --> 00:04:38,000
Right.

91
00:04:38,000 --> 00:04:44,000
So here what we will be doing is that, uh, we will be using this to create our retriever, uh, when

92
00:04:44,000 --> 00:04:48,000
our, when we are creating, our retriever will be making sure that when we create that specific agent

93
00:04:48,000 --> 00:04:54,000
to run, the retriever will also be using this library to probably include the chat history.

94
00:04:54,000 --> 00:04:56,000
I'll be talking about more of this when we go ahead.

95
00:04:56,000 --> 00:04:57,000
Okay.

96
00:04:57,000 --> 00:05:00,000
Now, quickly, uh, let's go ahead and do this.

97
00:05:00,000 --> 00:05:02,000
And, uh, here I have already imported all the libraries.

98
00:05:02,000 --> 00:05:05,000
So first of all, we will go ahead and set up our Streamlit app.

99
00:05:05,000 --> 00:05:06,000
Okay.

100
00:05:06,000 --> 00:05:08,000
I will write s t dot title.

101
00:05:08,000 --> 00:05:19,000
And here I'm going to basically say conversational conversational rag with PDF uploads and chat history.

102
00:05:19,000 --> 00:05:20,000
Okay.

103
00:05:20,000 --> 00:05:24,000
And chat history.

104
00:05:24,000 --> 00:05:26,000
So everything is basically going to get included over here.

105
00:05:26,000 --> 00:05:29,000
Then I will go ahead and write SD Dot write.

106
00:05:29,000 --> 00:05:32,000
And here let's go ahead and include this.

107
00:05:32,000 --> 00:05:38,000
I will say upload PDFs okay.

108
00:05:39,000 --> 00:05:41,000
And chat with the content okay.

109
00:05:42,000 --> 00:05:44,000
Chat with the content.

110
00:05:44,000 --> 00:05:44,000
Perfect.

111
00:05:45,000 --> 00:05:54,000
Now, uh, let me go ahead and input the grok grok API key okay.

112
00:05:54,000 --> 00:05:59,000
And here I'm just going to go ahead and create my API key which I will be writing s t dot text underscore

113
00:05:59,000 --> 00:06:00,000
input.

114
00:06:02,000 --> 00:06:09,000
And enter your grok API key.

115
00:06:10,000 --> 00:06:13,000
And here specifically I am going to do one thing.

116
00:06:13,000 --> 00:06:17,000
I will just go ahead and write my type as password.

117
00:06:19,000 --> 00:06:19,000
Okay.

118
00:06:20,000 --> 00:06:21,000
Type as password.

119
00:06:21,000 --> 00:06:23,000
This will basically be my API key over here.

120
00:06:24,000 --> 00:06:24,000
Let's see.

121
00:06:24,000 --> 00:06:27,000
This looks fine or not okay I forgot to give comma.

122
00:06:27,000 --> 00:06:30,000
Okay so this is for my API key.

123
00:06:30,000 --> 00:06:38,000
And as usual I will go ahead and see check if grok API key is.

124
00:06:41,000 --> 00:06:43,000
Is provided okay so I'll write.

125
00:06:43,000 --> 00:06:49,000
Hey if API underscore key is equal to or double colon I will just go ahead.

126
00:06:49,000 --> 00:06:54,000
And uh if the API key is basically given I will just go ahead and initialize my LLM model.

127
00:06:54,000 --> 00:06:54,000
Right.

128
00:06:54,000 --> 00:06:56,000
So here I will go ahead and say chat.

129
00:06:56,000 --> 00:07:04,000
Grok the grok API key that I really want to give over here will be initialized to my API key.

130
00:07:06,000 --> 00:07:08,000
API key okay.

131
00:07:08,000 --> 00:07:11,000
The second parameter that I want to give is model underscore name.

132
00:07:12,000 --> 00:07:20,000
Now with respect to this particular model, uh, I will be using our Gamma2 model, uh, for the same

133
00:07:20,000 --> 00:07:20,000
purpose.

134
00:07:20,000 --> 00:07:25,000
So let's go ahead and go to my grok cloud.

135
00:07:27,000 --> 00:07:27,000
Okay.

136
00:07:28,000 --> 00:07:33,000
Grok cloud or I will just go ahead and click on this okay.

137
00:07:33,000 --> 00:07:35,000
I can use any of this model.

138
00:07:35,000 --> 00:07:35,000
It is up to you.

139
00:07:35,000 --> 00:07:38,000
So I will use gamma two nine be it okay.

140
00:07:38,000 --> 00:07:39,000
So gamma two.

141
00:07:41,000 --> 00:07:42,000
Gamma.

142
00:07:45,000 --> 00:07:46,000
Two.

143
00:07:48,000 --> 00:07:48,000
Nine.

144
00:07:48,000 --> 00:07:51,000
Be it.

145
00:07:54,000 --> 00:07:56,000
Okay, I'll use this specific model.

146
00:07:57,000 --> 00:07:57,000
Perfect.

147
00:07:58,000 --> 00:08:00,000
This will basically be my model name.

148
00:08:00,000 --> 00:08:05,000
So till here, everything looks absolutely fine and absolutely good itself.

149
00:08:05,000 --> 00:08:11,000
Uh, I think we should proceed, uh, in developing this particular entire application.

150
00:08:11,000 --> 00:08:11,000
So.

151
00:08:11,000 --> 00:08:17,000
So here, uh, as soon as I make sure that I initialize my LM model, I also make to probably create

152
00:08:17,000 --> 00:08:18,000
my session ID.

153
00:08:18,000 --> 00:08:23,000
So I will go ahead and write session ID is equal to SD dot text underscore input.

154
00:08:24,000 --> 00:08:30,000
And here I'm going to basically give my session ID.

155
00:08:31,000 --> 00:08:31,000
Okay.

156
00:08:31,000 --> 00:08:34,000
And here I'm going to basically go ahead and write.

157
00:08:34,000 --> 00:08:37,000
My value is equal to some session okay.

158
00:08:37,000 --> 00:08:42,000
You can put anything as you want but I will just keep it to default okay.

159
00:08:42,000 --> 00:08:46,000
Default default underscore session okay.

160
00:08:46,000 --> 00:08:49,000
So this will basically be my session ID okay.

161
00:08:49,000 --> 00:08:53,000
Now this is for my chat interface.

162
00:08:53,000 --> 00:08:53,000
Right.

163
00:08:53,000 --> 00:08:56,000
So this is my chat interface.

164
00:08:57,000 --> 00:08:59,000
What we are specifically using.

165
00:08:59,000 --> 00:08:59,000
Okay.

166
00:08:59,000 --> 00:09:06,000
In the next uh, what we are basically going to do is that I'm also going to state fully manage the

167
00:09:06,000 --> 00:09:07,000
chat history.

168
00:09:08,000 --> 00:09:11,000
I have to manage it with the help of session states.

169
00:09:11,000 --> 00:09:11,000
Okay.

170
00:09:14,000 --> 00:09:18,000
Now here I will say if I'll create a variable called a store.

171
00:09:18,000 --> 00:09:19,000
Okay.

172
00:09:19,000 --> 00:09:27,000
If store not in session, state not in session, you'll be understanding where we will specifically

173
00:09:27,000 --> 00:09:28,000
be using the store.

174
00:09:28,000 --> 00:09:33,000
If you remember in the Get session history in conversational Q&A when we discussed about.

175
00:09:33,000 --> 00:09:33,000
Right.

176
00:09:33,000 --> 00:09:40,000
So if I go ahead and write not in store dot session underscore state, I am just going to go ahead and

177
00:09:40,000 --> 00:09:42,000
write s t dot session.

178
00:09:43,000 --> 00:09:46,000
Session underscore state dot store.

179
00:09:46,000 --> 00:09:49,000
We'll go ahead and initialize to this empty dictionary.

180
00:09:49,000 --> 00:09:51,000
And inside this only we'll be having all the key value pairs.

181
00:09:51,000 --> 00:09:52,000
Right.

182
00:09:52,000 --> 00:09:57,000
Uh like of the messages of the I message content, human message content, all those things.

183
00:09:57,000 --> 00:10:00,000
Now I'll go ahead and create my uploaded files.

184
00:10:00,000 --> 00:10:03,000
So this will be upload button right.

185
00:10:03,000 --> 00:10:06,000
I will say hey SD dot file uploader okay.

186
00:10:06,000 --> 00:10:17,000
And I'll say hey choose choose a PDF file okay a PDF file file okay.

187
00:10:17,000 --> 00:10:21,000
And here I will say hey type is equal to PDF okay.

188
00:10:22,000 --> 00:10:24,000
And I will also say accept multiple files.

189
00:10:24,000 --> 00:10:28,000
I'll keep it to false because I just want to try with a single PDF.

190
00:10:28,000 --> 00:10:31,000
But if you want to try with multiple PDF, just go ahead and give this as true.

191
00:10:31,000 --> 00:10:33,000
Okay, perfect.

192
00:10:33,000 --> 00:10:36,000
Uh, so everything looks good till here.

193
00:10:36,000 --> 00:10:40,000
So I will go ahead and process my uploaded files.

194
00:10:40,000 --> 00:10:40,000
Okay.

195
00:10:40,000 --> 00:10:48,000
So here what I will do is that I will go ahead and write if uploaded underscore files.

196
00:10:48,000 --> 00:10:53,000
If the file is basically uploaded I will go ahead and create a document okay.

197
00:10:53,000 --> 00:10:57,000
This will basically be my document because in PDF I may have multiple files.

198
00:10:57,000 --> 00:10:58,000
Right?

199
00:10:58,000 --> 00:10:59,000
I may have multiple pages.

200
00:10:59,000 --> 00:11:04,000
So here I'm basically going to write documents and I'll say hey for uploaded files.

201
00:11:04,000 --> 00:11:12,000
So or uploaded underscore files in sorry file in uploaded files.

202
00:11:12,000 --> 00:11:18,000
So let's say even though I make this as true, let's make this as true I can have an option to probably

203
00:11:18,000 --> 00:11:20,000
select multiple files also.

204
00:11:20,000 --> 00:11:25,000
Okay, it is up to you whether you want to go with single or multiple, but I will write a generic code

205
00:11:25,000 --> 00:11:29,000
where I'll say that hey, for each and every file that is basically uploaded, we'll take that file.

206
00:11:29,000 --> 00:11:36,000
And first of all, we'll store that file file in our local folder because see when we upload it right.

207
00:11:36,000 --> 00:11:38,000
There is no specific, uh URL.

208
00:11:38,000 --> 00:11:39,000
Everything will be in the form of memory.

209
00:11:39,000 --> 00:11:45,000
So it is necessary that we create some temporary, uh, pdf file in our local.

210
00:11:45,000 --> 00:11:45,000
Right.

211
00:11:45,000 --> 00:11:51,000
So here I will go ahead and say temp uh, instead of writing temp temp temp pdf.

212
00:11:51,000 --> 00:11:53,000
Okay I'll go and write temp PDF.

213
00:11:53,000 --> 00:11:59,000
And this is a F string that I will be using and I'll upload I'll create this with the name of temp dot

214
00:11:59,000 --> 00:12:00,000
pdf.

215
00:12:00,000 --> 00:12:00,000
Okay.

216
00:12:00,000 --> 00:12:08,000
Now what we will do we will open this PDF I'll say with open temp PDF comma.

217
00:12:08,000 --> 00:12:11,000
I'll send right bytes mode okay.

218
00:12:11,000 --> 00:12:13,000
I'll open this PDF and I'll write as file.

219
00:12:13,000 --> 00:12:17,000
So once I open this I will go ahead and write file dot write.

220
00:12:17,000 --> 00:12:25,000
And here I'm just going to go ahead and create my uploaded file dot get value.

221
00:12:27,000 --> 00:12:28,000
Okay.

222
00:12:28,000 --> 00:12:35,000
So finally if you go ahead and see file underscore name is equal to uploaded file dot name okay.

223
00:12:35,000 --> 00:12:39,000
Whatever name will be there I will also take give that particular file name if I want okay.

224
00:12:39,000 --> 00:12:41,000
All the information from that.

225
00:12:41,000 --> 00:12:45,000
So in short what I'm doing is that I'm opening that file that I have uploaded, I'm reading all the

226
00:12:45,000 --> 00:12:47,000
values and I'm also reading the name.

227
00:12:47,000 --> 00:12:47,000
Okay.

228
00:12:48,000 --> 00:12:53,000
Now finally, in order to open this file and get that content, what I will do, I'll create a loader

229
00:12:53,000 --> 00:12:59,000
and I'll write, hey, let's go ahead and use this py pdf loader which will be useful in call loading

230
00:12:59,000 --> 00:13:00,000
your files.

231
00:13:00,000 --> 00:13:03,000
So here I'm going to write temp dir okay.

232
00:13:03,000 --> 00:13:05,000
Oh sorry temp PDF.

233
00:13:05,000 --> 00:13:06,000
It should not be Dir.

234
00:13:06,000 --> 00:13:07,000
It should be PDF.

235
00:13:07,000 --> 00:13:10,000
Whatever PDF file is there we are going to load.

236
00:13:10,000 --> 00:13:14,000
And then I have docs where I'll specifically write loader dot load.

237
00:13:14,000 --> 00:13:15,000
Okay.

238
00:13:16,000 --> 00:13:18,000
Uh so all these things is specifically there.

239
00:13:18,000 --> 00:13:20,000
Now, what I will do, I will go ahead and write documents.

240
00:13:20,000 --> 00:13:22,000
Dot extend.

241
00:13:22,000 --> 00:13:22,000
Okay.

242
00:13:22,000 --> 00:13:26,000
And here I'm going to go ahead and create my docs okay.

243
00:13:26,000 --> 00:13:31,000
So I'm saying hey let's go ahead and append all the docs over here right now.

244
00:13:31,000 --> 00:13:36,000
Uh, what we are basically going to do is that, uh, we are going to split and create embeddings for

245
00:13:36,000 --> 00:13:37,000
the documents.

246
00:13:37,000 --> 00:13:39,000
So here I will just go and copy and paste it.

247
00:13:39,000 --> 00:13:45,000
So instead of using OpenAI embeddings I'm going to use embeddings, whatever embeddings we have discussed

248
00:13:45,000 --> 00:13:46,000
over here.

249
00:13:46,000 --> 00:13:48,000
So let me just go ahead.

250
00:13:48,000 --> 00:13:50,000
But I think this is common code right.

251
00:13:50,000 --> 00:13:52,000
Split and create embeddings for documents.

252
00:13:52,000 --> 00:13:55,000
First of all we'll use recursive character text later.

253
00:13:55,000 --> 00:13:58,000
I'm using a chunk size of 5000 chunk overlap of.

254
00:13:58,000 --> 00:14:00,000
Let's make it to 500 at least.

255
00:14:01,000 --> 00:14:01,000
Okay.

256
00:14:01,000 --> 00:14:04,000
Then you have this text splitter dot split documents of documents.

257
00:14:04,000 --> 00:14:05,000
Then I have the splits.

258
00:14:05,000 --> 00:14:10,000
Then I'm using chroma to probably split all the documents and store it in my embedding vectors.

259
00:14:10,000 --> 00:14:10,000
Right.

260
00:14:10,000 --> 00:14:13,000
And finally we are converting this into a retriever.

261
00:14:13,000 --> 00:14:13,000
Okay.

262
00:14:13,000 --> 00:14:20,000
Now, uh, what I am actually going to do after this is that I am going to go ahead and I will just

263
00:14:20,000 --> 00:14:22,000
go ahead and create my new prompt.

264
00:14:22,000 --> 00:14:23,000
Okay.

265
00:14:23,000 --> 00:14:25,000
Now this new prompt will have context.

266
00:14:25,000 --> 00:14:31,000
So I'll say contextualize underscore cue system prompt.

267
00:14:31,000 --> 00:14:34,000
This is basically my system prompt that I really want to create.

268
00:14:34,000 --> 00:14:35,000
Okay.

269
00:14:35,000 --> 00:14:38,000
And here I will be writing this one.

270
00:14:38,000 --> 00:14:49,000
I'll say hey, given a chat history and the latest user question okay.

271
00:14:50,000 --> 00:14:51,000
Question okay.

272
00:14:51,000 --> 00:14:54,000
Along with this I will just put some information over here.

273
00:14:56,000 --> 00:14:58,000
I can also write all this like this.

274
00:14:58,000 --> 00:14:59,000
Right.

275
00:14:59,000 --> 00:15:06,000
So here you can see I'm saying hey, given a chat history and the latest user question which might reference

276
00:15:06,000 --> 00:15:11,000
context in the chat history formula to standalone application question which can be understood without

277
00:15:11,000 --> 00:15:17,000
the chat history, do not answer the question, just reformulate it if needed and otherwise return this.

278
00:15:17,000 --> 00:15:21,000
So this is a kind of a system problem that we are specifically giving to our LM model.

279
00:15:21,000 --> 00:15:25,000
And for this we will be creating a prompt template.

280
00:15:25,000 --> 00:15:28,000
So for this I will just go ahead and like like this.

281
00:15:28,000 --> 00:15:33,000
So I'll say contextualize Q prompt where I'm using chat prompt template dot from underscore message

282
00:15:33,000 --> 00:15:37,000
where I'll give my system which will be assigning to this particular system prompt.

283
00:15:38,000 --> 00:15:41,000
So this is the set of instruction that I'm giving to my LM model.

284
00:15:41,000 --> 00:15:45,000
Then I am going to create a placeholder which has this chart underscore history.

285
00:15:45,000 --> 00:15:48,000
So in my session I will go ahead and create this chart underscore history.

286
00:15:48,000 --> 00:15:50,000
Just in some time I will go ahead and create it.

287
00:15:50,000 --> 00:15:51,000
Don't worry.

288
00:15:51,000 --> 00:15:55,000
Then I have this human which respect to any input that I specifically give.

289
00:15:55,000 --> 00:15:55,000
Okay.

290
00:15:55,000 --> 00:16:00,000
Now after this what I will do, I will since I have created this placeholder for the chart history,

291
00:16:00,000 --> 00:16:04,000
I can go ahead and create my history underscore aware underscore retriever.

292
00:16:04,000 --> 00:16:05,000
Right.

293
00:16:05,000 --> 00:16:08,000
So that is where I am going to create my retriever.

294
00:16:08,000 --> 00:16:08,000
Right.

295
00:16:08,000 --> 00:16:10,000
So and this retriever will be nothing.

296
00:16:10,000 --> 00:16:14,000
But uh it will be a retriever with memory.

297
00:16:14,000 --> 00:16:14,000
Okay.

298
00:16:14,000 --> 00:16:16,000
So here I'm going to use this.

299
00:16:16,000 --> 00:16:21,000
I'll go ahead and call this create history retriever uh, aware retriever here I'm going to give three

300
00:16:21,000 --> 00:16:29,000
information LM retriever along with this whatever prompt that I have actually designed over here, this

301
00:16:29,000 --> 00:16:31,000
prompt and this chat history will be referring to that.

302
00:16:31,000 --> 00:16:38,000
So this basically means this retriever has a powerful feature of this particular chat history where

303
00:16:38,000 --> 00:16:40,000
it will be able to store all the information.

304
00:16:40,000 --> 00:16:41,000
Okay.

305
00:16:41,000 --> 00:16:45,000
So yes, uh, this was about this chat aware history retriever okay.

306
00:16:46,000 --> 00:16:52,000
Now finally what I will do, I will go ahead and create my answer question prompt okay.

307
00:16:52,000 --> 00:16:54,000
Answer question prompt.

308
00:16:54,000 --> 00:16:59,000
And let me just go ahead and write this particular prompt because this prompt will be based on the context

309
00:16:59,000 --> 00:17:00,000
okay.

310
00:17:00,000 --> 00:17:03,000
So here I have created a system prompt okay.

311
00:17:03,000 --> 00:17:03,000
Quickly.

312
00:17:04,000 --> 00:17:07,000
And this system prompt says that hey you are an assistant for the question answer task.

313
00:17:07,000 --> 00:17:11,000
Use the following pieces of retrieve context to answer the question.

314
00:17:11,000 --> 00:17:12,000
If you don't know the answer, say that you don't know.

315
00:17:12,000 --> 00:17:16,000
Use three sentence maximum and keep the answer concise.

316
00:17:16,000 --> 00:17:16,000
New line.

317
00:17:16,000 --> 00:17:19,000
And here we are passing this particular context.

318
00:17:19,000 --> 00:17:21,000
And this context will be replaced by the stuff document chain.

319
00:17:21,000 --> 00:17:21,000
Right.

320
00:17:22,000 --> 00:17:24,000
So this is my system prompt.

321
00:17:24,000 --> 00:17:28,000
Now I will go ahead and create this particular prompt for this kind of question.

322
00:17:28,000 --> 00:17:33,000
I will say queue a prompt and from message I'll be using this again.

323
00:17:33,000 --> 00:17:34,000
I'm using this placeholder.

324
00:17:34,000 --> 00:17:37,000
This and message that I'm actually giving is input okay.

325
00:17:37,000 --> 00:17:41,000
So uh, almost uh, this is specifically done.

326
00:17:41,000 --> 00:17:42,000
Okay.

327
00:17:42,000 --> 00:17:43,000
And it is up to you.

328
00:17:43,000 --> 00:17:45,000
Like how you really want to create this and all.

329
00:17:45,000 --> 00:17:46,000
Okay.

330
00:17:46,000 --> 00:17:51,000
But at the end of the day, what I will be doing is that, uh, I will make sure that I will integrate

331
00:17:51,000 --> 00:17:54,000
this particular prompt with this history aware retrieval.

332
00:17:54,000 --> 00:17:54,000
Okay.

333
00:17:55,000 --> 00:18:00,000
So now in the next step, what I will say, I will say, hey, let's go ahead and create our question

334
00:18:00,000 --> 00:18:02,000
answer chain okay.

335
00:18:02,000 --> 00:18:05,000
And I'll say create stop document chain.

336
00:18:05,000 --> 00:18:08,000
So here I'm going to use this here I'm going to give two parameters.

337
00:18:08,000 --> 00:18:12,000
One is uh lm and one is QA prompt.

338
00:18:12,000 --> 00:18:13,000
Right.

339
00:18:13,000 --> 00:18:17,000
Because this creates a document chain will be replacing, uh, the entire documents over here in the

340
00:18:17,000 --> 00:18:18,000
context.

341
00:18:18,000 --> 00:18:21,000
So the two information is basically given LM and QA prompt.

342
00:18:21,000 --> 00:18:21,000
Okay.

343
00:18:22,000 --> 00:18:27,000
Then finally I'll go ahead and create my wrap chain which will be nothing but create a retrieval chain

344
00:18:27,000 --> 00:18:28,000
okay.

345
00:18:28,000 --> 00:18:32,000
And inside this retrieval chain I will be using a history aware retrieval.

346
00:18:32,000 --> 00:18:35,000
And then you'll also be using this question answer chain.

347
00:18:35,000 --> 00:18:40,000
So in short I have combined this history aware retrieval with the recent QA prompt that I've actually

348
00:18:40,000 --> 00:18:41,000
used.

349
00:18:41,000 --> 00:18:41,000
Okay.

350
00:18:41,000 --> 00:18:45,000
So this basically gets my rag underscore chain.

351
00:18:47,000 --> 00:18:52,000
So guys now let's go ahead and uh you know we have already created this rack chain.

352
00:18:52,000 --> 00:18:59,000
But as you all far remember, you know in a conversational Q&A history or chat bot module, we had also

353
00:18:59,000 --> 00:19:02,000
discussed something about creating a get session history function.

354
00:19:02,000 --> 00:19:10,000
So here we are just going to go ahead and write get session history, get session history.

355
00:19:10,000 --> 00:19:12,000
And we will create the specific function.

356
00:19:12,000 --> 00:19:13,000
And the function.

357
00:19:13,000 --> 00:19:21,000
Main aim will be that whenever we give any session ID okay it should return back our base chat history.

358
00:19:21,000 --> 00:19:22,000
Message history.

359
00:19:22,000 --> 00:19:22,000
Right.

360
00:19:22,000 --> 00:19:24,000
So here what we'll do.

361
00:19:24,000 --> 00:19:29,000
We'll write if s t dot session or sorry.

362
00:19:29,000 --> 00:19:37,000
Or I'll just go ahead and write if session underscore id not in s t dot session underscore id state

363
00:19:37,000 --> 00:19:38,000
dot store.

364
00:19:38,000 --> 00:19:41,000
Because inside this only we'll go ahead and check it.

365
00:19:41,000 --> 00:19:46,000
And this is where we are going to probably put all our session ID automatically get stored inside this.

366
00:19:46,000 --> 00:19:47,000
Right?

367
00:19:47,000 --> 00:19:54,000
So I'll say PT dot session state dot store, dot store.

368
00:19:54,000 --> 00:20:01,000
And here I'm going to give my session ID which will be equal to our chat message history and this chat

369
00:20:01,000 --> 00:20:02,000
message history.

370
00:20:02,000 --> 00:20:02,000
What it will do.

371
00:20:02,000 --> 00:20:07,000
All the conversation that is basically happening with this particular session ID, it will get stored

372
00:20:07,000 --> 00:20:12,000
over here, and from here it will go to this particular, uh, you know, the session ID itself.

373
00:20:12,000 --> 00:20:13,000
It will get saved over there.

374
00:20:13,000 --> 00:20:18,000
Then finally we go ahead and return this s t dot.

375
00:20:20,000 --> 00:20:24,000
Session state dot store.

376
00:20:25,000 --> 00:20:29,000
And here I'm going to basically use my session underscore ID.

377
00:20:29,000 --> 00:20:30,000
Perfect.

378
00:20:30,000 --> 00:20:34,000
So this is the same store that we created on top right.

379
00:20:34,000 --> 00:20:37,000
So the same right which is a key value pairs.

380
00:20:37,000 --> 00:20:38,000
So yes.

381
00:20:38,000 --> 00:20:41,000
Uh, once this is done this is the function that we have actually created.

382
00:20:41,000 --> 00:20:46,000
Now I'm going to go ahead and create my conversational rag chain.

383
00:20:47,000 --> 00:20:53,000
So I'm going to write conversational rag underscore chain which will be equal to runnable message history.

384
00:20:53,000 --> 00:20:57,000
And here I will be giving my information like rack chain.

385
00:20:57,000 --> 00:21:01,000
Then I have my function which is called as get session history.

386
00:21:01,000 --> 00:21:05,000
The third thing that I'm actually going to give is my input key message or input message key.

387
00:21:05,000 --> 00:21:07,000
As you know what is the input that I'm giving.

388
00:21:07,000 --> 00:21:10,000
So I'm giving basically input right.

389
00:21:10,000 --> 00:21:15,000
And along with this you should also know which is my history message key.

390
00:21:15,000 --> 00:21:17,000
History message key is nothing but chat history.

391
00:21:17,000 --> 00:21:23,000
So automatically this basically comes to know that where it needs to save it, uh, all the chat session.

392
00:21:23,000 --> 00:21:27,000
And finally your output message key which will be assigned to your answer.

393
00:21:28,000 --> 00:21:28,000
Right.

394
00:21:28,000 --> 00:21:32,000
Your output message key means whichever response you will be getting that will be stored in the specific

395
00:21:32,000 --> 00:21:33,000
output.

396
00:21:33,000 --> 00:21:34,000
Okay.

397
00:21:34,000 --> 00:21:36,000
So till here, everything looks good.

398
00:21:36,000 --> 00:21:41,000
Uh, now let's start and write our code as soon as we get our input.

399
00:21:41,000 --> 00:21:44,000
Uh, that is the next thing that we really need to write.

400
00:21:44,000 --> 00:21:47,000
But I think till here, everything looks good.

401
00:21:47,000 --> 00:21:50,000
So this is my uploaded file.

402
00:21:51,000 --> 00:21:55,000
Uh, with respect to the uploaded file, we are able to see each and every thing.

403
00:21:55,000 --> 00:22:00,000
This is good enough, and we have our system prompt everything as such.

404
00:22:00,000 --> 00:22:01,000
Okay.

405
00:22:01,000 --> 00:22:05,000
I think one condition I may have missed somewhere.

406
00:22:05,000 --> 00:22:05,000
Okay.

407
00:22:06,000 --> 00:22:08,000
Uh, one, let me just go ahead and verify this here.

408
00:22:08,000 --> 00:22:11,000
I've given my API key here.

409
00:22:11,000 --> 00:22:12,000
I have checked the condition.

410
00:22:12,000 --> 00:22:16,000
Here is my uploaded file with respect to uploaded file.

411
00:22:16,000 --> 00:22:18,000
I have my text splitter then.

412
00:22:18,000 --> 00:22:19,000
Okay.

413
00:22:19,000 --> 00:22:19,000
Yeah.

414
00:22:19,000 --> 00:22:25,000
So this context splitter needs to be created all inside this if condition itself okay.

415
00:22:25,000 --> 00:22:30,000
So this is one of the changes that I will do I'll go ahead and press shift tab okay.

416
00:22:30,000 --> 00:22:33,000
So please make sure that you do these changes.

417
00:22:33,000 --> 00:22:35,000
It needs to be inside this right if condition.

418
00:22:35,000 --> 00:22:40,000
Because once I need to have the documents over here right then only I should be able to go ahead and

419
00:22:40,000 --> 00:22:41,000
create all this chain.

420
00:22:41,000 --> 00:22:43,000
If I do not have the documents, then it will be of no use.

421
00:22:43,000 --> 00:22:44,000
Okay?

422
00:22:44,000 --> 00:22:46,000
So please make sure that you make these changes.

423
00:22:46,000 --> 00:22:46,000
Okay?

424
00:22:46,000 --> 00:22:49,000
Just go over here and press select from here.

425
00:22:49,000 --> 00:22:51,000
This this entire the from the text editor code.

426
00:22:51,000 --> 00:22:54,000
It should be inside this if if block okay.

427
00:22:54,000 --> 00:22:55,000
Perfect.

428
00:22:55,000 --> 00:22:55,000
Until here.

429
00:22:55,000 --> 00:22:56,000
Everything looks good enough.

430
00:22:56,000 --> 00:23:02,000
And, uh, now, uh, the next thing that I am actually going to do is that after creating this conversational

431
00:23:02,000 --> 00:23:05,000
Q&A chatbot is that let's go ahead and create my user input.

432
00:23:05,000 --> 00:23:08,000
So I will say, hey, this is my user input.

433
00:23:08,000 --> 00:23:10,000
Whatever question I'm looking for.

434
00:23:10,000 --> 00:23:16,000
And I'm saying, hey, if user underscore input, I'll say create my session history.

435
00:23:16,000 --> 00:23:21,000
When my session history will be nothing but get session history.

436
00:23:21,000 --> 00:23:24,000
And here I'm going to give my session ID right.

437
00:23:24,000 --> 00:23:27,000
Whatever session ID I have the default session.

438
00:23:27,000 --> 00:23:29,000
That is what I'm actually going to give over here.

439
00:23:29,000 --> 00:23:36,000
And now I can probably go ahead and call my conversational rag Jane this one.

440
00:23:36,000 --> 00:23:36,000
Right.

441
00:23:36,000 --> 00:23:41,000
So I'll go inside this I will right dot invoke here input will be one key.

442
00:23:41,000 --> 00:23:47,000
And this configuration will be with for my session ID so that automatically once I use this config right

443
00:23:47,000 --> 00:23:55,000
inside my conversation Q&A, it knows right where I need to save all my session information, like all

444
00:23:55,000 --> 00:23:57,000
the chat right inside this chat history variable.

445
00:23:57,000 --> 00:23:58,000
This will be my input.

446
00:23:58,000 --> 00:24:03,000
This will be my, uh, chat history where all the information will be saved based on the session ID,

447
00:24:03,000 --> 00:24:03,000
right?

448
00:24:03,000 --> 00:24:05,000
Since that is the reason we are using this.

449
00:24:05,000 --> 00:24:10,000
Uh, say get session history now, Now, along with this, uh, I will quickly go ahead and display

450
00:24:10,000 --> 00:24:11,000
this.

451
00:24:11,000 --> 00:24:13,000
All the three information, like what is the store?

452
00:24:14,000 --> 00:24:19,000
Right then, uh, if you see over here session history, it should be session history.

453
00:24:19,000 --> 00:24:19,000
Okay.

454
00:24:19,000 --> 00:24:21,000
I will be displaying this store.

455
00:24:21,000 --> 00:24:24,000
I'll be displaying the answer and I'll be displaying my message.

456
00:24:24,000 --> 00:24:24,000
Okay.

457
00:24:24,000 --> 00:24:30,000
And here, uh, instead of getting the response, I will use store dot success over here so that it

458
00:24:30,000 --> 00:24:31,000
shows in green color.

459
00:24:31,000 --> 00:24:32,000
Okay.

460
00:24:32,000 --> 00:24:39,000
so yes, this was it, uh, all the information that I've actually coded in front of you and if the

461
00:24:39,000 --> 00:24:41,000
API key is not given.

462
00:24:41,000 --> 00:24:41,000
Right.

463
00:24:41,000 --> 00:24:44,000
So let me just go back over here, okay.

464
00:24:44,000 --> 00:24:50,000
And let me right else if when the API key is not given, I will give a warning saying that hey, please

465
00:24:50,000 --> 00:24:51,000
enter your.

466
00:24:52,000 --> 00:24:57,000
Please enter the grok API key.

467
00:24:57,000 --> 00:24:59,000
Okay I will go ahead and execute this.

468
00:24:59,000 --> 00:25:02,000
Now let me just go ahead and open this quickly.

469
00:25:03,000 --> 00:25:07,000
Uh, let me go back to this specific folder.

470
00:25:07,000 --> 00:25:13,000
So here I will write CD dot dot and the folder over here that I'm actually using if you see.

471
00:25:13,000 --> 00:25:14,000
Right.

472
00:25:14,000 --> 00:25:16,000
Uh which is the folder.

473
00:25:16,000 --> 00:25:20,000
So folder is nothing but 4.1 rag Q&A.

474
00:25:20,000 --> 00:25:20,000
right?

475
00:25:20,000 --> 00:25:22,000
So I will go ahead and write 4.1.

476
00:25:22,000 --> 00:25:33,000
CD 4.1 rag Q&A conversation I will clear the screen and next go ahead and run this Streamlit run app.py.

477
00:25:33,000 --> 00:25:39,000
Before that I will open my env file and copy this key so that it will be useful.

478
00:25:39,000 --> 00:25:40,000
Let's go ahead and press this.

479
00:25:40,000 --> 00:25:41,000
Enter.

480
00:25:42,000 --> 00:25:46,000
And here you have this entire website okay.

481
00:25:46,000 --> 00:25:47,000
So it is loading.

482
00:25:47,000 --> 00:25:54,000
Let's see I think 1 or 2 errors usually comes when I'm we are basically writing the code from here itself.

483
00:25:54,000 --> 00:25:54,000
Right.

484
00:25:54,000 --> 00:25:59,000
So let's go back over here and see whether we are getting any warning.

485
00:25:59,000 --> 00:26:01,000
Resume and download is procured.

486
00:26:01,000 --> 00:26:02,000
Okay.

487
00:26:02,000 --> 00:26:03,000
So it is first for the first time.

488
00:26:03,000 --> 00:26:06,000
It is just going to take some time okay okay.

489
00:26:06,000 --> 00:26:09,000
Password is not a valid input text okay.

490
00:26:09,000 --> 00:26:11,000
Let's see where is password.

491
00:26:12,000 --> 00:26:14,000
I'll go ahead and search for.

492
00:26:14,000 --> 00:26:16,000
So it should be double s okay.

493
00:26:16,000 --> 00:26:17,000
Perfect.

494
00:26:17,000 --> 00:26:19,000
Let's now see.

495
00:26:19,000 --> 00:26:20,000
Always rerun.

496
00:26:20,000 --> 00:26:22,000
Now I think it should see for the first time.

497
00:26:22,000 --> 00:26:27,000
It will take time because it needs to download the hugging face embedding technique.

498
00:26:27,000 --> 00:26:27,000
Okay.

499
00:26:27,000 --> 00:26:30,000
So please uh please make sure that you be patience for that.

500
00:26:30,000 --> 00:26:31,000
Okay.

501
00:26:31,000 --> 00:26:33,000
Now I have my environment key.

502
00:26:33,000 --> 00:26:36,000
Uh, then I will go ahead and paste it over here.

503
00:26:36,000 --> 00:26:37,000
Press enter.

504
00:26:37,000 --> 00:26:38,000
Okay.

505
00:26:38,000 --> 00:26:39,000
I think it should work.

506
00:26:40,000 --> 00:26:45,000
It has got entered now here also it is going to probably take some amount of time.

507
00:26:45,000 --> 00:26:46,000
No, I don't think so.

508
00:26:46,000 --> 00:26:49,000
It will take time because only for the first time when the hugging face embedding is basically required.

509
00:26:49,000 --> 00:26:51,000
At that time it will take.

510
00:26:51,000 --> 00:26:55,000
So now uh, here you can see it is running the embedding technique of hugging face is basically getting

511
00:26:55,000 --> 00:26:59,000
applied, you know, and, uh, here you have it.

512
00:26:59,000 --> 00:26:59,000
Right.

513
00:26:59,000 --> 00:27:05,000
So here, now let me just go ahead and ask about what is Transformers.

514
00:27:05,000 --> 00:27:06,000
Okay.

515
00:27:06,000 --> 00:27:09,000
If you use OpenAI embedding it will be much more faster.

516
00:27:09,000 --> 00:27:12,000
So here uh, I have searched for what is transformer.

517
00:27:14,000 --> 00:27:20,000
And uh, here you can see input to chat prompt template missing chat history.

518
00:27:20,000 --> 00:27:23,000
Uh expected chat underscore history.

519
00:27:23,000 --> 00:27:24,000
Received input.

520
00:27:24,000 --> 00:27:25,000
Chat history.

521
00:27:25,000 --> 00:27:31,000
Okay, I think this is some bit of mistakes that has been happened over here.

522
00:27:31,000 --> 00:27:33,000
Uh, we will just go ahead and check it out.

523
00:27:33,000 --> 00:27:35,000
Let's see which line it is.

524
00:27:35,000 --> 00:27:40,000
Basically saying, uh, input chat history chat underscore history is over here.

525
00:27:40,000 --> 00:27:43,000
Here chat underscore history is basically over here.

526
00:27:43,000 --> 00:27:50,000
and uh, down what I've used here also chart underscore history is there uh here okay.

527
00:27:50,000 --> 00:27:52,000
So here I have to use chart underscore history.

528
00:27:53,000 --> 00:27:54,000
So it's fine.

529
00:27:54,000 --> 00:27:56,000
Some smaller mistakes will happen.

530
00:27:56,000 --> 00:27:59,000
Now it is just going to give me the output okay.

531
00:27:59,000 --> 00:28:03,000
So I have to make sure that all these things are correct.

532
00:28:03,000 --> 00:28:03,000
Right.

533
00:28:04,000 --> 00:28:05,000
So one more error.

534
00:28:05,000 --> 00:28:09,000
Um response of answer.

535
00:28:09,000 --> 00:28:09,000
Okay.

536
00:28:09,000 --> 00:28:10,000
Start.

537
00:28:10,000 --> 00:28:11,000
Success.

538
00:28:11,000 --> 00:28:12,000
Assistant.

539
00:28:12,000 --> 00:28:13,000
Okay, I've given two parameters over here.

540
00:28:13,000 --> 00:28:14,000
Right.

541
00:28:14,000 --> 00:28:17,000
Take two positional arguments, but three is given.

542
00:28:17,000 --> 00:28:18,000
So let me do one thing.

543
00:28:18,000 --> 00:28:22,000
Instead of writing success, I'll just go ahead and write SD dot write for now.

544
00:28:22,000 --> 00:28:23,000
Okay.

545
00:28:23,000 --> 00:28:25,000
Now it should basically give me the output.

546
00:28:25,000 --> 00:28:29,000
And here you can see in the default session it is basically getting displayed.

547
00:28:29,000 --> 00:28:31,000
Uh transformers are type of neural network.

548
00:28:31,000 --> 00:28:33,000
Uh they use self-attention to weigh the importance.

549
00:28:33,000 --> 00:28:35,000
And all this information is basically there.

550
00:28:35,000 --> 00:28:36,000
Okay.

551
00:28:36,000 --> 00:28:38,000
Um, fine.

552
00:28:38,000 --> 00:28:41,000
Let's go ahead and ask about this.

553
00:28:41,000 --> 00:28:43,000
What is attention?

554
00:28:44,000 --> 00:28:55,000
Uh, or I'll just say provide a detailed summary of Transformers with attention is all you need.

555
00:28:57,000 --> 00:28:59,000
I'll go ahead and search for this.

556
00:28:59,000 --> 00:29:02,000
Let's see whether I'll be able to get the answer or not.

557
00:29:09,000 --> 00:29:10,000
So here is my entire output.

558
00:29:10,000 --> 00:29:15,000
This paper attention is all you need to introduce the transformer architecture with all the information

559
00:29:15,000 --> 00:29:17,000
you can see over here and in the chat history.

560
00:29:17,000 --> 00:29:18,000
Also you are able to see this.

561
00:29:18,000 --> 00:29:25,000
You can also get the detailed summary I can say provider, detail summary, provider, detail summary,

562
00:29:26,000 --> 00:29:32,000
provider detailed summary of the conversation we had.

563
00:29:32,000 --> 00:29:33,000
Okay.

564
00:29:33,000 --> 00:29:36,000
So here you can see the output.

565
00:29:37,000 --> 00:29:39,000
I hope you're enjoying this videos right.

566
00:29:39,000 --> 00:29:43,000
Because at the end of the day I know I'm creating this amazing modules.

567
00:29:43,000 --> 00:29:45,000
This can be integrated wherever you want, right?

568
00:29:45,000 --> 00:29:49,000
So here you can see once your conversation started, you asked me to ask about Transformers.

569
00:29:49,000 --> 00:29:51,000
I provided a concise explanation.

570
00:29:51,000 --> 00:29:56,000
I also outlined the advantages of transformer in emphasizing their palatability ability to handle.

571
00:29:56,000 --> 00:29:59,000
You can upload any PDF and you can start working, right.

572
00:29:59,000 --> 00:30:01,000
So I hope, uh, you understood this particular video.

573
00:30:01,000 --> 00:30:04,000
I hope you were able to understand the entire implementation.

574
00:30:04,000 --> 00:30:06,000
So yeah, this was it for my side.

575
00:30:06,000 --> 00:30:07,000
I hope you liked this particular video.

576
00:30:07,000 --> 00:30:08,000
I'll see you in the next video.

577
00:30:08,000 --> 00:30:09,000
Thank you.

578
00:30:09,000 --> 00:30:09,000
Take care.

579
00:30:09,000 --> 00:30:09,000
Bye bye.

