o
    ZhI                  	   @   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 ddlmZmZ e dZ	dSdedeeef dee defddZ	dSdedeeef dee defddZ	dSdedeeef dee defddZ	dSdedeeef dee defddZ	dSdedeeef dee defddZ	dSdedeeef dee defddZ 	dSdedeeef dee defdd Z!	dSdedeeef dee defd!d"Z"	dSdedeeef dee defd#d$Z#	dSdedeeef dee defd%d&Z$	dSdedeeef dee defd'd(Z%	dSdedeeef dee defd)d*Z&	dSdedeeef dee defd+d,Z'	dSdedeeef dee defd-d.Z(	dSdedeeef dee defd/d0Z)	dSdedeeef dee defd1d2Z*	dSdedeeef dee defd3d4Z+	dSdedeeef dee defd5d6Z,	dSdedeeef dee defd7d8Z-	dSdedeeef dee defd9d:Z.	dSdedeeef dee defd;d<Z/	dSdedeeef dee defd=d>Z0	dSdedeeef dee defd?d@Z1	dSdedeeef dee defdAdBZ2	dSdedeeef dee defdCdDZ3	dSdedeeef dee defdEdFZ4	dSdedeeef dee defdGdHZ5	dSdedeeef dee defdIdJZ6	dSdedeeef dee defdKdLZ7	dSdedeeef dee defdMdNZ8G dOdP dPej9Z:G dQdR dRej9Z;dS )T    N)AnyOptionalUnion)	urlencode   )_api_module)_common)_extra_utils)_transformers)types)BaseApiClient)get_value_by_path)set_value_by_path)
AsyncPagerPagerzgoogle_genai.batches
api_clientfrom_objectparent_objectreturnc                 C   P   i }t |dgd urtdt |dgd urtdt |dgd ur&td|S Nformatz0format parameter is not supported in Gemini API.gcs_uriz1gcs_uri parameter is not supported in Gemini API.bigquery_uriz6bigquery_uri parameter is not supported in Gemini API.getv
ValueErrorr   r   r   	to_object r   K/var/www/html/lang_env/lib/python3.10/site-packages/google/genai/batches.py_BatchJobSource_to_mldev"      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 |dg t |dgd ur=t|ddgt |dg |S )	Nr   instancesFormatr   	gcsSourceurisr   bigquerySourceinputUrir   setvr   r   r   r    _BatchJobSource_to_vertex4   s   
r+   c                 C   r   r   r   r   r   r   r    _BatchJobDestination_to_mldevJ   r"   r,   c                 C   r#   )	Nr   predictionsFormatr   gcsDestinationoutputUriPrefixr   bigqueryDestination	outputUrir)   r   r   r   r    _BatchJobDestination_to_vertex\   s    

r2   c                 C   sF   i }t |dgd urt|dgt |dg t |dgd ur!td|S )Ndisplay_namedisplayNamedestz.dest parameter is not supported in Gemini API.r   r*   r   r   r   r   r    _CreateBatchJobConfig_to_mldevv   s   r7   c                 C   sd   i }t |dgd urt|dgt |dg t |dgd ur0t|dgt| t| t |dg| |S )Nr3   r4   r5   outputConfig)r   r*   r2   tZt_batch_job_destinationr   r   r   r    _CreateBatchJobConfig_to_vertex   s   
r:   c                 C   sf   i }t |dgd urtdt |dgd urtdt |dgd ur1t|dgt| t |dg| |S )Nmodelz/model parameter is not supported in Gemini API.srcz-src parameter is not supported in Gemini API.config)r   r   r*   r7   r   r   r   r    "_CreateBatchJobParameters_to_mldev   s   r>   c                 C   s   i }t |dgd urt|dgt| t |dg t |dgd ur4t|dgt| t| t |dg| t |dgd urKt|dgt| t |dg| |S )Nr;   r<   inputConfigr=   )r   r*   r9   Zt_modelr+   Zt_batch_job_sourcer:   r   r   r   r    #_CreateBatchJobParameters_to_vertex   s4   
r@   c                 C   F   i }t |dgd urtdt |dgd ur!t|dgt |dg |S Nnamez.name parameter is not supported in Gemini API.r=   r   r   r*   r   r   r   r    _GetBatchJobParameters_to_mldev      rE   c              	   C   ^   i }t |dgd urt|ddgt| t |dg t |dgd ur-t|dgt |dg |S NrC   _urlr=   r   r*   r9   Zt_batch_job_namer   r   r   r     _GetBatchJobParameters_to_vertex      rK   c                 C   rA   rB   rD   r   r   r   r    "_CancelBatchJobParameters_to_mldev   rF   rM   c              	   C   rG   rH   rJ   r   r   r   r    #_CancelBatchJobParameters_to_vertex  rL   rN   c                 C   sp   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r6td|S )N	page_size_querypageSize
page_token	pageTokenfilterz0filter parameter is not supported in Gemini API.r6   r   r   r   r    _ListBatchJobsConfig_to_mldev  s   
rU   c                 C   s   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 )NrO   rP   rQ   rR   rS   rT   r)   r   r   r   r    _ListBatchJobsConfig_to_vertex7  s   
rV   c                 C   s    i }t |dgd urtd|S )Nr=   z0config parameter is not supported in Gemini API.r   r   r   r   r    !_ListBatchJobsParameters_to_mldevP  s   rW   c                 C   s6   i }t |dgd urt|dgt| t |dg| |S )Nr=   )r   r*   rV   r   r   r   r    "_ListBatchJobsParameters_to_vertex\  s   rX   c                 C   rA   rB   rD   r   r   r   r    "_DeleteBatchJobParameters_to_mldevn  rF   rY   c              	   C   rG   rH   rJ   r   r   r   r    #_DeleteBatchJobParameters_to_vertex}  rL   rZ   c                 C      i }|S Nr   r   r   r   r    _JobError_from_mldev     r]   c                 C   sz   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 |S )Ndetailscodemessager)   r   r   r   r    _JobError_from_vertex  s   rb   c                 C   r[   r\   r   r   r   r   r    _BatchJobSource_from_mldev  r^   rc   c                 C      i }t |dgd urt|dgt |dg t |ddgd ur*t|dgt |ddg t |ddgd ur?t|dgt |ddg |S )	Nr$   r   r%   r&   r   r'   r(   r   r)   r   r   r   r    _BatchJobSource_from_vertex  s   re   c                 C   r[   r\   r   r   r   r   r    _BatchJobDestination_from_mldev  r^   rf   c                 C   rd   )	Nr-   r   r.   r/   r   r0   r1   r   r)   r   r   r   r     _BatchJobDestination_from_vertex  s    rg   c                 C   r[   r\   r   r   r   r   r    _BatchJob_from_mldev  r^   rh   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 |dg t |dgd ur;t|dgt |dg t |dgd urRt|dgt| 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| t |dg| |S )NrC   r4   r3   stateerrorZ
createTimeZcreate_timeZ	startTime
start_timeZendTimeend_timeZ
updateTimeZupdate_timer;   r?   r<   r8   r5   )r   r*   rb   re   rg   r   r   r   r    _BatchJob_from_vertex  sT   rm   c                 C   s.   i }t |dgd urt|dgt |dg |S )NnextPageTokennext_page_tokenr)   r   r   r   r    !_ListBatchJobsResponse_from_mldev6  s   rp   c                    sd   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 )Nrn   ro   batchPredictionJobs
batch_jobsc                    s   g | ]}t  |qS r   )rm   ).0itemr   r   r   r    
<listcomp>O  s    
z6_ListBatchJobsResponse_from_vertex.<locals>.<listcomp>r)   )r   r   r   r   ru   r    "_ListBatchJobsResponse_from_vertexB  s   
	rw   c                 C   r[   r\   r   r   r   r   r    _DeleteResourceJob_from_mldevX  r^   rx   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 |dg t |dgd ur?t|dgt| t |dg| |S )NrC   donerj   )r   r*   rb   r   r   r   r    _DeleteResourceJob_from_vertexb  s   rz   c                	   @      e Zd Zdddededeej dejfddZddd	edeej	 dejfd
dZ
ddd	edeej ddfddZdejdejfddZddd	edeej dejfddZdddede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S )BatchesNr=   r;   r<   r=   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 Nr;   r<   r=   6This method is only supported in the Vertex AI client.rI   rq   rP   ?r=   http_optionspostresponsekwargs)r   _CreateBatchJobParameters_api_clientvertexair   r@   get
format_mapr   pop
isinstancedicthasattrr   r   convert_to_dictencode_unserializable_typesrequestrm   rh   BatchJob_from_response
model_dump_verify_responseselfr;   r<   r=   parameter_modelrequest_dictrequest_url_dictpathquery_paramsr   response_dictreturn_valuer   r   r    _create|  sH   




zBatches._createrC   c                C     t j||d}| jjstdt| j|}|d}|r"d|}nd}|d}|r4| dt| }|	dd d}t
|trH|d	d}nt|d	rT|durT|j}t|}t|}| jd
|||}	| jjrrt| j|	}	nt| j|	}	t jj|	| d}
| j|
 |
S )a  Gets a batch job.

    Args:
      name (str): A fully-qualified BatchJob resource name or ID.
        Example: "projects/.../locations/.../batchPredictionJobs/456" or "456"
          when project and location are initialized in the client.

    Returns:
      A BatchJob object that contains details about the batch job.

    Usage:

    .. code-block:: python

      batch_job = client.batches.get(name='123456789')
      print(f"Batch job: {batch_job.name}, state {batch_job.state}")
    rC   r=   r   rI   batchPredictionJobs/{name}rP   r   r=   Nr   r   r   )r   _GetBatchJobParametersr   r   r   rK   r   r   r   r   r   r   r   r   r   r   r   r   rm   rh   r   r   r   r   r   rC   r=   r   r   r   r   r   r   r   r   r   r   r    r     sF   




zBatches.getc          
      C   s   t j||d}| jjstdt| j|}|d}|r"d|}nd}|d}|r4| dt| }|	dd d}t
|trH|d	d}nt|d	rT|durT|j}t|}t|}| jd
|||}	dS )a  Cancels a batch job.

    Only available for batch jobs that are running or pending.

    Args:
      name (str): A fully-qualified BatchJob resource name or ID.
        Example: "projects/.../locations/.../batchPredictionJobs/123456789" or
          "123456789" when project and location are initialized in the client.

    Usage:

    .. code-block:: python

      client.batches.cancel(name='123456789')
    r   r   rI   !batchPredictionJobs/{name}:cancelrP   r   r=   Nr   r   )r   _CancelBatchJobParametersr   r   r   rN   r   r   r   r   r   r   r   r   r   r   r   r   
r   rC   r=   r   r   r   r   r   r   r   r   r   r    cancel  s6   




zBatches.cancelc          
      C   s  t j|d}| jjstdt| j|}|d}|r!d|}nd}|d}|r3| dt| }|	dd  d }t
|trG|dd }nt|drS|d urS|j}t|}t|}| jd	|||}| jjrqt| j|}nt| j|}t jj|| d
}	| j|	 |	S Nr}   r   rI   rq   rP   r   r=   r   r   r   )r   _ListBatchJobsParametersr   r   r   rX   r   r   r   r   r   r   r   r   r   r   r   r   rw   rp   ListBatchJobsResponser   r   r   
r   r=   r   r   r   r   r   r   r   r   r   r   r    _list4  sL   




zBatches._listc                C   r   )a  Deletes a batch job.

    Args:
      name (str): A fully-qualified BatchJob resource name or ID.
        Example: "projects/.../locations/.../batchPredictionJobs/456" or "456"
          when project and location are initialized in the client.

    Returns:
      A DeleteResourceJob object that shows the status of the deletion.

    Usage:

    .. code-block:: python

      client.batches.delete(name='123456789')
    r   r   rI   r   rP   r   r=   Nr   deleter   )r   _DeleteBatchJobParametersr   r   r   rZ   r   r   r   r   r   r   r   r   r   r   r   r   rz   rx   DeleteResourceJobr   r   r   r   r   r   r    r   j  sN   




zBatches.deletec                C   s   t ||}| j|||dS )a{  Creates a batch job.

    Args:
      model (str): The model to use for the batch job.
      src (str): The source of the batch job. Currently supports GCS URI(-s) or
        BigQuery URI. Example: "gs://path/to/input/data" or
        "bq://projectId.bqDatasetId.bqTableId".
      config (CreateBatchJobConfig): Optional configuration for the batch job.

    Returns:
      A BatchJob object that contains details about the batch job.

    Usage:

    .. code-block:: python

      batch_job = client.batches.create(
          model="gemini-1.5-flash",
          src="gs://path/to/input/data",
      )
      print(batch_job.state)
    r   r	   Zformat_destinationr   r   r;   r<   r=   r   r   r    create  s   zBatches.createc                C   s(   |du rt  }td| j| j|d|S )a  Lists batch jobs.

    Args:
      config (ListBatchJobsConfig): Optional configuration for the list request.

    Returns:
      A Pager object that contains one page of batch jobs. When iterating over
      the pager, it automatically fetches the next page if there are more.

    Usage:

    .. code-block:: python

      batch_jobs = client.batches.list(config={"page_size": 10})
      for batch_job in batch_jobs:
        print(f"Batch job: {batch_job.name}, state {batch_job.state}")
    Nrr   r}   )r   ListBatchJobsConfigr   r   r   r=   r   r   r    list  s   
zBatches.list)__name__
__module____qualname__strr   r   CreateBatchJobConfigOrDictr   r   GetBatchJobConfigOrDictr   CancelBatchJobConfigOrDictr   ListBatchJobsConfigOrDictr   r   DeleteBatchJobConfigOrDictr   r   r   r   r   r   r   r   r    r|   z  sp    
9
I
;
:
P
!r|   c                	   @   r{   )AsyncBatchesNr}   r;   r<   r=   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   r   r@   r   r   r   r   r   r   r   r   r   r   r   async_requestrm   rh   r   r   r   r   r   r   r   r    r     sJ   





zAsyncBatches._createrC   c                     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
|||I dH }	| jjrvt| j|	}	nt| j|	}	t jj|	| d}
| j|
 |
S )a  Gets a batch job.

    Args:
      name (str): A fully-qualified BatchJob resource name or ID.
        Example: "projects/.../locations/.../batchPredictionJobs/456" or "456"
          when project and location are initialized in the client.

    Returns:
      A BatchJob object that contains details about the batch job.

    Usage:

    .. code-block:: python

      batch_job = await client.aio.batches.get(name='123456789')
      print(f"Batch job: {batch_job.name}, state {batch_job.state}")
    r   r   rI   r   rP   r   r=   Nr   r   r   )r   r   r   r   r   rK   r   r   r   r   r   r   r   r   r   r   r   r   rm   rh   r   r   r   r   r   r   r   r    r   -  sH   





zAsyncBatches.getc          
         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
|||I dH }	dS )a  Cancels a batch job.

    Only available for batch jobs that are running or pending.

    Args:
      name (str): A fully-qualified BatchJob resource name or ID.
        Example: "projects/.../locations/.../batchPredictionJobs/123456789" or
          "123456789" when project and location are initialized in the client.

    Usage:

    .. code-block:: python

      await client.aio.batches.cancel(name='123456789')
    r   r   rI   r   rP   r   r=   Nr   r   )r   r   r   r   r   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r  s8   




zAsyncBatches.cancelc          
         s  t j|d}| jjstdt| j|}|d}|r"d|}nd}|d}|r4| dt| }|	dd  d }t
|trH|dd }nt|drT|d u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   r   rX   r   r   r   r   r   r   r   r   r   r   r   r   rw   rp   r   r   r   r   r   r   r   r    r     sN   





zAsyncBatches._listc                   r   )a  Deletes a batch job.

    Args:
      name (str): A fully-qualified BatchJob resource name or ID.
        Example: "projects/.../locations/.../batchPredictionJobs/456" or "456"
          when project and location are initialized in the client.

    Returns:
      A DeleteResourceJob object that shows the status of the deletion.

    Usage:

    .. code-block:: python

      await client.aio.batches.delete(name='123456789')
    r   r   rI   r   rP   r   r=   Nr   r   r   )r   r   r   r   r   rZ   r   r   r   r   r   r   r   r   r   r   r   r   rz   rx   r   r   r   r   r   r   r   r    r     sP   





zAsyncBatches.deletec                   s$   t ||}| j|||dI dH S )aw  Creates a batch job asynchronously.

    Args:
      model (str): The model to use for the batch job.
      src (str): The source of the batch job. Currently supports GCS URI(-s) or
        BigQuery URI. Example: "gs://path/to/input/data" or
        "bq://projectId.bqDatasetId.bqTableId".
      config (CreateBatchJobConfig): Optional configuration for the batch job.

    Returns:
      A BatchJob object that contains details about the batch job.

    Usage:

    .. code-block:: python

      batch_job = await client.aio.batches.create(
          model="gemini-1.5-flash",
          src="gs://path/to/input/data",
      )
    r   Nr   r   r   r   r    r   .  s   zAsyncBatches.createc                   s0   |du r	t  }td| j| j|dI dH |S )a(  Lists batch jobs asynchronously.

    Args:
      config (ListBatchJobsConfig): Optional configuration for the list request.

    Returns:
      A Pager object that contains one page of batch jobs. When iterating over
      the pager, it automatically fetches the next page if there are more.

    Usage:

    .. code-block:: python

      batch_jobs = await client.aio.batches.list(config={'page_size': 5})
      print(f"current page: {batch_jobs.page}")
      await batch_jobs_pager.next_page()
      print(f"next page: {batch_jobs_pager.page}")
    Nrr   r}   )r   r   r   r   r   r   r   r    r   M  s   zAsyncBatches.list)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     sp    
9
I
;
:
P
 r   r\   )<loggingtypingr   r   r   urllib.parser    r   r   r	   r
   r9   r   r   r   r   r   r   r*   Zpagersr   r   	getLoggerloggerr   objectr!   r+   r,   r2   r7   r:   r>   r@   rE   rK   rM   rN   rU   rV   rW   rX   rY   rZ   r]   rb   rc   re   rf   rg   rh   rm   rp   rw   rx   rz   Z
BaseModuler|   r   r   r   r   r    <module>   sz  
















'



































?







  {