
    Dj                       d Z ddlm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	  e	 e
d      j                  j                  dd            j                         Zh d	Zd
dddddddddd
ZddZddZdddZddZdd dZy)!z;Persistent Carlo feedback and topic-scoped prompt guidance.    )annotationsN)datetimetimezone)PathosSMA_CASES_DBz)/opt/struktur/social-media-agent/cases.db>   badgoodmediocre)kabelleitung	anschlusswandbodendeckeverschmolzen)u
   messgerät
messgeraetu   gerätgeraetbohrmaschine	schleiferwerkzeugsonde)messungmessensensorr   u   messflächemessflaecher   )themabezuginhaltpost)realrealistischu   glaubwürdigglaubwuerdig)
bildaufbaukompositionumgebung)ansprechend	attraktivu   schönschoen)mallorca
mediterraninsel)professionellfachlichu   seriösserioes)physikalisch	plausibelnachvollziehbar)
cable_plausibilitydevice_plausibilitymeasurement_methodtopic_matchrealismcompositionvisual_attractivenessMallorca_contextprofessional_impressionphysical_plausibilityc                   t        | xs d      j                         }|j                         i }t        j	                         D ]7  \  }}t        fd|D              st        fddD              }|rdnd||<   9 |sd|d<   |S )	N c              3  &   K   | ]  }|v  
 y wN ).0wlows     /tmp/human_feedback.py	<genexpr>z)interpret_human_reason.<locals>.<genexpr>   s     'AqCx'   c              3  &   K   | ]  }|v  
 y wr@   rA   )rB   xrD   s     rE   rF   z)interpret_human_reason.<locals>.<genexpr>   s       Aac  ArG   )	nichtkeinkeineunplausfalschz	kommt ausz	wirkt wieunklarfehltnegativepositiveunclassifiedother)strstripcasefoldKEYWORDSitemsany)reasontextoutkeywordsrQ   rD   s         @rE   interpret_human_reasonr`      s    	V\r		 	 	"DCR^^% <	E'''  A+  A  AH#+ZCH< ^GJ    c                     dj                   fddD              j                         }t        j                  d|      D ch c]	  }|dvs| c}S c c}w )N c              3  \   K   | ]#  }t        j                  |d       xs d        % yw)r>   N)rU   get)rB   kpackages     rE   rF   z_tokens.<locals>.<genexpr>    s&     d1#gkk!B'-2.ds   ),)content_pillartopictopic_categoryu   [a-zäöüß]{5,}>   r   ri   feuchter*   schimmel)joinrW   refindall)rg   r\   rI   s   `  rE   _tokensrp      sI    	d8cd	d	m	m	oDzz"6t<{!Iz@zA{{{s   	AAc                   t         j                         sg S 	 t        j                  dt          dd      }t        j                  |_        |j                  d      j                         }|j                          t        |       }t        | j                  dd      xs d      j                         }g }|D ]  }t        |d   xs d      j                         }t        ||d   d	      }	||k(  s|s<t        ||	z        d
k\  sNt        j                   |d   xs d      }
|j%                  |d   |d   |
|d   d       t        |      |k\  s |S  |S # t        j                  $ r g cY S w xY w# t        j"                  $ r i }
Y fw xY w)Nzfile:z?mode=roT)uriaN  select v.human_rating,v.human_reason_verbatim,v.human_reason_structured_json,p.topic,p.content_pillar
                          from package_image_variants v join publication_packages p on p.package_id=v.package_id
                          where v.human_rating in ('good','mediocre','bad') order by v.human_feedback_at desc limit 100rh   r>   ri   )rh   ri      human_reason_structured_jsonz{}human_ratinghuman_reason_verbatim)ratingr[   featuressource_topic)DBexistssqlite3connectRowrow_factoryexecutefetchallcloseErrorrp   rU   re   rW   lenjsonloadsJSONDecodeErrorappend)rg   limitcrowstokspillarselectedrrprt
structureds              rE   feedback_prompt_rulesr   #   s   99;r	$
//E"X.4
8!-YY { | }E  }E  }G 	 IJ  IP  IP  IR		D#gkk2B2&F&L""M"V"V"X6ceZb +q!"(b)224SU^_`g^hAi9jbv:$3tby>1#4 JJq)G'H'PDQOOa&7CZA[gq  BC  DK  BL  M  N8}e#UO+ O ==#)# ''6B6s$   A#E E0E-,E-0FFc           	        t        |       }|sdg fS g }g }|D ]  }dj                  d |d   j                         D              }dj                  d |d   j                         D              }|d   dk(  r|j                  |xs |d   d d	        y|j                  |xs |d   d d	         d
j                  |rddj                  |d d       z   gng |rddj                  |d d       z   gng z         }||fS )Nr>   z, c              3  2   K   | ]  \  }}|d k(  s|  yw)rR   NrA   rB   rf   vs      rE   rF   z'feedback_prompt_text.<locals>.<genexpr>:   s     O1J1O   rx   c              3  2   K   | ]  \  }}|d k(  s|  yw)rQ   NrA   r   s      rE   rF   z'feedback_prompt_text.<locals>.<genexpr>;   s     JCAaAzMaJr   rw   r
   r[      rc   u3   Thematisch passende Carlo-Erfahrungen — positiv: z;    zzu vermeiden: )r   rm   rY   r   )rg   rulesrR   rQ   r   rx   r	   r\   s           rE   feedback_prompt_textr   5   sT   

(EB,H" 8O*(;(;(=OOIIJ1Z=#6#6#8JJX;0MAhK<M Nooc6Qx[#%67	8
 
goI499U]^`_`UaKbbcuw  lt  ~N  PT  PY  PY  Zb  ce  de  Zf  Pg  ~g  }h  z|  }  
~D:ra   c           	     x   |t         vrt        d      t        |xs d      j                         st        d      t	        |      }t        j                  t        j                        j                         }t        j                  t              }t        j                  |_        |j                  d|| f      j!                         }|s|j#                          t        d      |j                  d||t%        j&                  |d      |||f       |j)                          |j#                          || |||||d	S )
Nz*human_rating must be good, mediocre or badr>   u   Begründung erforderlichz\select variant_id,package_id from package_image_variants where variant_id=? and package_id=?zimage variant not foundzupdate package_image_variants set human_rating=?,human_reason_verbatim=?,human_reason_structured_json=?,human_feedback_at=?,human_feedback_by=? where variant_id=?F)ensure_ascii)
variant_id
package_idru   rv   r   human_feedback_athuman_feedback_by)RATINGS
ValueErrorrU   rV   r`   r   nowr   utc	isoformatr|   r}   rz   r~   r   r   fetchoner   r   dumpscommit)	r   r   rw   r[   evaluated_byr   r   r   rows	            rE   save_variant_feedbackr   A   s   WJ/[$\\v|""$J7Q,R&R%f-J8<<3M3W3W3YsoobA1=			pr|  ~H  rI  	J  	S  	S  	UC	,E!FFII  w  y  @F  GK  GQ  GQ  R\  jo  Gp  qt  uA  BL  xM  N  PQ  PX  PX  PZ  \]  \c  \c  \e#6jp  I  ^a  vB  C  Cra   )r[   rU   returndict)rg   r   )   )rg   r   r   intr   z
list[dict])rg   r   r   ztuple[str, list[dict]])Carlo)r   rU   r   rU   rw   rU   r[   rU   r   rU   r   r   )__doc__
__future__r   r   rn   r|   r   r   pathlibr   
__import__environre   resolverz   r   rX   r`   rp   r   r   r   rA   ra   rE   <module>r      s    A "   ' 	*T

"
"
&
&~6a
bckkm![r^0?6F5KG
|$
Cra   