/mho&ddlZdZeZdZdZGddZGddeZGd d eZGd d eZ Gd deZ GddeZ e Z eZ y)Nc |d|SNxls >/Users/shenjiajun/Desktop/2code/2code/citekit/prompt/prompt.pyr s 2Ac t|Dcgc]}t|tc}rBt|dk(r|dS|dj }|j t |dd|Sycc}w)Nr)all isinstancedictlencopyupdatecombine)argsargcombineds r rrsc D 1SJs4 12 t9>7NAw||~H OOGT!"X. /O 3 1sA+cfdS)Nc|Srr)datakeys r r z..s cr r)rs`r r r s2r c~eZdZiZdZdZdZdZdidfddZde fd Z de fd Z d Z de fd Z d Z de fdZddZdZy)Promptc |d|Srrrs r r zPrompt.s QrUr prompt_unablec |jD]}|dk(r||}|dk(s||}t}||_||_y#t$r }t|tdYd}~yd}~wwxYw)Ntemplate componentsz5Update Rejected due to invalid template or components)keysr Exceptionprintr"r#)selfkargsr arg_templatearg_components test_promptes r rz Prompt.updates zz| 0*$#(:L,&%*3ZN  0 !~>K % (   !H I J  s"AA A0A++A0i@returnNc||_t|trB|jD](}dt |d|jvst d||_i|_t|trVt|t|k(r4t|j|Dcic]\}}|| c}}|_yt dt|tr||_ |Dcic]}||c}|_ytdcc}}wcc}w)a Args: template: The way to order and organize each components, use to represent a component, .... components: The content of a component, use {NAME} to represent the placeholder of corresponding data max_token: a list as long as components, representing the max number of tokens for each component, or a int representing the same max_token for all components <>component name not in template!z,max_token is not corresponding to componentszmax_token should be int or listN)r"rrr$strr%r# max_tokenlistrzipintmax_token_init TypeError)r'r"r#r3rattvals r __init__zPrompt.__init__,s!  j &!( Gs3xj?$--7#$EFF G)DO i %:I.;>z?PQZ;[!\is3#c'!\ NOO  # &"+D 7ABc)mBDN=> >"] Cs % D" Dc|j}|jjD].}|jdt |d|j|}0|S)Nr/r0)r"r#r$replacer2)r'promptrs r __repr__zPrompt.__repr__LsS??'') JC^^aCzODOOC4HIF J r ct|Sr)repr)r's r __str__zPrompt.__str__Rs Dzr c |jD]:}dt|d|jvr|||j|<1t dy)z2 Add components in to the prompt. r/r0r1N)r$r2r"r#r%)r'r(parts r part_templatezPrompt.part_templateUsRJJL CD3t9+Q4==0(-d % ABB  Cr c&|j|i|Sr) make_prompt)r'rr(s r __call__zPrompt.__call___st///r ci}|jjD]}|j|||<|j|Sr)r#r$rG)r'inputrs r rBzPrompt.__str__csH??'') .C-E#J .&&r c|r*t|}|j}|j|n|}|j}|jj D]h}||vs||t jk(r |jdt|dd}=|jdt|d|j|}ji}|j D]}||jj vrv|jj|r|jj|}ntd|j}t|||kDr|j|||||<|j di|cSy)z arg: a dictionary containing all contents to the placeholder of the prompt kargs: use NAME=value to pass arguments r/r0rNr)rrrr"r#r$rUNABLEr=r2r3getminr7 token_lentruncateformat)r'rr(r>r prompt_argsr3s r rGzPrompt.make_promptmsR D>D99;D KK D??'') OC$$s)v}}"<!CH:Q;!CH:Q9MN  O  99; )Cdoo**,,>>%%c* $ 2 23 7I #D)<)< =IT#Y'2 $ d3i BDI!6==(4( ( )r c |jD]J}||jjvr|j||j|<>t |dy)Nz not in Template!)r$r#rNr3KeyError)r'r(rs r set_max_tokenzPrompt.set_max_tokensU::< :Cdoo**,,&+iins##&7899  :r c g}|D]l}|Dcic]}|t||}}|jDcic]}||||} }|j|ji|| n|Scc}wcc}w)z load data to make prompts from a data loader projections: the function to get the information from a data. ) default_getr$appendrG) r' data_loaderr$ projectionspromptsrr l_contents projection d_contentss r load_datazPrompt.load_datas  KD@DE#.k#.t44EJEU`UeUeUghz*%<[%<Passage>zDocument[{ID}]: z(Title:{Title})z {Passage} )IDTitlePassagerL���c�����������������(����t���������|���|||�������y�r���superr;���r'���r"���r#���r3��� __class__s��� r ���r;���zDocPrompt.__init__������� :y9r ���ra���rb���rc���rd���__doc__r;��� __classcell__ro���s���@r ���rf���rf������s2�����!7I[du��AN��DO��[_�:�:r ���rf���c�������������������h�����e�Zd�ZdZddddddfd�fd Zd�fd Z�fd Z�fd Z�fd Z�fd Z �xZ S�) ALCEDocPromptrg���z<ID><title><text>zDocument [{ID}]z(Title:{title}): z{text} )rh���titletextrL���c�����������������(����t���������|���|||�������y�r���rl���rn���s��� r ���r;���zALCEDocPrompt.__init__���rp���r ���c�����������������`����t���������|���t��������t��������|������������fdfdd�������S�)Nc���������������������|�d������S�)Nr ���r���)r���rx���s��� r ���r ���z1ALCEDocPrompt.default_load_data.<locals>.<lambda>���s����RVWXRYZ^R_�r ���c�����������������,����t��������|�d���dz���z���������S�Nr���r ���r2���)r���from_idxs��� r ���r ���z1ALCEDocPrompt.default_load_data.<locals>.<lambda>���s,����ruvz{|v}~v��CK��wK��sL�r ���c���������������������|�d���d���S�Nr ���rw���r���r���s��� r ���r ���z1ALCEDocPrompt.default_load_data.<locals>.<lambda>���s'������bf��gh��bi��jq��br�r ���rx���rh���rw���rm���r`���r4��� enumerate)r'���rZ���rx���r���ro���s��� ``r ���default_load_datazALCEDocPrompt.default_load_data���s7����w i &<!=E_��fL��Ur ��s�� sr ���c�����������������P����t���������|���t��������t��������|������������d�d�������S�)Nc���������������������|�d���d���S�Nr ���rx���r���r���s��� r ���r ���z7ALCEDocPrompt.default_load_data_wo_ID.<locals>.<lambda>�������RVWXRYZ`Ra�r ���c���������������������|�d���d���S�r���r���r���s��� r ���r ���z7ALCEDocPrompt.default_load_data_wo_ID.<locals>.<lambda>���s����w{|}w~��@G��xH�r ���)rx���rw���r���r'���rZ���ro���s��� r ���default_load_data_wo_IDz%ALCEDocPrompt.default_load_data_wo_ID���s0����w i &<!=Ea��kH ��I�� Ir ���c�����������������P����t���������|���t��������t��������|������������d�d�������S�)Nc���������������������|�d���d���S�r���r���r���s��� r ���r ���z:ALCEDocPrompt.default_load_data_wo_title.<locals>.<lambda>���r���r ���c�����������������$����t��������|�d���dz���������S�r}���r~���r���s��� r ���r ���z:ALCEDocPrompt.default_load_data_wo_title.<locals>.<lambda>���s%����twx|}~x��AB��yB��uC�r ���)rx���rh���r���r���s��� r ���default_load_data_wo_titlez(ALCEDocPrompt.default_load_data_wo_title���s0����w i &<!=Ea��hC ��D�� Dr ���c�����������������T����t���������|���t��������t��������|������������d�d�d�������S�)Nc���������������������|�d���d���S�)Nr ��� extractionr���r���s��� r ���r ���z<ALCEDocPrompt.default_load_data_extraction.<locals>.<lambda>���s����RVWXRYZfRg�r ���c�����������������$����t��������|�d���dz���������S�r}���r~���r���s��� r ���r ���z<ALCEDocPrompt.default_load_data_extraction.<locals>.<lambda>���s1����z}��C��DE��F��GH��H��{I�r ���c���������������������|�d���d���S�r���r���r���s��� r ���r ���z<ALCEDocPrompt.default_load_data_extraction.<locals>.<lambda>���s'������_c��de��_f��gn��_o�r ���r���r���r���s��� r ���default_load_data_extractionz*ALCEDocPrompt.default_load_data_extraction���s7����w i &<!=Eg��nI��Ro ��p�� pr ���c�����������������T����t���������|���t��������t��������|������������d�d�d�������S�)Nc���������������������|�d���d���S�)Nr ���summaryr���r���s��� r ���r ���z9ALCEDocPrompt.default_load_data_summary.<locals>.<lambda>���s����RVWXRYZcRd�r ���c�����������������$����t��������|�d���dz���������S�r}���r~���r���s��� r ���r ���z9ALCEDocPrompt.default_load_data_summary.<locals>.<lambda>���s-����wz{��AB��|C��DE��|E��xF�r ���c���������������������|�d���d���S�r���r���r���s��� r ���r ���z9ALCEDocPrompt.default_load_data_summary.<locals>.<lambda>���s'������\`��ab��\c��dk��\l�r ���r���r���r���s��� r ���default_load_data_summaryz'ALCEDocPrompt.default_load_data_summary���s7����w i &<!=Ed��kF��Ol ��m�� mr ���ra���)rx���r���) rb���rc���rd���rr���r;���r���r���r���r���r���rs���rt���s���@r ���rv���rv������sQ�����!4FW`s��|F��AG��SW�:sIDpm�mr ���rv���c�������������������8�����e�Zd�ZdZdddddddf �d �fd Z�xZS�) ALCEVanillaPrompt Containing INST(Instruction), Question, Doc and Answer in order: {INST} Question:{Question} {Doc} Answer:{Answer} z<INST><Question><Doc><Answer> {INST} zQuestion:{Question} z{Doc} zAnswer:{Answer})INSTQuestionDocAnswerrL���c�����������������(����t���������|���|||�������y�r���rl���rn���s��� r ���r;���zALCEVanillaPrompt.__init__�������� :y9r ���ra���rq���rt���s���@r ���r���r������s:���� �;#/<U\e��pA��B:�$(:�:r ���r���c�������������������8�����e�Zd�ZdZdddddddf �d �fd Z�xZS�) NewALCEVanillaPromptr���z<INST><question><docs><answer> r���zQuestion:{question} z{docs} zAnswer:{answer})r���questiondocsanswerrL���c�����������������(����t���������|���|||�������y�r���rl���rn���s��� r ���r;���zNewALCEVanillaPrompt.__init__���r���r ���ra���rq���rt���s���@r ���r���r������s:���� �<#/<U]g��rC��D:�$(:�:r ���r���c�������������������6�����e�Zd�ZdZddddddf �d �fd Z�xZS�) AGEEPromptz Containing INST(Instruction), Question and Doc in order: {INST} Question:{Question} Search Results:{Doc} z<INST><Question><Doc> r���zQuestion: {Question} zSearch Results: {Doc} )r���r���r���rL���c�����������������(����t���������|���|||�������y�r���rl���rn���s��� r ���r;���zAGEEPrompt.__init__���r���r ���ra���rq���rt���s���@r ���r���r������s0�����3#/<U\vw:�$(:�:r ���r���)jsonrQ���r���rP���r���rX���r���rf���rv���r���r���r��� alce_promptDocPr���r ���r ���<module>r������s���� �   �3 M�Mf :� :mF�m.:�:":6�:&:�:&� k r ���