
    Ng                     j    d Z ddlmZmZmZ ddlZddlmZ ddlm	Z	m
Z
mZ dZdZ G d d	e	          ZdS )
zUtil that calls Google Books.    )DictListOptionalNget_from_dict_or_env)	BaseModel
ConfigDictmodel_validator   z+https://www.googleapis.com/books/v1/volumesc                       e Zd ZU dZdZee         ed<   eZ	e
ed<    ed          Z ed          ed	ed
efd                        Zded
efdZdeded
efdZded
efdZdS )GoogleBooksAPIWrappera  Wrapper around Google Books API.

    To use, you should have a Google Books API key available.
    This wrapper will use the Google Books API to conduct searches and
    fetch books based on a query passed in by the agents. By default,
    it will return the top-k results.

    The response for each book will contain the book title, author name, summary, and
    a source link.
    Ngoogle_books_api_keytop_k_resultsforbid)extrabefore)modevaluesreturnc                 2    t          |dd          }||d<   |S )z,Validate that api key exists in environment.r   GOOGLE_BOOKS_API_KEYr   )clsr   r   s      f/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/utilities/google_books.pyvalidate_environmentz*GoogleBooksAPIWrapper.validate_environment    s/      4*,B 
  
 *>%&    queryc                 f   d|fd| j         fd| j        ff}t          j        t          |          }|                                }|j        dk    r9|j        }|                    di                               dd          }d	| d
| S |                     ||                    dg                     S )Nq
maxResultskey)params   errormessagezInternal failurez)Unable to retrieve books got status code : items)r   r   requestsgetGOOGLE_BOOKS_API_URLjsonstatus_code_format)selfr   r!   responser*   coder#   s          r   runzGoogleBooksAPIWrapper.run+   s     %L4-.D-.
 < 4VDDD}} 3&&'DHHWb))--i9KLLENtNNuNNN ||E488GR#8#8999r   booksc           	      x   |sd| S dt          |           d| d}g }|                    |           d}|D ]m}|d         }|d         }|                     |d                   }	|d	         }
|d
         }| d| d|	 d|
 d}|d| z  }|                    |           |dz  }nd                    |          S )Nz.Sorry no books could be found for your query: z	Here are z" suggestions for books related to :   
volumeInfotitleauthorsdescriptioninfoLinkz. "z" by r%   
zYou can read more at z

)lenappend_format_authorsjoin)r-   r   r1   startresultsibookinfor6   r7   summarysourcedescs                r   r,   zGoogleBooksAPIWrapper._format@   s    	LKEKKKRCJJRR%RRRu 	 	D%DME**4	?;;G=)G*%F>>E>>>>7>>>D4F444DNN4   FAA{{7###r   r7   c                     t          |          dk    r|d         S d                    d                    |d d                   |d                   S )Nr4   r   z	{} and {}z, )r;   formatr>   )r-   r7   s     r   r=   z%GoogleBooksAPIWrapper._format_authorsY   sK    w<<11:!!$))GCRCL"9"972;GGGr   )__name__
__module____qualname____doc__r   r   str__annotations__GOOGLE_BOOKS_MAX_ITEM_SIZEr   intr	   model_configr
   classmethodr   r   r0   r   r,   r=    r   r   r   r      s        	 	 +/(3-...3M3333:  L _(###$ 4    [ $#: : : : : :*$S $ $# $ $ $ $2Ht H H H H H H Hr   r   )rM   typingr   r   r   r'   langchain_core.utilsr   pydanticr   r	   r
   rP   r)   r   rT   r   r   <module>rX      s    # # ' ' ' ' ' ' ' ' ' '  5 5 5 5 5 5 ; ; ; ; ; ; ; ; ; ; D OH OH OH OH OHI OH OH OH OH OHr   