
    ԫiC*                        d Z ddlZddlmZ e G d d             Ze G d d             Ze G d d	             Ze G d
 d             ZdefdZdefdZ	defdZ
defdZe G d d             Ze G d d             Ze G d d             ZdefdZdefdZdefdZd Zedk(  r ed        ed        ed e       j*                   d e       j,                           ed  e       j.                           ed! e       j*                   d e       j,                           ed" e       j0                           e         ed#        e       Zej5                         D ]  \  ZZ ed$e d%e         yy)&a  
Genesis Elestio Infrastructure Configuration

Central configuration for all Elestio cloud services.
Import this module to get connection details for PostgreSQL, Qdrant, and Redis.

Usage:
    from elestio_config import PostgresConfig, QdrantConfig, RedisConfig

    # PostgreSQL
    conn = psycopg2.connect(PostgresConfig.connection_string)

    # Qdrant
    client = QdrantClient(url=QdrantConfig.url, api_key=QdrantConfig.api_key)

    # Redis
    r = redis.from_url(RedisConfig.connection_string)
    N)	dataclassc                       e Zd ZU 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
<   edefd       Zedefd       Zy)PostgresConfigz+PostgreSQL (Episodic Memory) configuration.z(postgresql-genesis-u50607.vm.elestio.apphostiXc  portpostgresuserzCiBjh6LM7Yuqkq-jo2r7eQDwpassworddatabasereturnc           
          d| j                    d| j                   d| j                   d| j                   d| j                   
S )Nzpostgresql://:@/)r	   r
   r   r   r   selfs    ;/mnt/e/genesis-system/data/genesis-memory/elestio_config.pyconnection_stringz PostgresConfig.connection_string!   s@    tyyk4==/499+QtyykQRSWS`S`Rabb    c                      |        }|j                   |j                  |j                  |j                  |j                  dS )z'Get connection parameters for psycopg2.r   r   r	   r
   r   r   clsconfigs     r   get_connection_paramsz$PostgresConfig.get_connection_params%   s8     KKKKKK
 	
r   N)__name__
__module____qualname____doc__r   str__annotations__r   intr	   r
   r   propertyr   classmethoddictr    r   r   r   r      sn    5:D#:D#D#.Hc.Hcc3 c c 	
d 	
 	
r   r   c                       e Zd ZU 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<   edefd       Zedefd       Zy)QdrantConfigz%Qdrant (Vector Memory) configuration.z"qdrant-b3knu-u50607.vm.elestio.appr   i  r   @7b74e6621bd0e6650789f6662bca4cbf4143d3d1d710a0002b3b563973ca6876api_keygenesis_vectorscollection_namei   vector_sizeCosinedistancer   c                 :    d| j                    d| j                   S Nhttps://r   r   r   r   s    r   urlzQdrantConfig.url<       $))Adii[11r   c                 B     |        }|j                   |j                  dS )z Get parameters for QdrantClient.r4   r*   r7   r   s     r   get_client_paramszQdrantConfig.get_client_params@   s#     ::~~
 	
r   N)r   r   r   r   r   r    r!   r   r"   r*   r,   r-   r/   r#   r4   r$   r%   r8   r&   r   r   r(   r(   2   su    /4D#4D#UGSU,OS,KHc2S 2 2 
$ 
 
r   r(   c                       e Zd ZU dZdZeed<   dZeed<   dZ	eed<   dZ
eed	<   ed
efd       Zed
efd       Zed
efd       Zy)RedisConfigz%Redis (Working Memory) configuration.z#redis-genesis-u50607.vm.elestio.appr   ig  r   defaultr	   ze2ZyYYr4oWRdASI2CaLc-r
   r   c                 n    d| j                    d| j                   d| j                   d| j                   S )Nzredis://r   r   )r	   r
   r   r   r   s    r   r   zRedisConfig.connection_stringR   s1    $))Admm_Adii[$))MMr   c                 p     |        }|j                   |j                  |j                  |j                  ddS )z'Get connection parameters for redis-py.T)r   r   usernamer
   decode_responsesr   r   r	   r
   r   s     r   r   z!RedisConfig.get_connection_paramsV   s4     KKKK $
 	
r   c                 "    | j                         S )z9Alias for get_connection_params (backward compatibility).)r   r   s    r   r8   zRedisConfig.get_client_paramsb   s     ((**r   N)r   r   r   r   r   r    r!   r   r"   r	   r
   r#   r   r$   r%   r   r8   r&   r   r   r:   r:   J   s    /5D#5D#D#+Hc+N3 N N 	
d 	
 	
 +$ + +r   r:   c                   h    e Zd ZU dZdZeed<   dZeed<   dZ	eed<   e
defd	       Ze
defd
       Zy)	N8NConfigz+n8n (Workflow Orchestration) configuration.z!n8n-genesis-u50607.vm.elestio.appr   i  r   zeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxZTA3Y2UwYi1lZmZmLTRlODItOGRkZS02ODA3OGZiNjU4MDQiLCJpc3MiOiJuOG4iLCJhdWQiOiJwdWJsaWMtYXBpIiwiaWF0IjoxNzY2Nzc2MDAyfQ.viRWPPX8t6cTqXEtBEw7pj-0ar_Nvjrh0_8T1LGLi6or*   r   c                 "    d| j                    dS )Nr2   z/api/v1)r   r   s    r   api_urlzN8NConfig.api_urlo   s    $))G,,r   c                     d| j                   iS )NzX-N8N-API-KEYr*   r   s    r   headerszN8NConfig.headerss   s    ..r   N)r   r   r   r   r   r    r!   r   r"   r*   r#   rF   r%   rI   r&   r   r   rD   rD   h   s\    53D#3D#O eGS  e- - - / / /r   rD   r   c            
         t        t        j                  j                  dt         j                        t        t        j                  j                  dt         j                              t        j                  j                  dt         j                        t        j                  j                  dt         j                        t        j                  j                  dt         j                              S )z-Get PostgreSQL config with env var overrides.GENESIS_POSTGRES_HOSTGENESIS_POSTGRES_PORTGENESIS_POSTGRES_USERGENESIS_POSTGRES_PASSWORDGENESIS_POSTGRES_DATABASEr   )
r   osenvirongetr   r"   r   r	   r
   r   r&   r   r   get_postgres_configrS   y   s    ZZ^^3^5H5HI 79L9LMNZZ^^3^5H5HI ;^=T=TU ;^=T=TU r   c            	      8   t        t        j                  j                  dt         j                        t        t        j                  j                  dt         j                              t        j                  j                  dt         j                              S )z)Get Qdrant config with env var overrides.GENESIS_QDRANT_HOSTGENESIS_QDRANT_PORTGENESIS_QDRANT_API_KEY)r   r   r*   )r(   rP   rQ   rR   r   r"   r   r*   r&   r   r   get_qdrant_configrX      s_    ZZ^^1<3D3DE 5|7H7HIJ

79M9MN r   c            	         t        t        j                  j                  dt         j                        t        t        j                  j                  dt         j                              t        j                  j                  dt         j                        t        j                  j                  dt         j                              S )z(Get Redis config with env var overrides.GENESIS_REDIS_HOSTGENESIS_REDIS_PORTGENESIS_REDIS_USERGENESIS_REDIS_PASSWORDr@   )	r:   rP   rQ   rR   r   r"   r   r	   r
   r&   r   r   get_redis_configr^      sx    ZZ^^0+2B2BC 4k6F6FGHZZ^^0+2B2BC 8+:N:NO	 r   c                      t        t        j                  j                  dt         j                        t        j                  j                  dt         j
                              S )z&Get n8n config with env var overrides.GENESIS_N8N_HOSTGENESIS_N8N_API_KEY)r   r*   )rD   rP   rQ   rR   r   r*   r&   r   r   get_n8n_configrb      s?    ZZ^^.	?

4i6G6GH r   c                   J   e Zd ZU dZej
                  j                  dd      Zee	d<   dZ
ee	d<   ej
                  j                  dd      Zee	d	<    eej
                  j                  d
d            Zee	d<   edefd       Zedefd       Zedefd       Zedefd       Zy)BrowserlessConfigu%  
    Browserless (Cloud Browser Army) — LIVE on Elestio DO Sydney ✅
    Service: browserless-genesis (MICRO-1C-1G, running, created 1 day ago)
    Provider: Digital Ocean, Australia/Sydney — optimal for AU client QA.

    Provides cloud-hosted Chromium via WebSocket/REST (Playwright-compatible).
    Enables 10-50 parallel browser sessions without local resource consumption.
    Used by: scripts/browserless_qa_army.py, all browser automation agents.

    Get TOKEN from: Elestio dashboard → browserless-genesis → Env Vars → TOKEN
    BROWSERLESS_HOSTz)browserless-genesis-u50607.vm.elestio.appr   i  r   BROWSERLESS_TOKEN tokenBROWSERLESS_MAX_SESSIONS10max_concurrentr   c                 x    d| j                    d| j                   }| j                  r| d| j                   S |S )z9WebSocket URL for playwright.chromium.connect_over_cdp().zwss://r   ?token=)r   r   rh   )r   bases     r   ws_urlzBrowserlessConfig.ws_url   s>     		{!DII;//3zz$wtzzl+CtCr   c                 :    d| j                    d| j                   S )z8HTTP base URL for REST API (screenshots, PDF, scraping).r2   r   r3   r   s    r   http_urlzBrowserlessConfig.http_url   s     $))Adii[11r   c                 ^    | j                    d}| j                  r| d| j                   S |S )Nz	/pressurerm   )rq   rh   )r   r4   s     r   
health_urlzBrowserlessConfig.health_url   s2    y).2jj#gdjj\*AcAr   c                 $     |        j                   S )a  
        Use this with playwright.chromium.connect_over_cdp():

            from elestio_config import BrowserlessConfig
            config = BrowserlessConfig()
            browser = await p.chromium.connect_over_cdp(config.get_playwright_connect_url())
        )ro   rB   s    r   get_playwright_connect_urlz,BrowserlessConfig.get_playwright_connect_url   s     u||r   N)r   r   r   r   rP   rQ   rR   r   r    r!   r   r"   rh   rk   r#   ro   rq   rs   r$   ru   r&   r   r   rd   rd      s    
 

13^_D#_D# 3R8E38bjjnn-GNONCOD D D
 2# 2 2 BC B B 3  r   rd   c                      e Zd ZU dZej
                  j                  dd      Zee	d<    e
ej
                  j                  dd            Ze
e	d<   ej
                  j                  dd	      Zee	d
<   dZee	d<   edefd       Zy)FalkorDBConfigu  
    FalkorDB (Episodic Graph Memory) — TO BE PROVISIONED on Elestio.
    Purpose: AIVA's graph memory — who did what, when, why, how it connects.
    Provision: Elestio → New Service → FalkorDB → MEDIUM-2C-4G → Netcup US
    falkordb-py: pip install falkordb
    FALKORDB_HOSTz&falkordb-genesis-u50607.vm.elestio.appr   FALKORDB_PORT6379r   FALKORDB_PASSWORDrg   r
   genesis_episodic
graph_namer   c                 X     |        }|j                   |j                  |j                  dS )z
        Use with falkordb-py:
            import falkordb
            db = falkordb.FalkorDB(**FalkorDBConfig.get_client_params())
            graph = db.select_graph(FalkorDBConfig.graph_name)
        r   r   r
   r   r   s     r   r8   z FalkorDBConfig.get_client_params   s$     V[[fooVVr   N)r   r   r   r   rP   rQ   rR   r   r    r!   r"   r   r
   r}   r$   r%   r8   r&   r   r   rw   rw      s     

0XYD#YBJJNN?F;<D#<JJNN#6;Hc;(J(W$ W Wr   rw   c                      e Zd ZU dZej
                  j                  dd      Zee	d<    e
ej
                  j                  dd            Ze
e	d<   ej
                  j                  dd	      Zee	d
<   edefd       Zedefd       Zy)GraphitiConfigu#  
    Graphiti (Temporal Knowledge Graph) — TO BE PROVISIONED on Elestio.
    Built by Zep. Sits on FalkorDB. Time-aware edges: 'What changed since X?'
    Provision: Elestio → New Service → Custom Docker → zep-ai/graphiti → Netcup US
    Docs: https://help.getzep.com/graphiti
    GRAPHITI_HOSTz&graphiti-genesis-u50607.vm.elestio.appr   GRAPHITI_PORT8000r   GRAPHITI_API_KEYrg   r*   r   c                 :    d| j                    d| j                   S r1   r3   r   s    r   rF   zGraphitiConfig.api_url   r5   r   c                 @    | j                   rdd| j                    iS i S )NAuthorizationzBearer rH   r   s    r   rI   zGraphitiConfig.headers   s$    >Bll74<<.!9:RPRRr   N)r   r   r   r   rP   rQ   rR   r   r    r!   r"   r   r*   r#   rF   r%   rI   r&   r   r   r   r      s     

0XYD#YBJJNN?F;<D#<::>>"4b9GS92 2 2 S S Sr   r   c                      t               S )zEGet Browserless config. Set BROWSERLESS_TOKEN from Elestio dashboard.)rd   r&   r   r   get_browserless_configr      s    r   c                      t               S )z8Get FalkorDB config. Provision service first on Elestio.)rw   r&   r   r   get_falkordb_configr         r   c                      t               S )z.Get Graphiti config. Provision after FalkorDB.)r   r&   r   r   get_graphiti_configr     r   r   c                     i } 	 ddl }t               } |j                  di t        j	                         }|j                         }|j                  d       |j                          d| d<   	 ddl	}t               }|j                  |j                   dd|j                  id	
      }|j                  dk(  rd| d<   nd|j                   | d<   	 ddl}t!               } |j"                  di t$        j	                         }	|	j'                          d| d<   | S # t        $ r}d| | d<   Y d}~d}~ww xY w# t        $ r}d| | d<   Y d}~~d}~ww xY w# t        $ r}d| | d<   Y d}~| S d}~ww xY w)z%Test all Elestio service connections.r   NzSELECT 1u   ✅ Connected
postgresqlu   ❌ z/collectionszapi-key
   )rI   timeout   qdrantu   ❌ Status redisr&   )psycopg2rS   connectr   r   cursorexecuteclose	ExceptionrequestsrX   rR   r4   r*   status_coder   r^   Redisr:   ping)
resultsr   r   connr   er   respr   rs
             r   test_connectionsr     s   G	+$&xI."F"F"HIz"

 /
'"$||zzl,'/  

 s" /GH"-d.>.>-? @GH
&!#EKK>+;;=>	* N;  +"&qc
+   '"1#J'  &!!:N&sJ   A(D -A"D7 AE 	D4"D//D47	E EE	E1E,,E1__main__zGenesis Elestio Configurationz(========================================zPostgreSQL: r   zQdrant:     zRedis:      zn8n:        zTesting connections...z  z: )r   rP   dataclassesr   r   r(   r:   rD   rS   rX   r^   rb   rd   rw   r   r   r   r   r   r   printr   r   r4   rF   r   itemsservicestatusr&   r   r   <module>r      s  & 
 ! 
 
 
2 
 
 
. + + +: / / / ^ < + 	  + + +\ W W W0 S S S( 1 
^ 
^ *Z z	
)*	(O	L)../q1A1F1F0G
HI	L++,
-.	L++,Akm.@.@-A
BC	L,,-
./	G	
"# G"==? (7)2fX&'( r   