
    i                         d Z ddlZddlZddlZddlmZmZ ddlmZm	Z	  e
 ej                  dd            Ze G d d             Z G d	 d
      Zy)u   
Genesis Persistent Context Architecture — Voyager Defense
Story 3.02 — Track B

Scar-pattern scorer that compares swarm output against known failure
patterns in Qdrant L3 (genesis_scars collection). Fail-open on Qdrant unavailability.
    N)	dataclassfield)ListOptionalVOYAGER_BLOCK_THRESHOLDz0.7c                   L    e Zd ZU dZeed<    ee      Ze	e
   ed<   dZeed<   y)VoyagerScorez/Result of Voyager Defense scar-pattern scoring.score)default_factorymatched_scarsFshould_blockN)__name__
__module____qualname____doc__float__annotations__r   listr   r   strr   bool     2/mnt/e/genesis-system/core/mvfl/voyager_defense.pyr	   r	      s'    9L$T:M49:L$r   r	   c                   N    e Zd ZdZddefdZdedefdZdedefdZ	d	ede
fd
Zy)VoyagerDefenseu   
    Pre-release quality gate using scar-pattern matching.

    Compares output embeddings against known failure patterns in Qdrant.
    Fails OPEN (not closed) — if Qdrant is unavailable, outputs pass through.
    Ncollection_namec                      || _         || _        y )N)_client_collection)selfqdrant_clientr   s      r   __init__zVoyagerDefense.__init__!   s    $*r   outputreturnc                    | j                   t        dg d      S 	 | j                  |      }| j                  |      }| j                   j	                  | j
                  |d      }|st        dg d      S |D cg c]  }|j                   }}|rt        |      nd}|D cg c]  }t        |j                         }}t        t        |d      ||t        k\        S c c}w c c}w # t        $ r t        dg d      cY S w xY w)z
        Score an output against known failure patterns.

        Args:
            output: The swarm output dict to evaluate

        Returns:
            VoyagerScore with risk score, matched scar IDs, and block recommendation
        g        F)r
   r   r      )r   query_vectorlimit   )r   r	   _output_to_text_simple_embedsearchr   r
   maxr   idroundBLOCK_THRESHOLD	Exception)	r    r#   output_text	embeddingresultsrscores	max_scorematched_idss	            r   r
   zVoyagerDefense.score%   s    <<c%PP	Q..v6K**;7I ll)) $ 0 0& * G ##ReTT (//!agg/F/'-F3I.563qtt96K6Iq))&/9 	 06  	Qc%PP	Qs6   AC) 6C) :CC) "C$> C) 
C) )DDc                     g }dD ],  }|j                  |      }|s|j                  | d|        . |rdj                  |      S t        j                  |      dd S )z'Convert output dict to searchable text.)statusresulterror
error_type	task_type= Ni  )getappendjoinjsondumps)r    r#   partskeyvals        r   r*   zVoyagerDefense._output_to_textQ   sc    K 	-C**S/CuAcU^,	- #(sxxETZZ-?-EEr   textc                     t        j                  |j                               j                         }g }t	        d      D ]6  }|dz  }t        ||dz  |dz   dz   d      dz  }|j                  |dz
         8 |S )z
        Generate a simple deterministic embedding for testing.
        In production, this would use nomic-embed-text or similar.
        Returns a 768-dim vector based on text hash (for deterministic testing).
        i                g     o@g      ?)hashlibsha256encode	hexdigestrangeintrB   )r    rI   hvectoribyte_idxrH   s          r   r+   zVoyagerDefense._simple_embedZ   s~     NN4;;=)335s 	%A2vHa1hla%78"=ECMM#)$	% r   )N
aiva_scars)r   r   r   r   r   r"   dictr	   r
   r*   r   r+   r   r   r   r   r      sS    +C +*QD *Q\ *QXFd Fs F# $ r   r   )r   osrD   rO   dataclassesr   r   typingr   r   r   getenvr0   r	   r   r   r   r   <module>r_      sX    
   ( !			";UCD   O Or   