vikramvasudevan commited on
Commit
7608d93
·
verified ·
1 Parent(s): a63ba9d

Upload folder using huggingface_hub

Browse files
Files changed (2) hide show
  1. config.py +63 -45
  2. server.py +16 -2
config.py CHANGED
@@ -1,6 +1,8 @@
1
  from metadata import MetadataWhereClause
2
  from typing import List, Dict
3
 
 
 
4
 
5
  class SanatanConfig:
6
  dbStorePath: str = "./chromadb-store"
@@ -24,7 +26,7 @@ class SanatanConfig:
24
  "datatype": "int",
25
  "label": "Page Number",
26
  "description": "Page number from the source",
27
- "show_as_filter" : True
28
  },
29
  ],
30
  "pdf_path": "./data/vishnu_puranam.pdf",
@@ -64,7 +66,7 @@ class SanatanConfig:
64
  "datatype": "int",
65
  "label": "Page Number",
66
  "description": "Page number from the source",
67
- "show_as_filter" : True
68
  },
69
  ],
70
  "pdf_path": "./data/shukla-yajur-veda.pdf",
@@ -101,7 +103,7 @@ class SanatanConfig:
101
  "datatype": "int",
102
  "label": "Page Number",
103
  "description": "Page number from the source",
104
- "show_as_filter" : True
105
  },
106
  ],
107
  "pdf_path": "./data/bhagavat_gita.pdf",
@@ -144,7 +146,7 @@ class SanatanConfig:
144
  "datatype": "int",
145
  "label": "Page Number",
146
  "description": "Page number from the source",
147
- "show_as_filter" : True
148
  },
149
  ],
150
  "pdf_path": "./data/valmiki_ramayanam.pdf",
@@ -204,28 +206,28 @@ class SanatanConfig:
204
  "label": "Lyrics in sanskrit",
205
  "datatype": "str",
206
  "description": "The original sloka in sanskrit.",
207
- "show_as_filter" : True
208
  },
209
  {
210
  "name": "translation",
211
  "label": "English Translation",
212
  "datatype": "str",
213
  "description": "The english translation.",
214
- "show_as_filter" : True
215
  },
216
  {
217
  "name": "transliteration",
218
  "label": "English Transliteration",
219
  "datatype": "str",
220
  "description": "The english transliteration.",
221
- "show_as_filter" : True
222
  },
223
  {
224
  "name": "verse",
225
  "labek": "Verse Number",
226
  "datatype": "int",
227
  "description": "The verse number of the sloka.",
228
- "show_as_filter" : True
229
  },
230
  ],
231
  "pdf_path": "./data/vishnu_sahasranamam.pdf",
@@ -250,6 +252,7 @@ class SanatanConfig:
250
  "field_mapping": {
251
  "text": "pasuram_ta",
252
  "title": lambda doc: f"{doc.get('prabandham_name','')} {doc.get('chapter','')}-{doc.get('decade','')}:{doc.get('position_in_chapter','')}",
 
253
  "word_by_word_native": "wbw_ta",
254
  "unit_index": "verse",
255
  "transliteration": "pasuram_en",
@@ -276,28 +279,42 @@ class SanatanConfig:
276
  "label": "Prabandham Code",
277
  "datatype": "str",
278
  "description": "contains the short prabandham_code. e.g. `TPL` for `Thiruppallandu`",
279
- "show_as_filter" : True
280
  },
281
  {
282
  "name": "prabandham_name",
283
  "label": "Prabandham Name",
284
  "datatype": "str",
285
  "description": "contains the prabandham name. e.g. `Thiruppallandu`",
286
- "show_as_filter" : True
 
 
 
 
 
287
  },
288
  {
289
  "name": "azhwar_name",
290
  "label": "Azhwar Name",
291
  "datatype": "str",
292
  "description": "contains the azhwar name. e.g. `Thirumangai Azhwar`",
293
- "show_as_filter" : True
 
 
 
 
 
294
  },
295
  {
296
  "name": "divya_desams",
297
  "label": "Divya Desams",
298
  "datatype": "str",
299
  "description": "comma separated list of divya desams. e.g. Thiruneermalai,Thiruvallikkeni.",
300
- "show_as_filter" : True
 
 
 
 
 
301
  },
302
  {
303
  "name": "title",
@@ -315,7 +332,7 @@ class SanatanConfig:
315
  " → Convert to: '{prabandham_code} 5.2' and pass as `title` filter.\n"
316
  "Do NOT use `title` for general queries or keyword searches — leave it empty in those cases."
317
  ),
318
- "show_as_filter" : True
319
  },
320
  {
321
  "name": "verse",
@@ -327,7 +344,7 @@ class SanatanConfig:
327
  # "Use it only when a specific prabandham name is NOT mentioned in the user query."
328
  "For e.g. 'Give me pasuram 1176'"
329
  ),
330
- "show_as_filter" : True
331
  },
332
  {
333
  "name": "decade",
@@ -336,7 +353,7 @@ class SanatanConfig:
336
  "description": (
337
  "The decade (or `pathu` in Tamil) that this pasuram belongs to. decade is -1 when there is no associated decade."
338
  ),
339
- "show_as_filter" : True
340
  },
341
  {
342
  "name": "chapter",
@@ -345,7 +362,7 @@ class SanatanConfig:
345
  "description": (
346
  "chapter number of this pasuram. is -1 when there is no associated chapter number"
347
  ),
348
- "show_as_filter" : True
349
  },
350
  {
351
  "name": "position_in_chapter",
@@ -356,7 +373,7 @@ class SanatanConfig:
356
  "Use it only when a specific prabandham name is mentioned in the user query."
357
  "For e.g. 'Give me the 5th pasuram from Thirupavai'"
358
  ),
359
- "show_as_filter" : True
360
  },
361
  ],
362
  "pdf_path": "./data/divya_prabandham.pdf",
@@ -404,7 +421,7 @@ class SanatanConfig:
404
  "datatype": "int",
405
  "label": "Page Number",
406
  "description": "Page number from the source",
407
- "show_as_filter" : True
408
  },
409
  ],
410
  "pdf_path": "./data/bhagavata_purana.pdf",
@@ -438,14 +455,14 @@ class SanatanConfig:
438
  "label": "Kandam",
439
  "datatype": "str",
440
  "description": "The name of the Kandam or the chapter.",
441
- "show_as_filter" : True
442
  },
443
  {
444
  "name": "padalam_en",
445
  "label": "Chapter Name",
446
  "datatype": "str",
447
  "description": "The name of the Padalam (Episode) in English.",
448
- "show_as_filter" : True
449
  },
450
  {
451
  "name": "padalam_ta",
@@ -458,14 +475,14 @@ class SanatanConfig:
458
  "datatype": "int",
459
  "label": "Page Number",
460
  "description": "Page number from the source",
461
- "show_as_filter" : True
462
  },
463
  {
464
  "name": "verse_number",
465
  "datatype": "int",
466
  "label": "Verse Number",
467
  "description": "Verse Number",
468
- "show_as_filter" : True
469
  },
470
  ],
471
  "pdf_path": "./data/kamba_ramayanam.pdf",
@@ -505,14 +522,14 @@ class SanatanConfig:
505
  "metadata_fields": [
506
  {
507
  "name": "chunk_index",
508
- "label" : "Page Index",
509
  "datatype": "int",
510
  "description": "The index of the chunk",
511
- "show_as_filter" : True
512
  },
513
  {
514
  "name": "filename",
515
- "label" : "File name from the source",
516
  "datatype": "str",
517
  "description": "The name of the file.",
518
  },
@@ -555,17 +572,17 @@ class SanatanConfig:
555
  "metadata_fields": [
556
  {
557
  "name": "sloka_number",
558
- "label" : "Slokam Number",
559
  "datatype": "int",
560
  "description": "The index of the sloka or verse",
561
- "show_as_filter" : True
562
  },
563
  {
564
  "name": "meaning_short",
565
- "label" : "Short meaning",
566
  "datatype": "str",
567
  "description": "A short meaning of the sanskrit verse in English.",
568
- "show_as_filter" : True
569
  },
570
  ],
571
  "pdf_path": "./data/chathusloki.pdf",
@@ -598,30 +615,30 @@ class SanatanConfig:
598
  "metadata_fields": [
599
  {
600
  "name": "sloka_number",
601
- "label" : "Slokam Number",
602
  "datatype": "int",
603
  "description": "The index of the sloka or verse",
604
- "show_as_filter" : True
605
  },
606
  {
607
  "name": "meaning_short",
608
- "label" : "Short meaning",
609
  "datatype": "str",
610
  "description": "A short meaning of the sanskrit verse in English.",
611
- "show_as_filter" : True
612
  },
613
  {
614
  "name": "sanskrit",
615
- "label" : "Lyrics in sanskrit",
616
  "datatype": "str",
617
  "description": "Verse in sanskrit",
618
  },
619
  {
620
  "name": "transliteration",
621
- "label" : "English Transliteration",
622
  "datatype": "str",
623
  "description": "Verse transliterated to English",
624
- "show_as_filter" : True
625
  },
626
  ],
627
  "pdf_path": "./data/sri_stavam.pdf",
@@ -653,37 +670,37 @@ class SanatanConfig:
653
  "metadata_fields": [
654
  {
655
  "name": "video_id",
656
- "label" : "Video ID",
657
  "datatype": "str",
658
  "description": "The video id as in YouTube",
659
- "show_as_filter" : True
660
  },
661
  {
662
  "name": "video_title",
663
- "label" : "Video Title",
664
  "datatype": "str",
665
  "description": "The title of the video as in YouTube",
666
- "show_as_filter" : True
667
  },
668
  {
669
  "name": "description",
670
- "label" : "Video Description",
671
  "datatype": "str",
672
  "description": "Description as in YouTube",
673
- "show_as_filter" : True
674
  },
675
  {
676
  "name": "channel_url",
677
- "label" : "Channel URL",
678
  "datatype": "str",
679
  "description": "URL of the YouTube Channel",
680
  },
681
  {
682
  "name": "channel_title",
683
- "label" : "Channel Title",
684
  "datatype": "str",
685
  "description": "Title of the YouTube Channel",
686
- "show_as_filter" : True
687
  },
688
  ],
689
  "pdf_path": "./data/none.pdf",
@@ -766,6 +783,7 @@ class SanatanConfig:
766
  "author",
767
  "chapter_name",
768
  "relative_path",
 
769
  }
770
 
771
  config = next((s for s in self.scriptures if s["name"] == scripture_name), None)
 
1
  from metadata import MetadataWhereClause
2
  from typing import List, Dict
3
 
4
+ import nalayiram_helper
5
+
6
 
7
  class SanatanConfig:
8
  dbStorePath: str = "./chromadb-store"
 
26
  "datatype": "int",
27
  "label": "Page Number",
28
  "description": "Page number from the source",
29
+ "show_as_filter": True,
30
  },
31
  ],
32
  "pdf_path": "./data/vishnu_puranam.pdf",
 
66
  "datatype": "int",
67
  "label": "Page Number",
68
  "description": "Page number from the source",
69
+ "show_as_filter": True,
70
  },
71
  ],
72
  "pdf_path": "./data/shukla-yajur-veda.pdf",
 
103
  "datatype": "int",
104
  "label": "Page Number",
105
  "description": "Page number from the source",
106
+ "show_as_filter": True,
107
  },
108
  ],
109
  "pdf_path": "./data/bhagavat_gita.pdf",
 
146
  "datatype": "int",
147
  "label": "Page Number",
148
  "description": "Page number from the source",
149
+ "show_as_filter": True,
150
  },
151
  ],
152
  "pdf_path": "./data/valmiki_ramayanam.pdf",
 
206
  "label": "Lyrics in sanskrit",
207
  "datatype": "str",
208
  "description": "The original sloka in sanskrit.",
209
+ "show_as_filter": True,
210
  },
211
  {
212
  "name": "translation",
213
  "label": "English Translation",
214
  "datatype": "str",
215
  "description": "The english translation.",
216
+ "show_as_filter": True,
217
  },
218
  {
219
  "name": "transliteration",
220
  "label": "English Transliteration",
221
  "datatype": "str",
222
  "description": "The english transliteration.",
223
+ "show_as_filter": True,
224
  },
225
  {
226
  "name": "verse",
227
  "labek": "Verse Number",
228
  "datatype": "int",
229
  "description": "The verse number of the sloka.",
230
+ "show_as_filter": True,
231
  },
232
  ],
233
  "pdf_path": "./data/vishnu_sahasranamam.pdf",
 
252
  "field_mapping": {
253
  "text": "pasuram_ta",
254
  "title": lambda doc: f"{doc.get('prabandham_name','')} {doc.get('chapter','')}-{doc.get('decade','')}:{doc.get('position_in_chapter','')}",
255
+ "location" : "divya_desams",
256
  "word_by_word_native": "wbw_ta",
257
  "unit_index": "verse",
258
  "transliteration": "pasuram_en",
 
279
  "label": "Prabandham Code",
280
  "datatype": "str",
281
  "description": "contains the short prabandham_code. e.g. `TPL` for `Thiruppallandu`",
 
282
  },
283
  {
284
  "name": "prabandham_name",
285
  "label": "Prabandham Name",
286
  "datatype": "str",
287
  "description": "contains the prabandham name. e.g. `Thiruppallandu`",
288
+ "show_as_filter": True,
289
+ "component": "dropdown",
290
+ "lov": lambda: [
291
+ p.prabandham_name
292
+ for p in nalayiram_helper.get_standardized_prabandham_names()
293
+ ],
294
  },
295
  {
296
  "name": "azhwar_name",
297
  "label": "Azhwar Name",
298
  "datatype": "str",
299
  "description": "contains the azhwar name. e.g. `Thirumangai Azhwar`",
300
+ "show_as_filter": True,
301
+ "component": "dropdown",
302
+ "lov": lambda: [
303
+ azhwar_name
304
+ for azhwar_name in nalayiram_helper.get_standardized_azhwar_names()
305
+ ],
306
  },
307
  {
308
  "name": "divya_desams",
309
  "label": "Divya Desams",
310
  "datatype": "str",
311
  "description": "comma separated list of divya desams. e.g. Thiruneermalai,Thiruvallikkeni.",
312
+ "show_as_filter": True,
313
+ "component": "dropdown",
314
+ "lov": lambda: [
315
+ divya_desam_name
316
+ for divya_desam_name in nalayiram_helper.get_standardized_divya_desam_names()
317
+ ],
318
  },
319
  {
320
  "name": "title",
 
332
  " → Convert to: '{prabandham_code} 5.2' and pass as `title` filter.\n"
333
  "Do NOT use `title` for general queries or keyword searches — leave it empty in those cases."
334
  ),
335
+ "show_as_filter": True,
336
  },
337
  {
338
  "name": "verse",
 
344
  # "Use it only when a specific prabandham name is NOT mentioned in the user query."
345
  "For e.g. 'Give me pasuram 1176'"
346
  ),
347
+ "show_as_filter": True,
348
  },
349
  {
350
  "name": "decade",
 
353
  "description": (
354
  "The decade (or `pathu` in Tamil) that this pasuram belongs to. decade is -1 when there is no associated decade."
355
  ),
356
+ "show_as_filter": True,
357
  },
358
  {
359
  "name": "chapter",
 
362
  "description": (
363
  "chapter number of this pasuram. is -1 when there is no associated chapter number"
364
  ),
365
+ "show_as_filter": True,
366
  },
367
  {
368
  "name": "position_in_chapter",
 
373
  "Use it only when a specific prabandham name is mentioned in the user query."
374
  "For e.g. 'Give me the 5th pasuram from Thirupavai'"
375
  ),
376
+ "show_as_filter": True,
377
  },
378
  ],
379
  "pdf_path": "./data/divya_prabandham.pdf",
 
421
  "datatype": "int",
422
  "label": "Page Number",
423
  "description": "Page number from the source",
424
+ "show_as_filter": True,
425
  },
426
  ],
427
  "pdf_path": "./data/bhagavata_purana.pdf",
 
455
  "label": "Kandam",
456
  "datatype": "str",
457
  "description": "The name of the Kandam or the chapter.",
458
+ "show_as_filter": True,
459
  },
460
  {
461
  "name": "padalam_en",
462
  "label": "Chapter Name",
463
  "datatype": "str",
464
  "description": "The name of the Padalam (Episode) in English.",
465
+ "show_as_filter": True,
466
  },
467
  {
468
  "name": "padalam_ta",
 
475
  "datatype": "int",
476
  "label": "Page Number",
477
  "description": "Page number from the source",
478
+ "show_as_filter": True,
479
  },
480
  {
481
  "name": "verse_number",
482
  "datatype": "int",
483
  "label": "Verse Number",
484
  "description": "Verse Number",
485
+ "show_as_filter": True,
486
  },
487
  ],
488
  "pdf_path": "./data/kamba_ramayanam.pdf",
 
522
  "metadata_fields": [
523
  {
524
  "name": "chunk_index",
525
+ "label": "Page Index",
526
  "datatype": "int",
527
  "description": "The index of the chunk",
528
+ "show_as_filter": True,
529
  },
530
  {
531
  "name": "filename",
532
+ "label": "File name from the source",
533
  "datatype": "str",
534
  "description": "The name of the file.",
535
  },
 
572
  "metadata_fields": [
573
  {
574
  "name": "sloka_number",
575
+ "label": "Slokam Number",
576
  "datatype": "int",
577
  "description": "The index of the sloka or verse",
578
+ "show_as_filter": True,
579
  },
580
  {
581
  "name": "meaning_short",
582
+ "label": "Short meaning",
583
  "datatype": "str",
584
  "description": "A short meaning of the sanskrit verse in English.",
585
+ "show_as_filter": True,
586
  },
587
  ],
588
  "pdf_path": "./data/chathusloki.pdf",
 
615
  "metadata_fields": [
616
  {
617
  "name": "sloka_number",
618
+ "label": "Slokam Number",
619
  "datatype": "int",
620
  "description": "The index of the sloka or verse",
621
+ "show_as_filter": True,
622
  },
623
  {
624
  "name": "meaning_short",
625
+ "label": "Short meaning",
626
  "datatype": "str",
627
  "description": "A short meaning of the sanskrit verse in English.",
628
+ "show_as_filter": True,
629
  },
630
  {
631
  "name": "sanskrit",
632
+ "label": "Lyrics in sanskrit",
633
  "datatype": "str",
634
  "description": "Verse in sanskrit",
635
  },
636
  {
637
  "name": "transliteration",
638
+ "label": "English Transliteration",
639
  "datatype": "str",
640
  "description": "Verse transliterated to English",
641
+ "show_as_filter": True,
642
  },
643
  ],
644
  "pdf_path": "./data/sri_stavam.pdf",
 
670
  "metadata_fields": [
671
  {
672
  "name": "video_id",
673
+ "label": "Video ID",
674
  "datatype": "str",
675
  "description": "The video id as in YouTube",
676
+ "show_as_filter": True,
677
  },
678
  {
679
  "name": "video_title",
680
+ "label": "Video Title",
681
  "datatype": "str",
682
  "description": "The title of the video as in YouTube",
683
+ "show_as_filter": True,
684
  },
685
  {
686
  "name": "description",
687
+ "label": "Video Description",
688
  "datatype": "str",
689
  "description": "Description as in YouTube",
690
+ "show_as_filter": True,
691
  },
692
  {
693
  "name": "channel_url",
694
+ "label": "Channel URL",
695
  "datatype": "str",
696
  "description": "URL of the YouTube Channel",
697
  },
698
  {
699
  "name": "channel_title",
700
+ "label": "Channel Title",
701
  "datatype": "str",
702
  "description": "Title of the YouTube Channel",
703
+ "show_as_filter": True,
704
  },
705
  ],
706
  "pdf_path": "./data/none.pdf",
 
783
  "author",
784
  "chapter_name",
785
  "relative_path",
786
+ "location"
787
  }
788
 
789
  config = next((s for s in self.scriptures if s["name"] == scripture_name), None)
server.py CHANGED
@@ -241,6 +241,19 @@ async def get_scripture_configs():
241
  scriptures = []
242
  for s in SanatanConfig().scriptures:
243
  num_units = SanatanDatabase().count(collection_name=s["collection_name"])
 
 
 
 
 
 
 
 
 
 
 
 
 
244
  scriptures.append(
245
  {
246
  "name": s["name"], # e.g. "bhagavad_gita"
@@ -250,10 +263,11 @@ async def get_scripture_configs():
250
  "total": num_units,
251
  "enabled": "field_mapping" in s,
252
  "source": s.get("source", ""),
253
- "credits": s.get("credits", f"{s.get("source","")}"),
254
- "metadata_fields": s.get("metadata_fields", []),
255
  }
256
  )
 
257
  return {"scriptures": sorted(scriptures, key=lambda s: s["title"])}
258
 
259
 
 
241
  scriptures = []
242
  for s in SanatanConfig().scriptures:
243
  num_units = SanatanDatabase().count(collection_name=s["collection_name"])
244
+
245
+ # Deep copy metadata_fields so we don’t mutate the original config
246
+ metadata_fields = []
247
+ for f in s.get("metadata_fields", []):
248
+ f_copy = dict(f)
249
+ lov = f_copy.get("lov")
250
+ if callable(lov): # evaluate the function
251
+ try:
252
+ f_copy["lov"] = lov()
253
+ except Exception as e:
254
+ f_copy["lov"] = []
255
+ metadata_fields.append(f_copy)
256
+
257
  scriptures.append(
258
  {
259
  "name": s["name"], # e.g. "bhagavad_gita"
 
263
  "total": num_units,
264
  "enabled": "field_mapping" in s,
265
  "source": s.get("source", ""),
266
+ "credits": s.get("credits", f"{s.get('source','')}"),
267
+ "metadata_fields": metadata_fields,
268
  }
269
  )
270
+
271
  return {"scriptures": sorted(scriptures, key=lambda s: s["title"])}
272
 
273