clubdelaia / app.py
davila7's picture
fix
dfd6eb7
import streamlit as st
from streamlit_chat import message
import os
from dotenv import load_dotenv
import requests
import json
import whisper
from audiorecorder import audiorecorder
load_dotenv()
# whisper
model = whisper.load_model('base')
DEFAULT_WIDTH = 80
width = 40
width = max(width, 0.01)
side = max((100 - width) / 2, 0.01)
# Judini
judini_api_key= os.getenv("JUDINI_API_KEY")
agent_id_cap_7= os.getenv("JUDINI_AGENT_ID_CAP_7")
headers = {"Content-Type": "application/json; charset=utf-8", "Authorization": "Bearer "+judini_api_key}
# Initialise session state variables
if 'generated' not in st.session_state:
st.session_state['generated'] = []
if 'past' not in st.session_state:
st.session_state['past'] = []
if 'messages' not in st.session_state:
st.session_state['messages'] = [
{"role": "system", "content": "You are a helpful assistant."}
]
def load_chat():
try:
# container for chat history
response_container = st.container()
# container for text box
container = st.container()
with container:
st.markdown("---", unsafe_allow_html=True)
st.write('Realiza una pregunta por texto o por audio sobre el capitulo')
audio = audiorecorder("Grabar audio", "Stop")
user_audio = ''
if len(audio) > 0:
st.audio(audio.tobytes())
# To save audio to a file:
wav_file = open("audio.mp3", "wb")
wav_file.write(audio.tobytes())
with st.form(key='my_form', clear_on_submit=True):
# Whisper
if os.path.exists("audio.mp3"):
output = model.transcribe("audio.mp3")
user_audio = output['text']
user_input = st.text_area("", key='input', height=100)
submit_button = st.form_submit_button(label='Enviar pregunta')
if submit_button and (user_input or user_audio != ''):
if os.path.exists("audio.mp3"):
os.remove("audio.mp3")
output, total_tokens, prompt_tokens, completion_tokens = generate_response(agent_id_cap_7, user_input, user_audio)
st.session_state['past'].append(user_input)
st.session_state['generated'].append(output)
if st.session_state['generated']:
with response_container:
for i in range(len(st.session_state['generated'])):
try:
message(st.session_state["past"][i], is_user=True, key=str(i) + '_user')
message(st.session_state["generated"][i], key=str(i))
except json.JSONDecodeError as e:
print(f"Error: {e}")
except json.JSONDecodeError as e:
print(f"Error: {e}")
def generate_response(agent_id, text_input, audio_input):
prompt = text_input + ' .'+ audio_input
st.session_state['messages'].append({"role": "user", "content": prompt})
data = {
"messages": [
{
"role": "user",
"content": prompt
}
]
}
url = 'https://playground.judini.ai/api/v1/agent/'+agent_id
response = requests.post(url, headers=headers, json=data, stream=True)
token = ''
for chunk in response.iter_content(chunk_size=1024):
if chunk:
raw_data = chunk.decode('utf-8').replace("data: ", '')
if raw_data != "[DONE]":
try:
json_object = json.loads(raw_data.strip())
token += json_object['data']
except json.JSONDecodeError as e:
print(f"Error al cargar el JSON: {e}")
response = token
st.session_state['messages'].append({"role": "assistant", "content": response})
print(st.session_state['messages'])
total_tokens = 0
prompt_tokens = 0
completion_tokens = 0
return response, total_tokens, prompt_tokens, completion_tokens
def main():
st.set_page_config(page_title="El Club de la IA", layout="wide")
st.title("El Club de la IA")
st.write("Chatea con nuestro bot Isaac, experto en cada capitulo")
tabs = ['Cap 7']
selected_tab = st.sidebar.radio("Selecciona un Capitulo", tabs)
clear_button = st.sidebar.button("Limpiar conversación", key="clear")
if selected_tab == "Cap 7":
_, container, _ = st.columns([side, 47, side])
VIDEO_DATA = "https://youtu.be/kXwl2KE4C9w"
container.video(data=VIDEO_DATA)
load_chat()
st.markdown('Potenciado por [Judini](https://judini.ai)')
if __name__ == "__main__":
main()