
    撁i]                     n   d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	 dHde	e   fdZ
 e
        dZd	Zd
ZdZeez  ez  Z e ej"                  dd            Z e ej"                  dd            Z e ej"                  dd            Z e ej"                  dd            Z e ej"                  dd            Z e ej"                  dd            Z eeedz  z  ez        Z edez  ez        Z ej"                  dd      Zej8                  j;                  ed      Z ej"                  dd      Z ej"                  dd       Z  ej"                  d!d"      jC                         d#v Z" ej"                  d$d%      Z# ej"                  d&d'      jC                         d#v Z$ ej"                  d(d)      jC                         Z% ej"                  d*d+      Z& e ej"                  d,d-            Z' e ej"                  d.d-            Z( ej"                  d/d'      jC                         d#v Z) e ej"                  d0d1            Z* ej"                  d2      Z+ ej"                  d3      Z, ej"                  d4      Z- ej"                  d5d6      Z. ej"                  d7d8      Z/ e ej"                  d9d'            Z0 e ej"                  d:d;            Z1 e ej"                  d<d=            Z2 ej"                  d>d?      jg                         Z4d@ Z5 e5       Z6e6dA   Z7e6dB   Z8e6dC   Z9e6dD   Z:e6dE   Z;dF Z<dG Z=y)Izi
RingAI Configuration Module

Centralized configuration loading and constants for all RingAI components.
    N)Path)	dataclassfield)Optionalenv_pathc                    | &t        t              j                  j                  dz  } | j                         rt	        |       5 }|D ]  }|j                         }|s|j                  d      r(|j                  d      \  }}}|j                         }|j                         j                  d      j                  d      }|s~|st        j                  j                  ||        	 ddd       yy# 1 sw Y   yxY w)z6Load environment variables from .env file if it existsNz.env#="')r   __file__parentexistsopenstrip
startswith	partitionosenviron
setdefault)r   flinekey_values         (/home/sas/my/fyp/ringai/ringai/config.pyload_env_filer      s    >((//&8(^ 	:q :zz| 4$(NN3$7MCE))+C!KKM//4::3?Eu

--c59:	: 	: 	: 	:s%   C5C5/AC5C5"C55C>i@  i>        VAD_FRAME_MS20END_SILENCE_MS900MIN_UTTERANCE_MS300MIN_RMS_THRESHOLD400NOISE_MULTIPLIERz4.0NOISE_EMA_ALPHAz0.05g     @@g?DATASET_ROOTdatasetcallsWHISPER_MODEL_NAMEsmallWHISPER_LANGUAGEenWHISPER_FP16false)1trueyesonWHISPER_INITIAL_PROMPTa  This is a customer support phone call. The caller is reporting a technical or service-related issue. Common topics include internet speed, Wi-Fi, software systems, customer portals, servers, connectivity problems, account issues, and service complaints. Use clear professional English.LLM_ENABLEDr3   LLM_MODEmockLLM_HTTP_URLz)http://127.0.0.1:9000/v1/chat/completionsLLM_TIMEOUT_SEC10LLM_HISTORY_MAXLLM_FALLBACK_TO_MOCKLLM_MAX_TOKENS150TWILIO_ACCOUNT_SIDTWILIO_AUTH_TOKENTWILIO_PHONE_NUMBERWEBSOCKET_URLz1wss://ringai.southernaccountancy.com/media-streamSTREAM_REDIRECT_URLz-https://ringai.southernaccountancy.com/streamAI_SPEAK_COOLDOWN_SECMAX_CLARIFICATION_COUNT4STALE_CALL_TIMEOUT_SEC30	LOG_LEVELINFOc                  j   t        j                  t        d       t        j                  d      j	                  t         j
                         t        j                  d      t        j                  d      t        j                  d      t        j                  d      t        j                  d      d	S )
z(Configure logging for all RingAI modulesz&[%(levelname)s] %(name)s | %(message)s)levelformatwhisperzivr.callz	ivr.audiozivr.sttzivr.llmzivr.ws)callaudiosttllmws)loggingbasicConfigrL   	getLoggersetLevelERROR     r   setup_loggingr^      s    7 i ))'--8 !!*-"";/  +  +) r]   rR   rS   rT   rU   rV   c                  2    t         rt        st        d      y)z(Validate that Twilio credentials are setzTwilio credentials not set. Please set TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN environment variables or create a .env file with these credentials.N)rB   rC   RuntimeErrorr\   r]   r   validate_twilio_credentialsra      s     %6R
 	
 &7r]   c                  :    t        j                  t        d       y)zCreate required directoriesT)exist_okN)r   makedirs
CALLS_ROOTr\   r]   r   ensure_directoriesrf      s    KK
T*r]   )N)>__doc__r   rW   pathlibr   dataclassesr   r   typingr   r   SAMPLE_RATE_INSAMPLE_RATE_OUTBYTES_PER_SAMPLEBUFFER_DURATION_SECBUFFER_SIZEintgetenvr    r"   r$   r&   floatr(   r)   FRAME_BYTES_8KMIN_PCM_BYTES_8Kr*   pathjoinre   r-   r/   lowerr1   r7   r8   r9   r;   r<   r>   r?   r@   rB   rC   rD   rE   rF   rG   rH   rJ   upperrL   r^   loggerslog_call	log_audiolog_sttlog_llmlog_wsra   rf   r\   r]   r   <module>r      sw   
   ( :HTN :"    //2EE 9299^T23YRYY/78yryy!3U;< 			"5u=> #5u=> 			"3V<=^|f'<=@PPQs^+.>>?  ryy3WW\\,0
 RYY3W= 299/6 ryy1779=WW">  biis+1137QQ299Z(..0ryy)TU			"3T:;ibii 1489 ryy!7=CCEIcc YRYY/78 RYY34 BII12 bii 56 		/+^_bii 57fg  ibii(?EF ibii(A3GH YRYY'?FG  BIIk6*002	( /6?G	
%.
%.	
+r]   