usmanyousaf's picture
Update app.py
30432c9 verified
raw
history blame
3.61 kB
import os
from flask import Flask, request, render_template, jsonify
from groq import Groq
import json
# Set up the Groq client
os.environ["GROQ_API_KEY"] = "your_groq_api_key_here" # Replace with your actual API key
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", # You can change this model if needed
response_format="text",
language=selected_language,
)
return jsonify({'transcription': transcription['text']}) # Fix to extract text
except Exception as e:
return str(e), 500
# Route to check grammar and vocabulary of the transcription
@app.route('/check_grammar', methods=['POST'])
def check_grammar():
transcription = request.form['transcription']
selected_language = request.form['language']
if not transcription:
return "No transcription available."
try:
# Grammar check with scoring and concise feedback
grammar_prompt = f"""
Check the grammar of the following text in {selected_language}:
\"\"\"
{transcription}
\"\"\"
Provide a score from 1 to 10 and a concise feedback (1-1.5 lines) without including the score in the feedback.
Return the result in JSON format with keys 'score' and 'feedback'.
"""
grammar_check_response = client.chat.completions.create(
model="gemma-7b-it", # Change the model if needed
messages=[{"role": "user", "content": grammar_prompt}]
)
grammar_response_content = grammar_check_response.choices[0].message.content.strip()
grammar_result = json.loads(grammar_response_content)
grammar_score = grammar_result.get('score', '')
grammar_feedback = grammar_result.get('feedback', '')
# Vocabulary check with scoring and concise feedback
vocabulary_prompt = f"""
Check the vocabulary accuracy of the following text in {selected_language}:
\"\"\"
{transcription}
\"\"\"
Provide a score from 1 to 10 and a concise feedback (1-1.5 lines) without including the score in the feedback.
Return the result in JSON format with keys 'score' and 'feedback'.
"""
vocabulary_check_response = client.chat.completions.create(
model="llama3-8b-8192", # Change the model if needed
messages=[{"role": "user", "content": vocabulary_prompt}]
)
vocabulary_response_content = vocabulary_check_response.choices[0].message.content.strip()
vocabulary_result = json.loads(vocabulary_response_content)
vocabulary_score = vocabulary_result.get('score', '')
vocabulary_feedback = vocabulary_result.get('feedback', '')
return jsonify({
'grammar_feedback': grammar_feedback,
'grammar_score': grammar_score,
'vocabulary_feedback': vocabulary_feedback,
'vocabulary_score': vocabulary_score
})
except Exception as e:
return str(e), 500
if __name__ == "__main__":
app.run(debug=True)