
    +#h'                     r    d dl Z d dlmZ d dlmZmZ d dlZd dlmZ ddl	m
Z
mZ  edd      Z G d	 d
      Zy)    N)
namedtuple)AnyUnion)Example   )format_answerspassages2textFieldz9name separator input_variable output_variable descriptionc                       e Zd ZeeeedfdZddededefdZ	ddefdZ
d Zdeeeeef   f   d	edefd
ZddefdZy)
TemplateV2)passagescontextansweranswersc           	         || _         |j                         }t        j                  d|      j	                  d      | _        |t        | j
                        d  j                         }g | _        t        |      dkD  rZt        j                  d|      }|E|j	                  d      }|j	                  d      }|j	                  d      }|j	                  d      }nYt        j                  d|      }|6|j	                  d      }|j	                  d      }|j	                  d      }d }nt        d	      t        j                  d
|      }|#|j	                  d      }	|j	                  d      }
n|}	|}
| j                  j                  t        |||	|
|             |t        |j	                  d            d  j                         }t        |      dkD  rYy y )Nz(.*)
r   r   z(.*)(\s){(.*)}\s(.*\${.*})         z(.*)(\s){(.*)}zCould not parse templatez(.*) -> (.*))name	separatorinput_variableoutput_variabledescription)format_handlersstripresearchgroupinstructionslenfields
ValueErrormatchappendr
   )selftemplater   r#   r   r   variabler   	var_matchr   r   s              V/var/www/html/sandstorm/venv/lib/python3.12/site-packages/dsp/templates/template_v2.py__init__zTemplateV2.__init__   s     />>#IIh9??BC 1 1245;;=(maII:HEE {{1~!KKN	 ;;q>#kk!n		"2H=$ ;;q>D %AI${{1~H"&K$%?@@:I$!*!3"+//!"4!)"*KK'#1$3 +  EKKN 3 56<<>HG (ma    exampleis_demoreturnc                    g }|s| j                   D cg c]7  }|j                  |v xr% ||j                     duxr ||j                     dk7  9 }}t        |      sd|| j                   d   j                  <   nOt        dt	        |            D ]7  }||dz
     st        ||d       rd|| j                   |   j                  <    n | j                   D ]  j                  |v s|j                     "j                  | j
                  v r| j
                  j                     }nfd} ||j                           }j                  dk(  rd|v rdnj                  }	|j                  j                   |	 |         | j                         r4|j                  dd	      r"d
j                  |D 
cg c]  }
|
s|
	 c}
      S dj                  |D 
cg c]  }
|
s|
	 c}
      S c c}w c c}
w c c}
w )zTRetrieves the input variables from the example and formats them into a query string.N r   r   c                     t        |       t        k(  s J dj                   dt        |               dj                  | j	                               S )NzNeed format_handler for z	 of type  )typestrr   joinsplit)xfields    r)   format_handlerz(TemplateV2.query.<locals>.format_handlere   sK    #Aw#~r1I%J^J^I__himnoiphq/rr~"xx	22r+   r2   
	augmentedF

)r!   r   anyranger    r   r   r$   r   _has_augmented_guidelinesgetr5   )r%   r,   r-   resultr8   	has_valueir9   formatted_valuer   rs       `      r)   queryzTemplateV2.queryG   s    
 "[[	  $$/ 8E001=8E001R78I  y>9;A556 q#i.1 A Q'IabM0BACA = =>
 [[ 	E##w.75;O;O3P3\''4+?+??%)%9%9%:N:N%ON3 #19M9M1N"O$)OOs$:t?VD\a\k\k	zzl9+o->?	" ))+[%1P;;67aQ788yyV1q!122IF  81s   <G-8G2 G2G7"G7c                 F   |r4t        t        j                  d      rt        j                  j                  syd}t        j                         }| j
                  D ]  }|j                  ||j                  <    | j                         |_	        || j                  |      z  }|S )z9Returns the task guidelines as described in the lm promptshow_guidelinesr0   zFollow the following format.

)hasattrdspsettingsrH   r   r!   r   r   r?   r;   rF   )r%   rH   rA   r,   r8   s        r)   
guidelineszTemplateV2.guidelinest   s    WS\\;L%MVYVbVbVrVr3++-[[ 	>E,1,=,=GE(()	> ::<$**W%%r+   c                 n    t        | j                        dkD  xs t        d | j                  D              S )Nr   c              3   X   K   | ]"  }d |j                   v xs d |j                  v  $ yw)r:   N)r   r   ).0r8   s     r)   	<genexpr>z7TemplateV2._has_augmented_guidelines.<locals>.<genexpr>   s1      +
INTU__$D$%2C2C*CD+
s   (*)r    r!   r=   )r%   s    r)   r?   z$TemplateV2._has_augmented_guidelines   s7    4;;!# 
s +
RVR]R]+
 (
 	
r+   raw_predc                 8   t        j                  |      }|j                         }d}|t        | j                        k  rV| j                  |   j
                  |vs|| j                  |   j
                     n|dz  }|t        | j                        k  rVddl}t        |t        | j                        dz
        }|dk7  r|t        | j                        k  r|t        | j                        dz
  k  rd| j                  |dz      j                  z   }|j                  |      }|dk\  r|j                  j                  dk\  r|d| j                         j                  d      j                         || j                  |   j                  <   ||t        |      z   d j                         j                  d      j                         }nL|d| j                         || j                  |   j                  <   ||t        |      z   d j                         }|dz  }n\|j                  j                  dk\  rH|j                         j                  d      j                         || j                  |   j                  <   n*|j                         || j                  |   j                  <   d}|dz  }	 |S |t        | j                        dz
  k(  sJ |t        | j                        f       |j                  j                  dk\  rJ|j                         j                  d      j                         || j                  |   j                  <   	 |S |j                         || j                  |   j                  <   	 |S |dk7  r|t        | j                        k  r|S )a]  Extracts the answer from the LM raw prediction using the template structure

        Args:
            example (Union[Example, dict[str, Any]]): Contains the input variables that raw_pred was completed on.
            raw_pred (str): LM generated string

        Returns:
            Example: The example with the output variables filled in
        r   Nr   r0   r:   i[4z---)rJ   r   r   r    r!   r   dspyminr   findrK   releaserstripr   )r%   r,   rQ   idxrS   next_field_nameoffsets          r)   extractzTemplateV2.extract   s(    ++g&>>#C$${{3..g=UXIYIhIhAiAq1HC C$$
 	#s4;;'!+,"ns4;;'7!7S%))"&S1W)=)B)B"B!7Q;}},,8DLWfDUD[D[D]DdDdejDkDqDqDsC 0 @ @A#+FS5I,I,K#L#R#R#T#[#[\a#b#h#h#jDLWfDUD[D[D]C 0 @ @A#+FS5I,I,K#L#R#R#T1HC}},,8DLNNDTD[D[\aDbDhDhDjC 0 @ @ADLNNDTC 0 @ @A!H1HC  c$++.22KS#dkk:J4KK2==((H4@H@P@W@WX]@^@d@d@fGDKK,<<= 	 AI@PGDKK,<<=E "ns4;;'7!7D r+   c                    t        j                        t        t         j                  d      r+t         j                  j                  r| j                        S | j                  d   j                  v r| j                  d   j                  = j                  D cg c]^  }|j                  dd      sJ| j                  d   j                  |v r/|| j                  d   j                     | j                  |d      ` }}j                  D cg c](  }|j                  dd      s| j                  |d      * }}g }g }|D ]s  t        fd| j                  D              rAdd l}|j                  j                  d	k\  r|j                         Q|j                         c|j                         u ||z   }|}| j                         }	|	rdd<   | j                        }
t        |
j!                  d
            t        | j                        kD  r*d}	j                  dd      sdd<   | j                        }
dj#                  |      }t        |      dk\  rBt        |      dk(  r4|	s2dj#                  ||
g      }| j$                  | j'                  |      |g}nRt        |      dk(  r"| j$                  | j'                  |      g||
}n"| j$                  || j'                  |      g||
}dj#                  |D cg c]  }|s|j)                          c}      }|j)                         S c c}w c c}w c c}w )N
query_onlyr;   FT)r-   c              3   X   K   | ]!  }|j                   v s|j                  v  # y w)N)r   r   )rO   r8   r,   rdemos     r)   rP   z&TemplateV2.__call__.<locals>.<genexpr>   s(     eUUEYEY]dEdEJJ%'es   **r   i4r:   r<   r   z

---

)rJ   r   rI   rK   r]   rF   r!   r   demosr@   allrS   rV   r$   r?   r    r6   r5   r   rL   r   )r%   r,   rH   demordemosademosrdemos_
new_ademosrS   
long_queryrF   rdemos_and_querypartsppromptr`   s    `             @r)   __call__zTemplateV2.__call__   s	   ++g&3<<.3<<3J3J::g&& ;;r?))W4B667  	
XXk51KKO22d:tDKKPRODbDb?c?o JJtTJ*	
 	
 >E]]kTdhhWbdiNj$**T4*0kk 
 		&Eedkkee==((H4%%e,MM%(u%		& f$335
#'GK 

7# u{{4 !C$44J;;{E2'+$

7+V$v;!Fq 0%{{FE?;!!0 E
 [A!!0  	E !!0 	
 E ##$C1QWWY$CD||~Q	
 lv %Ds    A#L:L?+L?	MMN)F)T)__name__
__module____qualname__r	   r   r*   r   boolr4   rF   rL   r?   r   dictr   r[   rm    r+   r)   r   r      s    
 &$$%	
5?n+3W +3t +3 +3Z# 

=wS#X./= = 
	=~R Rr+   r   )r   collectionsr   typingr   r   rJ   dsp.primitives.demonstrater   utilsr   r	   r
   r   rs   r+   r)   <module>rx      s0    	 "  
 . 07WX
J Jr+   