o
    0Xxi                  	   @   sF  d dl mZ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
 ddlmZ dd	lmZ dd
lmZ ddlmZmZ 	dGdedeeef dedefddZ	dGdedeeef dedefddZ	dGdedeeef dedefddZ	dGdedeeef dedefddZ	dGdedeeef dedefddZ	dGdedeeef dedefddZ	dGdedeeef dedefddZ	dGdedeeef dedefdd Z	dGdedeeef dedefd!d"Z	dGdedeeef dedefd#d$Z	dGdedeeef dedefd%d&Z 	dGdedeeef dedefd'd(Z!	dGdedeeef dedefd)d*Z"	dGdedeeef dedefd+d,Z#	dGdedeeef dedefd-d.Z$	dGdedeeef dedefd/d0Z%	dGdedeeef dedefd1d2Z&	dGdedeeef dedefd3d4Z'	dGdedeeef dedefd5d6Z(	dGdedeeef dedefd7d8Z)	dGdedeeef dedefd9d:Z*	dGdedeeef dedefd;d<Z+	dGdedeeef dedefd=d>Z,	dGdedeeef dedefd?d@Z-G dAdB dBej.Z/G dCdD dDej.Z0G dEdF dFZ1dS )H    )OptionalUnion)	urlencode   )_api_module)_common)_transformers)types)	ApiClient)get_value_by_path)set_value_by_path)
AsyncPagerPagerN
api_clientfrom_objectparent_objectreturnc                 C   V   i }t |dgd urt|ddgt |dg t |dgd ur)t|dgt |dg |S Nname_urlconfiggetvsetvr   r   r   	to_object r   S/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/google/genai/tunings.py _GetTuningJobParameters_to_mldev      r   c                 C   r   r   r   r   r   r   r   !_GetTuningJobParameters_to_vertex-   r    r!   c                 C      i }t |dgd urt|ddgt |dg t |dgd ur*t|ddgt |dg t |dgd ur>t|ddgt |dg |S N	page_size_querypageSize
page_token	pageTokenfilterr   r   r   r   r   _ListTuningJobsConfig_to_mldev<      
r*   c                 C   r"   r#   r   r   r   r   r   _ListTuningJobsConfig_to_vertexU   r+   r,   c                 C   6   i }t |dgd urt|dgt| t |dg| |S Nr   )r   r   r*   r   r   r   r   "_ListTuningJobsParameters_to_mldevn      r/   c                 C   r-   r.   )r   r   r,   r   r   r   r   #_ListTuningJobsParameters_to_vertex   r0   r1   c                 C   sT   i }t |dgd urt|dgt |dg t |dgd ur(t|dgt |dg |S )N
text_input	textInputoutputr   r   r   r   r   _TuningExample_to_mldev      r5   c                 C   s8   i }t |dgd urtdt |dgd urtd|S )Nr2   z3text_input parameter is not supported in Vertex AI.r4   z/output parameter is not supported in Vertex AI.r   
ValueErrorr   r   r   r   _TuningExample_to_vertex   s   r9   c                    sX   i t |dgd urtdt |dgd ur*tddg fddt |dgD  S )Ngcs_uri1gcs_uri parameter is not supported in Gemini API.examplesc                       g | ]}t  |qS r   )r5   .0itemr   r   r   r   
<listcomp>       
z+_TuningDataset_to_mldev.<locals>.<listcomp>r   r8   r   r   r   r   r   rA   r   _TuningDataset_to_mldev   s   
	rF   c                 C   sH   i }t |dgd urt|ddgt |dg t |dgd ur"td|S )Nr:   supervisedTuningSpectrainingDatasetUrir<   z1examples parameter is not supported in Vertex AI.)r   r   r8   r   r   r   r   _TuningDataset_to_vertex   s   
rI   c                 C   s    i }t |dgd urtd|S )Nr:   r;   r7   r   r   r   r   !_TuningValidationDataset_to_mldev   s   rJ   c                 C   s.   i }t |dgd urt|dgt |dg |S )Nr:   validationDatasetUrir   r   r   r   r   "_TuningValidationDataset_to_vertex   s   rL   c                 C   s  i }t |dgd urtdt |dgd ur!t|dgt |dg t |dgd ur-tdt |dgd urAt|g dt |dg t |d	gd urUt|g d
t |d	g t |dgd uratdt |dgd urut|g dt |dg t |dgd urt|g dt |dg |S )Nvalidation_datasetz<validation_dataset parameter is not supported in Gemini API.tuned_model_display_namedisplayNamedescriptionz5description parameter is not supported in Gemini API.epoch_count)
tuningTaskhyperparameters
epochCountlearning_rate_multiplier)rR   rS   learningRateMultiplieradapter_sizez6adapter_size parameter is not supported in Gemini API.
batch_size)rR   rS   	batchSizelearning_rate)rR   rS   learningRaterD   r   r   r   r   _CreateTuningJobConfig_to_mldev   sP   




r\   c                 C   s*  i }t |dgd urt|dgt| t |dg| t |dgd ur,t|dgt |dg t |dgd ur?t|dgt |dg t |dgd urSt|g dt |dg t |dgd urgt|g d	t |dg t |d
gd ur{t|g dt |d
g t |dgd urtdt |dgd urtd|S )NrM   rG   rN   tunedModelDisplayNamerP   rQ   )rG   hyperParametersrT   rU   )rG   r^   rV   rW   )rG   r^   adapterSizerX   z3batch_size parameter is not supported in Vertex AI.rZ   z6learning_rate parameter is not supported in Vertex AI.)r   r   rL   r8   r   r   r   r    _CreateTuningJobConfig_to_vertex)  sP   



r`   c                 C      i }t |dgd urt|dgt |dg t |dgd ur-t|ddgt| t |dg| t |dgd urDt|dgt| t |dg| |S )N
base_model	baseModeltraining_datasetrR   trainingDatar   )r   r   rF   r\   r   r   r   r   #_CreateTuningJobParameters_to_mldeva  (   rf   c                 C   ra   )Nrb   rc   rd   rG   rH   r   )r   r   rI   r`   r   r   r   r   $_CreateTuningJobParameters_to_vertex  rg   rh   c                 C   sT   i }t |dgd urt|dgt |dg t |dgd ur(t|dgt |dg |S )Nr   modelendpointr   r   r   r   r   _TunedModel_from_mldev  r6   rk   c                 C   sT   i }t |dgd urt|dgt |dg t |dgd ur(t|dgt |dg |S )Nri   rj   r   r   r   r   r   _TunedModel_from_vertex  r6   rl   c              	   C   s8  i }t |dgd urt|dgt |dg t |dgd ur,t|dgt| t |dg t |dgd ur?t|dgt |dg t |ddgd urTt|dgt |ddg t |ddgd urit|d	gt |ddg t |d
gd ur|t|dgt |d
g t |dgd urt|dgt |dg t |dgd urt|dgt |dg t |dgd urt|dgt| t |dg| t |dgd urt|dgt |dg t |dgd urt|dgt |dg t |dgd urt|dgt |dg t |dgd urt|dgt |dg t |dgd urt|dgt |dg |S )Nr   state
createTimecreate_timerR   	startTime
start_timecompleteTimeend_time
updateTimeupdate_timerP   rc   rb   _selftuned_modeldistillationSpecdistillation_spec
experimentlabelspipelineJobpipeline_jobr]   rN   )r   r   tt_tuning_job_statusrk   r   r   r   r   _TuningJob_from_mldev  sp   

r   c              	   C   s  i }t |dgd urt|dgt |dg t |dgd ur,t|dgt| t |dg t |dgd ur?t|dgt |dg t |dgd urRt|dgt |dg t |dgd uret|dgt |dg t |d	gd urxt|d
gt |d	g t |dgd urt|dgt |dg t |dgd urt|dgt |dg t |dgd urt|dgt |dg t |dgd urt|dgt| t |dg| t |dgd urt|dgt |dg t |dgd urt|dgt |dg t |dgd urt|dgt |dg t |dgd urt|dgt |dg t |dgd ur*t|dgt |dg t |dgd ur>t|dgt |dg t |dgd urRt|dgt |dg t |dgd urft|dgt |dg t |dgd urzt|d gt |dg |S )!Nr   rm   rn   ro   rp   rq   endTimers   rt   ru   errorrP   rc   rb   
tunedModelrw   rG   supervised_tuning_spectuningDataStatstuning_data_statsencryptionSpecencryption_specpartnerModelTuningSpecpartner_model_tuning_specrx   ry   rz   r{   r|   r}   r]   rN   )r   r   r~   r   rl   r   r   r   r   _TuningJob_from_vertex  s   



r   c                    d   i t |dgd urtdgt |dg t |dgd ur0tdg fddt |dgD  S )NnextPageTokennext_page_tokentunedModelstuning_jobsc                    r=   r   )r   r>   rA   r   r   rB   s  rC   z6_ListTuningJobsResponse_from_mldev.<locals>.<listcomp>r   rE   r   rA   r   "_ListTuningJobsResponse_from_mldevf     
	r   c                    r   )Nr   r   
tuningJobsr   c                    r=   r   )r   r>   rA   r   r   rB     rC   z7_ListTuningJobsResponse_from_vertex.<locals>.<listcomp>r   rE   r   rA   r   #_ListTuningJobsResponse_from_vertex|  r   r   c                 C      i }t |dgd urt|dgt |dg t |dgd ur(t|dgt |dg t |dgd ur;t|dgt |dg t |dgd urNt|dgt |dg t |dgd urat|dgt |dg |S Nr   metadatadoner   responser   r   r   r   r   _Operation_from_mldev     r   c                 C   r   r   r   r   r   r   r   _Operation_from_vertex  r   r   c                
   @      e Zd Zdddedeej dejfddZdddeej	 dej
fdd	Zddd
edejdeej dejfddZddd
edejdeej dejfddZdddeej	 deej fddZdddedeej dejfddZedddd
edejdeej dejfddZdS )TuningsNr   r   r   r   c          
      C   s  t j||d}| jjrt| j|}d|d}nt| j|}d|d}|d}|r8| dt| }|	dd d}t
|trL|dd}nt|drT|j}t|}t|}| jd	|||}| jjrrt| j|}nt| j|}t jj||d
}	| j|	 |	S zzGets a TuningJob.

    Args:
      name: The resource name of the tuning job.

    Returns:
      A TuningJob object.
    r   r   z{name}r   r%   ?r   Nhttp_optionsgetr   kwargs)r	   _GetTuningJobParameters_api_clientvertexair!   
format_mapr   r   r   pop
isinstancedicthasattrr   r   convert_to_dictencode_unserializable_typesrequestr   r   	TuningJob_from_response_verify_response
selfr   r   parameter_modelrequest_dictpathquery_paramsr   response_dictreturn_valuer   r   r   _get  sF   




zTunings._getc          	      C   s  t j|d}| jjrt| j|}d|d}nt| j|}d|d}|d}|r7| dt| }|	dd d}t
|trK|d	d}nt|d	rS|j}t|}t|}| jd
|||}| jjrqt| j|}nt| j|}t jj||d}| j| |S zLists tuning jobs.

    Args:
      config: The configuration for the list request.

    Returns:
      A list of tuning jobs.
    r   r   r   r   r%   r   r   Nr   r   r   )r	   _ListTuningJobsParametersr   r   r1   r   r   r/   r   r   r   r   r   r   r   r   r   r   r   r   ListTuningJobsResponser   r   	r   r   r   r   r   r   r   r   r   r   r   r   _list   sL   




zTunings._listrb   rd   c                C   s   t j|||d}| jjstdt| j|}d|d}|d}|r.| dt| }|	dd d}t
|trB|d	d}nt|d	rJ|j}t|}t|}| jd
|||}	| jjrht| j|	}	nt| j|	}	t jj|	|d}
| j|
 |
S zCreates a supervised fine-tuning job.

    Args:
      base_model: The name of the model to tune.
      training_dataset: The training dataset to use.
      config: The configuration to use for the tuning job.

    Returns:
      A TuningJob object.
    rb   rd   r   z6This method is only supported in the Vertex AI client.r   r   r%   r   r   Nr   postr   )r	   _CreateTuningJobParametersr   r   r8   rh   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rb   rd   r   r   r   r   r   r   r   r   r   r   r   _tune<  B   




zTunings._tunec                C   s   t j|||d}| jjrtdt| j|}d|d}|d}|r.| dt| }|	dd d}t
|trB|d	d}nt|d	rJ|j}t|}t|}| jd
|||}	| jjrht| j|	}	nt| j|	}	t jj|	|d}
| j|
 |
S a  Creates a supervised fine-tuning job.

    Args:
      base_model: The name of the model to tune.
      training_dataset: The training dataset to use.
      config: The configuration to use for the tuning job.

    Returns:
      A TuningJob operation.
    r   z4This method is only supported in the default client.r   r   r%   r   r   Nr   r   r   )r	   r   r   r   r8   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	Operationr   r   r   r   r   r   _tune_mldevz  r   zTunings._tune_mldevc                C   s   t d| j| j|d|S Nr   r   )r   r   r   r   r   r   r   list  s   
zTunings.listc                C   s4   | j ||d}|jr| jjrtj|j| jjd |S Nr   )rz   projectr   rz   r   r   _IpythonUtilsdisplay_experiment_buttonr   r   r   r   jobr   r   r   r     s   zTunings.getSThe SDK's tuning implementation is experimental, and may change in future versions.c                C   s   | j jr| j|||d}n0| j|||d}| }z|d d }W n ty3   |d dd }Y nw tj|tj	j
d}|jrK| j jrKtj|jd |S 	Nr   r   r   r   z/operations/r   )r   rm   )tuning_job_resourcer   r   r   r   to_json_dictKeyError	partitionr	   r   JobStateJOB_STATE_QUEUEDr   r   display_model_tuning_buttonr   rb   rd   r   
tuning_job	operationoperation_dicttuned_model_namer   r   r   tune  s4   zTunings.tune)__name__
__module____qualname__strr   r	   GetTuningJobConfigOrDictr   r   ListTuningJobsConfigOrDictr   r   TuningDatasetOrDictCreateTuningJobConfigOrDictr   r   r   r   r   r   r   experimental_warningr   r   r   r   r   r     |    
=
A
C
?

	r   c                
   @   r   )AsyncTuningsNr   r   r   r   c          
         s  t j||d}| jjrt| j|}d|d}nt| j|}d|d}|d}|r9| dt| }|	dd d}t
|trM|dd}nt|drU|j}t|}t|}| jd	|||I dH }| jjrvt| j|}nt| j|}t jj||d
}	| j|	 |	S r   )r	   r   r   r   r!   r   r   r   r   r   r   r   r   r   r   r   r   async_requestr   r   r   r   r   r   r   r   r   r     sH   





zAsyncTunings._getc          	         s  t j|d}| jjrt| j|}d|d}nt| j|}d|d}|d}|r8| dt| }|	dd d}t
|trL|d	d}nt|d	rT|j}t|}t|}| jd
|||I dH }| jjrut| j|}nt| j|}t jj||d}| j| |S r   )r	   r   r   r   r1   r   r   r/   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   5  sN   





zAsyncTunings._listrb   rd   c                   s  t j|||d}| jjstdt| j|}d|d}|d}|r/| dt| }|	dd d}t
|trC|d	d}nt|d	rK|j}t|}t|}| jd
|||I dH }	| jjrlt| j|	}	nt| j|	}	t jj|	|d}
| j|
 |
S r   )r	   r   r   r   r8   rh   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   q  D   





zAsyncTunings._tunec                   s  t j|||d}| jjrtdt| j|}d|d}|d}|r/| dt| }|	dd d}t
|trC|d	d}nt|d	rK|j}t|}t|}| jd
|||I dH }	| jjrlt| j|	}	nt| j|	}	t jj|	|d}
| j|
 |
S r   )r	   r   r   r   r8   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     r   zAsyncTunings._tune_mldevc                   s    t d| j| j|dI d H |S r   )r   r   r   r   r   r   r     s   zAsyncTunings.listc                   s<   | j ||dI d H }|jr| jjrtj|j| jjd |S r   r   r   r   r   r   r     s   zAsyncTunings.getr   c                   s   | j jr| j|||dI d H }n3| j|||dI d H }| }z|d d }W n ty:   |d dd }Y nw tj|tj	j
d}|jrR| j jrRtj|jd |S r   r   r   r   r   r   r     s6   zAsyncTunings.tune)r   r   r   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     r   r   c                
   @   s   e Zd ZdZe ZedefddZede	fddZ
eddd	Zed
edee defddZe	ddededee ddfddZedededdfddZededdfddZdS )r   z6Temporary class to hold the IPython related functions.r   c                  C   s,   dd l } d| jv rddlm} | jjS dS )Nr   IPython)get_ipython )sysmodulesr   r   	__class__r   )r   r   r   r   r   _get_ipython_shell_name1  s
   

z%_IpythonUtils._get_ipython_shell_namec                   C   s   t t S N)boolr   r   r   r   r   r   is_ipython_available;  s   z"_IpythonUtils.is_ipython_availableNc                   C   s   dS )z8Returns the HTML style markup to support custom buttons.a  
    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
    <style>
      .view-vertex-resource,
      .view-vertex-resource:hover,
      .view-vertex-resource:visited {
        position: relative;
        display: inline-flex;
        flex-direction: row;
        height: 32px;
        padding: 0 12px;
          margin: 4px 18px;
        gap: 4px;
        border-radius: 4px;

        align-items: center;
        justify-content: center;
        background-color: rgb(255, 255, 255);
        color: rgb(51, 103, 214);

        font-family: Roboto,"Helvetica Neue",sans-serif;
        font-size: 13px;
        font-weight: 500;
        text-transform: uppercase;
        text-decoration: none !important;

        transition: box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
        box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2), 0px 2px 2px 0px rgba(0,0,0,0.14), 0px 1px 5px 0px rgba(0,0,0,0.12);
      }
      .view-vertex-resource:active {
        box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12);
      }
      .view-vertex-resource:active .view-vertex-ripple::before {
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        border-radius: 4px;
        pointer-events: none;

        content: '';
        background-color: rgb(51, 103, 214);
        opacity: 0.12;
      }
      .view-vertex-icon {
        font-size: 18px;
      }
    </style>
  r   r   r   r   r   _get_styles?  s   z_IpythonUtils._get_stylesmarkerresource_partsc                 C   sB   t t|D ]}|| | kr|d t|k r||d    S qdS )z,Returns the part after the marker text part.r   r   )rangelen)r   r   ir   r   r   _parse_resource_nameu  s
   z"_IpythonUtils._parse_resource_nameopen_in_newtexturliconc           	      C   s   d}| |std| dddl}dt|  }dt  d| d	| d
| d|  d}|d| d| d| d7 }ddlm} ddl	m
} ||| dS )a&  Creates and displays the link to open the Vertex resource.

    Args:
      text: The text displayed on the clickable button.
      url: The url that the button will lead to. Only cloud console URIs are
        allowed.
      icon: The icon name on the button (from material-icons library)
    z https://console.cloud.google.comzOnly urls starting with z are allowed.r   Nzview-vertex-resource-z	
        z-
        <a class="view-vertex-resource" id="z" href="#view-z;">
          <span class="material-icons view-vertex-icon">z</span>
          <span>z</span>
        </a>
        z]
        <script>
          (function () {
            const link = document.getElementById('z');
            link.addEventListener('click', (e) => {
              if (window.google?.colab?.openUrl) {
                window.google.colab.openUrl('z8');
              } else {
                window.open('z', '_blank');
              }
              e.stopPropagation();
              e.preventDefault();
            });
          })();
        </script>
    )display)HTML)
startswithr8   uuidr   uuid4r   r   IPython.core.displayr	  IPython.displayr
  )	r  r  r  CLOUD_UI_URLr  	button_idhtmlr	  r
  r   r   r   _display_link}  s4   
	
z_IpythonUtils._display_linkrz   r   c                 C   sl   t  r	| t jv rdS | d}|d }|d }d| d| d d|  }t d|d	 t j|  dS )
a  Function to generate a link bound to the Vertex experiment.

    Args:
      experiment: The Vertex experiment name. Example format:
        projects/{project_id}/locations/{location}/metadataStores/default/contexts/{experiment_name}
      project: The project (alphanumeric) name.
    N/   zAhttps://console.cloud.google.com/vertex-ai/experiments/locations/z/experiments/zruns?project=zView Experimentscience)r   r   displayed_experimentssplitr  add)rz   r   r   locationexperiment_nameurir   r   r   r     s   


z'_IpythonUtils.display_experiment_buttonr   c                 C   s^   t  sdS | d}|d }|d }|d }dd| d|  d	|  }t d
|d dS )zFunction to generate a link bound to the Vertex model tuning job.

    Args:
      tuning_job_resource: The Vertex tuning job name. Example format:
        projects/{project_id}/locations/{location}/tuningJobs/{tuning_job_id}
    Nr  r   r  r  z?https://console.cloud.google.com/vertex-ai/generative/language/z
locations/z/tuning/tuningJob/z	?project=zView Tuning Jobr   )r   r   r  r  )r   r   r   r  tuning_job_idr  r   r   r   r     s   
z)_IpythonUtils.display_model_tuning_button)r   N)r  )r   r   r   __doc__setr  staticmethodr   r   r   r   r   r   r  r   r  r   r   r   r   r   r   r   ,  s4    	53r   r   )2typingr   r   urllib.parser   r   r   r   r   r~   r	   r   r
   r   r   r   r   pagersr   r   r   objectr   r!   r*   r,   r/   r1   r5   r9   rF   rI   rJ   rL   r\   r`   rf   rh   rk   rl   r   r   r   r   r   r   
BaseModuler   r   r   r   r   r   r   <module>   s  

























;

;

!

!





P

a







  7  7