Spaces:
Sleeping
Sleeping
def generate_content_by_open_ai_assistant_spelling_robot(paragraph, thread_id=None, model_name=None):
Browse files
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].
|
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(
|
|
|
|
|
|
|
|
|
|
|
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 |
}}
|