Pisethan commited on
Commit
91f2c92
Β·
verified Β·
1 Parent(s): 034ce92

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -38
app.py CHANGED
@@ -1,22 +1,22 @@
1
  import gradio as gr
2
- from transformers import pipeline, AutoTokenizer
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 HfFolder
10
 
11
- # βœ… Authenticate Hugging Face account (save token only once)
12
- HfFolder.save_token("hf_your_token_here") # ← Replace with your real HF token
13
 
14
- # Define dropdown options
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 lesson to Hugging Face Datasets
20
  def save_to_hf_dataset(prompt, output, repo_id="Pisethan/khmer-lesson-history"):
21
  timestamp = datetime.datetime.now().isoformat()
22
  record = {
@@ -25,25 +25,24 @@ def save_to_hf_dataset(prompt, output, repo_id="Pisethan/khmer-lesson-history"):
25
  "lesson": output
26
  }
27
 
28
- # Save locally
29
  os.makedirs("history", exist_ok=True)
30
- local_path = f"history/lesson_{timestamp.replace(':', '-')}.json"
31
- with open(local_path, "w", encoding="utf-8") as f:
32
  json.dump(record, f, ensure_ascii=False, indent=2)
33
 
34
- # Push to HF Dataset
35
  dataset = Dataset.from_list([record])
36
- dataset.push_to_hub(repo_id)
37
 
38
  @spaces.GPU
39
  def generate_lesson(grade, topic, level):
40
  device = 0 if torch.cuda.is_available() else -1
41
- tokenizer = AutoTokenizer.from_pretrained("Pisethan/khmer-lesson-model")
42
  pipe = pipeline(
43
  "text-generation",
44
  model="Pisethan/khmer-lesson-model-v2",
45
  tokenizer=tokenizer,
46
- device=device
 
47
  )
48
 
49
  prompt = f"""
@@ -61,28 +60,22 @@ Grade: {grade}
61
  Topic: {topic}
62
  TaRL Level: {level}
63
  """
64
- output = pipe(
65
- prompt,
66
- max_new_tokens=300,
67
- temperature=0.7,
68
- do_sample=True,
69
- eos_token_id=tokenizer.eos_token_id
70
- )
71
 
72
- # βœ… Save lesson
73
- save_to_hf_dataset(prompt, output[0]["generated_text"])
74
 
75
- return output[0]['generated_text']
 
76
 
77
  @spaces.GPU
78
  def generate_all_lessons():
79
  device = 0 if torch.cuda.is_available() else -1
80
- tokenizer = AutoTokenizer.from_pretrained("Pisethan/khmer-lesson-model")
81
  pipe = pipeline(
82
  "text-generation",
83
  model="Pisethan/khmer-lesson-model-v2",
84
  tokenizer=tokenizer,
85
- device=device
 
86
  )
87
 
88
  results = ""
@@ -104,26 +97,22 @@ Grade: {grade}
104
  Topic: {topic}
105
  TaRL Level: {level}
106
  """
107
- output = pipe(
108
- prompt,
109
- max_new_tokens=300,
110
- temperature=0.7,
111
- do_sample=True,
112
- eos_token_id=tokenizer.eos_token_id
113
- )
114
- results += f"πŸ”Ή αžαŸ’αž“αžΆαž€αŸ‹ {grade} | {topic} | {level}\n{output[0]['generated_text']}\n\n{'-'*50}\n\n"
115
- save_to_hf_dataset(prompt, output[0]["generated_text"]) # βœ… Save each one
116
  return results
117
 
118
- # Gradio Interface
119
  with gr.Blocks() as demo:
120
  gr.Markdown("## πŸ€– αž’αŸ’αž“αž€αž‡αŸ†αž“αž½αž™αž”αž„αŸ’αž€αžΎαžαž˜αŸαžšαŸ€αž“αž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆ")
121
  gr.Markdown("αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžαŸ’αž“αžΆαž€αŸ‹ αž”αŸ’αžšαž’αžΆαž“αž”αž‘ αž“αž·αž„αž€αž˜αŸ’αžšαž·αžαžŸαž·αžŸαŸ’αžŸ αžšαž½αž…αž…αž»αž…αž”αž„αŸ’αž€αžΎαžαž˜αŸαžšαŸ€αž“αŸ” αž¬αž…αž»αž…αž”αŸŠαžΌαžαž»αž„αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž˜αŸαžšαŸ€αž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”")
122
 
123
  with gr.Row():
124
- grade = gr.Dropdown(choices=grade_options, label="αžαŸ’αž“αžΆαž€αŸ‹ (Grade)", value="1")
125
- topic = gr.Dropdown(choices=topic_options, label="αž”αŸ’αžšαž’αžΆαž“αž”αž‘ (Topic)", value="Addition")
126
- level = gr.Dropdown(choices=level_options, label="αž€αž˜αŸ’αžšαž·αžαžŸαž·αžŸαŸ’αžŸ (TaRL Level)", value="Beginner")
127
 
128
  output_box = gr.Textbox(
129
  label="πŸ“˜ Khmer Lesson Plan",
 
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 = {
 
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"""
 
60
  Topic: {topic}
61
  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 = ""
 
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",