o
    Blj:                     @   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                   @   s6  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[< d	Z>eed\< d]Z?eed^< d_Z@eed`< daZAe3edb< dcZBeedd< dVZCe3ede< dfZDe3edg< dfZEe3edh< diZFe3edj< d	ZGeedk< dlZHeedm< dnZIeedo< dpZJeedq< drZKe3eds< dZLeedt< d	ZMeedu< d	ZNeedv< dwZOeedx< d	ZPeedy< dzZQe3ed{< d|ZReed}< d~ZSeed< dZTeed< d	ZUeed< dedeVdB fddZWeXdefddZYeXdefddZZde[eef fddZ\eXde]e fddZ^eXdefddZ_dedefddZ`dS )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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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)selfrg   rawpath
candidates	candidate ru   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   ri   rw   r4   	read_textOSError)rp   inlinerr   ru   ru   rv   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)   ri   urllib.parser~   r   hostname)rp   r~   r"   ru   ru   rv   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(   ri   r   r   r~   r   schemer   )rp   r   r~   parsedr   ru   ru   rv   get_sip_config   s   


zSettings.get_sip_configc                 C   s   dd | j dD S )Nc                 S   s   g | ]
}|  r|  qS ru   )ri   ).0oru   ru   rv   
<listcomp>   s    z-Settings.cors_origin_list.<locals>.<listcomp>,)r!   split)rp   ru   ru   rv   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)rp   baseru   ru   rv   
ari_ws_url   s   
zSettings.ari_ws_urlnumberc                 C   s   | j j|dS )N)r   )r   format)rp   r   ru   ru   rv   format_endpoint   s   zSettings.format_endpoint)a__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   rX   rY   rZ   r[   r\   r]   r^   r_   ra   rc   re   rf   r   rw   propertyr|   r   dictr   listr   r   r   ru   ru   ru   rv   r      s   
 
r   rh   c                   C   s   t  S )N)r   ru   ru   ru   rv   get_settings   s   r   N)	functoolsr   pathlibr   pydantic_settingsr   r   __file__rl   parentrm   rn   r   r   ru   ru   ru   rv   <module>   s     >