
    {hz                      J   d dl mZmZ d dlmZ d dlmZ d dlZd dlZd dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ  e       Z ej&                         Z e       Z G d
 ded      Zdee   defdZdedefdZd?dedee   fdZdedefdZej=                  dd       ej>                  dd       ej>                  dd       ej>                  dd      fdeded e ddfd!       Z!ej=                  d"       ejD                  d#       ej>                  d$d%       ej>                  dd&d'       ej>                  dd(d'       ej>                  dd)d'       ej>                  dd*      fd+ed,ed-ee   d.ee   d/ee#   d0ee   ddfd1       Z$ej=                  d2       ejD                  d3       ej>                  d$d%       ej>                  d4d       ej>                  dd&d'       ej>                  dd(d'       ej>                  dd)d'       ej>                  dd5       ej>                  dd6      fd7ed,eded-ee   d.ee   d/ee#   d8ee   d9ee   ddfd:       Z%ej=                  d;       ejD                  d<      fd+eddfd=       Z&e'd>k(  r e        yy)@    )Optional	TypedDict)OpenAI)HyperparametersN)Live)Table)Console)datetime)FineTuningJobc                   8    e Zd ZU eed<   ee   ed<   ee   ed<   y)FuneTuningParamshyperparametersvalidation_filesuffixN)__name__
__module____qualname__r   __annotations__r   str     T/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/instructor/cli/jobs.pyr   r      s    $$c]"SMr   r   F)totaljobsreturnc                 l   t        | d d      } t        dd      }|j                  dd	       |j                  d
       |j                  dd       |j                  dd       |j                  d       |j                  d       |j                  d       |j                  d       | D ]  }dddddj                  |j                  d      }|j
                  r(t        t        j                  |j
                              nd}|j                  |j                  | dt        |j                         d|j                   dt        t        j                  |j                              ||j                  |j                  t        |j                  j                         |j"                          |S )Nc                     | j                   S N)
created_at)xs    r   <lambda>z generate_table.<locals>.<lambda>   s
    all r   T)keyreversez!OpenAI Fine Tuning Job Monitoringz=Automatically refreshes every 5 seconds, press Ctrl+C to exit)titlecaptionzJob IDdim)styleStatuszCreation Timeright)justifyzCompletion Timez
Model NamezFile IDEpochsz
Base Modelu   ⏳u   ✅u   ❌u   🚫)running	succeededfailed	cancelledu   ❓zN/Az []z[/])sortedr   
add_columngetstatusfinished_atr   r
   fromtimestampadd_rowidstatus_colorr   fine_tuned_modeltraining_filer   n_epochsmodel)r   tablejobstatus_emojir5   s        r   generate_tablerA      s   $2DAD1OE
 
XU+	X	_g6	&8	\"	Y	X	\" 
	

 #cjj%
  	 =@OOC&&s78QV 	 	FFnB|CJJ78#**SI&&s~~67  ##,,-II		

. Lr   r4   c                 .    ddddj                  | d      S )Nyellowgreenred)r,   r-   r.   white)r3   )r4   s    r   r9   r9   D   s!    gGKK r      limitc                 j    t         j                  j                  j                  |       j                  S )NrH   )clientfine_tuningr   listdatarJ   s    r   get_jobsrO   J   s(    ""''e'4999r   file_idc                 X    t         j                  j                  |       }|j                  S r   )rK   filesretriever4   )rP   responses     r   get_file_statusrU   N   s     ||$$W-H??r   rM   z7Monitor the status of the most recent fine-tuning jobs.)namehelpz#Limit the number of jobs to monitor)rW   zPolling interval in secondszEnable or disable screen outputpollscreenc                     t        |       }t        t        |      d|      5 }	 t        |       }|j                  t        |             t	        j
                  |       <# 1 sw Y   yxY w)zA
    Monitor the status of the most recent fine-tuning jobs.
    rJ      )refresh_per_secondrY   N)rO   r   rA   updatetimesleep)rH   rX   rY   r   
live_tables        r   watchra   S   sb     % D	nT"q	H J%(DnT23JJt  s   >A""A+z-Create a fine-tuning job from an existing ID.z"ID of the existing fine-tuning jobzgpt-3.5-turbozModel to use for fine-tuningz Number of epochs for fine-tuning)rW   show_defaultzBatch size for fine-tuningz(Learning rate multiplier for fine-tuningz"ID of the uploaded validation filer8   r=   r<   
batch_sizelearning_rate_multipliervalidation_file_idc                 T   i }|||d<   |||d<   |||d<   t         j                  d|  dd      5  t        j                  j                  j                  | |||r|nd       }t         j                  d	|j                          d d d        t        d
dd       y # 1 sw Y   xY w)Nr<   rc   rd   z-[bold green]Creating fine-tuning job from ID ...dotsspinner)r;   r=   r   r   -[bold green]Fine-tuning job created with ID: rG   r[   FrH   rX   rY   )	consoler4   rK   rL   r   createlogr8   ra   )r8   r=   r<   rc   rd   re   hyperparameters_dictr?   s           r   create_from_idrq   g   s    & -/+3Z(-7\*+;S78	
7t3? 
 
 	N   %%,,02D.$	 - 
 	CCFF8LM	N 
%(	N 	Ns   ABB'z%Create a fine-tuning job from a file.z Path to the file for fine-tuningr[   zPath to the validation filezSuffix to identify the modelfiler   model_suffixc                    i }|||d<   |||d<   |||d<   t        | d      5 }	t        j                  j                  |	d      }
d d d        
j                  }d }|rBt        |d      5 }t        j                  j                  |d      }d d d        j                  }t
        j                  d| d      5 }d	|_        	 t        |      }|rt        |      nd
}|dk(  r<|r|dk(  r5t
        j                  d| d       |rt
        j                  d| d       nt        j                  |       q	 d d d        i }|r||d<   |r||d<   |r||d<   t        j                  j                  j                  d||d|}|r)t
        j                  d|j                   d| d|        n%t
        j                  d|j                   d|        t        d|d       y # 1 sw Y   xY w# 1 sw Y   axY w# 1 sw Y   xY w)Nr<   rc   rd   rbz	fine-tune)rr   purposezMonitoring upload: z before finetuning...rh    	processedz[bold green]File z uploaded successfully!z[bold green]Validation file r   r   r   )r;   r=   rk   z from file ID: z and validation_file ID: rG   Frl   r   )openrK   rR   rn   r8   rm   r4   spinner_stylerU   ro   r^   r_   rL   r   ra   )rr   r=   rX   r<   rc   rd   r   rs   rp   file_bufferrT   rP   re   val_fileval_responser4   file_statusvalidation_file_statusadditional_paramsr?   s                       r   create_from_filer      sf   . -/+3Z(-7\*+;S78	dD	 N[<<&&K&MN kkG/4( 	SH!<<..Hk.RL	S)__	-gY6KL	M QW%)'2K7I 23r # k)&*@K*O/y8OPQ%KK67I6JJab JJt!  !( +-/C+,/>+,&2(#



!
!
(
(  C
 ;CFF8?SZR[[t  vH  uI  J	
 	;CFF8?SZR[\	
 
U+iN N	S 	S s$   "G*"G+9A:G8G(+G58HzCancel a fine-tuning job.z#ID of the fine-tuning job to cancelc                 L   t         j                  d|  dd      5  	 t        j                  j                  j                  |        t         j                  d|  d       d d d        y # t        $ r%}t         j                  d|  d|        Y d }~2d }~ww xY w# 1 sw Y   y xY w)	Nz[bold red]Cancelling job rg   rh   ri   z[bold red]Job z cancelled successfully!z[bold red]Error cancelling job z: )rm   r4   rK   rL   r   cancelro   	Exception)r8   es     r   r   r      s     
3B4s;V	L E	E##**2.KK.,DEFE E  	EKK9"RsCDD	E	E Es/   BAA))	B2BBBBB#__main__)rG   )(typingr   r   openair   *openai.types.fine_tuning.job_create_paramsr   typerr^   	rich.liver   
rich.tabler   rich.consoler	   r
   openai.types.fine_tuningr   rK   Typerapprm   r   rM   rA   r   r9   intrO   rU   commandOptionboolra   Argumentfloatrq   r   r   r   r   r   r   <module>r      s   &  F        2	ekkm
)y )m, ) )X  :C :] 3 :S S 
 		B  
 a&KLQ%BC5<<,MN
  
		  	8   enn"FGo4RS*ell5E !-/e! 1==E1 )57)")")") sm") ") 'uo") !") 
")")J 	0   $FGo4RSQ%BC*ell5E !-/e! 1==E1 &2U\\0& #/%,,1#!P,
P,P, P, sm	P, P, 'uoP, c]P,  3-!P,& 
'P,P,f 	$   enn"GHEE	EE zE r   