senna-flask / main.py
HudsonArauj
config main
f876f81
from flask import Flask, request, jsonify
import os
from langchain.chat_models import ChatOpenAI
from langchain.schema import (
AIMessage,
HumanMessage,
SystemMessage
)
from flask_cors import CORS,cross_origin
# import gradio as gr
import whisperx
from utils import *
import io
import soundfile
from io import BytesIO
import numpy as np
from pathlib import Path
# Join various path components
device = "cpu"
compute_type = "int8" # change to "int8" if low on GPU mem (may reduce accuracy)
model = whisperx.load_model("large-v2", device, compute_type=compute_type)
app = Flask(__name__)
CORS(app)
messages = [
SystemMessage(content=base1)
]
def get_all_text(result):
all_text = ''
for i in range(len(result['segments'])):
fragment = result['segments'][i]['text']
all_text += fragment
return all_text
def get_fragment_list(result):
fragment_list = []
for i in range(len(result['segments'])):
fragment = result['segments'][i]['text']
fragment_list.append(fragment)
return fragment_list
@app.route('/predict', methods=['POST'])
@cross_origin()
def inference():
audio = request.files['audio'].read()
openai_api_key = request.form['openai_api_key']
print(audio, request.form['openai_api_key'])
if openai_api_key:
chat = ChatOpenAI(temperature=0, openai_api_key=openai_api_key.strip())
batch_size = 16 # reduce if low on GPU mem
audio = whisperx.load_audio(io.BytesIO(audio))
result = model.transcribe(audio, batch_size=batch_size)
text = get_all_text(result)
messages.append(HumanMessage(content=text))
feedback = chat(messages).content
print(result["segments"])
print('All_text', text + '\n\n' + 'Feedback: ' + feedback)
response = (jsonify({'text': text + '\n\n' + 'Feedback: ' + feedback}))
response.headers['Access-Control-Allow-Origin'] = '*'
return response
else:
return 'Please provide OpenAI API Key'
# faz uma rota pra mim simples
@app.route('/')
def hello():
return "Hello World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000, debug=True)