§
    Û×jÛ  ã                  ó4  — d Z ddlmZ ddlZddlmZ ddlmZ dZdZ	 ed¬	¦  «         G d
„ d¦  «        ¦   «         Z
 ed¬	¦  «         G d„ d¦  «        ¦   «         Zd:d„Zd;d„Zd<d=d„Zd>d„Zd?d„Zd@d „Zd:d!„ZdAd%„ZdBd'„Zd@d(„ZdCd*„ZdDd.„ZdEd1„ZdFd5„ZdGd9„ZdS )HzBPrompt-enhancer input/output routing and comma-separated chaining.é    )ÚannotationsN)Ú	dataclass)ÚCallablea  The user input contains a JSON object with `prompt`, `alt_prompt`, and `requested_output`. Treat `prompt` and `alt_prompt` as input data, use both when relevant, and return only the new value for the field named by `requested_output`. Do not return JSON, field names, or an explanation.z‰This prompt enhancer chain produces one alt prompt per prompt, but the model does not declare alt_prompt_inherits_prompt_paragraphs=True.T)Úfrozenc                  ó.   — e Zd ZU ded<   ded<   ded<   dS )ÚPromptEnhancerStepÚstrÚmodeÚinput_fieldÚoutput_fieldN©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úGC:\Users\johnn\OneDrive\Documents\AI\shared\prompt_enhancer\chaining.pyr   r      s3   € € € € € € à€I€I�IØÐÐÑØÐÐÑÐÐr   r   c                  ó8   — e Zd ZU ded<   ded<   ded<   ded<   dS )ÚPromptEnhancerResultú	list[str]ÚpromptsÚalt_promptsÚboolÚprompt_changedÚalt_prompt_changedNr   r   r   r   r   r      sB   € € € € € € àÐÐÑØÐÐÑØÐÐÑØÐÐÑÐÐr   r   r
   r	   Úreturnc                óL   — t          | pd¦  «                             dd¦  «        S )NÚ ÚK)r	   Úreplace©r
   s    r   Úwithout_thinkingr#   "   s"   € Ýˆtˆz�r‰?Œ?×"Ò" 3¨Ñ+Ô+Ð+r   Úenabledr   c                ó6   — t          | ¦  «        } |r| r| › d�n| S )Nr    )r#   )r
   r$   s     r   Úwith_thinkingr&   &   s)   € Ý˜DÑ!Ô!€DØ Ð3 TÐ3ˆdˆ:ˆ:ˆ:ˆ:¨tÐ3r   r   FÚvalueÚchoicesr   ÚdefaultÚrequire_choicec                óÎ   ‡— t          | ¦  «        }||v r|s‰s|S |                     dd¦  «        }||k    r
||v r|s‰s|S ||v r|s‰s|S t          ˆfd„|D ¦   «         d¦  «        S )NÚRr   c              3  ó$   •K  — | ]
}|s‰°|V — Œd S ©Nr   )Ú.0Úchoicer*   s     €r   ú	<genexpr>z#normalize_choice.<locals>.<genexpr>5   s-   øè è € ÐNÐN˜F°ÐN¸~ÐN�ÐNÐNÐNÐNÐNÐNr   )r#   r!   Únext)r'   r(   r)   r*   r
   Úlegacy_modes      `  r   Únormalize_choicer4   +   sž   ø€ Ý˜EÑ"Ô"€DØˆw€€˜D€¨€Øˆà—,’,˜s BÑ'Ô'€KØ�dÒÐ˜{¨gÐ5Ð5¸;Ð5ÈnÐ5ØÐØ�'ÐÐ˜wÐ¨nÐØˆÝÐNÐNÐNÐN gÐNÑNÔNÐPRÑSÔSÐSr   c                ó¢   ‡— dt          | pd¦  «        v Šd„ t          | pd¦  «                             d¦  «        D ¦   «         }ˆfd„|D ¦   «         S )Nr    r   c                ó’   — g | ]D}t          |                     ¦   «         ¦  «        ¯#t          |                     ¦   «         ¦  «        ‘ŒES r   )r#   Ústrip)r/   Úparts     r   ú
<listcomp>zsplit_mode.<locals>.<listcomp>:   sD   € ÐuÐuÐu°ÕVfÐgk×gqÒgqÑgsÔgsÑVtÔVtÐuÕ˜dŸjšj™lœlÑ+Ô+ÐuÐuÐur   ú,c                ó0   •— g | ]}t          |‰¦  «        ‘ŒS r   )r&   )r/   r8   Úthinkings     €r   r9   zsplit_mode.<locals>.<listcomp>;   s#   ø€ Ð<Ð<Ð<¨d�M˜$ Ñ)Ô)Ð<Ð<Ð<r   )r	   Úsplit)r
   Úpartsr<   s     @r   Ú
split_moder?   8   s\   ø€ Ø•c˜$˜* "‘o”oÐ%€HØuÐu½¸D¸JÀB¹¼×8MÒ8MÈcÑ8RÔ8RÐuÑuÔu€EØ<Ð<Ð<Ð<°eÐ<Ñ<Ô<Ð<r   úlist[PromptEnhancerStep]c           	     óL  ‡— g }t          | ¦  «        D ]�Šˆfd„dD ¦   «         }t          |¦  «        dk    r t          dt          ‰¦  «        › d�¦  «        ‚dddœ                     |r|d	         nd
d¦  «        }|                     t          ‰|d‰v rdnd¦  «        ¦  «         Œ‘|S )Nc                ó   •— g | ]}|‰v ¯|‘Œ	S r   r   )r/   Úletterr8   s     €r   r9   zparse_mode.<locals>.<listcomp>A   s   ø€ ÐFÐFÐF F°vÀ°~°~˜°~°~°~r   ÚTLBé   úPrompt enhancer step 'z"' must use only one of T, L, or B.Ú
alt_promptÚboth)ÚLÚBr   ÚTÚpromptÚO)r?   ÚlenÚ
ValueErrorr#   ÚgetÚappendr   )r
   ÚstepsÚinput_lettersr   r8   s       @r   Ú
parse_moderT   >   sÓ   ø€ Ø€EÝ˜4Ñ Ô ð gð gˆØFÐFÐFÐF¨eÐFÑFÔFˆÝˆ}ÑÔ Ò!Ð!ÝÐpÕ6FÀtÑ6LÔ6LÐpÐpÐpÑqÔqÐqØ(¨vÐ6Ð6×:Ò:È}Ð;e¸=ÈÔ;KÐ;KÐbeÐgoÑpÔpˆØ�ŠÕ'¨¨kÈ3ÐRVÈ;È;¸<¸<Ð\dÑeÔeÑfÔfÐfÐfØ€Lr   c                ó`   ‡ — t          ‰ ¦  «        Š d‰ v pt          ˆ fd„dD ¦   «         ¦  «        S )Nr:   c              3  ó    •K  — | ]}|‰v V — Œ	d S r.   r   )r/   rC   r
   s     €r   r1   zuses_routing.<locals>.<genexpr>K   s'   øè è € ÐAÐA°˜f¨˜nÐAÐAÐAÐAÐAÐAr   ÚLBO)r#   Úanyr"   s   `r   Úuses_routingrY   I   s<   ø€ Ý˜DÑ!Ô!€DØ�$ˆ;ÐA�#ÐAÐAÐAÐA¸5ÐAÑAÔAÑAÔAÐAr   c                óT   — t          d„ t          | pd¦  «        D ¦   «         d¦  «        S )Nc              3  óB   K  — | ]}|                      ¦   «         ¯|V — Œd S r.   )Úisdigit)r/   rC   s     r   r1   z!profile_suffix.<locals>.<genexpr>O   s1   è è € ÐJÐJ˜F¸¿ºÑ9IÔ9IÐJ�ÐJÐJÐJÐJÐJÐJr   r   Ú0)r2   r	   r"   s    r   Úprofile_suffixr^   N   s+   € ÝÐJÐJ¥c¨$¨*°"¡o¤oÐJÑJÔJÈCÑPÔPÐPr   Ú	originalsÚoutput_countÚintc                ó6   — t          | ¦  «        dk    r| |z  n| S )NrE   )rN   )r_   r`   s     r   Úoriginals_for_outputsrc   R   s"   € Ý'*¨9¡~¤~¸Ò':Ð':ˆ9�|Ñ#Ð#À	ÐIr   Úvaluesc                óî   ‡ ‡‡— t          ‰ ¦  «        |k    r#t          dt          ‰ ¦  «        › d|› d�¦  «        ‚t          |t          ‰ ¦  «        ¦  «        \  ŠŠˆˆˆ fd„t          ‰ ¦  «        D ¦   «         S )NzCannot distribute z alt prompts across z	 prompts.c           	     ót   •— g | ]4\  }}t          ‰|t          ‰¦  «        d z
  k    r‰ndz   ¦  «        D ]}|‘ŒŒ5S )rE   r   )ÚrangerN   )r/   Úindexr'   Ú_Ú	remainderÚrepeatsrd   s       €€€r   r9   z!repeat_evenly.<locals>.<listcomp>Z   s|   ø€ ð  Bð  Bð  B‘l�e˜UÅÀwÐ_dÕhkÐlrÑhsÔhsÐvwÑhwÒ_wÐ_wÐR[ÐR[Ð}~ÑGñ  BAô  BAð  Bð  B¸AˆEð  Bð  Bð  Bð  Br   )rN   rO   ÚdivmodÚ	enumerate)rd   r`   rj   rk   s   ` @@r   Úrepeat_evenlyrn   V   sž   øøø€ Ý
ˆ6�{„{�\Ò!Ð!ÝÐf­c°&©k¬kÐfÐfÈ|ÐfÐfÐfÑgÔgÐgÝ ­c°&©k¬kÑ:Ô:Ñ€GˆYð Bð  Bð  Bð  Bð  Bð  B¥i°Ñ&7Ô&7ð  Bñ  Bô  Bð  Br   c                óN   — t          d„ t          | ¦  «        D ¦   «         ¦  «        S )Nc              3  ó>   K  — | ]}|j         d k    o|j        dv V — ŒdS )rG   )rL   rH   N)r   r   )r/   Ústeps     r   r1   z2requires_alt_prompt_inheritance.<locals>.<genexpr>^   s9   è è € ÐyÐyÐ`dˆtÔ  LÒ0Ð[°TÔ5EÐI[Ð5[ÐyÐyÐyÐyÐyÐyr   )rX   rT   r"   s    r   Úrequires_alt_prompt_inheritancerr   ]   s)   € ÝÐyÐyÕhrÐswÑhxÔhxÐyÑyÔyÑyÔyÐyr   Úprompt_countc                óB   — |dk    rt          | ¦  «        r	|st          ndS )NrE   r   )rr   ÚALT_PROMPT_INHERITANCE_ERROR)r
   rs   r$   s      r   Úvalidate_alt_prompt_inheritancerv   a   s.   € Ø+7¸!Ò+;Ð+;Õ@_Ð`dÑ@eÔ@eÐ+;ÐnuÐ+;Õ'Ð'Ð{}Ð}r   Úalt_prompt_countÚprompt_labelÚalt_prompt_labelc           	     ó0   — || k    rd|› d|› d|› d| › d�	ndS )Nú"z" contains z paragraphs, but "z" contains only ú.r   r   )rs   rw   rx   ry   s       r   Úvalidate_alt_prompt_countr}   e   sX   € ð BRð  Uaò  Bað  BaÐ}ÐÐ}Ð}Ð,<Ð}Ð}ÐP\Ð}Ð}ÐnzÐ}Ð}Ð}Ð}ð  gið  ir   Úinstructionsú
str | Nonec                óª   — dt          |pd¦  «        vr| S t          | pd¦  «                             ¦   «         › dt          › �                     ¦   «         S )NrJ   r   z

)r	   ÚrstripÚCOMBINED_INPUT_SYSTEM_SUFFIXr7   )r~   r
   s     r   Úappend_combined_input_contractrƒ   i   sW   € Ø
•#�d�j˜b‘/”/Ð!Ð!ØÐÝ�,Ð$ "Ñ%Ô%×,Ò,Ñ.Ô.ÐRÐRÕ4PÐRÐR×XÒXÑZÔZÐZr   r   r   r   c                ób  ‡ ‡‡— t          t          ‰ ¦  «        t          ‰¦  «        ¦  «        }t          ‰¦  «        |k    rt          ‰|¦  «        Št          ‰ ¦  «        d|fvr0t          dt          ‰ ¦  «        › dt          ‰¦  «        › d�¦  «        ‚ˆˆˆ fd„t	          |¦  «        D ¦   «         S )NrE   zCannot combine z prompts with z alt prompts.c           	     ó°   •— g | ]R}t          j        ‰t          ‰¦  «        d k    rdn|         ‰t          ‰¦  «        d k    rdn|         ‰dœd¬¦  «        ‘ŒSS )rE   r   )rL   rG   Úrequested_outputF)Úensure_ascii)ÚjsonÚdumpsrN   )r/   rh   r   r   r   s     €€€r   r9   z$_combined_inputs.<locals>.<listcomp>u   s±   ø€ ð  bð  bð  bð  LQ�DŒJ '­s°7©|¬|¸qÒ/@Ð/@¨!¨!ÀeÔ"LÐ\gÕmpÐq|Ñm}Ôm}ð  BCò  nCð  nCÐhiÐhið  INô  ]Oð  eqð  rð  rð  AFð  Gñ  Gô  Gð  bð  bð  br   )ÚmaxrN   rn   rO   rg   )r   r   r   Úcounts   ``` r   Ú_combined_inputsrŒ   o   sá   øøø€ Ý•�G‘”�c +Ñ.Ô.Ñ/Ô/€EÝ
ˆ;ÑÔ˜5Ò Ð Ý# K°Ñ7Ô7ˆÝ
ˆ7�|„|˜A˜u˜:Ð%Ð%ÝÐf­3¨w©<¬<ÐfÐfÅsÈ;ÑGWÔGWÐfÐfÐfÑgÔgÐgð bð  bð  bð  bð  bð  bõ  UZð  [`ñ  Uaô  Uað  bñ  bô  bð  br   Ú%alt_prompt_inherits_prompt_paragraphsÚenhanceú4Callable[[PromptEnhancerStep, list[str]], list[str]]c                ó~  — t          | ¦  «        }t          |¦  «        }t          |¦  «        pdg}dx}}	t          | t          |¦  «        |¦  «        }
|
rt	          |
¦  «        ‚|D ]Æ}|j        dk    r|}n$|j        dk    r|}nt          |||j        ¦  «        }t           |||¦  «        ¦  «        }t          |¦  «        t          |¦  «        k    rEt          dt          |j
        ¦  «        › dt          |¦  «        › dt          |¦  «        › d�¦  «        ‚|j        dk    r|d	}}ŒÂ|d	}	}ŒÇt          ||||	¦  «        S )
Nr   FrL   rG   rF   z' returned z outputs for z inputs.T)rT   Úlistrv   rN   rO   r   rŒ   r   ÚRuntimeErrorr#   r
   r   )r
   r   r   r�   rŽ   rR   Úcurrent_promptsÚcurrent_alt_promptsr   r   Úinheritance_errorrq   ÚinputsÚoutputss                 r   Ú	run_chainr˜   x   sŸ  € Ý�tÑÔ€EÝ˜7‘m”m€OÝ˜{Ñ+Ô+Ð3°¨tÐØ*/Ð/€NÐ'Ý7¸½cÀ/Ñ>RÔ>RÐTyÑzÔzÐØð ,ÝÐ*Ñ+Ô+Ð+àð Dð DˆØÔ˜xÒ'Ð'Ø$ˆFˆFØÔ Ò-Ð-Ø(ˆFˆFå% oÐ7JÈDÔL]Ñ^Ô^ˆFÝ�w�w˜t VÑ,Ô,Ñ-Ô-ˆÝˆw‰<Œ<�3˜v™;œ;Ò&Ð&Ýð   QÕ8HÈÌÑ8SÔ8Sð   Qð   QÕ`cÐdkÑ`lÔ`lð   Qð   QÕ{~ð  @Fñ  |Gô  |Gð   Qð   Qð   Qñ  Rô  Rð  RØÔ Ò(Ð(Ø.5°t˜^ˆOˆOà6=¸tÐ!3ÐÐå Ð1DÀnÐVhÑiÔiÐir   )r
   r	   r   r	   )r
   r	   r$   r   r   r	   )r   F)
r'   r	   r(   r   r)   r	   r*   r   r   r	   )r
   r	   r   r   )r
   r	   r   r@   )r
   r	   r   r   )r_   r   r`   ra   r   r   )rd   r   r`   ra   r   r   )r
   r	   rs   ra   r$   r   r   r	   )
rs   ra   rw   ra   rx   r	   ry   r	   r   r	   )r~   r   r
   r	   r   r   )r   r   r   r   r   r	   r   r   )r
   r	   r   r   r   r   r�   r   rŽ   r�   r   r   )Ú__doc__Ú
__future__r   rˆ   Údataclassesr   Útypingr   r‚   ru   r   r   r#   r&   r4   r?   rT   rY   r^   rc   rn   rr   rv   r}   rƒ   rŒ   r˜   r   r   r   ú<module>r�      sL  ðà HÐ Hà "Ð "Ð "Ð "Ð "Ð "à €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð ðkð ð
  kÐ ð €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð,ð ,ð ,ð ,ð4ð 4ð 4ð 4ð

Tð 
Tð 
Tð 
Tð 
Tð=ð =ð =ð =ðð ð ð ðBð Bð Bð Bð
Qð Qð Qð QðJð Jð Jð JðBð Bð Bð Bðzð zð zð zð~ð ~ð ~ð ~ðið ið ið ið[ð [ð [ð [ðbð bð bð bðjð jð jð jð jð jr   