Sumandas990 commited on
Commit
3ca0fed
·
verified ·
1 Parent(s): 14d9494

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +74 -61
app.py CHANGED
@@ -1,85 +1,98 @@
1
- import os
2
  import gradio as gr
 
 
3
 
4
- MODEL = "gpt-4o-mini"
 
 
5
 
6
- SYSTEM_HI = "तुम एक सहायक हिन्दी सहायक हो। स्पष्ट, संक्षिप्त और सही उत्तर दो।"
7
- SYSTEM_BN = "তুমি একজন সহায়ক বাংলা সহকারী। সংক্ষিপ্ত, স্পষ্ট এবং সঠিক উত্তর দাও।"
8
 
9
- def call_openai(messages):
10
- api_key = os.getenv("OPENAI_API_KEY", "").strip()
11
- if not api_key:
12
- raise RuntimeError("OPENAI_API_KEY is not set in Settings → Variables and secrets")
13
 
14
- # Lazy import so startup doesn't crash if deps missing
15
- from openai import OpenAI
16
- client = OpenAI(api_key=api_key)
 
17
 
18
- resp = client.chat.completions.create(
19
- model=MODEL,
20
- messages=messages,
21
- temperature=0.6,
22
- max_tokens=400,
 
 
23
  )
24
- return resp.choices[0].message.content
25
 
26
- def build_messages(history, lang_label):
27
- # lang_label is "हिन्दी" or "বাংলা"
28
- lang = "bn" if lang_label == "বাংলা" else "hi"
29
- sys = SYSTEM_BN if lang == "bn" else SYSTEM_HI
 
 
30
 
31
- messages = [{"role": "system", "content": sys}]
 
 
 
32
  for user, bot in history:
33
  if user:
34
- messages.append({"role": "user", "content": user})
35
  if bot:
36
- messages.append({"role": "assistant", "content": bot})
37
- return messages
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
  def on_user_submit(user_text, chat_state):
40
- """Append the user message; bot will fill the reply in the next step."""
41
  if not user_text.strip():
42
  return "", chat_state
43
- chat_state = chat_state + [(user_text, None)]
44
- return "", chat_state
45
-
46
- def on_bot_reply(chat_state, lang_label):
47
- """Call the model and set the reply for the last turn."""
48
- try:
49
- messages = build_messages(chat_state, lang_label)
50
- answer = call_openai(messages)
51
- # put the bot answer into the last tuple
52
- last_user, _ = chat_state[-1]
53
- chat_state[-1] = (last_user, answer)
54
- return chat_state
55
- except Exception as e:
56
- last_user, _ = chat_state[-1]
57
- err_hi = f"त्रुट��: {e}"
58
- err_bn = f"ত্রুটি: {e}"
59
- chat_state[-1] = (last_user, err_bn if lang_label == "বাংলা" else err_hi)
60
- return chat_state
61
 
62
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
63
- gr.Markdown("### 🇮🇳 Indic Chat — हिंदी / বাংলা")
64
-
65
- lang = gr.Radio(
66
- choices=["हिन्दी", "বাংলা"],
67
- value="हिन्दी",
68
- label="Language",
69
- )
70
 
71
- # Use 'tuples' (plural)
72
  chat = gr.Chatbot(height=420, type="tuples")
73
-
74
- txt = gr.Textbox(placeholder="Type in Hindi or Bangla…", autofocus=True)
75
  send = gr.Button("Send")
76
 
77
- # Wire up: user adds a turn → then bot replies
78
- txt.submit(on_user_submit, [txt, chat], [txt, chat]).then(
79
- on_bot_reply, [chat, lang], [chat]
80
- )
81
- send.click(on_user_submit, [txt, chat], [txt, chat]).then(
82
- on_bot_reply, [chat, lang], [chat]
83
- )
84
 
85
  demo.launch()
 
 
1
  import gradio as gr
2
+ import torch
3
+ from transformers import AutoTokenizer, AutoModelForCausalLM, TextGenerationPipeline
4
 
5
+ # ---- CONFIG ----
6
+ MODEL_ID = "md-nishat-008/TigerLLM-1B-it" # Bangla-optimized TigerLLM (instruction tuned)
7
+ DEVICE = 0 if torch.cuda.is_available() else -1
8
 
9
+ SYSTEM_BN = "তুমি একজন সহায়ক বাংলা সহকারী। সংক্ষিপ্ত, স্পষ্ট এবং ভদ্রভাবে উত্তর দাও।"
10
+ SYSTEM_HI = "तुम एक सहायक हिन्दी सहायक हो। स्पष्ट और संक्षिप्त उत्तर दो। (मॉडल बंगाली-केंद्रित है, इसलिए हिन्दी गुणवत्ता सीमित हो सकती है।)"
11
 
12
+ pipe = None
 
 
 
13
 
14
+ def load_pipeline():
15
+ global pipe
16
+ if pipe is not None:
17
+ return pipe
18
 
19
+ # Load tokenizer & model (works on CPU Spaces too)
20
+ tok = AutoTokenizer.from_pretrained(MODEL_ID, use_fast=True)
21
+ model = AutoModelForCausalLM.from_pretrained(
22
+ MODEL_ID,
23
+ torch_dtype=torch.float32, # CPU-friendly; HF free Spaces usually run on CPU
24
+ low_cpu_mem_usage=True,
25
+ device_map="auto" if DEVICE != -1 else None,
26
  )
 
27
 
28
+ pipe = TextGenerationPipeline(
29
+ model=model,
30
+ tokenizer=tok,
31
+ device=DEVICE
32
+ )
33
+ return pipe
34
 
35
+ def build_prompt(history, lang):
36
+ # history is list[tuple[str|None, str|None]] of (user, bot)
37
+ sys = SYSTEM_BN if lang == "bn" else SYSTEM_HI
38
+ conv = [f"<<SYS>> {sys} </SYS>"]
39
  for user, bot in history:
40
  if user:
41
+ conv.append(f"<<USER>> {user}")
42
  if bot:
43
+ conv.append(f"<<ASSISTANT>> {bot}")
44
+ conv.append("<<ASSISTANT>>") # model should continue here
45
+ return "\n".join(conv)
46
+
47
+ def reply(history, lang_label):
48
+ # lang_label from radio: "বাংলা" or "हिन्दी"
49
+ lang = "bn" if lang_label == "বাংলা" else "hi"
50
+
51
+ generator = load_pipeline()
52
+ prompt = build_prompt(history, lang)
53
+
54
+ out = generator(
55
+ prompt,
56
+ max_new_tokens=320,
57
+ do_sample=True,
58
+ temperature=0.7,
59
+ top_p=0.9,
60
+ repetition_penalty=1.05,
61
+ pad_token_id=generator.tokenizer.eos_token_id,
62
+ eos_token_id=generator.tokenizer.eos_token_id,
63
+ num_return_sequences=1,
64
+ )[0]["generated_text"]
65
+
66
+ # Extract only the model's final turn after the last "<<ASSISTANT>>"
67
+ if "<<ASSISTANT>>" in out:
68
+ answer = out.split("<<ASSISTANT>>")[-1].strip()
69
+ else:
70
+ answer = out.strip()
71
+
72
+ # Soft safety: trim over-long outputs
73
+ answer = answer[:2000]
74
+ # Tiny post-clean
75
+ answer = answer.replace("<<USER>>", "").replace("<<SYS>>", "")
76
+
77
+ # Put answer into the last tuple
78
+ last_user, _ = history[-1]
79
+ history[-1] = (last_user, answer)
80
+ return history
81
 
82
  def on_user_submit(user_text, chat_state):
 
83
  if not user_text.strip():
84
  return "", chat_state
85
+ return "", chat_state + [(user_text, None)]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
 
87
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
88
+ gr.Markdown("### 🐯 TigerLLM Chat — বাংলা / हिंदी\n*(Bangla-optimized model; Hindi quality may be limited)*")
 
 
 
 
 
 
89
 
90
+ lang = gr.Radio(choices=["বাংলা", "हिन्दी"], value="বাংলা", label="Language")
91
  chat = gr.Chatbot(height=420, type="tuples")
92
+ txt = gr.Textbox(placeholder="বাংলা বা हिन्दी লিখুন…", autofocus=True)
 
93
  send = gr.Button("Send")
94
 
95
+ txt.submit(on_user_submit, [txt, chat], [txt, chat]).then(reply, [chat, lang], [chat])
96
+ send.click(on_user_submit, [txt, chat], [txt, chat]).then(reply, [chat, lang], [chat])
 
 
 
 
 
97
 
98
  demo.launch()