Аудио-запрос речи в текст. Как запретить Streamlit повторную обработку аудиовхода при каждом изменении состояния или взаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Аудио-запрос речи в текст. Как запретить Streamlit повторную обработку аудиовхода при каждом изменении состояния или вза

Сообщение Anonymous »

Я создаю чат-приложение Streamlit с возможностью записи звука с помощью audiorecorder. Я столкнулся с проблемой, из-за которой мой код обработки звука запускается при каждом изменении состояния или взаимодействии, даже если новый звук не записывается.
Код:

Код: Выделить всё

from audiorecorder import audiorecorder
import streamlit as st
from langchain_core.messages import AIMessage, HumanMessage
from src.speech2text import speech2text
import os

# Initialize chat history
if "chat_history" not in st.session_state:
st.session_state.chat_history = [
AIMessage(content="Initial message"),
]

# User input methods
user_query = st.chat_input("Ask a question...")
audio = audiorecorder(start_prompt="", stop_prompt="", pause_prompt="", show_visualizer=False)

# Process user input
if user_query or len(audio) > 0:
if len(audio) > 0:  # This condition triggers on every Streamlit rerun
audio.export("audio_query.wav", format="wav")
with st.chat_message("Human"):
transcribed_text = speech2text("audio_query.wav")
st.session_state.chat_history.append(HumanMessage(content=transcribed_text))
user_query = transcribed_text
os.remove("audio_query.wav")

elif user_query:
st.session_state.chat_history.append(HumanMessage(content=user_query))
else:
st.stop()

with st.chat_message("AI"):
response_container = st.empty()
response_text = ""

try:
with st.spinner("Generating response..."):
full_response, chunks, urls = rag(user_query, llm_choice, api_key)

with st.spinner("Generating audio..."):
audio_file = text2speech(remove_emojis(full_response),
filename="audio_response.mp3")
if audio_file:
autoplay_audio("audio_response.mp3")
Проблема:
  • Каждый раз, когда я взаимодействую с каким-либо элементом в своем приложении Streamlit ( нажатие кнопок, отправка отзыва и т. д.), проверка if len(audio) > 0 запускается снова
  • Это приводит к ненужной обработке звука и операциям с файлами
  • Обработка звука должна выполняться только при фактической записи нового звука.
Ожидаемое поведение:
  • Обработка звука должна запускаться только при появлении нового аудио. фактически записано.
  • Другие взаимодействия с приложением не должны запускать логику обработки звука.
Что я Пробовал:
  • Использование состояния сеанса для отслеживания статус аудио (но не уверен в правильности подхода)
  • Похоже, проблема связана с реактивным поведением повторного запуска Streamlit
< strong>Вопрос:
  • Как я могу изменить свой код, чтобы он обрабатывал звук только при фактической записи нового звука?
  • Как правильно обеспечить сохранение состояния звука в Streamlit?
Будем благодарны за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/791 ... -audio-inp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»