o
    ưi]w                     @   s.  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T 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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d Z*d!d" Z+d#ede%dee,ej-f fd$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&d'Z/e 			d7d(e%de
d dee	e%e%f  dee	e%e%f  def
d)d*Z0e 			d7d(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+d,Z1					d8d-ee% d.ee) de
d dee	e%e%f  dee	e%e%f  f
d/d0Z2					d8d-ee% d.ee) de
d dee	e%e%f  dee	e%e%f  f
d1d2Z3e 			d7d(e%de
d dee	e%e%f  dee	e%e%f  def
d3d4Z4e 			d7d(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
d5d6Z5dS )9z
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                 C   sB   | du ri } dg}|D ]}||v r|| | |< q|r|  | | 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
    NZtrainingType)update)r   r   r   Zazure_specific_paramsparam r   O/home/app/Keep/.python/lib/python3.10/site-packages/litellm/fine_tuning/main.py_prepare_azure_extra_body%   s   
r   openaimodeltraining_filehyperparameterssuffixvalidation_fileintegrationsseedcustom_llm_provider)r   azure	vertex_aiextra_headersc
                    s   t d| |
 z?t }d|
d< tt| |||||||||	fi |
}t }t|j|}|	d|I dH }t
|rC|I dH }|W S |}|W S  tyU } z|d}~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er   r   r   r)   K   sD   

r)   c              	   C   s   t | ||||||dS )Nr   r   r    r!   r"   r#   r$   )r   r;   r   r   r   _build_fine_tuning_job_data   s   r<   timeoutc                 C   s6   | pd} t | tjrt|st| jp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)r=   r%   r   r   r   _resolve_fine_tuning_timeout   s   rE   c
                 K   s  z]|
 dddu }td*i |
}|pi }i }|dkr.dg}|D ]}||v r-| |||< q td*i |}t|jp>|
dd|}|dkr|jpVtjpVt	d	pVt	d
pVd}|j
pdtj
pdt	ddpdd}|jprtjprtjprt	d}t| ||||||jdd}tj|||j||||j||
ddd	}|W S |dkr|jptjptd}|jptjptd}|jptjptjptdptd}|di }	|	dur|	 dd ntd t|	|
|}	t| ||||||jdd}|	r|	|d< tj||||||j||j
d}|W S |dkrG|jpd}|jptjptd}|jp%tjp%td}|jp-td}tj|t| ||||||||||||
|d	}|W S tjjd |d!|tjd"d#tj d$d%d&d'd( t!yu } z
t"#d)t$| |d}~w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&   Zprompt_loss_weightrequest_timeoutr?   r   OPENAI_BASE_URLOPENAI_API_BASEhttps://api.openai.com/v1OPENAI_ORGANIZATIONNOPENAI_API_KEY)Zexclude_noner   )	api_baseapi_keyapi_versionorganizationcreate_fine_tuning_job_datar=   max_retries	_is_asyncr   AZURE_API_BASEAZURE_API_VERSIONAZURE_OPENAI_API_KEYAZURE_API_KEYr   azure_ad_tokenAZURE_AD_TOKEN)rL   rM   rN   rP   r=   rQ   rR   rO   r'    ZVERTEXAI_PROJECTZVERTEXAI_LOCATIONZVERTEXAI_CREDENTIALS)	rR   rP   vertex_credentialsvertex_projectvertex_locationr=   rL   r   Z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   Zllm_providerr9   z*got exception in create_fine_tuning_job=%sr   )%popGenericLiteLLMParamsr   rE   r=   getrL   litellmosgetenvrO   rM   
openai_keyr<   Z
model_dump openai_fine_tuning_apis_instancer-   rN   rQ   r   	azure_keyr   azure_fine_tuning_apis_instancer[   r\   rZ    vertex_fine_tuning_apis_instance
exceptionsBadRequestErrorformatrA   ResponseRequestr3   r	   errorstr)r   r   r    r!   r"   r#   r$   r%   r(   r   r   rR   optional_paramsr   Zazure_hyperparameter_keyskeyZ_oai_hyperparametersr=   rL   rO   rM   Z create_fine_tuning_job_data_dictr9   rN   Zvertex_ai_projectZvertex_ai_locationrZ   r:   r   r   r   r-      s$  
c
3

r-   fine_tuning_job_idc              
         z9t  }d|d< tt| |||fi |}t }t|j|}|d|I dH }	t |	r6|	I dH }
|
W S |	}
|
W S  t	yH } z|d}~ww )z4
    Async: Immediately cancel a fine-tune job.
    Tacancel_fine_tuning_jobN)
r+   r,   r   cancel_fine_tuning_jobr.   r/   r0   r1   r2   r3   r   r%   r(   r   r   r4   r5   r6   r7   r8   r9   r:   r   r   r   r   J  2   


r   c                 K   s  zt d"i |}|jp|ddpd}|dur+t|tjr+t|du r+|jp'd}|}n|dur:t|tjs:t|}n|du r@d}|	dddu }|dkr|j
p]tj
p]td	p]td
p]d}	|jpktjpktddpkd}
|jpytjpytjpytd}tj|	||j|
| ||j||ddd	}|W S |dkr|j
ptj
ptd}	|jptjptd}|jptjptjptdptd}|di }|dur|	dd ntd tj|	||| ||j||jd}|W S tjjd|d|tjddtjdddd d! ty } z|d}~w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

    rF   r?   NFr>   r   Tr   rG   rH   rI   rJ   rK   r   	rL   rM   rN   rO   r   r=   rQ   rR   r   r&   rS   rT   rU   rV   r   rW   rX   rL   rM   rN   r   r=   rQ   rR   rO   r]   r^   r_   r`   ra   rb   rc   rf   rj   r   )rm   r=   rn   r@   rA   rB   r   rD   rC   rl   rL   ro   rp   rq   rO   rM   rr   rs   r   rN   rQ   
get_secretr   rt   ru   rw   rx   ry   rz   r{   r3   r   r%   r(   r   r   r~   r=   read_timeoutrR   rL   rO   rM   r9   rN   r:   r   r   r   r   p  s   




:r   afterlimitc              
      s   z:t  }d|d< tt| ||||fi |}t }t|j|}	|d|	I dH }
t |
r7|
I dH }|W S |
}|W S  t	yI } z|d}~ww )z:
    Async: List your organization's fine-tuning jobs
    Talist_fine_tuning_jobsN)
r+   r,   r   list_fine_tuning_jobsr.   r/   r0   r1   r2   r3   )r   r   r%   r(   r   r   r4   r5   r6   r7   r8   r9   r:   r   r   r   r     s4   

r   c                 K   s  zt d"i |}|jp|ddpd}|dur+t|tjr+t|du r+|jp'd}|}n|dur:t|tjs:t|}n|du r@d}|	dddu }	|dkr|j
p]tj
p]td	p]td
p]d}
|jpktjpktddpkd}|jpytjpytjpytd}tj|
||j|| |||j|	|ddd
}|W S |dkr|j
ptj
ptd}
|jptjptd}|jptjptjptdptd}|di }|dur|	dd ntd tj|
||| |||j|	|jd	}|W S tjjd|d|tjddtjdddd d! ty	 } z|d}~w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
    rF   r?   NFr>   r   Tr   rG   rH   rI   rJ   rK   r   )
rL   rM   rN   rO   r   r   r=   rQ   rR   r   r&   rS   rT   rU   rV   r   rW   rX   )	rL   rM   rN   r   r   r=   rQ   rR   rO   r]   r^   r_   r`   ra   rb   rc   rf   rj   r   )rm   r=   rn   r@   rA   rB   r   rD   rC   rl   rL   ro   rp   rq   rO   rM   rr   rs   r   rN   rQ   r   rt   r   ru   rw   rx   ry   rz   r{   r3   )r   r   r%   r(   r   r   r~   r=   r   rR   rL   rO   rM   r9   rN   r:   r   r   r   r     s   




<r   c              
      r   )z2
    Async: Get info about a fine-tuning job.
    Taretrieve_fine_tuning_jobN)
r+   r,   r   retrieve_fine_tuning_jobr.   r/   r0   r1   r2   r3   r   r   r   r   r     r   r   c                 K   s  zt d"i |}|jp|ddpd}|dur+t|tjr+t|du r+|jp'd}|}n|dur:t|tjs:t|}n|du r@d}|	dddu }|dkr|j
p]tj
p]td	p]td
p]d}	|jpktjpktddpkd}
|jpytjpytjpytd}tj|	||j|
| ||j||ddd	}|W S |dkr|j
ptj
ptd}	|jptjptd}|jptjptjptdptd}|di }|dur|	dd ntd tj|	||| ||j||jd}|W S tjjd|d|tjddtjdddd d! ty } z|d}~ww )#z+
    Get info about a fine-tuning job.
    rF   r?   NFr>   r   Tr   rG   rH   rI   rJ   rK   r   r   r&   rS   rT   rU   rV   r   rW   rX   r   zcLiteLLM doesn't support {} for 'retrieve_fine_tuning_job'. Only 'openai' and 'azure' are supported.r^   r_   r`   r   rb   rc   rf   rj   r   )rm   r=   rn   r@   rA   rB   r   rD   rC   rl   rL   ro   rp   rq   rO   rM   rr   rs   r   rN   rQ   r   rt   ru   rw   rx   ry   rz   r{   r3   r   r   r   r   r     s   




:r   )r   NN)NNr   NN)6__doc__r+   r.   rp   	functoolsr   typingr   r   r   r   r   r   rA   ro   Zlitellm._loggingr	   Z&litellm.llms.azure.fine_tuning.handlerr
   Z'litellm.llms.openai.fine_tuning.handlerr   Z*litellm.llms.vertex_ai.fine_tuning.handlerr   Zlitellm.secret_managers.mainr   Zlitellm.types.llms.openair   r   Zlitellm.types.routerZlitellm.types.utilsr   Zlitellm.utilsr   r   rs   ru   rv   r}   r   dictListintr)   r<   rC   rB   rE   r-   r   r   r   r   r   r   r   r   r   r   <module>   s   
 



&
	
5

	
 0%y
(
}%