Pisethan commited on
Commit
35b7945
Β·
verified Β·
1 Parent(s): 91f2c92

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -54
app.py CHANGED
@@ -1,48 +1,27 @@
 
1
  import gradio as gr
2
- from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
3
  import torch
4
  import spaces
5
- import datetime
6
- import json
7
- import os
8
- from datasets import Dataset
9
- from huggingface_hub import HfApi
10
-
11
- # βœ… Get token securely from environment
12
- token = os.environ.get("HF_TOKEN")
13
 
14
- # Dropdowns
15
  grade_options = ["1", "2", "3", "4", "5", "6"]
16
  topic_options = ["Addition", "Subtraction", "Counting", "Number Recognition", "Multiplication", "Division"]
17
  level_options = ["Beginner", "Intermediate", "Advanced"]
18
 
19
- # βœ… Save generated lesson to Hugging Face Dataset
20
- def save_to_hf_dataset(prompt, output, repo_id="Pisethan/khmer-lesson-history"):
21
- timestamp = datetime.datetime.now().isoformat()
22
- record = {
23
- "timestamp": timestamp,
24
- "prompt": prompt,
25
- "lesson": output
26
- }
27
-
28
- os.makedirs("history", exist_ok=True)
29
- path = f"history/lesson_{timestamp.replace(':', '-')}.json"
30
- with open(path, "w", encoding="utf-8") as f:
31
- json.dump(record, f, ensure_ascii=False, indent=2)
32
-
33
- dataset = Dataset.from_list([record])
34
- dataset.push_to_hub(repo_id, token=token)
35
 
36
  @spaces.GPU
37
  def generate_lesson(grade, topic, level):
38
  device = 0 if torch.cuda.is_available() else -1
39
- tokenizer = AutoTokenizer.from_pretrained("Pisethan/khmer-lesson-model", use_auth_token=token)
40
  pipe = pipeline(
41
  "text-generation",
42
  model="Pisethan/khmer-lesson-model-v2",
43
  tokenizer=tokenizer,
44
  device=device,
45
- use_auth_token=token
46
  )
47
 
48
  prompt = f"""
@@ -62,57 +41,41 @@ TaRL Level: {level}
62
  """
63
 
64
  output = pipe(prompt, max_new_tokens=300, temperature=0.7, do_sample=True, eos_token_id=tokenizer.eos_token_id)
65
-
66
- save_to_hf_dataset(prompt, output[0]["generated_text"])
67
- return output[0]["generated_text"]
68
 
69
  @spaces.GPU
70
  def generate_all_lessons():
71
  device = 0 if torch.cuda.is_available() else -1
72
- tokenizer = AutoTokenizer.from_pretrained("Pisethan/khmer-lesson-model", use_auth_token=token)
73
  pipe = pipeline(
74
  "text-generation",
75
  model="Pisethan/khmer-lesson-model-v2",
76
  tokenizer=tokenizer,
77
  device=device,
78
- use_auth_token=token
79
  )
80
 
81
  results = ""
82
  for grade in grade_options:
83
  for topic in topic_options:
84
  for level in level_options:
85
- prompt = f"""
86
- You are a lesson planning assistant. Return only one structured Khmer math lesson plan with these fields:
87
-
88
- Lesson Title:
89
- Objective:
90
- Activity:
91
- Instruction (Khmer):
92
- Materials:
93
-
94
- Please follow the structure exactly.
95
 
96
  Grade: {grade}
97
  Topic: {topic}
98
- TaRL Level: {level}
99
- """
100
- output = pipe(prompt, max_new_tokens=300, temperature=0.7, do_sample=True, eos_token_id=tokenizer.eos_token_id)
101
- lesson = output[0]["generated_text"]
102
- results += f"πŸ”Ή αžαŸ’αž“αžΆαž€αŸ‹ {grade} | {topic} | {level}\n{lesson}\n\n{'-'*50}\n\n"
103
- save_to_hf_dataset(prompt, lesson)
104
-
105
  return results
106
 
107
- # UI
108
  with gr.Blocks() as demo:
109
  gr.Markdown("## πŸ€– αž’αŸ’αž“αž€αž‡αŸ†αž“αž½αž™αž”αž„αŸ’αž€αžΎαžαž˜αŸαžšαŸ€αž“αž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆ")
110
  gr.Markdown("αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžαŸ’αž“αžΆαž€αŸ‹ αž”αŸ’αžšαž’αžΆαž“αž”αž‘ αž“αž·αž„αž€αž˜αŸ’αžšαž·αžαžŸαž·αžŸαŸ’αžŸ αžšαž½αž…αž…αž»αž…αž”αž„αŸ’αž€αžΎαžαž˜αŸαžšαŸ€αž“αŸ” αž¬αž…αž»αž…αž”αŸŠαžΌαžαž»αž„αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž˜αŸαžšαŸ€αž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”")
111
 
112
  with gr.Row():
113
- grade = gr.Dropdown(grade_options, label="αžαŸ’αž“αžΆαž€αŸ‹ (Grade)", value="1")
114
- topic = gr.Dropdown(topic_options, label="αž”αŸ’αžšαž’αžΆαž“αž”αž‘ (Topic)", value="Addition")
115
- level = gr.Dropdown(level_options, label="αž€αž˜αŸ’αžšαž·αžαžŸαž·αžŸαŸ’αžŸ (TaRL Level)", value="Beginner")
116
 
117
  output_box = gr.Textbox(
118
  label="πŸ“˜ Khmer Lesson Plan",
 
1
+ import os
2
  import gradio as gr
3
+ from transformers import pipeline, AutoTokenizer
4
  import torch
5
  import spaces
 
 
 
 
 
 
 
 
6
 
7
+ # Shared dropdown options
8
  grade_options = ["1", "2", "3", "4", "5", "6"]
9
  topic_options = ["Addition", "Subtraction", "Counting", "Number Recognition", "Multiplication", "Division"]
10
  level_options = ["Beginner", "Intermediate", "Advanced"]
11
 
12
+ # Load tokenizer separately so we can access eos_token_id
13
+ HF_TOKEN = os.environ.get("HF_TOKEN")
14
+ tokenizer = AutoTokenizer.from_pretrained("Pisethan/khmer-lesson-model", token=HF_TOKEN)
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
  @spaces.GPU
17
  def generate_lesson(grade, topic, level):
18
  device = 0 if torch.cuda.is_available() else -1
 
19
  pipe = pipeline(
20
  "text-generation",
21
  model="Pisethan/khmer-lesson-model-v2",
22
  tokenizer=tokenizer,
23
  device=device,
24
+ token=HF_TOKEN
25
  )
26
 
27
  prompt = f"""
 
41
  """
42
 
43
  output = pipe(prompt, max_new_tokens=300, temperature=0.7, do_sample=True, eos_token_id=tokenizer.eos_token_id)
44
+ return output[0]['generated_text']
 
 
45
 
46
  @spaces.GPU
47
  def generate_all_lessons():
48
  device = 0 if torch.cuda.is_available() else -1
 
49
  pipe = pipeline(
50
  "text-generation",
51
  model="Pisethan/khmer-lesson-model-v2",
52
  tokenizer=tokenizer,
53
  device=device,
54
+ token=HF_TOKEN
55
  )
56
 
57
  results = ""
58
  for grade in grade_options:
59
  for topic in topic_options:
60
  for level in level_options:
61
+ prompt = f"""Generate a Khmer math lesson plan.
 
 
 
 
 
 
 
 
 
62
 
63
  Grade: {grade}
64
  Topic: {topic}
65
+ TaRL Level: {level}"""
66
+ output = pipe(prompt, max_new_tokens=200, temperature=0.7, do_sample=True)
67
+ results += f"πŸ”Ή αžαŸ’αž“αžΆαž€αŸ‹ {grade} | {topic} | {level}\n{output[0]['generated_text']}\n\n{'-'*50}\n\n"
 
 
 
 
68
  return results
69
 
70
+ # Gradio UI
71
  with gr.Blocks() as demo:
72
  gr.Markdown("## πŸ€– αž’αŸ’αž“αž€αž‡αŸ†αž“αž½αž™αž”αž„αŸ’αž€αžΎαžαž˜αŸαžšαŸ€αž“αž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆ")
73
  gr.Markdown("αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžαŸ’αž“αžΆαž€αŸ‹ αž”αŸ’αžšαž’αžΆαž“αž”αž‘ αž“αž·αž„αž€αž˜αŸ’αžšαž·αžαžŸαž·αžŸαŸ’αžŸ αžšαž½αž…αž…αž»αž…αž”αž„αŸ’αž€αžΎαžαž˜αŸαžšαŸ€αž“αŸ” αž¬αž…αž»αž…αž”αŸŠαžΌαžαž»αž„αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž˜αŸαžšαŸ€αž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”")
74
 
75
  with gr.Row():
76
+ grade = gr.Dropdown(choices=grade_options, label="αžαŸ’αž“αžΆαž€αŸ‹ (Grade)", value="1")
77
+ topic = gr.Dropdown(choices=topic_options, label="αž”αŸ’αžšαž’αžΆαž“αž”αž‘ (Topic)", value="Addition")
78
+ level = gr.Dropdown(choices=level_options, label="αž€αž˜αŸ’αžšαž·αžαžŸαž·αžŸαŸ’αžŸ (TaRL Level)", value="Beginner")
79
 
80
  output_box = gr.Textbox(
81
  label="πŸ“˜ Khmer Lesson Plan",