Rauhan commited on
Commit
30a2f1b
·
1 Parent(s): d6b711c

UPDATE: trainChatbot

Browse files
Files changed (2) hide show
  1. app.py +11 -2
  2. temp.json +0 -15
app.py CHANGED
@@ -264,7 +264,7 @@ async def loadPDF(vectorstore: str, pdf: UploadFile = File(...)):
264
  "output": text,
265
  "source": source
266
  }
267
- numTokens = len(" ".join([text[x] for x in text]).translate(str.maketrans('', '', string.punctuation)).split(" "))
268
  dct = json.dumps(dct, indent=1).encode("utf-8")
269
  fileName = createDataSourceName(sourceName=source)
270
  response = supabase.storage.from_("ConversAI").upload(file=dct, path=f"{fileName}_data.json")
@@ -295,12 +295,14 @@ async def loadImagePDF(vectorstore: str, pdf: UploadFile = File(...)):
295
  }
296
  dct = json.dumps(dct, indent=1).encode("utf-8")
297
  fileName = createDataSourceName(sourceName=source)
 
298
  response = supabase.storage.from_("ConversAI").upload(file=dct, path=f"{fileName}_data.json")
299
  response = (
300
  supabase.table("ConversAI_ChatbotDataSources")
301
  .insert({"username": username,
302
  "chatbotName": chatbotName,
303
  "dataSourceName": fileName,
 
304
  "sourceEndpoint": "/loadImagePDF",
305
  "sourceContentURL": os.path.join(os.environ["SUPABASE_PUBLIC_BASE_URL"], f"{fileName}_data.json")})
306
  .execute()
@@ -319,10 +321,12 @@ class AddText(BaseModel):
319
  async def loadText(addTextConfig: AddText):
320
  vectorstore, text = addTextConfig.vectorstore, addTextConfig.text
321
  username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
 
322
  dct = {
323
- "output": cleanText(text = text),
324
  "source": "Text"
325
  }
 
326
  dct = json.dumps(dct, indent=1).encode("utf-8")
327
  fileName = createDataSourceName(sourceName="Text")
328
  response = supabase.storage.from_("ConversAI").upload(file=dct, path=f"{fileName}_data.json")
@@ -331,6 +335,7 @@ async def loadText(addTextConfig: AddText):
331
  .insert({"username": username,
332
  "chatbotName": chatbotName,
333
  "dataSourceName": fileName,
 
334
  "sourceEndpoint": "/loadText",
335
  "sourceContentURL": os.path.join(os.environ["SUPABASE_PUBLIC_BASE_URL"], f"{fileName}_data.json")})
336
  .execute()
@@ -380,6 +385,7 @@ async def loadWebURLs(loadWebsite: LoadWebsite):
380
  "output": text,
381
  "source": source
382
  }
 
383
  dct = json.dumps(dct, indent=1).encode("utf-8")
384
  fileName = createDataSourceName(sourceName=source)
385
  response = supabase.storage.from_("ConversAI").upload(file=dct, path=f"{fileName}_data.json")
@@ -388,6 +394,7 @@ async def loadWebURLs(loadWebsite: LoadWebsite):
388
  .insert({"username": username,
389
  "chatbotName": chatbotName,
390
  "dataSourceName": fileName,
 
391
  "sourceEndpoint": "/loadWebURLs",
392
  "sourceContentURL": os.path.join(os.environ["SUPABASE_PUBLIC_BASE_URL"], f"{fileName}_data.json")})
393
  .execute()
@@ -458,6 +465,7 @@ async def loadYoutubeTranscript(ytTranscript: YtTranscript):
458
  "output": text,
459
  "source": "www.youtube.com"
460
  }
 
461
  dct = json.dumps(dct, indent=1).encode("utf-8")
462
  fileName = createDataSourceName(sourceName="youtube")
463
  response = supabase.storage.from_("ConversAI").upload(file=dct, path=f"{fileName}_data.json")
@@ -466,6 +474,7 @@ async def loadYoutubeTranscript(ytTranscript: YtTranscript):
466
  .insert({"username": username,
467
  "chatbotName": chatbotName,
468
  "dataSourceName": fileName,
 
469
  "sourceEndpoint": "/getYoutubeTranscript",
470
  "sourceContentURL": os.path.join(os.environ["SUPABASE_PUBLIC_BASE_URL"], f"{fileName}_data.json")})
471
  .execute()
 
264
  "output": text,
265
  "source": source
266
  }
267
+ numTokens = len(" ".join([base64.b64decode(text[x].encode("utf-8")).decode("utf-8") for x in text]).translate(str.maketrans('', '', string.punctuation)).split(" "))
268
  dct = json.dumps(dct, indent=1).encode("utf-8")
269
  fileName = createDataSourceName(sourceName=source)
270
  response = supabase.storage.from_("ConversAI").upload(file=dct, path=f"{fileName}_data.json")
 
295
  }
296
  dct = json.dumps(dct, indent=1).encode("utf-8")
297
  fileName = createDataSourceName(sourceName=source)
298
+ numTokens = len(" ".join([base64.b64decode(text[x].encode("utf-8")).decode("utf-8") for x in text]).translate(str.maketrans('', '', string.punctuation)).split(" "))
299
  response = supabase.storage.from_("ConversAI").upload(file=dct, path=f"{fileName}_data.json")
300
  response = (
301
  supabase.table("ConversAI_ChatbotDataSources")
302
  .insert({"username": username,
303
  "chatbotName": chatbotName,
304
  "dataSourceName": fileName,
305
+ "numTokens": numTokens,
306
  "sourceEndpoint": "/loadImagePDF",
307
  "sourceContentURL": os.path.join(os.environ["SUPABASE_PUBLIC_BASE_URL"], f"{fileName}_data.json")})
308
  .execute()
 
321
  async def loadText(addTextConfig: AddText):
322
  vectorstore, text = addTextConfig.vectorstore, addTextConfig.text
323
  username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
324
+ text = cleanText(text = text)
325
  dct = {
326
+ "output": text,
327
  "source": "Text"
328
  }
329
+ numTokens = len(" ".join([base64.b64decode(text[x].encode("utf-8")).decode("utf-8") for x in text]).translate(str.maketrans('', '', string.punctuation)).split(" "))
330
  dct = json.dumps(dct, indent=1).encode("utf-8")
331
  fileName = createDataSourceName(sourceName="Text")
332
  response = supabase.storage.from_("ConversAI").upload(file=dct, path=f"{fileName}_data.json")
 
335
  .insert({"username": username,
336
  "chatbotName": chatbotName,
337
  "dataSourceName": fileName,
338
+ "numTokens": numTokens,
339
  "sourceEndpoint": "/loadText",
340
  "sourceContentURL": os.path.join(os.environ["SUPABASE_PUBLIC_BASE_URL"], f"{fileName}_data.json")})
341
  .execute()
 
385
  "output": text,
386
  "source": source
387
  }
388
+ numTokens = len(" ".join([base64.b64decode(text[x].encode("utf-8")).decode("utf-8") for x in text]).translate(str.maketrans('', '', string.punctuation)).split(" "))
389
  dct = json.dumps(dct, indent=1).encode("utf-8")
390
  fileName = createDataSourceName(sourceName=source)
391
  response = supabase.storage.from_("ConversAI").upload(file=dct, path=f"{fileName}_data.json")
 
394
  .insert({"username": username,
395
  "chatbotName": chatbotName,
396
  "dataSourceName": fileName,
397
+ "numTokens": numTokens,
398
  "sourceEndpoint": "/loadWebURLs",
399
  "sourceContentURL": os.path.join(os.environ["SUPABASE_PUBLIC_BASE_URL"], f"{fileName}_data.json")})
400
  .execute()
 
465
  "output": text,
466
  "source": "www.youtube.com"
467
  }
468
+ numTokens = len(" ".join([base64.b64decode(text[x].encode("utf-8")).decode("utf-8") for x in text]).translate(str.maketrans('', '', string.punctuation)).split(" "))
469
  dct = json.dumps(dct, indent=1).encode("utf-8")
470
  fileName = createDataSourceName(sourceName="youtube")
471
  response = supabase.storage.from_("ConversAI").upload(file=dct, path=f"{fileName}_data.json")
 
474
  .insert({"username": username,
475
  "chatbotName": chatbotName,
476
  "dataSourceName": fileName,
477
+ "numTokens": numTokens,
478
  "sourceEndpoint": "/getYoutubeTranscript",
479
  "sourceContentURL": os.path.join(os.environ["SUPABASE_PUBLIC_BASE_URL"], f"{fileName}_data.json")})
480
  .execute()
temp.json DELETED
@@ -1,15 +0,0 @@
1
- {
2
- "vectorstore": "convai$dot$testingEdits2",
3
- "dataSourceName": "100-pages-001.pdf",
4
- "sourceEndpoint": "loadPDF",
5
- "jsonData": {
6
- "output": {
7
- "1": "RnJvbnQgTWF0dGVyIEZyb20gdGhlIERpcmVjdG9yIG9mIHRoZSBGb2xnZXIgU2hha2VzcGVhcmUgTGlicmFyeSBUZXh0dWFsIEludHJvZHVjdGlvbiBTeW5vcHNpcyBDaGFyYWN0ZXJzIGluIHRoZSBQbGF5IEFDVCAxIFNjZW5lIDEgU2NlbmUgMiBTY2VuZSAzIFNjZW5lIDQgU2NlbmUgNSBBQ1QgMiBTY2VuZSAxIFNjZW5lIDIgQUNUIDMgU2NlbmUgMSBTY2VuZSAyIFNjZW5lIDMgU2NlbmUgNCBBQ1QgNCBTY2VuZSAxIFNjZW5lIDIgU2NlbmUgMyBTY2VuZSA0IFNjZW5lIDUgU2NlbmUgNiBTY2VuZSA3IEFDVCA1IFNjZW5lIDEgU2NlbmUgMiBDb250ZW50cyA=",
8
- "2": "TWljaGFlbCBXaXRtb3JlIERpcmVjdG9yIEZvbGdlciBTaGFrZXNwZWFyZSBMaWJyYXJ5IEl0IGlzIGhhcmQgdG8gaW1hZ2luZSBhIHdvcmxkIHdpdGhvdXQgU2hha2VzcGVhcmUuIFNpbmNlIHRoZWlyIGNvbXBvc2l0aW9uIGZvdXIgaHVuZHJlZCB5ZWFycyBhZ28gU2hha2VzcGVhcmXigJlzIHBsYXlzIGFuZCBwb2VtcyBoYXZlIHRyYXZlbGVkIHRoZSBnbG9iZSBpbnZpdGluZyB0aG9zZSB3aG8gc2VlIGFuZCByZWFkIGhpcyB3b3JrcyB0byBtYWtlIHRoZW0gdGhlaXIgb3duLiBSZWFkZXJzIG9mIHRoZSBOZXcgRm9sZ2VyIEVkaXRpb25zIGFyZSBwYXJ0IG9mIHRoaXMgb25nb2luZyBwcm9jZXNzIG9mIOKAnHRha2luZyB1cCBTaGFrZXNwZWFyZeKAnSBmaW5kaW5nIG91ciBvd24gdGhvdWdodHMgYW5kIGZlZWxpbmdzIGluIGxhbmd1YWdlIHRoYXQgc3RyaWtlcyB1cyBhcyBvbGQgb3IgdW51c3VhbCBhbmQgZm9yIHRoYXQgdmVyeSByZWFzb24gbmV3LiBXZSBzdGlsbCBzdHJ1Z2dsZSB0byBrZWVwIHVwIHdpdGggYSB3cml0ZXIgd2hvIGNvdWxkIHRoaW5rIGEgbWlsZSBhIG1pbnV0ZSB3aG9zZSB3b3JkcyBwYWludCBwaWN0dXJlcyB0aGF0IHNoaWZ0IGxpa2UgY2xvdWRzLiBUaGVzZSBleHBlcnRseSBlZGl0ZWQgdGV4dHMgYXJlIHByZXNlbnRlZCB0byB0aGUgcHVibGljIGFzIGEgcmVzb3VyY2UgZm9yIHN0dWR5IGFydGlzdGljIGFkYXB0YXRpb24gYW5kIGVuam95bWVudC4gQnkgbWFraW5nIHRoZSBjbGFzc2ljIHRleHRzIG9mIHRoZSBOZXcgRm9sZ2VyIEVkaXRpb25zIGF2YWlsYWJsZSBpbiBlbGVjdHJvbmljIGZvcm0gYXMgRm9sZ2VyIERpZ2l0YWwgVGV4dHMgd2UgcGxhY2UgYSB0cnVzdGVkIHJlc291cmNlIGluIHRoZSBoYW5kcyBvZiBhbnlvbmUgd2hvIHdhbnRzIHRoZW0uIFRoZSBOZXcgRm9sZ2VyIEVkaXRpb25zIG9mIFNoYWtlc3BlYXJl4oCZcyBwbGF5cyB3aGljaCBhcmUgdGhlIGJhc2lzIGZvciB0aGUgdGV4dHMgcmVhbGl6ZWQgaGVyZSBpbiBkaWdpdGFsIGZvcm0gYXJlIHNwZWNpYWwgYmVjYXVzZSBvZiB0aGVpciBvcmlnaW4uIFRoZSBGb2xnZXIgU2hha2VzcGVhcmUgTGlicmFyeSBpbiBXYXNoaW5ndG9uIERDIGlzIHRoZSBzaW5nbGUgZ3JlYXRlc3QgZG9jdW1lbnRhcnkgc291cmNlIG9mIFNoYWtlc3BlYXJl4oCZcyB3b3Jrcy4gQW4gdW5wYXJhbGxlbGVkIGNvbGxlY3Rpb24gb2YgZWFybHkgbW9kZXJuIGJvb2tzIG1hbnVzY3JpcHRzIGFuZCBhcnR3b3JrIGNvbm5lY3RlZCB0byBTaGFrZXNwZWFyZSB0aGUgRm9sZ2Vy4oCZcyBob2xkaW5ncyBoYXZlIGJlZW4gY29uc3VsdGVkIGV4dGVuc2l2ZWx5IGluIHRoZSBwcmVwYXJhdGlvbiBvZiB0aGVzZSB0ZXh0cy4gVGhlIEVkaXRpb25zIGFsc28gcmVmbGVjdCB0aGUgZXhwZXJ0aXNlIGdhaW5lZCB0aHJvdWdoIHRoZSByZWd1bGFyIHBlcmZvcm1hbmNlIG9mIFNoYWtlc3BlYXJl4oCZcyB3b3JrcyBpbiB0aGUgRm9sZ2Vy4oCZcyBFbGl6YWJldGhhbiBUaGVhdGVyLiBJIHdhbnQgdG8gZXhwcmVzcyBteSBkZWVwIHRoYW5rcyB0byBlZGl0b3JzIEJhcmJhcmEgTW93YXQgYW5kIFBhdWwgV2Vyc3RpbmUgZm9yIGNyZWF0aW5nIHRoZXNlIGluZGlzcGVuc2FibGUgZWRpdGlvbnMgb2YgU2hha2VzcGVhcmXigJlzIHdvcmtzIHdoaWNoIGluY29ycG9yYXRlIHRoZSBiZXN0IG9mIHRleHR1YWwgc2Nob2xhcnNoaXAgd2l0aCBhIHJpY2huZXNzIG9mIGNvbW1lbnRhcnkgdGhhdCBpcyBib3RoIGluc3BpcmVkIGFuZCBlbmdhZ2luZy4gUmVhZGVycyB3aG8gd2FudCB0byBrbm93IG1vcmUgYWJvdXQgU2hha2VzcGVhcmUgYW5kIGhpcyBwbGF5cyBjYW4gZm9sbG93IHRoZSBwYXRocyB0aGVzZSBkaXN0aW5ndWlzaGVkIHNjaG9sYXJzIGhhdmUgdHJlYWQgYnkgdmlzaXRpbmcgdGhlIEZvbGdlciBlaXRoZXIgaW5wZXJzb24gb3Igb25saW5lIHdoZXJlIGEgcmFuZ2Ugb2YgcGh5c2ljYWwgYW5kIGRpZ2l0YWwgcmVzb3VyY2VzIGV4aXN0cyB0byBzdXBwbGVtZW50IHRoZSBtYXRlcmlhbCBpbiB0aGVzZSB0ZXh0cy4gSSBjb21tZW5kIHRvIHlvdSB0aGVzZSB3b3JkcyBhbmQgaG9wZSB0aGF0IHRoZXkgaW5zcGlyZS4gRnJvbSB0aGUgRGlyZWN0b3Igb2YgdGhlIEZvbGdlciBTaGFrZXNwZWFyZSBMaWJyYXJ5IA==",
9
- "3": "VW50aWwgbm93IHdpdGggdGhlIHJlbGVhc2Ugb2YgdGhlIEZvbGdlciBEaWdpdGFsIFRleHRzIHJlYWRlcnMgaW4gc2VhcmNoIG9mIGEgZnJlZSBvbmxpbmUgdGV4dCBvZiBTaGFrZXNwZWFyZeKAmXMgcGxheXMgaGFkIHRvIGJlIGNvbnRlbnQgcHJpbWFyaWx5IHdpdGggdXNpbmcgdGhlIE1vYnnihKIgVGV4dCB3aGljaCByZXByb2R1Y2VzIGEgbGF0ZSBuaW5ldGVlbnRoIGNlbnR1cnkgdmVyc2lvbiBvZiB0aGUgcGxheXMuIFdoYXQgaXMgdGhlIGRpZmZlcmVuY2UgTWFueSBvcmRpbmFyeSByZWFkZXJzIGFzc3VtZSB0aGF0IHRoZXJlIGlzIGEgc2luZ2xlIHRleHQgZm9yIHRoZSBwbGF5cyB3aGF0IFNoYWtlc3BlYXJlIHdyb3RlLiBCdXQgU2hha2VzcGVhcmXigJlzIHBsYXlzIHdlcmUgbm90IHB1Ymxpc2hlZCB0aGUgd2F5IG1vZGVybiBub3ZlbHMgb3IgcGxheXMgYXJlIHB1Ymxpc2hlZCB0b2RheSBhcyBhIHNpbmdsZSBhdXRob3JpdGF0aXZlIHRleHQuIEluIHNvbWUgY2FzZXMgdGhlIHBsYXlzIGhhdmUgY29tZSBkb3duIHRvIHVzIGluIG11bHRpcGxlIHB1Ymxpc2hlZCB2ZXJzaW9ucyByZXByZXNlbnRlZCBieSB2YXJpb3VzIFF1YXJ0b3MgUXEgYW5kIGJ5IHRoZSBncmVhdCBjb2xsZWN0aW9uIHB1dCB0b2dldGhlciBieSBoaXMgY29sbGVhZ3VlcyBpbiAxNjIzIGNhbGxlZCB0aGUgRmlyc3QgRm9saW8gRi4gVGhlcmUgYXJlIGZvciBleGFtcGxlIHRocmVlIHZlcnkgZGlmZmVyZW50IHZlcnNpb25zIG9mIEhhbWxldCB0d28gb2YgS2luZyBMZWFyIEhlbnJ5IFYgUm9tZW8gYW5kIEp1bGlldCBhbmQgb3RoZXJzLiBFZGl0b3JzIGNob29zZSB3aGljaCB2ZXJzaW9uIHRvIHVzZSBhcyB0aGVpciBiYXNlIHRleHQgYW5kIHRoZW4gYW1lbmQgdGhhdCB0ZXh0IHdpdGggd29yZHMgbGluZXMgb3Igc3BlZWNoIHByZWZpeGVzIGZyb20gdGhlIG90aGVyIHZlcnNpb25zIHRoYXQgaW4gdGhlaXIganVkZ21lbnQgbWFrZSBmb3IgYSBiZXR0ZXIgb3IgbW9yZSBhY2N1cmF0ZSB0ZXh0LiBPdGhlciBlZGl0b3JpYWwgZGVjaXNpb25zIGludm9sdmUgY2hvaWNlcyBhYm91dCB3aGV0aGVyIGFuIHVuZmFtaWxpYXIgd29yZCBjb3VsZCBiZSB1bmRlcnN0b29kIGluIGxpZ2h0IG9mIG90aGVyIHdyaXRpbmdzIG9mIHRoZSBwZXJpb2Qgb3Igd2hldGhlciBpdCBzaG91bGQgYmUgY2hhbmdlZCBkZWNpc2lvbnMgYWJvdXQgd29yZHMgdGhhdCBtYWRlIGl0IGludG8gU2hha2VzcGVhcmXigJlzIHRleHQgYnkgYWNjaWRlbnQgdGhyb3VnaCBmb3VyIGh1bmRyZWQgeWVhcnMgb2YgcHJpbnRpbmdzIGFuZCBtaXNwcmludGluZyBhbmQgZXZlbiBkZWNpc2lvbnMgYmFzZWQgb24gY3VsdHVyYWwgcHJlZmVyZW5jZSBhbmQgdGFzdGUuIFdoZW4gdGhlIE1vYnnihKIgVGV4dCB3YXMgY3JlYXRlZCBmb3IgZXhhbXBsZSBpdCB3YXMgZGVlbWVkIOKAnGltcHJvcGVy4oCdIGFuZCDigJxpbmRlY2VudOKAnSBmb3IgTWlyYW5kYSB0byBjaGFzdGlzZSBDYWxpYmFuIGZvciBoYXZpbmcgYXR0ZW1wdGVkIHRvIHJhcGUgaGVyLiBTZWUgVGhlIFRlbXBlc3QgMS4yIOKAnEFiaG9ycmVkIHNsYXZlV2hpY2ggYW55IHByaW50IG9mIGdvb2RuZXNzIHdpbHQgbm90IHRha2VCZWluZyBjYXBhYmxlIG9mIGFsbCBpbGwgSSBwaXRpZWQgdGhlZeKApuKAnS4gQWxsIFNoYWtlc3BlYXJlIGVkaXRvcnMgYXQgdGhlIHRpbWUgdG9vayB0aGUgc3BlZWNoIGF3YXkgZnJvbSBoZXIgYW5kIGdhdmUgaXQgdG8gaGVyIGZhdGhlciBQcm9zcGVyby4gVGhlIGVkaXRvcnMgb2YgdGhlIE1vYnnihKIgU2hha2VzcGVhcmUgcHJvZHVjZWQgdGhlaXIgdGV4dCBsb25nIGJlZm9yZSBzY2hvbGFycyBmdWxseSB1bmRlcnN0b29kIHRoZSBwcm9wZXIgZ3JvdW5kcyBvbiB3aGljaCB0byBtYWtlIHRoZSB0aG91c2FuZHMgb2YgZGVjaXNpb25zIHRoYXQgU2hha2VzcGVhcmUgZWRpdG9ycyBmYWNlLiBUaGUgRm9sZ2VyIExpYnJhcnkgU2hha2VzcGVhcmUgRWRpdGlvbnMgb24gd2hpY2ggdGhlIEZvbGdlciBEaWdpdGFsIFRleHRzIGRlcGVuZCBtYWtlIHRoaXMgZWRpdG9yaWFsIHByb2Nlc3MgYXMgbmVhcmx5IHRyYW5zcGFyZW50IGFzIGlzIHBvc3NpYmxlIGluIGNvbnRyYXN0IHRvIG9sZGVyIHRleHRzIGxpa2UgdGhlIE1vYnnihKIgd2hpY2ggaGlkZSBlZGl0b3JpYWwgaW50ZXJ2ZW50aW9ucy4gVGhlIHJlYWRlciBvZiB0aGUgRm9sZ2VyIFNoYWtlc3BlYXJlIGtub3dzIHdoZXJlIHRoZSB0ZXh0IGhhcyBiZWVuIGFsdGVyZWQgYmVjYXVzZSBlZGl0b3JpYWwgaW50ZXJ2ZW50aW9ucyBhcmUgc2lnbmFsZWQgYnkgc3F1YXJlIGJyYWNrZXRzIGZvciBleGFtcGxlIGZyb20gT3RoZWxsbyDigJwgSWYgc2hlIGluIFRleHR1YWwgSW50cm9kdWN0aW9uIEJ5IEJhcmJhcmEgTW93YXQgYW5kIFBhdWwgV2Vyc3RpbmUg",
10
- "4": "Y2hhaW5zIG9mIG1hZ2ljIHdlcmUgbm90IGJvdW5kIOKAnSBoYWxmc3F1YXJlIGJyYWNrZXRzIGZvciBleGFtcGxlIGZyb20gSGVucnkgViDigJxXaXRoIGJsb29kICBhbmQgc3dvcmQgYW5kIGZpcmUgdG8gd2luIHlvdXIgcmlnaHTigJ0gb3IgYW5nbGUgYnJhY2tldHMgZm9yIGV4YW1wbGUgZnJvbSBIYW1sZXQg4oCcTyBmYXJld2VsbCBob25lc3Qgc29sZGllci4gIFdobyBoYXRoIHJlbGlldmVkeW914oCdLiBBdCBhbnkgcG9pbnQgaW4gdGhlIHRleHQgeW91IGNhbiBob3ZlciB5b3VyIGN1cnNvciBvdmVyIGEgYnJhY2tldCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gQmVjYXVzZSB0aGUgRm9sZ2VyIERpZ2l0YWwgVGV4dHMgYXJlIGVkaXRlZCBpbiBhY2NvcmQgd2l0aCB0d2VudHlmaXJzdCBjZW50dXJ5IGtub3dsZWRnZSBhYm91dCBTaGFrZXNwZWFyZeKAmXMgdGV4dHMgdGhlIEZvbGdlciBoZXJlIHByb3ZpZGVzIHRoZW0gdG8gcmVhZGVycyBzY2hvbGFycyB0ZWFjaGVycyBhY3RvcnMgZGlyZWN0b3JzIGFuZCBzdHVkZW50cyBmcmVlIG9mIGNoYXJnZSBjb25maWRlbnQgb2YgdGhlaXIgcXVhbGl0eSBhcyB0ZXh0cyBvZiB0aGUgcGxheXMgYW5kIHBsZWFzZWQgdG8gYmUgYWJsZSB0byBtYWtlIHRoaXMgY29udHJpYnV0aW9uIHRvIHRoZSBzdHVkeSBhbmQgZW5qb3ltZW50IG9mIFNoYWtlc3BlYXJlLiA=",
11
- "5": "RXZlbnRzIGJlZm9yZSB0aGUgc3RhcnQgb2YgSGFtbGV0IHNldCB0aGUgc3RhZ2UgZm9yIHRyYWdlZHkuIFdoZW4gdGhlIGtpbmcgb2YgRGVubWFyayBQcmluY2UgSGFtbGV04oCZcyBmYXRoZXIgc3VkZGVubHkgZGllcyBIYW1sZXTigJlzIG1vdGhlciBHZXJ0cnVkZSBtYXJyaWVzIGhpcyB1bmNsZSBDbGF1ZGl1cyB3aG8gYmVjb21lcyB0aGUgbmV3IGtpbmcuIEEgc3Bpcml0IHdobyBjbGFpbXMgdG8gYmUgdGhlIGdob3N0IG9mIEhhbWxldOKAmXMgZmF0aGVyIGRlc2NyaWJlcyBoaXMgbXVyZGVyIGF0IHRoZSBoYW5kcyBvZiBDbGF1ZGl1cyBhbmQgZGVtYW5kcyB0aGF0IEhhbWxldCBhdmVuZ2UgdGhlIGtpbGxpbmcuIFdoZW4gdGhlIGNvdW5jaWxvciBQb2xvbml1cyBsZWFybnMgZnJvbSBoaXMgZGF1Z2h0ZXIgT3BoZWxpYSB0aGF0IEhhbWxldCBoYXMgdmlzaXRlZCBoZXIgaW4gYW4gYXBwYXJlbnRseSBkaXN0cmFjdGVkIHN0YXRlIFBvbG9uaXVzIGF0dHJpYnV0ZXMgdGhlIHByaW5jZeKAmXMgY29uZGl0aW9uIHRvIGxvdmVzaWNrbmVzcyBhbmQgaGUgc2V0cyBhIHRyYXAgZm9yIEhhbWxldCB1c2luZyBPcGhlbGlhIGFzIGJhaXQuIFRvIGNvbmZpcm0gQ2xhdWRpdXPigJlzIGd1aWx0IEhhbWxldCBhcnJhbmdlcyBmb3IgYSBwbGF5IHRoYXQgbWltaWNzIHRoZSBtdXJkZXIgQ2xhdWRpdXPigJlzIHJlYWN0aW9uIGlzIHRoYXQgb2YgYSBndWlsdHkgbWFuLiBIYW1sZXQgbm93IGZyZWUgdG8gYWN0IG1pc3Rha2VubHkga2lsbHMgUG9sb25pdXMgdGhpbmtpbmcgaGUgaXMgQ2xhdWRpdXMuIENsYXVkaXVzIHNlbmRzIEhhbWxldCBhd2F5IGFzIHBhcnQgb2YgYSBkZWFkbHkgcGxvdC4gQWZ0ZXIgUG9sb25pdXPigJlzIGRlYXRoIE9waGVsaWEgZ29lcyBtYWQgYW5kIGxhdGVyIGRyb3ducy4gSGFtbGV0IHdobyBoYXMgcmV0dXJuZWQgc2FmZWx5IHRvIGNvbmZyb250IHRoZSBraW5nIGFncmVlcyB0byBhIGZlbmNpbmcgbWF0Y2ggd2l0aCBPcGhlbGlh4oCZcyBicm90aGVyIExhZXJ0ZXMgd2hvIHNlY3JldGx5IHBvaXNvbnMgaGlzIG93biByYXBpZXIuIEF0IHRoZSBtYXRjaCBDbGF1ZGl1cyBwcmVwYXJlcyBwb2lzb25lZCB3aW5lIGZvciBIYW1sZXQgd2hpY2ggR2VydHJ1ZGUgdW5rbm93aW5nbHkgZHJpbmtzIGFzIHNoZSBkaWVzIHNoZSBhY2N1c2VzIENsYXVkaXVzIHdob20gSGFtbGV0IGtpbGxzLiBUaGVuIGZpcnN0IExhZXJ0ZXMgYW5kIHRoZW4gSGFtbGV0IGRpZSBib3RoIHZpY3RpbXMgb2YgTGFlcnRlc+KAmSByYXBpZXIuIFN5bm9wc2lzIA=="
12
- },
13
- "source": "100-pages-001.pdf_data.json"
14
- }
15
- }