youngtsai commited on
Commit
c7c49b4
·
1 Parent(s): e005364

reading_passage_admin

Browse files
Files changed (1) hide show
  1. app.py +93 -47
app.py CHANGED
@@ -770,41 +770,6 @@ def generate_reading_passage(df_string):
770
 
771
  return reading_passage
772
 
773
- def enable_edit_mode():
774
- return gr.update(interactive=True)
775
-
776
- def delete_reading_passage(video_id):
777
- print("===delete_reading_passage===")
778
- gcs_client = GCS_CLIENT
779
- bucket_name = 'video_ai_assistant'
780
- file_name = f'{video_id}_reading_passage.json'
781
- blob_name = f"{video_id}/{file_name}"
782
- # 检查 reading_passage 是否存在
783
- is_file_exists = GCS_SERVICE.check_file_exists(bucket_name, blob_name)
784
- if is_file_exists:
785
- delete_blob(gcs_client, bucket_name, blob_name)
786
- print("reading_passage已从GCS中删除")
787
- return gr.update(value="", interactive=False)
788
-
789
- def update_reading_passage(video_id, new_content):
790
- print("===upfdate_reading_passage on gcs===")
791
- gcs_client = GCS_CLIENT
792
- bucket_name = 'video_ai_assistant'
793
- file_name = f'{video_id}_reading_passage.json'
794
- blob_name = f"{video_id}/{file_name}"
795
- reading_passage_json = {"reading_passage": str(new_content)}
796
- reading_passage_text = json.dumps(reading_passage_json, ensure_ascii=False, indent=2)
797
- upload_file_to_gcs_with_json_string(gcs_client, bucket_name, blob_name, reading_passage_text)
798
- print("reading_passage已更新到GCS")
799
- return gr.update(value=new_content, interactive=False)
800
-
801
- def create_reading_passage(video_id, df_string):
802
- print("===create_reading_passage===")
803
- content = generate_reading_passage(df_string)
804
- update_reading_passage(video_id, content)
805
- return gr.update(value=content, interactive=False)
806
-
807
-
808
  def text_to_speech(video_id, text):
809
  tts = gTTS(text, lang='en')
810
  filename = f'{video_id}_reading_passage.mp3'
@@ -1092,6 +1057,58 @@ def change_questions(password, df_string):
1092
  print("=====get_questions=====")
1093
  return q1, q2, q3
1094
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1095
 
1096
  # AI 生成教學素材
1097
  def get_meta_data(video_id, source="gcs"):
@@ -1539,9 +1556,9 @@ with gr.Blocks(theme=gr.themes.Base(primary_hue=gr.themes.colors.orange, seconda
1539
  with gr.Row():
1540
  with gr.Column(scale=1):
1541
  gr.Markdown("## 你也有類似的問題想問嗎?")
1542
- btn_1 = gr.Button()
1543
- btn_2 = gr.Button()
1544
- btn_3 = gr.Button()
1545
  gr.Markdown("## 重新生成問題")
1546
  btn_create_question = gr.Button("生成其他問題", variant="primary")
1547
  with gr.Column(scale=2):
@@ -1576,6 +1593,7 @@ with gr.Blocks(theme=gr.themes.Base(primary_hue=gr.themes.colors.orange, seconda
1576
  ai_send_button = gr.Button("Send", variant="primary")
1577
  with gr.Tab("文章模式"):
1578
  with gr.Row() as reading_passage_admin:
 
1579
  reading_passage_edit_button = gr.Button("編輯", size="sm", variant="primary")
1580
  reading_passage_update_button = gr.Button("更新", size="sm", variant="primary")
1581
  reading_passage_delete_button = gr.Button("刪除", size="sm", variant="primary")
@@ -1583,10 +1601,16 @@ with gr.Blocks(theme=gr.themes.Base(primary_hue=gr.themes.colors.orange, seconda
1583
  with gr.Row():
1584
  reading_passage = gr.Textbox(label="Reading Passage", lines=40, show_label=False)
1585
  reading_passage_speak_button = gr.Button("Speak", visible=False)
1586
- reading_passage_audio_output = gr.Audio(label="Audio Output", visible=False)
1587
-
1588
  with gr.Tab("重點摘要"):
1589
- df_summarise = gr.Textbox(container=True, show_copy_button=True, lines=40, show_label=False)
 
 
 
 
 
 
 
1590
  with gr.Tab("教學備課"):
1591
  with gr.Row():
1592
  content_subject = gr.Dropdown(label="選擇主題", choices=["數學", "自然", "國文", "英文", "社會","物理", "化學", "生物", "地理", "歷史", "公民"], value="", visible=False)
@@ -1795,13 +1819,13 @@ with gr.Blocks(theme=gr.themes.Base(primary_hue=gr.themes.colors.orange, seconda
1795
 
1796
  # reading_passage event
1797
  reading_passage_create_button.click(
1798
- create_reading_passage,
1799
- inputs=[video_id, df_string_output],
1800
  outputs=[reading_passage]
1801
  )
1802
  reading_passage_delete_button.click(
1803
- delete_reading_passage,
1804
- inputs=[video_id],
1805
  outputs=[reading_passage]
1806
  )
1807
  reading_passage_edit_button.click(
@@ -1810,11 +1834,33 @@ with gr.Blocks(theme=gr.themes.Base(primary_hue=gr.themes.colors.orange, seconda
1810
  outputs=[reading_passage]
1811
  )
1812
  reading_passage_update_button.click(
1813
- update_reading_passage,
1814
- inputs=[video_id, reading_passage],
1815
  outputs=[reading_passage]
1816
  )
1817
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1818
  # 教師版
1819
  worksheet_content_btn.click(
1820
  get_ai_content,
 
770
 
771
  return reading_passage
772
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
773
  def text_to_speech(video_id, text):
774
  tts = gTTS(text, lang='en')
775
  filename = f'{video_id}_reading_passage.mp3'
 
1057
  print("=====get_questions=====")
1058
  return q1, q2, q3
1059
 
1060
+ # ---- LLM CRUD ----
1061
+ def enable_edit_mode():
1062
+ return gr.update(interactive=True)
1063
+
1064
+ def delete_LLM_content(video_id, kind):
1065
+ print(f"===delete_{kind}===")
1066
+ gcs_client = GCS_CLIENT
1067
+ bucket_name = 'video_ai_assistant'
1068
+ file_name = f'{video_id}_{kind}.json'
1069
+ blob_name = f"{video_id}/{file_name}"
1070
+ # 检查 reading_passage 是否存在
1071
+ is_file_exists = GCS_SERVICE.check_file_exists(bucket_name, blob_name)
1072
+ if is_file_exists:
1073
+ delete_blob(gcs_client, bucket_name, blob_name)
1074
+ print("reading_passage已从GCS中删除")
1075
+ return gr.update(value="", interactive=False)
1076
+
1077
+ def update_LLM_content(video_id, new_content, kind):
1078
+ print(f"===upfdate kind on gcs===")
1079
+ gcs_client = GCS_CLIENT
1080
+ bucket_name = 'video_ai_assistant'
1081
+ file_name = f'{video_id}_{kind}.json'
1082
+ blob_name = f"{video_id}/{file_name}"
1083
+
1084
+ if kind == "reading_passage":
1085
+ reading_passage_json = {"reading_passage": str(new_content)}
1086
+ reading_passage_text = json.dumps(reading_passage_json, ensure_ascii=False, indent=2)
1087
+ upload_file_to_gcs_with_json_string(gcs_client, bucket_name, blob_name, reading_passage_text)
1088
+ elif kind == "summary":
1089
+ summary_json = {"summary": str(new_content)}
1090
+ summary_text = json.dumps(summary_json, ensure_ascii=False, indent=2)
1091
+ upload_file_to_gcs_with_json_string(gcs_client, bucket_name, blob_name, summary_text)
1092
+ elif kind == "mind_map":
1093
+ mind_map_json = {"mind_map": str(new_content)}
1094
+ mind_map_text = json.dumps(mind_map_json, ensure_ascii=False, indent=2)
1095
+ upload_file_to_gcs_with_json_string(gcs_client, bucket_name, blob_name, mind_map_text)
1096
+
1097
+ print(f"{kind} 已更新到GCS")
1098
+ return gr.update(value=new_content, interactive=False)
1099
+
1100
+ def create_LLM_content(video_id, df_string, kind):
1101
+ print(f"===create_{kind}===")
1102
+ if kind == "reading_passage":
1103
+ content = generate_reading_passage(df_string)
1104
+ elif kind == "summary":
1105
+ content = generate_summarise(df_string)
1106
+ elif kind == "mind_map":
1107
+ content = generate_mind_map(df_string)
1108
+
1109
+ update_LLM_content(video_id, content, kind)
1110
+ return gr.update(value=content, interactive=False)
1111
+
1112
 
1113
  # AI 生成教學素材
1114
  def get_meta_data(video_id, source="gcs"):
 
1556
  with gr.Row():
1557
  with gr.Column(scale=1):
1558
  gr.Markdown("## 你也有類似的問題想問嗎?")
1559
+ btn_1 = gr.Button("問題一")
1560
+ btn_2 = gr.Button("問題一")
1561
+ btn_3 = gr.Button("問題一")
1562
  gr.Markdown("## 重新生成問題")
1563
  btn_create_question = gr.Button("生成其他問題", variant="primary")
1564
  with gr.Column(scale=2):
 
1593
  ai_send_button = gr.Button("Send", variant="primary")
1594
  with gr.Tab("文章模式"):
1595
  with gr.Row() as reading_passage_admin:
1596
+ reading_passage_kind = gr.Textbox(value="reading_passage")
1597
  reading_passage_edit_button = gr.Button("編輯", size="sm", variant="primary")
1598
  reading_passage_update_button = gr.Button("更新", size="sm", variant="primary")
1599
  reading_passage_delete_button = gr.Button("刪除", size="sm", variant="primary")
 
1601
  with gr.Row():
1602
  reading_passage = gr.Textbox(label="Reading Passage", lines=40, show_label=False)
1603
  reading_passage_speak_button = gr.Button("Speak", visible=False)
1604
+ reading_passage_audio_output = gr.Audio(label="Audio Output", visible=False)
 
1605
  with gr.Tab("重點摘要"):
1606
+ with gr.Row() as summary_admmin:
1607
+ summary_kind = gr.Textbox(value="summary")
1608
+ summary_edit_button = gr.Button("編輯", size="sm", variant="primary")
1609
+ summary_update_button = gr.Button("更新", size="sm", variant="primary")
1610
+ summary_delete_button = gr.Button("刪除", size="sm", variant="primary")
1611
+ summary_create_button = gr.Button("建立", size="sm", variant="primary")
1612
+ with gr.Row():
1613
+ df_summarise = gr.Textbox(container=True, show_copy_button=True, lines=40, show_label=False)
1614
  with gr.Tab("教學備課"):
1615
  with gr.Row():
1616
  content_subject = gr.Dropdown(label="選擇主題", choices=["數學", "自然", "國文", "英文", "社會","物理", "化學", "生物", "地理", "歷史", "公民"], value="", visible=False)
 
1819
 
1820
  # reading_passage event
1821
  reading_passage_create_button.click(
1822
+ create_LLM_content,
1823
+ inputs=[video_id, df_string_output, reading_passage_kind],
1824
  outputs=[reading_passage]
1825
  )
1826
  reading_passage_delete_button.click(
1827
+ delete_LLM_content,
1828
+ inputs=[video_id, reading_passage_kind],
1829
  outputs=[reading_passage]
1830
  )
1831
  reading_passage_edit_button.click(
 
1834
  outputs=[reading_passage]
1835
  )
1836
  reading_passage_update_button.click(
1837
+ update_LLM_content,
1838
+ inputs=[video_id, reading_passage, reading_passage_kind],
1839
  outputs=[reading_passage]
1840
  )
1841
 
1842
+ # summary event
1843
+ summary_create_button.click(
1844
+ create_LLM_content,
1845
+ inputs=[video_id, df_string_output, summary_kind],
1846
+ outputs=[df_summarise]
1847
+ )
1848
+ summary_delete_button.click(
1849
+ delete_LLM_content,
1850
+ inputs=[video_id, summary_kind],
1851
+ outputs=[df_summarise]
1852
+ )
1853
+ summary_edit_button.click(
1854
+ enable_edit_mode,
1855
+ inputs=[],
1856
+ outputs=[df_summarise]
1857
+ )
1858
+ summary_update_button.click(
1859
+ update_LLM_content,
1860
+ inputs=[video_id, df_summarise, summary_kind],
1861
+ outputs=[df_summarise]
1862
+ )
1863
+
1864
  # 教師版
1865
  worksheet_content_btn.click(
1866
  get_ai_content,