
    fi	                        d Z ddlZddlmZ ddlmZmZmZmZ ddl	m
Z
mZ ddlmZ ddlmZ ddlmZ  e         e         ed	d
d      Zej'                  e
       ej'                  e       d Zej+                  d      d        Zej+                  d      d        Zej1                  d      d        Zedk(  rddlZ ej8                  dddd       yy)zO
RingAI - AI-powered IVR System

Main entry point for the FastAPI application.
    N)FastAPI)validate_twilio_credentialsensure_directorieslog_callSTALE_CALL_TIMEOUT_SEC)routerwebsocket_router)call_state_manager)get_data_store)get_transcriberRingAIz'AI-powered IVR System for ERP/CRM Salesz1.1.0)titledescriptionversionc                    K   t               } 	 t        j                  d       d{    t        j                  t
              }|D ]  }t        j                  d|       t        j                  |      }|r5|j                         }|r| j                  ||       | j                  |       t        j                  |       t        j                  d|        7 w)z9Finalize calls that haven't reconnected in timeout period
   Nz$call=%s timeout detected, finalizingzcall=%s finalized via timeout)r   asynciosleepr
   cleanup_staler   r   infogetget_final_transcriptsave_final_transcriptmerge_call_audioremove)
data_storestale_callscall_idstate
final_texts        /home/sas/my/fyp/ringai/main.pycleanup_stale_callsr"   '   s     !J
mmB(667MN" 	DGMM@'J&**73E"779
44WjI ++G4%%g.MM97C	D s   $CCB3Cstartupc                     K   t        j                  d       t               } | j                          t	        j
                  t                      t        j                  d       yw)zInitialize on startupzPre-loading Whisper model...zRingAI server startedN)r   r   r   
load_modelr   create_taskr"   )transcribers    r!   startup_eventr(   A   sJ      MM01!#K +-.MM)*s   A#A%shutdownc                  6   K   t        j                  d       yw)zCleanup on shutdownzRingAI server shutting downN)r   r        r!   shutdown_eventr-   O   s      MM/0s   z/healthc                  .   K   dt        t              dS w)zHealth check endpointhealthy)statusactive_calls)lenr
   r+   r,   r!   health_checkr3   V   s      ./ s   __main__zmain:appz0.0.0.0i@  F)hostportreload)__doc__r   fastapir   ringai.configr   r   r   r   
ringai.apir   r	   ringai.dialoguer
   ringai.storager   
ringai.sttr   appinclude_routerr"   on_eventr(   r-   r   r3   __name__uvicornrunr+   r,   r!   <module>rE      s       0 . ) &     
9   6    # $D4 i
+ 
+ j1 1   zGKK	 r,   