o
    /if!                     @   s  d dl mZ d dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZ d dlmZ d dlZd dlZd dlZd dlZd dlmZmZ d dlZd dlZd dlZd dlmZmZ d dlmZmZ dd	 Zd
eedf fddZ d
ej!fddZ"dd Z#de$fddZ%dd Z&de$fddZ'dd Z(de$fddZ)defddZ*de$fd d!Z+d
e$fd"d#Z,d
ee	 fd$d%Z-d&d' Z.d(d) Z/d*ed
efd+d,Z0d-d. Z1d/d0 Z2d1d2 Z3dEd4d5Z4d6ed
efd7d8Z5d9d: Z6d;d< Z7d=d> Z8d?d@ Z9dFdCdDZ:dS )G    )EnumN)AnyOptionalDictListUnion)Iterable)asdictis_dataclass)	KeyValuesKEY_FILE_HANDLER)LLMTestCaseLLMTestCaseParamsc                 C   s\   | d u r| S t | trdd t|  D }|S t | tr,tdd | D dd d}|S | S )Nc                 S      i | ]	\}}|t |qS  serialize_dict_with_sorting.0kvr   r   G/var/www/html/corbot_env/lib/python3.10/site-packages/deepeval/utils.py
<dictcomp>   s    z/serialize_dict_with_sorting.<locals>.<dictcomp>c                 S      g | ]}t |qS r   r   r   itemr   r   r   
<listcomp>       z/serialize_dict_with_sorting.<locals>.<listcomp>c                 S   s
   t | S N)jsondumps)xr   r   r   <lambda>    s   
 z-serialize_dict_with_sorting.<locals>.<lambda>)key)
isinstancedictsorteditemslist)objsorted_dictsorted_listr   r   r   r      s   


r   returnc                 C   s   t jt| ddS )NT)	sort_keys)r   r    r   )r)   r   r   r   	serialize'   s   r.   c                  C   sZ   zt  } |  rtd t  |  rtW | S  ty,   t  } t 	|  Y | S w )NzVEvent loop is already running. Applying nest_asyncio patch to allow async execution...)
asyncioget_event_loop
is_runningprintnest_asyncioapply	is_closedRuntimeErrornew_event_loopset_event_loop)loopr   r   r   get_or_create_event_loop+   s    r:   c                   C   (   zt jd dkrW dS W dS    Y dS )NDISABLE_DEEPEVAL_INDICATORYESFTosenvironr   r   r   r   show_indicator<      rA   c                 C       | r	dt jd< d S dt jd< d S )NNOr<   r=   r>   )rA   r   r   r   set_indicatorF      rE   c                   C   r;   )NIGNORE_DEEPEVAL_ERRORSr=   TFr>   r   r   r   r   should_ignore_errorsM   rB   rH   yesc                 C   rC   )Nr=   rG   rD   r>   rI   r   r   r   set_should_ignore_errorsW   rF   rK   c                   C   r;   )NENABLE_DEEPEVAL_CACHEr=   TFr>   r   r   r   r   should_use_cache^   rB   rM   c                 C   rC   )Nr=   rL   rD   r>   rJ   r   r   r   set_should_use_cacheh   rF   rN   api_keyc                 C   s&   ddl m} ttj|  |d d S )Nr   )r2   z2Congratulations! Login successful :raising_hands: )richr2   r   	write_keyr   API_KEY)rO   r2   r   r   r   login_with_confident_api_keyo   s   rS   flagc                 C   rC   )Nr=   DEEPEVALrD   r>   )rT   r   r   r   set_is_running_deepevalv   rF   rV   c                   C   s   zt jd dkW S    Y dS )NrU   r=   Fr>   r   r   r   r   get_is_running_deepeval}   s   rW   c                  C   s|   t ddkr<dt dd t dd t dd d} t dd	}|d
r(d}nd}|| d< |r6|dd	nd | d< | S d S )NGITHUB_ACTIONStruezGitHub ActionsGITHUB_ACTOR
GITHUB_SHAGITHUB_REPOSITORY)envactorsharepo
GITHUB_REF z
refs/pull/TFis_pull_requestzrefs/heads/branch)r?   getenv
startswithreplace)env_info
branch_refrc   r   r   r   get_deployment_configs   s   



rj   c                  C   s   t tj} | d uS r   )r   
fetch_datar   rR   )confident_api_keyr   r   r   is_confident   s   rm   c           	      C   s   dd }t | tr3t | ts3g }| D ]}|||}|t| | D ]
\}}t||| q%q|S || |}t| }| D ]
\}}t| || qA|S )Nc                 S   s4   i }|D ]}t | |rt| |||< t| | q|S r   )hasattrgetattrdelattr)
single_obj
drop_attrs
temp_attrsattrr   r   r   drop_attrs_from_single_obj   s   

z1drop_and_copy.<locals>.drop_attrs_from_single_obj)r$   r   strappendcopydeepcopyr'   setattr)	r)   rr   ru   copied_objsr   rs   rt   value
copied_objr   r   r   drop_and_copy   s   	


r~   instancec                 C   s   t | rdd t|  D S t| tr| jS t| tr#dd | D S t| tr1tdd | D S t| tr?dd |  D S | S )Nc                 S   r   r   dataclass_to_dictr   r   r   r   r          z%dataclass_to_dict.<locals>.<dictcomp>c                 S   r   r   r   r   r   r   r   r      r   z%dataclass_to_dict.<locals>.<listcomp>c                 s   s    | ]}t |V  qd S r   r   r   r   r   r   	<genexpr>   s    z$dataclass_to_dict.<locals>.<genexpr>c                 S   r   r   r   r   r   r   r   r      r   )	r
   r	   r'   r$   r   r|   r(   tupler%   )r   r   r   r   r      s   



r   c              
   C   sX   zt j| rt |  W d S W d S  ty+ } ztd|  W Y d }~d S d }~ww )NzAn error occurred: )r?   pathexistsremove	Exceptionr2   )	file_pather   r   r   delete_file_if_exists   s   r   c                 C   s,   t | t j| ddd }||jddd S )N   T)axiskeepdims)npexpmaxsum)r!   e_xr   r   r   softmax   s   r   c                 C   s4   t | |}t j| }t j|}|||  }|S r   )r   dotlinalgnorm)vector_avector_bdot_productnorm_anorm_b
similarityr   r   r   cosine_similarity   s
   r      c                    s,   |    fddtdt D }|S )Nc                    s"   g | ]}d  ||   qS ) )join)r   i
chunk_sizewordsr   r   r      s    zchunk_text.<locals>.<listcomp>r   )splitrangelen)textr   chunksr   r   r   
chunk_text   s
   r   r   c                 C   s\   dt dt fdd}dt dt fdd}dt dt fdd}dt dt fd	d
}||||| S )zLower text and remove punctuation, articles and extra whitespace.
    Copied from the [QuAC](http://quac.ai/) evaluation script found at
    https://s3.amazonaws.com/my89public/quac/scorer.pyr   r,   c                 S   s   t dd| S )Nz\b(a|an|the)\br   )resubr   r   r   r   remove_articles      z'normalize_text.<locals>.remove_articlesc                 S   s   d |  S )Nr   )r   r   r   r   r   r   white_space_fix   r   z'normalize_text.<locals>.white_space_fixc                    s"   t tj d fdd| D S )Nrb   c                 3   s    | ]	}| vr|V  qd S r   r   )r   chexcluder   r   r      s    z6normalize_text.<locals>.remove_punc.<locals>.<genexpr>)setstringpunctuationr   r   r   r   r   remove_punc   s   
z#normalize_text.<locals>.remove_puncc                 S   s   |   S r   )lowerr   r   r   r   r      s   znormalize_text.<locals>.lower)rv   )r   r   r   r   r   r   r   r   normalize_text   s
   r   c                  C   s:   t d dd ttdd D } t d t| S )N8nvidia-smi -q -d Memory |grep -A4 GPU|grep Free >tmp_smic                 S   s(   g | ]\}}t | d  d|  qS )      )intr   r   r   r!   r   r   r   r   
  s    z!get_freer_gpu.<locals>.<listcomp>tmp_smir)r?   system	enumerateopen	readlinesr   r   argmax)memory_availabler   r   r   get_freer_gpu  s   


r   c                    sF   t d dd ttdd D }t d t fdd|D S )Nr   c                 S   s$   g | ]\}}t | d  d qS )r   g      @)floatr   r   r   r   r   r     s    z&any_gpu_with_space.<locals>.<listcomp>r   r   c                    s   g | ]}| kqS r   r   )r   mem	gb_neededr   r   r     r   )r?   r   r   r   r   r   any)r   r   r   r   r   any_gpu_with_space  s   

r   c                 C   s"   t | std t | rd S d S )N   )r   timesleepr   r   r   r   wait_free_gpu  s   
r   c                  C   s2   t t } td|   dtjd< d|  tjd< | S )NzWill use GPU: %s1CUDA_LAUNCH_BLOCKINGrb   CUDA_VISIBLE_DEVICES)rv   r   r2   r?   r@   )	freer_gpur   r   r   select_freer_gpu!  s
   

r      Fc                 c   s\    |rt  | } g }| D ]}|| t||kr |}g }|V  qt|dkr,|V  d S d S )Nr   )tqdmrw   r   )iterator
batch_sizeprogressbatchelemfinal_batchr   r   r   batcher)  s   


r   )r   )r   F);enumr   rx   r?   r   r   typingr   r   r   r   r   collections.abcr   r   r   r   numpyr   dataclassesr	   r
   r/   r3   deepeval.key_handlerr   r   deepeval.test_caser   r   r   rv   r.   AbstractEventLoopr:   rA   boolrE   rH   rK   rM   rN   rS   rV   rW   rj   rm   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sV    



	

