Spaces:
Sleeping
Sleeping
Delete FunctionTools.py
Browse files- FunctionTools.py +0 -249
FunctionTools.py
DELETED
@@ -1,249 +0,0 @@
|
|
1 |
-
import json
|
2 |
-
import chardet
|
3 |
-
import streamlit as st
|
4 |
-
import pandas as pd
|
5 |
-
from llama_index.core.tools.tool_spec.base import BaseToolSpec
|
6 |
-
|
7 |
-
class ScriptureDescriptionToolSpec(BaseToolSpec):
|
8 |
-
'''
|
9 |
-
Purpose: Obtains the description or summary about vedas, mandalas, kandas, shuktas, archakah, adhyaya, and other scriptural elements.
|
10 |
-
Returns: A dictionary containing the description or basic information about the specified scriptural element.
|
11 |
-
Sample query:
|
12 |
-
1. Describe the first kandah, second shukta from Atharvaveda?
|
13 |
-
2. Summarize ShuklaYajurVeda?
|
14 |
-
3. What is the difference between ShuklaYajurVeda and KrishnaYajurVeda?
|
15 |
-
'''
|
16 |
-
# Define the functions that we export to the LLM
|
17 |
-
spec_functions = ["get_description"]
|
18 |
-
|
19 |
-
with open("Data/scripture_descriptions.csv", 'rb') as f:
|
20 |
-
result = chardet.detect(f.read())
|
21 |
-
|
22 |
-
encoding = result['encoding']
|
23 |
-
df = pd.read_csv("Data/scripture_descriptions.csv", encoding=encoding)
|
24 |
-
|
25 |
-
@st.cache_data
|
26 |
-
def get_description(_self, level_0, level_1:int=None, level_2:int=None, level_3:int=None):
|
27 |
-
"""
|
28 |
-
To get the description or basic information about vedas/mandalas/kandas/shukatas/archakah/adhyaya and others.
|
29 |
-
"""
|
30 |
-
try:
|
31 |
-
if level_3 is not None:
|
32 |
-
# Case with Level-2 specified
|
33 |
-
result = _self.df[(_self.df['scripture_name'].str.lower() == level_0.lower())
|
34 |
-
& (_self.df['level_1'] == str(level_1))
|
35 |
-
& (_self.df['level_2'] == str(level_2)) & (_self.df['level_3'] == str(level_3))]
|
36 |
-
elif level_2 is not None:
|
37 |
-
# Case with Level-2 specified
|
38 |
-
result = _self.df[(_self.df['scripture_name'].str.lower() == level_0.lower())
|
39 |
-
& (_self.df['level_1'] == str(level_1)) & (_self.df['level_2'] == str(level_2))]
|
40 |
-
elif level_1 is not None:
|
41 |
-
# Case with Level-1 specified
|
42 |
-
result = _self.df[(_self.df['scripture_name'].str.lower() == level_0.lower())
|
43 |
-
& (_self.df['level_1'] == str(level_1))]
|
44 |
-
else:
|
45 |
-
# Case with only Level-0 specified
|
46 |
-
result = _self.df[_self.df['scripture_name'].str.lower() == level_0.lower()]
|
47 |
-
|
48 |
-
return result.iloc[0].to_dict()
|
49 |
-
except IndexError as e:
|
50 |
-
return json.dumps({"error": f"Failed to get scripture description. {e}"})
|
51 |
-
|
52 |
-
class MantraToolSpec(BaseToolSpec):
|
53 |
-
'''
|
54 |
-
To obtain translations or meaning of vedamantras from RigVeda and AtharvaVeda using the function `get_translation`.
|
55 |
-
The mantra details such as vedamantra, padapatha, rishi, chandah, devata, and swarah from the vedas accessible through the function `get_vedamantra_details`.
|
56 |
-
The mantra summary like anvaya, adhibautic, ahyatmic, adhidaivic meaning of vedamantra accessible using the function 'get_vedamantra_summary'
|
57 |
-
Sample Query:
|
58 |
-
1. What is the vedamantra of the mantra from Rigveda, first mandala, first shukta, and first mantra?
|
59 |
-
2. What is the devata of the vedamantra from Rigveda, first mandala, first shukta, and first mantra?
|
60 |
-
3. What is the meaning of the vedamantra from Rigveda, first mandala, first shukta, and first mantra written by Tulsi Ram?
|
61 |
-
4. What is the (adhibautic) meaning of the vedamantra from RigVeda, first mandala, first shukta, and first mantra?
|
62 |
-
'''
|
63 |
-
spec_functions = ["get_translation", "get_vedamantra_details", "get_vedamantra_summary"]
|
64 |
-
|
65 |
-
TRANSLATION_CSV_PATH = 'Data/trans_Rig_Ath_index_v2.csv'
|
66 |
-
VEDAMANTRA_CSV_PATH = "Data/veda_content_modified_v3.csv"
|
67 |
-
|
68 |
-
def __init__(self):
|
69 |
-
super().__init__()
|
70 |
-
self.df_translation = pd.read_csv(self.TRANSLATION_CSV_PATH, encoding='utf-8')
|
71 |
-
self.df_vedamantra = pd.read_csv(self.VEDAMANTRA_CSV_PATH, encoding='utf-8')
|
72 |
-
|
73 |
-
@st.cache_data
|
74 |
-
def get_translation(_self, mantraid=None, scripture_name=None, MahatmaName=None, KandahNumber=None,
|
75 |
-
MandalaNumber=None, ArchikahNumber=None, ShuktaNumber=None,
|
76 |
-
AnvayaNumber=None, PrapatakNumber=None, MantraNumber=None,
|
77 |
-
AnuvakNumber=None, AdhyayaNumber=None):
|
78 |
-
"""
|
79 |
-
Get the translation of mantras from RigVeda and AtharvaVeda.
|
80 |
-
Sample Query:
|
81 |
-
1. What is the translation of Tulsi Ram of the vedamantra from Rigveda, first mandala, first shukta, and first mantra?
|
82 |
-
2. What is the translation or adhibautic meaning of the vedamantra from RigVeda, first mandala, first shukta, and first mantra?
|
83 |
-
3. What is the subject of the mantra 1.1.84.1?
|
84 |
-
"""
|
85 |
-
try:
|
86 |
-
if mantraid is None:
|
87 |
-
scripture_name_lower = scripture_name.lower() if scripture_name is not None else False
|
88 |
-
if scripture_name_lower == 'rigveda':
|
89 |
-
details = _self.df_translation[
|
90 |
-
(_self.df_translation['scripture_name'].str.lower() == scripture_name_lower)
|
91 |
-
& (_self.df_translation['MandalaNumber'] == MandalaNumber)
|
92 |
-
& (_self.df_translation['ShuktaNumber'] == int(ShuktaNumber))
|
93 |
-
& (_self.df_translation['MantraNumber'] == int(MantraNumber))
|
94 |
-
].to_dict(orient='records')
|
95 |
-
elif scripture_name_lower == 'atharvaveda':
|
96 |
-
details = _self.df_translation[
|
97 |
-
(_self.df_translation['scripture_name'].str.lower() == scripture_name_lower)
|
98 |
-
& (_self.df_translation['KandahNumber'] == KandahNumber)
|
99 |
-
& (_self.df_translation['ShuktaNumber'] == ShuktaNumber)
|
100 |
-
& (_self.df_translation['MantraNumber'] == MantraNumber)].to_dict(orient='records')
|
101 |
-
elif scripture_name_lower == 'samaveda':
|
102 |
-
details = _self.df_translation[
|
103 |
-
(_self.df_translation['scripture_name'].str.lower() == scripture_name_lower)
|
104 |
-
& (_self.df_translation['ArchikahNumber'] == ArchikahNumber)
|
105 |
-
& (_self.df_translation['ShuktaNumber'] == ShuktaNumber)
|
106 |
-
& (_self.df_translation['MantraNumber'] == MantraNumber)].to_dict(orient='records')
|
107 |
-
elif scripture_name_lower == 'krishnayajurveda':
|
108 |
-
details = _self.df_translation[
|
109 |
-
(_self.df_translation['scripture_name'].str.lower() == scripture_name_lower)
|
110 |
-
& (_self.df_translation['PrapatakNumber'] == PrapatakNumber)
|
111 |
-
& (_self.df_translation['AnuvakNumber'] == AnuvakNumber)
|
112 |
-
& (_self.df_translation['MantraNumber'] == MantraNumber)].to_dict(orient='records')
|
113 |
-
else:
|
114 |
-
details = _self.df_translation[
|
115 |
-
(_self.df_translation['scripture_name'].str.lower() == scripture_name_lower)
|
116 |
-
& (_self.df_translation['AdhyayaNumber'] == AdhyayaNumber)
|
117 |
-
& (_self.df_translation['MantraNumber'] == MantraNumber)
|
118 |
-
].to_dict(orient='records')
|
119 |
-
else:
|
120 |
-
details = _self.df_translation[_self.df_translation['mantra_id'] == mantraid].to_dict(orient='records')
|
121 |
-
|
122 |
-
if MahatmaName is not None:
|
123 |
-
for item in details:
|
124 |
-
if item['MahatmaName'] == MahatmaName:
|
125 |
-
return item
|
126 |
-
else:
|
127 |
-
return details
|
128 |
-
except Exception as e:
|
129 |
-
return json.dumps({"error": f"Failed to get translation. {e}"})
|
130 |
-
|
131 |
-
@st.cache_data
|
132 |
-
def get_vedamantra_details(_self, mantraid=None, scripture_name=None, KandahNumber=None,
|
133 |
-
MandalaNumber=None, ArchikahNumber=None, ShuktaNumber=None,
|
134 |
-
AnvayaNumber=None, PrapatakNumber=None, MantraNumber=None,
|
135 |
-
AnuvakNumber=None, AdhyayaNumber=None):
|
136 |
-
"""
|
137 |
-
To obtain the vedamantra details such as vedamantra, padapata, devata, rishi, swarah, and chandah.
|
138 |
-
1. What is the vedamantra of the mantra from Rigveda, first mandala, first shukta, and first mantra?
|
139 |
-
2. What is the devata of the vedamantra from Rigveda, first mandala, first shukta, and first mantra?
|
140 |
-
"""
|
141 |
-
try:
|
142 |
-
if mantraid is None:
|
143 |
-
scripture_name_lower = scripture_name.lower() if scripture_name is not None else False
|
144 |
-
|
145 |
-
if scripture_name_lower == 'rigveda':
|
146 |
-
conditions = (_self.df_vedamantra['scripture_name'].str.lower() == scripture_name_lower) & \
|
147 |
-
(_self.df_vedamantra['MandalaNumber'] == MandalaNumber) & \
|
148 |
-
(_self.df_vedamantra['ShuktaNumber'] == ShuktaNumber) & \
|
149 |
-
(_self.df_vedamantra['MantraNumber'] == str(MantraNumber))
|
150 |
-
details = _self.df_vedamantra[conditions]['mantra_json'].values
|
151 |
-
vedamantra_details = json.loads(details[0])['mantraHeader']['language'][1]['mandala']['shukta']['mantra']
|
152 |
-
|
153 |
-
elif scripture_name_lower == 'atharvaveda':
|
154 |
-
conditions = (_self.df_vedamantra['scripture_name'].str.lower() == scripture_name_lower) & \
|
155 |
-
(_self.df_vedamantra['KandahNumber'] == KandahNumber) & \
|
156 |
-
(_self.df_vedamantra['ShuktaNumber'] == ShuktaNumber) & \
|
157 |
-
(_self.df_vedamantra['MantraNumber'] == str(MantraNumber))
|
158 |
-
details = _self.df_vedamantra[conditions]['mantra_json'].values
|
159 |
-
vedamantra_details = json.loads(details[0])['mantraHeader']['language'][1]['kandah']['shukta']['mantra']
|
160 |
-
elif scripture_name_lower == 'samaveda':
|
161 |
-
conditions = (_self.df_vedamantra['scripture_name'].str.lower() == scripture_name_lower) & \
|
162 |
-
(_self.df_vedamantra['ArchikahNumber'] == ArchikahNumber) & \
|
163 |
-
(_self.df_vedamantra['ShuktaNumber'] == ShuktaNumber) & \
|
164 |
-
(_self.df_vedamantra['MantraNumber'] == str(MantraNumber))
|
165 |
-
details = _self.df_vedamantra[conditions]['mantra_json'].values
|
166 |
-
vedamantra_details = json.loads(details[0])['mantraHeader']['language'][1]['archikah']
|
167 |
-
elif scripture_name_lower == 'krishnayajurveda':
|
168 |
-
conditions = (_self.df_vedamantra['scripture_name'].str.lower() == scripture_name_lower) & \
|
169 |
-
(_self.df_vedamantra['PrapatakNumber'] == PrapatakNumber) & \
|
170 |
-
(_self.df_vedamantra['AnuvakNumber'] == AnuvakNumber) & \
|
171 |
-
(_self.df_vedamantra['MantraNumber'] == str(MantraNumber))
|
172 |
-
details = _self.df_vedamantra[conditions]['mantra_json'].values
|
173 |
-
vedamantra_details = json.loads(details[0])['mantraHeader']['language'][1]['kandah']['prapatak']['anuvak']
|
174 |
-
else:
|
175 |
-
conditions = (_self.df_vedamantra['scripture_name'].str.lower() == scripture_name_lower) & \
|
176 |
-
(_self.df_vedamantra['AdhyayaNumber'] == AdhyayaNumber) & \
|
177 |
-
(_self.df_vedamantra['MantraNumber'] == str(MantraNumber))
|
178 |
-
details = _self.df_vedamantra[conditions]['mantra_json'].values
|
179 |
-
vedamantra_details = json.loads(details[0])['mantraHeader']['language'][1]['adhyaya']['mantra']
|
180 |
-
|
181 |
-
else:
|
182 |
-
# Handle case when mantraid is provided
|
183 |
-
details = _self.df_vedamantra[_self.df_vedamantra['mantra_number'] == mantraid]['mantra_json'].values
|
184 |
-
vedamantra_details = json.loads(details[0])['mantraHeader']['language'][1]
|
185 |
-
|
186 |
-
return vedamantra_details
|
187 |
-
except Exception as e:
|
188 |
-
return json.dumps({"error": f"Failed to get vedamantra details. {str(e)}"})
|
189 |
-
|
190 |
-
@st.cache_data
|
191 |
-
def get_vedamantra_summary(_self, mantraid=None, scripture_name=None, KandahNumber=None,
|
192 |
-
MandalaNumber=None, ArchikahNumber=None, ShuktaNumber=None,
|
193 |
-
AnvayaNumber=None, PrapatakNumber=None, MantraNumber=None,
|
194 |
-
AnuvakNumber=None, AdhyayaNumber=None):
|
195 |
-
'''
|
196 |
-
To obtain the vedamantra summary like anvaya, translation, adhibautic, adhyatmic, adhidaivic meaning of the mantra.
|
197 |
-
1. What is the adhibautic meaning of the mantra from AtharvaVeda, first kandah, first shukta, and first mantra?
|
198 |
-
2. What is the anvaya of the vedamantra from Rigveda, first mandala, first shukta, and first mantra?
|
199 |
-
'''
|
200 |
-
try:
|
201 |
-
if mantraid is None:
|
202 |
-
scripture_name_lower = scripture_name.lower() if scripture_name is not None else False
|
203 |
-
if scripture_name_lower == 'rigveda':
|
204 |
-
details = _self.df_vedamantra[
|
205 |
-
(_self.df_vedamantra['scripture_name'].str.lower() == scripture_name_lower)
|
206 |
-
& (_self.df_vedamantra['MandalaNumber'] == MandalaNumber)
|
207 |
-
& (_self.df_vedamantra['ShuktaNumber'] == ShuktaNumber)
|
208 |
-
& (_self.df_vedamantra['MantraNumber'] == str(MantraNumber))
|
209 |
-
]['mantra_json'].values
|
210 |
-
elif scripture_name_lower == 'atharvaveda':
|
211 |
-
details = _self.df_vedamantra[
|
212 |
-
(_self.df_vedamantra['scripture_name'].str.lower() == scripture_name_lower)
|
213 |
-
& (_self.df_vedamantra['KandahNumber'] == KandahNumber)
|
214 |
-
& (_self.df_vedamantra['ShuktaNumber'] == ShuktaNumber)
|
215 |
-
& (_self.df_vedamantra['MantraNumber'] == str(MantraNumber))
|
216 |
-
]['mantra_json'].values
|
217 |
-
elif scripture_name_lower == 'samaveda':
|
218 |
-
details = _self.df_vedamantra[
|
219 |
-
(_self.df_vedamantra['scripture_name'].str.lower() == scripture_name_lower)
|
220 |
-
& (_self.df_vedamantra['ArchikahNumber'] == ArchikahNumber)
|
221 |
-
& (_self.df_vedamantra['ShuktaNumber'] == ShuktaNumber)
|
222 |
-
& (_self.df_vedamantra['MantraNumber'] == str(MantraNumber))
|
223 |
-
]['mantra_json'].values
|
224 |
-
elif scripture_name_lower == 'krishnayajurveda':
|
225 |
-
details = _self.df_vedamantra[
|
226 |
-
(_self.df_vedamantra['scripture_name'].str.lower() == scripture_name_lower)
|
227 |
-
& (_self.df_vedamantra['PrapatakNumber'] == PrapatakNumber)
|
228 |
-
& (_self.df_vedamantra['AnuvakNumber'] == AnuvakNumber)
|
229 |
-
& (_self.df_vedamantra['MantraNumber'] == str(MantraNumber))
|
230 |
-
]['mantra_json'].values
|
231 |
-
else:
|
232 |
-
details = _self.df_vedamantra[
|
233 |
-
(_self.df_vedamantra['scripture_name'].str.lower() == scripture_name_lower)
|
234 |
-
& (_self.df_vedamantra['AdhyayaNumber'] == AdhyayaNumber)
|
235 |
-
& (_self.df_vedamantra['MantraNumber'] == str(MantraNumber))
|
236 |
-
]['mantra_json'].values
|
237 |
-
else:
|
238 |
-
details = _self.df_vedamantra[_self.df_vedamantra['mantra_number'] == mantraid]['mantra_json'].values
|
239 |
-
|
240 |
-
jsonDict = json.loads(details[0])
|
241 |
-
mantraSummary = jsonDict['mantraSummary']['language']
|
242 |
-
mantraSummary_IAST = jsonDict['mantraSummary']['language'][1]
|
243 |
-
vedamantra_summary = {"Roman-IAST summary of vedamantra": mantraSummary_IAST}
|
244 |
-
for item in mantraSummary:
|
245 |
-
if item['languageName'] == 'English':
|
246 |
-
vedamantra_summary.update({"English summary of vedamantra": item})
|
247 |
-
return vedamantra_summary
|
248 |
-
except Exception as e:
|
249 |
-
return json.dumps({"error": f"Failed to get vedamantra summary. {e}"})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|