Update speaking generation endpoints.
This commit is contained in:
124
app.py
124
app.py
@@ -1080,21 +1080,91 @@ def save_speaking():
|
|||||||
return str(e)
|
return str(e)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/speaking/generate_speaking_video", methods=['POST'])
|
@app.route("/speaking/generate_video_1", methods=['POST'])
|
||||||
@jwt_required()
|
@jwt_required()
|
||||||
def generate_speaking_video():
|
def generate_video_1():
|
||||||
|
try:
|
||||||
|
data = request.get_json()
|
||||||
|
sp3_questions = []
|
||||||
|
avatar = data.get("avatar", random.choice(list(AvatarEnum)).value)
|
||||||
|
|
||||||
|
request_id = str(uuid.uuid4())
|
||||||
|
logging.info("POST - generate_video_1 - Received request to generate video 1. "
|
||||||
|
"Use this id to track the logs: " + str(request_id) + " - Request data: " + str(
|
||||||
|
request.get_json()))
|
||||||
|
|
||||||
|
logging.info("POST - generate_video_1 - " + str(request_id) + " - Creating videos for speaking part 1.")
|
||||||
|
for question in data["questions"]:
|
||||||
|
logging.info("POST - generate_video_1 - " + str(request_id) + " - Creating video for question: " + question)
|
||||||
|
result = create_video(question, avatar)
|
||||||
|
logging.info("POST - generate_video_1 - " + str(request_id) + " - Video created: " + result)
|
||||||
|
if result is not None:
|
||||||
|
sound_file_path = VIDEO_FILES_PATH + result
|
||||||
|
firebase_file_path = FIREBASE_SPEAKING_VIDEO_FILES_PATH + result
|
||||||
|
logging.info(
|
||||||
|
"POST - generate_video_1 - " + str(
|
||||||
|
request_id) + " - Uploading video to firebase: " + firebase_file_path)
|
||||||
|
url = upload_file_firebase_get_url(FIREBASE_BUCKET, firebase_file_path, sound_file_path)
|
||||||
|
logging.info(
|
||||||
|
"POST - generate_video_1 - " + str(
|
||||||
|
request_id) + " - Uploaded video to firebase: " + url)
|
||||||
|
video = {
|
||||||
|
"text": question,
|
||||||
|
"video_path": firebase_file_path,
|
||||||
|
"video_url": url
|
||||||
|
}
|
||||||
|
sp3_questions.append(video)
|
||||||
|
else:
|
||||||
|
logging.error("POST - generate_video_1 - " + str(
|
||||||
|
request_id) + " - Failed to create video for part 1 question: " + question)
|
||||||
|
|
||||||
|
response = {
|
||||||
|
"prompts": sp3_questions,
|
||||||
|
"first_title": data["first_topic"],
|
||||||
|
"second_title": data["second_topic"],
|
||||||
|
"type": "interactiveSpeaking",
|
||||||
|
"id": uuid.uuid4()
|
||||||
|
}
|
||||||
|
logging.info(
|
||||||
|
"POST - generate_video_1 - " + str(
|
||||||
|
request_id) + " - Finished creating videos for speaking part 1: " + str(response))
|
||||||
|
return response
|
||||||
|
except Exception as e:
|
||||||
|
return str(e)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/speaking/generate_video_2", methods=['POST'])
|
||||||
|
@jwt_required()
|
||||||
|
def generate_video_2():
|
||||||
try:
|
try:
|
||||||
data = request.get_json()
|
data = request.get_json()
|
||||||
avatar = data.get("avatar", random.choice(list(AvatarEnum)).value)
|
avatar = data.get("avatar", random.choice(list(AvatarEnum)).value)
|
||||||
prompts = data.get("prompts", [])
|
prompts = data.get("prompts", [])
|
||||||
question = data.get("question")
|
question = data.get("question")
|
||||||
if len(prompts) > 0:
|
suffix = data.get("suffix", "")
|
||||||
question = question + " In your answer you should consider: " + " ".join(prompts)
|
|
||||||
sp1_result = create_video(question, avatar)
|
question = question + " In your answer you should consider: " + " ".join(prompts) + suffix
|
||||||
if sp1_result is not None:
|
|
||||||
sound_file_path = VIDEO_FILES_PATH + sp1_result
|
request_id = str(uuid.uuid4())
|
||||||
firebase_file_path = FIREBASE_SPEAKING_VIDEO_FILES_PATH + sp1_result
|
logging.info("POST - generate_video_2 - Received request to generate video 2. "
|
||||||
|
"Use this id to track the logs: " + str(request_id) + " - Request data: " + str(
|
||||||
|
request.get_json()))
|
||||||
|
|
||||||
|
logging.info("POST - generate_video_2 - " + str(request_id) + " - Creating video for speaking part 2.")
|
||||||
|
logging.info("POST - generate_video_2 - " + str(request_id) + " - Creating video for question: " + question)
|
||||||
|
result = create_video(question, avatar)
|
||||||
|
logging.info("POST - generate_video_2 - " + str(request_id) + " - Video created: " + result)
|
||||||
|
|
||||||
|
if result is not None:
|
||||||
|
sound_file_path = VIDEO_FILES_PATH + result
|
||||||
|
firebase_file_path = FIREBASE_SPEAKING_VIDEO_FILES_PATH + result
|
||||||
|
logging.info(
|
||||||
|
"POST - generate_video_2 - " + str(
|
||||||
|
request_id) + " - Uploading video to firebase: " + firebase_file_path)
|
||||||
url = upload_file_firebase_get_url(FIREBASE_BUCKET, firebase_file_path, sound_file_path)
|
url = upload_file_firebase_get_url(FIREBASE_BUCKET, firebase_file_path, sound_file_path)
|
||||||
|
logging.info(
|
||||||
|
"POST - generate_video_2 - " + str(
|
||||||
|
request_id) + " - Uploaded video to firebase: " + url)
|
||||||
sp1_video_path = firebase_file_path
|
sp1_video_path = firebase_file_path
|
||||||
sp1_video_url = url
|
sp1_video_url = url
|
||||||
|
|
||||||
@@ -1105,31 +1175,47 @@ def generate_speaking_video():
|
|||||||
"video_url": sp1_video_url,
|
"video_url": sp1_video_url,
|
||||||
"video_path": sp1_video_path,
|
"video_path": sp1_video_path,
|
||||||
"type": "speaking",
|
"type": "speaking",
|
||||||
"id": uuid.uuid4()
|
"id": uuid.uuid4(),
|
||||||
|
"suffix": suffix
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
app.logger.error("Failed to create video for part 1 question: " + data["question"])
|
logging.error("POST - generate_video_2 - " + str(
|
||||||
return str("Failed to create video for part 1 question: " + data["question"])
|
request_id) + " - Failed to create video for part 2 question: " + question)
|
||||||
|
return str("Failed to create video for part 2 question: " + data["question"])
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return str(e)
|
return str(e)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/speaking/generate_interactive_video", methods=['POST'])
|
@app.route("/speaking/generate_video_3", methods=['POST'])
|
||||||
@jwt_required()
|
@jwt_required()
|
||||||
def generate_interactive_video():
|
def generate_video_3():
|
||||||
try:
|
try:
|
||||||
data = request.get_json()
|
data = request.get_json()
|
||||||
sp3_questions = []
|
sp3_questions = []
|
||||||
avatar = data.get("avatar", random.choice(list(AvatarEnum)).value)
|
avatar = data.get("avatar", random.choice(list(AvatarEnum)).value)
|
||||||
|
|
||||||
app.logger.info('Creating videos for speaking part 3')
|
request_id = str(uuid.uuid4())
|
||||||
|
logging.info("POST - generate_video_3 - Received request to generate video 3. "
|
||||||
|
"Use this id to track the logs: " + str(request_id) + " - Request data: " + str(
|
||||||
|
request.get_json()))
|
||||||
|
|
||||||
|
logging.info("POST - generate_video_3 - " + str(request_id) + " - Creating videos for speaking part 3.")
|
||||||
for question in data["questions"]:
|
for question in data["questions"]:
|
||||||
|
logging.info("POST - generate_video_3 - " + str(request_id) + " - Creating video for question: " + question)
|
||||||
result = create_video(question, avatar)
|
result = create_video(question, avatar)
|
||||||
|
logging.info("POST - generate_video_3 - " + str(request_id) + " - Video created: " + result)
|
||||||
|
|
||||||
if result is not None:
|
if result is not None:
|
||||||
sound_file_path = VIDEO_FILES_PATH + result
|
sound_file_path = VIDEO_FILES_PATH + result
|
||||||
firebase_file_path = FIREBASE_SPEAKING_VIDEO_FILES_PATH + result
|
firebase_file_path = FIREBASE_SPEAKING_VIDEO_FILES_PATH + result
|
||||||
|
logging.info(
|
||||||
|
"POST - generate_video_3 - " + str(
|
||||||
|
request_id) + " - Uploading video to firebase: " + firebase_file_path)
|
||||||
url = upload_file_firebase_get_url(FIREBASE_BUCKET, firebase_file_path, sound_file_path)
|
url = upload_file_firebase_get_url(FIREBASE_BUCKET, firebase_file_path, sound_file_path)
|
||||||
|
logging.info(
|
||||||
|
"POST - generate_video_3 - " + str(
|
||||||
|
request_id) + " - Uploaded video to firebase: " + url)
|
||||||
video = {
|
video = {
|
||||||
"text": question,
|
"text": question,
|
||||||
"video_path": firebase_file_path,
|
"video_path": firebase_file_path,
|
||||||
@@ -1137,14 +1223,19 @@ def generate_interactive_video():
|
|||||||
}
|
}
|
||||||
sp3_questions.append(video)
|
sp3_questions.append(video)
|
||||||
else:
|
else:
|
||||||
app.app.logger.error("Failed to create video for part 3 question: " + question)
|
logging.error("POST - generate_video_3 - " + str(
|
||||||
|
request_id) + " - Failed to create video for part 3 question: " + question)
|
||||||
|
|
||||||
return {
|
response = {
|
||||||
"prompts": sp3_questions,
|
"prompts": sp3_questions,
|
||||||
"title": data["topic"],
|
"title": data["topic"],
|
||||||
"type": "interactiveSpeaking",
|
"type": "interactiveSpeaking",
|
||||||
"id": uuid.uuid4()
|
"id": uuid.uuid4()
|
||||||
}
|
}
|
||||||
|
logging.info(
|
||||||
|
"POST - generate_video_3 - " + str(
|
||||||
|
request_id) + " - Finished creating videos for speaking part 3: " + str(response))
|
||||||
|
return response
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return str(e)
|
return str(e)
|
||||||
|
|
||||||
@@ -1203,6 +1294,7 @@ def get_level_exam():
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
return str(e)
|
return str(e)
|
||||||
|
|
||||||
|
|
||||||
@app.route('/level_utas', methods=['GET'])
|
@app.route('/level_utas', methods=['GET'])
|
||||||
@jwt_required()
|
@jwt_required()
|
||||||
def get_level_utas():
|
def get_level_utas():
|
||||||
|
|||||||
Reference in New Issue
Block a user