o
    lQi                     @  sx  U d Z ddlmZ ddlZddl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 jjd  d	Zd	Zd	Zd	Zd
ddddddddddddZded< ee Zg dZdZdZdZdZdZdZ d Z!d!Z"d"Z#e$e%d#d$Z&e%d%d&Z'e(e%d'd(Z)e(e%d)d*Z*d+Z+d,Z,d-Z-d.Z.e(e%d/d$Z/e%d0d10 d2kZ1d>d?d8d9Z2eG d:d; d;Z3d@d<d=Z4dS )Az
Central config: env vars, language mappings, provider configs, version constants.
All tunables live here so Docker ENV overrides work cleanly.
    )annotationsN)	dataclassfield)Path)Optional)load_dotenvz.envz1.0.0)Hindi
DevanagariADon't over-split words. Preserve Sandhi/combined forms as spoken.)Marathir	   r
   )Telugur   r
   )Tamilr   r
   )Kannadar   r
   )	Malayalamr   r
   )Gujaratir   r
   )PunjabiGurmukhir
   )Bengalir   r
   )Assameser   r
   )Odiar   r
   )EnglishLatinz+Standard English transcription rules apply.)himrtetaknmlgupabnasorenzdict[str, tuple[str, str, str]]LANGUAGE_MAP)
laughcoughsighbreathsingingnoisemusicapplausesnortcryg       @      .@      $@g      @)r0   r/   2      g?zgemini-3-flash-previewTEMPERATURE0THINKING_LEVELlowWORKER_BATCH_SIZE1000BATCH_INTERVAL_SECONDS60   g?      
MAX_VIDEOSENABLE_GPU_VALIDATIONfalsetrue keystrdefaultreturnc                 C  s   t | |S N)osgetenv)rC   rE    rJ   &/home/ubuntu/transcripts/src/config.py_envM   s   rL   c                   @  s   e Zd ZU dZdZded< dZded< dZded< dZded	< dZ	ded
< dZ
ded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< eedZded< dZded< dd Zed'dd Zed(d"d#Zd(d$d%Zd&S ))	EnvConfigzIResolved environment configuration. Reads env vars at instantiation time.rB   rD   r2_endpoint_url1-cleaned-data	r2_buckettranscribedr2_output_bucketr2_access_key_idr2_secret_access_keyr2_output_prefix
gemini_keysupabase_urlsupabase_admin_keydatabase_url	worker_idunknowngpu_typeFbool	mock_mode)default_factorylistgemini_keysr   intgemini_key_indexc                 C  s  | j ptd| _ | jdkr| jntdd| _| jdkr| jntdd| _| jp*td| _| jp2td| _| jp;tdd	| _| jpCtd
| _| jpKtd| _| j	pStd| _	| j
p[td| _
| jpltdtt dd | _| jdkrv| jntdd| _| jstdd dk| _| jsg }| jr|| j tdtdtdfD ]	}|r|| q|| _ttdd| _| jr| jt| jk r| j| j | _dS dS dS )z0Fill unfilled fields from environment variables.R2_ENDPOINT_URLrO   	R2_BUCKETrQ   R2_OUTPUT_BUCKETR2_ACCESS_KEY_IDR2_SECRET_ACCESS_KEYR2_OUTPUT_PREFIXrB   
GEMINI_KEYURLSUPABASE_ADMINDATABASE_URL	WORKER_IDN   r[   GPU_TYPE	MOCK_MODEr@   rA   GEMINI_PROJECT2GEMINI_PROJECT3GEMINI_PROJECT4GEMINI_KEY_INDEXr4   )rN   rL   rP   rR   rS   rT   rU   rV   rW   rX   rY   rZ   rD   uuiduuid4r\   r^   lowerra   appendrb   rc   len)selfpoolextrarJ   rJ   rK   __post_init__f   s6   "
zEnvConfig.__post_init__rF   c                 C  s,   | j rt| jt| j d }| j | S | jS )N   )ra   minrc   rz   rV   )r{   idxrJ   rJ   rK   primary_gemini_key   s   
zEnvConfig.primary_gemini_key	list[str]c                   s   | j   fdd| jD S )u6   All keys except the primary — used as 429 fallbacks.c                   s   g | ]}| kr|qS rJ   rJ   ).0kprimaryrJ   rK   
<listcomp>   s    z2EnvConfig.fallback_gemini_keys.<locals>.<listcomp>)r   ra   )r{   rJ   r   rK   fallback_gemini_keys   s   zEnvConfig.fallback_gemini_keysc                 C  s>   g }| j s| js|d | js|d | js|d |S )Nz At least one GEMINI_KEY requiredzURL (Supabase) is requiredzR2_ENDPOINT_URL is required)r^   ra   ry   rW   rN   )r{   errorsrJ   rJ   rK   validate   s   


zEnvConfig.validateN)rF   rD   )rF   r   )__name__
__module____qualname____doc__rN   __annotations__rP   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r\   r^   r   r`   ra   rc   r~   propertyr   r   r   rJ   rJ   rJ   rK   rM   Q   s.   
 rM   c                   C  s   t  S rG   )rM   rJ   rJ   rJ   rK   
get_config   s   r   )rB   )rC   rD   rE   rD   rF   rD   )rF   rM   )5r   
__future__r   rH   rv   dataclassesr   r   pathlibr   typingr   dotenvr   __file__resolveparentPROMPT_VERSIONSCHEMA_VERSIONTRIMMER_VERSIONVALIDATOR_VERSIONr$   r   r`   keysSUPPORTED_LANGUAGESAUDIO_EVENT_TAGSMIN_SEGMENT_DURATION_SMAX_SEGMENT_DURATION_SPREFERRED_MAX_DURATION_SSPLIT_SEARCH_START_SFORCE_CUT_RANGEBOUNDARY_CHECK_MSSILENCE_PAD_MSBOUNDARY_TRIM_MAX_PCTGEMINI_MODELfloatrI   r3   r5   rb   r7   r9   MAX_RETRIES_429FLOOD_THRESHOLD_PCTHEARTBEAT_INTERVAL_SMETRICS_UPDATE_INTERVAL_Sr>   rx   r?   rL   rM   r   rJ   rJ   rJ   rK   <module>   sf    L