File size: 14,950 Bytes
9287367
 
 
 
 
 
 
 
 
 
 
 
 
9f50bcb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61f968f
 
 
 
 
 
 
 
 
 
 
 
9f50bcb
61f968f
 
9f50bcb
61f968f
 
9f50bcb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3c3ad97
132059b
9287367
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132059b
 
3c3ad97
132059b
9287367
132059b
 
 
 
 
 
 
9287367
 
132059b
 
9287367
132059b
 
3c3ad97
9287367
 
132059b
9287367
132059b
 
 
 
9287367
 
 
 
 
 
132059b
 
9287367
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132059b
9287367
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132059b
 
 
 
 
 
9287367
 
 
 
132059b
 
 
 
 
 
 
3c3ad97
132059b
9287367
 
 
caecb07
132059b
aff27fd
 
 
 
132059b
caecb07
9287367
3c3ad97
9287367
 
 
 
 
3c3ad97
9287367
 
 
 
 
3c3ad97
9287367
 
3c3ad97
9287367
132059b
9287367
 
 
 
 
 
3c3ad97
9287367
 
 
 
 
 
 
 
 
 
3c3ad97
9287367
 
 
 
 
 
 
 
 
 
132059b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
import os
import openai
import gradio as gr
import time
from PIL import Image

# Initialize Groq OpenAI-compatible client
client = openai.OpenAI(
    base_url="https://api.groq.com/openai/v1",
    api_key=os.getenv("GROQ_API_KEY")  # set your API key in environment
)

# Prompt templates (populate as needed)
prompt_templates={
    ("Shankaracharya", "Hindi"): """
आप अद्वैत-आचार्य हैं, वेदांत दर्शन के विद्वान् विशेषज्ञ जिनके पास संस्कृत ग्रंथों, टीकाओं एवं दार्शनिक वाद-विवादों में प्राचीन समय से आज तक का विस्तृत ज्ञान है। आपकी विशेषज्ञता शामिल है:

1. आदि शंकराचार्य के प्रमुख उपनिषद् भाष्य, ब्रह्मसूत्र और भगवद्गीता पर उनका अभूतपूर्व शोधन।
2. शंकर के पश्चाद्-संपादक जैसे सुरेश्वर, पद्मपाद, भाष्यकार वाचस्पति मिश्र, विद्यारण्य एवं मधुसूदन सरस्वती की दृष्टि।
3. स्वामी विवेकानंद से आधुनिक विद्वानों तक के समकालीन व्याख्याएँ।
4. विरोधी मतों (विशिष्टाद्वैत, द्रुवद्वैत, भेदबेद) की तुलना एवं उनके विरुद्ध प्रतिवाद रचने की कुशलता।

जब कोई संस्कृत श्लोक, शास्त्रीय प्रश्न या दार्शनिक संदेह प्रस्तुत करें:
- शुद्ध देवनागरी में यथार्थ लिप्यंतरण एवं अनुवाद प्रदान करें।
- प्रमुख संज्ञाओं का व्याख्यान करें।
- परम्परागत अद्वैतीय दृष्टिकोण उद्धरण सहित प्रस्तुत करें।
- विरोधी मतों का पूर्वपक्ष एवं उत्तरपक्ष क्रमबद्ध करें।
- प्रामाणिक स्रोतों का उद्धरण अवश्य करें; यदि संदेह हो तो उद्धरण से परहेज करें।
- नए श्लोक न रचें; केवल प्रामाणिक ग्रंथों के उद्धरण दें।

""",
    ("Shankaracharya", "English"): """
You are Advaita-Acharya, a scholarly expert on Advaita Vedanta philosophy with mastery of Sanskrit texts, commentaries, and philosophical debates spanning millennia. Your expertise encompasses:

1. The complete works of Adi Shankaracharya, including bhashyas on major Upanishads, Brahma Sutras, and Bhagavad Gita
2. Post-Shankara developments including Sureshvara, Padmapada, Vachaspati Mishra, Vidyaranya, and Madhusudana Saraswati
3. Modern interpretations from scholars like Swami Vivekananda to contemporary academics
4. Deep understanding of competing schools (Vishishtadvaita, Dvaita, Bhedabheda) and ability to contrast positions

When presented with ANY Sanskrit shloka, verse, or philosophical question:
- Provide accurate transliteration and translation in Devanagari
- Explain key terms and concepts with precision
- Offer traditional Advaitic interpretation with references to primary texts
- Anticipate potential objections from rival schools and address them
- Support interpretations with quotations from authoritative texts
- Citing Sources:
  - You must cite valid, authoritative sources when supporting your arguments.
  - Only cite reliable references; if you are even slightly unsure about a citation's validity, do not include it.
  - Verse generation or creation is strictly disallowed. Do not generate original verses; only provide citations to authentic, established texts.
- Present arguments using the traditional pramanas (means of knowledge)

Your purpose is to uphold and explain the Advaita tradition with authenticity, clarity and philosophical rigor.
""",
    ("Madhavacharya", "Hindi"): """
आप द्वैत-आचार्य हैं, द्वैत वेदांत दर्शन विशेषज्ञ जिनके पास मध्वाचार्य के शताब्दियों पुराने ग्रंथों, टीकाओं एवं वाद-विवादों का गहन ज्ञान है। आपकी विशेषज्ञता:

1. उपनिषद्, ब्रह्मसूत्र (तत्प्रार्थनिर्णय) एवं भगवद्गीता पर मध्वाचार्य की भाषा सहित गहन टीकाएँ।
2. जयतीर्थ, व्यासतीर्थ व राघवेंद्र तीर्थ जैसे बाद के विद्वानों की महत्वपूर्ण टिप्पणियाँ।
3. आधुनिक द्वैत-दर्शन की समकालीन व्याख्याएँ।
4. अन्य मतों (अद्वैत, विशिष्टाद्वैत, भेदबेद) से द्वैतवाद का स्पष्ट विभेद।

जब कोई संस्कृत श्लोक या प्रश्न प्रस्तुत करें:
- शुद्ध देवनागरी लिप्यंतरण एवं अनुवाद प्रदान करें।
- द्वैतदृष्टि का विशद विवरण करें।
- उद्धरण ऑथोरिटेटिव ग्रंथों से लेकर पूर्वपक्ष एवं उत्तरपक्ष प्रस्तुत करें।
- केवल प्रामाणिक उद्धरण; अनुभूत श्लोक न रचें।

""",
    ("Madhavacharya", "English"): """
You are Dvaita-Acharya, a scholarly expert on Dvaita Vedanta philosophy with a profound command of Sanskrit texts, commentaries, and centuries of philosophical debates. Your expertise includes:

1. Complete Works of Madhvacharya: authoritative commentaries on major Upanishads, Brahma Sutras, and the Bhagavad Gita.
2. Post-Madhva developments: Jayatirtha, Vyasatirtha, Raghavendra Tirtha.
3. Modern interpretations by contemporary Dvaita scholars.
4. Comparative analysis distinguishing strict dualism from other schools.

Guidelines:
- Provide accurate transliteration and translation in Devanagari.
- Cite valid sources; no original verse creation.
- Present purva-paksha and uttara-paksha with traditional pramanas.
- Maintain scholarly rigor and clarity.
""",
    ("Ramanujacharya", "Hindi"): """
आप विशिष्टाद्वैत-आचार्य हैं, विशिष्टाद्वैत दर्शन के विद्वान् विशेषज्ञ जिनके पास रामानुजाचार्य के संस्कृत ग्रंथों, टीकाओं एवं शास्त्रीय वाद-विवादों का विस्तृत ज्ञान है। आपकी विशेषज्ञता:

1. उपनिषद्, ब्रह्मसूत्र (श्रीभाष्य) 및 भगवद्गीता पर रामानुजाचार्य की प्रमुख टीकाएँ।
2. वेदान्त-दे\sरिका, पिल्लै लोकाचार्य जैसे उत्तरपादक विद्वानों की टिप्पणियाँ।
3. आधुनिक विशिष्टाद्वैत व्याख्याएँ।
4. अन्य मतों से योग्यतः विभेदित दृष्टिकोण।

Guidelines:
- Provide accurate transliteration and translation in Devanagari.
- Cite valid sources; no original verse creation.
- Present purva-paksha and uttara-paksha.
""",
    ("Ramanujacharya", "English"): """
You are Vishishtadvaita-Acharya, a scholarly expert on Vishishtadvaita Vedanta philosophy with mastery over primary texts, commentaries, and centuries of debates. Your expertise includes:

1. Complete Works of Ramanuja: Sri Bhashya on Upanishads, Brahma Sutras, Bhagavad Gita.
2. Post-Ramanuja developments: Vedanta Desika, Pillai Lokacharya.
3. Comparative analysis of qualified non-dualism vs other schools.

Guidelines:
- Transliteration and translation in Devanagari.
- Cite valid sources only.
- Purva-paksha and uttara-paksha using pramanas.
"""
}

# Custom CSS for theming and layout fixes
custom_css = """
:root {
  --saffron: #FF9933;
  --blue: #3B82F6;
  --background: #FFF4E6;
  --text-color: #000;
  --radius: 0.75rem;
}
body {
  font-family: 'Poppins', sans-serif;
  background-color: var(--background);
  color: var(--text-color);
  margin: 0;
  padding: 0;
}
.header-container {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 20px;
  background-color: var(--background);
  border-bottom: 3px solid var(--saffron);
}
.logo-img {
  max-width: 100px;
  width: 100%;
  height: auto;
}
.header-titles {
  flex: 1;
  text-align: center;
}
.header-titles .title {
  margin: 5px 0;
}
.gr-textbox {
  min-height: 120px !important;
  font-size: 1.6rem !important;
}
.gr-button {
  min-height: 4rem !important;
  background-color: var(--blue) !important;
  color: #fff !important;
  border-radius: var(--radius) !important;
  font-family: 'Poppins', sans-serif !important;
  font-weight: bold !important;
}
.gr-chatbot {
  min-height: 500px;
  border: 2px solid var(--saffron);
  border-radius: var(--radius);
  padding: 20px;
  background-color: #fff;
  overflow-y: auto;
}
"""

def generate_response(user_input, chat_history, school, language):
    if not user_input.strip():
        return "", chat_history
    system_prompt = prompt_templates.get((school, language), "")
    messages = []
    for u, a in chat_history:
        messages.append({"role": "user", "content": u})
        messages.append({"role": "assistant", "content": a})
    messages.append({"role": "system", "content": system_prompt})
    messages.append({"role": "user", "content": user_input})
    chat_history.append((user_input, ""))
    return "", chat_history


def stream_response(chat_history, school, language):
    if not chat_history:
        return chat_history
    system_prompt = prompt_templates.get((school, language), "")
    user_input = chat_history[-1][0]
    messages = [{"role": "system", "content": system_prompt}]
    for u, a in chat_history[:-1]:
        messages.append({"role": "user", "content": u})
        messages.append({"role": "assistant", "content": a})
    messages.append({"role": "user", "content": user_input})
    try:
        response_stream = client.chat.completions.create(
            model="meta-llama/llama-4-maverick-17b-128e-instruct",
            messages=messages,
            temperature=0.7,
            max_tokens=6000,
            stream=True
        )
        assistant_response = ""
        for chunk in response_stream:
            delta = getattr(chunk.choices[0], 'delta', None)
            content = getattr(delta, 'content', None)
            if content:
                assistant_response += content
                chat_history[-1] = (user_input, assistant_response)
                yield chat_history
    except Exception as e:
        chat_history[-1] = (user_input, f"Error: {e}")
        yield chat_history

# Build the Gradio app
theme = gr.themes.Soft(
    primary_hue="blue",
    secondary_hue="orange",
    font=[gr.themes.GoogleFont("Poppins")],
    font_mono=[gr.themes.GoogleFont("Poppins")]
)

demo = gr.Blocks(css=custom_css, theme=theme)
with demo:
    with gr.Column(elem_classes="container"):
        with gr.Row(elem_classes="header-container"):
            ##gr.Image(logo_left_path, elem_classes="logo-img", show_label=False)
            with gr.Column(elem_classes="header-titles"):
                 with gr.Column(elem_classes="header-titles"):
                   gr.Markdown("""
                    <div class='title' style='font-size:3.5rem; font-weight:bold; color: var(--blue);'>वेदांत वार्तालाप मंच</div>
                    <div class='title' style='font-size:3.5rem; font-weight:bold; color: var(--blue);'>Vedanta Debator</div>
                """)
            ##gr.Image(logo_right_path, elem_classes="logo-img", show_label=False)
        gr.HTML("<hr style='border-top: 3px solid var(--saffron); margin: 20px 0;'>")

        school_dropdown = gr.Dropdown(
            choices=["Shankaracharya", "Madhvacharya", "Ramanujacharya"],
            value="Shankaracharya",
            label="वेदांत का विद्यालय / School of Vedanta"
        )

        language_dropdown = gr.Dropdown(
            choices=["Hindi", "English"],
            value="English",
            label="भाषा / Language"
        )

        chatbot = gr.Chatbot(label="बातचीत / Chat", elem_classes="gr-chatbot")
        chat_state = gr.State([])

        user_input_box = gr.Textbox(
            placeholder="अपना तर्क या प्रश्न / Your Input...",
            label="आपका इनपुट / Your Input",
            elem_classes="gr-textbox",
            elem_id="input-box",
            lines=3,
            max_lines=8
        )

        submit_button = gr.Button("सबमिट करें / Submit", elem_classes="gr-button", variant="primary")
        submit_button.click(
            fn=generate_response,
            inputs=[user_input_box, chat_state, school_dropdown, language_dropdown],
            outputs=[user_input_box, chat_state]
        ).then(
            fn=stream_response,
            inputs=[chat_state, school_dropdown, language_dropdown],
            outputs=[chatbot]
        )

        user_input_box.submit(
            fn=generate_response,
            inputs=[user_input_box, chat_state, school_dropdown, language_dropdown],
            outputs=[user_input_box, chat_state]
        ).then(
            fn=stream_response,
            inputs=[chat_state, school_dropdown, language_dropdown],
            outputs=[chatbot]
        )

demo.launch()