Shariar00's picture
initial commit
d483661 verified
import json
import streamlit as st
from whisper_stt import transcribe_audio
from intent_recognition import get_intent_and_amount
from generate_response import generate_voice_response
from test_NLU import get_slots
DATABASE_PATH = "database.json"
def load_database():
try:
with open(DATABASE_PATH, "r") as db_file:
return json.load(db_file)
except FileNotFoundError:
return {"requests": []}
def save_to_database(data):
with open(DATABASE_PATH, "w") as db_file:
json.dump(data, db_file, indent=4)
def handle_request(audio_file):
while True:
text = transcribe_audio(audio_file)
intent_data = get_intent_and_amount(text)
intent = intent_data.get("intent")
if intent:
intent = intent.replace("_", " ").title()
amount_data = intent_data.get("amount_data")
amount = amount_data.get("amount") if amount_data else None
currency = amount_data.get("currency") if amount_data else ""
slots = get_slots(text)
project_name = slots.get("project_name")
project_id = slots.get("project_id")
task_id = slots.get("task_id")
status = slots.get("status")
# Ensure mandatory fields are present
if not intent or not amount or not project_id:
generate_voice_response(
"Mandatory fields are missing. Please provide the required information again."
)
st.warning("Mandatory fields missing. Please try again.")
continue
st.write("### Extracted Data")
st.text(f"Extracted Text: {text}")
st.text(f"Intent: {intent}")
st.text(f"Project Name: {project_name}")
st.text(f"Project ID: {project_id}")
st.text(f"Amount: {amount} {currency}")
st.text(f"Task ID: {task_id}")
st.text(f"Status: {status}")
response = (
f"You have requested for the task: Intent: {intent}, "
f"Project: {project_name}. Project ID: {project_id}. "
f"Amount: {amount} {currency}. Task ID: {task_id} and Status: {status}. "
"Please confirm by typing your response: Yes or No."
)
generate_voice_response(response)
# User confirmation
# user_input = st.text_input("Type your response (Yes/No):")
user_input = st.text_input("Type 'yes' or 'no':").strip().lower()
if user_input.lower() == "yes":
request_data = {
"project": project_name,
"project_id": project_id,
"amount": amount,
"Intent": intent,
"task_id": task_id,
"status": status,
}
# Save to database
database = load_database()
database["requests"].append(request_data)
save_to_database(database)
generate_voice_response(
"Thank you for your response, Your request has been confirmed successfully."
)
st.success("Request confirmed and saved successfully.")
st.session_state.reset = True
break
elif user_input.lower() == "no":
generate_voice_response(
"Thank you for your response, You have denied the confirmation request."
)
st.warning("Request denied.")
st.session_state.reset = True
break
# else:
# generate_voice_response("You have typed an invalid response.")
# st.error("Invalid response. Please try again.")
# continue
# Streamlit App
st.title("ERP Voice Request Handling AI System-Demo")
st.write("Upload an audio file and extract information from the request.")
# Upload audio file
audio_file = st.file_uploader("Upload Audio File", type=["wav", "mp3"])
if audio_file:
st.write("### Processing Audio Input")
handle_request(audio_file)
# Display database records
st.write("### Saved Requests in Database")
database = load_database()
if database["requests"]:
st.json(database)
else:
st.write("No requests found.")