U
    h                     @   s   d dl Z d dlmZmZ d dlm  mZ d dlm	Z	 d dl
mZ ddejdddZG d	d
 d
ejZdd Zdddee eej ejdddZdS )    N)OptionalList)get_default_model_client)model_types)client)returnc                C   s4   |dkrt  }|j| d}t||}tjf |S )z/Get the `types.Model` for the given model name.N)name)r   	get_modeltypeto_dictr   Model)r   r   result r   >/tmp/pip-unpacked-wheel-doshhd5e/google/generativeai/models.pyr	      s
    r	   c                   @   s@   e Zd Zeee eej ee	j
 dddZdd Zdd ZdS )	ModelsIterable)	page_size
page_tokenmodelsr   c                C   s   || _ || _|| _|| _d S N)
_page_size_page_token_models_client)selfr   r   r   r   r   r   r   __init__"   s    zModelsIterable.__init__c                 c   s"   | r| j }|E d H  |  } q d S r   )r   
_next_page)r   pager   r   r   __iter__/   s    
zModelsIterable.__iter__c                 C   s   | j s
d S t| j| j | jdS )N)r   r   r   )r   _list_modelsr   r   )r   r   r   r   r   5   s      zModelsIterable._next_pageN)__name__
__module____qualname__intr   strr   r   r   glmModelServiceClientr   r   r   r   r   r   r   r   !   s   r   c                 C   s`   |j | |d}|j}t||}dd |d D |d< | |d< |d|d< ||d< tf |S )	N)r   r   c                 S   s   g | ]}t jf |qS r   )r   r   ).0modr   r   r   
<listcomp>B   s     z _list_models.<locals>.<listcomp>r   r   Znext_page_tokenr   r   )list_models	_responser
   r   popr   )r   r   r   r   r   r   r   r   =   s    r   r   r   )r   r   r   c                 C   s   |dkrt  }t| d|dS )ap  Lists available models.

    ```
    import pprint
    for model in genai.list_models():
        pprint.pprint(model)
    ```

    Args:
        page_size: How many `types.Models` to fetch per page (api call).
        client: You may pass a `glm.ModelServiceClient` instead of using the default client.

    Returns:
        An iterable of `types.Model` objects.

    N)r   r   )r   r   r,   r   r   r   r)   I   s    r)   )Zdataclassestypingr   r   Zgoogle.ai.generativelanguageZaiZgenerativelanguager$   Zgoogle.generativeai.clientr   Zgoogle.generativeai.typesr   r   r	   r   r   r"   r%   r)   r   r   r   r   <module>   s   
  