youngtsai commited on
Commit
2f81547
·
1 Parent(s): 40da85f

def generate_content_by_open_ai_assistant_spelling_robot(paragraph, thread_id=None, model_name=None):

Browse files
Files changed (1) hide show
  1. app.py +113 -18
app.py CHANGED
@@ -33,6 +33,7 @@ if is_env_local:
33
  GCS_KEY = json.dumps(config["GOOGLE_APPLICATION_CREDENTIALS_JSON"])
34
  CUTOR_OPEN_AI_KEY = config["CUTOR_OPEN_AI_KEY"]
35
  CUTOR_OPEN_AI_ASSISTANT_ID = config["CUTOR_OPEN_AI_ASSISTANT_ID"]
 
36
  OPEN_AI_MODERATION_BOT1 = config["OPEN_AI_MODERATION_BOT1"]
37
 
38
  else:
@@ -40,6 +41,7 @@ else:
40
  GCS_KEY = os.getenv("GOOGLE_APPLICATION_CREDENTIALS_JSON")
41
  CUTOR_OPEN_AI_KEY = os.getenv("CUTOR_OPEN_AI_KEY")
42
  CUTOR_OPEN_AI_ASSISTANT_ID = os.getenv("CUTOR_OPEN_AI_ASSISTANT_ID")
 
43
  OPEN_AI_MODERATION_BOT1 = os.getenv("OPEN_AI_MODERATION_BOT1", OPEN_AI_KEY)
44
 
45
  OPEN_AI_CLIENT = OpenAI(api_key=OPEN_AI_KEY)
@@ -1165,7 +1167,7 @@ def get_chinese_conversation_thread_id(thread_id):
1165
  thread_id = thread.id
1166
  return thread_id
1167
 
1168
- def get_chinese_paragraph_evaluate_content(thread_id, model, user_content):
1169
  content = generate_content_by_open_ai_assistant(user_content, thread_id, model_name=model)
1170
  print(f"====generate_paragraph_evaluate====")
1171
  print(content)
@@ -1176,7 +1178,7 @@ def get_chinese_paragraph_evaluate_content(thread_id, model, user_content):
1176
  content_list = content.split("```json")
1177
  content_text = content_list[0]
1178
  print(f"content_text: {content_text}")
1179
- content_json = content_list[1].replace("```", "")
1180
  print(f"content_json: {content_json}")
1181
 
1182
  data = json.loads(content_json)["results"]
@@ -1185,11 +1187,34 @@ def get_chinese_paragraph_evaluate_content(thread_id, model, user_content):
1185
  ["主題與內容", data['主題與內容']['level'], data['主題與內容']['explanation']],
1186
  ["段落結構", data['段落結構']['level'], data['段落結構']['explanation']],
1187
  ["遣詞造句", data['遣詞造句']['level'], data['遣詞造句']['explanation']],
1188
- ["錯別字", data['錯別字']['level'], data['錯別字']['explanation']]
1189
  ]
1190
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1191
  # 綜合評分
1192
- grade = assign_grade(data['主題與內容']['level'], data['段落結構']['level'], data['遣詞造句']['level'], data['錯別字']['level'])
 
 
 
 
 
1193
  grade_content_text = f"# 綜合評分:{grade}"
1194
  total_content_text = grade_content_text + "\n" + content_text
1195
 
@@ -1214,7 +1239,7 @@ def get_chinese_paragraph_1st_evaluate_content(thread_id, model, sys_content, pa
1214
  ---
1215
  {user_generate_paragraph_evaluate_prompt}
1216
  """
1217
- total_content_text, content_table = get_chinese_paragraph_evaluate_content(thread_id, model, user_content)
1218
 
1219
  return total_content_text, content_table
1220
 
@@ -1229,7 +1254,7 @@ def get_chinese_paragraph_refine_evaluate_content(thread_id, model, sys_content,
1229
  ---
1230
  {user_refine_paragraph_prompt}
1231
  """
1232
- total_content_text, content_table = get_chinese_paragraph_evaluate_content(thread_id, model, user_content)
1233
 
1234
  return total_content_text, content_table
1235
 
@@ -1280,6 +1305,88 @@ def generate_content_by_open_ai_assistant(user_content, thread_id=None, model_na
1280
 
1281
  return response_text
1282
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1283
  # 小工具
1284
  def show_elements():
1285
  return gr.update(visible=True)
@@ -3108,8 +3215,6 @@ with gr.Blocks(theme=THEME, css=CSS) as demo:
3108
 
3109
  遣詞造句:A 你的遣詞造句大致良好,用詞得體且通順。不過可以嘗試加一些更具體的技術詞彙或示例,使文章更專業化。
3110
 
3111
- 錯別字:A+ 你的文章沒有明顯的錯別字,這點做得很好 (或是你有以下的錯別字: ...... )。
3112
-
3113
  # 修改範例
3114
  - 原文:內容雖然簡短,但主題明確。
3115
  - 修改:雖然內容相對簡短,但主題表達得非常明確。
@@ -3132,10 +3237,6 @@ with gr.Blocks(theme=THEME, css=CSS) as demo:
3132
  "遣詞造句": {{
3133
  "level": "C",
3134
  "explanation": "#中文解釋 ZH-TW"
3135
- }},
3136
- "錯別字": {{
3137
- "level": "C-",
3138
- "explanation": "#中文解釋 ZH-TW"
3139
  }}
3140
  }}
3141
  }}
@@ -3195,8 +3296,6 @@ with gr.Blocks(theme=THEME, css=CSS) as demo:
3195
 
3196
  遣詞造句:A 你的遣詞造句大致良好,用詞得體且通順。不過可以嘗試加一些更具體的技術詞彙或示例,使文章更專業化。
3197
 
3198
- 錯別字:A+ 你的文章沒有明顯的錯別字,這點做得很好。(或是你有以下的錯別字: ......)。
3199
-
3200
  # 修改範例
3201
  - 原文:內容雖然簡短,但主題明確。
3202
  - 修改:雖然內容相對簡短,但主題表達得非常明確。
@@ -3219,10 +3318,6 @@ with gr.Blocks(theme=THEME, css=CSS) as demo:
3219
  "遣詞造句": {{
3220
  "level": "C",
3221
  "explanation": "#中文解釋 ZH-TW"
3222
- }},
3223
- "錯別字": {{
3224
- "level": "C-",
3225
- "explanation": "#中文解釋 ZH-TW"
3226
  }}
3227
  }}
3228
  }}
 
33
  GCS_KEY = json.dumps(config["GOOGLE_APPLICATION_CREDENTIALS_JSON"])
34
  CUTOR_OPEN_AI_KEY = config["CUTOR_OPEN_AI_KEY"]
35
  CUTOR_OPEN_AI_ASSISTANT_ID = config["CUTOR_OPEN_AI_ASSISTANT_ID"]
36
+ CUTOR_OPEN_AI_ASSISTANT_SPELLING_ID = config["CUTOR_OPEN_AI_ASSISTANT_SPELLING_ID"]
37
  OPEN_AI_MODERATION_BOT1 = config["OPEN_AI_MODERATION_BOT1"]
38
 
39
  else:
 
41
  GCS_KEY = os.getenv("GOOGLE_APPLICATION_CREDENTIALS_JSON")
42
  CUTOR_OPEN_AI_KEY = os.getenv("CUTOR_OPEN_AI_KEY")
43
  CUTOR_OPEN_AI_ASSISTANT_ID = os.getenv("CUTOR_OPEN_AI_ASSISTANT_ID")
44
+ CUTOR_OPEN_AI_ASSISTANT_SPELLING_ID = os.getenv("CUTOR_OPEN_AI_ASSISTANT_SPELLING_ID")
45
  OPEN_AI_MODERATION_BOT1 = os.getenv("OPEN_AI_MODERATION_BOT1", OPEN_AI_KEY)
46
 
47
  OPEN_AI_CLIENT = OpenAI(api_key=OPEN_AI_KEY)
 
1167
  thread_id = thread.id
1168
  return thread_id
1169
 
1170
+ def get_chinese_paragraph_evaluate_content(thread_id, model, user_content, paragraph):
1171
  content = generate_content_by_open_ai_assistant(user_content, thread_id, model_name=model)
1172
  print(f"====generate_paragraph_evaluate====")
1173
  print(content)
 
1178
  content_list = content.split("```json")
1179
  content_text = content_list[0]
1180
  print(f"content_text: {content_text}")
1181
+ content_json = content_list[1].split("```")[0]
1182
  print(f"content_json: {content_json}")
1183
 
1184
  data = json.loads(content_json)["results"]
 
1187
  ["主題與內容", data['主題與內容']['level'], data['主題與內容']['explanation']],
1188
  ["段落結構", data['段落結構']['level'], data['段落結構']['explanation']],
1189
  ["遣詞造句", data['遣詞造句']['level'], data['遣詞造句']['explanation']],
 
1190
  ]
1191
 
1192
+ # 挑錯字
1193
+ spelling_content = generate_content_by_open_ai_assistant_spelling_robot(paragraph, thread_id=None, model_name=model)
1194
+ print(f"spelling_content: {spelling_content}")
1195
+
1196
+ if "```json" not in spelling_content:
1197
+ raise gr.Error("網路塞車,或是內容有誤,請稍後重新嘗試!")
1198
+
1199
+ spelling_content_list = spelling_content.split("```json")
1200
+ spelling_content_text = spelling_content_list[0]
1201
+ spelling_content_json = spelling_content_list[1].split("```")[0]
1202
+ spelling_content_table = json.loads(spelling_content_json)["results"]["錯別字"]
1203
+ spelling_table_data = [
1204
+ ["錯別字", spelling_content_table['level'], spelling_content_table['explanation']],
1205
+ ]
1206
+
1207
+ # ========= 合併 =========
1208
+ table_data.extend(spelling_table_data)
1209
+ content_text = content_text + "\n" + spelling_content_text
1210
+
1211
  # 綜合評分
1212
+ grade = assign_grade(
1213
+ data['主題與內容']['level'],
1214
+ data['段落結構']['level'],
1215
+ data['遣詞造句']['level'],
1216
+ spelling_content_table['level']
1217
+ )
1218
  grade_content_text = f"# 綜合評分:{grade}"
1219
  total_content_text = grade_content_text + "\n" + content_text
1220
 
 
1239
  ---
1240
  {user_generate_paragraph_evaluate_prompt}
1241
  """
1242
+ total_content_text, content_table = get_chinese_paragraph_evaluate_content(thread_id, model, user_content, paragraph)
1243
 
1244
  return total_content_text, content_table
1245
 
 
1254
  ---
1255
  {user_refine_paragraph_prompt}
1256
  """
1257
+ total_content_text, content_table = get_chinese_paragraph_evaluate_content(thread_id, model, user_content, paragraph_2)
1258
 
1259
  return total_content_text, content_table
1260
 
 
1305
 
1306
  return response_text
1307
 
1308
+ # 錯別字機器人
1309
+ def generate_content_by_open_ai_assistant_spelling_robot(paragraph, thread_id=None, model_name=None):
1310
+ verify_moderation(paragraph)
1311
+
1312
+ client = CUTOR_OPEN_AI_CLIENT
1313
+ assistant_id = CUTOR_OPEN_AI_ASSISTANT_SPELLING_ID
1314
+
1315
+ assistant = client.beta.assistants.update(
1316
+ assistant_id=assistant_id,
1317
+ tools=[{"type": "file_search"}],
1318
+ )
1319
+ print(f"My assistant: {assistant}")
1320
+ print(f"instructions: {assistant.instructions}")
1321
+
1322
+ try:
1323
+ thread_id = get_chinese_conversation_thread_id(thread_id) if not thread_id else thread_id
1324
+ thread = client.beta.threads.retrieve(thread_id)
1325
+ print(f"Thread ID: {thread.id}")
1326
+
1327
+ # Send the user message to the thread
1328
+ print("==============Send the user message to the thread====================")
1329
+ user_content = f"""
1330
+ this is the paragraph: {paragraph}
1331
+ ---
1332
+ Rule:
1333
+ 1. 請根據 instructions 來挑出錯別字,並輸出錯別字的等級與解釋
1334
+ 2. 請輸出錯別字的等級與解釋,並輸出錯別字的等級與解釋 by json format as example
1335
+ 3. 請用 zh-TW 繁體中文輸出
1336
+ 4. json 完成之後不用多作解釋
1337
+
1338
+ EXAMPLE:
1339
+ # 錯別字檢查:
1340
+ 1. 「產線」應作「產線」。
1341
+ - 原文:「擔任產線主任的老闆弟弟...」
1342
+ - 修正:「擔任產線主任的老闆弟弟...」
1343
+ 2. 「保母」應作「保姆」。
1344
+ - 原文:「平時不只得充當保母...」
1345
+ - 修正:「平時不只得充當保姆...」
1346
+
1347
+ # 數字書寫檢查:
1348
+ 1. 「1名」應作「一名」。
1349
+ - 原文:「1名女網友在傳產公司...」
1350
+ - 修正:「一名女網友在傳產公司...」
1351
+ 2. 「3個多月」應作「三個多月」。
1352
+ - 原文:「工作至今約3個多月...」
1353
+ - 修正:「工作至今約三個多月...」
1354
+
1355
+ ```json
1356
+ {{
1357
+ "results": {{
1358
+ "錯別字": {{
1359
+ "level": "A+",
1360
+ "explanation": "#中文解釋 ZH-TW"
1361
+ }}
1362
+ }}
1363
+ }}
1364
+ ```
1365
+ """
1366
+ client.beta.threads.messages.create(thread_id=thread.id, role="user", content=user_content)
1367
+
1368
+ # Run the assistant
1369
+ print("==============Run the assistant====================")
1370
+ run = client.beta.threads.runs.create_and_poll(
1371
+ thread_id=thread.id,
1372
+ assistant_id=assistant.id,
1373
+ tools=[{"type": "file_search"}],
1374
+ )
1375
+
1376
+ if run.status == "completed":
1377
+ print("==============completed====================")
1378
+ print(f"Thread ID: {thread.id}")
1379
+ messages = client.beta.threads.messages.list(thread_id=thread.id)
1380
+ print(f"Messages: {messages}")
1381
+ response = messages
1382
+ response_text = messages.data[0].content[0].text.value
1383
+ print(f"Response: {response_text}")
1384
+ except Exception as e:
1385
+ print(f"An error occurred while generating content by OpenAI Assistant: {e}")
1386
+ raise gr.Error("網路塞車,請重新嘗試一次!")
1387
+
1388
+ return response_text
1389
+
1390
  # 小工具
1391
  def show_elements():
1392
  return gr.update(visible=True)
 
3215
 
3216
  遣詞造句:A 你的遣詞造句大致良好,用詞得體且通順。不過可以嘗試加一些更具體的技術詞彙或示例,使文章更專業化。
3217
 
 
 
3218
  # 修改範例
3219
  - 原文:內容雖然簡短,但主題明確。
3220
  - 修改:雖然內容相對簡短,但主題表達得非常明確。
 
3237
  "遣詞造句": {{
3238
  "level": "C",
3239
  "explanation": "#中文解釋 ZH-TW"
 
 
 
 
3240
  }}
3241
  }}
3242
  }}
 
3296
 
3297
  遣詞造句:A 你的遣詞造句大致良好,用詞得體且通順。不過可以嘗試加一些更具體的技術詞彙或示例,使文章更專業化。
3298
 
 
 
3299
  # 修改範例
3300
  - 原文:內容雖然簡短,但主題明確。
3301
  - 修改:雖然內容相對簡短,但主題表達得非常明確。
 
3318
  "遣詞造句": {{
3319
  "level": "C",
3320
  "explanation": "#中文解釋 ZH-TW"
 
 
 
 
3321
  }}
3322
  }}
3323
  }}