
    RjQ                       d Z ddlm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
 ej                  j                  dd      Z eej                  j                  dd	            j                         Z eej                  j                  d
d            j                         ZdZ G d de      ZddZddZddZddZdddddZy)z9Vision-based technical QA for Codex-generated SMA images.    )annotationsN)Path)AnySMA_CODEX_BINARYz/usr/bin/codex
CODEX_HOMEz/root/.codexSMA_CODEX_WORKSPACEz1/opt/struktur/social-media-agent/.codex-workspace)technical_device_plausiblecables_and_connectionsmeasurement_methodanatomybuilding_geometrytopic_matchc                      e Zd ZdZy)CodexImageQAErrorz5QA could not produce a trustworthy structured result.N)__name__
__module____qualname____doc__     /tmp/codex_image_qa.pyr   r      s    ?r   r   c                     t         dz  } | j                  d      D ch c]@  }|j                         s|j                  j	                         dv s1|j                         B c}S c c}w )Ngenerated_imagesz**/*>   .jpg.png.jpeg.webp)r   globis_filesuffixlowerresolve)rootps     r   _image_pathsr%      sK    **D!%6!2}AaiikahhnnFVZ|F|AIIK}}}s   A%A%A%c                   t        j                  d|       D ]  }d}d}d}t        |j                         t	        |             D ]  }| |   }|r|rd}|dk(  rd}|dk(  sd} |dk(  rd}(|dk(  r|dz  }3|d	k(  s9|dz  }|dk(  sD	 t        j                  | |j                         |dz          }t        |t              r|c c S 	    t        d
      # t
        j                  $ r Y  w xY w)Nz\{r   F\T"{   }z*Codex-QA lieferte kein strukturiertes JSON)refinditerrangestartlenjsonloads
isinstancedictJSONDecodeErrorr   )textmatchdepth	in_stringescapedichvalues           r   _extract_jsonr>      s    UD) 	u{{}c$i0 	AaBeG4Z43YE	sIsEQJEs
A:7 $

4a!e+D E%eT25L2		( H
II  //66s   :CC/.C/c                @   t        |       }i t        dz   D ]E  }t        |j                  |d            j	                         j                         }|dk(  rdnd|<   G |j                  dg       }t        |t              r|g}|D cg c]'  }t        |      j                         st        |      ) c}d<   |j                  d      }t        |t        t        f      r|nd d<   t        fdt        D              rdd<   d   dk(  rd   sdgd<   S c c}w )	N)overallFAILPASSfailure_reasons
confidencec              3  .   K   | ]  }|   d k(    yw)rA   Nr   .0keyresults     r   	<genexpr>z$parse_qa_response.<locals>.<genexpr><   s     
5S6#;& 
5s   r@   z<Mindestens ein technisches QA-Kriterium ist nicht bestanden.)
r>   CRITERIAstrgetupperstripr3   intfloatany)r6   rawrH   r=   reasonsxrD   rI   s          @r   parse_qa_responserV   1   s   

CF,& <CGGC()//1779 %fVs< gg',G'3G918 KACFLLNQ KF&J)3Je)M:SWF<

5H
55"yiF"62C+D%c$d !M !Ls   	D(Dc                `      j                  d      dk(  xr t         fdt        D              S )Nr@   rB   c              3  F   K   | ]  }j                  |      d k(    yw)rB   N)rM   rF   s     r   rJ   zqa_passes.<locals>.<genexpr>C   s     2aQT6::c?f3L2as   !)rM   allrK   )rI   s   `r   	qa_passesrZ   B   s(    ::i F*as2aX`2a/aar   iX  )timeoutc               t   t        |       j                         } | j                         st        d|        t        j                         st        dt               d| d|d d  d}t               }t        j                  j                         }d|d<   t        t              |d	<   |j                  d
d        t        ddddddt        t              dt        |       d|g}	 t        j                  ||dd|d      }|j(                  dk7  rt        d|j(                         t               |k7  rt        d      t+        |j,                        }
t        |       |
d<   d|
d<   |j(                  |
d<   |
S # t         t        j"                  f$ r'}	t        dt%        |	      j&                         |	d }	~	ww xY w)NzBilddatei fehlt: zCodex-Arbeitskontext fehlt: uv   Technische Bild-QA. Prüfe das angehängte Bild streng und ausschließlich nach diesen Kriterien. Thema des Packages: z. Inhalt des Posts: i  u.  

Bewerte jedes Kriterium mit exakt PASS oder FAIL. Ein einzelner kritischer FAIL erzwingt overall FAIL. Prüfe: plausibles professionelles Messgerät für die behauptete Tätigkeit; nachvollziehbare Kabel und Anschlüsse ohne aus Wand/Boden/Körper zu entstehen; technisch sinnvolle Messhandlung; anatomisch plausible Person/Hände; widerspruchsfreie Bauteil- und Umgebungsgeometrie; fachlicher Bezug zum konkreten Thema/Post.

Antworte ausschließlich als valides JSON ohne Markdown und ohne zusätzlichen Text mit exakt diesen Schlüsseln: technical_device_plausible, cables_and_connections, measurement_method, anatomy, building_geometry, topic_match, overall, failure_reasons (Array von Strings), confidence (Zahl 0 bis 1). Keine Bildgenerierung, kein Dateischreiben, kein API-Aufruf, keine Veröffentlichung.z/rootHOMEr   OPENAI_API_KEYexecz	--sandboxz	read-onlyz--skip-git-repo-checkz--ephemeralz-Cz--imagez--jsonTF)envr6   capture_outputr[   checkz!Codex-QA-Prozess fehlgeschlagen: r   zCodex-QA-Prozess Exit z/QA-Prozess hat unerwartet Bildartefakte erzeugt
image_pathz!Codex built-in vision via --imageprovider_path
codex_exit)r   r"   r   r   TRUSTED_WORKSPACEis_dirr%   osenvironcopyrL   r   popCODEX
subprocessrunOSErrorTimeoutExpiredtyper   
returncoderV   stdout)rc   topic	post_textr[   promptbeforer`   command	completedexcrI   s              r   run_image_qar{   E   s   j!))+J'8;LZL9Y'Z!Z##%->A]^o]p?q-r'r H  IN  HO  Oc  dm  ns  os  dt  cu uB EF
 ^F
**//
C7S[JC4EY\Y`Y`aqswYxfk;8OQ^`dfij{f|  H  JM  NX  JY  [c  ek  lGcNN7$t]dlqr	 q (9<RS\SgSgRh:i(j"j~'89j'k!ky//0Fz?F<AF?$//F<M Z../ c"CDIDVDVCW XY_bbcs   $E7 7F7"F22F7)returnz	set[Path])r6   rL   r|   dict[str, Any])rI   r}   r|   bool) )
rc   r   rt   rL   ru   rL   r[   rP   r|   r}   )r   
__future__r   r1   rh   r,   rm   pathlibr   typingr   ri   rM   rl   r"   r   rf   rK   RuntimeErrorr   r%   r>   rV   rZ   r{   r   r   r   <module>r      s    ? "  	 	   


)+;<"**..~>?GGI
(=?rst||~ 
@ @~J."bVY r   