
    ^hU                        S r SSKrSSKrSSKrSSKJr  SSKJrJrJ	r	J
r
JrJr  SSKrSSKrSSKJr  SSKJr  SSKJrJr  SSKJr  SS	KJr  SS
KJrJr  SSK7  SSKJr  \" 5       r \" 5       r!\" 5       r"0 SSSSSSS4S\#S\#S\\   S\\#   S\\#   S\\$\#      S\\%   S\
S   S\\	\#\#4      S\\	\#\#4      S\4S jjr&0 SSSSSSS4S\#S\#S\\   S\\#   S\\#   S\\$\#      S\\%   S\
S   S\\	\#\#4      S\\	\#\#4      S\\\\\\4   4   4S jjr'   S#S\#S\
S   S\\	\#\#4      S\\	\#\#4      S\4
S jjr(   S#S\#S\
S   S\\	\#\#4      S\\	\#\#4      S\\\\\\4   4   4
S jjr)     S$S\\#   S \\%   S\
S   S\\	\#\#4      S\\	\#\#4      4
S! jjr*     S$S\\#   S \\%   S\
S   S\\	\#\#4      S\\	\#\#4      4
S" jjr+g)%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)FineTuningJobOpenAIFineTuningAPI)VertexFineTuningAPI)get_secret_str)FineTuningJobCreateHyperparameters)*)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
                   #    [         R                  " SX
5         [        R                  " 5       nSU
S'   [	        [
        U UUUUUUUUU	40 U
D6n[        R                  " 5       n[	        UR                  U5      nUR                  SU5      I Sh  vN n[        R                  " U5      (       a  UI Sh  vN nU$ UnU$  N/ N! [         a  nUeSnAff = f7f)zG
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                     R/home/james-whalen/.local/lib/python3.13/site-packages/litellm/fine_tuning/main.pyr#   r#   $   s     " ?%%',0() "
 
  &&(#CGGT2"2249JKK}--**H  %H L*  sY   CA4C B?$C 4C5C :C;C >C?C C 
CCCCc
                 6	    U
R                  SS5      SL n[        S)0 U
D6nUR                  =(       d    U
R                  SS5      =(       d    SnUbE  [	        U[
        R                  5      (       a&  [        U5      SL a  UR                  =(       d    SnUnO3Ub+  [	        U[
        R                  5      (       d  [        U5      nOUc  SnUS:X  Ga-  UR                  =(       d6    [        R                  =(       d    [        R                  " S	5      =(       d    S
nUR                  =(       d7    [        R                  =(       d     [        R                  " SS5      =(       d    SnUR                  =(       dD    [        R                  =(       d-    [        R                   =(       d    [        R                  " S5      n[#        U UUUUUUS9nUR%                  SS9n[&        R)                  UUUUUUR*                  US9nU$ US:X  Ga>  UR                  =(       d"    [        R                  =(       d    [-        S5      nUR.                  =(       d"    [        R.                  =(       d    [-        S5      nUR                  =(       dK    [        R                  =(       d4    [        R0                  =(       d    [-        S5      =(       d    [-        S5      nUR                  S0 5      n	U	b  U	R                  SS5        O[-        S5        [#        U UUUUUUS9nUR%                  SS9n[2        R)                  UUUUUUR*                  US9nU$ US:X  a  UR                  =(       d    SnUR4                  =(       d"    [        R4                  =(       d    [-        S5      nUR6                  =(       d"    [        R6                  =(       d    [-        S5      nUR8                  =(       d    [-        S5      n[#        U UUUUUUS9n[:        R)                  UUUUUUUU
S9nU$ [        R<                  R?                  SRA                  U5      S U[
        RB                  " S!S"[
        RD                  " S#S$S%9S&9S'9e! [F         a'  n[H        RJ                  " S([M        U5      5        UeSnAff = f)*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_API_BASEhttps://api.openai.com/v1OPENAI_ORGANIZATIONOPENAI_API_KEY)r   r   r   r   r   r   r   )exclude_none)api_baseapi_keyorganizationcreate_fine_tuning_job_datatimeoutmax_retries	_is_asyncr   AZURE_API_BASEAZURE_API_VERSIONAZURE_OPENAI_API_KEYAZURE_API_KEYr    azure_ad_tokenAZURE_AD_TOKEN)r@   rA   api_versionrC   rD   rE   rF   r    VERTEXAI_PROJECTVERTEXAI_LOCATIONVERTEXAI_CREDENTIALS)rF   rC   vertex_credentialsvertex_projectvertex_locationrD   r@   r.   JLiteLLM 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_providerr4   z*got exception in create_fine_tuning_job=%s )'popGenericLiteLLMParamsrD   get
isinstancehttpxTimeoutr   readfloatr@   litellmosgetenvrB   rA   
openai_keyr   
model_dump openai_fine_tuning_apis_instancer'   rE   r   rM   	azure_keyazure_fine_tuning_apis_instancerS   rT   rR    vertex_fine_tuning_apis_instance
exceptionsBadRequestErrorformatResponseRequestr-   r
   errorstr)r   r   r   r   r   r   r   r   r   r    r.   rF   optional_paramsrD   read_timeoutr@   rB   rA   rC    create_fine_tuning_job_data_dictr4   rM   vertex_ai_projectvertex_ai_locationrR   r5   s                             r6   r'   r'   Y   s   &cJJ8%@DH	.88!))VVZZ8I3-OVSV 7EMM22&':;uD"<<.3L"G GU]])K)KGnG_G (*  (( /##/99.// /	   ,, ''992D9 	   '' /??/%%/ 99-.	  +>+ / /)+' 0K/U/U! 0V 0, 8NN!),L+77# O HN { !G+&//g73C3Cg~VfGgH  ++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6/0*=+ / /)+' 0K/U/U! 0V 0, 7MM!',L+77# N Hp _ !K/&//52H.. 6))6!"45   // 7**7!"56 
 "1!C!C "~&H +>+ / /)+' 8NN#,G#50 2! O 	H.  $$44dkk' 0 #2!MMFjk 5    I3q6Rs-   G;Q' >EQ' CQ' AQ' '
R1"RRfine_tuning_job_idc                 x  #     [         R                  " 5       nSUS'   [        [        U UUU40 UD6n[        R
                  " 5       n[        UR                  U5      nUR                  SU5      I Sh  vN n	[         R                  " U	5      (       a  U	I Sh  vN n
U
$ U	n
U
$  N/ N! [         a  nUeSnAff = f7f)z,
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.   r/   r0   r1   r2   r3   r4   r5   s               r6   r   r     s     %%',0() "
 
 &&(#CGGT2"2249JKK}--**H  %H L*  sY   B:A.B& 2B"3$B& B$B& B:B& !B:"B& $B& &
B70B22B77B:c                     [        S 0 UD6nUR                  =(       d    UR                  SS5      =(       d    SnUbE  [        U[        R
                  5      (       a&  [        U5      SL a  UR                  =(       d    SnUnO3Ub+  [        U[        R
                  5      (       d  [        U5      nOUc  SnUR                  SS5      SL nUS:X  Ga  UR                  =(       d6    [        R                  =(       d    [        R                  " S	5      =(       d    S
n	UR                  =(       d7    [        R                  =(       d     [        R                  " SS5      =(       d    Sn
UR                  =(       dD    [        R                  =(       d-    [        R                   =(       d    [        R                  " S5      n["        R%                  U	UU
U UUR&                  US9nU$ US:X  Ga   UR                  =(       d"    [        R                  =(       d    [)        S5      n	UR*                  =(       d"    [        R*                  =(       d    [-        S5      nUR                  =(       dK    [        R                  =(       d4    [        R.                  =(       d    [-        S5      =(       d    [-        S5      nUR                  S0 5      nUb  UR                  SS5        O[-        S5        [0        R%                  U	UUU UUR&                  US9nU$ [        R2                  R5                  SR7                  U5      SU[        R8                  " SS[        R:                  " SSS9S9S9e! [<         a  nUeSnAff = f)!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

r8   r9   NFr:   r   Tr   r;   r<   r=   r>   )r@   rA   rB   r   rD   rE   rF   r   rG   rH   rI   rJ   r    rK   rL   )r@   rA   rM   r   rD   rE   rF   rU   rV   rW   rX   rY   rZ   r[   r^   rb   re   )rg   rD   rh   ri   rj   rk   r   rl   rm   rf   r@   rn   ro   rp   rB   rA   rq   rs   r   rE   
get_secretrM   r   rt   ru   rw   rx   ry   rz   r{   r-   )r   r   r   r    r.   r~   rD   r   rF   r@   rB   rA   r4   rM   r5   s                  r6   r   r   7  s%   e.88!))VVZZ8I3-OVSV 7EMM22&':;uD"<<.3L"G GU]])K)KGnG_GJJ8%@DH	 (*  (( /##/99.// /	   ,, ''992D9 	   '' /??/%%/ 99-.	  8NN!)#5+77# O Hn [ !G+&//c73C3CczRbGcH  ++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6/06MM!'#5+77# N H,  $$44dkk' 0 #2!MMFjk 5    s&   GM  D&M AM 
M.'M))M.afterlimitc                 z  #     [         R                  " 5       nSUS'   [        [        U UUUU40 UD6n[        R
                  " 5       n[        UR                  U5      n	UR                  SU	5      I Sh  vN n
[         R                  " U
5      (       a  U
I Sh  vN nU$ U
nU$  N/ N! [         a  nUeSnAff = f7f)z2
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.   r/   r0   r1   r2   r3   r4   r5   s                r6   r   r     s     %%'+/'( !
 
 &&(#CGGT2"2249JKK}--**H  %H L*  sY   B;A/B' 3B#4$B' B%B' B;B' "B;#B' %B' '
B81B33B88B;c                     [        S 0 UD6nUR                  =(       d    UR                  SS5      =(       d    SnUbE  [        U[        R
                  5      (       a&  [        U5      SL a  UR                  =(       d    SnUnO3Ub+  [        U[        R
                  5      (       d  [        U5      nOUc  SnUR                  SS5      SL n	US:X  Ga  UR                  =(       d6    [        R                  =(       d    [        R                  " S	5      =(       d    S
n
UR                  =(       d7    [        R                  =(       d     [        R                  " SS5      =(       d    SnUR                  =(       dD    [        R                  =(       d-    [        R                   =(       d    [        R                  " S5      n["        R%                  U
UUU UUUR&                  U	S9nU$ US:X  Ga!  UR                  =(       d"    [        R                  =(       d    [)        S5      n
UR*                  =(       d"    [        R*                  =(       d    [)        S5      nUR                  =(       dK    [        R                  =(       d4    [        R,                  =(       d    [)        S5      =(       d    [)        S5      nUR                  S0 5      nUb  UR                  SS5        O[/        S5        [0        R%                  U
UUU UUUR&                  U	S9nU$ [        R2                  R5                  SR7                  U5      SU[        R8                  " SS[        R:                  " SSS9S9S9e! [<         a  nUeSnAff = f)!z
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
r8   r9   NFr:   r   Tr   r;   r<   r=   r>   )r@   rA   rB   r   r   rD   rE   rF   r   rG   rH   rI   rJ   r    rK   rL   )r@   rA   rM   r   r   rD   rE   rF   rU   rV   rW   rX   rY   rZ   r[   r^   rb   re   )rg   rD   rh   ri   rj   rk   r   rl   rm   rf   r@   rn   ro   rp   rB   rA   rq   rs   r   rE   r   rM   rt   r   ru   rw   rx   ry   rz   r{   r-   )r   r   r   r   r    r.   r~   rD   r   rF   r@   rB   rA   r4   rM   r5   s                   r6   r   r     s+    g.88!))VVZZ8I3-OVSV 7EMM22&':;uD"<<.3L"G GU]])K)KGnG_GJJ7?4G	 (*  (( /##/99.// /	   ,, ''992D9 	   '' /??/%%/ 99-.	  8MM!)+77# N 	Hr ] !G+&//g73C3Cg~VfGgH  ++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6+,6LL!'+77# M 	H.  $$44dkk' 0 #2!MMFjk 5    s&   GM !D'M 	AM 
M0)M++M0)r   NN)NNr   NN),__doc__r%   r(   ro   	functoolsr   typingr   r   r   r   r   r	   rj   rn   litellm._loggingr
   &litellm.llms.azure.fine_tuning.handlerr   'litellm.llms.openai.fine_tuning.handlerr   r   *litellm.llms.vertex_ai.fine_tuning.handlerr   litellm.secret_managers.mainr   litellm.types.llms.openair   r   litellm.types.routerlitellm.utilsr   rs   ru   rv   r}   Listintr#   r'   r   r   r   r   re       r6   <module>r      s     	  A A   + K V J 7 J " 0 $7#8  ":"< #6#8   24 %)(,CK.2+/222 o.2 SM	2
 c]2 49%2 3-2 !!?@2 DcN+2 c3h(2 2p 24 %)(,CK.2+/vvv o.v SM	v
 c]v 49%v 3-v !!?@v DcN+v c3h(v =)Cm$;<<=vv .6.2+/	"" *" DcN+" c3h(	" "N DL.2+/	rr !?@r DcN+r c3h(	r =)Cm$;<<=rl  -5.2+/$C=$C=$ !*$ DcN+	$
 c3h($P  CK.2+/wC=wC=w !!?@w DcN+	w
 c3h(wr   