usmanyousaf's picture
Update app.py
c60e75c verified
raw
history blame
4.19 kB
import os
from flask import Flask, request, render_template, jsonify
from groq import Groq
# Set up the Groq client
os.environ["GROQ_API_KEY"] = "your_groq_api_key_here"
client = Groq(api_key=os.environ["GROQ_API_KEY"])
app = Flask(__name__)
# Route to render the upload form
@app.route('/')
def index():
return render_template('index.html')
# Route to handle the audio upload and transcription
@app.route('/transcribe', methods=['POST'])
def transcribe_audio():
audio_data = request.files['audio_data']
selected_language = request.form['language']
try:
# Transcribe the audio based on the selected language
transcription = client.audio.transcriptions.create(
file=(audio_data.filename, audio_data.read()),
model="whisper-large-v3",
prompt="Transcribe the audio accurately based on the selected language.",
response_format="text",
language=selected_language,
)
return jsonify({'transcription': transcription})
except Exception as e:
return jsonify({'error': str(e)}), 500
# Route to check grammar and vocabulary of the transcription
@app.route('/check_grammar', methods=['POST'])
def check_grammar():
transcription = request.form.get('transcription')
selected_language = request.form.get('language')
if not transcription or not selected_language:
return jsonify({'error': 'Missing transcription or language selection'}), 400
try:
# Grammar check
grammar_prompt = (
f"Briefly check the grammar of the following text in {selected_language}: {transcription}. "
"Identify any word that does not belong to the selected language and flag it. Based on the number of incorrect words, also check the grammar deeply and carefully. "
"Provide a score from 1 to 10 based on the grammar accuracy, reducing points for incorrect words and make sure to output the score on a new line after two line breaks like 'SCORE='."
)
grammar_check_response = client.chat.completions.create(
model="llama3-groq-70b-8192-tool-use-preview",
messages=[{"role": "user", "content": grammar_prompt}]
)
grammar_feedback = grammar_check_response.choices[0].message.content.strip()
# Vocabulary check
vocabulary_prompt = (
f"Check the vocabulary accuracy of the following text in {selected_language}: {transcription}. "
"Identify any word that does not belong to the selected language and flag it. Based on the number of incorrect words, also check the grammar deeply and carefully. "
"Provide a score from 1 to 10 based on the vocabulary accuracy reducing points for incorrect words and make sure to output the score on a new line after two line breaks like 'SCORE='."
)
vocabulary_check_response = client.chat.completions.create(
model="llama-3.1-70b-versatile",
messages=[{"role": "user", "content": vocabulary_prompt}]
)
vocabulary_feedback = vocabulary_check_response.choices[0].message.content.strip()
# Return feedback and scores
grammar_score = calculate_score(grammar_feedback)
vocabulary_score = calculate_score(vocabulary_feedback)
return jsonify({
'grammar_feedback': grammar_feedback,
'vocabulary_feedback': vocabulary_feedback,
'grammar_score': grammar_score,
'vocabulary_score': vocabulary_score
})
except Exception as e:
return jsonify({'error': str(e)}), 500
def calculate_score(feedback):
"""
Calculate score based on feedback content.
This function searches for the keyword 'SCORE=' or similar variations
(SCORE:, score:, etc.) and extracts the score value.
"""
import re
match = re.search(r'(SCORE=|score=|SCORE:|score:|SCORE = )\s*(\d+)', feedback)
if match:
# Extract and return the score as an integer
return int(match.group(2))
# Return a default score of 0 if no score is found in the feedback
return 0
if __name__ == "__main__":
app.run(debug=True)