o
    Zh                     @   s   d Z ddlmZmZmZ ddlm  mZ ddl	m
Z
 ddlmZ ddlmZmZ ddlmZ G d	d
 d
eZG dd deZG dd deZG dd de
eef ZdS )a+  Google GenerativeAI Attributed Question and Answering (AQA) service.

The GenAI Semantic AQA API is a managed end to end service that allows
developers to create responses grounded on specified passages based on
a user query. For more information visit:
https://developers.generativeai.google/guide
    )AnyListOptionalN)RunnableSerializable)RunnableConfig)	BaseModelPrivateAttr   )_genai_extensionc                   @   s&   e Zd ZU dZeed< ee ed< dS )AqaInputzInput to `GenAIAqa.invoke`.

    Attributes:
        prompt: The user's inquiry.
        source_passages: A list of passage that the LLM should use only to
            answer the user's inquiry.
    promptsource_passagesN)__name__
__module____qualname____doc__str__annotations__r    r   r   W/var/www/html/lang_env/lib/python3.10/site-packages/langchain_google_genai/genai_aqa.pyr      s   
 r   c                   @   s.   e Zd ZU dZeed< ee ed< eed< dS )	AqaOutputaD  Output from `GenAIAqa.invoke`.

    Attributes:
        answer: The answer to the user's inquiry.
        attributed_passages: A list of passages that the LLM used to construct
            the answer.
        answerable_probability: The probability of the question being answered
            from the provided passages.
    answerattributed_passagesanswerable_probabilityN)r   r   r   r   r   r   r   floatr   r   r   r   r       s
   
 
r   c                       s   e Zd ZU dZe Zejed< e Z	e
ed< e Zeej ed< e Zee ed< ejjjg dfde
deej d	ee d
eddf
 fddZdedee dejfddZ  ZS )	_AqaModelz(Wrapper for Google's internal AQA model._client_answer_style_safety_settings_temperatureNanswer_stylesafety_settingstemperaturekwargsreturnc                    s2   t  jdi | t | _|| _|| _|| _d S )Nr   )super__init__genaixZbuild_generative_servicer   r   r   r   )selfr    r!   r"   r#   	__class__r   r   r&   8   s
   

z_AqaModel.__init__r   passagesc                 C   s   t j||| j| j| j| jdS )N)r   r+   clientr    r!   r"   )r'   generate_answerr   r   r   r   )r(   r   r+   r   r   r   r-   E   s   z_AqaModel.generate_answer)r   r   r   r   r   r   genaiZGenerativeServiceClientr   r   intr   r   ZSafetySettingr   r   r   ZGenerateAnswerRequestZAnswerStyleZABSTRACTIVEr   r&   r   r'   ZGroundedAnswerr-   __classcell__r   r   r)   r   r   0   s6   
 r   c                	       sh   e Zd ZU dZe Zeed< dZe	ed< de
ddf fdd	Z	dd
edee de
defddZ  ZS )GenAIAqaa  Google's Attributed Question and Answering service.

    Given a user's query and a list of passages, Google's server will return
    a response that is grounded to the provided list of passages. It will not
    base the response on parametric memory.

    Attributes:
        answer_style: keyword-only argument. See
            `google.ai.generativelanguage.AnswerStyle` for details.
    r   r	   r    r#   r$   Nc                    s&   t  jdi | tdi || _dS )aJ  Construct a Google Generative AI AQA model.

        All arguments are optional.

        Args:
            answer_style: See
              `google.ai.generativelanguage.GenerateAnswerRequest.AnswerStyle`.
            safety_settings: See `google.ai.generativelanguage.SafetySetting`.
            temperature: 0.0 to 1.0.
        Nr   )r%   r&   r   r   )r(   r#   r)   r   r   r&   i   s   zGenAIAqa.__init__inputconfigc                 K   s6   | j j|j|jd}t|jdd |jD |jpddS )z:Generates a grounded response using the provided passages.)r   r+   c                 S   s   g | ]}|j qS r   )text).0Zpassager   r   r   
<listcomp>   s    z#GenAIAqa.invoke.<locals>.<listcomp>g        )r   r   r   )r   r-   r   r   r   r   r   r   )r(   r2   r3   r#   responser   r   r   invokew   s   zGenAIAqa.invoke)N)r   r   r   r   r   r   r   r   r    r/   r   r&   r   r   r   r   r8   r0   r   r   r)   r   r1   T   s   
 r1   )r   typingr   r   r   Zgoogle.ai.generativelanguageZaiZgenerativelanguager.   Zlangchain_core.runnablesr   Zlangchain_core.runnables.configr   Zpydanticr   r    r
   r'   r   r   r   r1   r   r   r   r   <module>   s    $