Ë
    CØïi”(  ã                   ó�   — 	 d dl Z dZer*d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ  G d„ d	«      Zy#  dZY Œ=xY w)
é    NTF)ÚPath)ÚFileÚFineTune)Únumpy)Úpandasc                   óÊ   — e Zd ZdZes	 ed«       ndZdZe	 	 	 	 	 dd„«       Z	ed„ «       Z
ed„ «       Zed„ «       Zed	„ «       Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zy)ÚWandbLoggerzL
    Log fine-tunes to [Weights & Biases](https://wandb.me/openai-docs)
    z@Logging requires wandb to be installed. Run `pip install wandb`.NFc           
      ó€  — t         sy|r,t        j                  |¬«      }|j                  dd«       |g}n@t        j                  «       }|r|j                  d«      €t        d«       y|d   |�| ndd }|€|€dnd}	|D �cg c]  } | j                  |||||	fi |¤Ž‘Œ }
}|	st        |
«      st        d«       y	c c}w )
aD  
        Sync fine-tunes to Weights & Biases.
        :param id: The id of the fine-tune (optional)
        :param n_fine_tunes: Number of most recent fine-tunes to log when an id is not provided. By default, every fine-tune is synced.
        :param project: Name of the project where you're sending runs. By default, it is "GPT-3".
        :param entity: Username or team name where you're sending runs. By default, your default entity is used, which is usually your username.
        :param force: Forces logging and overwrite existing wandb run of the same fine-tune.
        N©ÚidÚeventsÚdatazNo fine-tune has been retrievedFTz'No new successful fine-tunes were foundu&   ðŸŽ‰ wandb sync completed successfully)	ÚWANDB_AVAILABLEr   ÚretrieveÚpopÚlistÚgetÚprintÚ_log_fine_tuneÚany)Úclsr   Ún_fine_tunesÚprojectÚentityÚforceÚkwargs_wandb_initÚ	fine_tuneÚ
fine_tunesÚshow_individual_warningsÚfine_tune_loggeds              úM/var/www/html/aiagents/fe/lib/python3.12/site-packages/openai/wandb_logger.pyÚsynczWandbLogger.sync    sõ   € õ& ØáÜ ×)Ñ)¨RÔ0ˆIØ�M‰M˜( DÔ)Ø#˜‰Jô "Ÿ™›ˆJÙ §¡°Ó!7Ð!?ÜÐ7Ô8ØØ# FÑ+Ø!-Ð!9�‘¸tÐEðˆJð �Z LÐ$8‰E¸dð 	!ð (ö

ð ð ˆC×ÑØØØØØ(ñð $óð

Ðð 

ñ (´Ð4DÔ0EÜÐ;Ô<à7ùò

s   ÂB;c           
      óÂ  — |j                  d«      }|j                  d«      }|dk7  r|rt        d|› d|› d�«       y 	 |d   d   d   }	t        j                  |	¬	«      j	                  d
«      }
|› d|› �}|�|› d|› �}| j                  |«      }|rx|j                  j                  d«      }|rS|dk(  r)t        d|› d|j                  › �«       |st        d«       nt        d|› d�«       |dk7  s|rt        d|› d�«       |dk(  r|sy t        j                  dd| j                  |«      ||||dœ|¤Ž t        j                  t        j                  |
«      «      }|j                  «       D ]s  \  }}|j!                  «       D ��ci c]  \  }}t#        j$                  |«      rŒ||“Œ  }}}|j'                  d«      }|�t)        |«      }t        j*                  ||¬«       Œu |j                  d«      }|�|t        j                  d<   | j-                  |||«       dt        j                  d<   t        j.                  «        y#  |rt        d|› d�«       Y y xY wc c}}w )Nr   ÚstatusÚ	succeededz
Fine-tune z has the status "z" and will not be loggedÚresult_filesr   r   úutf-8z& has no results and will not be loggedú/z) has already been logged successfully at zXUse "--force" in the CLI or "force=True" in python if you want to overwrite previous runzA run for fine-tune z3 was previously created but didn't end successfullyz.A new wandb run will be created for fine-tune z% and previous run will be overwrittenz	fine-tune)Újob_typeÚconfigr   r   Únamer   Ústep)r,   Úfine_tuned_modelT© )r   r   r   ÚdownloadÚdecodeÚ_get_wandb_runÚsummaryÚurlÚwandbÚinitÚ_get_configÚpdÚread_csvÚioÚStringIOÚiterrowsÚitemsÚnpÚisnanr   ÚintÚlogÚ_log_artifactsÚfinish)r   r   r   r   r   r   r   Úfine_tune_idr$   Ú
results_idÚresultsÚrun_pathÚ	wandb_runÚwandb_statusÚ
df_resultsÚ_ÚrowÚkÚvÚmetricsr,   r-   s                         r!   r   zWandbLogger._log_fine_tuneZ   s”  € ð !—}‘} TÓ*ˆØ—‘˜xÓ(ˆð �[Ò Ù'ÜØ   Ð.?À¸xÐG_Ð`ôð ð	Ø" >Ñ2°1Ñ5°dÑ;ˆJÜ—m‘m zÔ2×9Ñ9¸'ÓBˆGð �Y˜a ˜~Ð.ˆØÐØ ˜  8 *Ð-ˆHØ×&Ñ& xÓ0ˆ	ÙØ$×,Ñ,×0Ñ0°Ó:ˆLÙ'Ø ;Ò.ÜØ$ \ NÐ2[Ð\e×\iÑ\iÐ[jÐkôñ !ÜØvõô Ø.¨|¨nÐ<oÐpôð   ;Ò.±%ÜØHÈÈÐV{Ð|ôð ˜{Ò*±5Øô 	�
‰
ð 	
Ø Ø—?‘? 9Ó-ØØØØñ	
ð  ò	
ô —[‘[¤§¡¨WÓ!5Ó6ˆ
Ø ×)Ñ)Ó+ò 	*‰FˆAˆsØ(+¯	©	«×G¡  1¼2¿8¹8ÀA½;�q˜!‘tÐGˆGÑGØ—;‘;˜vÓ&ˆDØÐÜ˜4“y�Ü�I‰I�g DÖ)ð	*ð %Ÿ=™=Ð);Ó<ÐØÐ'Ø0@ŒE�M‰MÐ,Ñ-ð 	×Ñ˜9 g¨vÔ6ð #.Œ�‰�hÑä�‰ŒØøð}	Ù'Ü˜
 < .Ð0VÐWÔXÙüóV Hs   ¾0I ÆIÆ#IÉIc                 ój   — | j                   s't        j                  «       rd| _         y t        d«      ‚y )NTzYou need to log in to wandb)Ú
_logged_inr4   ÚloginÚ	Exception)r   s    r!   Ú_ensure_logged_inzWandbLogger._ensure_logged_in³   s*   € à�~Š~Ü�{‰{Œ}Ø!%�•äÐ =Ó>Ð>ð	 ó    c                 óÂ   — | j                  «        	 | j                  €t        j                  «       | _        | j                  j	                  |«      S # t
        $ r Y y w xY w©N)rS   Ú
_wandb_apir4   ÚApiÚrunrR   )r   rF   s     r!   r1   zWandbLogger._get_wandb_run»   sQ   € à×ÑÔð	Ø�~‰~Ð%Ü!&§¡£�”Ø—>‘>×%Ñ% hÓ/Ð/øÜò 	Ùð	úó   ’?A Á	AÁAc                 óÂ   — | j                  «        	 | j                  €t        j                  «       | _        | j                  j	                  |«      S # t
        $ r Y y w xY wrV   )rS   rW   r4   rX   ÚartifactrR   )r   Úartifact_paths     r!   Ú_get_wandb_artifactzWandbLogger._get_wandb_artifactÅ   sQ   € à×ÑÔð	Ø�~‰~Ð%Ü!&§¡£�”Ø—>‘>×*Ñ*¨=Ó9Ð9øÜò 	Ùð	úrZ   c                 óî   — t        |«      }dD ].  }|j                  |«      sŒt        ||   «      sŒ$||   d   ||<   Œ0 |j                  d«      r%t        j                  j	                  |d   «      |d<   |S )N)Útraining_filesÚvalidation_filesr&   r   Ú
created_at)Údictr   ÚlenÚdatetimeÚfromtimestamp)r   r   r*   Úkeys       r!   r6   zWandbLogger._get_configÏ   st   € ä�i“ˆØIò 	-ˆCØ�z‰z˜#�¤3 v¨c¡{Õ#3Ø$ S™k¨!™n��s’ð	-ð �:‰:�lÔ#Ü#+×#4Ñ#4×#BÑ#BÀ6È,ÑCWÓ#XˆF�<Ñ ØˆrT   c                 ó  — |j                  d«      rt        |d   «      r|d   d   nd }|j                  d«      rt        |d   «      r|d   d   nd }|ddf|ddffD ]  \  }}}|€Œ
| j                  |||||«       Œ  |j                  d«      }	t        j                  dd|¬«      }
|
j                  d	d
d¬«      5 }t        j                  ||d¬«       d d d «       t        j                  j                  |
d|	g¬«       y # 1 sw Y   Œ-xY w)Nr`   r   ra   ÚtrainÚvalidr   Úfine_tune_details©ÚtypeÚmetadatazfine_tune_details.jsonÚwr'   ©ÚmodeÚencodingé   )ÚindentÚlatest©Úaliases)
r   rd   Ú_log_artifact_inputsr4   ÚArtifactÚnew_fileÚjsonÚdumprY   Úlog_artifact)r   r   r   r   Útraining_fileÚvalidation_fileÚfileÚprefixÚartifact_typerC   r\   Úfs               r!   rA   zWandbLogger._log_artifactsÙ   sI  € ð
 �}‰}Ð-Ô.´3°yÐAQÑ7RÔ3Sð Ð&Ñ'¨Ò*àð 	ð �}‰}Ð/Ô0´S¸ÐCUÑ9VÔ5Wð Ð(Ñ)¨!Ò,àð 	ð ˜GÐ%5Ð6Ø˜gÐ'9Ð:ð,
ò 	WÑ'ˆD�&˜-ð ÑØ×(Ñ(¨¨v°}ÀgÈvÕVð	Wð !—}‘} TÓ*ˆÜ—>‘>ØØ$Øô
ˆð
 ×ÑØ$¨3¸ð ó 
ð 	.àÜ�I‰I�i ¨1Õ-÷	.ô 	�	‰	×ÑØØ˜|Ð,ð 	õ 	
÷		.ð 	.ús   Â;D Ä D	c                 ó¸  — |d   }t        |d   «      j                  }t        |d   «      j                  }|› d|› �}	t        j                  dd|	«      }	|}
|› d|	› d|
› �}|�|› d|› �}| j                  |«      }|€Ç	 t        j                  |¬«      j                  d	«      }t        j                  |	||¬«      }|j                  |dd	¬«      5 }|j                  |«       d d d «       	 | j                  |«      \  }}|j                  ||«       t        j                   j#                  d|› �|i«       ||j$                  d<   n=t        j                   j#                  d|› �|j$                  j'                  d«      i«       t        j(                  j+                  |d|
g¬«       y #  t        d
|› d�«       Y y xY w# 1 sw Y   ŒÛxY w#  t        d
|› d�«       Y ŒYxY w)Nr   Úfilenameú-z[^a-zA-Z0-9_\-.]rJ   r(   ú:r   r'   zFile zX could not be retrieved. Make sure you are allowed to download training/validation filesrl   ro   rp   Ún_r<   z' could not be read as a valid JSON fileru   rv   )r   r+   ÚstemÚreÚsubr^   r   r/   r0   r   r4   ry   rz   ÚwriteÚ_make_tableÚaddr*   Úupdatern   r   rY   Úuse_artifact)r   r€   r�   r‚   r   r   Úfile_idr…   r‰   Úartifact_nameÚartifact_aliasr]   r\   Úfile_contentrƒ   ÚtableÚn_itemss                    r!   rx   z WandbLogger._log_artifact_inputsý   sè  € à�t‘*ˆÜ˜˜ZÑ(Ó)×.Ñ.ˆÜ�D˜Ñ$Ó%×*Ñ*ˆð "˜( ! H :Ð.ˆäŸ™Ð2°C¸ÓGˆØ ˆØ"˜) 1 ] O°1°^Ð4DÐEˆØÐØ%˜h a¨ Ð7ˆMØ×*Ñ*¨=Ó9ˆð ÐðÜ#Ÿ}™}°Ô8×?Ñ?ÀÓH�ô —~‘~ m¸-ÐRVÔWˆHØ×"Ñ" 8°#ÀÐ"ÓHð &ÈAØ—‘˜Ô%÷&ðPØ!$§¡°Ó!>‘��wØ—‘˜U DÔ)Ü—‘×#Ñ# r¨&¨ ]°GÐ$<Ô=Ø-4�×!Ñ! 'Ò*ô
 �L‰L×Ñ 2 f X °×0AÑ0A×0EÑ0EÀgÓ0NÐ OÔPä�	‰	×Ñ˜x°(¸NÐ1KÐÕLøð+ÜØ˜G˜9Ð$|Ð}ôñ ú÷&ð &ûðPÜ˜˜g˜YÐ&MÐNÖOús%   Á=%F$ ÃF:Ã)AG Æ$F7Æ:GÇGc                 óš   — t        j                  t        j                  |«      dd¬«      }t	        j
                  |¬«      t        |«      fS )NÚrecordsT)ÚorientÚlines)Ú	dataframe)r7   Ú	read_jsonr9   r:   r4   ÚTablerd   )r   r”   Údfs      r!   r�   zWandbLogger._make_table)  s5   € ä�\‰\œ"Ÿ+™+ lÓ3¸IÈTÔRˆÜ�{‰{ RÔ(¬#¨b«'Ð1Ð1rT   )NNzGPT-3NF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   rW   rP   Úclassmethodr"   r   rS   r1   r^   r6   rA   rx   r�   r.   rT   r!   r	   r	      sê   „ ññ ÙÐPÕQàˆ
Øˆ
àð ØØØØò78ó ð78ðr ñVó ðVðp ñ?ó ð?ð ñó ðð ñó ðð ñó ðð ñ!
ó ð!
ðF ñ)Mó ð)MðV ñ2ó ñ2rT   r	   )r4   r   re   r9   r{   rŠ   Úpathlibr   Úopenair   r   Úopenai.datalib.numpy_helperr   r=   Úopenai.datalib.pandas_helperr   r7   r	   r.   rT   r!   ú<module>r¨      sG   ððÛà€Oñ
 ÛÛÛÛÝç%Ý7Ý9÷W2ò W2øð!Ø‚Oús	   ‚? ¿A