
    i]                       d Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
mZmZ e G d d             Ze G d d             Ze G d	 d
             Ze G d de             Ze G d de             Ze G d de             Ze G d de             Zy)u   
Genesis Nervous System — Interface Contracts
=============================================
All retrievers, orchestrators, injectors, and scorers implement these protocols.
PRD: _bmad-output/RLM_NERVOUS_SYSTEM_PRD.md (Story 2.1)
    )annotations)	dataclassfield)AnyDictListOptionalProtocolruntime_checkablec                  Z    e Zd ZU dZded<   ded<   ded<   dZded	<    ee
      Zded<   y)RetrievedChunkz6A single piece of knowledge retrieved from any source.strcontentsourcefloatrelevance_scorer   intfreshness_daysdefault_factoryzDict[str, Any]metadataN)	__name__
__module____qualname____doc____annotations__r   r   dictr        6/mnt/e/genesis-system/core/nervous_system/contracts.pyr   r      s.    @LKNC$T:Hn:r   r   c                  d    e Zd ZU dZded<   dZded<    ed       Zd	ed
<   dZded<   dZ	ded<   y)RetrievalRequestz+Parameters for a knowledge retrieval query.r   query
   r   top_kc                 
    g dS )N)qdrantpgkgr   r   r   r    <lambda>zRetrievalRequest.<lambda>   s    7M r   r   	List[str]sourcesg333333?r   min_relevanceNzOptional[int]max_age_days)
r   r   r   r   r   r%   r   r,   r-   r.   r   r   r    r"   r"      s7    5JE3O/MNGYNM5"&L-&r   r"   c                  ^    e Zd ZU dZded<   ded<   ded<    ee      Zded	<   edd
       Z	y)RetrievalResultz2Aggregated result from the retriever orchestrator.List[RetrievedChunk]chunksr   
latency_msr+   sources_queriedr   sources_failedc                ,    t        | j                        S )N)lenr2   selfs    r    total_chunkszRetrievalResult.total_chunks,   s    4;;r   N)returnr   )
r   r   r   r   r   r   listr5   propertyr:   r   r   r    r0   r0   $   s8    <   %d ;NI;   r   r0   c                  2    e Zd ZdZddZddZedd       Zy)	
IRetrieverz:A single knowledge retriever (Qdrant, PG, KG files, etc.).c                     y)z9Retrieve relevant knowledge chunks for the given request.Nr   r9   requests     r    retrievezIRetriever.retrieve7       r   c                     y)z;Return True if this retriever's backing store is reachable.Nr   r8   s    r    health_checkzIRetriever.health_check;   rD   r   c                     y)z=Unique name for this source (e.g. 'qdrant:genesis_memories').Nr   r8   s    r    source_namezIRetriever.source_name?   s     	r   N)rB   r"   r;   r1   )r;   bool)r;   r   )r   r   r   r   rC   rF   r=   rH   r   r   r    r?   r?   3   s#    D  r   r?   c                  (    e Zd ZdZddZddZddZy)	IRetrieverOrchestratorz7Fan-out query to multiple retrievers and merge results.c                     y)z0Execute retrieval across all registered sources.Nr   rA   s     r    r#   zIRetrieverOrchestrator.queryI   rD   r   c                     y)zRegister a retriever backend.Nr   )r9   	retrievers     r    register_retrieverz)IRetrieverOrchestrator.register_retrieverM   rD   r   c                     y)z2Return health status of all registered retrievers.Nr   r8   s    r    healthzIRetrieverOrchestrator.healthQ   rD   r   N)rB   r"   r;   r0   )rN   r?   r;   None)r;   zDict[str, bool])r   r   r   r   r#   rO   rQ   r   r   r    rK   rK   E   s    Ar   rK   c                      e Zd ZdZddZy)IKnowledgeInjectorz:Injects retrieved knowledge into an agent's system prompt.c                     y)z:Return an enriched prompt with knowledge context injected.Nr   )r9   base_promptresults      r    injectzIKnowledgeInjector.injectZ   rD   r   N)rV   r   rW   r0   r;   r   )r   r   r   r   rX   r   r   r    rT   rT   V   s
    Dr   rT   c                      e Zd ZdZddZy)IFreshnessScorerz7Scores knowledge chunks by freshness (age-based decay).c                     y)z2Return freshness score 0.0 (stale) to 1.0 (fresh).Nr   )r9   chunks     r    scorezIFreshnessScorer.scorec   rD   r   N)r\   r   r;   r   )r   r   r   r   r]   r   r   r    rZ   rZ   _   s
    Ar   rZ   N)r   
__future__r   dataclassesr   r   typingr   r   r   r	   r
   r   r   r"   r0   r?   rK   rT   rZ   r   r   r    <module>ra      s    # ( I I
 ; ; ; ' ' ' 	  	  	    " X       x  r   