Sumandas990 commited on
Commit
17b9bb5
·
verified ·
1 Parent(s): 32f17f5
Files changed (1) hide show
  1. app.py +63 -24
app.py CHANGED
@@ -1,43 +1,82 @@
1
- import os, gradio as gr
2
- from openai import OpenAI
 
 
 
3
 
4
- MODEL = "gpt-4o-mini" # multilingual, great for Hindi/Bangla
5
  SYSTEM_HI = "तुम एक सहायक हिन्दी सहायक हो। स्पष्ट, संक्षिप्त और सही उत्तर दो।"
6
  SYSTEM_BN = "তুমি একজন সহায়ক বাংলা সহকারী। সংক্ষিপ্ত, স্পষ্ট এবং সঠিক উত্তর দাও।"
7
 
8
- client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
9
-
10
- def chat_fn(history, lang):
 
 
 
 
11
  sys = SYSTEM_BN if lang == "bn" else SYSTEM_HI
12
- # convert Gradio history -> OpenAI messages
13
- msgs = [{"role": "system", "content": sys}]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  for user, bot in history:
15
- msgs.append({"role": "user", "content": user})
 
16
  if bot:
17
- msgs.append({"role": "assistant", "content": bot})
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
- resp = client.chat.completions.create(model=MODEL, messages=msgs, temperature=0.6, max_tokens=400)
20
- return resp.choices[0].message.content
 
21
 
22
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
23
  gr.Markdown("### 🇮🇳 Indic Chat — हिंदी / বাংলা")
24
- with gr.Row():
25
- lang = gr.Radio(choices=[("हिन्दी","hi"), ("বাংলা","bn")], value=("हिन्दी","hi"), label="Language")
 
 
 
26
  chat = gr.Chatbot(height=420, type="tuple")
27
  txt = gr.Textbox(placeholder="Type in Hindi or Bangla…", autofocus=True)
28
  send = gr.Button("Send")
29
 
30
- def user_send(user_text, chat_state):
31
- if not user_text.strip(): return gr.update(), chat_state
32
- chat_state = chat_state + [(user_text, None)]
33
- return "", chat_state
34
 
35
- def bot_reply(chat_state, lang_val):
36
- answer = chat_fn(chat_state, lang_val[1])
37
- chat_state[-1] = (chat_state[-1][0], answer)
38
- return chat_state
39
 
40
- txt.submit(user_send, [txt, chat], [txt, chat]).then(bot_reply, [chat, lang], [chat])
41
- send.click(user_send, [txt, chat], [txt, chat]).then(bot_reply, [chat, lang], [chat])
42
 
43
  demo.launch()
 
1
+ import os
2
+ import gradio as gr
3
+
4
+ # We import lazily inside the function to avoid crashing on startup if the key isn't set.
5
+ MODEL = "gpt-4o-mini"
6
 
 
7
  SYSTEM_HI = "तुम एक सहायक हिन्दी सहायक हो। स्पष्ट, संक्षिप्त और सही उत्तर दो।"
8
  SYSTEM_BN = "তুমি একজন সহায়ক বাংলা সহকারী। সংক্ষিপ্ত, স্পষ্ট এবং সঠিক উত্তর দাও।"
9
 
10
+ def chat_fn(history, lang_label):
11
+ """
12
+ history: list of (user, bot) tuples from gr.Chatbot
13
+ lang_label: "हिन्दी" or "বাংলা"
14
+ """
15
+ # Map UI label -> code
16
+ lang = "bn" if lang_label == "বাংলা" else "hi"
17
  sys = SYSTEM_BN if lang == "bn" else SYSTEM_HI
18
+
19
+ # Check API key
20
+ api_key = os.getenv("OPENAI_API_KEY", "").strip()
21
+ if not api_key:
22
+ msg = ("❗ OPENAI_API_KEY not set in this Space’s Settings → Variables and secrets."
23
+ if lang == "hi" else
24
+ "❗ এই স্পেসের Settings → Variables and secrets এ OPENAI_API_KEY সেট করা হয়নি।")
25
+ return history + [("", msg)]
26
+
27
+ # Import + client only when needed (safer on cold start)
28
+ try:
29
+ from openai import OpenAI
30
+ client = OpenAI(api_key=api_key)
31
+ except Exception as e:
32
+ err = f"OpenAI client error: {e}"
33
+ return history + [("", err if lang == "hi" else f"OpenAI ক্লায়েন্ট ত্রুটি: {e}")]
34
+
35
+ # Convert history to OpenAI messages
36
+ messages = [{"role": "system", "content": sys}]
37
  for user, bot in history:
38
+ if user:
39
+ messages.append({"role": "user", content_or_key("content"): user})
40
  if bot:
41
+ messages.append({"role": "assistant", "content": bot})
42
+
43
+ try:
44
+ resp = client.chat.completions.create(
45
+ model=MODEL,
46
+ messages=messages,
47
+ temperature=0.6,
48
+ max_tokens=400,
49
+ )
50
+ answer = resp.choices[0].message.content
51
+ return history + [("", answer)]
52
+ except Exception as e:
53
+ err = f"API error: {e}"
54
+ return history + [("", err if lang == "hi" else f"API ত্রুটি: {e}")]
55
 
56
+ def content_or_key(key_name):
57
+ # tiny helper to satisfy static analyzers; keeps code readable above
58
+ return key_name
59
 
60
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
61
  gr.Markdown("### 🇮🇳 Indic Chat — हिंदी / বাংলা")
62
+ lang = gr.Radio(
63
+ choices=["हिन्दी", "বাংলা"],
64
+ value="हिन्दी",
65
+ label="Language"
66
+ )
67
  chat = gr.Chatbot(height=420, type="tuple")
68
  txt = gr.Textbox(placeholder="Type in Hindi or Bangla…", autofocus=True)
69
  send = gr.Button("Send")
70
 
71
+ def on_user_submit(user_text, chat_state):
72
+ if not user_text.strip():
73
+ return "", chat_state
74
+ return "", chat_state + [(user_text, None)]
75
 
76
+ def on_bot_reply(chat_state, lang_label):
77
+ return chat_fn(chat_state, lang_label)
 
 
78
 
79
+ txt.submit(on_user_submit, [txt, chat], [txt, chat]).then(on_bot_reply, [chat, lang], [chat])
80
+ send.click(on_user_submit, [txt, chat], [txt, chat]).then(on_bot_reply, [chat, lang], [chat])
81
 
82
  demo.launch()