o
    y	iZ                  
   @   s  d Z ddlZddlmZmZmZmZ ddlmZ G dd dZe	dkrdd	d
ddddddddddd	dddddddddddd	ddddgZ
ed e  ee
Zedee
  edee  e  eeZee e  eeZed eded   eded   eded   e  ed  eed! d"D ]\ZZed#e d$e  qe  ed% eed& d"D ]\ZZed#e d$e  qdS dS )'zo
Database utility to get clean conversation data
Removes raw audio entries and returns only transcribed speech
    N)ListDictAnyOptional)datetimec                   @   s   e Zd ZdZededefddZededefddZede	e
eef  de	e
eef  fd	d
Zede	e
eef  defddZede	e
eef  de
eef fddZdS )ConversationCleanerz(Utility class to clean conversation datamessage_textreturnc                 C   s   t td| S )z$Check if a message is raw audio dataz&\[Audio (response|input) - \d+ chars\])boolresearchr    r    services/conversation_cleaner.pyis_raw_audio_entry   s   z&ConversationCleaner.is_raw_audio_entryc                 C   s0   |  dr| dd S |  dr| dd S | S )z*Extract actual speech content from messagezUser said:    NzAssistant said:    )
startswithr   r   r   r   extract_speech_content   s
   

z*ConversationCleaner.extract_speech_contentmessagesc                 C   s4   g }| D ]}| dd}t|rq|| q|S )z7Clean conversation messages to remove raw audio entriesmessage )getr   r   append)r   cleaned_messagesr   r   r   r   r   clean_conversation_messages   s   
z/ConversationCleaner.clean_conversation_messagesc           
   
   C   s  | sdS g }| d | d | d | d t| dD ]O\}}|dd}|dd}|d	d}t|}|rTzt|d
d}|d}	W n	   |}	Y nd}	| |dd|	 d|	  d|  | d q| d | dt
|   | d d|S )z,Format cleaned conversation for easy readingzNo messages foundzP================================================================================zCLEAN CONVERSATIONr      speakerunknownr   	timestampZz+00:00z%H:%M:%SzUnknown timeZ2dz. [z] z: Total Messages: 
)r   	enumerater   r   r   r   Zfromisoformatreplacestrftimeupperlenjoin)
r   Zformatted_linesir   r   contentr   speech_contentZdtZformatted_timer   r   r   format_conversation_for_display.   s2   




&


z3ConversationCleaner.format_conversation_for_displayc                 C   sv   g }g }| D ]&}| dd}| dd}t|}|dkr#|| q|dkr,|| qt| ||t|t|dS )z#Get conversation summary statisticsr   r   r   userbot)total_messagesuser_messagesbot_messages
user_count	bot_count)r   r   r   r   r'   )r   r0   r1   r   r   r*   r+   r   r   r   get_conversation_summaryV   s"   

z,ConversationCleaner.get_conversation_summaryN)__name__
__module____qualname____doc__staticmethodstrr
   r   r   r   r   r   r   r,   r4   r   r   r   r   r      s    	, ',r   __main__z\Assistant said: Hello there! I am an MCube Telephony AI voice assistant. How can I help you?r.   z2025-10-07T18:45:06.137769L   )r   r   r   Z
confidenceZ
session_idz User said: Hello, are you there?r-   z2025-10-07T18:45:14.584993z-Assistant said: [Audio response - 1068 chars]z2025-10-07T18:45:18.763029z>User said: I want IVRS, can you explain me briefly about IVRS?z2025-10-07T18:45:32.400683zAssistant said: Sure. IVRS stands for Interactive Voice Response system. It lets callers interact with a menu using their phone keypad or voice commands.z2025-10-07T18:45:36.355409zTesting ConversationCleaner...zOriginal messages: zCleaned messages: zCONVERSATION SUMMARY:r!   r/   zUser Messages: r2   zBot Messages: r3   zUser Messages:r0   r   z  z. zBot Messages:r1   )r8   r   typingr   r   r   r   r   r   r5   Zsample_messagesprintr   r   r'   r,   	formattedr4   Zsummaryr#   r)   msgr   r   r   r   <module>   sz   f&


C