
    {ix                         d Z ddlZddlZddlmZ ddlmZmZmZm	Z	  ej                  d      Z G d d      Zddee   d	efd
Zy)z{
Genesis V2 Knowledge Graph Adapter
===================================
Loads and queries the local JSONL knowledge graph.
    N)Path)OptionalListDictAnyzgenesis_v2.core.kg_adapterc            
       v    e Zd ZdZd Zddee   fdZdede	fdZ
dd	ed
e	deeeef      fdZdeeef   fdZy)	KGAdapterz/Simple Knowledge Graph adapter for JSONL files.c                      g | _         d| _        y )NF)entities_loaded)selfs    3/mnt/e/genesis-system/genesis_v2/core/kg_adapter.py__init__zKGAdapter.__init__   s    .0    Npathc                    t        t              j                  j                  j                  dz  }g | _        d}|r|dz  }|j	                         r|| j                  |      z  }|dz  }|j                         rt        |j                  d            D ]  }|| j                  |      z  } nt        |      }|j                         r4t        |j                  d            D ]  }|| j                  |      z  } n>|j	                         r|| j                  |      z  }nt        j                  d|        yd| _        t        j                  d	t        | j                         d
| d       y)zLoad entities from JSONL files.

        If path is None, loads from both the flat file and the entities/ directory.
        If path is a directory, loads all .jsonl files in it.
        If path is a file, loads just that file.
        KNOWLEDGE_GRAPHr   Nzentities.jsonlr   z*.jsonlzKG path not found: TzLoaded z entities from z files)r   __file__parentr   exists
_load_fileis_dirsortedglobloggerwarningr   infolen)r   r   kg_rootfiles_loaded	flat_fileentities_dir
jsonl_filetargets           r   loadzKGAdapter.load   sO    x.''..558II<"22I!	 ::"Z/L""$"():):9)E"F @J DOOJ$??L@ $ZF}}"(Y)?"@ @J DOOJ$??L@ 77!4TF;<gc$--01fUVr   filepathreturnc                 t   	 t        |dd      5 }|D ]D  }|j                         }|s	 | j                  j                  t	        j
                  |             F 	 ddd       y# t        j                  $ r Y fw xY w# 1 sw Y   yxY w# t        $ r%}t        j                  d| d|        Y d}~yd}~ww xY w)	zKLoad entities from a single JSONL file. Returns 1 on success, 0 on failure.rzutf-8)encodingN   zFailed to read z: r   )
openstripr   appendjsonloadsJSONDecodeErrorOSErrorr   r   )r   r&   flinees        r   r   zKGAdapter._load_file9   s    	hg6 %! %D::<D% MM00D1AB	%%   $33 %$%%  	NN_XJb<=	sW   B	 A=.A$A=B	 $A:7A=9A::A==BB	 B	 		B7B22B7querylimitc                    | j                   s| j                          |j                         }g }| j                  D ]L  }t	        j
                  |      j                         }||v s+|j                  |       t        |      |k\  sK |S  |S )z#Simple text search across entities.)r   r%   lowerr   r/   dumpsr.   r   )r   r6   r7   query_lowerresultsentitytexts          r   searchzKGAdapter.searchI   s{    ||IIKkkmmm 	F::f%++-Dd"v&w<5(	 r   c                    | j                   s| j                          i }| j                  D ]<  }|j                  d|j                  dd            }|j                  |d      dz   ||<   > t	        | j                        |dS )zGet KG statistics.categorytypeunknownr   r+   )r   
categories)r   r%   r   getr   )r   rD   r5   cats       r   	get_statszKGAdapter.get_statsX   st    ||IIK
 	9A%%
AEE&)$<=C(nnS!4q8JsO	9  .jIIr   N)
   )__name__
__module____qualname____doc__r   r   strr%   r   intr   r   r   r   r?   rG    r   r   r	   r	      sm    9!W# !WF4 C  C  T$sCx.5I J4S> Jr   r	   r   r'   c                 <    t               }|j                  |        |S )zCreate and load a KG adapter.)r	   r%   )r   adapters     r   create_adapterrS   c   s    kGLLNr   rH   )rM   r/   loggingpathlibr   typingr   r   r   r   	getLoggerr   r	   rN   rS   rP   r   r   <module>rX      sT       , ,			7	8QJ QJh# ) r   