
    hp                     r   d 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m	Z	m
Z
mZ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 dd
lmZmZ ddl ddlmZ ddlm Z m!Z!  e       Z" e       Z# e       Z$e i dddddddfde%de%dee&   dee%   dee%   dee'e%      dee(   de
d   dee	e%e%f      dee	e%e%f      defd       Z)e i dddddddfde%de%dee&   dee%   dee%   dee'e%      dee(   de
d   dee	e%e%f      dee	e%e%f      deeeeeef   f   fd       Z*e 	 	 	 d&de%de
d   dee	e%e%f      dee	e%e%f      def
d       Z+e 	 	 	 d&de%de
d   dee	e%e%f      dee	e%e%f      deeeeeef   f   f
d       Z,	 	 	 	 	 d'd ee%   d!ee(   de
d   dee	e%e%f      dee	e%e%f      f
d"Z-	 	 	 	 	 d'd ee%   d!ee(   de
d   dee	e%e%f      dee	e%e%f      f
d#Z.e 	 	 	 d&de%de
d   dee	e%e%f      dee	e%e%f      def
d$       Z/e 	 	 	 d&de%de
d   dee	e%e%f      dee	e%e%f      deeeeeef   f   f
d%       Z0y)(z
Main File for Fine Tuning API implementation

https://platform.openai.com/docs/api-reference/fine-tuning

- fine_tuning.jobs.create()
- fine_tuning.jobs.list()
- client.fine_tuning.jobs.list_events()
    N)partial)Any	CoroutineDictLiteralOptionalUnion)verbose_logger)AzureOpenAIFineTuningAPI)OpenAIFineTuningAPI)VertexFineTuningAPI)get_secret_str)FineTuningJobCreateHyperparameters)*)LiteLLMFineTuningJob)clientsupports_httpx_timeoutopenaimodeltraining_filehyperparameterssuffixvalidation_fileintegrationsseedcustom_llm_provider)r   azure	vertex_aiextra_headers
extra_bodyreturnc
                   K   t        j                  d| |
       	 t        j                         }d|
d<   t	        t
        | |||||||||	fi |
}t        j                         }t	        |j                  |      }|j                  d|       d{   }t        j                  |      r| d{   }|S |}|S 7 )7 # t        $ r}|d}~ww xY ww)zO
    Async: Creates and executes a batch from an uploaded file of request

    z5inside acreate_fine_tuning_job model=%s and kwargs=%sTacreate_fine_tuning_jobN)r
   debugasyncioget_event_loopr   create_fine_tuning_jobcontextvarscopy_contextrunrun_in_executoriscoroutine	Exception)r   r   r   r   r   r   r   r   r    r!   kwargsloopfuncctxfunc_with_contextinit_responseresponsees                     T/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/fine_tuning/main.pyr$   r$   %   s     $ ?%%',0() "
 
  &&(#CGGT2"2249JKK}-**H  %H L*  sY   CA2B; B7B; ,B9-B; 2C3B; 6C7B; 9B; ;	CCCCc
                    	 |
j                  dd      du }t        d+i |
}|xs i }t        d+i |}|j                  xs |
j	                  dd      xs d}|:t        |t        j                        r t        |      du r|j                  xs d}|}n,|&t        |t        j                        st        |      }n|d}|dk(  r9|j                  xsB t        j                  xs0 t        j                  d	      xs t        j                  d
      xs d}|j                  xs, t        j                  xs t        j                  dd      xs d}|j                   xs9 t        j                   xs' t        j"                  xs t        j                  d      }t%        | ||||||      }|j'                  d      }t(        j+                  |||j,                  ||||j.                  ||
j	                  dd      	      }|S |dk(  r)|j                  xs t        j                  xs t1        d      }|j,                  xs t        j,                  xs t1        d      }|j                   xs< t        j                   xs* t        j2                  xs t1        d      xs t1        d      }|j	                  di       }	|	|	j                  dd       nt1        d       t%        | ||||||      }|j'                  d      }t4        j+                  ||||||j.                  ||j                        }|S |dk(  r|j                  xs d}|j6                  xs t        j6                  xs t1        d      }|j8                  xs t        j8                  xs t1        d      }|j:                  xs t1        d      }t%        | ||||||      }t<        j+                  ||||||||
| 	      }|S t        j>                  jA                  d!jC                  |      d"|t        jD                  d#d$t        jF                  d%d&'      (      )      # tH        $ r&}tK        jL                  d*tO        |             |d}~ww xY w),z
    Creates a fine-tuning job which begins the process of creating a new model from a given dataset.

    Response includes details of the enqueued job including job status and the name of the fine-tuned models once complete

    r$   FTrequest_timeoutX  N     @r   OPENAI_BASE_URLOPENAI_API_BASEhttps://api.openai.com/v1OPENAI_ORGANIZATIONOPENAI_API_KEY)r   r   r   r   r   r   r   )exclude_noner   )	api_baseapi_keyapi_versionorganizationcreate_fine_tuning_job_datatimeoutmax_retries	_is_asyncr   r   AZURE_API_BASEAZURE_API_VERSIONAZURE_OPENAI_API_KEYAZURE_API_KEYr!   azure_ad_tokenAZURE_AD_TOKEN)rB   rC   rD   rF   rG   rH   rI   rE   r    VERTEXAI_PROJECTVERTEXAI_LOCATIONVERTEXAI_CREDENTIALS)	rI   rF   vertex_credentialsvertex_projectvertex_locationrG   rB   r/   original_hyperparametersJLiteLLM doesn't support {} for 'create_batch'. Only 'openai' is supported.n/a  Unsupported providercreate_thread"https://github.com/BerriAI/litellmmethodurlstatus_codecontentrequestmessager   llm_providerr5   z*got exception in create_fine_tuning_job=%s )(popGenericLiteLLMParamsr   rG   get
isinstancehttpxTimeoutr   readfloatrB   litellmosgetenvrE   rC   
openai_keyr   
model_dump openai_fine_tuning_apis_instancer(   rD   rH   r   	azure_keyazure_fine_tuning_apis_instancerU   rV   rT    vertex_fine_tuning_apis_instance
exceptionsBadRequestErrorformatResponseRequestr.   r
   errorstr)r   r   r   r   r   r   r   r   r    r!   r/   rI   optional_params_oai_hyperparametersrG   read_timeoutrB   rE   rC   rF    create_fine_tuning_job_data_dictr5   rD   vertex_ai_projectvertex_ai_locationrT   r6   s                              r7   r(   r(   [   s   (nJJ8%@DH	.88 */R0? 1
1
 "))VVZZ8I3-OVSV 7EMM2&':;uD"<<.3L"G GU]])KGnG_G (*  (( /##/99.// 99.// /   ,, ''992D9 	   '' /??/%%/ 99-.	  +>+ 4 /)+' 0K/U/U! 0V 0, 8NN!+77),L+77#zzd O HX } !G+&//g73C3Cg~VfGgH  ++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6/0*=+ 4 /)+' 0K/U/U! 0V 0, 7MM!',L+77#,99 N 	Ht a !K/&//52H.. 6))6!"45   // 7**7!"56 
 "1!C!C "~&H +>+ 4 /)+' 8NN#,G#50 2!)8 O 
H0  $$44dkk' 0 #2!MMFjk 5    I3q6Rs-   G:P? =D.P? ,B5P? "AP? ?	Q.!Q))Q.fine_tuning_job_idc                 f  K   	 t        j                         }d|d<   t        t        | |||fi |}t	        j
                         }t        |j                  |      }|j                  d|       d{   }	t        j                  |	      r|	 d{   }
|
S |	}
|
S 7 )7 # t        $ r}|d}~ww xY ww)z4
    Async: Immediately cancel a fine-tune job.
    Tacancel_fine_tuning_jobN)
r&   r'   r   cancel_fine_tuning_jobr)   r*   r+   r,   r-   r.   r   r   r    r!   r/   r0   r1   r2   r3   r4   r5   r6   s               r7   r   r      s     %%',0() "
 
 &&(#CGGT2"2249JKK}-**H  %H L*  Y   B1A,B 0B1B BB B1B B1B B 	B.'B))B..B1c                    	 t        d"i |}|j                  xs |j                  dd      xs d}|:t        |t        j
                        r t        |      du r|j                  xs d}|}n,|&t        |t        j
                        st        |      }n|d}|j                  dd      du }|dk(  r|j                  xsB t        j                  xs0 t        j                  d	      xs t        j                  d
      xs d}	|j                  xs, t        j                  xs t        j                  dd      xs d}
|j                  xs9 t        j                  xs' t        j                   xs t        j                  d      }t"        j%                  |	||j&                  |
| ||j(                  ||j                  dd      	      }|S |dk(  r|j                  xs t        j                  xs t+        d      }	|j&                  xs t        j&                  xs t-        d      }|j                  xs< t        j                  xs* t        j.                  xs t-        d      xs t-        d      }|j                  di       }||j                  dd       nt-        d       t0        j%                  |	||| ||j(                  ||j                        }|S t        j2                  j5                  dj7                  |      d|t	        j8                  ddt	        j:                  dd             !      # t<        $ r}|d}~ww xY w)#z
    Immediately cancel a fine-tune job.

    Response includes details of the enqueued job including job status and the name of the fine-tuned models once complete

    r9   r:   NFr;   r   Tr   r<   r=   r>   r?   r@   r   	rB   rC   rD   rE   r   rG   rH   rI   r   r   rJ   rK   rL   rM   r!   rN   rO   rB   rC   rD   r   rG   rH   rI   rE   rX   rY   rZ   r[   r\   r]   r^   ra   re   rh   )rj   rG   rk   rl   rm   rn   r   ro   rp   ri   rB   rq   rr   rs   rE   rC   rt   rv   r   rD   rH   
get_secretr   rw   rx   rz   r{   r|   r}   r~   r.   r   r   r    r!   r/   r   rG   r   rI   rB   rE   rC   r5   rD   r6   s                  r7   r   r   F  sS   h.88!))VVZZ8I3-OVSV 7EMM2&':;uD"<<.3L"G GU]])KGnG_GJJ8%@DH	 (*  (( /##/99.// 99.// /   ,, ''992D9 	   '' /??/%%/ 99-.	  8NN!+77)#5+77#zz(D1 O 
Ht ] !G+&//c73C3CczRbGcH  ++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6/06MM!'#5+77#,99 N 	H.  $$44dkk' 0 #2!MMFjk 5    &   GL0 D
L0 AL0 0	M 9L;;M afterlimitc                 h  K   	 t        j                         }d|d<   t        t        | ||||fi |}t	        j
                         }t        |j                  |      }	|j                  d|	       d{   }
t        j                  |
      r|
 d{   }|S |
}|S 7 )7 # t        $ r}|d}~ww xY ww)z:
    Async: List your organization's fine-tuning jobs
    Talist_fine_tuning_jobsN)
r&   r'   r   list_fine_tuning_jobsr)   r*   r+   r,   r-   r.   )r   r   r   r    r!   r/   r0   r1   r2   r3   r4   r5   r6   s                r7   r   r     s     %%'+/'( !
 
 &&(#CGGT2"2249JKK}-**H  %H L*  sY   B2A-B 1B2B BB B2B B2B B 	B/(B**B//B2c                    	 t        d"i |}|j                  xs |j                  dd      xs d}|:t        |t        j
                        r t        |      du r|j                  xs d}|}n,|&t        |t        j
                        st        |      }n|d}|j                  dd      du }	|dk(  r|j                  xsB t        j                  xs0 t        j                  d	      xs t        j                  d
      xs d}
|j                  xs, t        j                  xs t        j                  dd      xs d}|j                  xs9 t        j                  xs' t        j                   xs t        j                  d      }t"        j%                  |
||j&                  || |||j(                  |	|j                  dd      
      }|S |dk(  r|j                  xs t        j                  xs t+        d      }
|j&                  xs t        j&                  xs t+        d      }|j                  xs< t        j                  xs* t        j,                  xs t+        d      xs t+        d      }|j                  di       }||j                  dd       nt/        d       t0        j%                  |
||| |||j(                  |	|j                  	      }|S t        j2                  j5                  dj7                  |      d|t	        j8                  ddt	        j:                  dd             !      # t<        $ r}|d}~ww xY w)#a   
    List your organization's fine-tuning jobs

    Params:

    - after: Optional[str] = None, Identifier for the last job from the previous pagination request.
    - limit: Optional[int] = None, Number of fine-tuning jobs to retrieve. Defaults to 20
    r9   r:   NFr;   r   Tr   r<   r=   r>   r?   r@   r   )
rB   rC   rD   rE   r   r   rG   rH   rI   r   r   rJ   rK   rL   rM   r!   rN   rO   )	rB   rC   rD   r   r   rG   rH   rI   rE   rX   rY   rZ   r[   r\   r]   r^   ra   re   rh   )rj   rG   rk   rl   rm   rn   r   ro   rp   ri   rB   rq   rr   rs   rE   rC   rt   rv   r   rD   rH   r   rw   r   rx   rz   r{   r|   r}   r~   r.   )r   r   r   r    r!   r/   r   rG   r   rI   rB   rE   rC   r5   rD   r6   s                   r7   r   r     sY    j.88!))VVZZ8I3-OVSV 7EMM2&':;uD"<<.3L"G GU]])KGnG_GJJ7?4G	 (*  (( /##/99.// 99.// /   ,, ''992D9 	   '' /??/%%/ 99-.	  8MM!+77)+77#zz(D1 N Hx _ !G+&//g73C3Cg~VfGgH  ++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6+,6LL!'+77#,99 M 
H0  $$44dkk' 0 #2!MMFjk 5    s&   GL2 	DL2 AL2 2	M;L==Mc                 f  K   	 t        j                         }d|d<   t        t        | |||fi |}t	        j
                         }t        |j                  |      }|j                  d|       d{   }	t        j                  |	      r|	 d{   }
|
S |	}
|
S 7 )7 # t        $ r}|d}~ww xY ww)z2
    Async: Get info about a fine-tuning job.
    Taretrieve_fine_tuning_jobN)
r&   r'   r   retrieve_fine_tuning_jobr)   r*   r+   r,   r-   r.   r   s               r7   r   r   c  s     %%'.2*+ $
 
 &&(#CGGT2"2249JKK}-**H  %H L*  r   c                    	 t        d"i |}|j                  xs |j                  dd      xs d}|:t        |t        j
                        r t        |      du r|j                  xs d}|}n,|&t        |t        j
                        st        |      }n|d}|j                  dd      du }|dk(  r|j                  xsB t        j                  xs0 t        j                  d	      xs t        j                  d
      xs d}	|j                  xs, t        j                  xs t        j                  dd      xs d}
|j                  xs9 t        j                  xs' t        j                   xs t        j                  d      }t"        j%                  |	||j&                  |
| ||j(                  ||j                  dd      	      }|S |dk(  r|j                  xs t        j                  xs t+        d      }	|j&                  xs t        j&                  xs t+        d      }|j                  xs< t        j                  xs* t        j,                  xs t+        d      xs t+        d      }|j                  di       }||j                  dd       nt+        d       t.        j%                  |	||| ||j(                  ||j                        }|S t        j0                  j3                  dj5                  |      d|t	        j6                  ddt	        j8                  dd             !      # t:        $ r}|d}~ww xY w)#z+
    Get info about a fine-tuning job.
    r9   r:   NFr;   r   Tr   r<   r=   r>   r?   r@   r   r   r   rJ   rK   rL   rM   r!   rN   rO   r   zcLiteLLM doesn't support {} for 'retrieve_fine_tuning_job'. Only 'openai' and 'azure' are supported.rY   rZ   r[   r   r]   r^   ra   re   rh   )rj   rG   rk   rl   rm   rn   r   ro   rp   ri   rB   rq   rr   rs   rE   rC   rt   rv   r   rD   rH   r   rw   rx   rz   r{   r|   r}   r~   r.   r   s                  r7   r   r     sX   f.88!))VVZZ8I3-OVSV 7EMM2&':;uD"<<.3L"G GU]])KGnG_GJJ:EBdJ	 (*(( /##/99.// 99.// /   ,, ''992D9 	   '' /??/%%/ 99-.	  8PP!+77)#5+77#zz(D1 Q 
Ht ] !G+&//g73C3Cg~VfGgH  ++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6/06OO!'#5+77#,99 P 	H.  $$44}  E  E' 0 #2!MM1KQuv 5    r   )r   NN)NNr   NN)1__doc__r&   r)   rr   	functoolsr   typingr   r   r   r   r   r	   rm   rq   litellm._loggingr
   &litellm.llms.azure.fine_tuning.handlerr   'litellm.llms.openai.fine_tuning.handlerr   *litellm.llms.vertex_ai.fine_tuning.handlerr   litellm.secret_managers.mainr   litellm.types.llms.openair   r   litellm.types.routerlitellm.types.utilsr   litellm.utilsr   r   rv   rx   ry   r   dictListintr$   r(   r   r   r   r   r   r   rh       r7   <module>r      s     	  A A   + K G J 7 J " 4 8 $7#8  ":"< #6#8    ') %)(,CK.2+/222 d^2 SM	2
 c]2 49%2 3-2 !!?@2 DcN+2 c3h(2 2 2j  ') %)(,CK.2+/AAA d^A SM	A
 c]A 49%A 3-A !!?@A DcN+A c3h(A 35I+I!JJKA AH  DL.2+/	"" !?@" DcN+" c3h(	" " "J  DL.2+/	uu !?@u DcN+u c3h(	u 35I+I!JJKu ur  CK.2+/$C=$C=$ !!?@$ DcN+	$
 c3h($P  CK.2+/zC=zC=z !!?@z DcN+	z
 c3h(zz  DL.2+/	"" !?@" DcN+" c3h(	" " "J  DL.2+/	pp !?@p DcN+p c3h(	p 35I+I!JJKp pr   