Ë
    I»j  ã                  óp   — d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZmZmZ  G d„ d«      Zy)	uO   Voice transcription â€” OpenAI Whisper when key exists, else local placeholder.é    )ÚannotationsN)Úget_settings)Ú	JobStatus)ÚTranscriptionProviderÚTranscriptionRequestÚTranscriptionResponseÚTranscriptSegmentc                  ó   — e Zd Zdd„Zy)ÚTranscriptionServicec              ƒ  ó4  K  — t        «       }|j                  }|t        j                  k(  rt        j                  }d }|j
                  r 	 t        j                  |j
                  «      }|t        j                  k(  �r$|j                  j                  «       �r	|s|j                  �rú	 t        j                  d¬«      4 ƒd {  –—† }|sK|j                  r?|j                  |j                  «      ƒ d {  –—† }|j                  «        |j                   }|€J ‚ddt#        j$                  |«      dfi}|j&                  |j(                  ddœ}|j+                  dd	d
|j                  › �i||¬«      ƒ d {  –—† }	|	j                  «        |	j-                  «       }
|
j                  d«      }|
j                  d«      xs g d d D �cg c]ƒ  }t/        t1        t3        |j                  dd«      «      dz  «      t1        t3        |j                  dd«      «      dz  «      d t5        |j                  dd«      «      j                  «       d ¬«      ‘Œ… }}t7        |j8                  |j:                  t        j                  t<        j>                  dd||¬«      cd d d «      ƒd {  –—†  S t7        |j8                  |j:                  |j                  t        j                  k(  rt        j                  n|t<        j>                  dddg ¬«      S # t        $ r d }Y �Œ¨w xY w7 �ŒS7 �Œ%7 �Œ¨c c}w 7 Œ‡# 1 ƒd {  –—†7  sw Y   nxY wŒš# t        $ rP}t7        |j8                  |j:                  t        j                  t<        j@                  dd|› �d g ¬«      cY d }~S d }~ww xY w­w)Ng      ^@)ÚtimeoutÚfilez	audio.wavz	audio/wavÚverbose_json)ÚmodelÚlanguageÚresponse_formatz.https://api.openai.com/v1/audio/transcriptionsÚAuthorizationzBearer )ÚheadersÚfilesÚdataÚtextÚsegmentséÈ   Ústartr   iè  ÚendÚ )Ústart_msÚend_msÚspeakerr   Ú
confidenceFzTranscribed via OpenAI Whisper)Úcorrelation_idÚinterview_idÚproviderÚstatusÚstubÚmessager   r   TzWhisper failed: uV   Local transcription placeholder â€” set OPENAI_API_KEY for live Whisper speech-to-textu.   [transcription pending â€” add OPENAI_API_KEY])!r   r#   r   ÚSTUBÚWHISPERÚaudio_base64Úbase64Ú	b64decodeÚ	ExceptionÚopenai_api_keyÚstripÚ
source_urlÚhttpxÚAsyncClientÚgetÚraise_for_statusÚcontentÚioÚBytesIOÚwhisper_modelr   ÚpostÚjsonr	   ÚintÚfloatÚstrr   r!   r"   r   Ú	SUCCEEDEDÚFAILED)ÚselfÚpayloadÚsettingsr#   Úaudio_bytesÚclientÚdlr   r   ÚresÚbodyr   Úsegr   Úexcs                  ú4/var/www/html/TJ-AI/tj/app/services/transcription.pyÚ
transcribezTranscriptionService.transcribe   sU  è ø€ Ü“>ˆØ×#Ñ#ˆØÔ,×1Ñ1Ò1Ü,×4Ñ4ˆHà$(ˆØ×Òð#Ü$×.Ñ.¨w×/CÑ/CÓD�ð Ô-×5Ñ5Ó5Ø×'Ñ'×-Ñ-Õ/Ù × 2Ó 2ð7Ü ×,Ñ,°U×;Õ;¸vÙ&¨7×+=Ò+=Ø#)§:¡:¨g×.@Ñ.@Ó#A×A˜Ø×+Ñ+Ô-Ø&(§j¡j˜à&Ð2Ð2Ð2à ¬b¯j©j¸Ó.EÀ{Ð Sð�Eð "*×!7Ñ!7Ø$+×$4Ñ$4Ø+9ñ�Dð
 !'§¡ØHØ!0°G¸H×<SÑ<SÐ;TÐ2UÐ VØ#Ø!ð	 !,ó !÷ �Cð ×(Ñ(Ô*ØŸ8™8›:�DØŸ8™8 FÓ+�Dð %)§H¡H¨ZÓ$8Ò$>¸BÀÀÑ#Eó	 ñ $F˜Cô *Ü%(¬¨s¯w©w°wÀÓ/BÓ)CÀdÑ)JÓ%KÜ#&¤u¨S¯W©W°U¸AÓ->Ó'?À$Ñ'FÓ#GØ$(Ü!$ S§W¡W¨V°RÓ%8Ó!9×!?Ñ!?Ó!AØ'+öð $Fð ð 	 ô 1Ø'.×'=Ñ'=Ø%,×%9Ñ%9Ü!6×!>Ñ!>Ü(×2Ñ2Ø"Ø @Ø!Ø!)ô	÷E <×;Ñ;ôr %Ø"×1Ñ1Ø ×-Ñ-à×ÑÔ#8×#=Ñ#=Ò=ô +×/Ò/àÜ×&Ñ&Øð2ð BØô
ð 	
øôG ò #Ø"“ð#úð <ùàAùðûò	 ð1 <ø×;×;Ñ;úÐ;øôX ò 
Ü,Ø#*×#9Ñ#9Ø!(×!5Ñ!5Ü2×:Ñ:Ü$×+Ñ+ØØ.¨s¨eÐ4ØØô	õ 	ûð
üsä   ‚ANÁL Á*>NÂ)L< ÃLÃL< Ã-L&Ã4LÃ5A?L&Å4LÅ5AL&ÇBLÉAL&ÊL< ÊL$ÊL< Ê!A#NÌLÌNÌLÌNÌL< ÌL&ÌL&ÌL&Ì$L< Ì&L8Ì,L/Ì-L8Ì4L< Ì;NÌ<	NÍANÎ
NÎNÎNÎNN)r@   r   Úreturnr   )Ú__name__Ú
__module__Ú__qualname__rJ   © ó    rI   r   r      s   „ ô[
rP   r   )Ú__doc__Ú
__future__r   r*   r5   r0   Ú
app.configr   Úapp.schemas.commonr   Úapp.schemas.transcriptionr   r   r   r	   r   rO   rP   rI   Ú<module>rV      s0   ðÙ Uå "ã Û 	ã å #Ý (÷ó ÷\
ò \
rP   