o
    kj                     @   sp   d dl Z d dlmZmZ dededefddZdefdd	Zdeeef fd
dZdeeef ddfddZ	dS )    N)AnyMutableMappingkeydefaultreturnc                 C   s2   t | }|du r|S t| }|dkrdS |S )u   
    Read optional string from env.

    - Variable **unset** → return `default` (often "" to defer bot AI to DB/Redis).
    - Variable set to **blank** → return "" (explicit defer; never substitute `default`).
    N )osgetenvstrstrip)r   r   vs r   Y/var/www/html/livekitdocker/backend/agent_runtime/src/mcube_integration/mcube_defaults.py_env_str   s   
r   c                   C   s   t ddddS )NMCUBE_SYSTEM_PROMPTr   z\n
)r   replacer   r   r   r   get_default_system_prompt   s   r   c                   C   s~   t  tdd tddtddtddtddtddtddtd	dtd
dtddtddtddtddtdddS )u  
    Base MCube call config from env. Bot-facing AI fields default to empty so outbound
    (`cluster_bot_cfg` from Django) and Redis `mcube_call_config:*` supply values from
    `livekitvoicebot_cluster`.`{business_id}_bots` / `business_id_bots`.

    Only set MCUBE_* in .env for local smoke tests or when not using business_id+bot_id.
    Technical tuning (chunk ms, gain, …): `tts_gain` scales PCM before μ-law for MCube/PSTN
    (1.0 ≈ unity; values below ~0.8 often sound too quiet on phone lines).
    MCUBE_FIRST_MESSAGEr   MCUBE_LLM_MODELMCUBE_LLM_PROVIDERMCUBE_STT_PROVIDERMCUBE_STT_LANGUAGE_CODEMCUBE_STT_MODEL_IDMCUBE_TTS_PROVIDERMCUBE_TTS_MODELMCUBE_TTS_VOICE_IDMCUBE_TTS_ENCODING	pcm_16000MCUBE_TTS_CHUNK_MS200MCUBE_TTS_GAINz1.05MCUBE_PLAYBACK_PACE_FACTORz1.0MCUBE_CHECKPOINT_EVERY10)system_promptfirst_message	llm_modelllm_providerstt_providerstt_language_codestt_model_idtts_provider	tts_modeltts_voice_idtts_encodingtts_chunk_mstts_gainplayback_pace_factorcheckpoint_every)r   r   r   r   r   r   r   get_default_mcube_call_config   s    r5   cfgc                 C   s\   t dd  dvrdS t }dD ]}||}|du rqt| }|r+|| |< qdS )z
    When ``MCUBE_VOICE_SETTINGS_FROM_ENV`` is truthy, overwrite STT/TTS tuning keys in ``cfg``
    with values from ``get_default_mcube_call_config()`` so Redis / cluster bot cannot override
    the voice stack for this process.
    MCUBE_VOICE_SETTINGS_FROM_ENVr   )1trueyesN)	r*   r+   r,   r-   r.   r/   r0   r1   r2   )r   r	   r   lowerr5   getr
   )r6   dkr   r   r   r   r   apply_voice_defaults_to_dict7   s   
r?   )
r   typingr   r   r
   r   r   dictr5   r?   r   r   r   r   <module>   s    