
    Y^i2$                    h    d Z ddlmZ ddlZddlmZ d
ddZdddZdddZ G d d	      Z	 e	       Z
y)u  RLM Neo-Cortex -- Environment-Based Configuration.

Single source of truth for every environment variable consumed by the RLM
integration layer.  All Elestio endpoints, secrets, and feature flags are
resolved here, never inline.

Usage::

    from core.rlm.config import settings

    print(settings.database_url)
    print(settings.qdrant_url)
    print(settings.redis_url)

Design decisions:
- All values resolve from os.environ at *import time* for fast startup.
- No Pydantic Settings dependency — avoids adding a heavy dep just for config.
- Validated lazily: call ``settings.validate()`` during startup lifecycle.
- No hardcoded secrets.  If an env var is missing, the value is an empty
  string and ``validate()`` will report which ones are required.

Story: integration-layer-config
    )annotationsN)Listc                B    t         j                  j                  | |      S )z/Return os.environ[key] or *default* if not set.)osenvironget)keydefaults     (/mnt/e/genesis-system/core/rlm/config.py_envr      s    ::>>#w''    c                    t         j                  j                  | d      }|s|S |j                         j	                         dv S )zKReturn True if os.environ[key] is 'true', '1', or 'yes' (case-insensitive). )true1yes)r   r   r   striplowerr	   r
   raws      r   	_env_boolr   #   s9    
**..b
!C99;"666r   c                    t         j                  j                  | d      }	 t        |      S # t        t
        f$ r |cY S w xY w)z>Return os.environ[key] parsed as int, or *default* on failure.r   )r   r   r   int
ValueError	TypeErrorr   s      r   _env_intr   +   s=    
**..b
!C3x	" s   
- A Ac                      e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded	<   	 d
ed<   	 ded<   	 d
ed<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ddZg dZded<   ddZddZy)RLMSettingsu   Centralised configuration for the RLM integration layer.

    Attributes are resolved once at construction time from os.environ.
    The instance is a singleton — import ``settings`` from this module.
    strdatabase_url
qdrant_urlqdrant_api_keyqdrant_collection	redis_urlgoogle_api_key
ollama_urlr   embedding_dimrlm_hostrlm_portboolenable_api_docs	log_level
jwt_secretjwt_algorithmapi_key_headerz	List[str]cors_originsc           
        t        d      }|sOt        d      }t        dd      }t        dd      }t        d      }t        dd      }|r|rd	| d
| d| d
| d| 
}|| _        t        d      }t        dd      }|rt        dd| d
|       | _        nt        dd      | _        t        d      xs t        d      | _        t        dd      | _        t        d      }	|	sAt        d      }
t        dd      }t        dd      }t        d      }|
r|rd| d
| d|
 d
| d	}	|	xs d| _        t        d       xs t        d!      xs t        d"      | _        t        d#d$      | _        t        d%d&      | _	        t        d'd(      | _
        t        d)d*      | _        t        d+d,      | _        t        d-d.      j                         | _        t        d/d      | _        t        d0d1      | _        t        d2d3      | _        t        d4d5      }|j'                  d6      D cg c]#  }|j)                         s|j)                         % c}| _        y c c}w )7NDATABASE_URLGENESIS_POSTGRES_HOSTGENESIS_POSTGRES_PORT25432GENESIS_POSTGRES_USERpostgresGENESIS_POSTGRES_PASSWORDGENESIS_POSTGRES_DATABASEzpostgresql://:@/GENESIS_QDRANT_HOSTGENESIS_QDRANT_PORT6333
QDRANT_URLzhttps://r   QDRANT_API_KEYGENESIS_QDRANT_API_KEYQDRANT_COLLECTIONrlm_memories	REDIS_URLGENESIS_REDIS_HOSTGENESIS_REDIS_PORT26379GENESIS_REDIS_USERr
   GENESIS_REDIS_PASSWORDzredis://z/0GEMINI_API_KEYGEMINI_API_KEY_NEWGOOGLE_API_KEY
OLLAMA_URLzhttp://localhost:11434EMBEDDING_DIMi   RLM_HOSTz0.0.0.0RLM_PORTi  ENABLE_API_DOCSF	LOG_LEVELINFO
JWT_SECRETJWT_ALGORITHMHS256API_KEY_HEADERz	X-Api-KeyCORS_ORIGINSzhttps://sunaiva-talking-widget.netlify.app,https://api.sunaivadigital.com,http://localhost:3000,http://localhost:8080,http://localhost:8100,)r   r    r!   r"   r#   r$   r%   r&   r   r'   r(   r)   r   r+   upperr,   r-   r.   r/   splitr   r0   )selfpg_dsnhostportuserpwddbqdrant_hostqdrant_portr$   
redis_host
redis_port
redis_user	redis_pwdcors_rawos                   r   __init__zRLMSettings.__init__   sm   n%/0D/9D/<D34C3Z@B(auAdV1TF!B4H" 010&9";-q6DO
 #<4DO"#34V=U8V!%&9>!J %	23J2G<J2I>J67Iizl!I;a
|1ZLPRS  #b !" &()&$% 	
 #<1IJ&<  $J	:'
D9():EB#K8>>@ #<4"?G<"#3[A $
 19s0CQ1qwwyQWWYQQs   I3I)r    r!   r$   REQUIREDc                ~    | j                   D cg c]  }t        | |d      r| }}|rt        d| d      yc c}w )zRaise ValueError listing all missing required settings.

        Call this during application startup before initialising the gateway.
        r   zDRLM configuration is incomplete. Missing environment variables for: z. Set DATABASE_URL (or GENESIS_POSTGRES_*), QDRANT_URL (or GENESIS_QDRANT_*), and REDIS_URL (or GENESIS_REDIS_*) before starting the server.N)rm   getattrr   )r]   kmissings      r   validatezRLMSettings.validate   sW    
 #mmH74B3G1HH66=Y ?QR   Is   ::c           	         d| j                   rdnd d| j                  rdnd d| j                  rdnd d| j                   d	S )NzRLMSettings(pg=setMISSINGz	, qdrant=z, redis=z, port=))r    r!   r$   r)   )r]   s    r   __repr__zRLMSettings.__repr__   sX    ,,%)< =#eI> ?"nnU)< =MM?	
r   N)returnNone)rx   r   )	__name__
__module____qualname____doc____annotations__rl   rm   rr   rw    r   r   r   r   8   s      OD59 NB HOJ; MFM?BNA O:1O ERV FHiE
r   r   )r   )r	   r   r
   r   rx   r   )F)r	   r   r
   r*   rx   r*   )r   )r	   r   r
   r   rx   r   )r}   
__future__r   r   typingr   r   r   r   r   settingsr   r   r   <module>r      s:   . # 	 (
7}
 }
H =r   