Spaces:
Runtime error
Runtime error
File size: 2,685 Bytes
b8dcbf5 593f0ea b8dcbf5 593f0ea b8dcbf5 593f0ea b8dcbf5 593f0ea b8dcbf5 593f0ea b8dcbf5 593f0ea b8dcbf5 593f0ea b8dcbf5 593f0ea b8dcbf5 593f0ea b8dcbf5 593f0ea b8dcbf5 593f0ea b8dcbf5 593f0ea b8dcbf5 593f0ea b8dcbf5 593f0ea b8dcbf5 593f0ea fd15eaf 593f0ea b8dcbf5 593f0ea b8dcbf5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
from flask import Flask, request, render_template, send_file
from werkzeug.utils import secure_filename
from src.ollama_chain import OllamaChain, OllamaRAGChain
from src.llama_cpp_chains import LlamaChain
from src.pdf_handler import extract_pdf
from src.vqa import answer_visual_question
from src.audio_processor import AudioProcessor
from dotenv import load_dotenv
import os
app = Flask(__name__)
load_dotenv()
UPLOAD_FOLDER = './.cache/temp_files'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
audio_processor = AudioProcessor()
chat_memory = [] # Replace with appropriate chat memory class if needed
llm_chain = None
pdf_mode = False
def get_chain():
global llm_chain
if llm_chain is None:
llm_chain = OllamaRAGChain(chat_memory) if pdf_mode else OllamaChain(chat_memory)
return llm_chain
@app.route("/", methods=["GET", "POST"])
def index():
global llm_chain, pdf_mode
response_text = ""
audio_file_path = ""
if request.method == "POST":
user_input = request.form.get("user_input")
uploaded_pdf = request.files.getlist("uploaded_pdf")
uploaded_image = request.files.get("uploaded_image")
uploaded_audio = request.files.get("uploaded_audio")
pdf_mode = True if request.form.get("pdf_chat") == "on" else False
chain = get_chain()
# PDF processing
if pdf_mode and uploaded_pdf:
try:
chain.update_chain(uploaded_pdf)
except Exception as e:
return f"Error updating knowledge base: {e}"
try:
if uploaded_image and uploaded_image.filename != '':
image_path = os.path.join(UPLOAD_FOLDER, secure_filename(uploaded_image.filename))
uploaded_image.save(image_path)
response_text = answer_visual_question(image_path, user_input)
elif uploaded_audio and uploaded_audio.filename != '':
audio_path = os.path.join(UPLOAD_FOLDER, secure_filename(uploaded_audio.filename))
uploaded_audio.save(audio_path)
question = audio_processor.audio_to_text(audio_path)
response_text = chain.run(question)
else:
response_text = chain.run(user_input)
audio_file_path = audio_processor.text_to_speech(response_text)
except Exception as e:
return f"Error during chat: {e}"
return render_template("index.html", response=response_text, audio_path=audio_file_path)
@app.route("/audio")
def audio():
path = request.args.get("path")
return send_file(path, mimetype="audio/mp3")
if __name__ == "__main__":
app.run(debug=True)
|