o
    r–oje!  ã                   @   sb   d dl mZ d dlmZ d dlmZmZ eeƒ ¡ j	Z
e
j	ZG dd„ deƒZedefdd„ƒZd	S )
é    )Ú	lru_cache)ÚPath)ÚBaseSettingsÚSettingsConfigDictc                   @   sº  e Zd ZU eddddZdZeed< dZeed< d	Z	eed
< dZ
eed< dZeed< dZeed< dZeed< dZeed< d	Zeed< dZeed< dZeed< dZeed< dZeed< dZeed< d Zeed!< d"Zeed#< dZeed$< d%Zeed&< d'Zeed(< d'Zeed)< d'Zeed*< d'Zeed+< d	Zeed,< d	Z eed-< dZ!eed.< d/Z"eed0< d/Z#eed1< d2Z$eed3< d4Z%eed5< d6Z&eed7< d	Z'eed8< d9Z(eed:< d	Z)eed;< d<Z*eed=< d>Z+eed?< d@Z,eedA< dBZ-eedC< d@Z.eedD< dEZ/eedF< dZ0eedG< dHZ1eedI< dJZ2e3edK< d	Z4eedL< d	Z5eedM< dNZ6eedO< dPZ7eedQ< dRZ8eedS< dTZ9eedU< dVZ:e3edW< d	Z;eedX< d	Z<eedY< dZZ=eed[< dVZ>e3ed\< d	Z?eed]< d^Z@eed_< d`ZAeeda< dbZBe3edc< ddZCeede< dVZDe3edf< dgZEe3edh< dgZFe3edi< djZGe3edk< d	ZHeedl< dmZIeedn< doZJeedp< dqZKeedr< dsZLe3edt< dZMeedu< d	ZNeedv< d	ZOeedw< dxZPeedy< d	ZQeedz< d{ZRe3ed|< d}ZSeed~< dZTeed€< dZUeed‚< d	ZVeedƒ< d'ZWeed„< dZXeed…< d†ZYeed‡< dˆZZeed‰< d	Z[eedŠ< d‹Z\eedŒ< dZ]e3edŽ< dZ^e3ed< d‘Z_e3ed’< d“Z`e3ed”< d•ed–ead—B fd˜d™„Zbecd–efdšd›„ƒZdecd–efdœd„ƒZed–efeef fdždŸ„Zgecd–ehe fd d¡„ƒZiecd–efd¢d£„ƒZjd¤ed–efd¥d¦„Zkd—S )§ÚSettings)z.envz../.envúutf-8Úignore)Úenv_fileÚenv_file_encodingÚextrazhttp://127.0.0.1:8088Úari_base_urlÚadminÚari_userÚ Úari_passwordÚ	StasisAppÚ
stasis_appzPJSIP/{number}Úoutbound_endpoint_templateÚ
SuperAdminÚoutbound_contextÚ1100Úoutbound_extensionzIA Bot <1000>Úoutbound_caller_idÚagent_endpointzPJSIP/{extension}Úagent_endpoint_templateTÚwebrtc_enabledz0.0.0.0Úexternal_media_bind_hostz	127.0.0.1Úexternal_media_advertise_hostÚulawÚexternal_media_formatzstun:stun.l.google.com:19302Úwebrtc_stun_urlzhttp://localhost:5173Úcors_originsÚhosti@  ÚportFÚ
dev_reloadÚ	ari_debugÚari_debug_full_eventsÚari_debug_play_soundÚ
sip_ws_urlÚ
sip_domainÚbot_enabledÚgoogleÚstt_providerÚtts_providerÚopenaiÚllm_provideru/   Hola, Qualia seguros. Â¿En quÃ© puedo ayudarte?Úbot_greetingÚ	immediateÚbot_opening_modeÚbot_system_promptzprompts/bot_system_prompt.txtÚbot_system_prompt_fileÚbot_action_triggerszconfig/bot_action_triggers.jsonÚbot_action_triggers_filei„  Úbot_silence_msi  Úbot_min_speech_msià.  Úbot_max_utterance_msÚbot_vad_energyi^  Úbot_preroll_msÚbot_ambience_enabledzsonido_oficina.mp3Úbot_ambience_fileg
×£p=
Ç?Úbot_ambience_gainÚgoogle_credentialÚgoogle_project_idzes-ARÚgoogle_stt_languageÚdefaultÚgoogle_stt_modelzes-USÚgoogle_tts_languagezes-US-Neural2-AÚgoogle_tts_voiceg      ð?Úgoogle_tts_speaking_rateÚelevenlabs_api_keyÚelevenlabs_voice_idÚeleven_multilingual_v2Úelevenlabs_model_idÚelevenlabs_speedÚopenai_api_keyzhttps://api.openai.com/v1Úopenai_base_urlzgpt-4.1-miniÚopenai_modelgffffffæ?Úopenai_temperatureiè  Úopenai_max_tokensÚopenai_top_pg        Úopenai_frequency_penaltyÚopenai_presence_penaltyg      N@Úopenai_timeoutÚopenai_assistant_idzhttp://127.0.0.1:11434/v1Úollama_base_urlz
qwen2.5:7bÚollama_modelÚollamaÚollama_api_keyg      ^@Úollama_timeoutÚcrm_api_enabledÚcrm_api_base_idÚcrm_api_base_urlz#https://{base_id}.mockapi.io/api/v1Úcrm_api_base_templateÚcrm_api_keyg      .@Úcrm_api_timeoutÚclientesÚcrm_endpoint_clientesÚ	productosÚcrm_endpoint_productosÚpolizasÚcrm_endpoint_polizasÚcrm_endpoints_extraÚcall_metrics_enabledÚcall_metrics_mysql_hostiê  Úcall_metrics_mysql_portÚrootÚcall_metrics_mysql_userÚcall_metrics_mysql_passwordÚbot_call_metricsÚcall_metrics_mysql_databasegš™™™™™Ù?Ú#call_metrics_price_llm_input_per_1mgš™™™™™ù?Ú$call_metrics_price_llm_output_per_1mgú~j¼t“˜?Ú!call_metrics_price_stt_per_minutegü©ñÒMb?Ú#call_metrics_price_tts_per_1k_charsÚpath_strÚreturnNc                 C   sl   |pd  ¡ }|s
dS t|ƒ ¡ }| ¡ r| ¡ S t| t| t ¡ | f}|D ]}| ¡ r3| ¡   S q'dS )z3Resuelve ruta relativa a backend/, proyecto/ o cwd.r   N)Ústripr   Ú
expanduserÚis_fileÚresolveÚ_BACKEND_DIRÚ_PROJECT_DIRÚcwd)Úselfrt   ÚrawÚpathÚ
candidatesÚ	candidate© r‚   ú0/var/www/html/bot-asterisk-ari/backend/config.pyÚresolve_prompt_path’   s   
ýÿzSettings.resolve_prompt_pathc                 C   sR   | j pd ¡ }|r|S |  | j¡}|sdS z	|jdd ¡ W S  ty(   Y dS w )zEPrioridad: BOT_SYSTEM_PROMPT (.env) > archivo BOT_SYSTEM_PROMPT_FILE.r   r   )Úencoding)r3   rv   r„   r4   Ú	read_textÚOSError)r}   Úinliner   r‚   r‚   rƒ   Úresolved_bot_system_prompt¤   s   ÿz#Settings.resolved_bot_system_promptc                 C   s4   | j  ¡ r
| j  ¡ S ddlm} || jƒj}|pdS )Nr   ©Úurlparser   )r)   rv   Úurllib.parser‹   r   Úhostname)r}   r‹   r"   r‚   r‚   rƒ   Úresolved_sip_domain²   s
   

zSettings.resolved_sip_domainc                 C   s`   | j  ¡ }|s*| jr*ddlm} || jƒ}|jr*|jdkrdnd}|› d|j› d}|| jdœS )	Nr   rŠ   ÚhttpsÚwssÚwsz://z:8081/ws)Úws_urlÚdomain)r(   rv   r   rŒ   r‹   r   ÚschemerŽ   )r}   r’   r‹   Úparsedr”   r‚   r‚   rƒ   Úget_sip_config»   s   


þzSettings.get_sip_configc                 C   s   dd„ | j  d¡D ƒS )Nc                 S   s   g | ]
}|  ¡ r|  ¡ ‘qS r‚   )rv   )Ú.0Úor‚   r‚   rƒ   Ú
<listcomp>Ë   s    z-Settings.cors_origin_list.<locals>.<listcomp>ú,)r!   Úsplit)r}   r‚   r‚   rƒ   Úcors_origin_listÉ   s   zSettings.cors_origin_listc                 C   s2   | j  d¡}| d¡r| ddd¡S | ddd¡S )Nú/zhttps://zwss://é   zhttp://zws://)r   ÚrstripÚ
startswithÚreplace)r}   Úbaser‚   r‚   rƒ   Ú
ari_ws_urlÍ   s   
zSettings.ari_ws_urlÚnumberc                 C   s   | j j|dS )N)r¤   )r   Úformat)r}   r¤   r‚   r‚   rƒ   Úformat_endpointÔ   s   zSettings.format_endpoint)lÚ__name__Ú
__module__Ú__qualname__r   Úmodel_configr   ÚstrÚ__annotations__r   r   r   r   r   r   r   r   r   r   Úboolr   r   r   r    r!   r"   r#   Úintr$   r%   r&   r'   r(   r)   r*   r,   r-   r/   r0   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   Úfloatr?   r@   rA   rC   rD   rE   rF   rG   rH   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rY   rZ   r[   r\   r]   r^   r_   r`   rb   rd   rf   rg   rh   ri   rj   rl   rm   ro   rp   rq   rr   rs   r   r„   Úpropertyr‰   rŽ   Údictr–   Úlistrœ   r£   r¦   r‚   r‚   r‚   rƒ   r      sÒ   
 ý
ÿr   ru   c                   C   s   t ƒ S )N)r   r‚   r‚   r‚   rƒ   Úget_settingsØ   s   r³   N)Ú	functoolsr   Úpathlibr   Úpydantic_settingsr   r   Ú__file__ry   Úparentrz   r{   r   r³   r‚   r‚   r‚   rƒ   Ú<module>   s     N