o
    i                     @   s   d Z ddlZddlZddlZddlmZ ddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ d	d
 Zdd Zdd ZG dd dZdd Zdd Zdd Zdd Zedkrbe  dS dS )zERe-transcribe calls for a BID/date with Sarvam and refresh analytics.    N)datetime)load_dotenv)
DictCursor)CallAnalyzer)Config)	SarvamSTTc              
   C   s$   t j| j| j| j| j| jdtddS )Nutf8mb4T)hostportuserpassworddatabasecharsetcursorclass
autocommit)pymysqlconnectDB_HOSTDB_PORTDB_USERDB_PASSWORDDB_NAMEr   )config r   reprocess_sarvam_for_date.pydb_connection   s   r   c                 C   sP   d| d}|   }||||f | W  d    S 1 s!w   Y  d S )Nz>
        SELECT callid, fileurl, call_starttime
        FROM `z_raw_calls`
        WHERE DATE(call_starttime) = %s
          AND fileurl IS NOT NULL
          AND fileurl != ''
          AND call_status = 'ANSWER'
        ORDER BY call_starttime DESC
        LIMIT %s
    cursorexecutefetchallconnbid	call_datelimitqueryr   r   r   r   	get_calls   s   

$r&   c           	      C   s   |j pg }|jpddd |D }tdd |D pd }|j|t  d}|  7}|	d| d|||t
j|d	d
||jd| dddt
j|d	d
f |	d| d|f W d    d S 1 sfw   Y  d S )Nz

c                 s   s<    | ]}| d r| dd d| d d  V  qdS )textspeakerSpeakerz:  N)getstrip.0segr   r   r   	<genexpr>1   s     
z"save_transcript.<locals>.<genexpr>c                 S   s    h | ]}| d p| dqS )
speaker_idr(   )r+   r-   r   r   r   	<setcomp>6   s     z"save_transcript.<locals>.<setcomp>)providerspeaker_segmentsprocessed_atz
            INSERT INTO `a  _sarvamresponse`
                (callid, transcript, raw_transcript, speaker_segments, num_speakers,
                 duration, request_id, language, stt_provider, language_detected,
                 raw_response, status, created_at, updated_at)
            VALUES
                (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, '1', NOW(), NOW())
            ON DUPLICATE KEY UPDATE
                transcript = VALUES(transcript),
                raw_transcript = VALUES(raw_transcript),
                speaker_segments = VALUES(speaker_segments),
                num_speakers = VALUES(num_speakers),
                duration = VALUES(duration),
                request_id = VALUES(request_id),
                language = VALUES(language),
                stt_provider = VALUES(stt_provider),
                language_detected = VALUES(language_detected),
                raw_response = VALUES(raw_response),
                status = VALUES(status),
                updated_at = NOW()
            F)ensure_asciisarvam_ensarvamz
            UPDATE `zu_raw_calls`
            SET transcription_status = 'completed', status = 1
            WHERE callid = %s
            )r4   
transcriptjoinlenr3   r   utcnow	isoformatr   r   jsondumpsduration)	r!   r"   callidresultsegmentsr:   num_speakerspayloadr   r   r   r   save_transcript/   sD   


$"rG   c                   @   s&   e Zd Zdd ZdddZdd ZdS )	ConfigWrapperc                 C   s
   || _ d S N)_config)selfr   r   r   r   __init__n   s   
zConfigWrapper.__init__Nc                 C   s   t | j||S rI   getattrrJ   )rK   keydefaultr   r   r   r+   q   s   zConfigWrapper.getc                 C   s   t | j|S rI   rM   )rK   rO   r   r   r   __getattr__t   s   zConfigWrapper.__getattr__rI   )__name__
__module____qualname__rL   r+   rQ   r   r   r   r   rH   m   s    
rH   c                 C   s"   | j |||j|jp
g |jd d S )Nr"   rB   r:   r4   actual_duration)analyze_callr:   r4   rA   )analyzerr"   rB   rC   r   r   r   rW   x   s   
rW   c                 C   sV   d| d| d}|   }||||f | W  d    S 1 s$w   Y  d S )NzU
        SELECT r.callid, s.transcript, s.speaker_segments, s.duration
        FROM `z_raw_calls` r
        JOIN `z_sarvamresponse` s ON r.callid = s.callid
        WHERE DATE(r.call_starttime) = %s
          AND s.stt_provider = 'sarvam'
        ORDER BY r.call_starttime DESC
        LIMIT %s
    r   r    r   r   r   get_saved_transcripts   s   
	$rY   c              	   C   s   | d}t|tr"| r"zt|}W n tjy!   g }Y nw | j|t|d | dp0d|p3g t| dp:dd d S )Nr4   rB   r:   r*   rA   r   rU   )	r+   
isinstancestrr,   r?   loadsJSONDecodeErrorrW   float)rX   r"   rowrD   r   r   r   analyze_saved_transcript   s   


r`   c                  C   s
  t  } | jddd | jddd | jdtdd | jdd	d
 |  }t  t }tdp5t	|dd}t
|}tt|}t|}z|jrt||j|j|j}tdt| d t|dD ] \}}	t|	d }
td| dt| d|
  t||j|	 qaW |  d S t||j|j|j}tdt| d|j d|j  t|dD ]O\}}t|d }
td| dt| d|
  ||d |
}t||j|
| td| dt| d|
  t||j|
| td| dt| d|
  qW |  d S |  w )Nz--bidT)requiredz--datez--limit
   )typerP   z--analysis-only
store_true)actionSARVAM_SUBSCRIPTION_KEYr*   zFound z! Sarvam transcripts for analytics   rB   [/z] Refreshing analytics for z calls for BID z on z] Sarvam transcribing fileurlz] Saved Sarvam transcript for z] Refreshed analytics for )argparseArgumentParseradd_argumentint
parse_argsr   r   osgetenvrN   r   r   rH   r   analysis_onlyrY   r"   dater$   printr<   	enumerater[   r`   closer&   
transcriberG   rW   )parserargsr   
sarvam_keysttrX   r!   rowsindexr_   rB   callscallrC   r   r   r   main   sD   " 	r   __main__)__doc__rk   r?   rp   r   r   dotenvr   pymysql.cursorsr   analyze_calls_with_parametersr   r   r   
stt.sarvamr   r   r&   rG   rH   rW   rY   r`   r   rR   r   r   r   r   <module>   s,   >
'
