
    L9j                         d dl Z d dl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	 dZ
dZg dZdZd Zd	 Zed
k(  r e        yy)    N)datetimetimezone)Pathz+/opt/struktur/youtube-research/knowledge.dbz%/opt/struktur/AA-043-P33-extractor.py)
zyoutube:FVuqEATzMWIzyoutube:qmPAFHeiU1Azyoutube:z-C_q4LzPlAzyoutube:3yqQ664R1hgz*obsidian:Systemstruktur/SYSTEM-REFERENZ.mdz8obsidian:Systemstruktur/Review-Routing-Decision-Units.mdzIobsidian:Systemstruktur/Knowledge-Pipeline-Review-Unter-100-2026-07-22.mdzVobsidian:05-Ressourcen/Hermes-Sessions-2026-07/TranscriptBackfillWorker-untersuchen.mdzyoutube:fxc4yds-DUszyoutube:ZyNdWhKqlEsz#AA-043-P34-R2-source-only-review-v1c                      t         j                  j                  dt              } t         j                  j	                  |       }| j
                  j                  |       |S )Np33_extractor)	importlibutilspec_from_file_locationEXmodule_from_specloaderexec_module)specms     %/opt/struktur/AA-043-P34-R2-writer.pyload_extractorr      s_    nn,,_R@INNDcDcdhDi!kokvkv  lC  lC  DE  lF  OP  HP    c                     t        j                         } | j                  dd       | j                         }t	               }|j                         }|D cg c]  }|d   	 }}|t        k7  r*t        dt        j                  t        |dd      z         g }g }|D ]  }|j                  |      D ]l  \  }}	|j                  |      \  }
}||d   |d	   |	|
||j                  |d   |d	   |      d
}|j                  |      \  }}|r|n|j                  |||f       n  g }g }|D ]h  \  }}}d }|D ]1  \  }}|d   |d   k(  s|j                  |d   |d         dk\  s-||f} n |r|j                  ||df       V|j                  ||f       j i dt        dt!        |      dt!        |      t!        |      z   dt!        |      dt!        |      dt!        |      dt!        |      d|j"                  ddddddddddddddddddd d!t%        |j&                        D ci c]  t)        fd"|D               c}}|j"                  r!t+        t        j                  |d             y t-        j.                  t0        d#$      }t,        j2                  |_        |j7                  d%       |j7                  d&       	 |D ]  \  }}|j7                  d'|d   f      j9                         }|r|d(   }n|j;                  d)      xs g }|r|d   j;                  d*      nd }|j<                  d+|d,   |d-   |d	   d.d/}|j7                  d0|d   |d   d1d1|d   ||d	   t        j                  |dd+2      d3t?        j@                  tB        jD                        jG                         |d-   |d4   |d5   d6d7f      }|jH                  }|dxx   d8z  cc<   |j7                  d9||d   |d	   |d-   |d:   t?        j@                  tB        jD                        jG                         f      }|jJ                  r|dxx   d8z  cc<   |d;   }|jM                         }tO        |d-   jQ                  d<d8      d8         } d8| cxk  xr t!        |      k  nc xr+ |d   |jS                  || d8z
           jU                  d=      v }!|!r|j                  |      d   rd>nd?}"|"d>k(  rd@ndA}|j7                  dB||"|tV        t?        j@                  tB        jD                        jG                         f      }|jJ                  ss|dxx   d8z  cc<   |d   |"xx   d8z  cc<   |j7                  dC|"d>k(  rdDndE|f        |jY                          	 |j]                          t+        t        j                  |d             y c c}w c c}w #  |j[                           xY w# |j]                          w xY w)FNz	--dry-run
store_true)action	source_idzallowlist_mismatch:)expectedactualF)ensure_asciicontent_version)	statementr   r   source_locatorevidence_classconfidence_reasonknowledge_unit_identityr    r   g)\(?exact_or_semantic_duplicate	allowlistsource_countcandidate_countvalid_countreject_countduplicate_countunique_countdry_runprovider_callsr   graphiti_postsneo4j_writesqueue_writesnew_kusnew_provenancenew_review_auditreview_verdicts)PASS	TEILWEISEFAILevidencec              3   :   K   | ]  \  }}|d    k(  sd  yw)r      N ).0_kes      r   	<genexpr>zmain.<locals>.<genexpr>   sT       vg  }@  }~  @  PQ  Rb  Pc  ef  Pf  wx  vgs      )timeoutzPRAGMA foreign_keys=ONzBEGIN IMMEDIATEz>SELECT id FROM knowledge_units WHERE knowledge_unit_identity=?idsource_versions
version_idTsource_typer   zLstatement is source-derived and locator resolves to the frozen source record)prompt_versionsource_onlyrC   r   r   review_basisa2  INSERT INTO knowledge_units(knowledge_unit_identity,statement,entities,relations,source_identity,source_version_id,content_version_hash,provenance,promotion_reason,created_at,source_locator,evidence_class,confidence_reason,review_state,gold_state,legacy_placeholder) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0)z[])r   	sort_keysz>P34-R2 controlled 10-source pilot; no automatic Gold promotionr   r   PENDINGNONEr7   zINSERT OR IGNORE INTO knowledge_unit_provenance(knowledge_unit_id,source_identity,source_version,source_locator,representation_type,created_at) VALUES(?,?,?,?,?,?)selection_kindtext:z` r2   r4   zFsource-only review: valid structure and exact frozen source line matchz8source-only review failed exact frozen source line matchzzINSERT OR IGNORE INTO knowledge_unit_review_audit(knowledge_unit_id,verdict,reason,reviewer,reviewed_at) VALUES(?,?,?,?,?)z4UPDATE knowledge_units SET review_state=? WHERE id=?APPROVEDREJECTED)/argparseArgumentParseradd_argument
parse_argsr   select_sourcesALLOWRuntimeErrorjsondumpssentence_candidatesclassifyidentityvalidappendjaccardlenr)   sortedVALID_EVIDENCEsumprintsqlite3connectDBRowrow_factoryexecutefetchonegetPROMPT_VERSIONr   nowr   utc	isoformat	lastrowidrowcount
splitlinesintsplitnormstripREVIEWERcommitrollbackclose)#apar   sourcessids
candidatesrejectsstlocevreasonr;   okrraccepted
duplicatesr:   duppspkr<   summarycrowku_idpvsv_idprov_objcursource_textsource_linesline_noline_okverdicts#                        `             r   mainr      s	   r{,OSUS`S`SbQRftfvde  AB  AQ  AQ  ASx  ry  Yz  mn  Z[  \g  Zh  Yz  UX  YzJl#8PU_bDcqv9w#wxx
 4Q%%a( 4fbZZ^92fB1[>\]^o\p  CF  XZ  ou  PQ  PZ  PZ  [\  ]h  [i  jk  l}  j~  A  PB   CQ	
52bJ'))1Qr(344 j UQq
# Heb	"#Q'@%AAQYYrR]_`al_mEnpsEsz|}  zAux  CHH*

Qq!>?
@1 
K+e  
KN3w<  
K8I#j/Z]^eZfJf  
Kgtux  zD  vE  
K  FT  UX  Y`  Ua  
K  bs  tw  xB  tC  
K  DR  SV  W_  S`  
K  aj  kl  kt  kt  
K  uE  FG  
K  HX  YZ  
K  [i  jk  
K  lz  {|  
K  }F  GH  
K  IY  Z[  
K  \n  op  
K  qB  KL  YZ  bc  Cd  
K  eo  qw  xy  xH  xH  qI  pJ  lm  qr  sv  vg  DL  vg  sg  qg  pJ  
KII

7./
??2b!1=aiiH`>acdclclm~c |cayyQSTUnSoRqr{{}3	
d)E	 &BB%'"Q%))L
!TE //dQRS`Qast  vF  tG  Z[  \m  Zn  ~L  MH			  K  MN  Oh  Mi  jk  lw  jx  y}  ~B  CD  EP  CQ  RW  XY  Zk  Xl  mq  mw  mw  x@  NS  ^b  mc  dd  em  eq  eq  rz  r~  r~  e  eI	  eI	  eK	  L	M	  N	^	  L	_	  `	a	  b	r	  `	s	  t	u	  v	I
  t	J
  K
T
  U
[
  L\
  	]
C
--E+Q.+yy  {  }B  CD  EP  CQ  RS  Te  Rf  gh  iy  gz  {|  }M  {N  OW  O[  O[  \d  \h  \h  Oi  Os  Os  Ou  |v  w3	llG,-q0-y;{'='='?,QO_M`MfMfgjklMmnoMpIq{|  F  |Y  HK  LX  HY  |Y  |[  ^_  `k  ^l  pq  pv  pv  wC  DK  LM  DM  wN  pO  pU  pU  VZ  p[  ^[szA6F7  PW  Y_  P_  DL  e_Fyy  R  TY  Za  bh  iq  rz  r~  r~  G  K  K  rL  rV  rV  rX  SY  Z3	ll"G,=$>w$G$J$GIIDT[]cTcjistyEz{%|& ((*
'')tzz'u-.W Yz  pJ2 u
'')s,   W2W	I3W AW W!!W$ $W6__main__)rO   importlib.utilr   rV   rc   sysr   r   pathlibr   re   r   rT   rv   r   r   __name__r8   r   r   <module>r      sH    3 3 3 ' 0* Y	.P,/Z Zr   