From e1114101f66d1ca807caeeaad5a1e4e1f6512569 Mon Sep 17 00:00:00 2001 From: Impacte AI Date: Sat, 7 Dec 2024 11:01:29 -0300 Subject: [PATCH] =?UTF-8?q?Adicionado=20Op=C3=A7=C3=A3o=20para=20Transcrev?= =?UTF-8?q?er=20o=20Proprio=20audio,=20agora=20sempre=20resume=20e=20trans?= =?UTF-8?q?creve=20entregando=20na=20mesma=20mensagem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 7 ++++++- config.py | 3 +++ docker-compose.yaml | 1 + main.py | 32 ++++++++++++++++++-------------- readme.md | 2 ++ services.py | 4 ++-- 6 files changed, 32 insertions(+), 17 deletions(-) diff --git a/.env.example b/.env.example index 8d7bddb..1ad59e6 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,10 @@ # 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) REDIS_HOST=localhost diff --git a/config.py b/config.py index be8ed40..cdb589b 100644 --- a/config.py +++ b/config.py @@ -64,6 +64,9 @@ class Settings: self.PROCESS_GROUP_MESSAGES = os.getenv('PROCESS_GROUP_MESSAGES', 'false').lower() == 'true' 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') logger.debug(f"LOG_LEVEL configurado como: {self.LOG_LEVEL}") diff --git a/docker-compose.yaml b/docker-compose.yaml index 371a6db..d89d8f4 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -16,6 +16,7 @@ services: 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 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" LOG_LEVEL: "INFO" deploy: diff --git a/main.py b/main.py index 80f93e5..ca9a52a 100644 --- a/main.py +++ b/main.py @@ -4,6 +4,7 @@ from services import ( transcribe_audio, send_message_to_whatsapp, get_audio_base64, + summarize_text_if_needed, ) from models import WebhookRequest import aiohttp @@ -16,7 +17,7 @@ async def transcreve_audios(request: Request): try: logger.info("Iniciando processamento de áudio") body = await request.json() - + if settings.DEBUG_MODE: logger.debug(f"Payload recebido: {body}") @@ -28,13 +29,13 @@ async def transcreve_audios(request: Request): from_me = body["data"]["key"]["fromMe"] remote_jid = body["data"]["key"]["remoteJid"] message_type = body["data"]["messageType"] - + if "audioMessage" not in message_type: logger.info("Mensagem recebida não é um áudio, ignorando") return {"message": "Mensagem recebida não é um áudio"} - if from_me: - logger.info("Mensagem enviada pelo próprio usuário, ignorando") + if from_me and not settings.PROCESS_SELF_MESSAGES: + logger.info("Mensagem enviada pelo próprio usuário ignorada conforme configuração") return {"message": "Mensagem enviada por mim, sem operação"} 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}") # 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 = ( - "*Resumo do áudio:*\n\n" if is_summary else "*Transcrição desse áudio:*\n\n" + # Formatar a mensagem + 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]}...") - # Enviar o resumo transcrito de volta via WhatsApp + # Enviar a mensagem formatada via WhatsApp await send_message_to_whatsapp( server_url, instance, @@ -78,6 +82,6 @@ async def transcreve_audios(request: Request): except Exception as e: logger.error(f"Erro ao processar áudio: {str(e)}", exc_info=settings.DEBUG_MODE) raise HTTPException( - status_code=500, - detail=f"Erro ao processar a requisição: {str(e)}" - ) + status_code=500, + detail=f"Erro ao processar a requisição: {str(e)}", + ) \ No newline at end of file diff --git a/readme.md b/readme.md index db15f65..ef05eda 100644 --- a/readme.md +++ b/readme.md @@ -91,6 +91,7 @@ services: 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 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" LOG_LEVEL: "INFO" ``` @@ -115,6 +116,7 @@ services: 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 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" LOG_LEVEL: "INFO" deploy: diff --git a/services.py b/services.py index 800034e..e7d22a7 100644 --- a/services.py +++ b/services.py @@ -34,7 +34,7 @@ async def summarize_text_if_needed(text): "messages": [{ "role": "user", "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. 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 @@ -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") except Exception as e: logger.error(f"Erro na obtenção do áudio base64: {str(e)}", exc_info=settings.DEBUG_MODE) - raise + raise \ No newline at end of file