§
    Ý
@gØ‰  ã                  ó€  — U d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ ddlmZ  G d„ de	¦  «        Z ed	d
¬¦  «        ZdGd„ZdHd„ZddgfdId„ZdJdKd„ZddgfdId„ZdGd„ZdGd„ZdGd„ZdGd„ZdGd„ZdGd „ZdLd$„ZddgfdMd'„ZdGd(„ZdNd*„ZdOd.„Z dPd0„Z!dQd2„Z"dRd4„Z#dSd6„Z$dTd8„Z%dUd9„Z&dVdWd=„Z'd>Z(d?e)d@<   dXdB„Z*dYdF„Z+dS )Zé    )ÚannotationsN)ÚAnyÚTypeVarÚCallableÚOptionalÚ
NamedTuple)Ú	TypeAliasé   )Úpandasc                  ón   — e Zd ZU ded<   dZded<   dZded<   dZded<   dZded	<   dZded
<   dZ	ded<   dS )ÚRemediationÚstrÚnameNzOptional[str]Úimmediate_msgÚnecessary_msgzOptional[Callable[[Any], Any]]Únecessary_fnÚoptional_msgÚoptional_fnÚ	error_msg)
Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   r   r   r   r   r   © ó    úJ/var/www/piapp/venv/lib/python3.11/site-packages/openai/lib/_validators.pyr   r      s�   € € € € € € Ø€I€I�IØ#'€MÐ'Ð'Ð'Ñ'Ø#'€MÐ'Ð'Ð'Ñ'Ø37€LÐ7Ð7Ð7Ñ7Ø"&€LÐ&Ð&Ð&Ñ&Ø26€KÐ6Ð6Ð6Ñ6Ø#€IÐ#Ð#Ð#Ñ#Ð#Ð#r   r   ÚOptionalDataFrameTzOptional[pd.DataFrame])ÚboundÚdfúpd.DataFrameÚreturnc                ó€   — d}t          | ¦  «        |k    rdnd}dt          | ¦  «        › d|› �}t          d|¬¦  «        S )z’
    This validator will only print out the number of examples and recommend to the user to increase the number of examples if less than 100.
    éd   Ú z§. In general, we recommend having at least a few hundred examples. We've found that performance tends to linearly increase for every doubling of the number of examplesz
- Your file contains z prompt-completion pairsÚnum_examples©r   r   )Úlenr   )r   ÚMIN_EXAMPLESÚoptional_suggestionr   s       r   Únum_examples_validatorr*      s`   € ð €Lõ ˆr‰7Œ7�lÒ"Ð"ð 	ˆð wð ð
 e­c°"©g¬gÐdÐdÐObÐdÐd€MÝ˜N¸-ÐHÑHÔHÐHr   Únecessary_columnr   c                ó¶   ‡‡— dd„Šd}d}d}d}‰| j         vr/‰d„ | j         D ¦   «         v rdˆˆfd	„}|}d
‰› d�}d‰› d�}nd‰› d�}t          d||||¬¦  «        S )z[
    This validator will ensure that the necessary column is present in the dataframe.
    r   r    Úcolumnr   r!   c                ó�   ‡— ˆfd„| j         D ¦   «         }|                      |d         ‰                     ¦   «         id¬¦  «         | S )Nc                ó^   •— g | ])}t          |¦  «                             ¦   «         ‰k    ¯'|‘Œ*S r   ©r   Úlower)Ú.0Úcr-   s     €r   ú
<listcomp>zInecessary_column_validator.<locals>.lower_case_column.<locals>.<listcomp>-   s1   ø€ ÐBÐBÐB�a­¨Q©¬¯ª©¬¸6Ò)AÐ)A�Ð)AÐ)AÐ)Ar   r   T)ÚcolumnsÚinplace)r5   Úrenamer1   )r   r-   Úcolss    ` r   Úlower_case_columnz5necessary_column_validator.<locals>.lower_case_column,   sJ   ø€ ØBÐBÐBÐB˜2œ:ÐBÑBÔBˆØ
�	Š	˜4 œ7 F§L¢L¡N¤NÐ3¸Tˆ	ÑBÔBÐBØˆ	r   Nc                óP   — g | ]#}t          |¦  «                             ¦   «         ‘Œ$S r   r0   ©r2   r3   s     r   r4   z.necessary_column_validator.<locals>.<listcomp>7   s&   € ÐCÐCÐC°1¥ A¡¤§¢¡¤ÐCÐCÐCr   c                ó   •—  ‰| ‰¦  «        S ©Nr   )r   r9   r+   s    €€r   Úlower_case_column_creatorz=necessary_column_validator.<locals>.lower_case_column_creator9   s   ø€ Ø(Ð(¨Ð-=Ñ>Ô>Ð>r   z
- The `z ` column/key should be lowercasezLower case column name to `ú`z^` column/key is missing. Please make sure you name your columns/keys appropriately, then retryr+   )r   r   r   r   r   )r   r    r-   r   r!   r    )r   r    r!   r    )r5   r   )r   r+   r   r   r   r   r>   r9   s    `     @r   Únecessary_column_validatorr@   '   sè   øø€ ð
ð ð ð ð
 €MØ€LØ€MØ€Ià˜rœzÐ)Ð)ØÐCÐC¸¼
ÐCÑCÔCÐCÐCð?ð ?ð ?ð ?ð ?ð ?ð ?ð 5ˆLØZÐ(8ÐZÐZÐZˆMØMÐ:JÐMÐMÐMˆMˆMð MÐ,ð  Mð  Mð  MˆIåØØ#Ø#Ø!Øðñ ô ð r   ÚpromptÚ
completionÚfieldsú	list[str]c                ó  ‡‡— g }d}d}d}t          | j        ¦  «        dk    rYˆfd„| j        D ¦   «         }d}|D ]/Šˆfd„|D ¦   «         }t          |¦  «        dk    r|d‰› d‰› d	�z  }Œ0d
|› |› �}d|› �}dˆfd„}t          d|||¬¦  «        S )zK
    This validator will remove additional columns from the dataframe.
    Nr
   c                ó   •— g | ]}|‰v¯|‘Œ	S r   r   )r2   r3   rC   s     €r   r4   z/additional_column_validator.<locals>.<listcomp>U   s   ø€ ÐGÐGÐG A°qÀ°°˜a°°°r   r$   c                ó   •— g | ]}‰|v ¯|‘Œ	S r   r   )r2   r3   Úacs     €r   r4   z/additional_column_validator.<locals>.<listcomp>X   s   ø€ Ð=Ð=Ð=˜!°R¸1°W°W�A°W°W°Wr   r   z9
  WARNING: Some of the additional columns/keys contain `z<` in their name. These will be ignored, and the column/key `z`` will be used instead. This could also result from a duplicate column/key in the provided file.zh
- The input file should contain exactly two columns/keys per row. Additional columns/keys present are: z Remove additional columns/keys: Úxr   r!   c                ó   •— | ‰         S r=   r   ©rI   rC   s    €r   r   z1additional_column_validator.<locals>.necessary_fn^   s   ø€ Ø�V”9Ðr   Úadditional_column©r   r   r   r   ©rI   r   r!   r   )r'   r5   r   )	r   rC   Úadditional_columnsr   r   r   Úwarn_messageÚdupsrH   s	    `      @r   Úadditional_column_validatorrR   K   s<  øø€ ð ÐØ€MØ€MØ€Lå
ˆ2Œ:�„˜ÒÐØGÐGÐGÐG¨¬ÐGÑGÔGÐØˆØ$ð 	Bð 	BˆBØ=Ð=Ð=Ð=Ð1Ð=Ñ=Ô=ˆDÝ�4‰yŒy˜1Š}ˆ}Øð  !BÐ]_ð  !Bð  !Bð  ^`ð  !Bð  !Bð  !Bñ  B�øð gð  EWð  gð  Yeð  gð  gˆØOÐ;MÐOÐOˆð	ð 	ð 	ð 	ð 	ð 	õ Ø Ø#Ø#Ø!ð	ñ ô ð r   Úfieldc                óè  ‡— d}d}d}| ‰                               d„ ¦  «                             ¦   «         s,| ‰                              ¦   «                              ¦   «         r|| ‰         dk    | ‰                              ¦   «         z  }|                      ¦   «         j        |                              ¦   «         }d‰› d|› �}dˆfd	„}d
t          |¦  «        › d‰› d�}t          d‰› �|||¬¦  «        S )zA
    This validator will ensure that no completion is empty.
    Nc                ó   — | dk    S )Nr$   r   ©rI   s    r   ú<lambda>z+non_empty_field_validator.<locals>.<lambda>q   s
   €   b¢€ r   r$   z
- `z?` column/key should not contain empty strings. These are rows: rI   r   r!   c                óR   •— | | ‰         dk                                   ‰g¬¦  «        S )Nr$   ©Úsubset)Údropna)rI   rS   s    €r   r   z/non_empty_field_validator.<locals>.necessary_fnv   s)   ø€ Ø�Q�u”X ’^Ô$×+Ò+°E°7Ð+Ñ;Ô;Ð;r   úRemove z rows with empty ÚsÚempty_rM   rN   )ÚapplyÚanyÚisnullÚreset_indexÚindexÚtolistr'   r   )r   rS   r   r   r   Ú
empty_rowsÚempty_indexess    `     r   Únon_empty_field_validatorrg   i   s(  ø€ ð €MØ€LØ€Mà	ˆ%„y‡‚Ð(Ð(Ñ)Ô)×-Ò-Ñ/Ô/ð P°2°e´9×3CÒ3CÑ3EÔ3E×3IÒ3IÑ3KÔ3Kð PØ˜”i 2’o¨"¨U¬)×*:Ò*:Ñ*<Ô*<Ñ=ˆ
ØŸšÑ(Ô(Ô.¨zÔ:×AÒAÑCÔCˆØu ÐuÐuÐfsÐuÐuˆð	<ð 	<ð 	<ð 	<ð 	<ð 	<ð P¥# mÑ"4Ô"4ÐOÐOÀuÐOÐOÐOˆåØ�eÐÐØ#Ø#Ø!ð	ñ ô ð r   c                ór  ‡— |                       ‰¬¦  «        }|                      ¦   «         j        |                              ¦   «         }d}d}d}t	          |¦  «        dk    rDdt	          |¦  «        › dd                     ‰¦  «        › d|› �}dt	          |¦  «        › d	�}dˆfd„}t          d|||¬¦  «        S )zY
    This validator will suggest to the user to remove duplicate rows if they exist.
    rY   Nr   ú
- There are z duplicated ú-z sets. These are rows: r\   z duplicate rowsrI   r   r!   c                ó0   •— |                       ‰¬¦  «        S )NrY   )Údrop_duplicatesrK   s    €r   r   z.duplicated_rows_validator.<locals>.optional_fn‘   s   ø€ Ø×$Ò$¨FÐ$Ñ3Ô3Ð3r   Úduplicated_rows©r   r   r   r   rN   )Ú
duplicatedrb   rc   rd   r'   Újoinr   )r   rC   rm   Úduplicated_indexesr   r   r   s    `     r   Úduplicated_rows_validatorrr   ƒ   s  ø€ ð —m’m¨6�mÑ2Ô2€OØŸšÑ)Ô)Ô/°Ô@×GÒGÑIÔIÐØ€MØ€LØ€Kå
ÐÑÔ Ò"Ð"ð L­Ð-?Ñ)@Ô)@ð  Lð  LÈcÏhÊhÐW]ÑN^ÔN^ð  Lð  Lð  xJð  Lð  LˆØI¥Ð%7Ñ!8Ô!8ÐIÐIÐIˆð	4ð 	4ð 	4ð 	4ð 	4ð 	4õ ØØ#Ø!Øð	ñ ô ð r   c                ó  ‡‡— d}d}d}t          | ¦  «        }|dk    rRdd„Š ‰| ¦  «        Št          ‰¦  «        dk    r0d	t          ‰¦  «        › d
‰› d�}dt          ‰¦  «        › d�}dˆˆfd„}t          d|||¬¦  «        S )zW
    This validator will suggest to the user to remove examples that are too long.
    Núopen-ended generationÚdr    r!   r   c                ó”   — |                       d„ d¬¦  «        }|                      ¦   «         j        |                              ¦   «         S )Nc                ó\   — t          | j        ¦  «        t          | j        ¦  «        z   dk    S )Ni'  )r'   rA   rB   rV   s    r   rW   zClong_examples_validator.<locals>.get_long_indexes.<locals>.<lambda>¨   s#   € ­c°!´(©m¬m½cÀ!Ä,Ñ>OÔ>OÑ.OÐRWÒ.W€ r   é   )Úaxis)r_   rb   rc   rd   )ru   Úlong_exampless     r   Úget_long_indexesz1long_examples_validator.<locals>.get_long_indexes§   s>   € ØŸGšGÐ$WÐ$WÐ^_˜GÑ`Ô`ˆMØ—=’=‘?”?Ô(¨Ô7×>Ò>Ñ@Ô@Ð@r   r   ri   z. examples that are very long. These are rows: zf
For conditional generation, and for classification the examples shouldn't be longer than 2048 tokens.r\   z long examplesrI   c                ó¶   •—  ‰| ¦  «        }‰|k    r3t           j                             dt          |¦  «        › d|› d�¦  «         |                      |¦  «        S )NzeThe indices of the long examples has changed as a result of a previously applied recommendation.
The z? long examples to be dropped are now at the following indices: ú
)ÚsysÚstdoutÚwriter'   Údrop)rI   Úlong_indexes_to_dropr{   Úlong_indexess     €€r   r   z,long_examples_validator.<locals>.optional_fn±   s–   ø€ Ø'7Ð'7¸Ñ':Ô':Ð$ØÐ#7Ò7Ð7Ý”J×$Ò$ð tõ  BEð  FZñ  B[ô  B[ð  tð  tð  \pð  tð  tð  tñô ð ð —v’vÐ2Ñ3Ô3Ð3r   rz   rn   )ru   r    r!   r   rN   )Úinfer_task_typer'   r   )r   r   r   r   Úft_typer{   rƒ   s        @@r   Úlong_examples_validatorr†   œ   sþ   øø€ ð €MØ€LØ€Kå˜bÑ!Ô!€GØÐ)Ò)Ð)ð	Að 	Að 	Að 	Að (Ð'¨Ñ+Ô+ˆåˆ|ÑÔ˜qÒ Ð ð d­S°Ñ->Ô->ð  dð  dÐnzð  dð  dð  dˆMØF¥S¨Ñ%6Ô%6ÐFÐFÐFˆLð4ð 4ð 4ð 4ð 4ð 4ð 4õ ØØ#Ø!Øð	ñ ô ð r   c                ó˜  ‡‡— d}d}d}d}dŠg d¢}|D ]p}|dk    r2| j         j                             d¦  «                             ¦   «         rŒ:| j         j                             |d¬¦  «                             ¦   «         rŒn|Š ‰                     dd¦  «        }t          | ¦  «        }|d	k    rt          d
¬¦  «        S d"d„Št          | j         d¬¦  «        }	| j         |	k                         ¦   «         rd|	› d�}t          d
|¬¦  «        S |	dk    r�|	                     dd¦  «        }
d|
› d�}t          |	¦  «        dk    r	|d|› d�z  }| j         j        dt          |	¦  «         …         j                             |	d¬¦  «                             ¦   «         r	|d|	› d�z  }nd}|	dk    rd|› d�}d#ˆˆfd„}t          d ||||¬!¦  «        S )$zœ
    This validator will suggest to add a common suffix to the prompt if one doesn't already exist in case of classification or conditional generation.
    Nz


### =>

)ú ->z

###

z

===

z

---

z

===>

z

--->

rˆ   r}   F©Úregexú\nrt   Úcommon_suffix©r   rI   r   Úsuffixr!   c                ó&   — | dxx         |z  cc<   | S ©NrA   r   ©rI   rŽ   s     r   Ú
add_suffixz2common_prompt_suffix_validator.<locals>.add_suffixâ   s   € Ø	ˆ(ˆˆŒ�vÑˆˆ‰Øˆr   ©ÚxfixzAll prompts are identical: `zt`
Consider leaving the prompts blank if you want to do open-ended generation, otherwise ensure prompts are different©r   r   r$   z 
- All prompts end with suffix `r?   é
   úR. This suffix seems very long. Consider replacing with a shorter suffix, such as `z5
  WARNING: Some of your prompts contain the suffix `zZ` more than once. We strongly suggest that you review your prompts and add a unique suffixa”  
- Your data does not contain a common separator at the end of your prompts. Having a separator string appended to the end of the prompt makes it clearer to the fine-tuned model where the completion should begin. See https://platform.openai.com/docs/guides/fine-tuning/preparing-your-dataset for more detail and examples. If you intend to do open-ended generation, then you should leave the prompts emptyzAdd a suffix separator `z` to all promptsc                ó   •—  ‰| ‰¦  «        S r=   r   ©rI   r’   Úsuggested_suffixs    €€r   r   z3common_prompt_suffix_validator.<locals>.optional_fnù   ó   ø€ Ø�:˜aÐ!1Ñ2Ô2Ð2r   Úcommon_completion_suffix©r   r   r   r   r   ©rI   r   rŽ   r   r!   r   rN   )
rA   r   Úcontainsr`   Úreplacer„   r   Úget_common_xfixÚallr'   )r   r   r   r   r   Úsuffix_optionsÚsuffix_optionÚdisplay_suggested_suffixr…   rŒ   Úcommon_suffix_new_line_handledr’   rš   s              @@r   Úcommon_prompt_suffix_validatorr§   Á   s¯  øø€ ð €IØ€MØ€LØ€Kð (Ððð ð €Nð (ð ð ˆØ˜EÒ!Ð!ØŒyŒ}×%Ò% dÑ+Ô+×/Ò/Ñ1Ô1ð ØØŒ9Œ=×!Ò! -°uÐ!Ñ=Ô=×AÒAÑCÔCð 	ØØ(ÐØØ/×7Ò7¸¸eÑDÔDÐå˜bÑ!Ô!€GØÐ)Ò)Ð)Ý Ð0Ñ0Ô0Ð0ðð ð ð õ $ B¤I°HÐ=Ñ=Ô=€MØ
Œ	�]Ò"×'Ò'Ñ)Ô)ð Fð x°=ð  xð  xð  xˆ	Ý ¸9ÐEÑEÔEÐEà˜ÒÐØ)6×)>Ò)>¸tÀUÑ)KÔ)KÐ&Ø]Ð<ZÐ]Ð]Ð]ˆÝˆ}ÑÔ Ò"Ð"Øð  Nð  sKð  Nð  Nð  Nñ  NˆMØŒ9Œ=Ð.�C Ñ.Ô.Ð.Ð.Ô/Ô3×<Ò<¸]ÐRWÐ<ÑXÔX×\Ò\Ñ^Ô^ð 	@Øð  @ÐVcð  @ð  @ð  @ñ  @ˆMøð pˆà˜ÒÐØ\Ð2JÐ\Ð\Ð\ˆð	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3õ Ø'Ø#Ø!ØØðñ ô ð r   c                óX  ‡‡— d}d}d}d}t          | j        d¬¦  «        Š‰dk    rt          d¬¦  «        S dd„Š| j        ‰k                         ¦   «         rt          d¬¦  «        S ‰dk    r+d‰› d�}|t	          ‰¦  «        k     r|dz  }d‰› d�}dˆˆfd„}t          d|||¬¦  «        S )zd
    This validator will suggest to remove a common prefix from the prompt if a long one exist.
    é   NÚprefixr“   r$   Úcommon_prefixr�   rI   r   r!   c                óP   — | d         j         t          |¦  «        d …         | d<   | S r�   ©r   r'   )rI   rª   s     r   Úremove_common_prefixz<common_prompt_prefix_validator.<locals>.remove_common_prefix  s%   € Ø˜”k”o¥c¨&¡k¤k m mÔ4ˆˆ(‰Øˆr   z"
- All prompts start with prefix `r?   zÒ. Fine-tuning doesn't require the instruction specifying the task, or a few-shot example scenario. Most of the time you should only add the input data into the prompt, and the desired output into the completionúRemove prefix `z` from all promptsc                ó   •—  ‰| ‰¦  «        S r=   r   )rI   r«   r®   s    €€r   r   z3common_prompt_prefix_validator.<locals>.optional_fn!  s   ø€ Ø+Ð+¨A¨}Ñ=Ô=Ð=r   Úcommon_prompt_prefixrn   )rI   r   rª   r   r!   r   rN   )r¡   rA   r   r¢   r'   )r   ÚMAX_PREFIX_LENr   r   r   r«   r®   s        @@r   Úcommon_prompt_prefix_validatorr³     s#  øø€ ð €Nà€MØ€LØ€Kå# B¤I°HÐ=Ñ=Ô=€MØ˜ÒÐÝ Ð0Ñ0Ô0Ð0ðð ð ð ð 	Œ	�]Ò"×'Ò'Ñ)Ô)ð 1å Ð0Ñ0Ô0Ð0à˜ÒÐØN¸mÐNÐNÐNˆØ�C Ñ.Ô.Ò.Ð.Øð  rñ  rˆMØN¨]ÐNÐNÐNˆLð>ð >ð >ð >ð >ð >ð >õ Ø#Ø#Ø!Øð	ñ ô ð r   c                ól  ‡‡‡— d}t          | j        d¬¦  «        Št          ‰¦  «        dk    o‰d         dk    Št          ‰¦  «        |k     rt          d¬¦  «        S dd„Š| j        ‰k                         ¦   «         rt          d¬¦  «        S d‰› d�}d‰› d�}dˆˆˆfd„}t          d|||¬¦  «        S )zh
    This validator will suggest to remove a common prefix from the completion if a long one exist.
    é   rª   r“   r   ú r«   r�   rI   r   Ú	ws_prefixr!   c                óp   — | d         j         t          |¦  «        d …         | d<   |rd| d         › �| d<   | S )NrB   r¶   r­   )rI   rª   r·   s      r   r®   z@common_completion_prefix_validator.<locals>.remove_common_prefix7  sC   € Ø˜Lœ/Ô-­c°&©k¬k¨m¨mÔ<ˆˆ,‰Øð 	4à3 ! L¤/Ð3Ð3ˆAˆl‰OØˆr   z&
- All completions start with prefix `z_`. Most of the time you should only add the output data into the completion, without any prefixr¯   z` from all completionsc                ó   •—  ‰| ‰‰¦  «        S r=   r   )rI   r«   r®   r·   s    €€€r   r   z7common_completion_prefix_validator.<locals>.optional_fnE  s   ø€ Ø#Ð# A }°iÑ@Ô@Ð@r   Úcommon_completion_prefixrn   )rI   r   rª   r   r·   r   r!   r   rN   )r¡   rB   r'   r   r¢   )r   r²   r   r   r   r«   r®   r·   s        @@@r   Ú"common_completion_prefix_validatorr»   ,  s(  øøø€ ð €Nå# B¤M¸ÐAÑAÔA€MÝ�MÑ"Ô" QÒ&ÐB¨=¸Ô+;¸sÒ+B€IÝ
ˆ=ÑÔ˜NÒ*Ð*Ý Ð0Ñ0Ô0Ð0ðð ð ð ð 	Œ˜Ò&×+Ò+Ñ-Ô-ð 1å Ð0Ñ0Ô0Ð0ð m¸mð  mð  mð  m€MØJ ]ÐJÐJÐJ€LðAð Að Að Að Að Að Að Aõ Ø'Ø#Ø!Øð	ñ ô ð r   c                ó:  ‡‡— d}d}d}d}t          | ¦  «        }|dk    s|dk    rt          d¬¦  «        S t          | j        d¬¦  «        }| j        |k                         ¦   «         rd|› d	|› d
�}t          d|¬¦  «        S dŠg d¢}|D ]8}| j        j                             |d¬¦  «                             ¦   «         rŒ6|Š ‰                     dd¦  «        }	d"d„Š|dk    r�|                     dd¦  «        }
d|
› d
�}t          |¦  «        dk    r	|d|	› d
�z  }| j        j        dt          |¦  «         …         j                             |d¬¦  «                             ¦   «         r	|d|› d�z  }nd}|dk    rd|	› d�}d#ˆˆfd„}t          d ||||¬!¦  «        S )$z 
    This validator will suggest to add a common suffix to the completion if one doesn't already exist in case of classification or conditional generation.
    Nrt   ÚclassificationrŒ   r�   rŽ   r“   z All completions are identical: `zJ`
Ensure completions are different, otherwise the model will just repeat `r?   r•   z [END])	r}   ú.z ENDz***z+++z&&&z$$$z@@@z%%%Fr‰   r}   r‹   rI   r   r!   c                ó&   — | dxx         |z  cc<   | S ©NrB   r   r‘   s     r   r’   z6common_completion_suffix_validator.<locals>.add_suffixv  s   € Ø	ˆ,ˆˆŒ˜6Ñ!ˆˆ‰Øˆr   r$   z$
- All completions end with suffix `r–   r—   z9
  WARNING: Some of your completions contain the suffix `zU` more than once. We suggest that you review your completions and add a unique endingaH  
- Your data does not contain a common ending at the end of your completions. Having a common ending string appended to the end of the completion makes it clearer to the fine-tuned model where the completion should end. See https://platform.openai.com/docs/guides/fine-tuning/preparing-your-dataset for more detail and examples.zAdd a suffix ending `z` to all completionsc                ó   •—  ‰| ‰¦  «        S r=   r   r™   s    €€r   r   z7common_completion_suffix_validator.<locals>.optional_fnˆ  r›   r   rœ   r�   rž   rN   )
r„   r   r¡   rB   r¢   r   rŸ   r`   r    r'   )r   r   r   r   r   r…   rŒ   r£   r¤   r¥   r¦   r’   rš   s              @@r   Ú"common_completion_suffix_validatorrÂ   P  s›  øø€ ð €IØ€MØ€LØ€Kå˜bÑ!Ô!€GØÐ)Ò)Ð)¨WÐ8HÒ-HÐ-HÝ Ð0Ñ0Ô0Ð0å# B¤M¸ÐAÑAÔA€MØ
Œ˜Ò&×+Ò+Ñ-Ô-ð Fð b°}ð  bð  bð  R_ð  bð  bð  bˆ	Ý ¸9ÐEÑEÔEÐEð  Ðð
ð 
ð 
€Nð (ð ð ˆØŒ=Ô×%Ò% m¸5Ð%ÑAÔA×EÒEÑGÔGð 	ØØ(ÐØØ/×7Ò7¸¸eÑDÔDÐðð ð ð ð ˜ÒÐØ)6×)>Ò)>¸tÀUÑ)KÔ)KÐ&ØaÐ@^ÐaÐaÐaˆÝˆ}ÑÔ Ò"Ð"Øð  Nð  sKð  Nð  Nð  Nñ  NˆMØŒ=ÔÐ2¥ MÑ 2Ô 2Ð2Ð2Ô3Ô7×@Ò@ÀÐV[Ð@Ñ\Ô\×`Ò`ÑbÔbð 	Øð  ÐZgð  ð  ð  ñ  ˆMøð dˆà˜ÒÐØ]Ð/GÐ]Ð]Ð]ˆð	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3õ Ø'Ø#Ø!ØØðñ ô ð r   c                óÔ   — dd„}d}d}d}| j         j        dd…                              ¦   «         dk    s| j         j        d         d         dk    rd	}d
}|}t	          d|||¬¦  «        S )zŽ
    This validator will suggest to add a space at the start of the completion if it doesn't already exist. This helps with tokenization.
    rI   r   r!   c                óD   — | d                               d„ ¦  «        | d<   | S )NrB   c                ó:   — |                       d¦  «        rdnd| z   S )Nr¶   r$   )Ú
startswith)r]   s    r   rW   zLcompletions_space_start_validator.<locals>.add_space_start.<locals>.<lambda>š  s"   € ÀÇÂÈcÑARÔARÐ;[¸2¸2ÐX[Ð_`Ñ:`€ r   )r_   rV   s    r   Úadd_space_startz:completions_space_start_validator.<locals>.add_space_start™  s&   € Ø˜Lœ/×/Ò/Ð0`Ð0`ÑaÔaˆˆ,‰Øˆr   Nrx   r   r¶   zæ
- The completion should start with a whitespace character (` `). This tends to produce better results due to the tokenization we use. See https://platform.openai.com/docs/guides/fine-tuning/preparing-your-dataset for more detailsz=Add a whitespace character to the beginning of the completionÚcompletion_space_startrn   rN   )rB   r   ÚnuniqueÚvaluesr   )r   rÇ   r   r   r   s        r   Ú!completions_space_start_validatorrË   ”  sš   € ð
ð ð ð ð €LØ€KØ€Mà	„}Ô˜˜!˜Ô×$Ò$Ñ&Ô&¨!Ò+Ð+¨r¬}Ô/CÀAÔ/FÀqÔ/IÈSÒ/PÐ/Pð BˆØVˆØ%ˆÝØ%Ø#Ø!Øð	ñ ô ð r   r-   r   úRemediation | Nonec                ó  ‡— dˆfd„}| ‰                               d„ ¦  «                             ¦   «         }| ‰                               d„ ¦  «                             ¦   «         }|dz  |k    rt          dd	‰› d
‰› d�d‰› d�|¬¦  «        S dS )zt
    This validator will suggest to lowercase the column values, if more than a third of letters are uppercase.
    rI   r   r!   c                óL   •— | ‰         j                              ¦   «         | ‰<   | S r=   r0   )rI   r-   s    €r   Ú
lower_casez(lower_case_validator.<locals>.lower_case²  s#   ø€ Ø�f”I”M×'Ò'Ñ)Ô)ˆˆ&‰	Øˆr   c                ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  ój   K  — | ].}|                      ¦   «         ¯|                     ¦   «         ¯*d V — Œ/dS ©rx   N)ÚisalphaÚisupperr;   s     r   ú	<genexpr>z9lower_case_validator.<locals>.<lambda>.<locals>.<genexpr>¶  óA   è è € Ð0]Ð0]°qÀÇÂÁÄÐ0]ÐQR×QZÒQZÑQ\ÔQ\Ð0]°Ð0]Ð0]Ð0]Ð0]Ð0]Ð0]r   ©ÚsumrV   s    r   rW   z&lower_case_validator.<locals>.<lambda>¶  ó   € ­SÐ0]Ð0]¸AÐ0]Ñ0]Ô0]Ñ-]Ô-]€ r   c                ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  ój   K  — | ].}|                      ¦   «         ¯|                     ¦   «         ¯*d V — Œ/dS rÒ   )rÓ   Úislowerr;   s     r   rÕ   z9lower_case_validator.<locals>.<lambda>.<locals>.<genexpr>·  rÖ   r   r×   rV   s    r   rW   z&lower_case_validator.<locals>.<lambda>·  rÙ   r   r
   rÏ   z
- More than a third of your `z%` column/key is uppercase. Uppercase z÷s tends to perform worse than a mixture of case encountered in normal language. We recommend to lower case the data if that makes sense in your domain. See https://platform.openai.com/docs/guides/fine-tuning/preparing-your-dataset for more detailsz'Lowercase all your data in column/key `r?   rn   NrN   )r_   rØ   r   )r   r-   rÏ   Úcount_upperÚcount_lowers    `   r   Úlower_case_validatorrß   ­  sÛ   ø€ ð
ð ð ð ð ð ð �V”*×"Ò"Ð#]Ð#]Ñ^Ô^×bÒbÑdÔd€KØ�V”*×"Ò"Ð#]Ð#]Ñ^Ô^×bÒbÑdÔd€Kà�Q�˜Ò$Ð$ÝØð i¸Fð  ið  iÐioð  ið  ið  iØLÀ6ÐLÐLÐLØ"ð	
ñ 
ô 
ð 	
ð ˆ4r   Úfnameú'tuple[pd.DataFrame | None, Remediation]c                óŒ  — d}d}d}d}d}t           j                             | ¦  «        �rþ	 |                      ¦   «                              d¦  «        s'|                      ¦   «                              d¦  «        rk|                      ¦   «                              d¦  «        rdnd\  }}d|› d�}d|› d	�}t          j        | |t          ¬
¦  «                             d¦  «        }�nó|                      ¦   «                              d¦  «        rgd}d}t          j	        | ¦  «        }	|	j
        }
t          |
¦  «        dk    r|dz  }t          j        | t          ¬¦  «                             d¦  «        }�ne|                      ¦   «                              d¦  «        rŽd}d}t          | d¦  «        5 }|                     ¦   «         }t          j        d„ |                     d¦  «        D ¦   «         |t          ¬¦  «                             d¦  «        }ddd¦  «         n# 1 swxY w Y   �n°|                      ¦   «                              d¦  «        rxt          j        | dt          ¬¦  «                             d¦  «        }t          |¦  «        dk    r4d}d}t          j        | t          ¬¦  «                             d¦  «        }�n�n|                      ¦   «                              d¦  «        rµ	 t          j        | dt          ¬¦  «                             d¦  «        }t          |¦  «        dk    r/t          j        | t          ¬¦  «                             d¦  «        }nd}d}ns# t$          $ r1 t          j        | t          ¬¦  «                             d¦  «        }Y n9w xY wd }d!| v r&|d"| › d#|                      d!¦  «        d$         › d%�z  }n	|d"| › d&�z  }nV# t$          t&          f$ r< |                      d!¦  «        d$                              ¦   «         }d'| › d(|› d)|› d*�}Y n
w xY wd+| › d,�}t+          d-|||¬.¦  «        }||fS )/zÕ
    This function will read a file saved in .csv, .json, .txt, .xlsx or .tsv format using pandas.
     - for .xlsx it will read the first sheet
     - for .txt it will assume completions and split on newline
    Nz.csvz.tsv)ÚCSVú,)ÚTSVú	z=
- Based on your file extension, your file is formatted as a z filezYour format `z` will be converted to `JSONL`)ÚsepÚdtyper$   z.xlsxzH
- Based on your file extension, your file is formatted as an Excel filez/Your format `XLSX` will be converted to `JSONL`rx   z¥
- Your Excel file contains more than one sheet. Please either save as csv or ensure all data is present in the first sheet. WARNING: Reading only the first sheet...)rè   z.txtz9
- Based on your file extension, you provided a text filez.Your format `TXT` will be converted to `JSONL`Úrc                ó   — g | ]}d |g‘ŒS )r$   r   )r2   Úlines     r   r4   z#read_any_format.<locals>.<listcomp>è  s   € ÐDÐDÐD¨˜"˜d˜ÐDÐDÐDr   r}   )r5   rè   ú.jsonlT)Úlinesrè   z^
- Your JSONL file appears to be in a JSON format. Your file will be converted to JSONL formatz/Your format `JSON` will be converted to `JSONL`z.jsonz^
- Your JSON file appears to be in a JSONL format. Your file will be converted to JSONL formatz]Your file must have one of the following extensions: .CSV, .TSV, .XLSX, .TXT, .JSON or .JSONLr¾   z Your file `z` ends with the extension `.éÿÿÿÿz` which is not supported.z` is missing a file extension.zYour file `z!` does not appear to be in valid z9 format. Please ensure your file is formatted as a valid z file.zFile z does not exist.Úread_any_format)r   r   r   r   )ÚosÚpathÚisfiler1   ÚendswithÚpdÚread_csvr   ÚfillnaÚ	ExcelFileÚsheet_namesr'   Ú
read_excelÚopenÚreadÚ	DataFrameÚsplitÚ	read_jsonÚ
ValueErrorÚ	TypeErrorÚupperr   )rà   rC   Úremediationr   r   r   r   Úfile_extension_strÚ	separatorÚxlsÚsheetsÚfÚcontents                r   rï   rï   Ã  sì  € ð €KØ€MØ€MØ€IØ	€Bå	„w‡~‚~�eÑÔñ @4ð<	vØ�{Š{‰}Œ}×%Ò% fÑ-Ô-ð 7V°·²±´×1GÒ1GÈÑ1OÔ1Oð 7VØ@EÇÂÁÄ×@VÒ@VÐW]Ñ@^Ô@^Ð0q°°ÐdqÑ-Ð" IànÐUgÐnÐnÐnð ð !cÐ0BÐ bÐ bÐ b�Ý”[ ¨I½SÐAÑAÔA×HÒHÈÑLÔL�‘Ø—’‘”×'Ò'¨Ñ0Ô0ð 0VØ k�Ø Q�Ý”l 5Ñ)Ô)�Øœ�Ý�v‘;”; ’?�?Ø!ð  &Nñ  N�MÝ”] 5µÐ4Ñ4Ô4×;Ò;¸BÑ?Ô?�‘Ø—’‘”×'Ò'¨Ñ/Ô/ð (VØ \�Ø P�Ý˜% Ñ%Ô%ð !¨ØŸfšf™hœh�GÝœØDÐD°·²¸dÑ0CÔ0CÐDÑDÔDØ &Ý!ðñ ô ÷ ’f˜R‘j”jð	 ð!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !ùð —’‘”×'Ò'¨Ñ1Ô1ð VÝ”\ %¨t½3Ð?Ñ?Ô?×FÒFÀrÑJÔJ�Ý�r‘7”7˜a’<�<ð %F�MØ$U�MÝœ eµ3Ð7Ñ7Ô7×>Ò>¸rÑBÔB�B‘BáØ—’‘”×'Ò'¨Ñ0Ô0ð VðCåœ e°4½sÐCÑCÔC×JÒJÈ2ÑNÔN�BÝ˜2‘w”w !’|�|åœ\¨%µsÐ;Ñ;Ô;×BÒBÀ2ÑFÔF˜˜ð )J˜Ø(Y˜øøÝ!ð Cð Cð Cåœ eµ3Ð7Ñ7Ô7×>Ò>¸rÑBÔB�B�B�BðCøøøð
 tð ð ˜%�<�<Øð  "C°ð  "Cð  "CÐSX×S^ÒS^Ð_bÑScÔScÐdfÔSgð  "Cð  "Cð  "Cñ  C�I�IàÐ!U°Ð!UÐ!UÐ!UÑU�Iøøå�IÐ&ð 	vð 	vð 	vØ!&§¢¨SÑ!1Ô!1°"Ô!5×!;Ò!;Ñ!=Ô!=Ðð v eð  vð  vÐN`ð  vð  vð  \nð  vð  vð  vˆIˆIˆIð	vøøøð
 4˜EÐ3Ð3Ð3ˆ	åØØ#Ø#Øð	ñ ô €Kð ˆ{ˆ?Ðs^   ¬FO Æ.A!HÈO ÈHÈO È"HÈ#CO Ë/A5M% Í$O Í%8N ÎO ÎN Î 8O ÏA
P&Ð%P&c                ó^   — t          | ¦  «        }d}|dk    rd|› d�}t          d|¬¦  «        S )zÓ
    This validator will infer the likely fine-tuning format of the data, and display it to the user if it is classification.
    It will also suggest to use ada and explain train/validation split benefits.
    Nr½   zK
- Based on your data it seems like you're trying to fine-tune a model for zã
- For classification, we recommend you try one of the faster and cheaper models, such as `ada`
- For classification, you can estimate the expected model performance by keeping a held out dataset, which is not used for trainingr%   r&   )r„   r   )r   r…   r   s      r   Úformat_inferrer_validatorr
    sR   € õ
 ˜bÑ!Ô!€GØ€MØÐ"Ò"Ð"ð VÐgnð  Vð  Vð  VˆÝ˜N¸-ÐHÑHÔHÐHr   r  c                ó*  — |j         �Dt          j                             d|j        › d|j         › d�¦  «         t          j        d¦  «         |j        �$t          j                             |j        ¦  «         |j        �|                     | ¦  «        } | S )zs
    This function will apply a necessary remediation to a dataframe, or print an error message if one exists.
    Nz

ERROR in z validator: z

Aborting...rx   )	r   r~   Ústderrr€   r   Úexitr   r   r   )r   r  s     r   Úapply_necessary_remediationr  (  s�   € ð ÔÐ(ÝŒ
×ÒÐm¨Ô)9ÐmÐmÀ{ÔG\ÐmÐmÐmÑnÔnÐnÝŒ�‰ŒˆØÔ Ð,ÝŒ
×Ò˜Ô2Ñ3Ô3Ð3ØÔÐ+Ø×%Ò% bÑ)Ô)ˆØ€Ir   Ú
input_textÚauto_acceptÚboolc                óÎ   — t           j                             | ¦  «         |r!t           j                             d¦  «         dS t          ¦   «                              ¦   «         dk    S )NzY
TÚn)r~   r   r€   Úinputr1   )r  r  s     r   Úaccept_suggestionr  6  sR   € Ý„J×Ò�ZÑ Ô Ð Øð ÝŒ
×Ò˜ÑÔÐØˆtÝ‰7Œ7�=Š=‰?Œ?˜cÒ!Ð!r   útuple[pd.DataFrame, bool]c                óð   — d}d|j         › d�}|j         �0t          ||¦  «        r |j        €J ‚|                     | ¦  «        } d}|j        �(t          j                             d|j        › d�¦  «         | |fS )zc
    This function will apply an optional remediation to a dataframe, based on the user input.
    Fz- [Recommended] z [Y/n]: NTz- [Necessary] r}   )r   r  r   r   r~   r   r€   )r   r  r  Úoptional_appliedr  s        r   Úapply_optional_remediationr  >  sš   € ð ÐØF KÔ$<ÐFÐFÐF€JØÔÐ+Ý˜Z¨Ñ5Ô5ð 	$ØÔ*Ð6Ð6Ð6Ø×(Ò(¨Ñ,Ô,ˆBØ#ÐØÔ Ð,ÝŒ
×ÒÐG¨+Ô*CÐGÐGÐGÑHÔHÐHØÐÐÐr   ÚNonec                ó"  — t          | ¦  «        }d}|dk    rt          | ¦  «        }|dz  }n-|                      d¬¦  «                             ¦   «         }|dz  }dd„} ||dz   ¦  «        }t          j                             d|› d�¦  «         dS )z?
    Estimate the time it'll take to fine-tune the dataset
    g      ð?r½   g
×£p=
÷?T)rc   g‘í|?5^ª?ÚtimeÚfloatr!   r   c                óÐ   — | dk     rt          | d¦  «        › d�S | dk     rt          | dz  d¦  «        › d�S | dk     rt          | dz  d¦  «        › d�S t          | dz  d¦  «        › d�S )	Né<   r
   z secondsi  z minutesi€Q z hoursz days)Úround)r  s    r   Úformat_timez.estimate_fine_tuning_time.<locals>.format_time]  s‹   € Ø�"Š9ˆ9Ý˜D !‘n”nÐ.Ð.Ð.Ð.Ø�DŠ[ˆ[Ý˜D 2™I qÑ)Ô)Ð3Ð3Ð3Ð3Ø�EŠ\ˆ\Ý˜D 4™K¨Ñ+Ô+Ð3Ð3Ð3Ð3å˜D 5™L¨!Ñ,Ô,Ð3Ð3Ð3Ð3r   éŒ   z:Once your model starts training, it'll approximately take z~ to train a `curie` model, and less for `ada` and `babbage`. Queue will approximately take half an hour per job ahead of you.
N)r  r  r!   r   )r„   r'   Úmemory_usagerØ   r~   r   r€   )r   Ú	ft_formatÚexpected_timer%   Úsizer!  Útime_strings          r   Úestimate_fine_tuning_timer(  P  sÉ   € õ   Ñ#Ô#€IØ€MØÐ$Ò$Ð$Ý˜2‘w”wˆØ$ tÑ+ˆˆà�Š TˆÑ*Ô*×.Ò.Ñ0Ô0ˆØ˜v™ˆð4ð 4ð 4ð 4ð �+˜m¨cÑ1Ñ2Ô2€KÝ„J×Òð 	RÀ[ð  	Rð  	Rð  	Rñô ð ð ð r   rý   c                óš   ‡ ‡— |rddgndg}d}	 |dk    rd|› d�ndŠˆ ˆfd„|D ¦   «         }t          d	„ |D ¦   «         ¦  «        s|S |d
z  }Œ>)NÚ_trainÚ_validr$   r   Tz (ú)c                ój   •— g | ]/}t           j                             ‰¦  «        d          › d|› ‰› d�‘Œ0S )r   Ú	_preparedrì   )rð   rñ   Úsplitext)r2   rŽ   rà   Úindex_suffixs     €€r   r4   z!get_outfnames.<locals>.<listcomp>r  sE   ø€ ÐxÐxÐxÐek�rœw×/Ò/°Ñ6Ô6°qÔ9Ð`Ð`ÀFÐ`ÈLÐ`Ð`Ð`ÐxÐxÐxr   c              3  óT   K  — | ]#}t           j                             |¦  «        V — Œ$d S r=   )rð   rñ   rò   )r2   r  s     r   rÕ   z get_outfnames.<locals>.<genexpr>s  s0   è è € Ð?Ð?¨•2”7—>’> !Ñ$Ô$Ð?Ð?Ð?Ð?Ð?Ð?r   rx   )r`   )rà   rý   ÚsuffixesÚiÚcandidate_fnamesr0  s   `    @r   Úget_outfnamesr5  m  s�   øø€ Ø',Ð6�˜(Ð#Ð#°2°$€HØ	€AðØ$%¨¢E E�y˜A�y�y�y�y¨rˆØxÐxÐxÐxÐxÐowÐxÑxÔxÐÝÐ?Ð?Ð.>Ð?Ñ?Ô?Ñ?Ô?ð 	$Ø#Ð#Ø	ˆQ‰ˆðr   útuple[int, object]c                ó”   — | j                              ¦   «         }d }|dk    r$| j                              ¦   «         j        d         }||fS )Nr
   r   )rB   rÉ   Úvalue_countsrc   )r   Ú	n_classesÚ	pos_classs      r   Úget_classification_hyperparamsr;  x  sI   € Ø”×%Ò%Ñ'Ô'€IØ€IØ�A‚~€~Ø”M×.Ò.Ñ0Ô0Ô6°qÔ9ˆ	Ø�iÐÐr   Úany_remediationsc                ó   — t          | ¦  «        }t          | j        d¬¦  «        }t          | j        d¬¦  «        }d}d}|dk    rt	          ||¦  «        rd}d}	|                     dd	¦  «        }
|                     dd	¦  «        }t          |¦  «        d
k    rd|› d�nd}d}|s?|s=t          j         	                    d|› d|	› d|
› d|› d�	¦  «         t          | ¦  «         dS t	          ||¦  «        �rút          ||¦  «        }|�rt          |¦  «        dk    rd|d
         v r
d|d         v sJ ‚d}t          t          | ¦  «        |z
  t          t          | ¦  «        dz  ¦  «        ¦  «        }|                      |d¬¦  «        }|                      |j        ¦  «        }|ddg                              |d
         dddd¬¦  «         |ddg                              |d         dddd¬¦  «         t%          | ¦  «        \  }}|	dz  }	|dk    r
|	d |› d�z  }	nF|	d!|› �z  }	n=t          |¦  «        dk    sJ ‚| ddg                              |d
         dddd¬¦  «         |rd"ndd#z   d$                     |¦  «        z   }|rd%|d         › d�nd}t          |
¦  «        d
k    rdnd&|
› d�}t          j         	                    d'|› d(|d
         › d|› |	› d)|› |› d�¦  «         t          | ¦  «         dS t          j         	                    d*¦  «         dS )+aQ  
    This function will write out a dataframe to a file, if the user would like to proceed, and also offer a fine-tuning command with the newly created file.
    For classification it will optionally ask the user if they would like to split the data into train/valid files, and modify the suggested command to include the valid set.
    rŽ   r“   FzQ- [Recommended] Would you like to split into training and validation set? [Y/n]: r½   Tr$   r}   r‹   r   z Make sure to include `stop=["z;"]` so that the generated texts ends at the expected place.z@

Your data will be written to a new JSONL file. Proceed [Y/n]: zK
You can use your file for fine-tuning:
> openai api fine_tunes.create -t "ú"ue   

After youâ€™ve fine-tuned a model, remember that your prompt has to end with the indicator string `zX` for the model to start generating completions, rather than continuing with the prompt.r
   ÚtrainÚvalidrx   iè  gš™™™™™é?é*   )r  Úrandom_staterA   rB   ÚrecordsN)rí   ÚorientÚforce_asciiÚindentz! --compute_classification_metricsz" --classification_positive_class "z --classification_n_classes r]   z to `z` and `z -v "uc   After youâ€™ve fine-tuned a model, remember that your prompt has to end with the indicator string `z
Wrote modified filezd`
Feel free to take a look!

Now use that file when fine-tuning:
> openai api fine_tunes.create -t "z

z#Aborting... did not write the file
)r„   r¡   rA   rB   r  r    r'   r~   r   r€   r(  r5  ÚmaxÚintÚsampler�   rc   Úto_jsonr;  rp   )r   rà   r<  r  r$  Úcommon_prompt_suffixrœ   rý   r  Úadditional_paramsÚ%common_prompt_suffix_new_line_handledÚ)common_completion_suffix_new_line_handledÚoptional_ending_stringÚfnamesÚMAX_VALID_EXAMPLESÚn_trainÚdf_trainÚdf_validr9  r:  Úfiles_stringÚvalid_stringÚseparator_reminders                          r   Úwrite_out_filerX  €  s–  € õ
   Ñ#Ô#€IÝ*¨2¬9¸8ÐDÑDÔDÐÝ.¨r¬}À8ÐLÑLÔLÐà€EØd€JØÐ$Ò$Ð$Ý˜Z¨Ñ5Ô5ð 	ØˆEàÐØ,@×,HÒ,HÈÈuÑ,UÔ,UÐ)Ø0H×0PÒ0PÐQUÐW\Ñ0]Ô0]Ð-õ Ð8Ñ9Ô9¸AÒ=Ð=ð 	PÐ)Rð  	Pð  	Pð  	Pð  	Pàð ð V€Jàð .A Eð .AÝŒ
×Òð xÐ\að  xð  xÐduð  xð  xð  _Dð  xð  xð  ^tð  xð  xð  xñ	
ô 	
ð 	
õ 	" "Ñ%Ô%Ð%Ð%Ð%å	˜: {Ñ	3Ô	3ñ (AÝ˜u eÑ,Ô,ˆØñ 	Ý�v‘;”; !Ò#Ð#¨°6¸!´9Ð(<Ð(<ÀÈFÐSTÌIÐAUÐAUÐAUÐAUØ!%ÐÝ�#˜b™'œ'Ð$6Ñ6½½CÀ¹G¼GÀc¹MÑ8JÔ8JÑKÔKˆGØ—y’y 7¸�yÑ<Ô<ˆHØ—w’w˜xœ~Ñ.Ô.ˆHØ�h Ð-Ô.×6Ò6Ø�q”	 ¨iÀUÐSWð 7ñ ô ð ð �h Ð-Ô.×6Ò6Ø�q”	 ¨iÀUÐSWð 7ñ ô ð õ $BÀ"Ñ#EÔ#EÑ ˆI�yØÐ!DÑDÐØ˜AŠ~ˆ~Ø!Ð%VÈ)Ð%VÐ%VÐ%VÑVÐ!Ð!à!Ð%OÀIÐ%OÐ%OÑOÐ!Ð!å�v‘;”; !Ò#Ð#Ð#Ð#Ø�˜,Ð'Ô(×0Ò0Ø�q”	 ¨iÀUÐSWð 1ñ ô ð ð
  %Ð,˜˜¨"°Ñ7¸9¿>º>È&Ñ;QÔ;QÑRˆØ/4Ð<Ð+˜v aœyÐ+Ð+Ð+Ð+¸"ˆõ Ð8Ñ9Ô9¸QÒ>Ð>ð ˆBð wð  x]ð  wð  wð  wð 	õ
 	Œ
×Òð z Lð  zð  zð  [að  bcô  [dð  zð  zð  gsð  zð  uFð  zð  zð  L^ð  zð  `vð  zð  zð  zñ	
ô 	
ð 	
õ 	" "Ñ%Ô%Ð%Ð%Ð%åŒ
×ÒÐ?Ñ@Ô@Ð@Ð@Ð@r   c                óä   — d}t          | j        j                             ¦   «         ¦  «        dk    rdS t          | j                             ¦   «         ¦  «        t          | ¦  «        |z  k     rdS dS )z>
    Infer the likely fine-tuning task type from the data
    é   r   rt   r½   zconditional generation)rØ   rA   r   r'   rB   Úunique)r   ÚCLASSIFICATION_THRESHOLDs     r   r„   r„   Ë  sl   € ð  !ÐÝ
ˆ2Œ9Œ=×ÒÑÔÑÔ 1Ò$Ð$Ø&Ð&å
ˆ2Œ=×ÒÑ!Ô!Ñ"Ô"¥S¨¡W¤WÐ/GÑ%GÒGÐGØÐà#Ð#r   rŽ   Úseriesr”   c                ó  — d}	 |dk    r | j         t          |¦  «        dz    d…         n| j         dt          |¦  «        dz   …         }|                     ¦   «         dk    rn ||j        d         k    rn|j        d         }Œ~|S )zQ
    Finds the longest common suffix or prefix of all the values in a series
    r$   TrŽ   rx   Nr   )r   r'   rÉ   rÊ   )r]  r”   Úcommon_xfixÚcommon_xfixess       r   r¡   r¡   Ù  s«   € ð €Kð	2à59¸XÒ5EÐ5EˆFŒJ�˜[Ñ)Ô)¨AÑ-Ð.Ð0Ð0Ô1Ð1È6Ì:ÐVlÕX[Ð\gÑXhÔXhÐklÑXlÐVlÔKmð 	ð × Ò Ñ"Ô" aÒ'Ð'ØØ˜MÔ0°Ô3Ò3Ð3Øà'Ô.¨qÔ1ˆKð	2ð Ðr   z,Callable[[pd.DataFrame], Remediation | None]r	   Ú	Validatorúlist[Validator]c                 óš   — t           d„ d„ t          t          t          t          t
          d„ d„ t          t          t          t          t          gS )Nc                ó"   — t          | d¦  «        S r�   ©r@   rV   s    r   rW   z get_validators.<locals>.<lambda>ñ  s   € Õ,¨Q°Ñ9Ô9€ r   c                ó"   — t          | d¦  «        S rÀ   re  rV   s    r   rW   z get_validators.<locals>.<lambda>ò  s   € Õ,¨Q°Ñ=Ô=€ r   c                ó"   — t          | d¦  «        S r�   ©rß   rV   s    r   rW   z get_validators.<locals>.<lambda>ø  s   € Õ& q¨(Ñ3Ô3€ r   c                ó"   — t          | d¦  «        S rÀ   rh  rV   s    r   rW   z get_validators.<locals>.<lambda>ù  s   € Õ& q¨,Ñ7Ô7€ r   )r*   rR   rg   r
  rr   r†   r§   r³   r»   rÂ   rË   r   r   r   Úget_validatorsrj  î  sE   € åØ9Ð9Ø=Ð=Ý#Ý!Ý!Ý!ÝØ3Ð3Ø7Ð7Ý&Ý&Ý*Ý*Ý)ðð r   Ú
validatorsÚwrite_out_file_funcúCallable[..., Any]c                óî  — g }|�|                      |¦  «         |D ]4} || ¦  «        }|�%|                      |¦  «         t          | |¦  «        } Œ5t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }	d}
|r=t          j                             d¦  «         |D ]}t          | ||¦  «        \  } }|
p|}
Œnt          j                             d¦  «         |
p|	} || |||¦  «         d S )Nc                ó.   — g | ]}|j         €|j        ®|‘ŒS r=   )r   r   ©r2   r  s     r   r4   z$apply_validators.<locals>.<listcomp>  s3   € ð 	
ð 	
ð 	
àØÔ'Ð3°{Ô7PÐ7\ð à7\Ð7\Ð7\r   c                ó    — g | ]}|j         ®	|‘ŒS r=   )r   rp  s     r   r4   z$apply_validators.<locals>.<listcomp>  s    € ÐgÐgÐg˜ÀÔAZÐAfˆÐAfÐAfÐAfr   Fz?

Based on the analysis we will perform the following actions:
z

No remediations found.
)Úappendr  r`   r~   r   r€   r  )r   rà   r  rk  r  rl  Úoptional_remediationsÚ	validatorÚ&any_optional_or_necessary_remediationsÚany_necessary_appliedÚany_optional_appliedr  Ú!any_optional_or_necessary_applieds                r   Úapply_validatorsry    sa  € ð 02ÐØÐØ×$Ò$ [Ñ1Ô1Ð1Øð >ð >ˆ	Ø�i ‘m”mˆØÐ"Ø!×(Ò(¨Ñ5Ô5Ð5Ý,¨R°Ñ=Ô=ˆBøå-0ð	
ð 	
à4ð	
ñ 	
ô 	
ñ.ô .Ð*õ  ØgÐgÐ(=ÐgÑgÔgñô Ðð !Ðà-ð 9ÝŒ
×ÒÐ]Ñ^Ô^Ð^Ø0ð 	Lð 	LˆKÝ#=¸bÀ+È{Ñ#[Ô#[Ñ ˆBÐ Ø#7Ð#KÐ;KÐ Ð ð	Lõ 	Œ
×ÒÐ7Ñ8Ô8Ð8à(<Ð(UÐ@UÐ%àÐ˜˜EÐ#DÀkÑRÔRÐRÐRÐRr   )r   r    r!   r   )r   r    r+   r   r!   r   )r   r    rC   rD   r!   r   )rB   )r   r    rS   r   r!   r   )r   r    r-   r   r!   rÌ   )rà   r   rC   rD   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ý   r  r!   rD   )r   r    r!   r6  )
r   r    rà   r   r<  r  r  r  r!   r  )r   r    r!   r   )rŽ   )r]  r   r”   r   r!   r   )r!   rb  )r   r    rà   r   r  rÌ   rk  rb  r  r  rl  rm  r!   r  ),Ú
__future__r   rð   r~   Útypingr   r   r   r   r   Útyping_extensionsr	   Ú_extrasr   rô   r   r   r*   r@   rR   rg   rr   r†   r§   r³   r»   rÂ   rË   rß   rï   r
  r  r  r  r(  r5  r;  rX  r„   r¡   ra  r   rj  ry  r   r   r   ú<module>r~     s6  ðà "Ð "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø 
€
€
€
Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'à "Ð "Ð "Ð "Ð "Ð "ð$ð $ð $ð $ð $�*ñ $ô $ð $ð �WÐ1Ð9QÐRÑRÔRÐ ðIð Ið Ið Ið!ð !ð !ð !ðH HPÐQ]ÐF^ð ð ð ð ð ð<ð ð ð ð ð4 FNÈ|ÐD\ð ð ð ð ð ð2"ð "ð "ð "ðJAð Að Að AðH$ð $ð $ð $ðN!ð !ð !ð !ðHAð Að Að AðHð ð ð ð2ð ð ð ð. &.¨|Ð$<ðVð Vð Vð Vð Vðr	Ið 	Ið 	Ið 	Iðð ð ð ð"ð "ð "ð "ð ð  ð  ð  ð$ð ð ð ð:ð ð ð ð ð  ð  ð  ðHAð HAð HAð HAðV$ð $ð $ð $ðð ð ð ð ð$ F€	Ð EÐ EÐ EÑ Eðð ð ð ð('Sð 'Sð 'Sð 'Sð 'Sð 'Sr   