
    AHjqx                        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$dee	e%ef      de	e%ef   de	e%ef   de	e%ef   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fd       Z*d Z+d ede%dee,ejZ                  f   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$       Z0e 	 	 	 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%       Z1	 	 	 	 	 d-d&ee%   d'ee)   de
d   dee	e%e%f      dee	e%e%f      f
d(Z2	 	 	 	 	 d-d&ee%   d'ee)   de
d   dee	e%e%f      dee	e%e%f      f
d)Z3e 	 	 	 d,d#e%de
d   dee	e%e%f      dee	e%e%f      def
d*       Z4e 	 	 	 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+       Z5y).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
extra_bodykwargsazure_specific_hyperparamsreturnc                 b    | i } dg}|D ]  }||v s||   | |<    |r| j                  |       | S )a  
    Prepare extra_body for Azure fine-tuning API by combining Azure-specific parameters.

    Azure fine-tuning API accepts additional parameters beyond the standard OpenAI spec:
    - trainingType: Type of training (e.g., 1 for supervised fine-tuning)
    - prompt_loss_weight: Weight for prompt loss in training

    These parameters must be passed in the extra_body field when calling the Azure OpenAI SDK.

    Args:
        extra_body: Optional existing extra_body dict
        kwargs: Request kwargs that may contain Azure-specific parameters
        azure_specific_hyperparams: Dict of Azure-specific hyperparameters already extracted

    Returns:
        Dict containing all Azure-specific parameters to be passed in extra_body
    trainingType)update)r   r   r   azure_specific_paramsparams        P/root/tools/cai/cai_env/lib/python3.12/site-packages/litellm/fine_tuning/main.py_prepare_azure_extra_bodyr   %   sX    , 
 ,,& .F? &uJu.
 "45    openaimodeltraining_filehyperparameterssuffixvalidation_fileintegrationsseedcustom_llm_provider)r!   azure	vertex_aiextra_headersc
                   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   r   loopfuncctxfunc_with_contextinit_responseresponsees                     r   r.   r.   K   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           	      &    t        | ||||||      S )Nr"   r#   r$   r%   r&   r'   r(   )r   rA   s          r   _build_fine_tuning_job_datarB      s&     #''! r    timeoutc                     | xs d} t        | t        j                        r&t        |      st	        | j
                  xs d      S | S t	        |       S )zZNormalise a raw timeout value to a float (seconds) or httpx.Timeout for fine-tuning calls.     @X  )
isinstancehttpxTimeoutr   floatread)rC   r)   s     r   _resolve_fine_tuning_timeoutrL      sH    
 G'5==)%&9:,-->r    c
                    	 |
j                  dd      du }t        d*i |
}|xs i }i }|dk(  r#dg}|D ]  }||v s|j                  |      ||<    t        d*i |}t        |j                  xs |
j                  dd      |      }|dk(  r6|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 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+        |	|
|      }	t        | ||||||      j                  d      }|	r|	|d<   t,        j!                  ||||||j$                  ||j                        }|S |dk(  r|j                  xs d}|j.                  xs t        j.                  xs t'        d      }|j0                  xs t        j0                  xs t'        d      }|j2                  xs t'        d      }t4        j!                  |t        | ||||||      ||||||
|	      }|S t        j6                  j9                  d j;                  |      d!|t=        j>                  d"d#t=        j@                  d$d%&      '      (      # tB        $ r&}tE        jF                  d)tI        |             |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.   FTr*   prompt_loss_weightrequest_timeoutrF   r!   OPENAI_BASE_URLOPENAI_API_BASEhttps://api.openai.com/v1OPENAI_ORGANIZATIONNOPENAI_API_KEY)exclude_noner   )	api_baseapi_keyapi_versionorganizationcreate_fine_tuning_job_datarC   max_retries	_is_asyncr   AZURE_API_BASEAZURE_API_VERSIONAZURE_OPENAI_API_KEYAZURE_API_KEYr   azure_ad_tokenAZURE_AD_TOKEN)rV   rW   rX   rZ   rC   r[   r\   rY   r+    VERTEXAI_PROJECTVERTEXAI_LOCATIONVERTEXAI_CREDENTIALS)	r\   rZ   vertex_credentialsvertex_projectvertex_locationrC   rV   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_providerr>   z*got exception in create_fine_tuning_job=%s )%popGenericLiteLLMParamsr   rL   rC   getrV   litellmosgetenvrY   rW   
openai_keyrB   
model_dump openai_fine_tuning_apis_instancer2   rX   r[   r   	azure_keyr   azure_fine_tuning_apis_instancerh   ri   rg    vertex_fine_tuning_apis_instance
exceptionsBadRequestErrorformatrH   ResponseRequestr8   r
   errorstr)r"   r#   r$   r%   r&   r'   r(   r)   r,   r   r   r\   optional_paramsr   azure_hyperparameter_keyskey_oai_hyperparametersrC   rV   rY   rW    create_fine_tuning_job_data_dictr>   rX   vertex_ai_projectvertex_ai_locationrg   r?   s                               r   r2   r2      s   (mJJ8%@DH	.88 */R &("'))=(>%0 O/)6E6I6I#6N.s3O 1@ 1
1
 /##Ivzz2CS'I
 (*  (( /##/99.// 99.// /   ,, ''992D9 	   '' /??/%%/ 99-.	  0K$0 jdj+ - 8NN!+77),L+77#zzd O Hb G !G+&//g73C3Cg~VfGgH  ++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6/0 3F$>J 0K$0 jdj+ - AK0>6MM!',L+77#,99 N 	Hr _ !K/&//52H.. 6))6!"45   // 7**7!"56 
 "1!C!C "~&H 8NN#,G!(# - $60 2!)8# O H@  $$44dkk' 0 #2!MMFjk 5    I3q6Rs2   8P FP D?P B2P 5AP 	Q!P<<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)
r0   r1   r   cancel_fine_tuning_jobr3   r4   r5   r6   r7   r8   r   r)   r,   r   r   r9   r:   r;   r<   r=   r>   r?   s               r   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

    rO   rF   NFrE   r   Tr!   rP   rQ   rR   rS   rT   r   	rV   rW   rX   rY   r   rC   r[   r\   r   r*   r]   r^   r_   r`   r   ra   rb   rV   rW   rX   r   rC   r[   r\   rY   rk   rl   rm   rn   ro   rp   rq   rt   rx   r{   )r}   rC   r~   rG   rH   rI   r   rK   rJ   r|   rV   r   r   r   rY   rW   r   r   r   rX   r[   
get_secretr   r   r   r   r   r   r   r   r8   r   r)   r,   r   r   r   rC   read_timeoutr\   rV   rY   rW   r>   rX   r?   s                  r   r   r     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)
r0   r1   r   list_fine_tuning_jobsr3   r4   r5   r6   r7   r8   )r   r   r)   r,   r   r   r9   r:   r;   r<   r=   r>   r?   s                r   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
    rO   rF   NFrE   r   Tr!   rP   rQ   rR   rS   rT   r   )
rV   rW   rX   rY   r   r   rC   r[   r\   r   r*   r]   r^   r_   r`   r   ra   rb   )	rV   rW   rX   r   r   rC   r[   r\   rY   rk   rl   rm   rn   ro   rp   rq   rt   rx   r{   )r}   rC   r~   rG   rH   rI   r   rK   rJ   r|   rV   r   r   r   rY   rW   r   r   r   rX   r[   r   r   r   r   r   r   r   r   r   r8   )r   r   r)   r,   r   r   r   rC   r   r\   rV   rY   rW   r>   rX   r?   s                   r   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)
r0   r1   r   retrieve_fine_tuning_jobr3   r4   r5   r6   r7   r8   r   s               r   r   r     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.
    rO   rF   NFrE   r   Tr!   rP   rQ   rR   rS   rT   r   r   r*   r]   r^   r_   r`   r   ra   rb   r   zcLiteLLM doesn't support {} for 'retrieve_fine_tuning_job'. Only 'openai' and 'azure' are supported.rl   rm   rn   r   rp   rq   rt   rx   r{   )r}   rC   r~   rG   rH   rI   r   rK   rJ   r|   rV   r   r   r   rY   rW   r   r   r   rX   r[   r   r   r   r   r   r   r   r   r8   r   s                  r   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)6__doc__r0   r3   r   	functoolsr   typingr   r   r   r   r   r	   rH   r   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   r   r   r   r   r   dictListintr.   rB   rJ   rI   rL   r2   r   r   r   r   r   r   r{   r    r   <module>r      s     	  A A   + K G J 7 J " 4 8 $7#8  ":"< #6#8  #c3h(#cN# !%S#X# 
#s(^	#L  ') %)(,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


 5%-- 
  ') %)(,CK.2+/@@@ d^@ SM	@
 c]@ 49%@ 3-@ !!?@@ DcN+@ c3h(@ 35I+I!JJK@ @F  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    