o
    Zho                  	   @   s  d dl Z d dlmZ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 e dZ	dHdedeeef dee defddZ	dHdedeeef dee defddZ	dHdedeeef dee defddZ	dHdedeeef dee defddZ	dHdedeeef dee defddZ	dHdedeeef dee defddZ	dHdedeeef dee defddZ 	dHdedeeef dee defd d!Z!	dHdedeeef dee defd"d#Z"	dHdedeeef dee defd$d%Z#	dHdedeeef dee defd&d'Z$	dHdedeeef dee defd(d)Z%	dHdedeeef dee defd*d+Z&	dHdedeeef dee defd,d-Z'	dHdedeeef dee defd.d/Z(	dHdedeeef dee defd0d1Z)	dHdedeeef dee defd2d3Z*	dHdedeeef dee defd4d5Z+	dHdedeeef dee defd6d7Z,	dHdedeeef dee defd8d9Z-	dHdedeeef dee defd:d;Z.	dHdedeeef dee defd<d=Z/	dHdedeeef dee defd>d?Z0	dHdedeeef dee defd@dAZ1G dBdC dCej2Z3G dDdE dEej2Z4G dFdG dGZ5dS )I    N)AnyOptionalUnion)	urlencode   )_api_module)_common)_transformers)types)BaseApiClient)get_value_by_path)set_value_by_path)
AsyncPagerPagerzgoogle_genai.tunings
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   K/var/www/html/lang_env/lib/python3.10/site-packages/google/genai/tunings.py _GetTuningJobParameters_to_mldev!      r    c                 C   r   r   r   r   r   r   r   !_GetTuningJobParameters_to_vertex0   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 NZ	page_size_queryZpageSizeZ
page_tokenZ	pageTokenfilterr   r   r   r   r   _ListTuningJobsConfig_to_mldev?      
r'   c                 C   r#   r$   r   r   r   r   r   _ListTuningJobsConfig_to_vertexX   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_mldevq      r,   c                 C   r*   r+   )r   r   r)   r   r   r   r   #_ListTuningJobsParameters_to_vertex   r-   r.   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_inputZ	textInputoutputr   r   r   r   r   _TuningExample_to_mldev      r1   c                 C   s8   i }t |dgd urtdt |dgd urtd|S )Nr/   z3text_input parameter is not supported in Vertex AI.r0   z/output parameter is not supported in Vertex AI.r   
ValueErrorr   r   r   r   _TuningExample_to_vertex   s   r5   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   )r1   .0itemr   r   r   r   
<listcomp>       
z+_TuningDataset_to_mldev.<locals>.<listcomp>r   r4   r   r   r   r   r   r=   r   _TuningDataset_to_mldev   s   
	rB   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 )Nr6   supervisedTuningSpectrainingDatasetUrir8   z1examples parameter is not supported in Vertex AI.)r   r   r4   r   r   r   r   _TuningDataset_to_vertex   s   
rE   c                 C   s    i }t |dgd urtd|S )Nr6   r7   r3   r   r   r   r   !_TuningValidationDataset_to_mldev   s   rF   c                 C   s.   i }t |dgd urt|dgt |dg |S )Nr6   ZvalidationDatasetUrir   r   r   r   r   "_TuningValidationDataset_to_vertex   s   rG   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_nameZdisplayNamedescriptionz5description parameter is not supported in Gemini API.epoch_count)
tuningTaskhyperparameters
epochCountlearning_rate_multiplier)rL   rM   learningRateMultiplieradapter_sizez6adapter_size parameter is not supported in Gemini API.
batch_size)rL   rM   Z	batchSizelearning_rate)rL   rM   ZlearningRater@   r   r   r   r   _CreateTuningJobConfig_to_mldev   sP   




rT   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 )NrH   rC   rI   tunedModelDisplayNamerJ   rK   )rC   hyperParametersrN   rO   )rC   rV   rP   rQ   )rC   rV   ZadapterSizerR   z3batch_size parameter is not supported in Vertex AI.rS   z6learning_rate parameter is not supported in Vertex AI.)r   r   rG   r4   r   r   r   r    _CreateTuningJobConfig_to_vertex,  sP   



rW   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_datasetrL   ZtrainingDatar   )r   r   rB   rT   r   r   r   r   #_CreateTuningJobParameters_to_mldevd  (   r\   c                 C   rX   )NrY   rZ   r[   rC   rD   r   )r   r   rE   rW   r   r   r   r   $_CreateTuningJobParameters_to_vertex  r]   r^   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  r2   ra   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_   r`   r   r   r   r   r   _TunedModel_from_vertex  r2   rb   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_timerL   	startTime
start_timeZcompleteTimeend_time
updateTimeupdate_timerJ   rZ   rY   _selftuned_modeldistillationSpecdistillation_spec
experimentlabelspipelineJobpipeline_jobrU   rI   )r   r   tt_tuning_job_statusra   r   r   r   r   _TuningJob_from_mldev  sp   

ru   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   rc   rd   re   rf   rg   ZendTimerh   ri   rj   errorrJ   rZ   rY   
tunedModelrl   rC   Zsupervised_tuning_specZtuningDataStatsZtuning_data_statsZencryptionSpecZencryption_specZpartnerModelTuningSpecZpartner_model_tuning_specrm   rn   ro   rp   rq   rr   rU   rI   )r   r   rs   rt   rb   r   r   r   r   _TuningJob_from_vertex  s   



rx   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                    r9   r   )ru   r:   r=   r   r   r>   v  r?   z6_ListTuningJobsResponse_from_mldev.<locals>.<listcomp>r   rA   r   r=   r   "_ListTuningJobsResponse_from_mldevi     
	r~   c                    ry   )Nrz   r{   
tuningJobsr}   c                    r9   r   )rx   r:   r=   r   r   r>     r?   z7_ListTuningJobsResponse_from_vertex.<locals>.<listcomp>r   rA   r   r=   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donerv   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   s8  t j||d}| jjr!t| j|}|d}|rd|}nd}nt| j|}|d}|r4d|}nd}|d}|rF| dt| }|	dd d}t
|trZ|dd}nt|drf|durf|j}t|}t|}| jd	|||}	| jjrt| 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   r   z{name}r%   ?r   Nhttp_optionsgetr   kwargs)r
   _GetTuningJobParameters_api_clientvertexair"   r   
format_mapr    r   pop
isinstancedicthasattrr   r   convert_to_dictencode_unserializable_typesrequestrx   ru   	TuningJob_from_response
model_dump_verify_responseselfr   r   parameter_modelrequest_dictrequest_url_dictpathquery_paramsr   response_dictreturn_valuer   r   r   _get  sR   





zTunings._getc          
      C   s6  t j|d}| jjr t| j|}|d}|rd|}nd}nt| j|}|d}|r3d|}nd}|d}|rE| dt| }|	dd d}t
|trY|d	d}nt|d	re|dure|j}t|}t|}| jd
|||}| jjrt| j|}nt| j|}t jj|| d}	| j|	 |	S zLists `TuningJob` objects.

    Args:
      config: The configuration for the list request.

    Returns:
      A list of `TuningJob` objects.
    r   r   r   r|   r%   r   r   Nr   r   r   )r
   _ListTuningJobsParametersr   r   r.   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   r   r   _list  sX   





zTunings._listrY   r[   c                C   s  t j|||d}| jjstdt| j|}|d}|r#d|}nd}|d}|r5| dt| }|	dd d}	t
|trI|d	d}	nt|d	rU|durU|j}	t|}t|}| jd
|||	}
| jjrst| j|
}
nt| j|
}
t jj|
| d}| j| |S a  Creates a supervised fine-tuning job and returns the TuningJob object.

    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.
    rY   r[   r   z6This method is only supported in the Vertex AI client.r   r   r%   r   r   Nr   postr   )r
   _CreateTuningJobParametersr   r   r4   r^   r   r   r   r   r   r   r   r   r   r   r   r   rx   ru   r   r   r   r   r   rY   r[   r   r   r   r   r   r   r   r   r   r   r   r   _tuneS  H   




zTunings._tunec                C   s  t j|||d}| jjrtdt| j|}|d}|r#d|}nd}|d}|r5| dt| }|	dd d}	t
|trI|d	d}	nt|d	rU|durU|j}	t|}t|}| jd
|||	}
| jjrst| j|
}
nt| j|
}
t jj|
| d}| j| |S a"  Creates a supervised fine-tuning job and returns the TuningJob object.

    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   r4   r\   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	Operationr   r   r   r   r   r   r   _tune_mldev  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   s@   | j ||d}|jr| jjr| jjd urtj|j| jjd |S Nr   )ro   projectr   ro   r   r   r   _IpythonUtilsdisplay_experiment_buttonr   r   r   Z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}n2| j|||d}|jd ur%d|jv r%|jd }n|jd u r.td|jdd }tj	|tj
jd}|jrM| j jrMtj|jd |S Nr   rw   zOperation name is required.z/operations/r   )r   rc   )tuning_job_resourcer   r   r   r   r   r   r4   	partitionr
   r   ZJobStateZJOB_STATE_QUEUEDr   display_model_tuning_buttonr   rY   r[   r   Z
tuning_jobZ	operationZtuned_model_namer   r   r   tune  s2   
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     |    
G
K
H
D

	r   c                
   @   r   )AsyncTuningsNr   r   r   r   c                   s@  t j||d}| jjr"t| j|}|d}|rd|}nd}nt| j|}|d}|r5d|}nd}|d}|rG| dt| }|	dd d}t
|tr[|dd}nt|drg|durg|j}t|}t|}| jd	|||I dH }	| jjrt| 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_requestrx   ru   r   r   r   r   r   r   r   r   r     sT   






zAsyncTunings._getc          
         s>  t j|d}| jjr!t| j|}|d}|rd|}nd}nt| j|}|d}|r4d|}nd}|d}|rF| dt| }|	dd d}t
|trZ|d	d}nt|d	rf|durf|j}t|}t|}| jd
|||I dH }| jjrt| 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   r   r   r~   r   r   r   r   r   r   r   r   r   e  sZ   






zAsyncTunings._listrY   r[   c                   s  t j|||d}| jjstdt| j|}|d}|r$d|}nd}|d}|r6| dt| }|	dd d}	t
|trJ|d	d}	nt|d	rV|durV|j}	t|}t|}| jd
|||	I dH }
| jjrwt| j|
}
nt| j|
}
t jj|
| d}| j| |S r   )r
   r   r   r   r4   r^   r   r   r   r   r   r   r   r   r   r   r   r   rx   ru   r   r   r   r   r   r   r   r   r     J   





zAsyncTunings._tunec                   s  t j|||d}| jjrtdt| j|}|d}|r$d|}nd}|d}|r6| dt| }|	dd d}	t
|trJ|d	d}	nt|d	rV|durV|j}	t|}t|}| jd
|||	I dH }
| jjrwt| j|
}
nt| j|
}
t jj|
| d}| j| |S r   )r
   r   r   r   r4   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   zAsyncTunings._tune_mldevc                   s    t d| j| j|dI d H |S r   )r   r   r   r   r   r   r   1  s   zAsyncTunings.listc                   sH   | j ||dI d H }|jr"| jjr"| jjd u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 }n5| j|||dI d H }|jd ur,d|jv r,|jd }n|jd u r5td|jdd }tj	|tj
jd}|jrT| j jrTtj|jd |S r   r   r   r   r   r   r   M  s4   
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U dZe Zee ed< edefddZ	ede
fddZedef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.displayed_experimentsr   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_namez  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_availablec                   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_name  s
   z"_IpythonUtils._parse_resource_nameopen_in_newtexturliconNc           	      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)
startswithr4   uuidr   uuid4r   r   ZIPython.core.displayr   IPython.displayr   )	r   r   r   ZCLOUD_UI_URLr   Z	button_idhtmlr   r   r   r   r   _display_link  s4   
	
z_IpythonUtils._display_linkro   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 ExperimentZscience)r   r   r   splitr   add)ro   r   r   locationZ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   Ztuning_job_idr   r   r   r   r     s   
z)_IpythonUtils.display_model_tuning_button)r   )r   r   r   __doc__setr   r   __annotations__staticmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   u  s4   
 	53r   r   )6loggingtypingr   r   r   urllib.parser   r   r   r   r	   rs   r
   r   r   r   r   r   r   Zpagersr   r   	getLoggerloggerr   objectr    r"   r'   r)   r,   r.   r1   r5   rB   rE   rF   rG   rT   rW   r\   r^   ra   rb   ru   rx   r~   r   r   r   Z
BaseModuler   r   r   r   r   r   r   <module>   s  


























;

;

!

!





P

a







  Z  Z