Files

1 line
10 KiB
JSON

{"repo": "agatamilia/petaniku", "files": {"be-python/whisper_integration.py": {"2a8f06b6dc62736a67c36d3b3111767295c650ba": {"t": 1785746387.660064, "n": 4964, "h": "a9ffc10306cb64bc", "c": "# Add to your Flask app.py file:\n\nimport whisper\nimport tempfile\nimport os\nfrom datetime import datetime\nimport uuid\nfrom werkzeug.utils import secure_filename\n\n# Initialize Whisper model (do this at app startup)\nWHISPER_MODEL = whisper.load_model(\"base\")\n\n# Create upload folder for audio\nUPLOAD_AUDIO_FOLDER = 'uploads/audio'\nos.makedirs(UPLOAD_AUDIO_FOLDER, exist_ok=True)\n\n@app.route('/api/transcribe', methods=['POST'])\ndef transcribe_audio():\n if 'audio' not in request.files:\n return jsonify({\"error\": \"No audio file provided\"}), 400\n\n audio_file = request.files['audio']\n if audio_file.filename == '':\n return jsonify({\"error\": \"Empty filename\"}), 400\n \n try:\n # Save file\n filename = secure_filename(f\"audio_{datetime.now().strftime('%Y%m%d_%H%M%S')}_{str(uuid.uuid4())[:8]}.wav\")\n filepath = os.path.join(UPLOAD_AUDIO_FOLDER, filename)\n audio_file.save(filepath)\n \n # Check file size\n file_size = os.path.getsize(filepath)\n if file_size < 100: # Very small files are likely corrupted\n return jsonify({\"error\": \"Audio file is too small or corrupted\"}), 400\n \n # Process with Whisper\n logger.info(f\"Processing audio file: {filepath}\")\n result = WHISPER_MODEL.transcribe(\n filepath, \n language=\"id\", # Indonesian language\n fp16=False # Use CPU-compatible mode\n )\n \n transcription = result[\"text\"]\n logger.info(f\"Transcription: {transcription}\")\n \n # Process with DeepSeek\n session_id = request.form.get('session_id')\n ai_response = \"Maaf, saya tidak dapat memproses pesan suara Anda saat ini.\"\n \n if transcription and session_id:\n try:\n # Call DeepSeek API\n headers = {\n \"Authorization\": f\"Bearer {DEEPSEEK_API_KEY}\",\n \"Content-Type\": \"application/json\"\n }\n \n payload = {\n \"model\": \"deepseek-chat\",\n \"messages\": [\n {\"role\": \"system\", \"content\": \"Anda adalah asisten pertanian PeTaniku. Berikan informasi yang akurat dan bermanfaat tentang pertanian.\"},\n {\"role\": \"user\", \"content\": transcription}\n ],\n \"temperature\": 0.7,\n \"max_tokens\": 1000\n }\n \n response = requests.post(\n \"https://api.deepseek.com/v1/chat/completions\",\n headers=headers,\n json=payload\n )\n \n if response.status_code == 200:\n result = response.json()\n ai_response = result['choices'][0]['message']['content']\n \n # Save in database\n session = db.session.get(Session, session_id)\n if session:\n current_time = int(datetime.now().timestamp() * 1000)\n \n # Save audio message\n audio_message = Message(\n id=str(uuid.uuid4()),\n session_id=session_id,\n content=transcription,\n role='user',\n timestamp=current_time,\n audio_path=f\"/uploads/audio/{filename}\"\n )\n \n # Save AI response\n response_message = Message(\n id=str(uuid.uuid4()),\n session_id=session_id,\n content=ai_response,\n role='assistant',\n timestamp=current_time + 1\n )\n \n # Update session timestamp\n session.updated_at = current_time\n \n db.session.add_all([audio_message, response_message])\n db.session.commit()\n else:\n logger.error(f\"DeepSeek API error: {response.text}\")\n except Exception as e:\n logger.error(f\"Error processing transcription with DeepSeek: {e}\")\n \n return jsonify({\n \"transcription\": transcription,\n \"ai_response\": ai_response,\n \"audio_path\": f\"/uploads/audio/{filename}\"\n })\n \n except Exception as e:\n logger.error(f\"Transcription error: {str(e)}\")\n return jsonify({\"error\": f\"Transcription failed: {str(e)}\"}), 500\n\n# Serve uploaded audio\n@app.route('/uploads/audio/<filename>')\ndef serve_audio(filename):\n return send_from_directory(UPLOAD_AUDIO_FOLDER, filename)\n\n"}, "d06e199ba3c1f9486a551d80f53acaec296dc444": {"t": 1785763200.1328847, "n": 4964, "h": "a9ffc10306cb64bc", "c": "# Add to your Flask app.py file:\n\nimport whisper\nimport tempfile\nimport os\nfrom datetime import datetime\nimport uuid\nfrom werkzeug.utils import secure_filename\n\n# Initialize Whisper model (do this at app startup)\nWHISPER_MODEL = whisper.load_model(\"base\")\n\n# Create upload folder for audio\nUPLOAD_AUDIO_FOLDER = 'uploads/audio'\nos.makedirs(UPLOAD_AUDIO_FOLDER, exist_ok=True)\n\n@app.route('/api/transcribe', methods=['POST'])\ndef transcribe_audio():\n if 'audio' not in request.files:\n return jsonify({\"error\": \"No audio file provided\"}), 400\n\n audio_file = request.files['audio']\n if audio_file.filename == '':\n return jsonify({\"error\": \"Empty filename\"}), 400\n \n try:\n # Save file\n filename = secure_filename(f\"audio_{datetime.now().strftime('%Y%m%d_%H%M%S')}_{str(uuid.uuid4())[:8]}.wav\")\n filepath = os.path.join(UPLOAD_AUDIO_FOLDER, filename)\n audio_file.save(filepath)\n \n # Check file size\n file_size = os.path.getsize(filepath)\n if file_size < 100: # Very small files are likely corrupted\n return jsonify({\"error\": \"Audio file is too small or corrupted\"}), 400\n \n # Process with Whisper\n logger.info(f\"Processing audio file: {filepath}\")\n result = WHISPER_MODEL.transcribe(\n filepath, \n language=\"id\", # Indonesian language\n fp16=False # Use CPU-compatible mode\n )\n \n transcription = result[\"text\"]\n logger.info(f\"Transcription: {transcription}\")\n \n # Process with DeepSeek\n session_id = request.form.get('session_id')\n ai_response = \"Maaf, saya tidak dapat memproses pesan suara Anda saat ini.\"\n \n if transcription and session_id:\n try:\n # Call DeepSeek API\n headers = {\n \"Authorization\": f\"Bearer {DEEPSEEK_API_KEY}\",\n \"Content-Type\": \"application/json\"\n }\n \n payload = {\n \"model\": \"deepseek-chat\",\n \"messages\": [\n {\"role\": \"system\", \"content\": \"Anda adalah asisten pertanian PeTaniku. Berikan informasi yang akurat dan bermanfaat tentang pertanian.\"},\n {\"role\": \"user\", \"content\": transcription}\n ],\n \"temperature\": 0.7,\n \"max_tokens\": 1000\n }\n \n response = requests.post(\n \"https://api.deepseek.com/v1/chat/completions\",\n headers=headers,\n json=payload\n )\n \n if response.status_code == 200:\n result = response.json()\n ai_response = result['choices'][0]['message']['content']\n \n # Save in database\n session = db.session.get(Session, session_id)\n if session:\n current_time = int(datetime.now().timestamp() * 1000)\n \n # Save audio message\n audio_message = Message(\n id=str(uuid.uuid4()),\n session_id=session_id,\n content=transcription,\n role='user',\n timestamp=current_time,\n audio_path=f\"/uploads/audio/{filename}\"\n )\n \n # Save AI response\n response_message = Message(\n id=str(uuid.uuid4()),\n session_id=session_id,\n content=ai_response,\n role='assistant',\n timestamp=current_time + 1\n )\n \n # Update session timestamp\n session.updated_at = current_time\n \n db.session.add_all([audio_message, response_message])\n db.session.commit()\n else:\n logger.error(f\"DeepSeek API error: {response.text}\")\n except Exception as e:\n logger.error(f\"Error processing transcription with DeepSeek: {e}\")\n \n return jsonify({\n \"transcription\": transcription,\n \"ai_response\": ai_response,\n \"audio_path\": f\"/uploads/audio/{filename}\"\n })\n \n except Exception as e:\n logger.error(f\"Transcription error: {str(e)}\")\n return jsonify({\"error\": f\"Transcription failed: {str(e)}\"}), 500\n\n# Serve uploaded audio\n@app.route('/uploads/audio/<filename>')\ndef serve_audio(filename):\n return send_from_directory(UPLOAD_AUDIO_FOLDER, filename)\n\n"}}}}