
    i|2                        d Z ddlZddlZddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZ  ed      Zd dedefd	Z G d
 d      Z G d d      Z G d d      Z G d d      Zde	eef   fdZdefdZedk(  rddlZ eej4                        dkD  rej4                  d   Zedk(  r e        yedk(  r e       Z ej:                  erdnd       yedk(  rWej=                         r> ee      5 Z  ejB                  e       Z"ddd        e# ejH                  e"d             y e#d       y e#de         e#d       y e#d        e#d       yy# 1 sw Y   SxY w)!a  
Genesis Memory System Benchmarks
================================
Performance benchmarks for memory operations.

Measures:
- Atomic I/O latency
- PostgreSQL operations (via Elestio)
- Surprise detection latency
- MCP sync operations
- Circuit breaker overhead

Usage:
    python benchmark.py run      # Run all benchmarks
    python benchmark.py quick    # Quick sanity check
    python benchmark.py report   # Show last results
    N)Path)datetime)DictListAnyz/E:/genesis-system/data/benchmarks/baseline.jsonname
iterationsc                       fd}|S )z"Decorator to benchmark a function.c                       fd}|S )Nc                     g }t              D ]I  }t        j                         } | i | t        j                         |z
  }|j                  |dz         K t	        j
                  |      t	        j                  |      t        |      t        |      t        |      dkD  rt	        j                  |      ndt        |      t        t        |      dz           t        |      t        t        |      dz           d	S )N     r   gffffff?gGz?)	r   r	   mean_ms	median_msmin_msmax_msstdev_msp95_msp99_ms)rangetimeperf_counterappend
statisticsmeanmedianminmaxlenstdevsortedint)	argskwargstimes_startelapsedfuncr	   r   s	         core/benchmark.pywrapperz-benchmark.<locals>.decorator.<locals>.wrapper#   s    E:& -))+d%f%++-5Wt^,	- (%??51'..u5e*e*7:5zA~J,,U31 -CJ,=(>? -CJ,=(>?
 
     )r)   r+   r	   r   s   ` r*   	decoratorzbenchmark.<locals>.decorator"   s    	& r,   r-   )r   r	   r.   s   `` r*   	benchmarkr/       s    * r,   c                       e Zd ZdZd Z edd      d        Z edd      d	        Z ed
d      d        Z edd      d        Z	de
e   fdZy)AtomicIOBenchmarksz Benchmark atomic I/O operations.c                 6    t        j                         | _        y N)tempfilemkdtemptmpdirselfs    r*   __init__zAtomicIOBenchmarks.__init__=   s    &&(r,   atomic_write_smalld   r	   c                 V    ddl m} t        | j                        dz  } ||dd       y )Nr   atomic_writez	small.txtzHello, World!Fbackup	atomic_ior?   r   r6   )r8   r?   paths      r*   write_smallzAtomicIOBenchmarks.write_small@   s$    *DKK ;.T?59r,   atomic_write_medium2   c                 `    ddl m} t        | j                        dz  }ddz  } |||d       y )Nr   r>   z
medium.txtxi'  Fr@   rB   )r8   r?   rD   contents       r*   write_mediumzAtomicIOBenchmarks.write_mediumF   s-    *DKK </+T751r,   atomic_json_writec                     ddl m} t        | j                        dz  }dt	        t        d            d} |||d       y )	Nr   rL   	data.jsonvaluer;   )keylistFr@   )rC   rL   r   r6   rR   r   )r8   rL   rD   datas       r*   
json_writezAtomicIOBenchmarks.json_writeM   s7    /DKK ;.U3Z(89$U3r,   	safe_readc                 T    ddl m} t        | j                        dz  } ||d       y )Nr   )rU   rO    )default)rC   rU   r   r6   )r8   rU   rD   s      r*   rU   zAtomicIOBenchmarks.safe_readT   s"    'DKK ;.$#r,   returnc                    g }	 ddl m} t        | j                        dz  } ||ddid       |j	                  | j                                |j	                  | j                                |j	                  | j                                |j	                  | j                                |S # t        $ r}t        d|        Y d }~|S d }~ww xY w)	Nr   rN   rO   rQ   rP   Fr@   z[!] AtomicIO benchmark error: )rC   rL   r   r6   r   rE   rK   rT   rU   	Exceptionprint)r8   resultsrL   rD   es        r*   run_allzAtomicIOBenchmarks.run_allZ   s    	83${2DdUG$4UCNN4++-.NN4,,./NN4??,-NN4>>+,   	821#677	8s   B'B- -	C6C

CN)__name__
__module____qualname____doc__r9   r/   rE   rK   rT   rU   r   r   r_   r-   r,   r*   r1   r1   :   s    *) #4: 5:
 $42 52 "s34 44 {s+$ ,$
d r,   r1   c                       e Zd ZdZd Zd Z edd      d        Z edd      d	        Z ed
d      d        Z	de
e   fdZy)PostgresBenchmarksz!Benchmark PostgreSQL via Elestio.c                 $    | j                          y r3   )_setupr7   s    r*   r9   zPostgresBenchmarks.__init__n   s    r,   c                 Z   dd l }|j                  j                  d       ddlm} dd l}|j                         | _         |j                  di | j                  }|j                         }|j                  d       |j                          |j                          |j                          y )Nr   z)/mnt/e/genesis-system/data/genesis-memory)PostgresConfigz
            CREATE TABLE IF NOT EXISTS bm_memories (
                id TEXT PRIMARY KEY,
                content TEXT,
                score REAL
            )
        r-   )sysrD   r   elestio_configri   psycopg2get_connection_paramsconn_paramsconnectcursorexecutecommitclose)r8   rj   ri   rl   conncurs         r*   rg   zPostgresBenchmarks._setupq   s    CD1)??Ax3$"2"23kkm  	 			

r,   postgres_insertr;   r<   c                    dd l } |j                  di | j                  }|j                         }|j	                  ddt        j
                          ddf       |j                          |j                          |j                          y )Nr   z}INSERT INTO bm_memories VALUES (%s, %s, %s) ON CONFLICT (id) DO UPDATE SET content = EXCLUDED.content, score = EXCLUDED.scoremem_zTest contentg      ?r-   )rl   ro   rn   rp   rq   r   rr   rs   r8   rl   rt   ru   s       r*   insertzPostgresBenchmarks.insert   sq    x3$"2"23kkm LDIIK=!>37	
 			

r,   postgres_selectc                     dd l } |j                  di | j                  }|j                         }|j	                  d       |j                          |j                          |j                          y )Nr   z"SELECT * FROM bm_memories LIMIT 10r-   rl   ro   rn   rp   rq   fetchallrs   ry   s       r*   selectzPostgresBenchmarks.select   sS    x3$"2"23kkm89		

r,   postgres_ilike_searchrG   c                     dd l } |j                  di | j                  }|j                         }|j	                  dd       |j                          |j                          |j                          y )Nr   z0SELECT * FROM bm_memories WHERE content ILIKE %s)z%test%r-   r}   ry   s       r*   ilike_searchzPostgresBenchmarks.ilike_search   sZ    x3$"2"23kkm>	
 			

r,   rY   c                    g }	 |j                  | j                                |j                  | j                                |j                  | j                                |S # t        $ r}t        d|        Y d }~|S d }~ww xY w)Nz [!] PostgreSQL benchmark error: )r   rz   r   r   r[   r\   r8   r]   r^   s      r*   r_   zPostgresBenchmarks.run_all   sv    	:NN4;;=)NN4;;=)NN4,,./   	:4QC899	:s   AA# #	B,B  BN)r`   ra   rb   rc   r9   rg   r/   rz   r   r   r   r   r_   r-   r,   r*   re   re   k   ss    +&  S1
 2
  S1 2 &26
 7
d r,   re   c                   n    e Zd ZdZd Zd Z edd      d        Z edd      d	        Zd
e	e
   fdZy)SurpriseBenchmarkszBenchmark surprise detection.c                 D    t        j                         | _        d | _        y r3   )r4   r5   r6   detectorr7   s    r*   r9   zSurpriseBenchmarks.__init__   s    &&(r,   c                     	 ddl m}  || j                   d      | _        t	        d      D ]"  }| j                  j                  d| dd       $ y # t        $ r}t        d	|        d | _        Y d }~y d }~ww xY w)
Nr   EnhancedSurpriseDetectorz/vectors.json)memory_path
   zTest memory content number r/   testz[!] Surprise setup failed: )enhanced_surpriser   r6   r   r   add_to_memoryr[   r\   )r8   r   ir^   s       r*   rg   zSurpriseBenchmarks._setup   s    	!B4#{{m=9DM 2Y ++1!5  	!/s34 DMM	!s   AA 	A<A77A<surprise_evaluate   r<   c                 X    | j                   r| j                   j                  ddd       y y )Nz*This is a new piece of content to evaluater/   r   )r   evaluater7   s    r*   r   zSurpriseBenchmarks.evaluate   s)    ==MM""< r,   surprise_add_memoryc                     | j                   r3| j                   j                  dt        j                          dd       y y )NzNew memory at r/   r   )r   r   r   r7   s    r*   
add_memoryzSurpriseBenchmarks.add_memory   s6    ==MM'' . r,   rY   c                 $   | j                          g }| j                  rA	 |j                  | j                                |j                  | j	                                |S t        d       |S # t
        $ r}t        d|        Y d }~|S d }~ww xY w)Nz[!] Surprise benchmark error: z8[!] Surprise detector not available, skipping benchmarks)rg   r   r   r   r   r[   r\   r   s      r*   r_   zSurpriseBenchmarks.run_all   s    ==<t}}/t01
  LM	  <6qc:;; 	<s   >A- -	B6B

BN)r`   ra   rb   rc   r9   rg   r/   r   r   r   r   r_   r-   r,   r*   r   r      sW    '!" "r2 3 $4 5d r,   r   c                   b    e Zd ZdZ edd      d        Z edd      d        Zdee   fd	Z	y
)CircuitBreakerBenchmarksz#Benchmark circuit breaker overhead.circuit_breaker_checkr   r<   c                 <    ddl m}  |dd      }|j                  }y Nr   CircuitBreakerr      )failure_threshold)circuit_breakerr   is_available)r8   r   cbr&   s       r*   check_availablez(CircuitBreakerBenchmarks.check_available   s    2Fa8OOr,   circuit_breaker_record_successc                 D    ddl m}  |dd      }|j                          y r   )r   r   record_success)r8   r   r   s      r*   r   z'CircuitBreakerBenchmarks.record_success   s    2Fa8
r,   rY   c                     g }	 |j                  | j                                |j                  | j                                |S # t        $ r}t	        d|        Y d }~|S d }~ww xY w)Nz%[!] Circuit breaker benchmark error: )r   r   r   r[   r\   r   s      r*   r_   z CircuitBreakerBenchmarks.run_all   sg    	?NN4//12NN4..01   	?9!=>>	?s   >A 	A&A!!A&N)
r`   ra   rb   rc   r/   r   r   r   r   r_   r-   r,   r*   r   r      sL    -&48 9
 /DA B
d r,   r   rY   c            
      "   t        d       t        d       t        d       t        j                         j                         i d} t        d       t	               }|j                         | d   d<   | d   d   D ]"  }t        d|d    d	|d
   dd|d   dd       $ t        d       t               }|j                         | d   d<   | d   d   D ]"  }t        d|d    d	|d
   dd|d   dd       $ t        d       t               }|j                         | d   d<   | d   d   D ]"  }t        d|d    d	|d
   dd|d   dd       $ t        d       t               }|j                         | d   d<   | d   d   D ]"  }t        d|d    d	|d
   dd|d   dd       $ t        d       t        d       t        d       t        d | d   j                         D              }t        d|        	 t        j                  j                  dd       t        t        d      5 }t        j                   | |d       ddd       t        dt                | S # 1 sw Y   xY w# t"        $ r}t        d |        Y d}~| S d}~ww xY w)!z&Run all benchmarks and return results.z<============================================================ Genesis Memory System Benchmarks)	timestamp
benchmarksz
[1/4] Atomic I/O Benchmarks...r   rC     r   z: r   z.3fz	ms (p95: r   zms)z)
[2/4] PostgreSQL (Elestio) Benchmarks...
postgresqlz'
[3/4] Surprise Detection Benchmarks...surprisez$
[4/4] Circuit Breaker Benchmarks...r   z=
============================================================Summaryc              3   2   K   | ]  }t        |        y wr3   )r   ).0vs     r*   	<genexpr>z%run_all_benchmarks.<locals>.<genexpr>0  s     Ja3q6Js   zTotal benchmarks run: T)parentsexist_okw   indentNz
Results saved to: zFailed to save results: )r\   r   now	isoformatr1   r_   re   r   r   sumvaluesRESULTS_PATHparentmkdiropenjsondumpr[   )	r]   atomic_benchrpg_benchsurprise_benchcb_benchtotal_benchmarksfr^   s	            r*   run_all_benchmarksr     s   	(O	
,-	(O \\^--/G 

,-%'L)5)=)=)?GL+&\";/ Q1V9+R)S11X;s:K3OPQ 

67!#H*2*:*:*<GL,'\"<0 Q1V9+R)S11X;s:K3OPQ 

45')N(6(>(>(@GL*%\":. Q1V9+R)S11X;s:K3OPQ 

12')H/7/?/?/AGL+,\"#45 Q1V9+R)S11X;s:K3OPQ 
/	)	(OJ7<+@+G+G+IJJ	"#3"4
56.!!$!>,$ 	,IIgq+	,$\N34 N	, 	,  .(,--N.s0   :1I, +I I,  I)%I, ,	J5J		Jc                  $   t        d       g } 	 ddlm}m} | j	                  d       	 ddlm} | j	                  d	       	 ddlm	} | j	                  d       	 ddl
m} | j	                  d       	 ddlm} | j	                  d       	 ddlm} | j	                  d       	 ddlm}	 | j	                  d       t        d        | D ]  \  }
}|rd!nd"}t        d#| d$|
         t%        d% | D              }t'        |       }t        d&| d'| d(       ||k(  S # t
        $ r*}| j	                  d       t        d|        Y d}~d}~ww xY w# t
        $ r*}| j	                  d
       t        d|        Y d}~<d}~ww xY w# t
        $ r*}| j	                  d       t        d|        Y d}~Zd}~ww xY w# t
        $ r*}| j	                  d       t        d|        Y d}~xd}~ww xY w# t
        $ r*}| j	                  d       t        d|        Y d}~d}~ww xY w# t
        $ r*}| j	                  d       t        d|        Y d}~d}~ww xY w# t
        $ r*}| j	                  d       t        d|        Y d}~d}~ww xY w))z%Quick sanity check that modules load.zQuick module check...r   )r?   rU   )rC   T)rC   Fz  [!] atomic_io: Nr   )r   T)r   Fz  [!] circuit_breaker: )retry)retry_utilsT)r   Fz  [!] retry_utils: r   )r   T)r   Fz  [!] enhanced_surprise: )MCPSyncManager)reliable_mcp_syncT)r   Fz  [!] reliable_mcp_sync: )
get_logger)logging_configT)r   Fz  [!] logging_config: )GenesisMetrics)metricsT)r   Fz  [!] metrics: z	
Results:z[OK]z[FAIL]r    c              3   ,   K   | ]  \  }}|s	d   yw)r   Nr-   )r   r&   oks      r*   r   z"run_quick_check.<locals>.<genexpr>{  s     -uq""-s   

/z modules loaded successfully)r\   rC   r?   rU   r   r[   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )checksr?   rU   r^   r   r   r   r   r   r   r   r   statuspassedtotals                  r*   run_quick_checkr   ?  ss   	
!"F'5)*
-2/0
)%+,
/>12
/412
,-./
%*'(
 
, $b86(!D6"#$ ---FKE	Bvhaw:
;<U?o  '*+!!%&&'  -01's+,,-  ),-#A3'(()  /23)!-../  /23)!-../  ,/0&qc*++,  %()s#$$%s   D E F F: 1G0 	H& !I 	E!EE	FE<<F	F7F22F7:	G-G((G-0	H#9HH#&	I/II	J%J

J__main__r   runquickreportr   r   z8No benchmark results found. Run: python benchmark.py runzUnknown command: z-Usage: python benchmark.py [run|quick|report]r   )r;   )%rc   r   r   r4   r   pathlibr   r   typingr   r   r   r   strr"   r/   r1   re   r   r   r   boolr   r`   rj   r   argvcmdsuccessexitexistsr   r   loadr]   r\   dumpsr-   r,   r*   <module>r      s|  $       " " EFC S 4. .bE EP5 5p 28DcN 8v@ @F z
388}qhhqk%< G^%'GCHH'Qq)H_""$,' +1'diilG+jdjj34PQ%cU+,AB01=>/ + +s   -EE