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)