o
    !g                  	   @   s   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mZmZmZmZ d dlmZ d dlmZmZ ddgZdddZ		dded deded
efddZded d
efddZded
dfddZded
efddZdS )    )UnionDictAnyN)ChatMessageChatResponseCompletionResponse
ImageBlock	TextBlock)r   )ROLES_FROM_GEMINIROLES_TO_GEMINIzgemini-2.0-flash-thinkingzgemini-2.0-flash-lite	candidateglm.Candidatereturnc                 C   sP   | j  }dkr&|j}|dkrttdd | j}|d| 7 }td| d S )N      c                 S   s
   | j dkS )Nr   )probability)sr r   _/mnt/skqttb/ctump_chatbot/chatbot/lib/python3.10/site-packages/llama_index/llms/gemini/utils.py<lambda>   s   
 z*_error_if_finished_early.<locals>.<lambda> zResponse was terminated early: )finish_reasonnamelistfiltersafety_ratingsRuntimeError)r   r   reasonrelevant_safetyr   r   r   _error_if_finished_early   s   r   response)z#genai.types.GenerateContentResponsez(genai.types.AsyncGenerateContentResponsetextdeltac                 C   s   | j d }t| i t||t| j| j}| jr)t| j| j|d< t|d ur0|n| j|d ur;||dS | j|dS )Nr   usage_metadata)r!   r"   raw)
candidatesr   typeto_dictprompt_feedbackr#   r   r!   )r    r!   r"   top_candidater$   r   r   r   completion_from_gemini_response(   s&   


r*   c              	   C   s   | j d }t| i t||t| j| j}| jr)t| j| j|d< t|jj }z| j	}W n t
tfyA   d }Y nw i }| jD ]}|j }r]d|vrVg |d< |d | qGtt|||d||dS )Nr   r#   
tool_calls)rolecontentadditional_kwargs)messager$   r.   )r%   r   r&   r'   r(   r#   r
   r-   r,   r!   
ValueErrorAttributeErrorpartsfunction_callappendr   r   )r    r)   r$   r,   r!   r.   partfnr   r   r   chat_from_gemini_responseB   s>   




r7   r/   zgenai.types.ContentDictc                 C   s   g }| j D ]5}t|tr|jr|d|ji qt|tr/|jdd }||j|d qdt	|j
 }t|| jdg D ]}|| qBt| j |dS )zJConvert ChatMessages to Gemini-specific history, including ImageDocuments.r!   F)	as_base64)	mime_typedataz Unsupported content block type: r+   )r,   r2   )blocks
isinstancer	   r!   r4   r   resolve_imagereadimage_mimetyper&   __name__r0   r.   getr   r,   )r/   r2   blockbase64_bytesmsg	tool_callr   r   r   chat_message_to_geminin   s(   


rF   modelc                 C   s   t D ]	}|| v r dS qdS )NFT)'MODELS_WITHOUT_FUNCTION_CALLING_SUPPORT)rG   
model_namer   r   r   is_function_calling_model   s
   rJ   )r   r   r   N)NN)typingr   r   r   google.ai.generativelanguageaigenerativelanguageglmgoogle.generativeaigenerativeaigenai llama_index.core.base.llms.typesr   r   r   r   r	   &llama_index.core.multi_modal_llms.base'llama_index.core.utilities.gemini_utilsr
   r   rH   r   strr*   r7   rF   boolrJ   r   r   r   r   <module>   s@    


,