U
    h                     @  s  d Z ddlmZ ddlmZ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 G dd dejZdddddZdddddddddZdddd d!Zddddd"d#d$Zdddddddd%d&Zd'S )(z\Utilities for Commands.

Common methods for Commands such as RunCommand and CompileCommand.
    )annotations)AbstractSetAnyCallableSequence)ipython_env)model_registry)parsed_args_lib)post_process_utils)llm_function)llmfn_input_utils)llmfn_output_row)llmfn_outputs)	unique_fnc                      sD   e Zd ZdZdd fddZdddd	Zd
ddddZ  ZS )_GroundTruthLLMFunctionz9LLMFunction that returns pre-generated ground truth data.zSequence[str]datac                   s   t  jd d || _d S )N)outputs_ipython_display_fn)super__init___data)selfr   	__class__ N/tmp/pip-unpacked-wheel-doshhd5e/google/generativeai/notebook/command_utils.pyr   %   s    z _GroundTruthLLMFunction.__init__zAbstractSet[str])returnc                 C  s   t i S N)	frozenset)r   r   r   r   get_placeholders)   s    z(_GroundTruthLLMFunction.get_placeholdersz*llmfn_input_utils.LLMFunctionInputs | Nonez(Sequence[llmfn_outputs.LLMFnOutputEntry])inputsr   c              	   C  s   t |}t| jt|kr6tdt| jt|g }tt| j|D ]D\}\}}tj	t
jjdt
jj|itd}|t
jd|||gd qJ|S )NzCGround truth should have same number of entries as inputs: {} vs {}r   )r   Zresult_type)Z
prompt_numZ	input_numprompt_varsZoutput_rows)r   Zto_normalized_inputslenr   RuntimeErrorformat	enumeratezipr   ZLLMFnOutputRowr   ZColumnNamesZ
RESULT_NUMZTEXT_RESULTstrappendZLLMFnOutputEntry)r   r    Znormalized_inputsoutputsidxvaluer!   Z
output_rowr   r   r   
_call_impl-   s:    
 
  z"_GroundTruthLLMFunction._call_impl)__name__
__module____qualname____doc__r   r   r,   __classcell__r   r   r   r   r   "   s   r   zipython_env.IPythonEnvz,Callable[[llmfn_outputs.LLMFnOutputs], None])envr   c                   s    fddS )Nc                   s     |  S r   )ZdisplayZas_pandas_dataframe)xr2   r   r   <lambda>P       z)_get_ipython_display_fn.<locals>.<lambda>r   r4   r   r4   r   _get_ipython_display_fnM   s    r7   zmodel_registry.ModelRegistryzipython_env.IPythonEnv | Nonezparsed_args_lib.ParsedArgsr'   z2Sequence[post_process_utils.ParsedPostProcessExpr]zllm_function.LLMFunction)modelsr2   parsed_argscell_contentpost_processing_fnsr   c           	      C  s`   |g}|rt |nd}tj| |j|j||d}|jrH|jdtjd}|D ]}|	|}qL|S )z8Creates an LLMFunction from Command.execute() arguments.N)model
model_argspromptsr   unique)namefn)
r7   r   ZLLMFunctionImplZ	get_modelZ
model_typer=   r?   Zadd_post_process_reorder_fnr   add_to_llm_function)	r8   r2   r9   r:   r;   r>   llmfn_outputs_display_fnllm_fnrA   r   r   r   create_llm_functionS   s     
 rE   z%tuple[str, Callable[[str, str], Any]]z"tuple[str, llm_function.CompareFn])name_and_simple_fnr   c                   s    | d   fdd}| d |fS )N   c                   s    |   |  S r   )Zresult_value)r3   yZ	simple_fnr   r   r5   s   r6   z,_convert_simple_compare_fn.<locals>.<lambda>r   r   )rF   Znew_fnr   rI   r   _convert_simple_compare_fno   s    rJ   )r2   r9   r;   r   c                 C  sJ   | rt | nd}tj|j|jdd |jD |d}|D ]}||}q6|S )?Creates an LLMCompareFunction from Command.execute() arguments.Nc                 S  s   g | ]}t |qS r   rJ   .0r3   r   r   r   
<listcomp>   s    z/create_llm_compare_function.<locals>.<listcomp>lhs_name_and_fnrhs_name_and_fnZcompare_name_and_fnsr   )r7   r   LLMCompareFunctionrQ   rR   
compare_fnrB   )r2   r9   r;   rC   
llm_cmp_fnrA   r   r   r   create_llm_compare_functionw   s    rV   c           	      C  sX   |rt |nd}t| ||||d}t|jd}tjd|fd|fdd |jD |d}|S )	rK   N)r8   r2   r9   r:   r;   r   actualground_truthc                 S  s   g | ]}t |qS r   rL   rM   r   r   r   rO      s    z,create_llm_eval_function.<locals>.<listcomp>rP   )r7   rE   r   rX   r   rS   rT   )	r8   r2   r9   r:   r;   rC   rD   Zground_truth_fnrU   r   r   r   create_llm_eval_function   s$    		rY   N)r0   
__future__r   typingr   r   r   r   Zgoogle.generativeai.notebookr   r   r	   r
   Z google.generativeai.notebook.libr   r   r   r   r   ZLLMFunctionr   r7   rE   rJ   rV   rY   r   r   r   r   <module>   s"   +