Adicionado Opção para Transcrever o Proprio audio, agora sempre resume e transcreve entregando na mesma mensagem

This commit is contained in:
Impacte AI 2024-12-07 11:01:29 -03:00
parent c189d69ac4
commit e1114101f6
6 changed files with 32 additions and 17 deletions

View File

@ -1,5 +1,10 @@
# Chave da API para transcrição (Groq ou qualquer outro serviço que você utilizar) # Chave da API para transcrição (Groq ou qualquer outro serviço que você utilizar)
GROQ_API_KEY=your_groq_api_key GROQ_API_KEY=substitua_sua_chave_GROQ_aqui
# Comportamento da transcrição
PROCESS_SELF_MESSAGES=true
BUSINESS_MESSAGE="substitua_sua_mensagem_de_servico_aqui"
PROCESS_GROUP_MESSAGES=false
# Host e porta do Redis (caso esteja utilizando) # Host e porta do Redis (caso esteja utilizando)
REDIS_HOST=localhost REDIS_HOST=localhost

View File

@ -64,6 +64,9 @@ class Settings:
self.PROCESS_GROUP_MESSAGES = os.getenv('PROCESS_GROUP_MESSAGES', 'false').lower() == 'true' self.PROCESS_GROUP_MESSAGES = os.getenv('PROCESS_GROUP_MESSAGES', 'false').lower() == 'true'
logger.debug(f"PROCESS_GROUP_MESSAGES configurado como: {self.PROCESS_GROUP_MESSAGES}") logger.debug(f"PROCESS_GROUP_MESSAGES configurado como: {self.PROCESS_GROUP_MESSAGES}")
self.PROCESS_SELF_MESSAGES = os.getenv('PROCESS_SELF_MESSAGES', 'false').lower() == 'true'
logger.debug(f"PROCESS_SELF_MESSAGES configurado como: {self.PROCESS_SELF_MESSAGES}")
self.LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO') self.LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO')
logger.debug(f"LOG_LEVEL configurado como: {self.LOG_LEVEL}") logger.debug(f"LOG_LEVEL configurado como: {self.LOG_LEVEL}")

View File

@ -16,6 +16,7 @@ services:
GROQ_API_KEY: "substitua_sua_chave_GROQ_aqui" #coloque sua chave GROQ aqui GROQ_API_KEY: "substitua_sua_chave_GROQ_aqui" #coloque sua chave GROQ aqui
BUSINESS_MESSAGE: "substitua_sua_mensagem_de_servico_aqui" #coloque a mensagem que será enviada ao final da transcrição aqui BUSINESS_MESSAGE: "substitua_sua_mensagem_de_servico_aqui" #coloque a mensagem que será enviada ao final da transcrição aqui
PROCESS_GROUP_MESSAGES: "false" # Define se mensagens de grupos devem ser processadas PROCESS_GROUP_MESSAGES: "false" # Define se mensagens de grupos devem ser processadas
PROCESS_SELF_MESSAGES: "true" # Define se sua próprias mensagens devem ser processadas
DEBUG_MODE: "false" DEBUG_MODE: "false"
LOG_LEVEL: "INFO" LOG_LEVEL: "INFO"
deploy: deploy:

32
main.py
View File

@ -4,6 +4,7 @@ from services import (
transcribe_audio, transcribe_audio,
send_message_to_whatsapp, send_message_to_whatsapp,
get_audio_base64, get_audio_base64,
summarize_text_if_needed,
) )
from models import WebhookRequest from models import WebhookRequest
import aiohttp import aiohttp
@ -16,7 +17,7 @@ async def transcreve_audios(request: Request):
try: try:
logger.info("Iniciando processamento de áudio") logger.info("Iniciando processamento de áudio")
body = await request.json() body = await request.json()
if settings.DEBUG_MODE: if settings.DEBUG_MODE:
logger.debug(f"Payload recebido: {body}") logger.debug(f"Payload recebido: {body}")
@ -28,13 +29,13 @@ async def transcreve_audios(request: Request):
from_me = body["data"]["key"]["fromMe"] from_me = body["data"]["key"]["fromMe"]
remote_jid = body["data"]["key"]["remoteJid"] remote_jid = body["data"]["key"]["remoteJid"]
message_type = body["data"]["messageType"] message_type = body["data"]["messageType"]
if "audioMessage" not in message_type: if "audioMessage" not in message_type:
logger.info("Mensagem recebida não é um áudio, ignorando") logger.info("Mensagem recebida não é um áudio, ignorando")
return {"message": "Mensagem recebida não é um áudio"} return {"message": "Mensagem recebida não é um áudio"}
if from_me: if from_me and not settings.PROCESS_SELF_MESSAGES:
logger.info("Mensagem enviada pelo próprio usuário, ignorando") logger.info("Mensagem enviada pelo próprio usuário ignorada conforme configuração")
return {"message": "Mensagem enviada por mim, sem operação"} return {"message": "Mensagem enviada por mim, sem operação"}
if "@g.us" in remote_jid and not settings.PROCESS_GROUP_MESSAGES: if "@g.us" in remote_jid and not settings.PROCESS_GROUP_MESSAGES:
@ -52,17 +53,20 @@ async def transcreve_audios(request: Request):
logger.debug(f"Áudio convertido e salvo em: {audio_source}") logger.debug(f"Áudio convertido e salvo em: {audio_source}")
# Transcrever o áudio # Transcrever o áudio
transcription_text, is_summary = await transcribe_audio(audio_source) transcription_text, _ = await transcribe_audio(audio_source)
summary_text = await summarize_text_if_needed(transcription_text)
header_message = ( # Formatar a mensagem
"*Resumo do áudio:*\n\n" if is_summary else "*Transcrição desse áudio:*\n\n" summary_message = (
f"*Resumo do áudio:*\n\n"
f"{summary_text}\n\n"
f"*Transcrição do áudio:*\n\n"
f"{transcription_text}\n\n"
f"{settings.BUSINESS_MESSAGE}"
) )
# Formatar o conteúdo da mensagem
summary_message = f"{header_message}{transcription_text}\n\n{settings.BUSINESS_MESSAGE}"
logger.debug(f"Mensagem formatada: {summary_message[:100]}...") logger.debug(f"Mensagem formatada: {summary_message[:100]}...")
# Enviar o resumo transcrito de volta via WhatsApp # Enviar a mensagem formatada via WhatsApp
await send_message_to_whatsapp( await send_message_to_whatsapp(
server_url, server_url,
instance, instance,
@ -78,6 +82,6 @@ async def transcreve_audios(request: Request):
except Exception as e: except Exception as e:
logger.error(f"Erro ao processar áudio: {str(e)}", exc_info=settings.DEBUG_MODE) logger.error(f"Erro ao processar áudio: {str(e)}", exc_info=settings.DEBUG_MODE)
raise HTTPException( raise HTTPException(
status_code=500, status_code=500,
detail=f"Erro ao processar a requisição: {str(e)}" detail=f"Erro ao processar a requisição: {str(e)}",
) )

View File

@ -91,6 +91,7 @@ services:
GROQ_API_KEY: "substitua_sua_chave_GROQ_aqui" #coloque sua chave GROQ aqui GROQ_API_KEY: "substitua_sua_chave_GROQ_aqui" #coloque sua chave GROQ aqui
BUSINESS_MESSAGE: "substitua_sua_mensagem_de_servico_aqui" #coloque a mensagem que será enviada ao final da transcrição aqui BUSINESS_MESSAGE: "substitua_sua_mensagem_de_servico_aqui" #coloque a mensagem que será enviada ao final da transcrição aqui
PROCESS_GROUP_MESSAGES: "false" # Define se mensagens de grupos devem ser processadas PROCESS_GROUP_MESSAGES: "false" # Define se mensagens de grupos devem ser processadas
PROCESS_SELF_MESSAGES: "true" # Define se sua próprias mensagens devem ser processadas
DEBUG_MODE: "false" DEBUG_MODE: "false"
LOG_LEVEL: "INFO" LOG_LEVEL: "INFO"
``` ```
@ -115,6 +116,7 @@ services:
GROQ_API_KEY: "substitua_sua_chave_GROQ_aqui" #coloque sua chave GROQ aqui GROQ_API_KEY: "substitua_sua_chave_GROQ_aqui" #coloque sua chave GROQ aqui
BUSINESS_MESSAGE: "substitua_sua_mensagem_de_servico_aqui" #coloque a mensagem que será enviada ao final da transcrição aqui BUSINESS_MESSAGE: "substitua_sua_mensagem_de_servico_aqui" #coloque a mensagem que será enviada ao final da transcrição aqui
PROCESS_GROUP_MESSAGES: "false" # Define se mensagens de grupos devem ser processadas PROCESS_GROUP_MESSAGES: "false" # Define se mensagens de grupos devem ser processadas
PROCESS_SELF_MESSAGES: "true" # Define se sua próprias mensagens devem ser processadas
DEBUG_MODE: "false" DEBUG_MODE: "false"
LOG_LEVEL: "INFO" LOG_LEVEL: "INFO"
deploy: deploy:

View File

@ -34,7 +34,7 @@ async def summarize_text_if_needed(text):
"messages": [{ "messages": [{
"role": "user", "role": "user",
"content": f""" "content": f"""
Entenda o contexto desse áudio e faça um resumo super enxuto sobre o que se trata. Entenda o contexto desse áudio e faça um resumo super enxuto sobre o que se trata, coloque os pontos relevantes e mais importantes no resumo de forma muito curta.
Esse áudio foi enviado pelo whatsapp, de alguém, para Gabriel. Esse áudio foi enviado pelo whatsapp, de alguém, para Gabriel.
Escreva APENAS o resumo do áudio como se fosse você que estivesse enviando Escreva APENAS o resumo do áudio como se fosse você que estivesse enviando
essa mensagem! Não comprimente, não de oi, não escreva nada antes nem depois essa mensagem! Não comprimente, não de oi, não escreva nada antes nem depois
@ -197,4 +197,4 @@ async def get_audio_base64(server_url, instance, apikey, message_id):
raise HTTPException(status_code=500, detail="Falha ao obter áudio em base64") raise HTTPException(status_code=500, detail="Falha ao obter áudio em base64")
except Exception as e: except Exception as e:
logger.error(f"Erro na obtenção do áudio base64: {str(e)}", exc_info=settings.DEBUG_MODE) logger.error(f"Erro na obtenção do áudio base64: {str(e)}", exc_info=settings.DEBUG_MODE)
raise raise