
    +#h                          d dl mZ d dlmZmZmZ d dlZd dlmZ d dl	m
Z
 d dlmZmZ d dlmZ  G d d	      Zd
e
defdZd
e
defdZ	 ddZddZ	 ddededee   fdZdededefdZy)    )Counter)AnyCallableOptionalN)Example)Template)normalize_textzipstar)dotdictc                   F    e Zd ZdZdee   defdZd Zd Z	d Z
dd	Zd
 Zy)CompletionszHA state object that holds the valid LM completions for a given Template.completionstemplatec                      || _         || _        y N)datar   )selfr   r   s      S/var/www/html/sandstorm/venv/lib/python3.12/site-packages/dsp/primitives/predict.py__init__zCompletions.__init__   s    	     c                 6    | j                   j                         S r   )r   __iter__r   s    r   r   zCompletions.__iter__   s    yy!!##r   c                      | j                   |   S r   )r   )r   items     r   __getitem__zCompletions.__getitem__   s    yyr   c                 ,    t        | j                        S r   )lenr   r   s    r   __len__zCompletions.__len__   s    499~r   Nc                     |r$| j                   D cg c]  }t        ||       c}S t        | j                         S c c}w r   )r   getattrr
   )r   keycs      r   unpackzCompletions.unpack   s4    -1YY7GAsO77tyy!! 8s   <c                     t        | j                        dk(  sJ | j                  d   }||j                         v rt        ||      S |j	                  d      r|d d |j                         v r	 J |       )N   r   s)r   r   keysr!   endswith)r   name
completions      r   __getattr__zCompletions.__getattr__!   sn    499~"""YYq\
:??$$:t,,==$s)z/@"@dur   r   )__name__
__module____qualname____doc__listr   r   r   r   r   r   r$   r-    r   r   r   r      s5    R!DM !X !$"r   r   r   returnc                    t        t        j                  d      rLt        j                  j                  }|j	                  t        j
                  j                        } || fi |S t        j
                  j                  | fi |S )gReturns a callable function that generates completions for a given example using the provided template.inspect)hasattrdspsettingsr7   inspect_funcpredict	_generate)r   kwargs	inspectorr=   s       r   generater@   /   sc    s||Y'LL((	**3;;+@+@A	,V,,{{$$X888r   c                      t         j                  j                  st        d      t         j                  j                  	 ddt        dt
        dt        f fd}|S )r6   No LM is loaded.examplestage	max_depthc                 
   t         j                  j                  st        d      |xs | }J | j	                  fd      }  |       } |fi }|D cg c]  }j                  | |       }}j                  D cg c]  }|j                   }}d}	t        |      D ]@  \  }
}|D cg c]  }||j                         v s||   | }}t        |      s:|}|
dz   }	B |	t        |      k  rJ|d   }d|||	   <   j                  d      xs{ j                  d      xsh t         j                  j                  j                  j                  d      xs3 t         j                  j                  j                  j                  d      }|t        d      t        t        d	|d
z        |      }t!        j                               t!        t         j                  j                  j                  j                               z   }d|v rdnd}i ||ddddi}|dkD  sJ  t#        fi |||dz
  |      S t%        |      }| j'                  |      } t        |      dk(  r|d   } | j&                  di || <   t         j                  j(                  rt+        |j                               }j                  D cg c]  }|j                  |v r|j                   }}j                  D cg c]  }|j                  |vr|j,                   }}| j                  dg       | _        | j.                  j1                  ||d       | |fS t3        |      | <   | |fS c c}w c c}w c c}w c c}w c c}w )NrB   c                     |    S r   r3   )drD   s    r   <lambda>z0_generate.<locals>.do_generate.<locals>.<lambda>I   s    QuX r   r   r&    
max_tokensmax_output_tokenszGRequired 'max_tokens' or 'max_output_tokens' not specified in settings.K      ntemperatureg        )rD   rE   original_exampler   )r   compiling_stages)r+   r   inputsoutputsr3   )r9   r:   lmAssertionErrordemos_atextractfieldsinput_variable	enumerater)   r   getr>   
ValueErrorminmaxr2   r@   r   copy	compilingsetoutput_variablerS   appendr   )rC   rD   rE   rQ   promptr   pfieldfield_nameslast_field_idx	field_idxr"   r#   completions_r,   rK   r)   max_tokens_key
new_kwargsinputs_frT   rU   	generatorr>   r   s    `                     r   do_generatez_generate.<locals>.do_generate@   s    || !344+6w    ""#56 '",5f,G,GLW%Xqh&6&6w&B%X%X EMOO!T5%"6"6!T!T'4 	/NIs&#/af>PL 
 < *!*Q	/ C,,$QJ68J{>23 !**\2 H

#67H..22<@H ..223FG  ! !jkkSZ1_5zBJ&clloo.D.D.I.I.K)LLD-9T-A\GZN
Qs	J q= =38H3
3#a-!1	  "+A,,;,7{q $QJ)W\\7J7GEN||%%.3356 &__''72 $$  &__''w6 %%  ,3;;7I2+N(((// %$,"(#*	 ## %=GEN##e &Y "Uf
s*   M,M10M6M6M6
!M;;!N )rN   N)r9   r:   rV   rW   r   strint)r   r>   rr   rq   s   `` @r   r=   r=   9   sX    <<??/00I LP`$`$!$`$14`$D r   c                     t         j                  j                  st        d      dddd|}t        j                  j                  |fi |}t	        | ||      }t        |||      S )NrB   gffffff?      )rP   rO   rK   )rY   	normalizeprediction_field)r9   r:   rV   rW   extract_final_answermajority_vote_)rC   rf   ry   rY   rz   r>   r   s          r   generate_scr}      sf     <<??/00 rGGF,,//&3F3K&wWMKy;K r   c                    t         j                  j                  st        d      |r|D cg c]  } || |       }}nP|D cg c]E  }|j	                         j                  d      d   j                  dd      d   j	                         G }}t         j                  j                  j                  j                  i t         j                  j                  j                  d   d|i       |S c c}w c c}w )NrB   
r(   :r&   r   )r9   r:   rV   rW   stripsplithistoryre   )rC   r   rY   rg   s       r   r{   r{      s    <<??/004?@qww*@@ JU
DEAGGIOOD!"%++C3B7==?
 

 LLOO""C3<<??""2&C{C  A
s   C/A
C4r   ry   rh   c                     |#| j                   j                  d   j                  n|}t        t	        | ||      | j                         S )zZReturns the most common completion for the target field or the last field in the template.r(   rx   rR   )r   rZ   rd   r   r|   )r   ry   rh   s      r   majorityr      sK     @E}K  ''+;;RWE{i%P%% r   rz   c                 \   t         j                  j                  st        d      i }|r^| }g }| D ]5  }||v r|j	                  t        ||                %|j	                  d       7 |} t        ||       D ]  \  }}||vs|||<    | D 	cg c]  }	|	s|		 }}	|r|} t        |       j                         }
|
d   \  }}|r||   }t         j                  j                  j                  j	                  i t         j                  j                  j                  d   |
|gd       |gS c c}	w )zCore logic for majority vote.rB   rJ   r   r(   )topkr   )
r9   r:   rV   rW   re   r	   zipr   most_commonr   )r   ry   rz   normalized_to_originaloriginal_completionsrl   predr,   normalized_completionxr   _s               r   r|   r|      sB    <<??/00* 	(D4'##N48H3I$JK##B'		(
 #145I;1W 	K-J-$,BB@J&'<=	K  +0!aA0L0";++-D1gGD!%d+LLOO""L3<<??""2&LdVL 6M 1s   D)D))TNNr   )TN)collectionsr   typingr   r   r   r9   dsp.primitives.demonstrater   dsp.templates.template_v3r   	dsp.utilsr	   r
   dsp.utils.utilsr   r   r@   r=   r}   r{   boolrs   r   r|   r3   r   r   <module>r      s     * * 
 . . - #! !H9x 9h 9i ix iZ EI& NR		)-	=Ec]	$ $ $PS $r   