|
import os |
|
from flask import Flask, request, render_template, jsonify |
|
from groq import Groq |
|
import json |
|
|
|
|
|
os.environ["GROQ_API_KEY"] = "your_groq_api_key_here" |
|
client = Groq(api_key=os.environ["GROQ_API_KEY"]) |
|
|
|
app = Flask(__name__) |
|
|
|
|
|
@app.route('/') |
|
def index(): |
|
return render_template('index.html') |
|
|
|
|
|
@app.route('/transcribe', methods=['POST']) |
|
def transcribe_audio(): |
|
audio_data = request.files['audio_data'] |
|
selected_language = request.form['language'] |
|
|
|
try: |
|
|
|
transcription = client.audio.transcriptions.create( |
|
file=(audio_data.filename, audio_data.read()), |
|
model="whisper-large-v3", |
|
response_format="text", |
|
language=selected_language, |
|
) |
|
|
|
return jsonify({'transcription': transcription['text']}) |
|
except Exception as e: |
|
return str(e), 500 |
|
|
|
|
|
@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_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", |
|
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_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", |
|
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) |
|
|